]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testdigest.py
Addedet length parameter to Digest.update
[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         def test_md5(self):
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"))
17         def test_sha1(self):
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"))
37                 
38
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"
43         def test_cons(self):
44                 md=digest.DigestType("sha1")
45                 dgst=digest.Digest(md)
46                 dgst.update(self.msg)
47                 self.assertEqual(dgst.digest_size,20)
48                 self.assertEqual(dgst.hexdigest(),self.dgst)
49         def test_length(self):
50                 l=len(self.msg)
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):
56                 l=len(self.msg)
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")
62                 dgst.update(self.msg)
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")
67                 dgst.update(self.msg)
68                 v1=dgst.digest()
69                 v2=dgst.digest()
70                 self.assertEqual(v1,v2)
71         def test_updatefinalized(self):
72                 dgst=digest.new("sha1")
73                 dgst.update(self.msg)
74                 h=dgst.hexdigest()
75                 with self.assertRaises(digest.DigestError):
76                         dgst.update(self.msg)
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):
82                         dgst.update(18)
83                 with self.assertRaises(TypeError):
84                         dgst.update({"a":"b","c":"D"})
85                 with self.assertRaises(TypeError):
86                         dgst.update(u'\u0430\u0431')
87         def test_copy(self):
88                 dgst=digest.new("sha1")
89                 dgst.update("A quick brown fox jumps over ")
90                 d2=dgst.copy()
91                 dgst.update("the lazy dog.")
92                 value1=dgst.hexdigest()
93                 d2.update("the fat pig.")
94                 value2=d2.hexdigest()
95                 self.assertEqual(value1,"00CFFE7312BF9CA73584F24BDF7DF1D028340397")
96                 self.assertEqual(value2,"5328F33739BEC2A15B6A30F17D3BC13CC11A7C78")
97 class TestAlgo(unittest.TestCase):
98         """ Test all statdard algorithms """
99         def test_md5(self):
100                 d=digest.new("md5")
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")
104
105         def test_md4(self):
106                 d=digest.new("md4")
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")
128
129 if __name__ == "__main__":
130         unittest.main()