aboutsummaryrefslogtreecommitdiff
path: root/enc.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-10-23 16:56:08 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-10-23 16:56:08 +0200
commit2e95c9cc2b28517d024a7556bae32dbd34f1c510 (patch)
tree5601179381bc19252f8d35416b8fdb2e986dcb4a /enc.go
parent17ff78ec85558342223cc9d03099bd87cbf28537 (diff)
Encapsulate Base64 encoder/decoder
Diffstat (limited to 'enc.go')
-rw-r--r--enc.go28
1 files changed, 12 insertions, 16 deletions
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) }