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