1 from ctypescrypto.oid import Oid
2 from ctypescrypto import cipher
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")
22 class TestEncryptDecrypt(unittest.TestCase):
23 def test_blockcipher(self):
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):
36 c=cipher.new("DES-CBC",key)
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)
43 dec=d.update(enc)+d.finish()
44 self.assertEqual(data,dec)
45 def test_ofb_cipher(self):
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)
57 def test_ofb_noiv(self):
59 encryptkey='abcdabcd'*4
60 decryptkey=encryptkey[0:5]+encryptkey[5:]
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):
73 with self.assertRaises(ValueError):
74 c=cipher.new("AES-128-OFB",key)
75 def test_wrong_ivlength(self):
76 key="abcdabcdabcdabcd"
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"
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,iv=iv)
88 deciph=d.update(ciphertext)+d.finish()
89 self.assertEqual(deciph,data)
90 if __name__ == '__main__':