From 25e9c9f19f90aea367ae9831df1e7208e3f5f0b5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sat, 22 Jul 2017 23:58:53 +0200 Subject: ... --- key/key.go | 10 +++------- key/sec.go | 24 ++++++++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) (limited to 'key') diff --git a/key/key.go b/key/key.go index aa2dd0e..585dc7a 100644 --- a/key/key.go +++ b/key/key.go @@ -55,15 +55,11 @@ func Generate(der Deriver) (*Pub, *Sec, error) { // Pbdkf if der != nil { - xor, err := der.Derive(sec.Salt[:], DefaultRounds, len(sec.Key)) - if err != nil { - return nil, nil, err - } - for i := range xor { - sec.Key[i] ^= xor[i] - } sec.KDFRounds = DefaultRounds } + if err := sec.Crypt(der); err != nil { + return nil, nil, err + } // public key pub := &Pub{PKAlg: pkAlg, KeyNum: sec.KeyNum} diff --git a/key/sec.go b/key/sec.go index b5ddc63..3143fb7 100644 --- a/key/sec.go +++ b/key/sec.go @@ -49,20 +49,28 @@ func (v *Sec) Public() *Pub { return pub } +func (v *Sec) Crypt(der Deriver) error { + if der == nil || v.KDFRounds == 0 { + return nil + } + xor, err := der.Derive(v.Salt[:], int(v.KDFRounds), len(v.Key)) + if err != nil { + return err + } + for i := range xor { + v.Key[i] ^= xor[i] + } + return nil +} + // NewSec returns a parsed and decoded secret key func NewSec(data []byte, der Deriver) (*Sec, error) { sec := new(Sec) if err := sec.UnmarshalBinary(data); err != nil { return nil, err } - if der != nil && sec.KDFRounds > 0 { - xor, err := der.Derive(sec.Salt[:], int(sec.KDFRounds), len(sec.Key)) - if err != nil { - return nil, err - } - for i := range xor { - sec.Key[i] ^= xor[i] - } + if err := sec.Crypt(der); err != nil { + return nil, err } return sec, sec.Validate() } -- cgit v1.2.3