]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testdigest.py
Fixes some style. Improved tests coverage for bio,oid,digest and cipher. Prepare...
[oss/ctypescrypto.git] / tests / testdigest.py
1 from ctypescrypto.oid import Oid
2 from ctypescrypto import digest
3 from base64 import b16decode,b16encode
4 import unittest
5
6 class TestDigestType(unittest.TestCase):
7         def test_md4(self):
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')
13         def test_md5(self):
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')
19         def test_sha1(self):
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):
44                 oid=Oid('sha256')
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):
54                         s=d2.name
55                 d2.digest=d1.digest
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")
63
64
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"
69         def test_cons(self):
70                 md=digest.DigestType("sha1")
71                 dgst=digest.Digest(md)
72                 dgst.update(self.msg)
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):
80                 l=len(self.msg)
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):
86                 l=len(self.msg)
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")
92                 dgst.update(self.msg)
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")
97                 dgst.update(self.msg)
98                 v1=dgst.digest()
99                 v2=dgst.digest()
100                 self.assertEqual(v1,v2)
101         def test_updatefinalized(self):
102                 dgst=digest.new("sha1")
103                 dgst.update(self.msg)
104                 h=dgst.hexdigest()
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):
112                         dgst.update(18)
113                 with self.assertRaises(TypeError):
114                         dgst.update({"a":"b","c":"D"})
115                 with self.assertRaises(TypeError):
116                         dgst.update(u'\u0430\u0431')
117         def test_copy(self):
118                 dgst=digest.new("sha1")
119                 dgst.update("A quick brown fox jumps over ")
120                 d2=dgst.copy()
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 """
129         def test_md5(self):
130                 d=digest.new("md5")
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")
134
135         def test_md4(self):
136                 d=digest.new("md4")
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")
158
159 if __name__ == "__main__":
160         unittest.main()