1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# Author: Trevor Perrin 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# See the LICENSE file for legal information regarding use of this file. 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""PyCrypto AES implementation.""" 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfrom .cryptomath import * 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfrom .aes import * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if pycryptoLoaded: 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) import Crypto.Cipher.AES 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def new(key, mode, IV): 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PyCrypto_AES(key, mode, IV) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class PyCrypto_AES(AES): 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, key, mode, IV): 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AES.__init__(self, key, mode, IV, "pycrypto") 19a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch key = bytes(key) 20a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch IV = bytes(IV) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.context = Crypto.Cipher.AES.new(key, mode, IV) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def encrypt(self, plaintext): 24a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch plaintext = bytes(plaintext) 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bytearray(self.context.encrypt(plaintext)) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def decrypt(self, ciphertext): 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ciphertext = bytes(ciphertext) 29a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bytearray(self.context.decrypt(ciphertext)) 30