Loading django/db/models/expressions.py +4 −3 Original line number Diff line number Diff line Loading @@ -15,9 +15,10 @@ class ExpressionNode(tree.Node): MUL = '*' DIV = '/' POW = '^' MOD = '%%' # This is a quoted % operator - it is quoted # This is a quoted % operator - it is quoted # because it can be used in strings that also # have parameter substitution. MOD = '%%' # Bitwise operators - note that these are generated by .bitand() # and .bitor(), the '&' and '|' are reserved for boolean operator Loading django/utils/crypto.py +65 −48 Original line number Diff line number Diff line Loading @@ -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 PBDF2 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 Loading Loading
django/db/models/expressions.py +4 −3 Original line number Diff line number Diff line Loading @@ -15,9 +15,10 @@ class ExpressionNode(tree.Node): MUL = '*' DIV = '/' POW = '^' MOD = '%%' # This is a quoted % operator - it is quoted # This is a quoted % operator - it is quoted # because it can be used in strings that also # have parameter substitution. MOD = '%%' # Bitwise operators - note that these are generated by .bitand() # and .bitor(), the '&' and '|' are reserved for boolean operator Loading
django/utils/crypto.py +65 −48 Original line number Diff line number Diff line Loading @@ -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 PBDF2 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 Loading