mirror of
https://github.com/django/django.git
synced 2025-10-03 15:24:43 +00:00
[1.6.x] Fixed #21138 -- Increased the performance of our PBKDF2 implementation.
Thanks go to Michael Gebetsroither for pointing out this issue and help on
the patch.
Backport of 68540fe4df
from master.
This commit is contained in:
parent
50a811a170
commit
e5dc08f2db
1 changed files with 7 additions and 3 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue