From ab444fef442808f7ff41f70992f19f4b2417841d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 18 Sep 2016 13:23:50 +0200 Subject: ReadFull --- enc.go | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 enc.go (limited to 'enc.go') diff --git a/enc.go b/enc.go new file mode 100644 index 0000000..32d9aa3 --- /dev/null +++ b/enc.go @@ -0,0 +1,49 @@ +package main + +import ( + "bytes" + "io" + //"encoding/base64" + "encoding/binary" + + "dim13.org/signify/base64" + + "golang.org/x/crypto/ed25519" +) + +type EncKey struct { + PKAlg [2]byte + KDFAlg [2]byte + KDFRounds uint32 // network byte order + Salt [16]byte + Checksum [8]byte + KeyNum [KeyNumLen]byte + SecKey [ed25519.PrivateKeySize]byte +} + +func (v *EncKey) Unmarshal(b []byte) error { + buf := bytes.NewBuffer(b) + dec := base64.NewDecoder(base64.StdEncoding, buf) + io.ReadFull(dec, v.PKAlg[:]) + io.ReadFull(dec, v.KDFAlg[:]) + binary.Read(dec, binary.BigEndian, &v.KDFRounds) + io.ReadFull(dec, v.Salt[:]) + io.ReadFull(dec, v.Checksum[:]) + io.ReadFull(dec, v.KeyNum[:]) + io.ReadFull(dec, v.SecKey[:]) + return nil +} + +func (v *EncKey) Marshal() ([]byte, error) { + buf := new(bytes.Buffer) + enc := base64.NewEncoder(base64.StdEncoding, buf) + enc.Write(v.PKAlg[:]) + enc.Write(v.KDFAlg[:]) + binary.Write(enc, binary.BigEndian, v.KDFRounds) + enc.Write(v.Salt[:]) + enc.Write(v.Checksum[:]) + enc.Write(v.KeyNum[:]) + enc.Write(v.SecKey[:]) + enc.Close() + return buf.Bytes(), nil +} -- cgit v1.2.3