]> jfr.im git - irc/quakenet/newserv.git/blob - chanserv/batcher/rc4.py
b926f7db34c9f361503eee19f7f4d71defee33a6
[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 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