summaryrefslogtreecommitdiff
path: root/passlib/tests/test_crypto_digest.py
diff options
context:
space:
mode:
authorEli Collins <elic@assurancetechnologies.com>2020-10-06 12:14:04 -0400
committerEli Collins <elic@assurancetechnologies.com>2020-10-06 12:14:04 -0400
commit0a25f664189515086d12aabacc0275b6b2ba209a (patch)
tree5e67f582d500d3f6fb7e57d8f6a58e78d3d99155 /passlib/tests/test_crypto_digest.py
parent15f0486c44428351ba45e57e541e3e5c04019e01 (diff)
parentbf7afc81eff400c835fc43505ff6e2f91bf73fa9 (diff)
downloadpasslib-0a25f664189515086d12aabacc0275b6b2ba209a.tar.gz
Merge from stable
Diffstat (limited to 'passlib/tests/test_crypto_digest.py')
-rw-r--r--passlib/tests/test_crypto_digest.py55
1 files changed, 50 insertions, 5 deletions
diff --git a/passlib/tests/test_crypto_digest.py b/passlib/tests/test_crypto_digest.py
index a675ca8..9f3a5ff 100644
--- a/passlib/tests/test_crypto_digest.py
+++ b/passlib/tests/test_crypto_digest.py
@@ -10,6 +10,7 @@ import warnings
# site
# pkg
# module
+from passlib.exc import UnknownHashError
from passlib.utils.compat import PY3, JYTHON
from passlib.tests.utils import TestCase, TEST_MODE, skipUnless, hb
@@ -30,8 +31,10 @@ class HashInfoTest(TestCase):
("md5", "md5", "SCRAM-MD5-PLUS", "MD-5"),
("sha1", "sha-1", "SCRAM-SHA-1", "SHA1"),
("sha256", "sha-256", "SHA_256", "sha2-256"),
- ("ripemd", "ripemd", "SCRAM-RIPEMD", "RIPEMD"),
- ("ripemd160", "ripemd-160", "SCRAM-RIPEMD-160", "RIPEmd160"),
+ ("ripemd160", "ripemd-160", "SCRAM-RIPEMD-160", "RIPEmd160",
+ # NOTE: there was an older "RIPEMD" & "RIPEMD-128", but python treates "RIPEMD"
+ # as alias for "RIPEMD-160"
+ "ripemd", "SCRAM-RIPEMD"),
# fake hashes (to check if fallback normalization behaves sanely)
("sha4_256", "sha4-256", "SHA4-256", "SHA-4-256"),
@@ -50,6 +53,7 @@ class HashInfoTest(TestCase):
ctx.__enter__()
self.addCleanup(ctx.__exit__)
warnings.filterwarnings("ignore", '.*unknown hash')
+ warnings.filterwarnings("ignore", '.*unsupported hash')
# test string types
self.assertEqual(norm_hash_name(u"MD4"), "md4")
@@ -109,12 +113,53 @@ class HashInfoTest(TestCase):
self.assertEqual(hexlify(const(b"abc").digest()),
b"a448017aaf21d8525fc10ae87aa6729d")
- # 4. unknown names should be rejected
- self.assertRaises(ValueError, lookup_hash, "xxx256")
-
# should memoize records
self.assertIs(lookup_hash("md5"), lookup_hash("md5"))
+ def test_lookup_hash_w_unknown_name(self):
+ """lookup_hash() -- unknown hash name"""
+ from passlib.crypto.digest import lookup_hash
+
+ # unknown names should be rejected by default
+ self.assertRaises(UnknownHashError, lookup_hash, "xxx256")
+
+ # required=False should return stub record instead
+ info = lookup_hash("xxx256", required=False)
+ self.assertFalse(info.supported)
+ self.assertRaisesRegex(UnknownHashError, "unknown hash: 'xxx256'", info.const)
+ self.assertEqual(info.name, "xxx256")
+ self.assertEqual(info.digest_size, None)
+ self.assertEqual(info.block_size, None)
+
+ # should cache stub records
+ info2 = lookup_hash("xxx256", required=False)
+ self.assertIs(info2, info)
+
+ def test_mock_fips_mode(self):
+ """
+ lookup_hash() -- test set_mock_fips_mode()
+ """
+ from passlib.crypto.digest import lookup_hash, _set_mock_fips_mode
+
+ # check if md5 is available so we can test mock helper
+ if not lookup_hash("md5", required=False).supported:
+ raise self.skipTest("md5 not supported")
+
+ # enable monkeypatch to mock up fips mode
+ _set_mock_fips_mode()
+ self.addCleanup(_set_mock_fips_mode, False)
+
+ pat = "'md5' hash disabled for fips"
+ self.assertRaisesRegex(UnknownHashError, pat, lookup_hash, "md5")
+
+ info = lookup_hash("md5", required=False)
+ self.assertRegex(info.error_text, pat)
+ self.assertRaisesRegex(UnknownHashError, pat, info.const)
+
+ # should use hardcoded fallback info
+ self.assertEqual(info.digest_size, 16)
+ self.assertEqual(info.block_size, 64)
+
def test_lookup_hash_metadata(self):
"""lookup_hash() -- metadata"""