Fixed #21138 -- Increased the performance of our PBKDF2 implementation.

Thanks go to Michael Gebetsroither for pointing out this issue and help on
the patch.
This commit is contained in:
Florian Apolloner 2013-09-17 22:59:56 +02:00
parent 5d74853e15
commit 68540fe4df
1 changed files with 7 additions and 3 deletions

View File

@ -123,9 +123,8 @@ def _fast_hmac(key, msg, digest):
This function operates on bytes.
"""
dig1, dig2 = digest(), digest()
if len(key) > dig1.block_size:
key = digest(key).digest()
key += b'\x00' * (dig1.block_size - len(key))
if len(key) != dig1.block_size:
raise ValueError('Key size needs to match the block_size of the digest.')
dig1.update(key.translate(hmac.trans_36))
dig1.update(msg)
dig2.update(key.translate(hmac.trans_5C))
@ -161,6 +160,11 @@ def pbkdf2(password, salt, iterations, dklen=0, digest=None):
hex_format_string = "%%0%ix" % (hlen * 2)
inner_digest_size = digest().block_size
if len(password) > inner_digest_size:
password = digest(password).digest()
password += b'\x00' * (inner_digest_size - len(password))
def F(i):
def U():
u = salt + struct.pack(b'>I', i)