def mixcolumn(datalist): # according to the block length we do 2, 4 or 8 times the mix datalistmix = [] for i in range(0, len(datalist) - 1, 2): m11 = Arithmod.add_64bits(Conversions.int2bin_str(datalist[i]), Conversions.int2bin_str(datalist[i + 1])) m11 = Conversions.bin_str2int(m11) rotation = Util.rotate_right(Conversions.int2bin_str(datalist[(i + 1)]), R) m22 = Arithmod.xor_bin_str(Conversions.int2bin_str(m11), Conversions.int2bin_str(rotation)) m22 = Conversions.bin_str2int(m22) datalistmix.append(m11) datalistmix.append(m22) return datalistmix
def inv_mixcolumn(datalist): # according to the block length we do 2, 4 or 8 times the mix datalist_unmix = [] for i in range(0, len(datalist) - 1, 2): xor = Arithmod.xor_bin_str(Conversions.int2bin_str(datalist[i]), Conversions.int2bin_str(datalist[(i + 1)])) m2 = Util.rotate_left(xor, R) m1 = Arithmod.subtract_64bits(Conversions.int2bin_str(datalist[i]), Conversions.int2bin_str(m2)) m1 = Conversions.bin_str2int(m1) datalist_unmix.append(m1) datalist_unmix.append(m2) return datalist_unmix