1 """Cryptlib RC4 implementation.""" 2 3 from cryptomath import * 4 from RC4 import RC4 5 6 if cryptlibpyLoaded: 7 8 def new(key): 9 return Cryptlib_RC4(key) 10 11 class Cryptlib_RC4(RC4): 12 13 def __init__(self, key): 14 RC4.__init__(self, key, "cryptlib") 15 self.context = cryptlib_py.cryptCreateContext(cryptlib_py.CRYPT_UNUSED, cryptlib_py.CRYPT_ALGO_RC4) 16 cryptlib_py.cryptSetAttribute(self.context, cryptlib_py.CRYPT_CTXINFO_KEYSIZE, len(key)) 17 cryptlib_py.cryptSetAttributeString(self.context, cryptlib_py.CRYPT_CTXINFO_KEY, key) 18 19 def __del__(self): 20 cryptlib_py.cryptDestroyContext(self.context) 21 22 def encrypt(self, plaintext): 23 bytes = stringToBytes(plaintext) 24 cryptlib_py.cryptEncrypt(self.context, bytes) 25 return bytesToString(bytes) 26 27 def decrypt(self, ciphertext): 28 return self.encrypt(ciphertext)