From 577e10e99d90503f75f14ee2398d9ea0e87c8434 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 18 Apr 2017 14:46:06 +0200 Subject: ... --- keys.go | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) (limited to 'keys.go') 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 { -- cgit v1.2.3