forked from keybase/client
/
kex2_secret.go
45 lines (35 loc) · 914 Bytes
/
kex2_secret.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
36
37
38
39
40
41
42
43
44
45
// Copyright 2015 Keybase, Inc. All rights reserved. Use of
// this source code is governed by the included BSD license.
package libkb
import (
"strings"
"golang.org/x/crypto/scrypt"
"github.com/keybase/client/go/kex2"
)
type Kex2Secret struct {
phrase string
secret kex2.Secret
}
func NewKex2Secret() (*Kex2Secret, error) {
words, err := SecWordList(Kex2PhraseEntropy)
if err != nil {
return nil, err
}
phrase := strings.Join(words, " ")
return NewKex2SecretFromPhrase(phrase)
}
func NewKex2SecretFromPhrase(phrase string) (*Kex2Secret, error) {
key, err := scrypt.Key([]byte(phrase), nil, Kex2ScryptCost, Kex2ScryptR, Kex2ScryptP, Kex2ScryptKeylen)
if err != nil {
return nil, err
}
res := &Kex2Secret{phrase: phrase}
copy(res.secret[:], key)
return res, nil
}
func (s *Kex2Secret) Secret() kex2.Secret {
return s.secret
}
func (s *Kex2Secret) Phrase() string {
return s.phrase
}