1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# Author: Trevor Perrin 2a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch# See the LICENSE file for legal information regarding use of this file. 3a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""OpenSSL/M2Crypto RC4 implementation.""" 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfrom .cryptomath import * 7a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochfrom .rc4 import RC4 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if m2cryptoLoaded: 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def new(key): 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return OpenSSL_RC4(key) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class OpenSSL_RC4(RC4): 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, key): 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RC4.__init__(self, key, "openssl") 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.rc4 = m2.rc4_new() 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m2.rc4_set_key(self.rc4, key) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __del__(self): 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m2.rc4_free(self.rc4) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def encrypt(self, plaintext): 25a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bytearray(m2.rc4_update(self.rc4, plaintext)) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def decrypt(self, ciphertext): 28a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return bytearray(self.encrypt(ciphertext)) 29