diff options
author | Christian Heimes <christian@python.org> | 2016-09-07 09:58:24 (GMT) |
---|---|---|
committer | Christian Heimes <christian@python.org> | 2016-09-07 09:58:24 (GMT) |
commit | 6fe2a75b645044ca2b5dac03e8d850567b547a9a (patch) | |
tree | 62e1a5edd46384ff687c96f4f94cf3b0a2bae72e /Lib/hashlib.py | |
parent | dfb9ef13575bcc457544b408fc4e5eca3c5ed9b1 (diff) | |
download | cpython-6fe2a75b645044ca2b5dac03e8d850567b547a9a.zip cpython-6fe2a75b645044ca2b5dac03e8d850567b547a9a.tar.gz cpython-6fe2a75b645044ca2b5dac03e8d850567b547a9a.tar.bz2 |
Issue #16113: Add SHA-3 and SHAKE support to hashlib module.
Diffstat (limited to 'Lib/hashlib.py')
-rw-r--r-- | Lib/hashlib.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/Lib/hashlib.py b/Lib/hashlib.py index 2d5e92e..053a7ad 100644 --- a/Lib/hashlib.py +++ b/Lib/hashlib.py @@ -11,7 +11,8 @@ new(name, data=b'', **kwargs) - returns a new hash object implementing the Named constructor functions are also available, these are faster than using new(name): -md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), and blake2s() +md5(), sha1(), sha224(), sha256(), sha384(), sha512(), blake2b(), blake2s(), +sha3_224, sha3_256, sha3_384, sha3_512, shake_128, and shake_256. More algorithms may be available on your platform but the above are guaranteed to exist. See the algorithms_guaranteed and algorithms_available attributes @@ -55,7 +56,10 @@ More condensed: # This tuple and __get_builtin_constructor() must be modified if a new # always available algorithm is added. __always_supported = ('md5', 'sha1', 'sha224', 'sha256', 'sha384', 'sha512', - 'blake2b', 'blake2s') + 'blake2b', 'blake2s', + 'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', + 'shake_128', 'shake_256') + algorithms_guaranteed = set(__always_supported) algorithms_available = set(__always_supported) @@ -90,6 +94,15 @@ def __get_builtin_constructor(name): import _blake2 cache['blake2b'] = _blake2.blake2b cache['blake2s'] = _blake2.blake2s + elif name in {'sha3_224', 'sha3_256', 'sha3_384', 'sha3_512', + 'shake_128', 'shake_256'}: + import _sha3 + cache['sha3_224'] = _sha3.sha3_224 + cache['sha3_256'] = _sha3.sha3_256 + cache['sha3_384'] = _sha3.sha3_384 + cache['sha3_512'] = _sha3.sha3_512 + cache['shake_128'] = _sha3.shake_128 + cache['shake_256'] = _sha3.shake_256 except ImportError: pass # no extension module, this hash is unsupported. |