aboutsummaryrefslogtreecommitdiff
path: root/key/key.go
diff options
context:
space:
mode:
Diffstat (limited to 'key/key.go')
-rw-r--r--key/key.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/key/key.go b/key/key.go
index 3c3e98b..bddd6ac 100644
--- a/key/key.go
+++ b/key/key.go
@@ -11,6 +11,7 @@ import (
"golang.org/x/crypto/ed25519"
)
+// DefaultRounds of KDF
const DefaultRounds = 42
var (
@@ -27,10 +28,12 @@ var (
kdfAlg = [2]byte{'B', 'K'}
)
+// KeyDeriver returns a derived key from passphrase
type KeyDeriver interface {
DeriveKey(salt []byte, rounds int, length int) ([]byte, error)
}
+// Generate a new key pair
func Generate(der KeyDeriver) (*Pub, *Enc, error) {
pubKey, encKey, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
@@ -44,8 +47,12 @@ func Generate(der KeyDeriver) (*Pub, *Enc, error) {
checkSum := sha512.Sum512(encKey)
copy(enc.Checksum[:], checkSum[:len(enc.Checksum)])
- rand.Read(enc.Salt[:])
- rand.Read(enc.KeyNum[:])
+ if _, err := rand.Read(enc.Salt[:]); err != nil {
+ return err
+ }
+ if _, err := rand.Read(enc.KeyNum[:]); err != nil {
+ return err
+ }
// Pbdkf
if der != nil {