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