Source code for tlslite.utils.python_rc4

# 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 *

[docs] def new(key): return Python_RC4(key)
[docs] class Python_RC4(RC4):
[docs] 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
[docs] 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
[docs] def decrypt(self, ciphertext): return self.encrypt(ciphertext)