aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-10-23 16:20:40 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-10-23 16:20:40 +0200
commitb3c5a8dd24292700e6aafbd10cb14e4291c91df8 (patch)
treedeed9c96e7edde972befe30e9570351088d399e6
parent9023f20b561505be6314bf852ce1863891bdd6b7 (diff)
Read/Write whole struct
-rw-r--r--enc.go25
1 files 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
}