def MixColumns(state): StateArray_mixed =[[0 for j in range(4)] for i in range(4)] a = np.array([2,3,1,1]) for i in range(4): for j in range(4): StateArray_mixed[i][j] = calc.mod_GF2(calc.mul_GF2(state[i][0],a[0])) ^ calc.mod_GF2(calc.mul_GF2(state[i][1],a[1])) ^ calc.mod_GF2(calc.mul_GF2(state[i][2],a[2])) ^ calc.mod_GF2(calc.mul_GF2(state[i][3],a[3])) a = np.roll(a,1) return StateArray_mixed
def InvMixColumns(state): StateArray_mixed = [[0 for j in range(4)] for i in range(4)] a = np.array([14, 11, 13, 9]) for i in range(4): for j in range(4): StateArray_mixed[i][j] = calc.mod_GF2( calc.mul_GF2(state[i][0], a[0])) ^ calc.mod_GF2( calc.mul_GF2(state[i][1], a[1])) ^ calc.mod_GF2( calc.mul_GF2(state[i][2], a[2])) ^ calc.mod_GF2( calc.mul_GF2(state[i][3], a[3])) a = np.roll(a, 1) return StateArray_mixed
def g(inData,round): outData = inData[1:] outData.append(inData[0]) for i in range(4): outData[i] = S_box[(outData[i] & 0xf0) >> 4][outData[i] & 0x0f] outData[0] = outData[0] ^ calc.mod_GF2(1 << (round-1)) return outData
def g(inData, round): outData = inData[1:] outData.append(inData[0]) for i in range(4): outData[i] = S_box[(outData[i] & 0xf0) >> 4][outData[i] & 0x0f] outData[0] = outData[0] ^ calc.mod_GF2(1 << (round - 1)) return outData