Home | History | Annotate | Download | only in test
      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()
     75