]> www.wagner.pp.ru Git - oss/ctypescrypto.git/blob - tests/testcipher.py
7fa5a97b6473e866b4e50f3f8b9a021ed15e98ac
[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()