aboutsummaryrefslogtreecommitdiff
path: root/keys.go
diff options
context:
space:
mode:
Diffstat (limited to 'keys.go')
-rw-r--r--keys.go29
1 files changed, 29 insertions, 0 deletions
diff --git a/keys.go b/keys.go
index 85675e2..c340e96 100644
--- a/keys.go
+++ b/keys.go
@@ -2,6 +2,7 @@ package main
import (
"bytes"
+ "crypto/rand"
"crypto/sha512"
"encoding/binary"
@@ -97,3 +98,31 @@ func Marshal(v interface{}) ([]byte, error) {
}
return buf.Bytes(), nil
}
+
+func NewKey() (PubKey, EncKey, error) {
+ pub, sec, err := ed25519.GenerateKey(rand.Reader)
+ if err != nil {
+ return PubKey{}, EncKey{}, err
+ }
+ var keyNum uint64
+ if err := binary.Read(rand.Reader, binary.BigEndian, &keyNum); err != nil {
+ return PubKey{}, EncKey{}, err
+ }
+ pubKey := PubKey{
+ PKAlg: PKAlg,
+ KeyNum: keyNum,
+ }
+ copy(pubKey.PubKey[:], pub)
+
+ encKey := EncKey{
+ PKAlg: PKAlg,
+ KDFAlg: KDFAlg,
+ KeyNum: keyNum,
+ }
+ copy(encKey.SecKey[:], sec)
+ checkSum := sha512.Sum512(sec)
+ copy(encKey.Checksum[:], checkSum[:len(encKey.Checksum)])
+ rand.Read(encKey.Salt[:])
+
+ return pubKey, encKey, nil
+}