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"))
12 self.assertEqual(d.name,'md4')
14 d=digest.DigestType("md5")
15 self.assertEqual(d.digest_size(),16)
16 self.assertEqual(d.block_size(),64)
17 self.assertEqual(d.oid(),Oid("md5"))
18 self.assertEqual(d.name,'md5')
20 d=digest.DigestType("sha1")
21 self.assertEqual(d.digest_size(),20)
22 self.assertEqual(d.block_size(),64)
23 self.assertEqual(d.oid(),Oid("sha1"))
24 self.assertEqual(d.name,'sha1')
25 def test_sha256(self):
26 d=digest.DigestType("sha256")
27 self.assertEqual(d.digest_size(),32)
28 self.assertEqual(d.block_size(),64)
29 self.assertEqual(d.oid(),Oid("sha256"))
30 self.assertEqual(d.name,'sha256')
31 def test_sha384(self):
32 d=digest.DigestType("sha384")
33 self.assertEqual(d.digest_size(),48)
34 self.assertEqual(d.block_size(),128)
35 self.assertEqual(d.oid(),Oid("sha384"))
36 self.assertEqual(d.name,'sha384')
37 def test_sha512(self):
38 d=digest.DigestType("sha512")
39 self.assertEqual(d.digest_size(),64)
40 self.assertEqual(d.block_size(),128)
41 self.assertEqual(d.oid(),Oid("sha512"))
42 self.assertEqual(d.name,'sha512')
43 def test_createfromoid(self):
45 d=digest.DigestType(oid)
46 self.assertEqual(d.digest_size(),32)
47 self.assertEqual(d.block_size(),64)
48 self.assertEqual(d.oid(),Oid("sha256"))
49 self.assertEqual(d.name,'sha256')
50 def test_createfromEVP_MD(self):
51 d1=digest.DigestType("sha256")
52 d2=digest.DigestType(None)
53 with self.assertRaises(AttributeError):
56 self.assertEqual(d2.digest_size(),32)
57 self.assertEqual(d2.block_size(),64)
58 self.assertEqual(d2.oid(),Oid("sha256"))
59 self.assertEqual(d2.name,'sha256')
60 def test_invalidDigest(self):
61 with self.assertRaises(digest.DigestError):
62 d=digest.DigestType("no-such-digest")
65 class TestIface(unittest.TestCase):
66 """ Test all methods with one algorithms """
67 msg="A quick brown fox jumps over the lazy dog."
68 dgst="00CFFE7312BF9CA73584F24BDF7DF1D028340397"
70 md=digest.DigestType("sha1")
71 dgst=digest.Digest(md)
73 self.assertEqual(dgst.digest_size,20)
74 self.assertEqual(dgst.hexdigest(),self.dgst)
75 def test_digestwithdata(self):
76 md=digest.DigestType("sha1")
77 dgst=digest.Digest(md)
78 self.assertEqual(dgst.digest(self.msg),b16decode(self.dgst))
79 def test_length(self):
81 msg=self.msg+" Dog barks furiously."
82 dgst=digest.new("sha1")
83 dgst.update(msg,length=l)
84 self.assertEqual(dgst.hexdigest(),self.dgst)
85 def test_badlength(self):
87 dgst=digest.new("sha1")
88 with self.assertRaises(ValueError):
89 dgst.update(self.msg,length=l+1)
90 def test_bindigest(self):
91 dgst=digest.new("sha1")
93 self.assertEqual(dgst.digest_size,20)
94 self.assertEqual(dgst.digest(),b16decode(self.dgst,True))
95 def test_duplicatedigest(self):
96 dgst=digest.new("sha1")
100 self.assertEqual(v1,v2)
101 def test_updatefinalized(self):
102 dgst=digest.new("sha1")
103 dgst.update(self.msg)
105 with self.assertRaises(digest.DigestError):
106 dgst.update(self.msg)
107 def test_wrongtype(self):
108 dgst=digest.new("sha1")
109 with self.assertRaises(TypeError):
110 dgst.update(['a','b','c'])
111 with self.assertRaises(TypeError):
113 with self.assertRaises(TypeError):
114 dgst.update({"a":"b","c":"D"})
115 with self.assertRaises(TypeError):
116 dgst.update(u'\u0430\u0431')
118 dgst=digest.new("sha1")
119 dgst.update("A quick brown fox jumps over ")
121 dgst.update("the lazy dog.")
122 value1=dgst.hexdigest()
123 d2.update("the fat pig.")
124 value2=d2.hexdigest()
125 self.assertEqual(value1,"00CFFE7312BF9CA73584F24BDF7DF1D028340397")
126 self.assertEqual(value2,"5328F33739BEC2A15B6A30F17D3BC13CC11A7C78")
127 class TestAlgo(unittest.TestCase):
128 """ Test all statdard algorithms """
131 self.assertEqual(d.digest_size,16)
132 d.update("A quick brown fox jumps over the lazy dog.")
133 self.assertEqual(d.hexdigest(),"DF756A3769FCAB0A261880957590C768")
137 d.update("A quick brown fox jumps over the lazy dog.")
138 self.assertEqual(d.digest_size,16)
139 self.assertEqual(d.hexdigest(),"FAAED595A3E38BBF0D9B4B98021D200F")
140 def test_sha256(self):
141 d=digest.new("sha256")
142 d.update("A quick brown fox jumps over the lazy dog.")
143 self.assertEqual(d.digest_size,32)
144 self.assertEqual(d.hexdigest(),"FFCA2587CFD4846E4CB975B503C9EB940F94566AA394E8BD571458B9DA5097D5")
145 def test_sha384(self):
146 d=digest.new("sha384")
147 d.update("A quick brown fox jumps over the lazy dog.")
148 self.assertEqual(d.digest_size,48)
149 self.assertEqual(d.hexdigest(),"C7D71B1BA81D0DD028E79C7E75CF2F83169C14BA732CA5A2AD731151584E9DE843C1A314077D62B96B03367F72E126D8")
150 def test_sha512(self):
151 d=digest.new("sha512")
152 self.assertEqual(d.digest_size,64)
153 d.update("A quick brown fox jumps over the lazy dog.")
154 self.assertEqual(d.hexdigest(),"3045575CF3B873DD656F5F3426E04A4ACD11950BB2538772EE14867002B408E21FF18EF7F7B2CAB484A3C1C0BE3F8ACC4AED536A427353C7748DC365FC1A8646")
155 def test_wrongdigest(self):
156 with self.assertRaises(digest.DigestError):
157 dgst=digest.new("no-such-digest")
159 if __name__ == "__main__":