mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
gh-103256: Fix hmac algorithm to support fallback implementation (gh-103286)
Co-authored-by: Gregory P. Smith <greg@krypto.org>
This commit is contained in:
parent
f0424ba4b6
commit
efb0a2cf3a
3 changed files with 17 additions and 1 deletions
|
@ -373,6 +373,16 @@ class TestVectorsTestCase(unittest.TestCase):
|
||||||
with self.assertRaisesRegex(TypeError, r'required.*digestmod'):
|
with self.assertRaisesRegex(TypeError, r'required.*digestmod'):
|
||||||
hmac.HMAC(key, msg=data, digestmod='')
|
hmac.HMAC(key, msg=data, digestmod='')
|
||||||
|
|
||||||
|
def test_with_fallback(self):
|
||||||
|
cache = getattr(hashlib, '__builtin_constructor_cache')
|
||||||
|
try:
|
||||||
|
cache['foo'] = hashlib.sha256
|
||||||
|
hexdigest = hmac.digest(b'key', b'message', 'foo').hex()
|
||||||
|
expected = '6e9ef29b75fffc5b7abae527d58fdadb2fe42e7219011976917343065f58ed4a'
|
||||||
|
self.assertEqual(hexdigest, expected)
|
||||||
|
finally:
|
||||||
|
cache.pop('foo')
|
||||||
|
|
||||||
|
|
||||||
class ConstructorTestCase(unittest.TestCase):
|
class ConstructorTestCase(unittest.TestCase):
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Fixed a bug that caused :mod:`hmac` to raise an exception when the requested
|
||||||
|
hash algorithm was not available in OpenSSL despite being available
|
||||||
|
separately as part of ``hashlib`` itself. It now falls back properly to the
|
||||||
|
built-in. This could happen when, for example, your OpenSSL does not include
|
||||||
|
SHA3 support and you want to compute ``hmac.digest(b'K', b'M',
|
||||||
|
'sha3_256')``.
|
|
@ -355,7 +355,7 @@ py_digest_by_name(PyObject *module, const char *name, enum Py_hash_type py_ht)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (digest == NULL) {
|
if (digest == NULL) {
|
||||||
_setException(PyExc_ValueError, "unsupported hash type %s", name);
|
_setException(state->unsupported_digestmod_error, "unsupported hash type %s", name);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return digest;
|
return digest;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue