1 | """
|
---|
2 | Test suite to check compilance with PEP 247, the standard API
|
---|
3 | for hashing algorithms
|
---|
4 | """
|
---|
5 |
|
---|
6 | import warnings
|
---|
7 | warnings.filterwarnings('ignore', 'the md5 module is deprecated.*',
|
---|
8 | DeprecationWarning)
|
---|
9 | warnings.filterwarnings('ignore', 'the sha module is deprecated.*',
|
---|
10 | DeprecationWarning)
|
---|
11 |
|
---|
12 | import hmac
|
---|
13 | import md5
|
---|
14 | import sha
|
---|
15 |
|
---|
16 | import unittest
|
---|
17 | from test import test_support
|
---|
18 |
|
---|
19 | class Pep247Test(unittest.TestCase):
|
---|
20 |
|
---|
21 | def check_module(self, module, key=None):
|
---|
22 | self.assertTrue(hasattr(module, 'digest_size'))
|
---|
23 | self.assertTrue(module.digest_size is None or module.digest_size > 0)
|
---|
24 |
|
---|
25 | if not key is None:
|
---|
26 | obj1 = module.new(key)
|
---|
27 | obj2 = module.new(key, 'string')
|
---|
28 |
|
---|
29 | h1 = module.new(key, 'string').digest()
|
---|
30 | obj3 = module.new(key)
|
---|
31 | obj3.update('string')
|
---|
32 | h2 = obj3.digest()
|
---|
33 | else:
|
---|
34 | obj1 = module.new()
|
---|
35 | obj2 = module.new('string')
|
---|
36 |
|
---|
37 | h1 = module.new('string').digest()
|
---|
38 | obj3 = module.new()
|
---|
39 | obj3.update('string')
|
---|
40 | h2 = obj3.digest()
|
---|
41 |
|
---|
42 | self.assertEqual(h1, h2)
|
---|
43 |
|
---|
44 | self.assertTrue(hasattr(obj1, 'digest_size'))
|
---|
45 |
|
---|
46 | if not module.digest_size is None:
|
---|
47 | self.assertEqual(obj1.digest_size, module.digest_size)
|
---|
48 |
|
---|
49 | self.assertEqual(obj1.digest_size, len(h1))
|
---|
50 | obj1.update('string')
|
---|
51 | obj_copy = obj1.copy()
|
---|
52 | self.assertEqual(obj1.digest(), obj_copy.digest())
|
---|
53 | self.assertEqual(obj1.hexdigest(), obj_copy.hexdigest())
|
---|
54 |
|
---|
55 | digest, hexdigest = obj1.digest(), obj1.hexdigest()
|
---|
56 | hd2 = ""
|
---|
57 | for byte in digest:
|
---|
58 | hd2 += '%02x' % ord(byte)
|
---|
59 | self.assertEqual(hd2, hexdigest)
|
---|
60 |
|
---|
61 | def test_md5(self):
|
---|
62 | self.check_module(md5)
|
---|
63 |
|
---|
64 | def test_sha(self):
|
---|
65 | self.check_module(sha)
|
---|
66 |
|
---|
67 | def test_hmac(self):
|
---|
68 | self.check_module(hmac, key='abc')
|
---|
69 |
|
---|
70 | def test_main():
|
---|
71 | test_support.run_unittest(Pep247Test)
|
---|
72 |
|
---|
73 | if __name__ == '__main__':
|
---|
74 | test_main()
|
---|