forked from keybase/client
/
crypt.go
35 lines (30 loc) · 952 Bytes
/
crypt.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package storage
import (
"github.com/keybase/client/go/engine"
"github.com/keybase/client/go/libkb"
"golang.org/x/net/context"
)
// ***
// If we change this, make sure to update libkb.EncryptionReasonChatLocalStorage as well!
// Also see the encrypteddb package's cryptoVersion.
// ***
const cryptoVersion = 1
func getSecretBoxKey(ctx context.Context, g *libkb.GlobalContext, getSecretUI func() libkb.SecretUI) (fkey [32]byte, err error) {
// Get secret device key
encKey, err := engine.GetMySecretKey(ctx, g, getSecretUI, libkb.DeviceEncryptionKeyType,
"encrypt chat message")
if err != nil {
return fkey, err
}
kp, ok := encKey.(libkb.NaclDHKeyPair)
if !ok || kp.Private == nil {
return fkey, libkb.KeyCannotDecryptError{}
}
// Derive symmetric key from device key
skey, err := encKey.SecretSymmetricKey(libkb.EncryptionReasonChatLocalStorage)
if err != nil {
return fkey, err
}
copy(fkey[:], skey[:])
return fkey, nil
}