1# Author: Trevor Perrin 2# See the LICENSE file for legal information regarding use of this file. 3 4"""Abstract class for AES.""" 5 6class AES(object): 7 def __init__(self, key, mode, IV, implementation): 8 if len(key) not in (16, 24, 32): 9 raise AssertionError() 10 if mode != 2: 11 raise AssertionError() 12 if len(IV) != 16: 13 raise AssertionError() 14 self.isBlockCipher = True 15 self.block_size = 16 16 self.implementation = implementation 17 if len(key)==16: 18 self.name = "aes128" 19 elif len(key)==24: 20 self.name = "aes192" 21 elif len(key)==32: 22 self.name = "aes256" 23 else: 24 raise AssertionError() 25 26 #CBC-Mode encryption, returns ciphertext 27 #WARNING: *MAY* modify the input as well 28 def encrypt(self, plaintext): 29 assert(len(plaintext) % 16 == 0) 30 31 #CBC-Mode decryption, returns plaintext 32 #WARNING: *MAY* modify the input as well 33 def decrypt(self, ciphertext): 34 assert(len(ciphertext) % 16 == 0)