test_pep247.py 2.0 KB

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