]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testcipher.py
22369435c71317093a56df53af891092853f2125
[oss/ctypescrypto.git] / tests / testcipher.py
1 from ctypescrypto.oid import Oid
2 from ctypescrypto import cipher
3 import unittest
4 import sys
5
6
7 class TestCipherType(unittest.TestCase):
8     def test_ciphdescbc(self):
9         ct=cipher.CipherType("des-cbc")
10         self.assertEqual(ct.block_size(),8)
11         self.assertEqual(ct.key_length(),8)
12         self.assertEqual(ct.iv_length(),8)
13         self.assertEqual(ct.algo(),'DES-CBC')
14         self.assertEqual(ct.oid().shortname(),"DES-CBC")
15         self.assertEqual(ct.mode(),"CBC")
16     def test_ciphaesofb(self):
17         ct=cipher.CipherType("aes-256-ofb")
18         self.assertEqual(ct.block_size(),1)
19         self.assertEqual(ct.key_length(),32)
20         self.assertEqual(ct.iv_length(),16)
21         self.assertEqual(ct.algo(),'AES-256-OFB')
22         self.assertEqual(ct.oid().shortname(),"AES-256-OFB")
23         self.assertEqual(ct.mode(),"OFB")
24     def test_unknowncipher(self):
25         with self.assertRaises(cipher.CipherError):
26             ct=cipher.CipherType("no-such-cipher")
27
28 class TestEncryptDecrypt(unittest.TestCase):
29     def test_cons_nokey(self):
30         ct=cipher.CipherType("DES-CBC")
31         with self.assertRaises(ValueError):
32             c=cipher.Cipher(ct,None,None)
33     def test_blockcipher(self):
34         data="sdfdsddf"
35         key='abcdabcd'
36         c=cipher.new("DES-CBC",key)
37         enc=c.update(data)+c.finish()
38         # See if padding is added by default
39         self.assertEqual(len(enc),16)
40         d=cipher.new("DES-CBC",key,encrypt=False)
41         dec=d.update(enc)+d.finish()
42         self.assertEqual(data,dec)
43     def test_blockcipher_nopadding(self):
44         data="sdfdsddf"
45         key='abcdabcd'
46         c=cipher.new("DES-CBC",key)
47         c.padding(False)
48         enc=c.update(data)+c.finish()
49         # See if padding is added by default
50         self.assertEqual(len(enc),8)
51         d=cipher.new("DES-CBC",key,encrypt=False)
52         d.padding(False)
53         dec=d.update(enc)+d.finish()
54         self.assertEqual(data,dec)
55     def test_ofb_cipher(self):
56         data="sdfdsddfxx"
57         key='abcdabcd'
58         iv='abcdabcd'
59         c=cipher.new("DES-OFB",key,iv=iv)
60         enc=c.update(data)+c.finish()
61         # See if padding is added by default
62         self.assertEqual(len(enc),len(data))
63         d=cipher.new("DES-OFB",key,encrypt=False,iv=iv)
64         dec=d.update(enc)+d.finish()
65         self.assertEqual(data,dec)
66
67     def test_ofb_noiv(self):
68         data="sdfdsddfxx"
69         encryptkey='abcdabcd'*4
70         decryptkey=encryptkey[0:5]+encryptkey[5:]
71
72
73         c=cipher.new("AES-256-OFB",encryptkey)
74         enc=c.update(data)+c.finish()
75         # See if padding is added by default
76         self.assertEqual(len(enc),len(data))
77         d=cipher.new("AES-256-OFB",decryptkey,encrypt=False)
78         dec=d.update(enc)+d.finish()
79         self.assertEqual(data,dec)
80     def test_wrong_keylength(self):
81         data="sdfsdfxxx"
82         key="abcdabcd"
83         with self.assertRaises(ValueError):
84             c=cipher.new("AES-128-OFB",key)
85     def test_wrong_ivlength(self):
86         key="abcdabcdabcdabcd"
87         iv="xxxxx"
88         with self.assertRaises(ValueError):
89             c=cipher.new("AES-128-OFB",key,iv=iv)
90     def test_variable_keylength(self):
91         encryptkey="abcdefabcdefghtlgvasdgdgsdgdsg"
92         data="asdfsdfsdfsdfsdfsdfsdfsdf"
93         iv="abcdefgh"
94         c=cipher.new("bf-ofb",encryptkey,iv=iv)
95         ciphertext=c.update(data)+c.finish()
96         decryptkey=encryptkey[0:5]+encryptkey[5:]
97         d=cipher.new("bf-ofb",decryptkey,encrypt=False,iv=iv)
98         deciph=d.update(ciphertext)+d.finish()
99         self.assertEqual(deciph,data)
100
101 if __name__ == '__main__':
102     unittest.main()