aboutsummaryrefslogtreecommitdiff
path: root/keys.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-04-18 14:46:06 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-04-18 14:46:06 +0200
commit577e10e99d90503f75f14ee2398d9ea0e87c8434 (patch)
tree38dd6b2a0f495cfff3db4dcf73a9b621c7d2da1b /keys.go
parent9b3cd5a35ac2b1ba42d11cc8340f2d373a8e54f5 (diff)
...
Diffstat (limited to 'keys.go')
-rw-r--r--keys.go25
1 files changed, 11 insertions, 14 deletions
diff --git a/keys.go b/keys.go
index d4c2e49..1e52ef1 100644
--- a/keys.go
+++ b/keys.go
@@ -37,15 +37,6 @@ type EncKey struct {
SecKey [ed25519.PrivateKeySize]byte
}
-func (v *EncKey) XOR(key []byte) {
- if len(key) != len(v.SecKey) {
- panic("invalid key len")
- }
- for i := range key {
- v.SecKey[i] ^= key[i]
- }
-}
-
func (v *Sig) IsValid() bool {
return v.PKAlg == PKAlg
}
@@ -70,18 +61,24 @@ func (v *EncKey) Sign(message []byte) *Sig {
return sig
}
-func (v *EncKey) IsValid(pass []byte) bool {
+func (v *EncKey) IsValid() bool {
if v.PKAlg != PKAlg || v.KDFAlg != KDFAlg {
return false
}
- if v.KDFRounds > 0 {
- key := bhash.Pbkdf(pass, v.Salt[:], int(v.KDFRounds), len(v.SecKey))
- v.XOR(key)
- }
sum := sha512.Sum512(v.SecKey[:])
return bytes.Equal(sum[:len(v.Checksum)], v.Checksum[:])
}
+func (e *EncKey) Kdf(pass string) {
+ if e.KDFRounds == 0 {
+ return
+ }
+ xorkey := bhash.Pbkdf([]byte(pass), e.Salt[:], int(e.KDFRounds), len(e.SecKey))
+ for i := range xorkey {
+ e.SecKey[i] ^= xorkey[i]
+ }
+}
+
func Unmarshal(b []byte, v interface{}) error {
buf := bytes.NewReader(b)
if err := binary.Read(buf, binary.BigEndian, v); err != nil {