]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/batcher/rc4.py
A4STATS: remove E style escapes and switch to createtable for indices
[irc/quakenet/newserv.git] / chanserv / batcher / rc4.py
1 class RC4:
2 def __init__(self, key, burn=4096):
3 s = range(256)
4 for i in xrange(256):
5 s[i] = i
6 j = 0
7 for i in xrange(256):
8 j = (j + s[i] + ord(key[i % len(key)])) % 256
9 s[j], s[i] = s[i], s[j]
10 self.__s = s
11
12 if burn:
13 self.crypt("\x00" * burn)
14
15 def crypt(self, data):
16 ret = []
17 i = 0
18 j = 0
19 for r in xrange(len(data)):
20 i = (i + 1) % 256
21 j = (j + self.__s[i]) % 256
22 self.__s[i], self.__s[j] = self.__s[j], self.__s[i]
23 ret.append(chr(ord(data[r]) ^ self.__s[(self.__s[i] + self.__s[j]) % 256]))
24 return "".join(ret)