def R10toR9(R10St: aes_state.State, KeySt: aes_state.State) -> aes_state.State: InvAddRoundSt: aes_state.State = aes_state.State([]) InvSubSt: aes_state.State = aes_state.State([]) InvAddRoundSt = AddRoundKey(R10St, KeySt) InvSubSt = InvSubByte(InvAddRoundSt) return InvSubSt
def ByteTable(args: List[Any]) -> None: row: int = args[0] column: int = args[1] TextNum: int = args[2] text: List[str] = args[3] HDTable: List[List[int]] = [[0]] * TextNum for i, CipherText in enumerate(text): CipherSt: aes_state.State = aes_state.State([]) KeySt: aes_state.State = aes_state.State([]) CipherSt = InputState(CipherText) HD: List[int] = [0] * 256 for Key in range(256): R9OutSt: aes_state.State = aes_state.State([]) ShiftCipherSt: aes_state.State = aes_state.State([]) hd: int = 0 KeySt.set(row, column, Key) R9OutSt = R10toR9(CipherSt, KeySt) ShiftCipherSt = ShiftRows(CipherSt) hd = HDCalc(row, column, ShiftCipherSt, R9OutSt) HD[Key] = hd HDTable[i] = HD np.savetxt( "./Table/S_{}_{}.csv".format(row, column), HDTable, delimiter=",", fmt="%d", )
def InputState(text: str) -> aes_state.State: assert len(text) == 34, ValueError("Input Error") ResSt: aes_state.State = aes_state.State([]) ByteList: List[str] = [] ByteList = re.split("(..)", text)[1::2] ResSt = aes_state.State(list(map(lambda x: int(x, 16), ByteList[1:]))) return ResSt
def InvSubByte(InputSt: aes_state.State) -> aes_state.State: ResSt: aes_state.State = aes_state.State([]) for row in range(4): for column in range(4): value: int = 0 value = InvS_BOX(InputSt.get(row, column)) ResSt.set(row, column, value) return ResSt
def AddRoundKey(InputSt: aes_state.State, key: aes_state.State) -> aes_state.State: ResSt: aes_state.State = aes_state.State([]) for row in range(4): for column in range(4): value: str = "" value = "{:016X}".format( InputSt.get(row, column) ^ key.get(row, column)) ResSt.set(row, column, int(value[-2:], 16)) return ResSt
def InvShiftRows(InputSt: aes_state.State) -> aes_state.State: ResSt: aes_state.State = aes_state.State([]) ResSt.set(0, 0, InputSt.get(0, 0)) ResSt.set(0, 1, InputSt.get(0, 1)) ResSt.set(0, 2, InputSt.get(0, 2)) ResSt.set(0, 3, InputSt.get(0, 3)) ResSt.set(1, 0, InputSt.get(1, 3)) ResSt.set(1, 1, InputSt.get(1, 0)) ResSt.set(1, 2, InputSt.get(1, 1)) ResSt.set(1, 3, InputSt.get(1, 2)) ResSt.set(2, 0, InputSt.get(2, 2)) ResSt.set(2, 1, InputSt.get(2, 3)) ResSt.set(2, 2, InputSt.get(2, 0)) ResSt.set(2, 3, InputSt.get(2, 1)) ResSt.set(3, 0, InputSt.get(3, 1)) ResSt.set(3, 1, InputSt.get(3, 2)) ResSt.set(3, 2, InputSt.get(3, 3)) ResSt.set(3, 3, InputSt.get(3, 0)) return ResSt