Commit 68540fe4 authored by Florian Apolloner's avatar Florian Apolloner
Browse files

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

Thanks go to Michael Gebetsroither for pointing out this issue and help on
the patch.
parent 5d74853e
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -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)