openssl_hashlib = import_fresh_module('hashlib', fresh=['_hashlib'])
try:
- from _hashlib import HASH, HASHXOF, openssl_md_meth_names, get_fips_mode
+ import _hashlib
except ImportError:
- HASH = None
- HASHXOF = None
- openssl_md_meth_names = frozenset()
-
+ _hashlib = None
+# The extension module may exist but only define some of these. gh-141907
+HASH = getattr(_hashlib, 'HASH', None)
+HASHXOF = getattr(_hashlib, 'HASHXOF', None)
+openssl_md_meth_names = getattr(_hashlib, 'openssl_md_meth_names', frozenset())
+get_fips_mode = getattr(_hashlib, 'get_fips_mode', None)
+if not get_fips_mode:
def get_fips_mode():
return 0
constructors = self.constructors_to_test[name]
for hash_object_constructor in constructors:
m = hash_object_constructor()
- if HASH is not None and isinstance(m, HASH):
- # _hashopenssl's variant does not have extra SHA3 attributes
- continue
+ if name.startswith('shake_'):
+ if HASHXOF is not None and isinstance(m, HASHXOF):
+ # _hashopenssl's variant does not have extra SHA3 attributes
+ continue
+ else:
+ if HASH is not None and isinstance(m, HASH):
+ # _hashopenssl's variant does not have extra SHA3 attributes
+ continue
self.assertEqual(capacity + rate, 1600)
self.assertEqual(m._capacity_bits, capacity)
self.assertEqual(m._rate_bits, rate)
def test_hash_disallow_instantiation(self):
# internal types like _hashlib.HASH are not constructable
support.check_disallow_instantiation(self, HASH)
- support.check_disallow_instantiation(self, HASHXOF)
+ if HASHXOF is not None:
+ support.check_disallow_instantiation(self, HASHXOF)
def test_readonly_types(self):
for algorithm, constructors in self.constructors_to_test.items():