diff options
| author | Eli Collins <elic@assurancetechnologies.com> | 2012-03-10 17:57:38 -0500 |
|---|---|---|
| committer | Eli Collins <elic@assurancetechnologies.com> | 2012-03-10 17:57:38 -0500 |
| commit | bef2baa6b37b3dc70e96b5b5b285a86f59a9220a (patch) | |
| tree | 8705072ec5be7a56d3c4e97181ad9f0f15e2b4f1 /passlib/tests | |
| parent | d3c7d16915f7ef3919245f211b8dab8ae35ade70 (diff) | |
| download | passlib-bef2baa6b37b3dc70e96b5b5b285a86f59a9220a.tar.gz | |
cleanup of scram hash; improved norm_digest_name() and moved it to utils.pbkdf2
Diffstat (limited to 'passlib/tests')
| -rw-r--r-- | passlib/tests/test_handlers.py | 36 | ||||
| -rw-r--r-- | passlib/tests/test_utils.py | 44 |
2 files changed, 53 insertions, 27 deletions
diff --git a/passlib/tests/test_handlers.py b/passlib/tests/test_handlers.py index 2ab9837..9008406 100644 --- a/passlib/tests/test_handlers.py +++ b/passlib/tests/test_handlers.py @@ -1647,6 +1647,11 @@ class scram_test(HandlerCase): ] + # silence norm_hash_name() warning + def setUp(self): + super(scram_test, self).setUp() + warnings.filterwarnings("ignore", r"norm_hash_name\(\): unknown hash") + def test_90_algs(self): "test parsing of 'algs' setting" def parse(algs, **kwds): @@ -1764,9 +1769,9 @@ class scram_test(HandlerCase): self.assertTrue(c2.hash_needs_update(h)) def test_96_full_verify(self): - "test full_verify flag" + "test verify(full=True) flag" def vfull(s, h): - return self.handler.verify(s, h, full_verify=True) + return self.handler.verify(s, h, full=True) # reference h = ('$scram$4096$QSXCR.Q6sek8bf92$' @@ -1780,7 +1785,7 @@ class scram_test(HandlerCase): # catch truncated digests. h = ('$scram$4096$QSXCR.Q6sek8bf92$' 'sha-1=HZbuOlKbWl.eR8AfIposuKbhX30,' - 'sha-256=qXUXrlcvnaxxWG00DdRgVioR2gnUpuX5r.3EZ1rdhVY' # -1 char + 'sha-256=qXUXrlcvnaxxWG00DdRgVioR2gnUpuX5r.3EZ1rdhV,' # -1 char 'sha-512=lzgniLFcvglRLS0gt.C4gy.NurS3OIOVRAU1zZOV4P.qFiVFO2/' 'edGQSu/kD1LwdX0SNV/KsPdHSwEl5qRTuZQ') self.assertRaises(ValueError, vfull, 'pencil', h) @@ -1788,7 +1793,7 @@ class scram_test(HandlerCase): # catch padded digests. h = ('$scram$4096$QSXCR.Q6sek8bf92$' 'sha-1=HZbuOlKbWl.eR8AfIposuKbhX30,' - 'sha-256=qXUXrlcvnaxxWG00DdRgVioR2gnUpuX5r.3EZ1rdhVY,a' # +1 char + 'sha-256=qXUXrlcvnaxxWG00DdRgVioR2gnUpuX5r.3EZ1rdhVYa,' # +1 char 'sha-512=lzgniLFcvglRLS0gt.C4gy.NurS3OIOVRAU1zZOV4P.qFiVFO2/' 'edGQSu/kD1LwdX0SNV/KsPdHSwEl5qRTuZQ') self.assertRaises(ValueError, vfull, 'pencil', h) @@ -1802,29 +1807,6 @@ class scram_test(HandlerCase): self.assertRaises(ValueError, vfull, 'pencil', h) self.assertRaises(ValueError, vfull, 'tape', h) - ndn_values = [ - # normalized name, unnormalized names - - # IANA assigned names - ("md5", "MD-5"), - ("sha-1", "SHA1"), - ("sha-256", "SHA_256", "sha2-256", "sha-2-256"), - - # heuristic for unassigned names - ("abc6", "aBc-6"), - ("abc6-256", "aBc-6-256"), - ("ripemd", "RIPEMD"), - ("ripemd-160", "RIPEmd160"), - ] - - def test_97_norm_digest_name(self): - "test norm_digest_name helper" - from passlib.handlers.scram import norm_digest_name - for row in self.ndn_values: - result = row[0] - for value in row: - self.assertEqual(norm_digest_name(value), result) - #========================================================= # (netbsd's) sha1 crypt #========================================================= diff --git a/passlib/tests/test_utils.py b/passlib/tests/test_utils.py index 957ceb4..0ce76bf 100644 --- a/passlib/tests/test_utils.py +++ b/passlib/tests/test_utils.py @@ -940,6 +940,50 @@ import hmac from passlib.utils import pbkdf2 #TODO: should we bother testing hmac_sha1() function? it's verified via sha1_crypt testing. +class CryptoTest(TestCase): + "test various crypto functions" + + ndn_formats = ["hashlib", "iana"] + ndn_values = [ + # (iana name, hashlib name, ... other unnormalized names) + ("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"), + ("test128", "test-128", "TEST128"), + ("test2", "test2", "TEST-2"), + ("test3128", "test3-128", "TEST-3-128"), + ] + + def test_norm_hash_name(self): + "test norm_hash_name()" + from itertools import chain + from passlib.utils.pbkdf2 import norm_hash_name, _nhn_hash_names + + # test formats + for format in self.ndn_formats: + norm_hash_name("md4", format) + self.assertRaises(ValueError, norm_hash_name, "md4", None) + self.assertRaises(ValueError, norm_hash_name, "md4", "fake") + + # test types + self.assertEqual(norm_hash_name(u("MD4")), "md4") + self.assertEqual(norm_hash_name(b("MD4")), "md4") + self.assertRaises(TypeError, norm_hash_name, None) + + # test selected results + with catch_warnings(): + warnings.filterwarnings("ignore", 'encountered unknown hash') + for row in chain(_nhn_hash_names, self.ndn_values): + for idx, format in enumerate(self.ndn_formats): + correct = row[idx] + for value in row: + result = norm_hash_name(value, format) + self.assertEqual(result, correct, + "name=%r, format=%r:" % (value, + format)) class KdfTest(TestCase): "test kdf helpers" |
