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