From 2e95c9cc2b28517d024a7556bae32dbd34f1c510 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 23 Oct 2016 16:56:08 +0200 Subject: Encapsulate Base64 encoder/decoder --- enc.go | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) (limited to 'enc.go') diff --git a/enc.go b/enc.go index 42b24d9..fac8298 100644 --- a/enc.go +++ b/enc.go @@ -3,8 +3,6 @@ package main import ( "bytes" "crypto/sha512" - "encoding/base64" - "encoding/binary" "errors" "golang.org/x/crypto/ed25519" @@ -22,21 +20,19 @@ type EncKey struct { var ErrChecksum = errors.New("checksum mismatch") -func (v *EncKey) Unmarshal(b []byte) error { - buf := bytes.NewBuffer(b) - dec := base64.NewDecoder(base64.StdEncoding, buf) - err := binary.Read(dec, binary.BigEndian, v) +func (v *EncKey) Valid() bool { sum := sha512.Sum512(v.SecKey[:]) - if !bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:]) { - err = ErrChecksum - } - return err + return bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:]) } -func (v *EncKey) Marshal() ([]byte, error) { - buf := new(bytes.Buffer) - enc := base64.NewEncoder(base64.StdEncoding, buf) - err := binary.Write(enc, binary.BigEndian, v) - enc.Close() - return buf.Bytes(), err +func (v *EncKey) Unmarshal(b []byte) error { + if err := DecodeBase64(v, b); err != nil { + return err + } + if !v.Valid() { + return ErrChecksum + } + return nil } + +func (v *EncKey) Marshal() ([]byte, error) { return EncodeBase64(v) } -- cgit v1.2.3