diff options
author | Christian Heimes <christian@python.org> | 2018-01-27 08:53:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-27 08:53:43 (GMT) |
commit | 2f050c7e1b36bf641e7023f7b28b451454c6b98a (patch) | |
tree | 01ee725ca174b0e7f1ba6f160916f891bebb5a38 /Lib/test/test_hmac.py | |
parent | a49ac9902903a798fab4970ccf563c531199c3f8 (diff) | |
download | cpython-2f050c7e1b36bf641e7023f7b28b451454c6b98a.zip cpython-2f050c7e1b36bf641e7023f7b28b451454c6b98a.tar.gz cpython-2f050c7e1b36bf641e7023f7b28b451454c6b98a.tar.bz2 |
bpo-32433: Optimized HMAC digest (#5023)
The hmac module now has hmac.digest(), which provides an optimized HMAC
digest for short messages. hmac.digest() is up to three times faster
than hmac.HMAC().digest().
Signed-off-by: Christian Heimes <christian@python.org>
Diffstat (limited to 'Lib/test/test_hmac.py')
-rw-r--r-- | Lib/test/test_hmac.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index 067e13f..4e4ef0e 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -1,7 +1,9 @@ +import binascii import functools import hmac import hashlib import unittest +import unittest.mock import warnings @@ -23,16 +25,27 @@ class TestVectorsTestCase(unittest.TestCase): def md5test(key, data, digest): h = hmac.HMAC(key, data, digestmod=hashlib.md5) self.assertEqual(h.hexdigest().upper(), digest.upper()) + self.assertEqual(h.digest(), binascii.unhexlify(digest)) self.assertEqual(h.name, "hmac-md5") self.assertEqual(h.digest_size, 16) self.assertEqual(h.block_size, 64) h = hmac.HMAC(key, data, digestmod='md5') self.assertEqual(h.hexdigest().upper(), digest.upper()) + self.assertEqual(h.digest(), binascii.unhexlify(digest)) self.assertEqual(h.name, "hmac-md5") self.assertEqual(h.digest_size, 16) self.assertEqual(h.block_size, 64) + self.assertEqual( + hmac.digest(key, data, digest='md5'), + binascii.unhexlify(digest) + ) + with unittest.mock.patch('hmac._openssl_md_meths', {}): + self.assertEqual( + hmac.digest(key, data, digest='md5'), + binascii.unhexlify(digest) + ) md5test(b"\x0b" * 16, b"Hi There", @@ -67,16 +80,23 @@ class TestVectorsTestCase(unittest.TestCase): def shatest(key, data, digest): h = hmac.HMAC(key, data, digestmod=hashlib.sha1) self.assertEqual(h.hexdigest().upper(), digest.upper()) + self.assertEqual(h.digest(), binascii.unhexlify(digest)) self.assertEqual(h.name, "hmac-sha1") self.assertEqual(h.digest_size, 20) self.assertEqual(h.block_size, 64) h = hmac.HMAC(key, data, digestmod='sha1') self.assertEqual(h.hexdigest().upper(), digest.upper()) + self.assertEqual(h.digest(), binascii.unhexlify(digest)) self.assertEqual(h.name, "hmac-sha1") self.assertEqual(h.digest_size, 20) self.assertEqual(h.block_size, 64) + self.assertEqual( + hmac.digest(key, data, digest='sha1'), + binascii.unhexlify(digest) + ) + shatest(b"\x0b" * 20, b"Hi There", @@ -122,6 +142,24 @@ class TestVectorsTestCase(unittest.TestCase): self.assertEqual(h.digest_size, digest_size) self.assertEqual(h.block_size, block_size) + self.assertEqual( + hmac.digest(key, data, digest=hashfunc), + binascii.unhexlify(hexdigests[hashfunc]) + ) + self.assertEqual( + hmac.digest(key, data, digest=hash_name), + binascii.unhexlify(hexdigests[hashfunc]) + ) + + with unittest.mock.patch('hmac._openssl_md_meths', {}): + self.assertEqual( + hmac.digest(key, data, digest=hashfunc), + binascii.unhexlify(hexdigests[hashfunc]) + ) + self.assertEqual( + hmac.digest(key, data, digest=hash_name), + binascii.unhexlify(hexdigests[hashfunc]) + ) # 4.2. Test Case 1 hmactest(key = b'\x0b'*20, |