aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--file.go23
-rw-r--r--gen.go4
-rw-r--r--keys.go10
-rw-r--r--keys_test.go49
-rw-r--r--main.go6
5 files changed, 52 insertions, 40 deletions
diff --git a/file.go b/file.go
index 4f72542..db2bd82 100644
--- a/file.go
+++ b/file.go
@@ -3,6 +3,7 @@ package main
import (
"bufio"
"bytes"
+ "encoding/base64"
"errors"
"fmt"
"io"
@@ -13,8 +14,8 @@ import (
type File struct {
Comment string
- B64 []byte
- Body []byte
+ RawKey []byte
+ Message []byte
}
const (
@@ -46,15 +47,19 @@ func (f *File) ReadFrom(r io.Reader) error {
if err := checkComment(comment); err != nil {
return err
}
- f.Comment = strings.TrimSpace(comment[len(commentHdr):])
+ f.Comment = strings.TrimSpace(comment[len(commentHdr)+1:])
- b64, err := buf.ReadBytes('\n')
+ b64, err := buf.ReadString('\n')
if err != nil {
return err
}
- f.B64 = bytes.TrimSpace(b64)
- f.Body, err = ioutil.ReadAll(buf)
+ f.RawKey, err = base64.StdEncoding.DecodeString(b64)
+ if err != nil {
+ return err
+ }
+
+ f.Message, err = ioutil.ReadAll(buf)
if err != nil {
return err
}
@@ -89,9 +94,9 @@ func (f File) Bytes() ([]byte, error) {
func (f File) WriteTo(w io.Writer) error {
fmt.Fprintln(w, commentHdr, f.Comment)
- fmt.Fprintln(w, string(f.B64))
- if f.Body != nil {
- w.Write(f.Body)
+ fmt.Fprintln(w, base64.StdEncoding.EncodeToString(f.RawKey))
+ if f.Message != nil {
+ w.Write(f.Message)
}
return nil
}
diff --git a/gen.go b/gen.go
index cb71213..918a508 100644
--- a/gen.go
+++ b/gen.go
@@ -58,7 +58,7 @@ func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error {
sfile := File{
Comment: comment + " secret key",
- B64: sb64,
+ RawKey: sb64,
}
if err := sfile.WriteFile(seckeyfile, SecMode); err != nil {
return err
@@ -70,7 +70,7 @@ func Generate(pubkeyfile, seckeyfile, comment string, rounds int) error {
}
pfile := File{
Comment: comment + " public key",
- B64: pb64,
+ RawKey: pb64,
}
if err := pfile.WriteFile(pubkeyfile, PubMode); err != nil {
return err
diff --git a/keys.go b/keys.go
index 53dd536..b48302e 100644
--- a/keys.go
+++ b/keys.go
@@ -3,7 +3,6 @@ package main
import (
"bytes"
"crypto/sha512"
- "encoding/base64"
"encoding/binary"
"dim13.org/signify/bhash"
@@ -58,8 +57,7 @@ func (v *EncKey) IsValid(pass []byte) bool {
func Unmarshal(b []byte, v interface{}) error {
buf := bytes.NewReader(b)
- dec := base64.NewDecoder(base64.StdEncoding, buf)
- if err := binary.Read(dec, binary.BigEndian, v); err != nil {
+ if err := binary.Read(buf, binary.BigEndian, v); err != nil {
return err
}
return nil
@@ -67,11 +65,7 @@ func Unmarshal(b []byte, v interface{}) error {
func Marshal(v interface{}) ([]byte, error) {
buf := new(bytes.Buffer)
- enc := base64.NewEncoder(base64.StdEncoding, buf)
- if err := binary.Write(enc, binary.BigEndian, v); err != nil {
- return nil, err
- }
- if err := enc.Close(); err != nil {
+ if err := binary.Write(buf, binary.BigEndian, v); err != nil {
return nil, err
}
return buf.Bytes(), nil
diff --git a/keys_test.go b/keys_test.go
index 2b44110..71f27f3 100644
--- a/keys_test.go
+++ b/keys_test.go
@@ -2,36 +2,50 @@ package main
import (
"bytes"
+ "encoding/base64"
"testing"
)
+func decode(s string) ([]byte, error) {
+ return base64.StdEncoding.DecodeString(s)
+}
+
func TestUnmarshalSig(t *testing.T) {
- b64sig := []byte(`RWRbOC0bBf7abaGwGtq45KLDK63tgcF7CO4qTZSlTKCSbZTYlDfFm/DISQ60u+/jEzrk22suvXXAEsxQTe2xUOfV90get1YRGQo=`)
+ raw, err := decode(`RWRbOC0bBf7abaGwGtq45KLDK63tgcF7CO4qTZSlTKCSbZTYlDfFm/DISQ60u+/jEzrk22suvXXAEsxQTe2xUOfV90get1YRGQo=`)
+ if err != nil {
+ t.Fatal(err)
+ }
v := new(Sig)
- Unmarshal(b64sig, v)
+ Unmarshal(raw, v)
out, _ := Marshal(v)
- if !bytes.Equal(b64sig, out) {
- t.Errorf("want %v, got %v", b64sig, out)
+ if !bytes.Equal(raw, out) {
+ t.Errorf("want %v, got %v", raw, out)
}
}
func TestUnmarshalPub(t *testing.T) {
- b64pub := []byte(`RWRbOC0bBf7abfanaXuTYfCa6+YO69Kxyz8RD5nL/3Ta7umY6iOwnBrG`)
+ raw, err := decode(`RWRbOC0bBf7abfanaXuTYfCa6+YO69Kxyz8RD5nL/3Ta7umY6iOwnBrG`)
+ if err != nil {
+ t.Fatal(err)
+ }
v := new(PubKey)
- Unmarshal(b64pub, v)
+ Unmarshal(raw, v)
out, _ := Marshal(v)
- if !bytes.Equal(b64pub, out) {
- t.Errorf("want %v, got %v", b64pub, out)
+ if !bytes.Equal(raw, out) {
+ t.Errorf("want %v, got %v", raw, out)
}
}
func TestUnmarshalEnc(t *testing.T) {
- b64enc := []byte(`RWRCSwAAAACzJBN2gC5//jVvDiV76rs4m2aKXkljqDpbOC0bBf7abZhV/Zygr6b0KIbSI56JQutwzsQeouxnnHuVTZp3IW4M9qdpe5Nh8Jrr5g7r0rHLPxEPmcv/dNru6ZjqI7CcGsY=`)
+ raw, err := decode(`RWRCSwAAAACzJBN2gC5//jVvDiV76rs4m2aKXkljqDpbOC0bBf7abZhV/Zygr6b0KIbSI56JQutwzsQeouxnnHuVTZp3IW4M9qdpe5Nh8Jrr5g7r0rHLPxEPmcv/dNru6ZjqI7CcGsY=`)
+ if err != nil {
+ t.Fatal(err)
+ }
v := new(EncKey)
- Unmarshal(b64enc, v)
+ Unmarshal(raw, v)
out, _ := Marshal(v)
- if !bytes.Equal(b64enc, out) {
- t.Errorf("want %v, got %v", b64enc, out)
+ if !bytes.Equal(raw, out) {
+ t.Errorf("want %v, got %v", raw, out)
}
if !v.IsValid(nil) {
t.Error("invalid %+v", v)
@@ -39,12 +53,15 @@ func TestUnmarshalEnc(t *testing.T) {
}
func TestUnmarshalKDF(t *testing.T) {
- b64enc := []byte(`RWRCSwAAACoXv4r2lp3RYYLEWZRsY+1Z+1mJtEScNBaKdOKcMdhUHrztnf8a4sUNGY19MoV3wX2cyW2Mn1MduKxi9s3Se070TGF0IZG/hH4SKiNUYi+yi1mandWAwmhY3ahIHApigTk=`)
+ raw, err := decode(`RWRCSwAAACoXv4r2lp3RYYLEWZRsY+1Z+1mJtEScNBaKdOKcMdhUHrztnf8a4sUNGY19MoV3wX2cyW2Mn1MduKxi9s3Se070TGF0IZG/hH4SKiNUYi+yi1mandWAwmhY3ahIHApigTk=`)
+ if err != nil {
+ t.Fatal(err)
+ }
v := new(EncKey)
- Unmarshal(b64enc, v)
+ Unmarshal(raw, v)
out, _ := Marshal(v)
- if !bytes.Equal(b64enc, out) {
- t.Errorf("want %v, got %v", b64enc, out)
+ if !bytes.Equal(raw, out) {
+ t.Errorf("want %v, got %v", raw, out)
}
if !v.IsValid([]byte("test")) {
t.Errorf("invalid %+v", v)
diff --git a/main.go b/main.go
index 4d1cf71..2742f72 100644
--- a/main.go
+++ b/main.go
@@ -51,11 +51,7 @@ func main() {
*/
s, _ := base64.StdEncoding.DecodeString("RWRCSwAAAACzJBN2gC5//jVvDiV76rs4m2aKXkljqDpbOC0bBf7abZhV/Zygr6b0KIbSI56JQutwzsQeouxnnHuVTZp3IW4M9qdpe5Nh8Jrr5g7r0rHLPxEPmcv/dNru6ZjqI7CcGsY=")
- fmt.Printf("%v\n", s)
- ss := &Sig{
- PKAlg: PKAlg,
- }
- ms, _ := Marshal(ss)
+ ms, _ := Marshal(s)
fmt.Println(string(ms))
}