aboutsummaryrefslogtreecommitdiff
path: root/gen.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-16 14:25:23 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-16 14:25:23 +0200
commit73f97fb13581b2657dae352d46c0725553a5b894 (patch)
treedfd2ad4133309cddeb228ed62f3fca04061d7f5a /gen.go
parent670abdb08e34d0d5a5f08af0b85e434d4a1ff18f (diff)
NewKey
Diffstat (limited to 'gen.go')
-rw-r--r--gen.go57
1 files changed, 39 insertions, 18 deletions
diff --git a/gen.go b/gen.go
index fcd6c95..cb71213 100644
--- a/gen.go
+++ b/gen.go
@@ -8,24 +8,50 @@ import (
"golang.org/x/crypto/ed25519"
)
-func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error {
+func NewKey(rounds int, xorkey []byte) (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,
+ KDFRounds: uint32(rounds),
+ KeyNum: keyNum,
+ }
+ copy(encKey.SecKey[:], sec)
+ checkSum := sha512.Sum512(sec)
+ copy(encKey.Checksum[:], checkSum[:len(encKey.Checksum)])
+ rand.Read(encKey.Salt[:])
+
+ if rounds > 0 && xorkey != nil {
+ encKey.XOR(xorkey)
+ }
+
+ return pubKey, encKey, nil
+}
+
+func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error {
+ pubKey, encKey, err := NewKey(rounds, nil)
+ if err != nil {
return err
}
- digest := sha512.Sum512(sec)
- enckey := new(EncKey)
- copy(enckey.PKAlg[:], PKAlg[:])
- copy(enckey.KDFAlg[:], KDFAlg[:])
- copy(enckey.SecKey[:], sec[:])
- enckey.KDFRounds = uint32(rounds)
- // KDF
- binary.Read(rand.Reader, binary.BigEndian, &enckey.KeyNum)
- rand.Read(enckey.Salt[:])
- copy(enckey.Checksum[:], digest[:len(enckey.Checksum)])
+ if rounds > 0 {
+ // KDF
+ }
- sb64, err := Marshal(enckey)
+ sb64, err := Marshal(encKey)
if err != nil {
return err
}
@@ -38,12 +64,7 @@ func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error {
return err
}
- pubkey := new(PubKey)
- copy(pubkey.PKAlg[:], PKAlg[:])
- pubkey.KeyNum = enckey.KeyNum
- copy(pubkey.PubKey[:], pub[:])
-
- pb64, err := Marshal(enckey)
+ pb64, err := Marshal(pubKey)
if err != nil {
return err
}