From cbcc151ff94e89866d3c889f2346b6ba036e39fa Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 18 Apr 2017 23:32:32 +0200 Subject: ... --- gen.go | 80 ------------------------------------------------------------- gen_test.go | 12 ---------- keys.go | 29 ++++++++++++++++++++++ main.go | 43 +++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 92 deletions(-) delete mode 100644 gen.go delete mode 100644 gen_test.go diff --git a/gen.go b/gen.go deleted file mode 100644 index 40367de..0000000 --- a/gen.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "crypto/rand" - "crypto/sha512" - "encoding/binary" - "fmt" - - "golang.org/x/crypto/ed25519" -) - -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 -} - -func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error { - pubKey, encKey, err := NewKey() - if err != nil { - return err - } - - if rounds > 0 { - pass, err := AskPassword(nil, true) - if err != nil { - return err - } - encKey.Kdf(pass, rounds) - } - - sb64, err := Marshal(encKey) - if err != nil { - return err - } - - sfile := File{ - Comment: fmt.Sprintf("%s secret key", comment), - RawKey: sb64, - } - if err := sfile.WriteFile(seckeyfile, SecMode); err != nil { - return err - } - - pb64, err := Marshal(pubKey) - if err != nil { - return err - } - pfile := File{ - Comment: fmt.Sprintf("%s public key", comment), - RawKey: pb64, - } - if err := pfile.WriteFile(pubkeyfile, PubMode); err != nil { - return err - } - - return nil -} diff --git a/gen_test.go b/gen_test.go deleted file mode 100644 index 8f8bbba..0000000 --- a/gen_test.go +++ /dev/null @@ -1,12 +0,0 @@ -package main - -import "testing" - -func TestNewKey(t *testing.T) { - pub, sec, err := NewKey() - if err != nil { - t.Error(err) - } - t.Log(pub) - t.Log(sec) -} 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 +} diff --git a/main.go b/main.go index db4579f..dddc624 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "flag" + "fmt" "log" ) @@ -50,3 +51,45 @@ func main() { case *verify: } } + +func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error { + pubKey, encKey, err := NewKey() + if err != nil { + return err + } + + if rounds > 0 { + pass, err := AskPassword(nil, true) + if err != nil { + return err + } + encKey.Kdf(pass, rounds) + } + + sb64, err := Marshal(encKey) + if err != nil { + return err + } + + sfile := File{ + Comment: fmt.Sprintf("%s secret key", comment), + RawKey: sb64, + } + if err := sfile.WriteFile(seckeyfile, SecMode); err != nil { + return err + } + + pb64, err := Marshal(pubKey) + if err != nil { + return err + } + pfile := File{ + Comment: fmt.Sprintf("%s public key", comment), + RawKey: pb64, + } + if err := pfile.WriteFile(pubkeyfile, PubMode); err != nil { + return err + } + + return nil +} -- cgit v1.2.3