From 73f97fb13581b2657dae352d46c0725553a5b894 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 16 Apr 2017 14:25:23 +0200 Subject: NewKey --- gen.go | 57 +++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 18 deletions(-) (limited to 'gen.go') 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 } -- cgit v1.2.3