1 from ctypescrypto.oid import Oid
2 from ctypescrypto import cipher
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")
23 class TestEncryptDecrypt(unittest.TestCase):
24 def test_blockcipher(self):
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):
37 c=cipher.new("DES-CBC",key)
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)
44 dec=d.update(enc)+d.finish()
45 self.assertEqual(data,dec)
46 def test_ofb_cipher(self):
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)
58 def test_ofb_noiv(self):
60 encryptkey='abcdabcd'*4
61 decryptkey=encryptkey[0:5]+encryptkey[5:]
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):
74 with self.assertRaises(ValueError):
75 c=cipher.new("AES-128-OFB",key)
76 def test_wrong_ivlength(self):
77 key="abcdabcdabcdabcd"
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"
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__':