]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/batcher/rc4.py
CHANSERV: still using unburnt keystream due to needing website changes
[irc/quakenet/newserv.git] / chanserv / batcher / rc4.py
1 class RC4:
2 def __init__(self, key, burn=0):
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 # self.crypt("\x00" * burn)
12
13 def crypt(self, data):
14 ret = []
15 i = 0
16 j = 0
17 for r in xrange(len(data)):
18 i = (i + 1) % 256
19 j = (j + self.__s[i]) % 256
20 self.__s[i], self.__s[j] = self.__s[j], self.__s[i]
21 ret.append(chr(ord(data[r]) ^ self.__s[(self.__s[i] + self.__s[j]) % 256]))
22 return "".join(ret)
23
24