def generateMAC(message, key): padding = "" endblock = "" (K1, K2) = generateSubkeys(key, "\x00\x00\x00\x00\x00\x00\x00\x1b") #print K1.encode("hex") #print K2.encode("hex") if len(message) % 8: padLen = 8 - (len(message) % 8) padding = "\x80" + ("\x00" * (padLen - 1)) message = message + padding endblock = message[-8:len(message)] XORencryptor = XOR.XORCipher(K2) endblock = XORencryptor.encrypt(endblock) else: endblock = message[-8:len(message)] XORencryptor = XOR.XORCipher(K1) endblock = XORencryptor.encrypt(endblock) message = message[0:-8] + endblock CMACencryptor = DES3.new(key, DES3.MODE_CBC, '\x00\x00\x00\x00\x00\x00\x00\x00') mac = CMACencryptor.encrypt(message) #print key.encode("hex") #print message.encode("hex") #print mac.encode("hex") #return mac return mac[-8:len(mac)]
def generateSubkeys(MACKey, constant): #create encrptor encryptor = DES3.new(MACKey, DES3.MODE_ECB, '\x00\x00\x00\x00\x00\x00\x00\x00') XORencryptor = XOR.XORCipher(constant) K1 = "" K2 = "" zeros = "\x00" * 8 #8 bytes of zeros S = encryptor.encrypt(zeros) #print S.encode("hex") if int(S[0].encode("hex"), 16) & 0x80: shiftedS = "%016X" % ( (int(S.encode("hex"), 16) << 1) & 0xFFFFFFFFFFFFFFFF) K1 = XORencryptor.encrypt(shiftedS.decode("hex")) else: shiftedS = "%016X" % ( (int(S.encode("hex"), 16) << 1) & 0xFFFFFFFFFFFFFFFF) K1 = shiftedS.decode("hex") if (int(K1[0].encode("hex"), 16) & 0x80): #print K1.encode("hex") shiftedS = "%016X" % ( (int(K1.encode("hex"), 16) << 1) & 0xFFFFFFFFFFFFFFFF) K2 = XORencryptor.encrypt(shiftedS.decode("hex")) else: shiftedS = "%016X" % ( (int(K1.encode("hex"), 16) << 1) & 0xFFFFFFFFFFFFFFFF) K2 = shiftedS.decode("hex") return K1, K2
def decrypter(cleardata): data = XOR.XORCipher(key) return data.decrypt(cleardata)
from Crypto.Cipher import XOR key = "abcdefghijklij" xor = XOR.XORCipher(key) # To encrypt xor1 = XOR.XORCipher(key) # To decrypt def enc(sock, message, addr): abcd = xor.encrypt(message) print message == dec(sock, abcd, addr) sock.sendto(abcd, addr) return abcd def dec(sock, message, addr): abcd = xor1.decrypt(message) return abcd #message = "dfjsdfjsdfjdsfdfsk" #print message #newm = enc(1, message, message) #print newm #print dec(1, newm, newm)