aboutsummaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2017-05-02 14:50:13 +0200
committerDimitri Sokolyuk <demon@dim13.org>2017-05-02 14:50:13 +0200
commit3e4b44253d7a97008b340e2ea3005b8f55298136 (patch)
tree27d09952fdf1cd83a7fe0bdb0ecfae4839145508 /main.go
parent5af207437fd8f84c51c48ca8bfdf626f9e720ec5 (diff)
kdf
Diffstat (limited to 'main.go')
-rw-r--r--main.go20
1 files changed, 18 insertions, 2 deletions
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
+}