]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testdigest.py
Added explicit check for CMS functions in libcrypto
[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=b"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+b" 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(b"A quick brown fox jumps over ")
120         d2=dgst.copy()
121         dgst.update(b"the lazy dog.")
122         value1=dgst.hexdigest()
123         d2.update(b"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(b"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(b"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(b"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(b"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(b"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()