aboutsummaryrefslogtreecommitdiff
path: root/enc.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2016-09-18 13:23:50 +0200
committerDimitri Sokolyuk <demon@dim13.org>2016-09-18 13:23:50 +0200
commitab444fef442808f7ff41f70992f19f4b2417841d (patch)
tree7202ce2b0e4ca9ea52eaed908a3eb4e512592017 /enc.go
parent753387164ce9d0b610ceae93830cfe1f26f0fdd2 (diff)
ReadFull
Diffstat (limited to 'enc.go')
-rw-r--r--enc.go49
1 files changed, 49 insertions, 0 deletions
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
+}