Commit ecff136f authored by Donald Stufft's avatar Donald Stufft
Browse files

Merge pull request #2582 from alex/stdlib-pbkdf2hmac

Use the stdlib's PBKDF2 implementation when available.
parents 438e6fe6 7283c211
Loading
Loading
Loading
Loading
+65 −48
Original line number Diff line number Diff line
@@ -117,6 +117,23 @@ def _long_to_bin(x, hex_format_string):
    return binascii.unhexlify((hex_format_string % x).encode('ascii'))


if hasattr(hashlib, "pbkdf2_hmac"):
    def pbkdf2(password, salt, iterations, dklen=0, digest=None):
        """
        Implements PBKDF2 with the same API as Django's existing
        implementation, using the stdlib.

        This is used in Python 3.4 and up.
        """
        if digest is None:
            digest = hashlib.sha256
        if not dklen:
            dklen = None
        password = force_bytes(password)
        salt = force_bytes(salt)
        return hashlib.pbkdf2_hmac(
            digest().name, password, salt, iterations, dklen)
else:
    def pbkdf2(password, salt, iterations, dklen=0, digest=None):
        """
        Implements PBKDF2 as defined in RFC 2898, section 5.2