aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--key/key.go25
-rw-r--r--key/key_test.go24
-rw-r--r--main.go20
3 files changed, 29 insertions, 40 deletions
diff --git a/key/key.go b/key/key.go
index 57978e0..c7581b8 100644
--- a/key/key.go
+++ b/key/key.go
@@ -7,8 +7,6 @@ import (
"encoding/binary"
"errors"
- "dim13.org/signify/bhash"
-
"golang.org/x/crypto/ed25519"
)
@@ -94,21 +92,6 @@ func (v *Enc) Check() error {
return nil
}
-func (e *Enc) Kdf(ask func() (string, error)) error {
- if e.KDFRounds == 0 {
- return nil
- }
- pass, err := ask()
- if err != nil {
- return err
- }
- xor := bhash.Pbkdf([]byte(pass), e.Salt[:], int(e.KDFRounds), len(e.Key))
- for i := range xor {
- e.Key[i] ^= xor[i]
- }
- return e.Check()
-}
-
func Unmarshal(b []byte, v interface{}) error {
buf := bytes.NewReader(b)
if err := binary.Read(buf, binary.BigEndian, v); err != nil {
@@ -125,14 +108,14 @@ func Marshal(v interface{}) ([]byte, error) {
return buf.Bytes(), nil
}
-func NewKey() (Pub, Enc, error) {
+func NewKey() (*Pub, *Enc, error) {
pub, sec, err := ed25519.GenerateKey(rand.Reader)
if err != nil {
- return Pub{}, Enc{}, err
+ return nil, nil, err
}
- pubKey := Pub{PKAlg: pkAlg}
- encKey := Enc{PKAlg: pkAlg, KDFAlg: kdfAlg, KDFRounds: DefaultRounds}
+ pubKey := &Pub{PKAlg: pkAlg}
+ encKey := &Enc{PKAlg: pkAlg, KDFAlg: kdfAlg, KDFRounds: DefaultRounds}
copy(pubKey.Key[:], pub)
copy(encKey.Key[:], sec)
diff --git a/key/key_test.go b/key/key_test.go
index ef1c09c..8fd93cf 100644
--- a/key/key_test.go
+++ b/key/key_test.go
@@ -17,6 +17,9 @@ func TestUnmarshalSig(t *testing.T) {
}
v := new(Sig)
Unmarshal(raw, v)
+ if err := v.Check(); err != nil {
+ t.Error(err)
+ }
out, _ := Marshal(v)
if !bytes.Equal(raw, out) {
t.Errorf("want %v, got %v", raw, out)
@@ -30,6 +33,9 @@ func TestUnmarshalPub(t *testing.T) {
}
v := new(Pub)
Unmarshal(raw, v)
+ if err := v.Check(); err != nil {
+ t.Error(err)
+ }
out, _ := Marshal(v)
if !bytes.Equal(raw, out) {
t.Errorf("want %v, got %v", raw, out)
@@ -43,27 +49,11 @@ func TestUnmarshalEnc(t *testing.T) {
}
v := new(Enc)
Unmarshal(raw, v)
- out, _ := Marshal(v)
- if !bytes.Equal(raw, out) {
- t.Errorf("want %v, got %v", raw, out)
- }
- if err := v.Kdf(func() (string, error) { return "", nil }); err != nil {
+ if err := v.Check(); err != nil {
t.Error(err)
}
-}
-
-func TestUnmarshalEncKDF(t *testing.T) {
- raw, err := decode("RWRCSwAAACoXv4r2lp3RYYLEWZRsY+1Z+1mJtEScNBaKdOKcMdhUHrztnf8a4sUNGY19MoV3wX2cyW2Mn1MduKxi9s3Se070TGF0IZG/hH4SKiNUYi+yi1mandWAwmhY3ahIHApigTk=")
- if err != nil {
- t.Fatal(err)
- }
- v := new(Enc)
- Unmarshal(raw, v)
out, _ := Marshal(v)
if !bytes.Equal(raw, out) {
t.Errorf("want %v, got %v", raw, out)
}
- if err := v.Kdf(func() (string, error) { return "test", nil }); err != nil {
- t.Error(err)
- }
}
diff --git a/main.go b/main.go
index 4d131e1..5134a6a 100644
--- a/main.go
+++ b/main.go
@@ -7,6 +7,7 @@ import (
"log"
"dim13.org/signify/ask"
+ "dim13.org/signify/bhash"
"dim13.org/signify/file"
"dim13.org/signify/key"
)
@@ -70,7 +71,7 @@ func Generate(pubFile, encFile, comment string, nopass bool) error {
if nopass {
encKey.KDFRounds = 0
}
- encKey.Kdf(ask.Confirmed)
+ Kdf(encKey, ask.Confirmed)
encRaw, err := key.Marshal(encKey)
if err != nil {
@@ -109,7 +110,7 @@ func OpenEnc(fname string) (*key.Enc, error) {
if err := key.Unmarshal(block.Bytes, encKey); err != nil {
return nil, err
}
- encKey.Kdf(ask.Password)
+ Kdf(encKey, ask.Password)
if err := encKey.Check(); err != nil {
return nil, err
}
@@ -195,3 +196,18 @@ func Verify(msgFile, pubFile string) error {
log.Println("Signature Verfied")
return nil
}
+
+func Kdf(enc *key.Enc, ask func() (string, error)) (*key.Enc, error) {
+ if enc.KDFRounds == 0 {
+ return enc, nil
+ }
+ pass, err := ask()
+ if err != nil {
+ return nil, err
+ }
+ xor := bhash.Pbkdf([]byte(pass), enc.Salt[:], int(enc.KDFRounds), len(enc.Key))
+ for i := range xor {
+ enc.Key[i] ^= xor[i]
+ }
+ return enc, nil
+}