]> jfr.im git - irc/quakenet/qwebirc.git/blame - qwebirc/util/ciphers.py
Add admin engine and reorganise a lot of directory structure.
[irc/quakenet/qwebirc.git] / qwebirc / util / ciphers.py
CommitLineData
ace37679
CP
1# write me
2
3def xor(a, b):
4 assert(len(a) == len(b))
5 out = []
6 for i in range(0, len(a)):
7 out.append(chr(ord(a[i]) ^ ord(b[i])))
8
9 return "".join(out)
10
11class CBC:
12 def __init__(self, cipher, iv):
13 self.__cipher = cipher
14 self.__prevblock = False
15 self.__iv = iv
16
17 def encrypt(self, block):
18 if not self.__prevblock:
19 i = self.__iv
20 else:
21 i = self.__prevblock
22
23 c = xor(block, i)
24
25 self.__prevblock = self.__cipher.encrypt(c)
26 return self.__prevblock
27
28 def decrypt(self, block):
29 c = self.__cipher.decrypt(block)
30 if not self.__prevblock:
31 i = self.__iv
32 else:
33 i = self.__prevblock
34
35 c = xor(c, i)
36
37 self.__prevblock = block
38 return c