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