def fill_mem_slot_2(n, z, p1=True, p2=True, p3=True, p4=True): global mem_slot_2 for i in range(36): mem_slot_2[i] = 0b0000_0000_0000_0000_0000_0000_0000_0000 signal_2_shifted = helper.shift(signal_2, n) signal_3_suppressed = helper.suppress(signal_3, p1, p2, p3, p4) signal_3_shifted = helper.shift(signal_3_suppressed, z) for s in range(len(signal_1)): i = s * 4 + 3 j, k = int(i / 32), i % 32 #calculate j (junk), k (position) if signal_1[s] == "1": mem_slot_2[j] = mem_slot_2[j] | 1 << 31 - k for s in range(len(signal_2_shifted)): i = s * 4 + 1 j, k = int(i / 32), i % 32 #calculate j (junk), k (position) if signal_2_shifted[s] == "1": mem_slot_2[j] = mem_slot_2[j] | 1 << 31 - k for s in range(len(signal_3_shifted)): i = s * 4 + 2 j, k = int(i / 32), i % 32 #calculate j (junk), k (position) if signal_3_shifted[s] == "1": mem_slot_2[j] = mem_slot_2[j] | 1 << 31 - k for s in range(len(signal_4)): i = s * 4 j, k = int(i / 32), i % 32 #calculate j (junk), k (position) if signal_4[s] == "1": mem_slot_2[j] = mem_slot_2[j] | 1 << 31 - k
def rerun( py_charm=True ): # TODO: increase support + ability to bring correct window to focus if py_charm: shift("f10") return True return False
def gen_round_key(self, key, round=1, verbose=False): if verbose: print("________----------------________") print("ROUND: {}".format(round)) print("Key[{}]: {}:{}".format(round - 1, helper.get_split_string_from_list(key), len(key))) key = list(key) if verbose: print("G: Key: {}:{}".format(helper.get_split_string_from_list(key[-32:]), len(key[-32:]))) shift_key = helper.shift(key[-32:], 8) if verbose: print("G: Shifted-Key: {}:{}".format(helper.get_split_string_from_list(shift_key), len(shift_key))) print("G: RC: {}:{}".format('{0:08b}'.format(self.RC[round]), len('{0:08b}'.format(self.RC[round])))) print("G: V1: {}:{}".format("".join(shift_key[0:8]), len(shift_key[0:8]))) shift_key[0:8] = list('{0:08b}'.format(int("".join(shift_key[0:8]), base=2) ^ self.RC[round])) if verbose: print("G: " + "".join(shift_key[0:8])) print("G: Key:{}:{}".format(helper.get_split_string_from_list(shift_key), len(shift_key))) key[0:32] = shift_key for i in range(32, len(key) - 1, 32): if verbose: print("--------------------------------") print("W[{}] ^ W[{}]:".format(int(((i / 32) - 1) * round), int((i / 32) * round))) print("{}:{}".format(helper.get_split_string_from_list(key[(i - 32):i]), len(key[(i - 32):i]))) print("{}:{}".format(helper.get_split_string_from_list(key[i:(i + 32)]), len(key[i:(i + 32)]))) key[i:(i + 32)] = self.__xor_lists__(key[(i - 32):i], key[i:(i + 32)]) if verbose: print("{}:{}".format(helper.get_split_string_from_list(key[i:(i + 32)]), len(key[i:(i + 32)]))) if verbose: print("Key[{}]: {}:{}".format(round, helper.get_split_string_from_list(key), len(key))) return "".join(key)
def inv_shift_rows(self, hex_matrix, verbose=False): for i in range(1, len(hex_matrix)): hex_matrix[i] = helper.shift(hex_matrix[i], -i) return hex_matrix
def shift_rows(self, hex_matrix): for i in range(1, len(hex_matrix)): hex_matrix[i] = helper.shift(hex_matrix[i], i) return hex_matrix