1 # Copyright (c) Twisted Matrix Laboratories.
2 # See LICENSE for details.
5 Tests for L{twisted.python.hashlib}
8 from twisted.trial.unittest import TestCase
10 from twisted.python.hashlib import md5, sha1
13 class HashObjectTests(TestCase):
15 Tests for the hash object APIs presented by L{hashlib}, C{md5} and C{sha1}.
19 L{hashlib.md5} returns an object which can be used to compute an MD5
20 hash as defined by U{RFC 1321<http://www.ietf.org/rfc/rfc1321.txt>}.
22 # Test the result using values from section A.5 of the RFC.
24 md5().hexdigest(), "d41d8cd98f00b204e9800998ecf8427e")
26 md5("a").hexdigest(), "0cc175b9c0f1b6a831c399e269772661")
28 md5("abc").hexdigest(), "900150983cd24fb0d6963f7d28e17f72")
30 md5("message digest").hexdigest(),
31 "f96b697d7cb7938d525a2f31aaf161d0")
33 md5("abcdefghijklmnopqrstuvwxyz").hexdigest(),
34 "c3fcd3d76192e4007dfb496cca67e13b")
36 md5("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
37 "0123456789").hexdigest(),
38 "d174ab98d277d9f5a5611c2c9f419d9f")
40 md5("1234567890123456789012345678901234567890123456789012345678901"
41 "2345678901234567890").hexdigest(),
42 "57edf4a22be3c955ac49da2e2107b67a")
44 # It should have digest and update methods, too.
46 md5().digest().encode('hex'),
47 "d41d8cd98f00b204e9800998ecf8427e")
51 hash.digest().encode('hex'),
52 "0cc175b9c0f1b6a831c399e269772661")
54 # Instances of it should have a digest_size attribute
55 self.assertEqual(md5().digest_size, 16)
60 L{hashlib.sha1} returns an object which can be used to compute a SHA1
61 hash as defined by U{RFC 3174<http://tools.ietf.org/rfc/rfc3174.txt>}.
64 return ''.join(s.split()).lower()
65 # Test the result using values from section 7.3 of the RFC.
67 sha1("abc").hexdigest(),
69 "A9 99 3E 36 47 06 81 6A BA 3E 25 71 78 50 C2 6C 9C D0 D8 9D"))
71 sha1("abcdbcdecdefdefgefghfghighijhi"
72 "jkijkljklmklmnlmnomnopnopq").hexdigest(),
74 "84 98 3E 44 1C 3B D2 6E BA AE 4A A1 F9 51 29 E5 E5 46 70 F1"))
76 # It should have digest and update methods, too.
78 sha1("abc").digest().encode('hex'),
80 "A9 99 3E 36 47 06 81 6A BA 3E 25 71 78 50 C2 6C 9C D0 D8 9D"))
84 hash.digest().encode('hex'),
86 "A9 99 3E 36 47 06 81 6A BA 3E 25 71 78 50 C2 6C 9C D0 D8 9D"))
88 # Instances of it should have a digest_size attribute.
90 sha1().digest_size, 20)