1 from ctypescrypto.oid import Oid
2 from ctypescrypto import digest
3 from base64 import b16decode,b16encode
6 class TestDigestType(unittest.TestCase):
8 d=digest.DigestType("md4")
9 self.assertEqual(d.digest_size(),16)
10 self.assertEqual(d.block_size(),64)
11 self.assertEqual(d.oid(),Oid("md4"))
13 d=digest.DigestType("md5")
14 self.assertEqual(d.digest_size(),16)
15 self.assertEqual(d.block_size(),64)
16 self.assertEqual(d.oid(),Oid("md5"))
18 d=digest.DigestType("sha1")
19 self.assertEqual(d.digest_size(),20)
20 self.assertEqual(d.block_size(),64)
21 self.assertEqual(d.oid(),Oid("sha1"))
22 def test_sha256(self):
23 d=digest.DigestType("sha256")
24 self.assertEqual(d.digest_size(),32)
25 self.assertEqual(d.block_size(),64)
26 self.assertEqual(d.oid(),Oid("sha256"))
27 def test_sha384(self):
28 d=digest.DigestType("sha384")
29 self.assertEqual(d.digest_size(),48)
30 self.assertEqual(d.block_size(),128)
31 self.assertEqual(d.oid(),Oid("sha384"))
32 def test_sha512(self):
33 d=digest.DigestType("sha512")
34 self.assertEqual(d.digest_size(),64)
35 self.assertEqual(d.block_size(),128)
36 self.assertEqual(d.oid(),Oid("sha512"))
39 class TestIface(unittest.TestCase):
40 """ Test all methods with one algorithms """
41 msg="A quick brown fox jumps over the lazy dog."
42 dgst="00CFFE7312BF9CA73584F24BDF7DF1D028340397"
44 md=digest.DigestType("sha1")
45 dgst=digest.Digest(md)
47 self.assertEqual(dgst.digest_size,20)
48 self.assertEqual(dgst.hexdigest(),self.dgst)
49 def test_length(self):
51 msg=self.msg+" Dog barks furiously."
52 dgst=digest.new("sha1")
53 dgst.update(msg,length=l)
54 self.assertEqual(dgst.hexdigest(),self.dgst)
55 def test_badlength(self):
57 dgst=digest.new("sha1")
58 with self.assertRaises(ValueError):
59 dgst.update(self.msg,length=l+1)
60 def test_bindigest(self):
61 dgst=digest.new("sha1")
63 self.assertEqual(dgst.digest_size,20)
64 self.assertEqual(dgst.digest(),b16decode(self.dgst,True))
65 def test_duplicatedigest(self):
66 dgst=digest.new("sha1")
70 self.assertEqual(v1,v2)
71 def test_updatefinalized(self):
72 dgst=digest.new("sha1")
75 with self.assertRaises(digest.DigestError):
77 def test_wrongtype(self):
78 dgst=digest.new("sha1")
79 with self.assertRaises(TypeError):
80 dgst.update(['a','b','c'])
81 with self.assertRaises(TypeError):
83 with self.assertRaises(TypeError):
84 dgst.update({"a":"b","c":"D"})
85 with self.assertRaises(TypeError):
86 dgst.update(u'\u0430\u0431')
88 dgst=digest.new("sha1")
89 dgst.update("A quick brown fox jumps over ")
91 dgst.update("the lazy dog.")
92 value1=dgst.hexdigest()
93 d2.update("the fat pig.")
95 self.assertEqual(value1,"00CFFE7312BF9CA73584F24BDF7DF1D028340397")
96 self.assertEqual(value2,"5328F33739BEC2A15B6A30F17D3BC13CC11A7C78")
97 class TestAlgo(unittest.TestCase):
98 """ Test all statdard algorithms """
101 self.assertEqual(d.digest_size,16)
102 d.update("A quick brown fox jumps over the lazy dog.")
103 self.assertEqual(d.hexdigest(),"DF756A3769FCAB0A261880957590C768")
107 d.update("A quick brown fox jumps over the lazy dog.")
108 self.assertEqual(d.digest_size,16)
109 self.assertEqual(d.hexdigest(),"FAAED595A3E38BBF0D9B4B98021D200F")
110 def test_sha256(self):
111 d=digest.new("sha256")
112 d.update("A quick brown fox jumps over the lazy dog.")
113 self.assertEqual(d.digest_size,32)
114 self.assertEqual(d.hexdigest(),"FFCA2587CFD4846E4CB975B503C9EB940F94566AA394E8BD571458B9DA5097D5")
115 def test_sha384(self):
116 d=digest.new("sha384")
117 d.update("A quick brown fox jumps over the lazy dog.")
118 self.assertEqual(d.digest_size,48)
119 self.assertEqual(d.hexdigest(),"C7D71B1BA81D0DD028E79C7E75CF2F83169C14BA732CA5A2AD731151584E9DE843C1A314077D62B96B03367F72E126D8")
120 def test_sha512(self):
121 d=digest.new("sha512")
122 self.assertEqual(d.digest_size,64)
123 d.update("A quick brown fox jumps over the lazy dog.")
124 self.assertEqual(d.hexdigest(),"3045575CF3B873DD656F5F3426E04A4ACD11950BB2538772EE14867002B408E21FF18EF7F7B2CAB484A3C1C0BE3F8ACC4AED536A427353C7748DC365FC1A8646")
125 def test_wrongdigest(self):
126 with self.assertRaises(digest.DigestError):
127 dgst=digest.new("no-such-digest")
129 if __name__ == "__main__":