summaryrefslogtreecommitdiffstats
path: root/Lib/hashlib.py
diff options
context:
space:
mode:
authorChristian Heimes <christian@python.org>2016-09-07 09:58:24 (GMT)
committerChristian Heimes <christian@python.org>2016-09-07 09:58:24 (GMT)
commit6fe2a75b645044ca2b5dac03e8d850567b547a9a (patch)
tree62e1a5edd46384ff687c96f4f94cf3b0a2bae72e /Lib/hashlib.py
parentdfb9ef13575bcc457544b408fc4e5eca3c5ed9b1 (diff)
downloadcpython-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.py17
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.