1ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh# Testing md5 module 2ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport warnings 3ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehwarnings.filterwarnings("ignore", "the md5 module is deprecated.*", 4ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh DeprecationWarning) 5ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 6ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehimport unittest 7ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom md5 import md5 8ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehfrom test import test_support 9ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 10ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef hexstr(s): 11ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh import string 12ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh h = string.hexdigits 13ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh r = '' 14ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh for c in s: 15ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh i = ord(c) 16ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh r = r + h[(i >> 4) & 0xF] + h[i & 0xF] 17ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh return r 18ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 19ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehclass MD5_Test(unittest.TestCase): 20ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 21ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def md5test(self, s, expected): 22ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(hexstr(md5(s).digest()), expected) 23ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(md5(s).hexdigest(), expected) 24ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 25ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_basics(self): 26ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq = self.md5test 27ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('', 'd41d8cd98f00b204e9800998ecf8427e') 28ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('a', '0cc175b9c0f1b6a831c399e269772661') 29ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('abc', '900150983cd24fb0d6963f7d28e17f72') 30ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('message digest', 'f96b697d7cb7938d525a2f31aaf161d0') 31ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('abcdefghijklmnopqrstuvwxyz', 'c3fcd3d76192e4007dfb496cca67e13b') 32ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 33ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 'd174ab98d277d9f5a5611c2c9f419d9f') 34ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh eq('12345678901234567890123456789012345678901234567890123456789012345678901234567890', 35ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh '57edf4a22be3c955ac49da2e2107b67a') 36ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 37ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_hexdigest(self): 38ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh # hexdigest is new with Python 2.0 39ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m = md5('testing the hexdigest method') 40ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh h = m.hexdigest() 41ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(hexstr(m.digest()), h) 42ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 43ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh def test_large_update(self): 44ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh aas = 'a' * 64 45ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh bees = 'b' * 64 46ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh cees = 'c' * 64 47ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 48ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m1 = md5() 49ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m1.update(aas) 50ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m1.update(bees) 51ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m1.update(cees) 52ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 53ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m2 = md5() 54ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh m2.update(aas + bees + cees) 55ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh self.assertEqual(m1.digest(), m2.digest()) 56ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 57ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehdef test_main(): 58ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_support.run_unittest(MD5_Test) 59ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh 60ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsiehif __name__ == '__main__': 61ffab958fd8d42ed7227d83007350e61555a1fa36Andrew Hsieh test_main() 62