Пример #1
0
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
Пример #2
0
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",
    )
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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