From b3c5a8dd24292700e6aafbd10cb14e4291c91df8 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 23 Oct 2016 16:20:40 +0200 Subject: Read/Write whole struct --- enc.go | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/enc.go b/enc.go index f76123e..42b24d9 100644 --- a/enc.go +++ b/enc.go @@ -6,7 +6,6 @@ import ( "encoding/base64" "encoding/binary" "errors" - "io" "golang.org/x/crypto/ed25519" ) @@ -21,33 +20,23 @@ type EncKey struct { SecKey [ed25519.PrivateKeySize]byte } +var ErrChecksum = errors.New("checksum mismatch") + 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[:]) + err := binary.Read(dec, binary.BigEndian, v) sum := sha512.Sum512(v.SecKey[:]) if !bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:]) { - return errors.New("checksum mismatch") + err = ErrChecksum } - return nil + return err } 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[:]) + err := binary.Write(enc, binary.BigEndian, v) enc.Close() - return buf.Bytes(), nil + return buf.Bytes(), err } -- cgit v1.2.3