Ver Fonte

switch from bdkdf.py to pycrypto 2.5

Jonas Borgström há 13 anos atrás
pai
commit
3a70789b35
1 ficheiros alterados com 7 adições e 3 exclusões
  1. 7 3
      darc/key.py

+ 7 - 3
darc/key.py

@@ -5,18 +5,22 @@ import os
 import msgpack
 import msgpack
 import zlib
 import zlib
 
 
-from pbkdf2 import pbkdf2
 from Crypto.Cipher import AES
 from Crypto.Cipher import AES
 from Crypto.Hash import SHA256, HMAC
 from Crypto.Hash import SHA256, HMAC
 from Crypto.Util import Counter
 from Crypto.Util import Counter
 from Crypto.Util.number import bytes_to_long, long_to_bytes
 from Crypto.Util.number import bytes_to_long, long_to_bytes
 from Crypto.Random import get_random_bytes
 from Crypto.Random import get_random_bytes
+from Crypto.Protocol.KDF import PBKDF2
 
 
 from .helpers import IntegrityError, get_keys_dir
 from .helpers import IntegrityError, get_keys_dir
 
 
 PREFIX = '\0' * 8
 PREFIX = '\0' * 8
 
 
 
 
+def SHA256_PDF(p, s):
+    return HMAC.new(p, s, SHA256).digest()
+
+
 class Key(object):
 class Key(object):
     FILE_ID = 'DARC KEY'
     FILE_ID = 'DARC KEY'
 
 
@@ -73,7 +77,7 @@ class Key(object):
     def encrypt_key_file(self, data, password):
     def encrypt_key_file(self, data, password):
         salt = get_random_bytes(32)
         salt = get_random_bytes(32)
         iterations = 10000
         iterations = 10000
-        key = pbkdf2(password, salt, 32, iterations, hashlib.sha256)
+        key = PBKDF2(password, salt, 32, iterations, SHA256_PDF)
         hash = HMAC.new(key, data, SHA256).digest()
         hash = HMAC.new(key, data, SHA256).digest()
         cdata = AES.new(key, AES.MODE_CTR, counter=Counter.new(128)).encrypt(data)
         cdata = AES.new(key, AES.MODE_CTR, counter=Counter.new(128)).encrypt(data)
         d = {
         d = {
@@ -90,7 +94,7 @@ class Key(object):
         d = msgpack.unpackb(data)
         d = msgpack.unpackb(data)
         assert d['version'] == 1
         assert d['version'] == 1
         assert d['algorithm'] == 'SHA256'
         assert d['algorithm'] == 'SHA256'
-        key = pbkdf2(password, d['salt'], 32, d['iterations'], hashlib.sha256)
+        key = PBKDF2(password, d['salt'], 32, d['iterations'], SHA256_PDF)
         data = AES.new(key, AES.MODE_CTR, counter=Counter.new(128)).decrypt(d['data'])
         data = AES.new(key, AES.MODE_CTR, counter=Counter.new(128)).decrypt(d['data'])
         if HMAC.new(key, data, SHA256).digest() != d['hash']:
         if HMAC.new(key, data, SHA256).digest() != d['hash']:
             return None
             return None