1
0
Fork 0
mirror of https://github.com/borgbackup/borg.git synced 2025-03-03 18:27:01 +00:00

switch from bdkdf.py to pycrypto 2.5

This commit is contained in:
Jonas Borgström 2012-02-29 23:31:08 +01:00
parent da3e7a7470
commit 3a70789b35

View file

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