# Author: Trevor Perrin # See the LICENSE file for legal information regarding use of this file. """Pure-Python RC4 implementation.""" from .rc4 import RC4 from .cryptomath import * def new(key): return Python_RC4(key) class Python_RC4(RC4): def __init__(self, keyBytes): RC4.__init__(self, keyBytes, "python") S = [i for i in range(256)] j = 0 for i in range(256): j = (j + S[i] + keyBytes[i % len(keyBytes)]) % 256 S[i], S[j] = S[j], S[i] self.S = S self.i = 0 self.j = 0 def encrypt(self, plaintextBytes): ciphertextBytes = plaintextBytes[:] S = self.S i = self.i j = self.j for x in range(len(ciphertextBytes)): i = (i + 1) % 256 j = (j + S[i]) % 256 S[i], S[j] = S[j], S[i] t = (S[i] + S[j]) % 256 ciphertextBytes[x] ^= S[t] self.i = i self.j = j return ciphertextBytes def decrypt(self, ciphertext): return self.encrypt(ciphertext)