From 261401aeb4276686b3ec82d5daeb42f5f554d362 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 5 Sep 2023 10:21:19 +0400 Subject: [PATCH 001/179] Creating subciphers from graphs --- claasp/cipher.py | 192 +++++++++++++++++++++++++++++++++++++++++++++++ claasp/round.py | 16 ++++ claasp/rounds.py | 2 +- 3 files changed, 209 insertions(+), 1 deletion(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 4f2ae2b1..9a2db87a 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1784,3 +1784,195 @@ def rounds_as_list(self): @property def type(self): return self._type + + def create_networx_graph_from_input_ids(self): + import networkx as nx + data = self.as_python_dictionary()['cipher_rounds'] + # Create a directed graph + G = nx.DiGraph() + + # Flatten the list of lists + flat_data = [item for sublist in data for item in sublist] + + # Add nodes + for item in flat_data: + G.add_node(item["id"]) + + # Add edges based on input_id_link + for item in flat_data: + for input_id in item.get("input_id_link", []): + # Adding an edge from input_id to the current item's id + G.add_edge(input_id, item["id"]) + + return G + + def create_top_and_bottom_subgraphs_from_components_graph(self, e0_bottom_ids, e1_top_ids): + import networkx as nx + + def get_predecessors_subgraph(G, start_nodes): + H = nx.DiGraph() + + for node in start_nodes: + if node in G: + H.add_node(node) + predecessors_dict = nx.dfs_tree(G, source=node) + for successor, source in predecessors_dict.items(): + H.add_edge(source, successor) + H.add_node(source) + + return H + + def induced_subgraph_of_predecessors(DG, nodes): + visited = set() + + def dfs(v): + if v not in visited: + visited.add(v) + for predecessor in DG.predecessors(v): + dfs(predecessor) + + for node in nodes: + dfs(node) + + return DG.subgraph(visited) + + def get_descendants_subgraph(G, start_nodes): + """ + Extract a subgraph containing only the descendants (successors) of a given list of nodes from a graph. + + Parameters: + - G (nx.DiGraph): The original directed graph. + - start_nodes (list): The list of nodes to start the search from. + + Returns: + - H (nx.DiGraph): The subgraph containing start_nodes and their descendants. + """ + # Create an empty directed subgraph + H = nx.DiGraph() + + # Add nodes from start_nodes to the subgraph and their descendants + for node in start_nodes: + if node in G: + H.add_node(node) + for successor in nx.dfs_successors(G, source=node): + H.add_edge(node, successor) + H.add_node(successor) + + return H + + graph_cipher = self.create_networx_graph_from_input_ids() + ancestors_ids = induced_subgraph_of_predecessors(graph_cipher, e0_bottom_ids) + descendants_ids = get_descendants_subgraph(graph_cipher, e1_top_ids) + return ancestors_ids, descendants_ids + + def update_input_id_links_from_component_id(self, component_id, new_input_id_links): + round_number = self.get_round_from_component_id(component_id) + self._rounds.rounds[round_number].update_input_id_links_from_component_id(component_id, new_input_id_links) + + def update_input_bit_positions_from_component_id(self, component_id, new_input_bit_positions): + round_number = self.get_round_from_component_id(component_id) + self._rounds.rounds[round_number].update_input_bit_positions_from_component_id( + component_id, new_input_bit_positions + ) + + def create_top_and_bottom_ciphers_from_subgraphs(self, top_graph, bottom_graph, middle_ids, e0_end_nodes): + def reorder_and_renumber(data, e1_start): + ordered_data = {} + counter = 0 + + for key in e1_start: + original_lists = data[key] + new_lists = [] + + for inner_list in original_lists: + new_inner_list = [] + for _ in inner_list: + new_inner_list.append(counter) + counter += 1 + new_lists.append(new_inner_list) + + ordered_data[key] = new_lists + + return ordered_data, counter + + initial_nodes_from_bottom_graph = [node for node in bottom_graph if bottom_graph.has_edge(node, node)] + print(initial_nodes_from_bottom_graph) + bottom_cipher = deepcopy(self) + new_input_bit_positions = {} + new_bit_size = 0 + bottom_cipher._inputs_bit_size = [] + bottom_cipher._inputs = [] + for node_id in initial_nodes_from_bottom_graph: + old_component = self.get_component_from_id(node_id) + new_input_id_links = deepcopy(old_component.input_id_links) + for input_id_link_e0 in e0_end_nodes: + if input_id_link_e0 in old_component.input_id_links: + index_e0_end = old_component.input_id_links.index(input_id_link_e0) + new_input_id_links[index_e0_end] = "new_"+input_id_link_e0 + bottom_cipher._inputs.append("new_"+input_id_link_e0) + bottom_cipher._inputs_bit_size.append(32) + + bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) + new_input_bit_positions[old_component.id] = old_component.input_bit_positions + + #reorder_and_renumber_bit_positions, new_bit_size = reorder_and_renumber( + # new_input_bit_positions, initial_nodes_from_bottom_graph + #) + + + + # check orphans + for middle_id in middle_ids: + bottom_cipher._inputs.append(middle_id) + bottom_cipher._inputs_bit_size.append(self.get_component_from_id(middle_id).output_bit_size) + + #for node_id in initial_nodes_from_bottom_graph: + # old_component = self.get_component_from_id(node_id) + # new_input_bit_positions_temp = reorder_and_renumber_bit_positions[old_component.id] + # bottom_cipher.update_input_bit_positions_from_component_id(old_component.id, new_input_bit_positions_temp) + + for round_number in range(bottom_cipher.number_of_rounds): + round_object = self.rounds.round_at(round_number) + list_of_components = round_object.components + for round_component in list_of_components: + + if round_component.id not in bottom_graph.nodes: + #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) + component_to_be_removed = bottom_cipher.get_component_from_id(round_component.id) + component_to_be_removed_round = bottom_cipher.get_round_from_component_id(round_component.id) + #print("component_to_be_removed", component_to_be_removed.id) + bottom_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) + #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) + # check empty rounds + for round_number in range(bottom_cipher.number_of_rounds-1, -1, -1): + round_object = bottom_cipher.rounds.round_at(round_number) + list_of_components = round_object.components + if not list_of_components: + del bottom_cipher._rounds._rounds[round_number] + + # check empty rounds + for round_number in range(bottom_cipher.number_of_rounds): + bottom_cipher.rounds.round_at(round_number)._id = round_number + + top_cipher = deepcopy(self) + for round_number in range(top_cipher.number_of_rounds): + round_object = self.rounds.round_at(round_number) + list_of_components = round_object.components + for round_component in list_of_components: + if round_component.id not in top_graph.nodes: + #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) + component_to_be_removed = top_cipher.get_component_from_id(round_component.id) + component_to_be_removed_round = top_cipher.get_round_from_component_id(round_component.id) + #print("component_to_be_removed", component_to_be_removed.id) + top_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) + + # check empty rounds + for round_number in range(top_cipher.number_of_rounds-1, -1, -1): + round_object = top_cipher.rounds.round_at(round_number) + list_of_components = round_object.components + if not list_of_components: + del top_cipher._rounds._rounds[round_number] + + print(self.as_python_dictionary()) + return top_cipher, bottom_cipher + diff --git a/claasp/round.py b/claasp/round.py index ef13438c..609bb3e0 100644 --- a/claasp/round.py +++ b/claasp/round.py @@ -115,3 +115,19 @@ def id(self): @property def number_of_components(self): return len(self._components) + + def update_input_id_links_from_component_id(self, component_id, new_input_id_links): + i = 0 + for component in self._components: + if component.id == component_id: + break + i += 1 + self._components[i].set_input_id_links(new_input_id_links) + + def update_input_bit_positions_from_component_id(self, component_id, new_input_bit_positions): + i = 0 + for component in self._components: + if component.id == component_id: + break + i += 1 + self._components[i].set_input_bit_positions(new_input_bit_positions) diff --git a/claasp/rounds.py b/claasp/rounds.py index f56d4357..8c0cd742 100644 --- a/claasp/rounds.py +++ b/claasp/rounds.py @@ -15,7 +15,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # **************************************************************************** - +from copy import deepcopy from claasp.round import Round from claasp.DTOs.power_of_2_word_based_dto import PowerOf2WordBasedDTO From b219f83dbdbeacc8a5e94c2b5c2b45e393bb209e Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 5 Sep 2023 10:58:49 +0400 Subject: [PATCH 002/179] Refactoring create_two_ciphers method --- claasp/cipher.py | 159 ++++++++++++++++++----------------------------- 1 file changed, 61 insertions(+), 98 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 9a2db87a..21c13125 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1876,103 +1876,66 @@ def update_input_bit_positions_from_component_id(self, component_id, new_input_b ) def create_top_and_bottom_ciphers_from_subgraphs(self, top_graph, bottom_graph, middle_ids, e0_end_nodes): - def reorder_and_renumber(data, e1_start): - ordered_data = {} - counter = 0 - - for key in e1_start: - original_lists = data[key] - new_lists = [] - - for inner_list in original_lists: - new_inner_list = [] - for _ in inner_list: - new_inner_list.append(counter) - counter += 1 - new_lists.append(new_inner_list) - - ordered_data[key] = new_lists - - return ordered_data, counter - - initial_nodes_from_bottom_graph = [node for node in bottom_graph if bottom_graph.has_edge(node, node)] - print(initial_nodes_from_bottom_graph) - bottom_cipher = deepcopy(self) - new_input_bit_positions = {} - new_bit_size = 0 - bottom_cipher._inputs_bit_size = [] - bottom_cipher._inputs = [] - for node_id in initial_nodes_from_bottom_graph: - old_component = self.get_component_from_id(node_id) - new_input_id_links = deepcopy(old_component.input_id_links) - for input_id_link_e0 in e0_end_nodes: - if input_id_link_e0 in old_component.input_id_links: - index_e0_end = old_component.input_id_links.index(input_id_link_e0) - new_input_id_links[index_e0_end] = "new_"+input_id_link_e0 - bottom_cipher._inputs.append("new_"+input_id_link_e0) - bottom_cipher._inputs_bit_size.append(32) - - bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) - new_input_bit_positions[old_component.id] = old_component.input_bit_positions - - #reorder_and_renumber_bit_positions, new_bit_size = reorder_and_renumber( - # new_input_bit_positions, initial_nodes_from_bottom_graph - #) - - - - # check orphans - for middle_id in middle_ids: - bottom_cipher._inputs.append(middle_id) - bottom_cipher._inputs_bit_size.append(self.get_component_from_id(middle_id).output_bit_size) - - #for node_id in initial_nodes_from_bottom_graph: - # old_component = self.get_component_from_id(node_id) - # new_input_bit_positions_temp = reorder_and_renumber_bit_positions[old_component.id] - # bottom_cipher.update_input_bit_positions_from_component_id(old_component.id, new_input_bit_positions_temp) - - for round_number in range(bottom_cipher.number_of_rounds): - round_object = self.rounds.round_at(round_number) - list_of_components = round_object.components - for round_component in list_of_components: - - if round_component.id not in bottom_graph.nodes: - #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) - component_to_be_removed = bottom_cipher.get_component_from_id(round_component.id) - component_to_be_removed_round = bottom_cipher.get_round_from_component_id(round_component.id) - #print("component_to_be_removed", component_to_be_removed.id) - bottom_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) - # check empty rounds - for round_number in range(bottom_cipher.number_of_rounds-1, -1, -1): - round_object = bottom_cipher.rounds.round_at(round_number) - list_of_components = round_object.components - if not list_of_components: - del bottom_cipher._rounds._rounds[round_number] - - # check empty rounds - for round_number in range(bottom_cipher.number_of_rounds): - bottom_cipher.rounds.round_at(round_number)._id = round_number - - top_cipher = deepcopy(self) - for round_number in range(top_cipher.number_of_rounds): - round_object = self.rounds.round_at(round_number) - list_of_components = round_object.components - for round_component in list_of_components: - if round_component.id not in top_graph.nodes: - #print("first", round_number, round_component.id, bottom_cipher.rounds.round_at(0).components[0].id) - component_to_be_removed = top_cipher.get_component_from_id(round_component.id) - component_to_be_removed_round = top_cipher.get_round_from_component_id(round_component.id) - #print("component_to_be_removed", component_to_be_removed.id) - top_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - - # check empty rounds - for round_number in range(top_cipher.number_of_rounds-1, -1, -1): - round_object = top_cipher.rounds.round_at(round_number) - list_of_components = round_object.components - if not list_of_components: - del top_cipher._rounds._rounds[round_number] - - print(self.as_python_dictionary()) + def removing_empty_rounds(cipher_to_be_checked): + # removing empty rounds + for round_number in range(cipher_to_be_checked.number_of_rounds - 1, -1, -1): + round_object = cipher_to_be_checked.rounds.round_at(round_number) + list_of_components = round_object.components + if not list_of_components: + del cipher_to_be_checked._rounds._rounds[round_number] + + def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): + for round_number in range(new_cipher.number_of_rounds): + round_object = original_cipher.rounds.round_at(round_number) + list_of_components = round_object.components + for round_component in list_of_components: + if round_component.id not in graph.nodes: + component_to_be_removed = new_cipher.get_component_from_id(round_component.id) + component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) + new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) + + def create_bottom_cipher(original_cipher): + initial_nodes_from_bottom_graph = [node for node in bottom_graph if bottom_graph.has_edge(node, node)] + bottom_cipher = deepcopy(original_cipher) + new_input_bit_positions = {} + new_bit_size = 0 + bottom_cipher._inputs_bit_size = [] + bottom_cipher._inputs = [] + for node_id in initial_nodes_from_bottom_graph: + old_component = original_cipher.get_component_from_id(node_id) + new_input_id_links = deepcopy(old_component.input_id_links) + for input_id_link_e0 in e0_end_nodes: + if input_id_link_e0 in old_component.input_id_links: + index_e0_end = old_component.input_id_links.index(input_id_link_e0) + new_input_id_links[index_e0_end] = "new_" + input_id_link_e0 + bottom_cipher._inputs.append("new_" + input_id_link_e0) + bottom_cipher._inputs_bit_size.append(32) + + bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) + new_input_bit_positions[old_component.id] = old_component.input_bit_positions + + # check orphans + for middle_id in middle_ids: + bottom_cipher._inputs.append(middle_id) + bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) + + removing_empty_rounds(bottom_cipher) + removing_nodes_that_are_not_in_list(bottom_cipher, original_cipher, bottom_graph) + + # resetting rounds + for round_number in range(bottom_cipher.number_of_rounds): + bottom_cipher.rounds.round_at(round_number)._id = round_number + return bottom_cipher + + def create_top_cipher(original_cipher): + top_cipher = deepcopy(original_cipher) + removing_nodes_that_are_not_in_list(top_cipher, original_cipher, top_graph) + # remove empty rounds + removing_empty_rounds(top_cipher) + return top_cipher + + top_cipher = create_top_cipher(self) + bottom_cipher = create_bottom_cipher(self) + return top_cipher, bottom_cipher From b515194240fc268c89f2791a0ef6c92a3881a80d Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 6 Sep 2023 09:24:15 +0400 Subject: [PATCH 003/179] Removing unnecessary method --- claasp/cipher.py | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 21c13125..82689ab5 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1809,19 +1809,6 @@ def create_networx_graph_from_input_ids(self): def create_top_and_bottom_subgraphs_from_components_graph(self, e0_bottom_ids, e1_top_ids): import networkx as nx - def get_predecessors_subgraph(G, start_nodes): - H = nx.DiGraph() - - for node in start_nodes: - if node in G: - H.add_node(node) - predecessors_dict = nx.dfs_tree(G, source=node) - for successor, source in predecessors_dict.items(): - H.add_edge(source, successor) - H.add_node(source) - - return H - def induced_subgraph_of_predecessors(DG, nodes): visited = set() @@ -1889,7 +1876,7 @@ def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): round_object = original_cipher.rounds.round_at(round_number) list_of_components = round_object.components for round_component in list_of_components: - if round_component.id not in graph.nodes: + if round_component.id not in graph.nodes and not round_component.id.startswith('cipher_output'): component_to_be_removed = new_cipher.get_component_from_id(round_component.id) component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) @@ -1898,7 +1885,6 @@ def create_bottom_cipher(original_cipher): initial_nodes_from_bottom_graph = [node for node in bottom_graph if bottom_graph.has_edge(node, node)] bottom_cipher = deepcopy(original_cipher) new_input_bit_positions = {} - new_bit_size = 0 bottom_cipher._inputs_bit_size = [] bottom_cipher._inputs = [] for node_id in initial_nodes_from_bottom_graph: @@ -1934,8 +1920,8 @@ def create_top_cipher(original_cipher): removing_empty_rounds(top_cipher) return top_cipher - top_cipher = create_top_cipher(self) - bottom_cipher = create_bottom_cipher(self) + new_top_cipher = create_top_cipher(self) + new_bottom_cipher = create_bottom_cipher(self) - return top_cipher, bottom_cipher + return new_top_cipher, new_bottom_cipher From 7bb8e2cf2cfc61fae58557f84bc8c7e5403cbf70 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 11 Sep 2023 20:51:09 +0400 Subject: [PATCH 004/179] Feat: Adding minizinc boomerang model --- .../minizinc_boomerang_model.py | 188 ++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py new file mode 100644 index 00000000..3ce3e38f --- /dev/null +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -0,0 +1,188 @@ + +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** +from copy import deepcopy + +from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom +from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel +from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ + MinizincXorDifferentialModel +from claasp.name_mappings import CIPHER_OUTPUT, INTERMEDIATE_OUTPUT, WORD_OPERATION + + +class MinizincBoomerangModel(MinizincModel): + def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_size_list=None, sat_or_milp='sat'): + self.top_end_ids = top_end_ids + self.bottom_start_ids = bottom_start_ids + self.middle_ids = middle_ids + self.original_cipher = cipher + self.top_cipher = None + self.bottom_cipher = None + self.intermediate_cipher_outputs = [] + super().__init__(cipher, window_size_list, None, sat_or_milp) + self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, self.bottom_start_ids) + + def create_top_and_bottom_ciphers_from_subgraphs(self): + def removing_empty_rounds(cipher_to_be_checked): + # removing empty rounds + for round_number in range(cipher_to_be_checked.number_of_rounds - 1, -1, -1): + round_object = cipher_to_be_checked.rounds.round_at(round_number) + list_of_components = round_object.components + if not list_of_components: + del cipher_to_be_checked._rounds._rounds[round_number] + + def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): + for round_number in range(new_cipher.number_of_rounds): + round_object = original_cipher.rounds.round_at(round_number) + list_of_components = round_object.components + for round_component in list_of_components: + if round_component.id not in graph.nodes and not round_component.id.startswith('cipher_output') and not round_component.id.startswith('intermediate_output'): + component_to_be_removed = new_cipher.get_component_from_id(round_component.id) + component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) + new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) + if round_component.id.startswith('cipher_output') or round_component.id.startswith('intermediate_output'): + if round_component.id in self.intermediate_cipher_outputs: + component_to_be_removed = new_cipher.get_component_from_id(round_component.id) + component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) + new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) + else: + self.intermediate_cipher_outputs.append(round_component.id) + + def create_bottom_cipher(original_cipher): + initial_nodes_from_bottom_graph = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] + bottom_cipher = deepcopy(original_cipher) + new_input_bit_positions = {} + bottom_cipher._inputs_bit_size = [] + bottom_cipher._inputs = [] + for node_id in initial_nodes_from_bottom_graph: + old_component = original_cipher.get_component_from_id(node_id) + new_input_id_links = deepcopy(old_component.input_id_links) + for input_id_link_e0 in self.top_end_ids: + if input_id_link_e0 in old_component.input_id_links: + index_e0_end = old_component.input_id_links.index(input_id_link_e0) + new_input_id_links[index_e0_end] = "new_" + input_id_link_e0 + bottom_cipher._inputs.append("new_" + input_id_link_e0) + bottom_cipher._inputs_bit_size.append(32) + + bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) + new_input_bit_positions[old_component.id] = old_component.input_bit_positions + + # check orphans + for middle_id in self.middle_ids: + bottom_cipher._inputs.append(middle_id) + bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) + + removing_empty_rounds(bottom_cipher) + removing_nodes_that_are_not_in_list(bottom_cipher, original_cipher, self.bottom_graph) + + # resetting rounds + for round_number in range(bottom_cipher.number_of_rounds): + bottom_cipher.rounds.round_at(round_number)._id = round_number + return bottom_cipher + + def create_top_cipher(original_cipher): + top_cipher = deepcopy(original_cipher) + removing_nodes_that_are_not_in_list(top_cipher, original_cipher, self.top_graph) + # remove empty rounds + removing_empty_rounds(top_cipher) + return top_cipher + + self.top_cipher = create_top_cipher(self.original_cipher) + self.bottom_cipher = create_bottom_cipher(self.original_cipher) + + def objective_generator(self, mzn_top_cipher, mzn_bottom_cipher): + objective_string = [] + modular_addition_concatenation = "++".join(mzn_top_cipher.probability_vars) + "++" +"++".join(mzn_bottom_cipher.probability_vars) + objective_string.append(f'solve:: int_search({modular_addition_concatenation},' + f' smallest, indomain_min, complete)') + objective_string.append(f'minimize sum({modular_addition_concatenation});') + mzn_top_cipher.mzn_output_directives.append(f'output ["Total_Probability: "++show(sum(' + f'{modular_addition_concatenation}))];') + + return objective_string + + def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher): + def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, branch_size): + dLL_vars = [] + dRR_vars = [] + nLL_vars = [] + nRR_vars = [] + for i in range(branch_size): + dLL_vars.append(f'{dLL_id}_y{i}') + dRR_vars.append(f'{dRR_id}_y{i}') + nLL_vars.append(f'{nLL_id}_y{i}') + nRR_vars.append(f'{nRR_id}_y{i}') + dLL_str = ",".join(dLL_vars) + dRR_str = ",".join(dRR_vars) + nLL_str = ",".join(nLL_vars) + nRR_str = ",".join(nRR_vars) + + dLL = f'array1d(0..{branch_size}-1, [{dLL_str}])' + dRR = f'array1d(0..{branch_size}-1, [{dRR_str}])' + nLL = f'array1d(0..{branch_size}-1, [{nLL_str}])' + nRR = f'array1d(0..{branch_size}-1, [{nRR_str}])' + + return f'constraint onlyLargeSwitch_BCT_enum({dLL}, {dRR}, {nLL}, {nRR}, 1, {branch_size}) = true;\n' + + differential_model_top_cipher = MinizincXorDifferentialModel(self.top_cipher, window_size_list=[0 for i in range(self.original_cipher.number_of_rounds)]) + differential_model_top_cipher.build_xor_differential_trail_model( + -1, fixed_variables_for_top_cipher + ) + + differential_model_bottom_cipher = MinizincXorDifferentialModel(self.bottom_cipher, window_size_list=[0 for i in range(self.original_cipher.number_of_rounds)]) + differential_model_bottom_cipher.build_xor_differential_trail_model( + -1, fixed_variables_for_bottom_cipher + ) + branch_size = 32 + bct_constraints1 = create_bct_mzn_constraint_from_component_ids('modadd_3_0', 'rot_3_11', 'modadd_4_0', + 'new_rot_3_11', branch_size) + bct_constraints2 = create_bct_mzn_constraint_from_component_ids('modadd_3_6', 'rot_3_17', 'modadd_4_6', + 'new_rot_3_17', branch_size) + bct_constraints3 = create_bct_mzn_constraint_from_component_ids('modadd_3_12', 'rot_3_5', 'modadd_4_12', + 'new_rot_3_5', branch_size) + bct_constraints4 = create_bct_mzn_constraint_from_component_ids('modadd_3_18', 'rot_3_23', 'modadd_4_18', + 'new_rot_3_23', branch_size) + differential_model_bottom_cipher.add_constraint_from_str(bct_constraints1) + differential_model_bottom_cipher.add_constraint_from_str(bct_constraints2) + differential_model_bottom_cipher.add_constraint_from_str(bct_constraints3) + differential_model_bottom_cipher.add_constraint_from_str(bct_constraints4) + differential_model_bottom_cipher.add_constraint_from_str("include \"bct_model.mzn\";\n") + + differential_model_bottom_cipher._model_constraints.extend(self.objective_generator(differential_model_top_cipher, differential_model_bottom_cipher)) + differential_model_bottom_cipher._model_constraints.extend( + differential_model_bottom_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + + differential_model_top_cipher._model_constraints.extend( + differential_model_top_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + + model_string_top = "\n".join(differential_model_top_cipher.mzn_comments) + "\n".join(differential_model_top_cipher._variables_list) + \ + "\n".join(differential_model_top_cipher._model_constraints) + "\n".join(differential_model_top_cipher.mzn_output_directives) + + model_string_bottom = "\n".join(differential_model_bottom_cipher.mzn_comments) + "\n".join(differential_model_bottom_cipher._variables_list) + \ + "\n".join(differential_model_bottom_cipher._model_constraints) + "\n".join(differential_model_bottom_cipher.mzn_output_directives) + file_path = "." + prefix = "ws0_" + if prefix == "": + filename = f'{file_path}/{differential_model_top_cipher.cipher_id}_mzn_{differential_model_top_cipher.sat_or_milp}.mzn' + else: + filename = f'{file_path}/{prefix}_{differential_model_top_cipher.cipher_id}_mzn_{differential_model_top_cipher.sat_or_milp}.mzn' + + f = open(filename, "w") + f.write(model_string_top+"\n"+model_string_bottom) + f.close() + + From f9f39d6c98c2236f6f7fd38bb2e83d539a5ca25c Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 12 Sep 2023 21:42:28 +0400 Subject: [PATCH 005/179] Refactoring creating top and bottom graphs --- claasp/cipher.py | 63 ------------------- claasp/cipher_modules/graph_generator.py | 15 ++++- .../minizinc_boomerang_model.py | 44 +++++++------ 3 files changed, 40 insertions(+), 82 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 82689ab5..e2f483dc 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1862,66 +1862,3 @@ def update_input_bit_positions_from_component_id(self, component_id, new_input_b component_id, new_input_bit_positions ) - def create_top_and_bottom_ciphers_from_subgraphs(self, top_graph, bottom_graph, middle_ids, e0_end_nodes): - def removing_empty_rounds(cipher_to_be_checked): - # removing empty rounds - for round_number in range(cipher_to_be_checked.number_of_rounds - 1, -1, -1): - round_object = cipher_to_be_checked.rounds.round_at(round_number) - list_of_components = round_object.components - if not list_of_components: - del cipher_to_be_checked._rounds._rounds[round_number] - - def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): - for round_number in range(new_cipher.number_of_rounds): - round_object = original_cipher.rounds.round_at(round_number) - list_of_components = round_object.components - for round_component in list_of_components: - if round_component.id not in graph.nodes and not round_component.id.startswith('cipher_output'): - component_to_be_removed = new_cipher.get_component_from_id(round_component.id) - component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) - new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - - def create_bottom_cipher(original_cipher): - initial_nodes_from_bottom_graph = [node for node in bottom_graph if bottom_graph.has_edge(node, node)] - bottom_cipher = deepcopy(original_cipher) - new_input_bit_positions = {} - bottom_cipher._inputs_bit_size = [] - bottom_cipher._inputs = [] - for node_id in initial_nodes_from_bottom_graph: - old_component = original_cipher.get_component_from_id(node_id) - new_input_id_links = deepcopy(old_component.input_id_links) - for input_id_link_e0 in e0_end_nodes: - if input_id_link_e0 in old_component.input_id_links: - index_e0_end = old_component.input_id_links.index(input_id_link_e0) - new_input_id_links[index_e0_end] = "new_" + input_id_link_e0 - bottom_cipher._inputs.append("new_" + input_id_link_e0) - bottom_cipher._inputs_bit_size.append(32) - - bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) - new_input_bit_positions[old_component.id] = old_component.input_bit_positions - - # check orphans - for middle_id in middle_ids: - bottom_cipher._inputs.append(middle_id) - bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) - - removing_empty_rounds(bottom_cipher) - removing_nodes_that_are_not_in_list(bottom_cipher, original_cipher, bottom_graph) - - # resetting rounds - for round_number in range(bottom_cipher.number_of_rounds): - bottom_cipher.rounds.round_at(round_number)._id = round_number - return bottom_cipher - - def create_top_cipher(original_cipher): - top_cipher = deepcopy(original_cipher) - removing_nodes_that_are_not_in_list(top_cipher, original_cipher, top_graph) - # remove empty rounds - removing_empty_rounds(top_cipher) - return top_cipher - - new_top_cipher = create_top_cipher(self) - new_bottom_cipher = create_bottom_cipher(self) - - return new_top_cipher, new_bottom_cipher - diff --git a/claasp/cipher_modules/graph_generator.py b/claasp/cipher_modules/graph_generator.py index 7933e75f..62bafbf2 100644 --- a/claasp/cipher_modules/graph_generator.py +++ b/claasp/cipher_modules/graph_generator.py @@ -33,6 +33,19 @@ def dfs(v): for node in nodes: dfs(node) + #print("visited", visited) + + # Check for any intermediate_output nodes + for v in list(visited): # Using list to avoid 'set changed size during iteration' error + for successor in original_graph.successors(v): + if successor.startswith('intermediate_output') or successor.startswith('cipher_output'): + immediate_predecessors = list(original_graph.predecessors(successor)) + #print("immediate_predecessors", immediate_predecessors) + #import code; code.interact(local=dict(globals(), **locals())) + if set(immediate_predecessors).issubset(visited): + visited.add(successor) + + return original_graph.subgraph(visited) @@ -42,7 +55,7 @@ def _get_descendants_subgraph(original_graph, start_nodes): for node in start_nodes: if node in original_graph: bottom_graph.add_node(node) - for successor in nx.dfs_successors(original_graph, source=node): + for successor in nx.dfs_tree(original_graph, source=node): bottom_graph.add_edge(node, successor) bottom_graph.add_node(successor) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 3ce3e38f..77cba63a 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -50,17 +50,20 @@ def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): round_object = original_cipher.rounds.round_at(round_number) list_of_components = round_object.components for round_component in list_of_components: - if round_component.id not in graph.nodes and not round_component.id.startswith('cipher_output') and not round_component.id.startswith('intermediate_output'): + if round_component.id not in graph.nodes: component_to_be_removed = new_cipher.get_component_from_id(round_component.id) component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - if round_component.id.startswith('cipher_output') or round_component.id.startswith('intermediate_output'): + """ + if round_component.id.startswith('cipher_output'): if round_component.id in self.intermediate_cipher_outputs: component_to_be_removed = new_cipher.get_component_from_id(round_component.id) component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) else: self.intermediate_cipher_outputs.append(round_component.id) + """ + def create_bottom_cipher(original_cipher): initial_nodes_from_bottom_graph = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] @@ -76,7 +79,8 @@ def create_bottom_cipher(original_cipher): index_e0_end = old_component.input_id_links.index(input_id_link_e0) new_input_id_links[index_e0_end] = "new_" + input_id_link_e0 bottom_cipher._inputs.append("new_" + input_id_link_e0) - bottom_cipher._inputs_bit_size.append(32) + output_bit_size_input_id_link_e0 = original_cipher.get_component_from_id(input_id_link_e0).output_bit_size + bottom_cipher._inputs_bit_size.append(output_bit_size_input_id_link_e0) bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) new_input_bit_positions[old_component.id] = old_component.input_bit_positions @@ -86,8 +90,9 @@ def create_bottom_cipher(original_cipher): bottom_cipher._inputs.append(middle_id) bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) - removing_empty_rounds(bottom_cipher) + removing_nodes_that_are_not_in_list(bottom_cipher, original_cipher, self.bottom_graph) + removing_empty_rounds(bottom_cipher) # resetting rounds for round_number in range(bottom_cipher.number_of_rounds): @@ -115,7 +120,7 @@ def objective_generator(self, mzn_top_cipher, mzn_bottom_cipher): return objective_string - def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher): + def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts): def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, branch_size): dLL_vars = [] dRR_vars = [] @@ -147,19 +152,22 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, differential_model_bottom_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_bottom_cipher ) - branch_size = 32 - bct_constraints1 = create_bct_mzn_constraint_from_component_ids('modadd_3_0', 'rot_3_11', 'modadd_4_0', - 'new_rot_3_11', branch_size) - bct_constraints2 = create_bct_mzn_constraint_from_component_ids('modadd_3_6', 'rot_3_17', 'modadd_4_6', - 'new_rot_3_17', branch_size) - bct_constraints3 = create_bct_mzn_constraint_from_component_ids('modadd_3_12', 'rot_3_5', 'modadd_4_12', - 'new_rot_3_5', branch_size) - bct_constraints4 = create_bct_mzn_constraint_from_component_ids('modadd_3_18', 'rot_3_23', 'modadd_4_18', - 'new_rot_3_23', branch_size) - differential_model_bottom_cipher.add_constraint_from_str(bct_constraints1) - differential_model_bottom_cipher.add_constraint_from_str(bct_constraints2) - differential_model_bottom_cipher.add_constraint_from_str(bct_constraints3) - differential_model_bottom_cipher.add_constraint_from_str(bct_constraints4) + #branch_size = 32 + #bct_constraints1 = create_bct_mzn_constraint_from_component_ids('modadd_3_0', 'rot_3_11', 'modadd_4_0', + # 'new_rot_3_11', branch_size) + #bct_constraints2 = create_bct_mzn_constraint_from_component_ids('modadd_3_6', 'rot_3_17', 'modadd_4_6', + # 'new_rot_3_17', branch_size) + #bct_constraints3 = create_bct_mzn_constraint_from_component_ids('modadd_3_12', 'rot_3_5', 'modadd_4_12', + # 'new_rot_3_5', branch_size) + #bct_constraints4 = create_bct_mzn_constraint_from_component_ids('modadd_3_18', 'rot_3_23', 'modadd_4_18', + # 'new_rot_3_23', branch_size) + for bct in bcts: + bct_mzn_model = create_bct_mzn_constraint_from_component_ids(*bct) + differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) + #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints1) + #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints2) + #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints3) + #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints4) differential_model_bottom_cipher.add_constraint_from_str("include \"bct_model.mzn\";\n") differential_model_bottom_cipher._model_constraints.extend(self.objective_generator(differential_model_top_cipher, differential_model_bottom_cipher)) From a12bc9555cd18aca3daeb99d7211653f113981d8 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 19 Sep 2023 08:56:18 +0400 Subject: [PATCH 006/179] Updating tests/unit/cipher_modules/graph_generator_test.py Updating this test to include intermediate output components and also to add a new test. this new test is testing the _get_descendants_subgraph method on Speck. --- .../cipher_modules/graph_generator_test.py | 200 +++++++++++------- 1 file changed, 127 insertions(+), 73 deletions(-) diff --git a/tests/unit/cipher_modules/graph_generator_test.py b/tests/unit/cipher_modules/graph_generator_test.py index 92f24c49..2dc9f460 100644 --- a/tests/unit/cipher_modules/graph_generator_test.py +++ b/tests/unit/cipher_modules/graph_generator_test.py @@ -1,83 +1,118 @@ from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation - - -e0_graph_nodes = [ - 'rot_0_8', 'rot_1_14', 'xor_1_4', 'rot_0_11', 'xor_0_1', 'modadd_0_21', 'modadd_0_9', 'rot_0_20', 'xor_1_22', - 'xor_0_4', 'modadd_0_0', 'modadd_0_15', 'xor_1_7', 'xor_0_7', 'xor_1_16', 'modadd_1_18', 'xor_1_1', 'modadd_0_18', - 'rot_1_11', 'modadd_1_15', 'xor_1_13', 'plaintext', 'rot_0_5', 'rot_0_23', 'modadd_1_12', 'xor_0_19', 'rot_0_2', - 'rot_1_17', 'modadd_1_21', 'xor_0_10', 'modadd_1_0', 'modadd_1_9', 'modadd_0_6', 'modadd_0_3', 'modadd_1_6', - 'rot_0_17', 'xor_0_22', 'rot_1_20', 'modadd_0_12', 'rot_1_23', 'rot_0_14', 'rot_1_2', 'xor_1_10', 'rot_1_5', - 'xor_1_19', 'xor_0_16', 'modadd_1_3', 'rot_1_8', 'xor_0_13' -] - -e1_graph_nodes = [ - 'xor_2_7', 'rot_2_8', 'modadd_2_9', 'xor_2_10', 'rot_2_11', 'modadd_3_6', 'xor_3_7', 'rot_3_8', 'modadd_3_9', - 'xor_3_10', 'rot_3_11', 'xor_2_1', 'rot_2_2', 'modadd_2_3', 'xor_2_4', 'rot_2_5', 'modadd_3_0', 'xor_3_1', - 'rot_3_2', 'modadd_3_3', 'xor_3_4', 'rot_3_5', 'xor_2_19', 'rot_2_20', 'modadd_2_21', 'xor_2_22', 'rot_2_23', - 'modadd_3_18', 'xor_3_19', 'rot_3_20', 'modadd_3_21', 'xor_3_22', 'rot_3_23', 'xor_2_13', 'rot_2_14', 'modadd_2_15', - 'xor_2_16', 'rot_2_17', 'modadd_3_12', 'xor_3_13', 'rot_3_14', 'modadd_3_15', 'xor_3_16', 'rot_3_17' -] - -e0_graph_edges = [ - ('rot_0_8', 'modadd_0_9'), ('rot_0_8', 'xor_1_7'), ('rot_1_14', 'modadd_1_15'), ('xor_1_4', 'rot_1_5'), - ('rot_0_11', 'modadd_1_6'), ('rot_0_11', 'xor_1_10'), ('xor_0_1', 'rot_0_2'), ('modadd_0_21', 'xor_0_22'), - ('modadd_0_21', 'modadd_1_21'), ('modadd_0_9', 'xor_0_10'), ('modadd_0_9', 'modadd_1_9'), - ('rot_0_20', 'modadd_0_21'), ('rot_0_20', 'xor_1_19'), ('xor_1_22', 'rot_1_23'), ('xor_0_4', 'rot_0_5'), - ('modadd_0_0', 'xor_0_1'), ('modadd_0_0', 'modadd_1_0'), ('modadd_0_15', 'xor_0_16'), - ('modadd_0_15', 'modadd_1_15'), ('xor_1_7', 'rot_1_8'), ('xor_0_7', 'rot_0_8'), ('xor_1_16', 'rot_1_17'), - ('modadd_1_18', 'xor_1_19'), ('xor_1_1', 'rot_1_2'), ('modadd_0_18', 'xor_0_19'), ('modadd_0_18', 'modadd_1_18'), - ('modadd_1_15', 'xor_1_16'), ('xor_1_13', 'rot_1_14'), ('plaintext', 'modadd_0_0'), ('plaintext', 'xor_0_1'), - ('plaintext', 'modadd_0_3'), ('plaintext', 'xor_0_4'), ('plaintext', 'modadd_0_6'), ('plaintext', 'xor_0_7'), - ('plaintext', 'modadd_0_9'), ('plaintext', 'xor_0_10'), ('plaintext', 'modadd_0_12'), ('plaintext', 'xor_0_13'), - ('plaintext', 'modadd_0_15'), ('plaintext', 'xor_0_16'), ('plaintext', 'modadd_0_18'), ('plaintext', 'xor_0_19'), - ('plaintext', 'modadd_0_21'), ('plaintext', 'xor_0_22'), ('rot_0_5', 'modadd_1_0'), ('rot_0_5', 'xor_1_4'), - ('rot_0_23', 'modadd_1_18'), ('rot_0_23', 'xor_1_22'), ('modadd_1_12', 'xor_1_13'), ('xor_0_19', 'rot_0_20'), - ('rot_0_2', 'modadd_0_3'), ('rot_0_2', 'xor_1_1'), ('modadd_1_21', 'xor_1_22'), ('xor_0_10', 'rot_0_11'), - ('modadd_1_0', 'xor_1_1'), ('modadd_1_9', 'xor_1_10'), ('modadd_0_6', 'xor_0_7'), ('modadd_0_6', 'modadd_1_6'), - ('modadd_0_3', 'xor_0_4'), ('modadd_0_3', 'modadd_1_3'), ('modadd_1_6', 'xor_1_7'), ('rot_0_17', 'modadd_1_12'), - ('rot_0_17', 'xor_1_16'), ('xor_0_22', 'rot_0_23'), ('rot_1_20', 'modadd_1_21'), ('modadd_0_12', 'xor_0_13'), - ('modadd_0_12', 'modadd_1_12'), ('rot_0_14', 'modadd_0_15'), ('rot_0_14', 'xor_1_13'), ('rot_1_2', 'modadd_1_3'), - ('xor_1_10', 'rot_1_11'), ('xor_1_19', 'rot_1_20'), ('xor_0_16', 'rot_0_17'), ('modadd_1_3', 'xor_1_4'), - ('rot_1_8', 'modadd_1_9'), ('xor_0_13', 'rot_0_14') -] - -e1_graph_edges = [ - ('xor_2_7', 'xor_2_7'), ('xor_2_7', 'rot_2_8'), ('xor_2_7', 'modadd_2_9'), ('xor_2_7', 'xor_2_10'), - ('xor_2_7', 'rot_2_11'), ('xor_2_7', 'modadd_3_6'), ('xor_2_7', 'xor_3_7'), ('xor_2_7', 'rot_3_8'), - ('xor_2_7', 'modadd_3_9'), ('xor_2_7', 'xor_3_10'), ('xor_2_7', 'rot_3_11'), ('modadd_2_9', 'modadd_2_9'), - ('modadd_2_9', 'xor_2_10'), ('modadd_2_9', 'rot_2_11'), ('modadd_2_9', 'modadd_3_6'), ('modadd_2_9', 'xor_3_7'), - ('modadd_2_9', 'rot_3_8'), ('modadd_2_9', 'modadd_3_9'), ('modadd_2_9', 'xor_3_10'), ('modadd_2_9', 'rot_3_11'), - ('xor_2_10', 'xor_2_10'), ('xor_2_10', 'rot_2_11'), ('xor_2_10', 'modadd_3_6'), ('xor_2_10', 'xor_3_7'), - ('xor_2_10', 'rot_3_8'), ('xor_2_10', 'modadd_3_9'), ('xor_2_10', 'xor_3_10'), ('xor_2_10', 'rot_3_11'), - ('xor_2_1', 'xor_2_1'), ('xor_2_1', 'rot_2_2'), ('xor_2_1', 'modadd_2_3'), ('xor_2_1', 'xor_2_4'), - ('xor_2_1', 'rot_2_5'), ('xor_2_1', 'modadd_3_0'), ('xor_2_1', 'xor_3_1'), ('xor_2_1', 'rot_3_2'), - ('xor_2_1', 'modadd_3_3'), ('xor_2_1', 'xor_3_4'), ('xor_2_1', 'rot_3_5'), ('modadd_2_3', 'modadd_2_3'), - ('modadd_2_3', 'xor_2_4'), ('modadd_2_3', 'rot_2_5'), ('modadd_2_3', 'modadd_3_0'), ('modadd_2_3', 'xor_3_1'), - ('modadd_2_3', 'rot_3_2'), ('modadd_2_3', 'modadd_3_3'), ('modadd_2_3', 'xor_3_4'), ('modadd_2_3', 'rot_3_5'), - ('xor_2_4', 'xor_2_4'), ('xor_2_4', 'rot_2_5'), ('xor_2_4', 'modadd_3_0'), ('xor_2_4', 'xor_3_1'), - ('xor_2_4', 'rot_3_2'), ('xor_2_4', 'modadd_3_3'), ('xor_2_4', 'xor_3_4'), ('xor_2_4', 'rot_3_5'), - ('xor_2_19', 'xor_2_19'), ('xor_2_19', 'rot_2_20'), ('xor_2_19', 'modadd_2_21'), ('xor_2_19', 'xor_2_22'), - ('xor_2_19', 'rot_2_23'), ('xor_2_19', 'modadd_3_18'), ('xor_2_19', 'xor_3_19'), ('xor_2_19', 'rot_3_20'), - ('xor_2_19', 'modadd_3_21'), ('xor_2_19', 'xor_3_22'), ('xor_2_19', 'rot_3_23'), ('modadd_2_21', 'modadd_2_21'), - ('modadd_2_21', 'xor_2_22'), ('modadd_2_21', 'rot_2_23'), ('modadd_2_21', 'modadd_3_18'), - ('modadd_2_21', 'xor_3_19'), ('modadd_2_21', 'rot_3_20'), ('modadd_2_21', 'modadd_3_21'), - ('modadd_2_21', 'xor_3_22'), ('modadd_2_21', 'rot_3_23'), ('xor_2_22', 'xor_2_22'), ('xor_2_22', 'rot_2_23'), - ('xor_2_22', 'modadd_3_18'), ('xor_2_22', 'xor_3_19'), ('xor_2_22', 'rot_3_20'), ('xor_2_22', 'modadd_3_21'), - ('xor_2_22', 'xor_3_22'), ('xor_2_22', 'rot_3_23'), ('xor_2_13', 'xor_2_13'), ('xor_2_13', 'rot_2_14'), - ('xor_2_13', 'modadd_2_15'), ('xor_2_13', 'xor_2_16'), ('xor_2_13', 'rot_2_17'), ('xor_2_13', 'modadd_3_12'), - ('xor_2_13', 'xor_3_13'), ('xor_2_13', 'rot_3_14'), ('xor_2_13', 'modadd_3_15'), ('xor_2_13', 'xor_3_16'), - ('xor_2_13', 'rot_3_17'), ('modadd_2_15', 'modadd_2_15'), ('modadd_2_15', 'xor_2_16'), ('modadd_2_15', 'rot_2_17'), - ('modadd_2_15', 'modadd_3_12'), ('modadd_2_15', 'xor_3_13'), ('modadd_2_15', 'rot_3_14'), - ('modadd_2_15', 'modadd_3_15'), ('modadd_2_15', 'xor_3_16'), ('modadd_2_15', 'rot_3_17'), ('xor_2_16', 'xor_2_16'), - ('xor_2_16', 'rot_2_17'), ('xor_2_16', 'modadd_3_12'), ('xor_2_16', 'xor_3_13'), ('xor_2_16', 'rot_3_14'), - ('xor_2_16', 'modadd_3_15'), ('xor_2_16', 'xor_3_16'), ('xor_2_16', 'rot_3_17') -] +from claasp.cipher_modules.graph_generator import create_networkx_graph_from_input_ids, _get_descendants_subgraph def test_split_cipher_graph_into_top_bottom(): chacha = ChachaPermutation(number_of_rounds=4) + e0_graph_nodes = ['modadd_0_0', 'xor_0_1', 'rot_0_2', 'modadd_0_3', 'xor_0_4', 'rot_0_5', 'modadd_0_6', 'xor_0_7', + 'rot_0_8', 'modadd_0_9', 'xor_0_10', 'rot_0_11', 'modadd_0_12', 'xor_0_13', 'rot_0_14', + 'modadd_0_15', 'xor_0_16', 'rot_0_17', 'modadd_0_18', 'xor_0_19', 'rot_0_20', 'modadd_0_21', + 'xor_0_22', 'rot_0_23', 'intermediate_output_0_24', 'modadd_1_0', 'xor_1_1', 'rot_1_2', + 'modadd_1_3', 'xor_1_4', 'rot_1_5', 'modadd_1_6', 'xor_1_7', 'rot_1_8', 'modadd_1_9', 'xor_1_10', + 'rot_1_11', 'modadd_1_12', 'xor_1_13', 'rot_1_14', 'modadd_1_15', 'xor_1_16', 'rot_1_17', + 'modadd_1_18', 'xor_1_19', 'rot_1_20', 'modadd_1_21', 'xor_1_22', 'rot_1_23', + 'intermediate_output_1_24', 'plaintext'] + e1_graph_nodes = ['xor_2_7', 'rot_2_8', 'modadd_2_9', 'xor_2_10', 'rot_2_11', 'intermediate_output_2_24', + 'modadd_3_6', 'xor_3_7', 'rot_3_8', 'modadd_3_9', 'xor_3_10', 'rot_3_11', 'cipher_output_3_24', + 'xor_2_1', 'rot_2_2', 'modadd_2_3', 'xor_2_4', 'rot_2_5', 'modadd_3_0', 'xor_3_1', 'rot_3_2', + 'modadd_3_3', 'xor_3_4', 'rot_3_5', 'xor_2_19', 'rot_2_20', 'modadd_2_21', 'xor_2_22', 'rot_2_23', + 'modadd_3_18', 'xor_3_19', 'rot_3_20', 'modadd_3_21', 'xor_3_22', 'rot_3_23', 'xor_2_13', + 'rot_2_14', 'modadd_2_15', 'xor_2_16', 'rot_2_17', 'modadd_3_12', 'xor_3_13', 'rot_3_14', + 'modadd_3_15', 'xor_3_16', 'rot_3_17'] + e0_graph_edges = [('modadd_0_0', 'xor_0_1'), ('modadd_0_0', 'intermediate_output_0_24'), + ('modadd_0_0', 'modadd_1_0'), ('xor_0_1', 'rot_0_2'), ('rot_0_2', 'modadd_0_3'), + ('rot_0_2', 'intermediate_output_0_24'), ('rot_0_2', 'xor_1_1'), ('modadd_0_3', 'xor_0_4'), + ('modadd_0_3', 'intermediate_output_0_24'), ('modadd_0_3', 'modadd_1_3'), ('xor_0_4', 'rot_0_5'), + ('rot_0_5', 'intermediate_output_0_24'), ('rot_0_5', 'modadd_1_0'), ('rot_0_5', 'xor_1_4'), + ('modadd_0_6', 'xor_0_7'), ('modadd_0_6', 'intermediate_output_0_24'), + ('modadd_0_6', 'modadd_1_6'), ('xor_0_7', 'rot_0_8'), ('rot_0_8', 'modadd_0_9'), + ('rot_0_8', 'intermediate_output_0_24'), ('rot_0_8', 'xor_1_7'), ('modadd_0_9', 'xor_0_10'), + ('modadd_0_9', 'intermediate_output_0_24'), ('modadd_0_9', 'modadd_1_9'), + ('xor_0_10', 'rot_0_11'), ('rot_0_11', 'intermediate_output_0_24'), ('rot_0_11', 'modadd_1_6'), + ('rot_0_11', 'xor_1_10'), ('modadd_0_12', 'xor_0_13'), + ('modadd_0_12', 'intermediate_output_0_24'), ('modadd_0_12', 'modadd_1_12'), + ('xor_0_13', 'rot_0_14'), ('rot_0_14', 'modadd_0_15'), ('rot_0_14', 'intermediate_output_0_24'), + ('rot_0_14', 'xor_1_13'), ('modadd_0_15', 'xor_0_16'), + ('modadd_0_15', 'intermediate_output_0_24'), ('modadd_0_15', 'modadd_1_15'), + ('xor_0_16', 'rot_0_17'), ('rot_0_17', 'intermediate_output_0_24'), ('rot_0_17', 'modadd_1_12'), + ('rot_0_17', 'xor_1_16'), ('modadd_0_18', 'xor_0_19'), + ('modadd_0_18', 'intermediate_output_0_24'), ('modadd_0_18', 'modadd_1_18'), + ('xor_0_19', 'rot_0_20'), ('rot_0_20', 'modadd_0_21'), ('rot_0_20', 'intermediate_output_0_24'), + ('rot_0_20', 'xor_1_19'), ('modadd_0_21', 'xor_0_22'), + ('modadd_0_21', 'intermediate_output_0_24'), ('modadd_0_21', 'modadd_1_21'), + ('xor_0_22', 'rot_0_23'), ('rot_0_23', 'intermediate_output_0_24'), ('rot_0_23', 'modadd_1_18'), + ('rot_0_23', 'xor_1_22'), ('modadd_1_0', 'xor_1_1'), ('modadd_1_0', 'intermediate_output_1_24'), + ('xor_1_1', 'rot_1_2'), ('rot_1_2', 'modadd_1_3'), ('rot_1_2', 'intermediate_output_1_24'), + ('modadd_1_3', 'xor_1_4'), ('modadd_1_3', 'intermediate_output_1_24'), ('xor_1_4', 'rot_1_5'), + ('rot_1_5', 'intermediate_output_1_24'), ('modadd_1_6', 'xor_1_7'), + ('modadd_1_6', 'intermediate_output_1_24'), ('xor_1_7', 'rot_1_8'), ('rot_1_8', 'modadd_1_9'), + ('rot_1_8', 'intermediate_output_1_24'), ('modadd_1_9', 'xor_1_10'), + ('modadd_1_9', 'intermediate_output_1_24'), ('xor_1_10', 'rot_1_11'), + ('rot_1_11', 'intermediate_output_1_24'), ('modadd_1_12', 'xor_1_13'), + ('modadd_1_12', 'intermediate_output_1_24'), ('xor_1_13', 'rot_1_14'), + ('rot_1_14', 'modadd_1_15'), ('rot_1_14', 'intermediate_output_1_24'), + ('modadd_1_15', 'xor_1_16'), ('modadd_1_15', 'intermediate_output_1_24'), + ('xor_1_16', 'rot_1_17'), ('rot_1_17', 'intermediate_output_1_24'), ('modadd_1_18', 'xor_1_19'), + ('modadd_1_18', 'intermediate_output_1_24'), ('xor_1_19', 'rot_1_20'), + ('rot_1_20', 'modadd_1_21'), ('rot_1_20', 'intermediate_output_1_24'), + ('modadd_1_21', 'xor_1_22'), ('modadd_1_21', 'intermediate_output_1_24'), + ('xor_1_22', 'rot_1_23'), ('rot_1_23', 'intermediate_output_1_24'), ('plaintext', 'modadd_0_0'), + ('plaintext', 'xor_0_1'), ('plaintext', 'modadd_0_3'), ('plaintext', 'xor_0_4'), + ('plaintext', 'modadd_0_6'), ('plaintext', 'xor_0_7'), ('plaintext', 'modadd_0_9'), + ('plaintext', 'xor_0_10'), ('plaintext', 'modadd_0_12'), ('plaintext', 'xor_0_13'), + ('plaintext', 'modadd_0_15'), ('plaintext', 'xor_0_16'), ('plaintext', 'modadd_0_18'), + ('plaintext', 'xor_0_19'), ('plaintext', 'modadd_0_21'), ('plaintext', 'xor_0_22')] + e1_graph_edges = [('xor_2_7', 'xor_2_7'), ('xor_2_7', 'rot_2_8'), ('xor_2_7', 'modadd_2_9'), + ('xor_2_7', 'xor_2_10'), ('xor_2_7', 'rot_2_11'), ('xor_2_7', 'intermediate_output_2_24'), + ('xor_2_7', 'modadd_3_6'), ('xor_2_7', 'xor_3_7'), ('xor_2_7', 'rot_3_8'), + ('xor_2_7', 'modadd_3_9'), ('xor_2_7', 'xor_3_10'), ('xor_2_7', 'rot_3_11'), + ('xor_2_7', 'cipher_output_3_24'), ('modadd_2_9', 'modadd_2_9'), ('modadd_2_9', 'xor_2_10'), + ('modadd_2_9', 'rot_2_11'), ('modadd_2_9', 'intermediate_output_2_24'), + ('modadd_2_9', 'modadd_3_6'), ('modadd_2_9', 'xor_3_7'), ('modadd_2_9', 'rot_3_8'), + ('modadd_2_9', 'modadd_3_9'), ('modadd_2_9', 'xor_3_10'), ('modadd_2_9', 'rot_3_11'), + ('modadd_2_9', 'cipher_output_3_24'), ('xor_2_10', 'xor_2_10'), ('xor_2_10', 'rot_2_11'), + ('xor_2_10', 'intermediate_output_2_24'), ('xor_2_10', 'modadd_3_6'), ('xor_2_10', 'xor_3_7'), + ('xor_2_10', 'rot_3_8'), ('xor_2_10', 'modadd_3_9'), ('xor_2_10', 'xor_3_10'), + ('xor_2_10', 'rot_3_11'), ('xor_2_10', 'cipher_output_3_24'), ('xor_2_1', 'xor_2_1'), + ('xor_2_1', 'rot_2_2'), ('xor_2_1', 'modadd_2_3'), ('xor_2_1', 'xor_2_4'), ('xor_2_1', 'rot_2_5'), + ('xor_2_1', 'intermediate_output_2_24'), ('xor_2_1', 'modadd_3_0'), ('xor_2_1', 'xor_3_1'), + ('xor_2_1', 'rot_3_2'), ('xor_2_1', 'modadd_3_3'), ('xor_2_1', 'xor_3_4'), ('xor_2_1', 'rot_3_5'), + ('xor_2_1', 'cipher_output_3_24'), ('modadd_2_3', 'modadd_2_3'), ('modadd_2_3', 'xor_2_4'), + ('modadd_2_3', 'rot_2_5'), ('modadd_2_3', 'intermediate_output_2_24'), + ('modadd_2_3', 'modadd_3_0'), ('modadd_2_3', 'xor_3_1'), ('modadd_2_3', 'rot_3_2'), + ('modadd_2_3', 'modadd_3_3'), ('modadd_2_3', 'xor_3_4'), ('modadd_2_3', 'rot_3_5'), + ('modadd_2_3', 'cipher_output_3_24'), ('xor_2_4', 'xor_2_4'), ('xor_2_4', 'rot_2_5'), + ('xor_2_4', 'intermediate_output_2_24'), ('xor_2_4', 'modadd_3_0'), ('xor_2_4', 'xor_3_1'), + ('xor_2_4', 'rot_3_2'), ('xor_2_4', 'modadd_3_3'), ('xor_2_4', 'xor_3_4'), ('xor_2_4', 'rot_3_5'), + ('xor_2_4', 'cipher_output_3_24'), ('xor_2_19', 'xor_2_19'), ('xor_2_19', 'rot_2_20'), + ('xor_2_19', 'modadd_2_21'), ('xor_2_19', 'xor_2_22'), ('xor_2_19', 'rot_2_23'), + ('xor_2_19', 'intermediate_output_2_24'), ('xor_2_19', 'modadd_3_18'), ('xor_2_19', 'xor_3_19'), + ('xor_2_19', 'rot_3_20'), ('xor_2_19', 'modadd_3_21'), ('xor_2_19', 'xor_3_22'), + ('xor_2_19', 'rot_3_23'), ('xor_2_19', 'cipher_output_3_24'), ('modadd_2_21', 'modadd_2_21'), + ('modadd_2_21', 'xor_2_22'), ('modadd_2_21', 'rot_2_23'), + ('modadd_2_21', 'intermediate_output_2_24'), ('modadd_2_21', 'modadd_3_18'), + ('modadd_2_21', 'xor_3_19'), ('modadd_2_21', 'rot_3_20'), ('modadd_2_21', 'modadd_3_21'), + ('modadd_2_21', 'xor_3_22'), ('modadd_2_21', 'rot_3_23'), ('modadd_2_21', 'cipher_output_3_24'), + ('xor_2_22', 'xor_2_22'), ('xor_2_22', 'rot_2_23'), ('xor_2_22', 'intermediate_output_2_24'), + ('xor_2_22', 'modadd_3_18'), ('xor_2_22', 'xor_3_19'), ('xor_2_22', 'rot_3_20'), + ('xor_2_22', 'modadd_3_21'), ('xor_2_22', 'xor_3_22'), ('xor_2_22', 'rot_3_23'), + ('xor_2_22', 'cipher_output_3_24'), ('xor_2_13', 'xor_2_13'), ('xor_2_13', 'rot_2_14'), + ('xor_2_13', 'modadd_2_15'), ('xor_2_13', 'xor_2_16'), ('xor_2_13', 'rot_2_17'), + ('xor_2_13', 'intermediate_output_2_24'), ('xor_2_13', 'modadd_3_12'), ('xor_2_13', 'xor_3_13'), + ('xor_2_13', 'rot_3_14'), ('xor_2_13', 'modadd_3_15'), ('xor_2_13', 'xor_3_16'), + ('xor_2_13', 'rot_3_17'), ('xor_2_13', 'cipher_output_3_24'), ('modadd_2_15', 'modadd_2_15'), + ('modadd_2_15', 'xor_2_16'), ('modadd_2_15', 'rot_2_17'), + ('modadd_2_15', 'intermediate_output_2_24'), ('modadd_2_15', 'modadd_3_12'), + ('modadd_2_15', 'xor_3_13'), ('modadd_2_15', 'rot_3_14'), ('modadd_2_15', 'modadd_3_15'), + ('modadd_2_15', 'xor_3_16'), ('modadd_2_15', 'rot_3_17'), ('modadd_2_15', 'cipher_output_3_24'), + ('xor_2_16', 'xor_2_16'), ('xor_2_16', 'rot_2_17'), ('xor_2_16', 'intermediate_output_2_24'), + ('xor_2_16', 'modadd_3_12'), ('xor_2_16', 'xor_3_13'), ('xor_2_16', 'rot_3_14'), + ('xor_2_16', 'modadd_3_15'), ('xor_2_16', 'xor_3_16'), ('xor_2_16', 'rot_3_17'), + ('xor_2_16', 'cipher_output_3_24')] + e0_end = [ "modadd_1_6", "rot_1_17", @@ -127,3 +162,22 @@ def test_split_cipher_graph_into_top_bottom(): assert set(e1_graph.nodes()) == set(e1_graph_nodes) assert set(e0_graph.edges()) == set(e0_graph_edges) assert set(e1_graph.edges()) == set(e1_graph_edges) + + +def test_get_descendants_subgraph(): + speck_cipher = SpeckBlockCipher(number_of_rounds=3) + graph_cipher = create_networkx_graph_from_input_ids(speck_cipher) + descendants_subgraph1 = _get_descendants_subgraph(graph_cipher, ['plaintext']) + descendants_subgraph2 = _get_descendants_subgraph(graph_cipher, ['modadd_0_1']) + descendants_subgraph1_nodes = [ + 'plaintext', 'rot_0_0', 'modadd_0_1', 'xor_0_2', 'xor_0_4', 'intermediate_output_0_6', 'modadd_1_7', 'xor_1_8', + 'xor_1_10', 'intermediate_output_1_12', 'modadd_2_7', 'xor_2_8', 'xor_2_10', 'cipher_output_2_12', 'rot_2_9', + 'rot_2_6', 'rot_1_9', 'rot_1_6', 'rot_0_3' + ] + descendants_subgraph2_nodes = [ + 'modadd_0_1', 'xor_0_2', 'xor_0_4', 'intermediate_output_0_6', 'modadd_1_7', 'xor_1_8', 'xor_1_10', + 'intermediate_output_1_12', 'modadd_2_7', 'xor_2_8', 'xor_2_10', 'cipher_output_2_12', 'rot_2_9', 'rot_2_6', + 'rot_1_9', 'rot_1_6' + ] + assert set(descendants_subgraph1.nodes()) == set(descendants_subgraph1_nodes) + assert set(descendants_subgraph2.nodes()) == set(descendants_subgraph2_nodes) From 82ceadbf7ee870dc3aa6cf8901d26f5aa824e565 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 20 Sep 2023 13:05:31 +0400 Subject: [PATCH 007/179] Updating claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py --- .../minizinc_boomerang_model.py | 176 ++++++++++++++---- 1 file changed, 141 insertions(+), 35 deletions(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 77cba63a..be016da0 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -17,7 +17,10 @@ # **************************************************************************** from copy import deepcopy +from minizinc import Status + from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom +from claasp.cipher_modules.models.milp.utils.mzn_bct_predicates import get_bct_operations from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ MinizincXorDifferentialModel @@ -33,6 +36,9 @@ def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_siz self.top_cipher = None self.bottom_cipher = None self.intermediate_cipher_outputs = [] + self.differential_model_top_cipher = None + self.differential_model_bottom_cipher = None + self.probability_vars = None super().__init__(cipher, window_size_list, None, sat_or_milp) self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, self.bottom_start_ids) @@ -45,7 +51,7 @@ def removing_empty_rounds(cipher_to_be_checked): if not list_of_components: del cipher_to_be_checked._rounds._rounds[round_number] - def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): + def reduce_cipher_by_graph_components(new_cipher, original_cipher, graph): for round_number in range(new_cipher.number_of_rounds): round_object = original_cipher.rounds.round_at(round_number) list_of_components = round_object.components @@ -54,16 +60,6 @@ def removing_nodes_that_are_not_in_list(new_cipher, original_cipher, graph): component_to_be_removed = new_cipher.get_component_from_id(round_component.id) component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - """ - if round_component.id.startswith('cipher_output'): - if round_component.id in self.intermediate_cipher_outputs: - component_to_be_removed = new_cipher.get_component_from_id(round_component.id) - component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) - new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - else: - self.intermediate_cipher_outputs.append(round_component.id) - """ - def create_bottom_cipher(original_cipher): initial_nodes_from_bottom_graph = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] @@ -85,13 +81,11 @@ def create_bottom_cipher(original_cipher): bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) new_input_bit_positions[old_component.id] = old_component.input_bit_positions - # check orphans for middle_id in self.middle_ids: bottom_cipher._inputs.append(middle_id) bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) - - removing_nodes_that_are_not_in_list(bottom_cipher, original_cipher, self.bottom_graph) + reduce_cipher_by_graph_components(bottom_cipher, original_cipher, self.bottom_graph) removing_empty_rounds(bottom_cipher) # resetting rounds @@ -101,7 +95,7 @@ def create_bottom_cipher(original_cipher): def create_top_cipher(original_cipher): top_cipher = deepcopy(original_cipher) - removing_nodes_that_are_not_in_list(top_cipher, original_cipher, self.top_graph) + reduce_cipher_by_graph_components(top_cipher, original_cipher, self.top_graph) # remove empty rounds removing_empty_rounds(top_cipher) return top_cipher @@ -143,13 +137,17 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, return f'constraint onlyLargeSwitch_BCT_enum({dLL}, {dRR}, {nLL}, {nRR}, 1, {branch_size}) = true;\n' - differential_model_top_cipher = MinizincXorDifferentialModel(self.top_cipher, window_size_list=[0 for i in range(self.original_cipher.number_of_rounds)]) - differential_model_top_cipher.build_xor_differential_trail_model( + self.differential_model_top_cipher = MinizincXorDifferentialModel( + self.top_cipher, window_size_list=[0 for i in range(self.top_cipher.number_of_rounds)] + ) + self.differential_model_top_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_top_cipher ) - differential_model_bottom_cipher = MinizincXorDifferentialModel(self.bottom_cipher, window_size_list=[0 for i in range(self.original_cipher.number_of_rounds)]) - differential_model_bottom_cipher.build_xor_differential_trail_model( + self.differential_model_bottom_cipher = MinizincXorDifferentialModel( + self.bottom_cipher, window_size_list=[0 for i in range(self.bottom_cipher.number_of_rounds)] + ) + self.differential_model_bottom_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_bottom_cipher ) #branch_size = 32 @@ -163,34 +161,142 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, # 'new_rot_3_23', branch_size) for bct in bcts: bct_mzn_model = create_bct_mzn_constraint_from_component_ids(*bct) - differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) + self.differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints1) #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints2) #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints3) #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints4) - differential_model_bottom_cipher.add_constraint_from_str("include \"bct_model.mzn\";\n") + #self.differential_model_bottom_cipher.add_constraint_from_str("include \"bct_model.mzn\";\n") + + self.differential_model_bottom_cipher._model_constraints.extend( + self.objective_generator(self.differential_model_top_cipher, self.differential_model_bottom_cipher) + ) + self.differential_model_bottom_cipher._model_constraints.extend( + self.differential_model_bottom_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + + self.differential_model_top_cipher._model_constraints.extend( + self.differential_model_top_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + from claasp.cipher_modules.models.sat.utils.mzn_predicates import get_word_operations + self._model_constraints.extend([get_word_operations()]) + self._model_constraints.extend([get_bct_operations()]) - differential_model_bottom_cipher._model_constraints.extend(self.objective_generator(differential_model_top_cipher, differential_model_bottom_cipher)) - differential_model_bottom_cipher._model_constraints.extend( - differential_model_bottom_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + self._variables_list.extend(self.differential_model_top_cipher._variables_list + \ + self.differential_model_bottom_cipher._variables_list) + self._model_constraints.extend(self.differential_model_top_cipher._model_constraints + \ + self.differential_model_bottom_cipher._model_constraints) - differential_model_top_cipher._model_constraints.extend( - differential_model_top_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) + self.probability_vars = self.differential_model_top_cipher.probability_vars + self.differential_model_bottom_cipher.probability_vars - model_string_top = "\n".join(differential_model_top_cipher.mzn_comments) + "\n".join(differential_model_top_cipher._variables_list) + \ - "\n".join(differential_model_top_cipher._model_constraints) + "\n".join(differential_model_top_cipher.mzn_output_directives) + def write_minizinc_model_to_file(self, file_path, prefix=""): + model_string_top = "\n".join(self.differential_model_top_cipher.mzn_comments) + "\n".join( + self.differential_model_top_cipher.mzn_output_directives) - model_string_bottom = "\n".join(differential_model_bottom_cipher.mzn_comments) + "\n".join(differential_model_bottom_cipher._variables_list) + \ - "\n".join(differential_model_bottom_cipher._model_constraints) + "\n".join(differential_model_bottom_cipher.mzn_output_directives) - file_path = "." - prefix = "ws0_" + model_string_bottom = "\n".join(self.differential_model_bottom_cipher.mzn_comments) + "\n".join( + self.differential_model_bottom_cipher.mzn_output_directives) if prefix == "": - filename = f'{file_path}/{differential_model_top_cipher.cipher_id}_mzn_{differential_model_top_cipher.sat_or_milp}.mzn' + filename = f'{file_path}/{self.differential_model_top_cipher.cipher_id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' else: - filename = f'{file_path}/{prefix}_{differential_model_top_cipher.cipher_id}_mzn_{differential_model_top_cipher.sat_or_milp}.mzn' + filename = f'{file_path}/{prefix}_{self.differential_model_top_cipher.cipher_id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' f = open(filename, "w") - f.write(model_string_top+"\n"+model_string_bottom) + f.write( + model_string_top + "\n" + model_string_bottom + "\n" + "\n".join(self._variables_list) + "\n" + "\n".join(self._model_constraints) + ) f.close() + def parse_probability_vars(self, result, solution): + parsed_result = {} + if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: + for probability_var in self.probability_vars: + lst_value = solution.__dict__[probability_var] + parsed_result[probability_var] = { + 'value': str(hex(int("".join(str(0) if str(x) in ["false", "0"] else str(1) for x in lst_value), + 2))), + 'weight': sum(lst_value) + } + + return parsed_result + + def filter_out_strings_containing_substring(self, strings_list, substring): + return [string for string in strings_list if substring not in string] + + def group_strings_by_pattern(self, result, solution): + results = [] + # Get unique prefixes + if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: + data = self._variables_list + data = self.filter_out_strings_containing_substring(data, 'array') + prefixes = set([entry.split("_y")[0].split(": ")[1] for entry in data if "_y" in entry]) + + # For each prefix, collect matching strings + for prefix in prefixes: + sublist = [entry.split(": ")[1][:-1] for entry in data if + entry.startswith(f"var bool: {prefix}") and "_y" in entry] + if sublist: + results.append(sublist) + + + return results + + def parse_components_with_solution(self, result, solution): + dict_of_component_value = {} + + def get_hex_from_sublists(sublists, bool_dict): + hex_values = {} + for sublist in sublists: + # Convert sublist values to bits using the dictionary + bit_str = ''.join(['1' if bool_dict[val] else '0' for val in sublist]) + + # Convert bit string to hex and append to hex_values + + component_id = sublist[0][:-3] + weight = 0 + if component_id.startswith('modadd') and component_id not in self.middle_ids: + p_modadd_var = [s for s in bool_dict.keys() if s.startswith(f'p_{component_id}')] + weight = sum(bool_dict[p_modadd_var[0]]) + hex_values[component_id] = {'value': hex(int(bit_str, 2)), 'weight': weight, 'sign': 1} + + return hex_values + + if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: + list_of_sublist_of_vars = self.group_strings_by_pattern(result, solution) + dict_of_component_value = get_hex_from_sublists(list_of_sublist_of_vars, solution.__dict__) + + return {'component_values': dict_of_component_value} + + + def _parse_result(self, result, solver_name, total_weight, model_type): + parsed_result = {'id': self.cipher_id, 'model_type': model_type, 'solver_name': solver_name} + if total_weight == "list_of_solutions": + solutions = [] + for solution in result.solution: + parsed_solution_non_linear = self.parse_components_with_solution(result, solution) + + solution_total_weight = 0 + for _, item_value_and_weight in parsed_solution.items(): + solution_total_weight += item_value_and_weight['weight'] + parsed_solution['total_weight'] = solution_total_weight + parsed_solution = {**parsed_solution_non_linear, **parsed_result} + solutions.append(parsed_solution) + return solutions + else: + parsed_result['total_weight'] = total_weight + parsed_result['statistics'] = result.statistics + parsed_result = {**self.parse_components_with_solution(result, result.solution), **parsed_result} + + return parsed_result + + def _get_total_weight(self, result): + if result.status in [Status.SATISFIED, Status.ALL_SOLUTIONS, Status.OPTIMAL_SOLUTION]: + if result.status == Status.OPTIMAL_SOLUTION: + return result.objective + elif result.status in [Status.SATISFIED]: + if isinstance(result.solution, list): + return "list_of_solutions" + else: + return result.solution.objective + elif result.status in [Status.ALL_SOLUTIONS]: + return [] + else: + return None From 7d85453031d41bc5a7fa96f9359397f6411fdabd Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Fri, 13 Oct 2023 06:04:56 +0400 Subject: [PATCH 008/179] bct_model: Added ids to top and bottom ciphers --- .../models/minizinc/minizinc_models/minizinc_boomerang_model.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index be016da0..e2a118d4 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -64,6 +64,7 @@ def reduce_cipher_by_graph_components(new_cipher, original_cipher, graph): def create_bottom_cipher(original_cipher): initial_nodes_from_bottom_graph = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] bottom_cipher = deepcopy(original_cipher) + bottom_cipher._id = f'{original_cipher.id}_bottom' new_input_bit_positions = {} bottom_cipher._inputs_bit_size = [] bottom_cipher._inputs = [] @@ -95,6 +96,7 @@ def create_bottom_cipher(original_cipher): def create_top_cipher(original_cipher): top_cipher = deepcopy(original_cipher) + top_cipher._id = f'{original_cipher.id}_top' reduce_cipher_by_graph_components(top_cipher, original_cipher, self.top_graph) # remove empty rounds removing_empty_rounds(top_cipher) From 2ff6aa780a48908bc51764c5bde68a2b090e0f66 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Sun, 12 Nov 2023 17:36:18 +0400 Subject: [PATCH 009/179] Refactoring: parameterizing get_word_operations --- .../minizinc_models/minizinc_boomerang_model.py | 12 ++++++++---- .../minizinc_xor_differential_model.py | 10 ++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index e2a118d4..59150ba6 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -140,14 +140,16 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, return f'constraint onlyLargeSwitch_BCT_enum({dLL}, {dRR}, {nLL}, {nRR}, 1, {branch_size}) = true;\n' self.differential_model_top_cipher = MinizincXorDifferentialModel( - self.top_cipher, window_size_list=[0 for i in range(self.top_cipher.number_of_rounds)] + self.top_cipher, window_size_list=[0 for i in range(self.top_cipher.number_of_rounds)], + sat_or_milp='sat', include_word_operations_mzn_file=False ) self.differential_model_top_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_top_cipher ) self.differential_model_bottom_cipher = MinizincXorDifferentialModel( - self.bottom_cipher, window_size_list=[0 for i in range(self.bottom_cipher.number_of_rounds)] + self.bottom_cipher, window_size_list=[0 for i in range(self.bottom_cipher.number_of_rounds)], + sat_or_milp='sat', include_word_operations_mzn_file=False ) self.differential_model_bottom_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_bottom_cipher @@ -196,11 +198,13 @@ def write_minizinc_model_to_file(self, file_path, prefix=""): model_string_bottom = "\n".join(self.differential_model_bottom_cipher.mzn_comments) + "\n".join( self.differential_model_bottom_cipher.mzn_output_directives) if prefix == "": - filename = f'{file_path}/{self.differential_model_top_cipher.cipher_id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' + filename = f'{file_path}/{self.original_cipher.id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' else: - filename = f'{file_path}/{prefix}_{self.differential_model_top_cipher.cipher_id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' + filename = f'{file_path}/{prefix}_{self.original_cipher.id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' + f = open(filename, "w") + f.write( model_string_top + "\n" + model_string_bottom + "\n" + "\n".join(self._variables_list) + "\n" + "\n".join(self._model_constraints) ) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py index 158e5967..8413580e 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py @@ -25,7 +25,11 @@ class MinizincXorDifferentialModel(MinizincModel): - def __init__(self, cipher, window_size_list=None, probability_weight_per_round=None, sat_or_milp='sat'): + def __init__( + self, cipher, window_size_list=None, probability_weight_per_round=None, sat_or_milp='sat', + include_word_operations_mzn_file=True + ): + self.include_word_operations_mzn_file = include_word_operations_mzn_file super().__init__(cipher, window_size_list, probability_weight_per_round, sat_or_milp) @staticmethod @@ -475,7 +479,9 @@ def init_constraints(self): else: from claasp.cipher_modules.models.milp.utils.mzn_predicates import get_word_operations - self._model_constraints.extend([get_word_operations()]) + + if self.include_word_operations_mzn_file: + self._model_constraints.extend([get_word_operations()]) self._model_constraints.extend([ f'output [ \"{self.cipher_id}, and window_size={self.window_size_list}\" ++ \"\\n\"];']) self._model_constraints.extend(output_string_for_cipher_inputs) From b5a881fa747084d63714ef2cd88873ecdba4467d Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 28 Nov 2023 09:38:28 +0400 Subject: [PATCH 010/179] Converting delta time objects to seconds --- .../models/minizinc/minizinc_models/minizinc_boomerang_model.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 59150ba6..6b2241b3 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -289,6 +289,8 @@ def _parse_result(self, result, solver_name, total_weight, model_type): parsed_result['total_weight'] = total_weight parsed_result['statistics'] = result.statistics parsed_result = {**self.parse_components_with_solution(result, result.solution), **parsed_result} + parsed_result['statistics']['flatTime'] = parsed_result['statistics']['flatTime'].total_seconds() + parsed_result['statistics']['time'] = parsed_result['statistics']['time'].total_seconds() return parsed_result From 61bf8a45ee6a010e067cffd583dce36a51baacf6 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 24 Jan 2024 09:34:54 +0400 Subject: [PATCH 011/179] Adding test for bct model --- .../minizinc_boomerang_model.py | 16 +- .../minizinc_boomerang_model_test.py | 140 ++++++++++++++++++ 2 files changed, 141 insertions(+), 15 deletions(-) create mode 100644 tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 6b2241b3..1466453a 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -154,23 +154,10 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, self.differential_model_bottom_cipher.build_xor_differential_trail_model( -1, fixed_variables_for_bottom_cipher ) - #branch_size = 32 - #bct_constraints1 = create_bct_mzn_constraint_from_component_ids('modadd_3_0', 'rot_3_11', 'modadd_4_0', - # 'new_rot_3_11', branch_size) - #bct_constraints2 = create_bct_mzn_constraint_from_component_ids('modadd_3_6', 'rot_3_17', 'modadd_4_6', - # 'new_rot_3_17', branch_size) - #bct_constraints3 = create_bct_mzn_constraint_from_component_ids('modadd_3_12', 'rot_3_5', 'modadd_4_12', - # 'new_rot_3_5', branch_size) - #bct_constraints4 = create_bct_mzn_constraint_from_component_ids('modadd_3_18', 'rot_3_23', 'modadd_4_18', - # 'new_rot_3_23', branch_size) + for bct in bcts: bct_mzn_model = create_bct_mzn_constraint_from_component_ids(*bct) self.differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) - #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints1) - #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints2) - #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints3) - #differential_model_bottom_cipher.add_constraint_from_str(bct_constraints4) - #self.differential_model_bottom_cipher.add_constraint_from_str("include \"bct_model.mzn\";\n") self.differential_model_bottom_cipher._model_constraints.extend( self.objective_generator(self.differential_model_top_cipher, self.differential_model_bottom_cipher) @@ -241,7 +228,6 @@ def group_strings_by_pattern(self, result, solution): if sublist: results.append(sublist) - return results def parse_components_with_solution(self, result, solution): diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py new file mode 100644 index 00000000..46592b7a --- /dev/null +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -0,0 +1,140 @@ +from sage.all import * + +from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom +from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_boomerang_model import MinizincBoomerangModel +from claasp.cipher_modules.models.utils import integer_to_bit_list, set_fixed_variables +from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation + +def assigning_value(component_id, list_of_binary_values): + return set_fixed_variables( + component_id=component_id, + constraint_type='equal', + bit_positions=range(len(list_of_binary_values)), + bit_values=list_of_binary_values + ) + + +def print_dictionary(cipher_to_be_printed): + # Convert the dictionary to a string in Python syntax + original_cipher = cipher_to_be_printed.as_python_dictionary() + del original_cipher['cipher_reference_code'] + dict_str = repr(original_cipher) + # Write to a Python file + with open(f'experiments/{cipher_to_be_printed.id}.py', 'w') as file: + file.write(f"{dict_str}\n") + + +def test_build_boomerang_model_chacha(): + chacha = ChachaPermutation(number_of_rounds=8) + print_dictionary(chacha) + + """ + # odd + modadd_3_0 modadd_3_6 modadd_3_12 modadd_3_18 + rot_3_23 rot_3_5 rot_3_11 rot_3_17 + modadd_3_15 modadd_3_21 modadd_3_3 modadd_3_9 + rot_3_8 rot_3_14 rot_3_20 rot_3_2 + + + modadd_3_0, rot_3_5, modadd_3_3, rot_3_2 + modadd_3_6 rot_3_11 modadd_3_9 rot_3_8 + modadd_3_12 rot_3_17 modadd_3_15 rot_3_14 + modadd_3_18 rot_3_23 modadd_3_21 rot_3_20 + + #even + modadd_4_0 modadd_4_6 modadd_4_12 modadd_4_18 + rot_4_5 rot_4_11 rot_4_17 rot_4_23 + modadd_4_3 modadd_4_9 modadd_4_15 modadd_4_21 + rot_4_2 rot_4_8 rot_4_14 rot_4_20 + + modadd_4_0 rot_4_5 modadd_4_3 rot_4_2 + modadd_4_6 rot_4_11 modadd_4_9 rot_4_8 + modadd_4_12 rot_4_17 modadd_4_15 rot_4_14 + modadd_4_18 rot_4_23 modadd_4_21 rot_4_20 + """ + e0_end = [ + "modadd_3_0", + "rot_3_5", + "modadd_3_3", + "rot_3_2", + + "modadd_3_6", + "rot_3_11", + "modadd_3_9", + "rot_3_8", + + "modadd_3_12", + "rot_3_17", + "modadd_3_15", + "rot_3_14", + + "modadd_3_18", + "rot_3_23", + "modadd_3_21", + "rot_3_20" + ] + + e1_start = [ + #"modadd_4_0", + "xor_4_4", + "modadd_4_3", + "xor_4_1", + + #"modadd_4_6", + "xor_4_10", + "modadd_4_9", + "xor_4_7", + + #"modadd_4_12", + "xor_4_16", + "modadd_4_15", + "xor_4_13", + + #"modadd_4_18", + "xor_4_22", + "modadd_4_21", + "xor_4_19" + ] + + e0_e1 = [ + "modadd_4_0", + "modadd_4_6", + "modadd_4_12", + "modadd_4_18" + ] + minizinc_bct_model = MinizincBoomerangModel(chacha, e0_end, e1_start, e0_e1) + minizinc_bct_model.create_top_and_bottom_ciphers_from_subgraphs() + + + print_dictionary(minizinc_bct_model.original_cipher) + print_dictionary(minizinc_bct_model.top_cipher) + print_dictionary(minizinc_bct_model.bottom_cipher) + + fixed_variables_for_top_cipher = [ + {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(512)], + 'operator': '>', 'value': '0'}, + {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(384)], + 'operator': '=', 'value': '0'} + ] + # modadd_4_0 and new_rot_3_23 are inputs of the bottom part + bcts = [ + ['modadd_3_0', 'rot_3_23', 'modadd_4_0', 'new_rot_3_23', 32], + ['modadd_3_6', 'rot_3_5', 'modadd_4_6', 'new_rot_3_5', 32], + ['modadd_3_12', 'rot_3_11', 'modadd_4_12', 'new_rot_3_11', 32], + ['modadd_3_18', 'rot_3_17', 'modadd_4_18', 'new_rot_3_17', 32] + ] + fixed_variables_for_bottom_cipher = [ + {'component_id': 'new_rot_3_23', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], + 'operator': '>', 'value': '0'}, + {'component_id': 'new_rot_3_5', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], + 'operator': '>', 'value': '0'}, + {'component_id': 'new_rot_3_11', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], + 'operator': '>', 'value': '0'}, + {'component_id': 'new_rot_3_17', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], + 'operator': '>', 'value': '0'}] + + minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts) + result = minizinc_bct_model.solve(solver_name='Xor') + total_weight = minizinc_bct_model._get_total_weight(result) + assert total_weight == 68 + From 36fc4cf388f104501aa6dc80719658b9eac01c1c Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 24 Jan 2024 10:53:08 +0400 Subject: [PATCH 012/179] FEATURE/Add: Adding BCT MZN model for ARX ciphers --- .../minizinc_boomerang_model.py | 291 ++++++++++-------- .../minizinc_boomerang_model_test.py | 56 +--- 2 files changed, 161 insertions(+), 186 deletions(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 1466453a..33d97a50 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -1,4 +1,3 @@ - # **************************************************************************** # Copyright 2023 Technology Innovation Institute # @@ -16,7 +15,6 @@ # along with this program. If not, see . # **************************************************************************** from copy import deepcopy - from minizinc import Status from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom @@ -24,7 +22,10 @@ from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ MinizincXorDifferentialModel -from claasp.name_mappings import CIPHER_OUTPUT, INTERMEDIATE_OUTPUT, WORD_OPERATION + + +def filter_out_strings_containing_substring(strings_list, substring): + return [string for string in strings_list if substring not in string] class MinizincBoomerangModel(MinizincModel): @@ -40,107 +41,155 @@ def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_siz self.differential_model_bottom_cipher = None self.probability_vars = None super().__init__(cipher, window_size_list, None, sat_or_milp) - self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, self.bottom_start_ids) + self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, + self.bottom_start_ids) + + @staticmethod + def remove_empty_rounds(cipher): + for round_number in range(cipher.number_of_rounds - 1, -1, -1): + if not cipher.rounds.round_at(round_number).components: + del cipher.rounds.rounds[round_number] + + @staticmethod + def reduce_cipher(new_cipher, original_cipher, graph): + for round_number in range(new_cipher.number_of_rounds): + MinizincBoomerangModel.remove_components_not_in_graph(new_cipher, original_cipher, round_number, graph) + + @staticmethod + def remove_components_not_in_graph(new_cipher, original_cipher, round_number, graph): + round_object = original_cipher.rounds.round_at(round_number) + for component in round_object.components: + if component.id not in graph.nodes: + MinizincBoomerangModel.remove_component(new_cipher, component) + + @staticmethod + def remove_component(new_cipher, component): + component_to_remove = new_cipher.get_component_from_id(component.id) + round_number = new_cipher.get_round_from_component_id(component.id) + new_cipher.remove_round_component(round_number, component_to_remove) + + @staticmethod + def initialize_bottom_cipher(original_cipher): + bottom_cipher = deepcopy(original_cipher) + bottom_cipher._id = f'{original_cipher.id}_bottom' + return bottom_cipher + + def setup_bottom_cipher_inputs(self, bottom_cipher, original_cipher): + initial_nodes = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] + new_input_bit_positions = {} + bottom_cipher._inputs_bit_size = [] + bottom_cipher._inputs = [] + self.update_bottom_cipher_inputs(bottom_cipher, original_cipher, initial_nodes, new_input_bit_positions) + + for middle_id in self.middle_ids: + bottom_cipher._inputs.append(middle_id) + bottom_cipher._inputs_bit_size.append( + original_cipher.get_component_from_id(middle_id).output_bit_size + ) + + def update_bottom_cipher_inputs(self, bottom_cipher, original_cipher, initial_nodes, new_input_bit_positions): + for node_id in initial_nodes: + old_component = original_cipher.get_component_from_id(node_id) + new_input_id_links = self.get_new_input_id_links(old_component, bottom_cipher) + bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) + new_input_bit_positions[old_component.id] = old_component.input_bit_positions + + def get_new_input_id_links(self, component, bottom_cipher): + new_input_id_links = deepcopy(component.input_id_links) + for input_id_link in self.top_end_ids: + if input_id_link in component.input_id_links: + index = component.input_id_links.index(input_id_link) + new_input_id_links[index] = "new_" + input_id_link + bottom_cipher.inputs.append("new_" + input_id_link) + output_bit_size = component.output_bit_size + bottom_cipher.inputs_bit_size.append(output_bit_size) + return new_input_id_links def create_top_and_bottom_ciphers_from_subgraphs(self): - def removing_empty_rounds(cipher_to_be_checked): - # removing empty rounds - for round_number in range(cipher_to_be_checked.number_of_rounds - 1, -1, -1): - round_object = cipher_to_be_checked.rounds.round_at(round_number) - list_of_components = round_object.components - if not list_of_components: - del cipher_to_be_checked._rounds._rounds[round_number] - - def reduce_cipher_by_graph_components(new_cipher, original_cipher, graph): - for round_number in range(new_cipher.number_of_rounds): - round_object = original_cipher.rounds.round_at(round_number) - list_of_components = round_object.components - for round_component in list_of_components: - if round_component.id not in graph.nodes: - component_to_be_removed = new_cipher.get_component_from_id(round_component.id) - component_to_be_removed_round = new_cipher.get_round_from_component_id(round_component.id) - new_cipher.remove_round_component(component_to_be_removed_round, component_to_be_removed) - - def create_bottom_cipher(original_cipher): - initial_nodes_from_bottom_graph = [node for node in self.bottom_graph if self.bottom_graph.has_edge(node, node)] - bottom_cipher = deepcopy(original_cipher) - bottom_cipher._id = f'{original_cipher.id}_bottom' - new_input_bit_positions = {} - bottom_cipher._inputs_bit_size = [] - bottom_cipher._inputs = [] - for node_id in initial_nodes_from_bottom_graph: - old_component = original_cipher.get_component_from_id(node_id) - new_input_id_links = deepcopy(old_component.input_id_links) - for input_id_link_e0 in self.top_end_ids: - if input_id_link_e0 in old_component.input_id_links: - index_e0_end = old_component.input_id_links.index(input_id_link_e0) - new_input_id_links[index_e0_end] = "new_" + input_id_link_e0 - bottom_cipher._inputs.append("new_" + input_id_link_e0) - output_bit_size_input_id_link_e0 = original_cipher.get_component_from_id(input_id_link_e0).output_bit_size - bottom_cipher._inputs_bit_size.append(output_bit_size_input_id_link_e0) - - bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) - new_input_bit_positions[old_component.id] = old_component.input_bit_positions - - for middle_id in self.middle_ids: - bottom_cipher._inputs.append(middle_id) - bottom_cipher._inputs_bit_size.append(original_cipher.get_component_from_id(middle_id).output_bit_size) - - reduce_cipher_by_graph_components(bottom_cipher, original_cipher, self.bottom_graph) - removing_empty_rounds(bottom_cipher) - - # resetting rounds - for round_number in range(bottom_cipher.number_of_rounds): - bottom_cipher.rounds.round_at(round_number)._id = round_number - return bottom_cipher - - def create_top_cipher(original_cipher): - top_cipher = deepcopy(original_cipher) - top_cipher._id = f'{original_cipher.id}_top' - reduce_cipher_by_graph_components(top_cipher, original_cipher, self.top_graph) - # remove empty rounds - removing_empty_rounds(top_cipher) - return top_cipher - - self.top_cipher = create_top_cipher(self.original_cipher) - self.bottom_cipher = create_bottom_cipher(self.original_cipher) - - def objective_generator(self, mzn_top_cipher, mzn_bottom_cipher): + self.top_cipher = self.create_top_cipher(self.original_cipher) + self.bottom_cipher = self.create_bottom_cipher(self.original_cipher) + + def create_bottom_cipher(self, original_cipher): + bottom_cipher = MinizincBoomerangModel.initialize_bottom_cipher(original_cipher) + self.setup_bottom_cipher_inputs(bottom_cipher, original_cipher) + MinizincBoomerangModel.reduce_cipher(bottom_cipher, original_cipher, self.bottom_graph) + MinizincBoomerangModel.remove_empty_rounds(bottom_cipher) + MinizincBoomerangModel.reset_round_ids(bottom_cipher) + return bottom_cipher + + def create_top_cipher(self, original_cipher): + top_cipher = deepcopy(original_cipher) + top_cipher._id = f'{original_cipher.id}_top' + MinizincBoomerangModel.reduce_cipher(top_cipher, original_cipher, self.top_graph) + MinizincBoomerangModel.remove_empty_rounds(top_cipher) + return top_cipher + + @staticmethod + def reset_round_ids(cipher): + for round_number in range(cipher.number_of_rounds): + cipher.rounds.round_at(round_number)._id = round_number + + @staticmethod + def objective_generator(mzn_top_cipher, mzn_bottom_cipher): objective_string = [] - modular_addition_concatenation = "++".join(mzn_top_cipher.probability_vars) + "++" +"++".join(mzn_bottom_cipher.probability_vars) + modular_addition_concatenation = "++".join(mzn_top_cipher.probability_vars) + "++" + "++".join( + mzn_bottom_cipher.probability_vars) objective_string.append(f'solve:: int_search({modular_addition_concatenation},' f' smallest, indomain_min, complete)') objective_string.append(f'minimize sum({modular_addition_concatenation});') mzn_top_cipher.mzn_output_directives.append(f'output ["Total_Probability: "++show(sum(' - f'{modular_addition_concatenation}))];') + f'{modular_addition_concatenation}))];') return objective_string + @staticmethod + def _get_total_weight(result): + if result.status in [Status.SATISFIED, Status.ALL_SOLUTIONS, Status.OPTIMAL_SOLUTION]: + if result.status == Status.OPTIMAL_SOLUTION: + return result.objective + elif result.status in [Status.SATISFIED]: + if isinstance(result.solution, list): + return "list_of_solutions" + else: + return result.solution.objective + elif result.status in [Status.ALL_SOLUTIONS]: + return [] + else: + return None + def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts): - def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, branch_size): - dLL_vars = [] - dRR_vars = [] - nLL_vars = [] - nRR_vars = [] + def create_bct_mzn_constraint_from_component_ids( + delta_left_component_id, delta_right_component_id, nabla_left_component_id, nabla_right_component_id, + branch_size + ): + delta_left_vars = [] + delta_right_vars = [] + nabla_left_vars = [] + nabla_right_vars = [] for i in range(branch_size): - dLL_vars.append(f'{dLL_id}_y{i}') - dRR_vars.append(f'{dRR_id}_y{i}') - nLL_vars.append(f'{nLL_id}_y{i}') - nRR_vars.append(f'{nRR_id}_y{i}') - dLL_str = ",".join(dLL_vars) - dRR_str = ",".join(dRR_vars) - nLL_str = ",".join(nLL_vars) - nRR_str = ",".join(nRR_vars) - - dLL = f'array1d(0..{branch_size}-1, [{dLL_str}])' - dRR = f'array1d(0..{branch_size}-1, [{dRR_str}])' - nLL = f'array1d(0..{branch_size}-1, [{nLL_str}])' - nRR = f'array1d(0..{branch_size}-1, [{nRR_str}])' - - return f'constraint onlyLargeSwitch_BCT_enum({dLL}, {dRR}, {nLL}, {nRR}, 1, {branch_size}) = true;\n' + delta_left_vars.append(f'{delta_left_component_id}_y{i}') + delta_right_vars.append(f'{delta_right_component_id}_y{i}') + nabla_left_vars.append(f'{nabla_left_component_id}_y{i}') + nabla_right_vars.append(f'{nabla_right_component_id}_y{i}') + delta_left_str = ",".join(delta_left_vars) + delta_right_str = ",".join(delta_right_vars) + nabla_left_str = ",".join(nabla_left_vars) + nabla_right_str = ",".join(nabla_right_vars) + + delta_left = f'array1d(0..{branch_size}-1, [{delta_left_str}])' + delta_right = f'array1d(0..{branch_size}-1, [{delta_right_str}])' + nabla_left = f'array1d(0..{branch_size}-1, [{nabla_left_str}])' + nabla_right = f'array1d(0..{branch_size}-1, [{nabla_right_str}])' + + return ( + f"constraint onlyLargeSwitch_BCT_enum({delta_left}, {delta_right}, " + f"{nabla_left}, {nabla_right}, 1, {branch_size}) = true;\n" + ) + + self.create_top_and_bottom_ciphers_from_subgraphs() self.differential_model_top_cipher = MinizincXorDifferentialModel( - self.top_cipher, window_size_list=[0 for i in range(self.top_cipher.number_of_rounds)], + self.top_cipher, window_size_list=[0 for _ in range(self.top_cipher.number_of_rounds)], sat_or_milp='sat', include_word_operations_mzn_file=False ) self.differential_model_top_cipher.build_xor_differential_trail_model( @@ -148,7 +197,7 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, ) self.differential_model_bottom_cipher = MinizincXorDifferentialModel( - self.bottom_cipher, window_size_list=[0 for i in range(self.bottom_cipher.number_of_rounds)], + self.bottom_cipher, window_size_list=[0 for _ in range(self.bottom_cipher.number_of_rounds)], sat_or_milp='sat', include_word_operations_mzn_file=False ) self.differential_model_bottom_cipher.build_xor_differential_trail_model( @@ -159,24 +208,27 @@ def create_bct_mzn_constraint_from_component_ids(dLL_id, dRR_id, nLL_id, nRR_id, bct_mzn_model = create_bct_mzn_constraint_from_component_ids(*bct) self.differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) - self.differential_model_bottom_cipher._model_constraints.extend( - self.objective_generator(self.differential_model_top_cipher, self.differential_model_bottom_cipher) + self.differential_model_bottom_cipher.extend_model_constraints( + MinizincBoomerangModel.objective_generator(self.differential_model_top_cipher, + self.differential_model_bottom_cipher) ) - self.differential_model_bottom_cipher._model_constraints.extend( + self.differential_model_bottom_cipher.extend_model_constraints( self.differential_model_bottom_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) - self.differential_model_top_cipher._model_constraints.extend( + self.differential_model_top_cipher.extend_model_constraints( self.differential_model_top_cipher.weight_constraints(max_weight=None, weight=None, operator=">=")) from claasp.cipher_modules.models.sat.utils.mzn_predicates import get_word_operations self._model_constraints.extend([get_word_operations()]) self._model_constraints.extend([get_bct_operations()]) - self._variables_list.extend(self.differential_model_top_cipher._variables_list + \ - self.differential_model_bottom_cipher._variables_list) - self._model_constraints.extend(self.differential_model_top_cipher._model_constraints + \ - self.differential_model_bottom_cipher._model_constraints) + self._variables_list.extend(self.differential_model_top_cipher.get_variables() + + self.differential_model_bottom_cipher.get_variables()) + self._model_constraints.extend(self.differential_model_top_cipher.get_model_constraints() + + self.differential_model_bottom_cipher.get_model_constraints()) + top_cipher_probability_vars = self.differential_model_top_cipher.probability_vars + bottom_cipher_probability_vars = self.differential_model_bottom_cipher.probability_vars - self.probability_vars = self.differential_model_top_cipher.probability_vars + self.differential_model_bottom_cipher.probability_vars + self.probability_vars = top_cipher_probability_vars + bottom_cipher_probability_vars def write_minizinc_model_to_file(self, file_path, prefix=""): model_string_top = "\n".join(self.differential_model_top_cipher.mzn_comments) + "\n".join( @@ -187,13 +239,13 @@ def write_minizinc_model_to_file(self, file_path, prefix=""): if prefix == "": filename = f'{file_path}/{self.original_cipher.id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' else: - filename = f'{file_path}/{prefix}_{self.original_cipher.id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' - + filename = f'{file_path}/{prefix}_{self.original_cipher.id}_mzn_' + filename += f'{self.differential_model_top_cipher.sat_or_milp}.mzn' f = open(filename, "w") - f.write( - model_string_top + "\n" + model_string_bottom + "\n" + "\n".join(self._variables_list) + "\n" + "\n".join(self._model_constraints) + model_string_top + "\n" + model_string_bottom + "\n" + "\n".join(self._variables_list) + "\n" + "\n".join( + self._model_constraints) ) f.close() @@ -210,15 +262,12 @@ def parse_probability_vars(self, result, solution): return parsed_result - def filter_out_strings_containing_substring(self, strings_list, substring): - return [string for string in strings_list if substring not in string] - - def group_strings_by_pattern(self, result, solution): + def group_strings_by_pattern(self, result): results = [] # Get unique prefixes if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: data = self._variables_list - data = self.filter_out_strings_containing_substring(data, 'array') + data = filter_out_strings_containing_substring(data, 'array') prefixes = set([entry.split("_y")[0].split(": ")[1] for entry in data if "_y" in entry]) # For each prefix, collect matching strings @@ -236,11 +285,7 @@ def parse_components_with_solution(self, result, solution): def get_hex_from_sublists(sublists, bool_dict): hex_values = {} for sublist in sublists: - # Convert sublist values to bits using the dictionary bit_str = ''.join(['1' if bool_dict[val] else '0' for val in sublist]) - - # Convert bit string to hex and append to hex_values - component_id = sublist[0][:-3] weight = 0 if component_id.startswith('modadd') and component_id not in self.middle_ids: @@ -251,19 +296,18 @@ def get_hex_from_sublists(sublists, bool_dict): return hex_values if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: - list_of_sublist_of_vars = self.group_strings_by_pattern(result, solution) + list_of_sublist_of_vars = self.group_strings_by_pattern(result) dict_of_component_value = get_hex_from_sublists(list_of_sublist_of_vars, solution.__dict__) return {'component_values': dict_of_component_value} - def _parse_result(self, result, solver_name, total_weight, model_type): parsed_result = {'id': self.cipher_id, 'model_type': model_type, 'solver_name': solver_name} if total_weight == "list_of_solutions": solutions = [] for solution in result.solution: + parsed_solution = {'total_weight': None, 'component_values': {}} parsed_solution_non_linear = self.parse_components_with_solution(result, solution) - solution_total_weight = 0 for _, item_value_and_weight in parsed_solution.items(): solution_total_weight += item_value_and_weight['weight'] @@ -279,18 +323,3 @@ def _parse_result(self, result, solver_name, total_weight, model_type): parsed_result['statistics']['time'] = parsed_result['statistics']['time'].total_seconds() return parsed_result - - def _get_total_weight(self, result): - if result.status in [Status.SATISFIED, Status.ALL_SOLUTIONS, Status.OPTIMAL_SOLUTION]: - if result.status == Status.OPTIMAL_SOLUTION: - return result.objective - elif result.status in [Status.SATISFIED]: - if isinstance(result.solution, list): - return "list_of_solutions" - else: - return result.solution.objective - elif result.status in [Status.ALL_SOLUTIONS]: - return [] - else: - return None - diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py index 46592b7a..c8a55d9e 100644 --- a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -1,57 +1,9 @@ -from sage.all import * - -from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_boomerang_model import MinizincBoomerangModel -from claasp.cipher_modules.models.utils import integer_to_bit_list, set_fixed_variables from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation -def assigning_value(component_id, list_of_binary_values): - return set_fixed_variables( - component_id=component_id, - constraint_type='equal', - bit_positions=range(len(list_of_binary_values)), - bit_values=list_of_binary_values - ) - - -def print_dictionary(cipher_to_be_printed): - # Convert the dictionary to a string in Python syntax - original_cipher = cipher_to_be_printed.as_python_dictionary() - del original_cipher['cipher_reference_code'] - dict_str = repr(original_cipher) - # Write to a Python file - with open(f'experiments/{cipher_to_be_printed.id}.py', 'w') as file: - file.write(f"{dict_str}\n") - def test_build_boomerang_model_chacha(): chacha = ChachaPermutation(number_of_rounds=8) - print_dictionary(chacha) - - """ - # odd - modadd_3_0 modadd_3_6 modadd_3_12 modadd_3_18 - rot_3_23 rot_3_5 rot_3_11 rot_3_17 - modadd_3_15 modadd_3_21 modadd_3_3 modadd_3_9 - rot_3_8 rot_3_14 rot_3_20 rot_3_2 - - - modadd_3_0, rot_3_5, modadd_3_3, rot_3_2 - modadd_3_6 rot_3_11 modadd_3_9 rot_3_8 - modadd_3_12 rot_3_17 modadd_3_15 rot_3_14 - modadd_3_18 rot_3_23 modadd_3_21 rot_3_20 - - #even - modadd_4_0 modadd_4_6 modadd_4_12 modadd_4_18 - rot_4_5 rot_4_11 rot_4_17 rot_4_23 - modadd_4_3 modadd_4_9 modadd_4_15 modadd_4_21 - rot_4_2 rot_4_8 rot_4_14 rot_4_20 - - modadd_4_0 rot_4_5 modadd_4_3 rot_4_2 - modadd_4_6 rot_4_11 modadd_4_9 rot_4_8 - modadd_4_12 rot_4_17 modadd_4_15 rot_4_14 - modadd_4_18 rot_4_23 modadd_4_21 rot_4_20 - """ e0_end = [ "modadd_3_0", "rot_3_5", @@ -103,12 +55,6 @@ def test_build_boomerang_model_chacha(): "modadd_4_18" ] minizinc_bct_model = MinizincBoomerangModel(chacha, e0_end, e1_start, e0_e1) - minizinc_bct_model.create_top_and_bottom_ciphers_from_subgraphs() - - - print_dictionary(minizinc_bct_model.original_cipher) - print_dictionary(minizinc_bct_model.top_cipher) - print_dictionary(minizinc_bct_model.bottom_cipher) fixed_variables_for_top_cipher = [ {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(512)], @@ -135,6 +81,6 @@ def test_build_boomerang_model_chacha(): minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts) result = minizinc_bct_model.solve(solver_name='Xor') - total_weight = minizinc_bct_model._get_total_weight(result) + total_weight = MinizincBoomerangModel._get_total_weight(result) assert total_weight == 68 From ee2b14be9a232fc7a640477b955a8a988e044023 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 24 Jan 2024 12:51:18 +0400 Subject: [PATCH 013/179] Refactoring bct list: Moving to modular component --- .../minizinc_boomerang_model.py | 41 ++++--------------- claasp/components/modular_component.py | 32 +++++++++++++++ .../minizinc_boomerang_model_test.py | 18 +++----- 3 files changed, 45 insertions(+), 46 deletions(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 33d97a50..a0e2de05 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -32,7 +32,7 @@ class MinizincBoomerangModel(MinizincModel): def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_size_list=None, sat_or_milp='sat'): self.top_end_ids = top_end_ids self.bottom_start_ids = bottom_start_ids - self.middle_ids = middle_ids + self.sboxes_ids = middle_ids self.original_cipher = cipher self.top_cipher = None self.bottom_cipher = None @@ -81,7 +81,7 @@ def setup_bottom_cipher_inputs(self, bottom_cipher, original_cipher): bottom_cipher._inputs = [] self.update_bottom_cipher_inputs(bottom_cipher, original_cipher, initial_nodes, new_input_bit_positions) - for middle_id in self.middle_ids: + for middle_id in self.sboxes_ids: bottom_cipher._inputs.append(middle_id) bottom_cipher._inputs_bit_size.append( original_cipher.get_component_from_id(middle_id).output_bit_size @@ -157,35 +157,7 @@ def _get_total_weight(result): else: return None - def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts): - def create_bct_mzn_constraint_from_component_ids( - delta_left_component_id, delta_right_component_id, nabla_left_component_id, nabla_right_component_id, - branch_size - ): - delta_left_vars = [] - delta_right_vars = [] - nabla_left_vars = [] - nabla_right_vars = [] - for i in range(branch_size): - delta_left_vars.append(f'{delta_left_component_id}_y{i}') - delta_right_vars.append(f'{delta_right_component_id}_y{i}') - nabla_left_vars.append(f'{nabla_left_component_id}_y{i}') - nabla_right_vars.append(f'{nabla_right_component_id}_y{i}') - delta_left_str = ",".join(delta_left_vars) - delta_right_str = ",".join(delta_right_vars) - nabla_left_str = ",".join(nabla_left_vars) - nabla_right_str = ",".join(nabla_right_vars) - - delta_left = f'array1d(0..{branch_size}-1, [{delta_left_str}])' - delta_right = f'array1d(0..{branch_size}-1, [{delta_right_str}])' - nabla_left = f'array1d(0..{branch_size}-1, [{nabla_left_str}])' - nabla_right = f'array1d(0..{branch_size}-1, [{nabla_right_str}])' - - return ( - f"constraint onlyLargeSwitch_BCT_enum({delta_left}, {delta_right}, " - f"{nabla_left}, {nabla_right}, 1, {branch_size}) = true;\n" - ) - + def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher): self.create_top_and_bottom_ciphers_from_subgraphs() self.differential_model_top_cipher = MinizincXorDifferentialModel( @@ -204,8 +176,9 @@ def create_bct_mzn_constraint_from_component_ids( -1, fixed_variables_for_bottom_cipher ) - for bct in bcts: - bct_mzn_model = create_bct_mzn_constraint_from_component_ids(*bct) + for sbox_component_id in self.sboxes_ids: + sbox_component = self.original_cipher.get_component_from_id(sbox_component_id) + bct_mzn_model = sbox_component.create_bct_mzn_constraint_from_component_ids() self.differential_model_bottom_cipher.add_constraint_from_str(bct_mzn_model) self.differential_model_bottom_cipher.extend_model_constraints( @@ -288,7 +261,7 @@ def get_hex_from_sublists(sublists, bool_dict): bit_str = ''.join(['1' if bool_dict[val] else '0' for val in sublist]) component_id = sublist[0][:-3] weight = 0 - if component_id.startswith('modadd') and component_id not in self.middle_ids: + if component_id.startswith('modadd') and component_id not in self.sboxes_ids: p_modadd_var = [s for s in bool_dict.keys() if s.startswith(f'p_{component_id}')] weight = sum(bool_dict[p_modadd_var[0]]) hex_values[component_id] = {'value': hex(int(bit_str, 2)), 'weight': weight, 'sign': 1} diff --git a/claasp/components/modular_component.py b/claasp/components/modular_component.py index a376f31e..11f30d3f 100644 --- a/claasp/components/modular_component.py +++ b/claasp/components/modular_component.py @@ -1135,3 +1135,35 @@ def twoterms_milp_probability_xor_linear_constraints(self, binary_variable, inte x[f"{self.id}_chunk_{chunk_number}_dummy_{i}"] for i in range(output_bit_size))) return variables, constraints + + def create_bct_mzn_constraint_from_component_ids(self): + component_dict = self.as_python_dictionary() + delta_left_component_id = component_dict['input_id_link'][0] + delta_right_component_id = component_dict['input_id_link'][1] + nabla_left_component_id = self.id + nabla_right_component_id = f'new_{delta_right_component_id}' + branch_size = self.output_bit_size + delta_left_vars = [] + delta_right_vars = [] + nabla_left_vars = [] + nabla_right_vars = [] + for i in range(branch_size): + delta_left_vars.append(f'{delta_left_component_id}_y{i}') + delta_right_vars.append(f'{delta_right_component_id}_y{i}') + nabla_left_vars.append(f'{nabla_left_component_id}_y{i}') + nabla_right_vars.append(f'{nabla_right_component_id}_y{i}') + delta_left_str = ",".join(delta_left_vars) + delta_right_str = ",".join(delta_right_vars) + nabla_left_str = ",".join(nabla_left_vars) + nabla_right_str = ",".join(nabla_right_vars) + + delta_left = f'array1d(0..{branch_size}-1, [{delta_left_str}])' + delta_right = f'array1d(0..{branch_size}-1, [{delta_right_str}])' + nabla_left = f'array1d(0..{branch_size}-1, [{nabla_left_str}])' + nabla_right = f'array1d(0..{branch_size}-1, [{nabla_right_str}])' + + constraint = ( + f"constraint onlyLargeSwitch_BCT_enum({delta_left}, {delta_right}, " + f"{nabla_left}, {nabla_right}, 1, {branch_size}) = true;\n" + ) + return constraint \ No newline at end of file diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py index c8a55d9e..1b518777 100644 --- a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -4,7 +4,7 @@ def test_build_boomerang_model_chacha(): chacha = ChachaPermutation(number_of_rounds=8) - e0_end = [ + top_cipher_end = [ "modadd_3_0", "rot_3_5", "modadd_3_3", @@ -26,7 +26,7 @@ def test_build_boomerang_model_chacha(): "rot_3_20" ] - e1_start = [ + bottom_cipher_start = [ #"modadd_4_0", "xor_4_4", "modadd_4_3", @@ -48,13 +48,13 @@ def test_build_boomerang_model_chacha(): "xor_4_19" ] - e0_e1 = [ + sboxes = [ "modadd_4_0", "modadd_4_6", "modadd_4_12", "modadd_4_18" ] - minizinc_bct_model = MinizincBoomerangModel(chacha, e0_end, e1_start, e0_e1) + minizinc_bct_model = MinizincBoomerangModel(chacha, top_cipher_end, bottom_cipher_start, sboxes) fixed_variables_for_top_cipher = [ {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(512)], @@ -62,13 +62,7 @@ def test_build_boomerang_model_chacha(): {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(384)], 'operator': '=', 'value': '0'} ] - # modadd_4_0 and new_rot_3_23 are inputs of the bottom part - bcts = [ - ['modadd_3_0', 'rot_3_23', 'modadd_4_0', 'new_rot_3_23', 32], - ['modadd_3_6', 'rot_3_5', 'modadd_4_6', 'new_rot_3_5', 32], - ['modadd_3_12', 'rot_3_11', 'modadd_4_12', 'new_rot_3_11', 32], - ['modadd_3_18', 'rot_3_17', 'modadd_4_18', 'new_rot_3_17', 32] - ] + fixed_variables_for_bottom_cipher = [ {'component_id': 'new_rot_3_23', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], 'operator': '>', 'value': '0'}, @@ -79,7 +73,7 @@ def test_build_boomerang_model_chacha(): {'component_id': 'new_rot_3_17', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], 'operator': '>', 'value': '0'}] - minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher, bcts) + minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher) result = minizinc_bct_model.solve(solver_name='Xor') total_weight = MinizincBoomerangModel._get_total_weight(result) assert total_weight == 68 From b4179f05c5ab629c18a465f10b11f4212602a73a Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 24 Jan 2024 14:27:05 +0400 Subject: [PATCH 014/179] Refactoring bct list: Moving to modular component --- .../minizinc_boomerang_model.py | 2 +- .../minizinc_xor_differential_model.py | 13 +- .../minizinc/utils/mzn_bct_predicates.py | 144 ++++++++++++++++++ 3 files changed, 156 insertions(+), 3 deletions(-) create mode 100644 claasp/cipher_modules/models/minizinc/utils/mzn_bct_predicates.py diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index a0e2de05..db9bc69e 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -18,7 +18,7 @@ from minizinc import Status from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom -from claasp.cipher_modules.models.milp.utils.mzn_bct_predicates import get_bct_operations +from claasp.cipher_modules.models.minizinc.utils.mzn_bct_predicates import get_bct_operations from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ MinizincXorDifferentialModel diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py index e49d64e5..cf4fb89e 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.py @@ -84,7 +84,6 @@ def get_hex_string_from_bool_dict(data, bool_dict, probability_vars_weights_): list_of_vars, dict_of_solutions, probability_vars_weights ) - return parsed_solution @staticmethod @@ -527,7 +526,6 @@ def init_constraints(self): else: from claasp.cipher_modules.models.milp.utils.mzn_predicates import get_word_operations - if self.include_word_operations_mzn_file: self._model_constraints.extend([get_word_operations()]) self._model_constraints.extend([ @@ -699,3 +697,14 @@ def set_max_number_of_carries_on_arx_cipher(self, max_number_of_carries): concatenated_str = " ++ ".join(var['mzn_carry_array_name'] for var in self.carries_vars) self._model_constraints.append(f'constraint sum({concatenated_str}) <= {max_number_of_carries};\n') + def extend_variables(self, variables): + self._variables_list.extend(variables) + + def extend_model_constraints(self, constraints): + self._model_constraints.extend(constraints) + + def get_variables(self): + return self._variables_list + + def get_model_constraints(self): + return self._model_constraints diff --git a/claasp/cipher_modules/models/minizinc/utils/mzn_bct_predicates.py b/claasp/cipher_modules/models/minizinc/utils/mzn_bct_predicates.py new file mode 100644 index 00000000..fcdf26a5 --- /dev/null +++ b/claasp/cipher_modules/models/minizinc/utils/mzn_bct_predicates.py @@ -0,0 +1,144 @@ +def get_bct_operations(): + bct_string = """ + include \"table.mzn\"; + int:num_workers = 4; + int: num_rows = 16; + int: num_cols = 9; + array[0..num_cols-1] of var 0..1: b; + array[0..num_workers-1,0..num_rows-1,0..num_cols-1] of 0..1: bct_table = + array3d(0..num_workers-1,0..num_rows-1,0..num_cols-1, + [ + 0, 0, 0, 0, 1, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 1, 0, 0, 1, + 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 1, 0, 0, 1, 1, 0, 0, 1, + 0, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 0, 1, 0, 1, 0, 0, 1, 1, + 0, 1, 1, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 1, 0, 1, + 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, 0, + 1, 1, 0, 1, 1, 0, 0, 1, 1, + 0, 0, 1, 1, 1, 0, 1, 0, 1, + 1, 0, 1, 1, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 0, 1, 1, 0, 0, 1, + 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, + 1, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, + 1, 1, 1, 0, 0, 1, 0, 1, 1, + 0, 0, 0, 1, 0, 1, 1, 0, 1, + 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, 0, + 1, 1, 0, 1, 0, 1, 0, 1, 1, + 0, 0, 1, 1, 0, 0, 0, 0, 0, + 1, 0, 1, 1, 0, 1, 1, 0, 1, + 0, 1, 1, 1, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 1, 0, 1, 1, + 0, 0, 0, 0, 1, 0, 1, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, 1, 0, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 0, 0, 1, 1, 0, 1, + 0, 0, 0, 1, 1, 0, 1, 0, 1, + 1, 0, 0, 1, 0, 1, 1, 0, 1, + 0, 1, 0, 1, 0, 0, 0, 0, 0, + 1, 1, 0, 1, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 0, 0, 1, 0, 0, + 1, 0, 1, 1, 0, 0, 1, 1, 1, + 0, 1, 1, 1, 0, 0, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, 0, 1, 1, + 0, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 0, 0, 0, 1, 0, 1, 1, + 0, 0, 1, 0, 1, 0, 0, 1, 1, + 1, 0, 1, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 0, 0, 1, 0, 1, 1, + 0, 0, 0, 1, 0, 0, 0, 0, 0, + 1, 0, 0, 1, 0, 0, 0, 0, 0, + 0, 1, 0, 1, 1, 0, 0, 1, 1, + 1, 1, 0, 1, 0, 1, 0, 1, 1, + 0, 0, 1, 1, 0, 0, 1, 1, 1, + 1, 0, 1, 1, 0, 0, 1, 1, 1, + 0, 1, 1, 1, 0, 0, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 1, 0 + ]); + + int: branchSize_ = 24; + predicate onlyLargeSwitch_BCT_enum( + array[int] of var bool: dL, + array[int] of var bool:dR, + array[int] of var bool: nL, + array[int] of var bool:nR, + int: halfNum, + int: branchSize, + ) = + let { + array[0..branchSize - 1, 0..3] of var bool: dp , + array[0..branchSize - 2] of var bool: isHalf ; + array[0..branchSize-2, 0..15] of var bool: matrix; + array[0..branchSize-2, 0..3] of var bool: halfSize; + array[0..branchSize-2] of var bool: ifEnforced; + array[0..branchSize-2, 0..3] of var bool: enforcedLiterals; + array[0..branchSize-2, 0..15] of var bool: literals; + } in + (sum(isHalf) <= halfNum) /\\ + (dp[0, 0] == true) /\\ + (dp[0, 1] == false) /\\ + (dp[0, 2] == false) /\\ + (dp[0, 3] == false) /\\ + forall(i in 0..branchSize-2) ( + forall(cn in 0..3) ( + let { + array[0..8] of var bool: column = array1d(0..8, [dL[i], dR[i], nL[i], nR[i], matrix[i, 0*4+cn], matrix[i, 1*4+cn], matrix[i, 2*4+cn], matrix[i, 3*4+cn], halfSize[i, cn]]) + } in + BVAssign(column, cn) + ) /\\ + (dp[i + 1, 0] \\/ dp[i + 1, 1] \\/ dp[i + 1, 2] \\/ dp[i + 1, 3]) /\\ + + forall(j in 0..3) ( + (ifEnforced[i] == not(isHalf[i])) /\\ + (not(ifEnforced[i]) \\/ not(dp[i,j]) \\/ matrix[i, j*4+j]) /\\ + (not(ifEnforced[i]) \\/ not(dp[i,j]) \\/ dp[i+1,j]) /\\ + sum([not(ifEnforced[i]), not(dp[i,j]), matrix[i, j * 4 + j]]) >= 1 /\\ + sum([not(ifEnforced[i]), not(dp[i,j]), dp[i + 1,j]]) >= 1 + ) /\\ + forall(j in 0..3) ( + (enforcedLiterals[i,j] -> (not(matrix[i,j * 4 + j]) /\\ dp[i,j])) /\\ + (not(enforcedLiterals[i,j]) -> (matrix[i,j * 4 + j] \\/ not(dp[i,j]))) + ) /\\ + (ifEnforced[i] \\/ enforcedLiterals[i,0] \\/ enforcedLiterals[i,1] \\/ enforcedLiterals[i,2] \\/ enforcedLiterals[i,3]) /\\ + forall(r in 0..3) ( + forall(cc in 0..3) ( + (literals[i, r * 4 + cc] -> (matrix[i, r * 4 + cc] /\\ dp[i, cc])) /\\ + (not(literals[i, r * 4 + cc]) -> (not(matrix[i,r * 4 + cc]) \\/ not(dp[i,cc]))) /\\ + (matrix[i,r * 4 + cc] >= literals[i,r * 4 + cc]) /\\ + (dp[i,cc] >= literals[i,r * 4 + cc]) /\\ + sum([ literals[i, r * 4 + cc], true ]) >= sum([ matrix[i, r * 4 + cc], dp[i,cc] ]) + ) /\\ + (dp[i + 1,r] -> (literals[i,r * 4 + 0] \\/ literals[i,r * 4 + 1] \\/ literals[i,r * 4 + 2] \\/ literals[i,r * 4 + 3])) /\\ + (not(dp[i + 1,r]) -> (not(literals[i,r * 4 + 0]) /\\ not(literals[i,r * 4 + 1]) /\\ not(literals[i,r * 4 + 2]) /\\ not(literals[i,r * 4 + 3]))) /\\ + forall(li in 0..3) ( dp[i + 1,r] >= literals[i, r * 4 + li] ) /\\ + (sum([ literals[i,r * 4 + 0], literals[i,r * 4 + 1], literals[i,r * 4 + 2], literals[i,r * 4 + 3] ]) >= dp[i + 1,r]) + ) + + ) + ; + predicate BVAssign(array[0..num_cols-1] of var bool: column, int: index) = + let { + array[int] of set of int: indices = [index..index, 0..num_rows-1, 0..num_cols-1]; + array[int,int] of int: extractedFromTable = slice_2d(bct_table, indices, 0..num_rows-1, 0..num_cols-1); + } in + table(column, extractedFromTable); + """ + return bct_string From 416e3571f4517e5a771cad6f026a0bea36bea51d Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Wed, 24 Jan 2024 18:11:16 +0400 Subject: [PATCH 015/179] Refactoring group_strings_by_pattern --- .../minizinc_boomerang_model.py | 26 +++---------------- .../models/minizinc/utils/utils.py | 19 ++++++++++++++ .../minizinc_boomerang_model_test.py | 3 ++- 3 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 claasp/cipher_modules/models/minizinc/utils/utils.py diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index db9bc69e..282d315d 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -22,10 +22,7 @@ from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ MinizincXorDifferentialModel - - -def filter_out_strings_containing_substring(strings_list, substring): - return [string for string in strings_list if substring not in string] +from claasp.cipher_modules.models.minizinc.utils.utils import group_strings_by_pattern class MinizincBoomerangModel(MinizincModel): @@ -235,23 +232,6 @@ def parse_probability_vars(self, result, solution): return parsed_result - def group_strings_by_pattern(self, result): - results = [] - # Get unique prefixes - if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: - data = self._variables_list - data = filter_out_strings_containing_substring(data, 'array') - prefixes = set([entry.split("_y")[0].split(": ")[1] for entry in data if "_y" in entry]) - - # For each prefix, collect matching strings - for prefix in prefixes: - sublist = [entry.split(": ")[1][:-1] for entry in data if - entry.startswith(f"var bool: {prefix}") and "_y" in entry] - if sublist: - results.append(sublist) - - return results - def parse_components_with_solution(self, result, solution): dict_of_component_value = {} @@ -269,12 +249,12 @@ def get_hex_from_sublists(sublists, bool_dict): return hex_values if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: - list_of_sublist_of_vars = self.group_strings_by_pattern(result) + list_of_sublist_of_vars = group_strings_by_pattern(self._variables_list) dict_of_component_value = get_hex_from_sublists(list_of_sublist_of_vars, solution.__dict__) return {'component_values': dict_of_component_value} - def _parse_result(self, result, solver_name, total_weight, model_type): + def bct_parse_result(self, result, solver_name, total_weight, model_type): parsed_result = {'id': self.cipher_id, 'model_type': model_type, 'solver_name': solver_name} if total_weight == "list_of_solutions": solutions = [] diff --git a/claasp/cipher_modules/models/minizinc/utils/utils.py b/claasp/cipher_modules/models/minizinc/utils/utils.py new file mode 100644 index 00000000..7d6b5e63 --- /dev/null +++ b/claasp/cipher_modules/models/minizinc/utils/utils.py @@ -0,0 +1,19 @@ + +def filter_out_strings_containing_substring(strings_list, substring): + return [string for string in strings_list if substring not in string] + + +def group_strings_by_pattern(list_of_data): + results = [] + data = list_of_data + data = filter_out_strings_containing_substring(data, 'array') + prefixes = set([entry.split("_y")[0].split(": ")[1] for entry in data if "_y" in entry]) + + # For each prefix, collect matching strings + for prefix in prefixes: + sublist = [entry.split(": ")[1][:-1] for entry in data if + entry.startswith(f"var bool: {prefix}") and "_y" in entry] + if sublist: + results.append(sublist) + + return results \ No newline at end of file diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py index 1b518777..a4433254 100644 --- a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -76,5 +76,6 @@ def test_build_boomerang_model_chacha(): minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher) result = minizinc_bct_model.solve(solver_name='Xor') total_weight = MinizincBoomerangModel._get_total_weight(result) - assert total_weight == 68 + parsed_result = minizinc_bct_model.bct_parse_result(result, 'Xor', total_weight, 'BCT_XOR_DIFF') + assert total_weight == parsed_result['total_weight'] From 3c182d0460958be670730b57b8a3925cbd65b379 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Thu, 25 Jan 2024 05:53:49 +0400 Subject: [PATCH 016/179] Refactoring MiniZinc Boomerang Model Modifying this model to inherit from MinizincXorDifferentialModel instead of MinizincModel --- claasp/cipher.py | 5 --- .../minizinc_boomerang_model.py | 31 +------------------ claasp/ciphers/permutations/util.py | 12 +++++++ claasp/round.py | 7 ----- claasp/rounds.py | 1 - 5 files changed, 13 insertions(+), 43 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index d83e4625..2e1594a5 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -2391,9 +2391,4 @@ def update_input_id_links_from_component_id(self, component_id, new_input_id_lin round_number = self.get_round_from_component_id(component_id) self._rounds.rounds[round_number].update_input_id_links_from_component_id(component_id, new_input_id_links) - def update_input_bit_positions_from_component_id(self, component_id, new_input_bit_positions): - round_number = self.get_round_from_component_id(component_id) - self._rounds.rounds[round_number].update_input_bit_positions_from_component_id( - component_id, new_input_bit_positions - ) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 282d315d..99227dee 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -19,13 +19,12 @@ from claasp.cipher_modules.graph_generator import split_cipher_graph_into_top_bottom from claasp.cipher_modules.models.minizinc.utils.mzn_bct_predicates import get_bct_operations -from claasp.cipher_modules.models.minizinc.minizinc_model import MinizincModel from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model import \ MinizincXorDifferentialModel from claasp.cipher_modules.models.minizinc.utils.utils import group_strings_by_pattern -class MinizincBoomerangModel(MinizincModel): +class MinizincBoomerangModel(MinizincXorDifferentialModel): def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_size_list=None, sat_or_milp='sat'): self.top_end_ids = top_end_ids self.bottom_start_ids = bottom_start_ids @@ -139,21 +138,6 @@ def objective_generator(mzn_top_cipher, mzn_bottom_cipher): return objective_string - @staticmethod - def _get_total_weight(result): - if result.status in [Status.SATISFIED, Status.ALL_SOLUTIONS, Status.OPTIMAL_SOLUTION]: - if result.status == Status.OPTIMAL_SOLUTION: - return result.objective - elif result.status in [Status.SATISFIED]: - if isinstance(result.solution, list): - return "list_of_solutions" - else: - return result.solution.objective - elif result.status in [Status.ALL_SOLUTIONS]: - return [] - else: - return None - def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher): self.create_top_and_bottom_ciphers_from_subgraphs() @@ -219,19 +203,6 @@ def write_minizinc_model_to_file(self, file_path, prefix=""): ) f.close() - def parse_probability_vars(self, result, solution): - parsed_result = {} - if result.status not in [Status.UNKNOWN, Status.UNSATISFIABLE, Status.ERROR]: - for probability_var in self.probability_vars: - lst_value = solution.__dict__[probability_var] - parsed_result[probability_var] = { - 'value': str(hex(int("".join(str(0) if str(x) in ["false", "0"] else str(1) for x in lst_value), - 2))), - 'weight': sum(lst_value) - } - - return parsed_result - def parse_components_with_solution(self, result, solution): dict_of_component_value = {} diff --git a/claasp/ciphers/permutations/util.py b/claasp/ciphers/permutations/util.py index 339f79b3..99be0010 100644 --- a/claasp/ciphers/permutations/util.py +++ b/claasp/ciphers/permutations/util.py @@ -18,6 +18,17 @@ from claasp.utils.utils import get_2d_array_element_from_1d_array_index, set_2d_array_element_from_1d_array_index +def print_state_ids(state): + str_state = "" + for i in range(4): + str_temp = "" + for j in range(4): + str_temp += state[i][j].id + " " + print(str_temp + "\n") + str_state += str_temp + print(str_state) + + def add_intermediate_output_component_latin_dances_permutations(permutation, round_i, number_of_rounds): lst_ids = [] lst_input_input_positions = [] @@ -35,6 +46,7 @@ def add_intermediate_output_component_latin_dances_permutations(permutation, rou def half_like_round_function_latin_dances(permutation, round_number, columns, diagonals): state = permutation.state_of_components + def top_half_quarter_round(a, b, c, d): permutation.top_half_quarter_round(*a, state) permutation.top_half_quarter_round(*b, state) diff --git a/claasp/round.py b/claasp/round.py index 609bb3e0..3242a510 100644 --- a/claasp/round.py +++ b/claasp/round.py @@ -124,10 +124,3 @@ def update_input_id_links_from_component_id(self, component_id, new_input_id_lin i += 1 self._components[i].set_input_id_links(new_input_id_links) - def update_input_bit_positions_from_component_id(self, component_id, new_input_bit_positions): - i = 0 - for component in self._components: - if component.id == component_id: - break - i += 1 - self._components[i].set_input_bit_positions(new_input_bit_positions) diff --git a/claasp/rounds.py b/claasp/rounds.py index 8c0cd742..e346611f 100644 --- a/claasp/rounds.py +++ b/claasp/rounds.py @@ -15,7 +15,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # **************************************************************************** -from copy import deepcopy from claasp.round import Round from claasp.DTOs.power_of_2_word_based_dto import PowerOf2WordBasedDTO From 9c8faa66f77bc505fbab26bc0d58709c298c8922 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Fri, 26 Jan 2024 10:33:20 +0400 Subject: [PATCH 017/179] Covering method write_minizinc_model_to_file Covering BCT method write_minizinc_model_to_file with tests --- .../minizinc/minizinc_models/minizinc_boomerang_model.py | 3 +++ claasp/name_mappings.py | 1 + .../minizinc_models/minizinc_boomerang_model_test.py | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 99227dee..705ee142 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -36,6 +36,7 @@ def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_siz self.differential_model_top_cipher = None self.differential_model_bottom_cipher = None self.probability_vars = None + self.filename = None super().__init__(cipher, window_size_list, None, sat_or_milp) self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, self.bottom_start_ids) @@ -192,9 +193,11 @@ def write_minizinc_model_to_file(self, file_path, prefix=""): self.differential_model_bottom_cipher.mzn_output_directives) if prefix == "": filename = f'{file_path}/{self.original_cipher.id}_mzn_{self.differential_model_top_cipher.sat_or_milp}.mzn' + self.filename = filename else: filename = f'{file_path}/{prefix}_{self.original_cipher.id}_mzn_' filename += f'{self.differential_model_top_cipher.sat_or_milp}.mzn' + self.filename = filename f = open(filename, "w") f.write( diff --git a/claasp/name_mappings.py b/claasp/name_mappings.py index 85e6db65..c49b3d67 100644 --- a/claasp/name_mappings.py +++ b/claasp/name_mappings.py @@ -35,6 +35,7 @@ XOR_LINEAR = 'xor_linear' DETERMINISTIC_TRUNCATED_XOR_DIFFERENTIAL = 'deterministic_truncated_xor_differential' IMPOSSIBLE_XOR_DIFFERENTIAL = 'impossible_xor_differential' +BOOMERANG_XOR_DIFFERENTIAL = 'boomerang_xor_differential' # cipher inverse CIPHER_INVERSE_SUFFIX = "_inverse" \ No newline at end of file diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py index a4433254..db69889e 100644 --- a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -1,5 +1,6 @@ from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_boomerang_model import MinizincBoomerangModel from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation +from claasp.name_mappings import BOOMERANG_XOR_DIFFERENTIAL def test_build_boomerang_model_chacha(): @@ -76,6 +77,11 @@ def test_build_boomerang_model_chacha(): minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher) result = minizinc_bct_model.solve(solver_name='Xor') total_weight = MinizincBoomerangModel._get_total_weight(result) - parsed_result = minizinc_bct_model.bct_parse_result(result, 'Xor', total_weight, 'BCT_XOR_DIFF') + parsed_result = minizinc_bct_model.bct_parse_result(result, 'Xor', total_weight, BOOMERANG_XOR_DIFFERENTIAL) + filename = '.' + minizinc_bct_model.write_minizinc_model_to_file(filename) + import os + assert os.path.exists(minizinc_bct_model.filename), "File was not created" + os.remove(minizinc_bct_model.filename) assert total_weight == parsed_result['total_weight'] From fb5f7d0a2bd9dcc8ddfac4d17d3a6cf21c69203c Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Sat, 27 Jan 2024 07:08:59 +0400 Subject: [PATCH 018/179] Adding test for bct mzn model Adding new tests for the bct model. This test is for Speck32/64 and in this test a boomerang distinguisher for 8 rounds in the single-key scenario is verified. --- .../minizinc_boomerang_model.py | 20 +- .../minizinc_boomerang_model_test.py | 179 +++++++++++++++++- 2 files changed, 187 insertions(+), 12 deletions(-) diff --git a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py index 705ee142..b96e5257 100644 --- a/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py +++ b/claasp/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model.py @@ -40,6 +40,7 @@ def __init__(self, cipher, top_end_ids, bottom_start_ids, middle_ids, window_siz super().__init__(cipher, window_size_list, None, sat_or_milp) self.top_graph, self.bottom_graph = split_cipher_graph_into_top_bottom(cipher, self.top_end_ids, self.bottom_start_ids) + self.create_top_and_bottom_ciphers_from_subgraphs() @staticmethod def remove_empty_rounds(cipher): @@ -85,11 +86,20 @@ def setup_bottom_cipher_inputs(self, bottom_cipher, original_cipher): ) def update_bottom_cipher_inputs(self, bottom_cipher, original_cipher, initial_nodes, new_input_bit_positions): + for node_id in initial_nodes: - old_component = original_cipher.get_component_from_id(node_id) - new_input_id_links = self.get_new_input_id_links(old_component, bottom_cipher) - bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) - new_input_bit_positions[old_component.id] = old_component.input_bit_positions + if node_id in original_cipher.inputs: + bottom_cipher._inputs.append(node_id) + index_node_id = original_cipher._inputs.index(node_id) + bottom_cipher._inputs_bit_size.append(original_cipher._inputs_bit_size[index_node_id]) + index_input_to_delete = self.top_cipher._inputs.index(node_id) + del self.top_cipher._inputs[index_input_to_delete] + del self.top_cipher._inputs_bit_size[index_input_to_delete] + else: + old_component = original_cipher.get_component_from_id(node_id) + new_input_id_links = self.get_new_input_id_links(old_component, bottom_cipher) + bottom_cipher.update_input_id_links_from_component_id(old_component.id, new_input_id_links) + new_input_bit_positions[old_component.id] = old_component.input_bit_positions def get_new_input_id_links(self, component, bottom_cipher): new_input_id_links = deepcopy(component.input_id_links) @@ -140,8 +150,6 @@ def objective_generator(mzn_top_cipher, mzn_bottom_cipher): return objective_string def create_boomerang_model(self, fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher): - self.create_top_and_bottom_ciphers_from_subgraphs() - self.differential_model_top_cipher = MinizincXorDifferentialModel( self.top_cipher, window_size_list=[0 for _ in range(self.top_cipher.number_of_rounds)], sat_or_milp='sat', include_word_operations_mzn_file=False diff --git a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py index db69889e..47fa0651 100644 --- a/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py +++ b/tests/unit/cipher_modules/models/minizinc/minizinc_models/minizinc_boomerang_model_test.py @@ -1,6 +1,179 @@ from claasp.cipher_modules.models.minizinc.minizinc_models.minizinc_boomerang_model import MinizincBoomerangModel +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation from claasp.name_mappings import BOOMERANG_XOR_DIFFERENTIAL +import numpy as np +import os +from os import urandom + + +def speck32_64_word_size(): + return 16 + + +def speck32_64_alpha(): + return 7 + + +def speck32_64_beta(): + return 2 + + +MASK_VAL = 2 ** speck32_64_word_size() - 1 + + +def speck32_64_rol(x, k): + return ((x << k) & MASK_VAL) | (x >> (speck32_64_word_size() - k)) + + +def speck32_64_ror(x, k): + return (x >> k) | ((x << (speck32_64_word_size() - k)) & MASK_VAL) + + +def speck32_64_decrypt(ciphertext, ks): + def dec_one_round(c, subkey_): + c0, c1 = c + c1 = c1 ^ c0 + c1 = speck32_64_ror(c1, speck32_64_beta()) + c0 = c0 ^ subkey_ + c0 = (c0 - c1) & MASK_VAL + c0 = speck32_64_rol(c0, speck32_64_alpha()) + return c0, c1 + x, y = ciphertext + for subkey in reversed(ks): + x, y = dec_one_round((x, y), subkey) + return x, y + + +def speck32_64_enc_one_round(plaintext, subkey): + c0, c1 = plaintext + c0 = speck32_64_ror(c0, speck32_64_alpha()) + c0 = (c0 + c1) & MASK_VAL + c0 = c0 ^ subkey + c1 = speck32_64_rol(c1, speck32_64_beta()) + c1 = c1 ^ c0 + return c0, c1 + + +def speck32_64_expand_key(k, t): + ks = [0] * t + ks[0] = k[-1] + left_word = list(reversed(k[:-1])) + for i in range(t - 1): + left_word[i % len(left_word)], ks[i + 1] = speck32_64_enc_one_round((left_word[i % len(left_word)], ks[i]), i) + return ks + + +def speck32_64_encrypt(p, ks): + + x, y = p + for k in ks: + x, y = speck32_64_enc_one_round((x, y), k) + return x, y + + +def speck32_64_bct_distinguisher_verifier(delta_, nabla_, nr, n=2 ** 10): + keys = np.frombuffer(urandom(8*n), dtype=np.uint16).reshape(4, -1) + plaintext_data_0_left = np.frombuffer(urandom(2*n), dtype=np.uint16) + plaintext_data_0_right = np.frombuffer(urandom(2*n), dtype=np.uint16) + plaintext_data_1_left = plaintext_data_0_left ^ delta_[0] + plaintext_data_1_right = plaintext_data_0_right ^ delta_[1] + subkey_list = speck32_64_expand_key(keys, nr) + + ciphertext_data_0_left, ciphertext_data_0_right = speck32_64_encrypt( + (plaintext_data_0_left, plaintext_data_0_right), subkey_list + ) + ciphertext_data_1_left, ciphertext_data_1_right = speck32_64_encrypt( + (plaintext_data_1_left, plaintext_data_1_right), subkey_list + ) + + output_xor_nabla_0 = (ciphertext_data_0_left ^ nabla_[0], ciphertext_data_0_right ^ nabla_[1]) + output_xor_nabla_1 = (ciphertext_data_1_left ^ nabla_[0], ciphertext_data_1_right ^ nabla_[1]) + plaintext_data_2_left, plaintext_data_2_right = speck32_64_decrypt(output_xor_nabla_0, subkey_list) + plaintext_data_3_left, plaintext_data_3_right = speck32_64_decrypt(output_xor_nabla_1, subkey_list) + + nabla_temp = (np.uint32(delta_[0]) << 16) ^ delta_[1] + nabla_prime_temp_left = (np.uint32(plaintext_data_2_left ^ plaintext_data_3_left) << 16) + nabla_prime_temp = nabla_prime_temp_left ^ (plaintext_data_2_right ^ plaintext_data_3_right) + + total = np.sum(nabla_temp == nabla_prime_temp) + return total / n + + +def split_32bit_to_16bit(difference): + lower_16 = difference & 0xFFFF + upper_16 = (difference >> 16) & 0xFFFF + return upper_16, lower_16 + + +def test_build_boomerang_model_speck_single_key(): + speck = SpeckBlockCipher(number_of_rounds=8) + speck = speck.remove_key_schedule() + + top_cipher_end = [ + "xor_3_10", + "rot_4_6" + ] + + bottom_cipher_start = [ + "xor_4_8", + "rot_4_9", + 'key_4_2', + 'key_5_2', + 'key_6_2', + 'key_7_2' + ] + + sboxes = [ + "modadd_4_7", + ] + + minizinc_bct_model = MinizincBoomerangModel(speck, top_cipher_end, bottom_cipher_start, sboxes) + + fixed_variables_for_top_cipher = [ + {'component_id': 'plaintext', 'constraint_type': 'sum', 'bit_positions': [i for i in range(32)], + 'operator': '>', 'value': '0'}, + {'component_id': 'key_0_2', 'constraint_type': 'equal', 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_1_2', 'constraint_type': 'equal', 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_2_2', 'constraint_type': 'equal', 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_3_2', 'constraint_type': 'equal', 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'xor_3_10', 'constraint_type': 'sum', 'bit_positions': [i for i in range(16)], + 'operator': '>', 'value': '0'}] + + fixed_variables_for_bottom_cipher = [ + {'component_id': 'new_xor_3_10', 'constraint_type': 'sum', 'bit_positions': [i for i in range(16)], + 'operator': '>', 'value': '0'}, + {'component_id': 'key_4_2', 'constraint_type': 'equal', + 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_5_2', 'constraint_type': 'equal', + 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_6_2', 'constraint_type': 'equal', + 'bit_positions': [i for i in range(16)], + 'bit_values': [0 for _ in range(16)]}, + {'component_id': 'key_7_2', 'constraint_type': 'equal', + 'bit_positions': [i for i in range(16)], 'bit_values': [0 for _ in range(16)]}, + ] + + minizinc_bct_model.create_boomerang_model(fixed_variables_for_top_cipher, fixed_variables_for_bottom_cipher) + result = minizinc_bct_model.solve(solver_name='Xor') + total_weight = MinizincBoomerangModel._get_total_weight(result) + parsed_result = minizinc_bct_model.bct_parse_result(result, 'Xor', total_weight, BOOMERANG_XOR_DIFFERENTIAL) + filename = '.' + minizinc_bct_model.write_minizinc_model_to_file(filename) + + assert os.path.exists(minizinc_bct_model.filename), "File was not created" + os.remove(minizinc_bct_model.filename) + assert total_weight == parsed_result['total_weight'] + input_difference = split_32bit_to_16bit(int(parsed_result['component_values']['plaintext']['value'], 16)) + output_difference = split_32bit_to_16bit(int(parsed_result['component_values']['cipher_output_7_12']['value'], 16)) + assert speck32_64_bct_distinguisher_verifier(input_difference, output_difference, speck.number_of_rounds, n=2**20) \ + > 0.0001 def test_build_boomerang_model_chacha(): @@ -28,22 +201,18 @@ def test_build_boomerang_model_chacha(): ] bottom_cipher_start = [ - #"modadd_4_0", "xor_4_4", "modadd_4_3", "xor_4_1", - #"modadd_4_6", "xor_4_10", "modadd_4_9", "xor_4_7", - #"modadd_4_12", "xor_4_16", "modadd_4_15", "xor_4_13", - #"modadd_4_18", "xor_4_22", "modadd_4_21", "xor_4_19" @@ -80,8 +249,6 @@ def test_build_boomerang_model_chacha(): parsed_result = minizinc_bct_model.bct_parse_result(result, 'Xor', total_weight, BOOMERANG_XOR_DIFFERENTIAL) filename = '.' minizinc_bct_model.write_minizinc_model_to_file(filename) - import os assert os.path.exists(minizinc_bct_model.filename), "File was not created" os.remove(minizinc_bct_model.filename) assert total_weight == parsed_result['total_weight'] - From 8f34f55f9c97302a436e1197de0c01757386ebfb Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Tue, 30 Jan 2024 13:01:33 +0400 Subject: [PATCH 019/179] added fsr component analysis --- .../component_analysis_tests.py | 62 +++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index b459d135..5a02d9cf 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -280,6 +280,7 @@ def branch_number(component, type, format): elif component.type == "mix_column": return min(calculate_weights_for_mix_column(component, format, type)) + def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): """ sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher @@ -319,6 +320,7 @@ def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, return final_mtr, F + def is_mds(component): """ A matrix is MDS if and only if all the minors (determinants of square submatrices) are non-zero @@ -364,6 +366,7 @@ def is_mds(component): return False return True + def field_element_matrix_to_integer_matrix(matrix): """ Converts a matrix of field elements to the corresponding integer matrix representation @@ -400,6 +403,7 @@ def field_element_matrix_to_integer_matrix(matrix): return Matrix(matrix.nrows(), matrix.ncols(), int_matrix) + def get_inverse_matrix_in_integer_representation(component): """ Returns the inverse matrix in its integer representation @@ -436,6 +440,7 @@ def get_inverse_matrix_in_integer_representation(component): component.input_bit_size, component.output_bit_size) return field_element_matrix_to_integer_matrix(matrix.inverse()) + def has_maximal_branch_number(component): """ INPUT: @@ -479,6 +484,7 @@ def has_maximal_branch_number(component): if component.type == MIX_COLUMN: return branch_number(component, 'linear', 'word') == (output_word_size + 1) + def calculate_weights_for_mix_column(component, format, type): if format == 'word': description = component.description @@ -569,6 +575,8 @@ def select_properties_function(boolean_polynomial_ring, operation): return word_operation_properties(operation, boolean_polynomial_ring) if (component.type == WORD_OPERATION) and (component.description[0] == "MODADD"): return word_operation_properties(operation, boolean_polynomial_ring) + if component.type == 'fsr': + return fsr_properties(operation) if component.type == WORD_OPERATION: print(f"TODO : {component.description[0]}") @@ -632,17 +640,21 @@ def get_all_operations(cipher): collect_component_operations(component, tmp_cipher_operations) for operation in list(tmp_cipher_operations.keys()): - if operation not in [LINEAR_LAYER, MIX_COLUMN]: + if operation not in [LINEAR_LAYER, MIX_COLUMN, 'fsr']: tmp_cipher_operations[operation]["distinguisher"] = \ list(set(tmp_cipher_operations[operation]["distinguisher"])) + if operation == 'fsr': + tmp_list = [] + for item in tmp_cipher_operations[operation]["distinguisher"]: + if item not in tmp_list: + tmp_list.append(item) + tmp_cipher_operations[operation]["distinguisher"] = tmp_list tmp_cipher_operations[operation]["types"] = \ [[] for _ in range(len(tmp_cipher_operations[operation]["distinguisher"]))] collect_components_with_the_same_operation(operation, tmp_cipher_operations) - cipher_operations = {} for operation in list(tmp_cipher_operations.keys()): add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) - return cipher_operations @@ -771,6 +783,48 @@ def order_of_linear_component(component): return 0 +def fsr_properties(operation): + component = operation[0] + component_dict = {"type": component.type, "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, "description": component.description, + "number_of_occurrences": operation[1], "component_id_list": operation[2]} + + desc = component.description + registers_len = [] + registers_type = [] + registers_feedback_relation_deg = [] + for r in desc[0]: + registers_len.append(r[0]) + d = 0 + for term in r[1]: + if d < len(term): + d = len(term) + registers_feedback_relation_deg.append(d) + if d > 1: + registers_type.append('non-linear') + else: + registers_type.append('linear') + component_dict['number_of_registers'] = len(registers_len) + component_dict['length_of_registers'] = registers_len + component_dict['type_of_registers'] = registers_type + component_dict['degree_of_feedback_relation_of_registers'] = registers_feedback_relation_deg + + R = GF(2)['x'] + lfsrs_primitive = [] + exp = 0 + for index, r in enumerate(desc[0]): + exp = exp + registers_len[index] + if registers_type[index] == 'linear': + f = R(1) + for term in r[1]: + f = f + R.gen() ** (exp - term[0]) + print(f) + lfsrs_primitive.append(f.is_primitive()) + + component_dict['linear_registers_feedback_polynomial_primitive'] = lfsrs_primitive + return component_dict + + def sbox_properties(operation): """ Return a dictionary containing some properties of Sbox component. @@ -1050,4 +1104,4 @@ def remove_components_with_strings_as_values(results_without_xor): str_in_list.append(isinstance(results_without_xor[i]["properties"][result_property]["value"], str)) if True not in str_in_list: results.append(results_without_xor[i]) - return results \ No newline at end of file + return results From af296994fb75155a0529eae03c45dfbadd8ce833 Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Tue, 30 Jan 2024 22:38:34 +0400 Subject: [PATCH 020/179] added gaston permutation class --- .../permutations/gaston_permutation.py | 216 ++++++++++++++++++ 1 file changed, 216 insertions(+) create mode 100644 claasp/ciphers/permutations/gaston_permutation.py diff --git a/claasp/ciphers/permutations/gaston_permutation.py b/claasp/ciphers/permutations/gaston_permutation.py new file mode 100644 index 00000000..cf22c2fd --- /dev/null +++ b/claasp/ciphers/permutations/gaston_permutation.py @@ -0,0 +1,216 @@ +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** + +from claasp.cipher import Cipher +from claasp.name_mappings import INPUT_PLAINTEXT +from claasp.utils.utils import get_inputs_parameter +from claasp.DTOs.component_state import ComponentState + +GASTON_NROWS = 5 +WORD_SIZE = 64 +# parameters for theta +GASTON_t = [25, 32, 52, 60, 63] +# GASTON_t0 = 25 +# GASTON_t1 = 32 +# GASTON_t2 = 52 +# GASTON_t3 = 60 +# GASTON_t4 = 63 + +GASTON_r = 1 +GASTON_s = 18 +GASTON_u = 23 + +# rho-east rotation offsets +GASTON_e = [0, 60, 22, 27, 4] +# GASTON_e0 = 0 +# GASTON_e1 = 60 +# GASTON_e2 = 22 +# GASTON_e3 = 27 +# GASTON_e4 = 4 + +# rho-west rotation offsets +GASTON_w = [0, 56, 31, 46, 43] +# GASTON_w0 = 0 +# GASTON_w1 = 56 +# GASTON_w2 = 31 +# GASTON_w3 = 46 +# GASTON_w4 = 43 +# gaston round constant +gaston_rc = [ + 0x00000000000000F0, 0x00000000000000E1, 0x00000000000000D2, + 0x00000000000000C3, 0x00000000000000B4, 0x00000000000000A5, + 0x0000000000000096, 0x0000000000000087, 0x0000000000000078, + 0x0000000000000069, 0x000000000000005A, 0x000000000000004B +] + +PARAMETERS_CONFIGURATION_LIST = [{'number_of_rounds': 12}] + + +class GastonPermutation(Cipher): + """ + Construct an instance of the Gaston Permutation class. + + INPUT: + + - ``number_of_rounds`` -- **integer** (default: `12`); number of rounds of the permutation + + EXAMPLES:: + + sage: from claasp.ciphers.permutations.gaston_permutation import GastonPermutation + sage: gaston = GastonPermutation(number_of_rounds=12) + sage: plaintext = 0x0 + sage: ciphertext = 0x88B326096BEBC6356CA8FB64BC5CE6CAF1CE3840D819071354D70067438689B5F17FE863F958F32B + sage: print(gaston.evaluate([plaintext]))==ciphertext) + True + sage: plaintext=0x1F4AD9906DA6A2544B84D7F83F2BDDFA468A0853578A00E36C05A0506DF7F66E4EFB22112453C964 + sage: ciphertext=0x1BA89B5B5C4583B622135709AE53417D9847B975E9EC9F3DCE042DF2A402591D563EC68FC30307EA + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + sage: plaintext=0xFFFFFFFFFFFFFFFF0123456789ABCDEFFEDCBA9876543210AAAAAAAAAAAAAAAA0101010101010101 + sage: ciphertext=0x3117D51B14937067338F17F773C13F79DFB86E0868D252AB0D461D35EB863DE708BCE3E354C7231A + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + sage: gaston.number_of_rounds + 12 + sage: gaston.component_from(0, 0).id + 'constant_0_0' + """ + + def __init__(self, number_of_rounds=12): + self.state_bit_size = GASTON_NROWS * WORD_SIZE + + super().__init__(family_name='gaston', + cipher_type="permutation", + cipher_inputs=[INPUT_PLAINTEXT], + cipher_inputs_bit_size=[self.state_bit_size], + cipher_output_bit_size=self.state_bit_size) + + # word initialization + state = [] + for i in range(GASTON_NROWS): + p = ComponentState([INPUT_PLAINTEXT], [[k + i * WORD_SIZE for k in range(WORD_SIZE)]]) + state.append(p) + + # round function + for r in range(12 - number_of_rounds, 12): + # initial current round element + self.add_round() + # round function + state = self.gaston_round_function(state, gaston_rc[r]) + # round output + inputs = [] + for i in range(GASTON_NROWS): + inputs.append(state[i]) + inputs_id, inputs_pos = get_inputs_parameter(inputs) + if r == 11: + self.add_cipher_output_component(inputs_id, inputs_pos, self.state_bit_size) + else: + self.add_round_output_component(inputs_id, inputs_pos, self.state_bit_size) + # add all components to the round + + def gaston_round_function(self, state, rc): + state = self.gaston_rho_east(state) + state = self.gaston_theta(state) + state = self.gaston_rho_west(state) + state = self.gaston_iota(state, rc) + state = self.gaston_chi(state) + + return state + + def gaston_rho_east(self, state): + for i in range(GASTON_NROWS): + self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_e[i]) + state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state + + def gaston_theta(self, state): + inputs_id, inputs_pos = get_inputs_parameter([state[i] for i in range(GASTON_NROWS)]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(P.id, P.input_bit_positions, WORD_SIZE, -GASTON_r) + P_rot = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + inputs_id, inputs_pos = get_inputs_parameter([P, P_rot]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + Q_Rows = [] + for i in range(GASTON_NROWS): + self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_t[i]) + q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + Q_Rows.append(q) + + inputs_id, inputs_pos = get_inputs_parameter([Q_Rows[i] for i in range(GASTON_NROWS)]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(Q.id, Q.input_bit_positions, WORD_SIZE, -GASTON_s) + Q_rot = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + inputs_id, inputs_pos = get_inputs_parameter([Q, Q_rot]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + inputs_id, inputs_pos = get_inputs_parameter([P, Q]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(P.id, P.input_bit_positions, WORD_SIZE, -GASTON_u) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + for i in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter([state[i], P]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state + + def gaston_rho_west(self, state): + for i in range(GASTON_NROWS): + self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_w[i]) + state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state + + def gaston_iota(self, state, rc): + self.add_constant_component(WORD_SIZE, rc) + const = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + inputs_id, inputs_pos = get_inputs_parameter([state[0], const]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + state[0] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + return state + + def gaston_chi(self, state): + not_comp = [] + for i in range(GASTON_NROWS): + self.add_NOT_component(state[i].id, state[i].input_bit_positions, WORD_SIZE) + n = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + not_comp.append(n) + + and_comp = [] + for i in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter( + [state[(i + 2) % GASTON_NROWS], not_comp[(i + 1) % GASTON_NROWS]]) + self.add_AND_component(inputs_id, inputs_pos, WORD_SIZE) + a = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + and_comp.append(a) + + for i in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter([state[i], and_comp[i]]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state From f9978defc2a2ef8cc032dfdd567ec24ad5a132ad Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Wed, 31 Jan 2024 10:00:02 +0400 Subject: [PATCH 021/179] added tests for gaston permutation --- .../permutations/gaston_permutation.py | 75 ++++++++++--------- .../permutations/gaston_permutation_test.py | 20 +++++ 2 files changed, 60 insertions(+), 35 deletions(-) create mode 100644 tests/unit/ciphers/permutations/gaston_permutation_test.py diff --git a/claasp/ciphers/permutations/gaston_permutation.py b/claasp/ciphers/permutations/gaston_permutation.py index cf22c2fd..2667526d 100644 --- a/claasp/ciphers/permutations/gaston_permutation.py +++ b/claasp/ciphers/permutations/gaston_permutation.py @@ -22,6 +22,7 @@ GASTON_NROWS = 5 WORD_SIZE = 64 + # parameters for theta GASTON_t = [25, 32, 52, 60, 63] # GASTON_t0 = 25 @@ -49,6 +50,7 @@ # GASTON_w2 = 31 # GASTON_w3 = 46 # GASTON_w4 = 43 + # gaston round constant gaston_rc = [ 0x00000000000000F0, 0x00000000000000E1, 0x00000000000000D2, @@ -76,18 +78,21 @@ class GastonPermutation(Cipher): sage: ciphertext = 0x88B326096BEBC6356CA8FB64BC5CE6CAF1CE3840D819071354D70067438689B5F17FE863F958F32B sage: print(gaston.evaluate([plaintext]))==ciphertext) True + sage: plaintext=0x1F4AD9906DA6A2544B84D7F83F2BDDFA468A0853578A00E36C05A0506DF7F66E4EFB22112453C964 sage: ciphertext=0x1BA89B5B5C4583B622135709AE53417D9847B975E9EC9F3DCE042DF2A402591D563EC68FC30307EA sage: print(gaston.evaluate([plaintext])==ciphertext) True + sage: plaintext=0xFFFFFFFFFFFFFFFF0123456789ABCDEFFEDCBA9876543210AAAAAAAAAAAAAAAA0101010101010101 sage: ciphertext=0x3117D51B14937067338F17F773C13F79DFB86E0868D252AB0D461D35EB863DE708BCE3E354C7231A sage: print(gaston.evaluate([plaintext])==ciphertext) True + sage: gaston.number_of_rounds 12 sage: gaston.component_from(0, 0).id - 'constant_0_0' + 'rot_0_0' """ def __init__(self, number_of_rounds=12): @@ -99,28 +104,22 @@ def __init__(self, number_of_rounds=12): cipher_inputs_bit_size=[self.state_bit_size], cipher_output_bit_size=self.state_bit_size) - # word initialization + # gaston state initialization state = [] - for i in range(GASTON_NROWS): - p = ComponentState([INPUT_PLAINTEXT], [[k + i * WORD_SIZE for k in range(WORD_SIZE)]]) + for row in range(GASTON_NROWS): + p = ComponentState([INPUT_PLAINTEXT], [[i + row * WORD_SIZE for i in range(WORD_SIZE)]]) state.append(p) - # round function - for r in range(12 - number_of_rounds, 12): - # initial current round element + for round_number in range(12 - number_of_rounds, 12): self.add_round() - # round function - state = self.gaston_round_function(state, gaston_rc[r]) - # round output - inputs = [] - for i in range(GASTON_NROWS): - inputs.append(state[i]) - inputs_id, inputs_pos = get_inputs_parameter(inputs) - if r == 11: + # gaston round function + state = self.gaston_round_function(state, gaston_rc[round_number]) + # gaston round output + inputs_id, inputs_pos = get_inputs_parameter([state[i] for i in range(GASTON_NROWS)]) + if round_number == 11: self.add_cipher_output_component(inputs_id, inputs_pos, self.state_bit_size) else: self.add_round_output_component(inputs_id, inputs_pos, self.state_bit_size) - # add all components to the round def gaston_round_function(self, state, rc): state = self.gaston_rho_east(state) @@ -132,9 +131,10 @@ def gaston_round_function(self, state, rc): return state def gaston_rho_east(self, state): - for i in range(GASTON_NROWS): - self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_e[i]) - state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + for row in range(GASTON_NROWS): + self.add_rotate_component(state[row].id, state[row].input_bit_positions, WORD_SIZE, -GASTON_e[row]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state def gaston_theta(self, state): @@ -148,14 +148,15 @@ def gaston_theta(self, state): inputs_id, inputs_pos = get_inputs_parameter([P, P_rot]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + # column parity P - Q_Rows = [] + Q_rows = [] for i in range(GASTON_NROWS): self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_t[i]) q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) - Q_Rows.append(q) + Q_rows.append(q) - inputs_id, inputs_pos = get_inputs_parameter([Q_Rows[i] for i in range(GASTON_NROWS)]) + inputs_id, inputs_pos = get_inputs_parameter([Q_rows[i] for i in range(GASTON_NROWS)]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) @@ -165,6 +166,7 @@ def gaston_theta(self, state): inputs_id, inputs_pos = get_inputs_parameter([Q, Q_rot]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + # column parity Q inputs_id, inputs_pos = get_inputs_parameter([P, Q]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) @@ -173,16 +175,18 @@ def gaston_theta(self, state): self.add_rotate_component(P.id, P.input_bit_positions, WORD_SIZE, -GASTON_u) P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) - for i in range(GASTON_NROWS): - inputs_id, inputs_pos = get_inputs_parameter([state[i], P]) + for row in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter([state[row], P]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) - state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state def gaston_rho_west(self, state): - for i in range(GASTON_NROWS): - self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_w[i]) - state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + for row in range(GASTON_NROWS): + self.add_rotate_component(state[row].id, state[row].input_bit_positions, WORD_SIZE, -GASTON_w[row]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state def gaston_iota(self, state, rc): @@ -196,21 +200,22 @@ def gaston_iota(self, state, rc): def gaston_chi(self, state): not_comp = [] - for i in range(GASTON_NROWS): - self.add_NOT_component(state[i].id, state[i].input_bit_positions, WORD_SIZE) + for row in range(GASTON_NROWS): + self.add_NOT_component(state[row].id, state[row].input_bit_positions, WORD_SIZE) n = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) not_comp.append(n) and_comp = [] - for i in range(GASTON_NROWS): + for row in range(GASTON_NROWS): inputs_id, inputs_pos = get_inputs_parameter( - [state[(i + 2) % GASTON_NROWS], not_comp[(i + 1) % GASTON_NROWS]]) + [state[(row + 2) % GASTON_NROWS], not_comp[(row + 1) % GASTON_NROWS]]) self.add_AND_component(inputs_id, inputs_pos, WORD_SIZE) a = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) and_comp.append(a) - for i in range(GASTON_NROWS): - inputs_id, inputs_pos = get_inputs_parameter([state[i], and_comp[i]]) + for row in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter([state[row], and_comp[row]]) self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) - state[i] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + return state diff --git a/tests/unit/ciphers/permutations/gaston_permutation_test.py b/tests/unit/ciphers/permutations/gaston_permutation_test.py new file mode 100644 index 00000000..be8cf79c --- /dev/null +++ b/tests/unit/ciphers/permutations/gaston_permutation_test.py @@ -0,0 +1,20 @@ +from claasp.ciphers.permutations.gaston_permutation import GastonPermutation + + +def test_gaston_permutation(): + gaston = GastonPermutation(number_of_rounds=12) + assert gaston.number_of_rounds == 12 + + assert gaston.component_from(0, 0).id == 'rot_0_0' + + plaintext = 0x0 + ciphertext = 0x88B326096BEBC6356CA8FB64BC5CE6CAF1CE3840D819071354D70067438689B5F17FE863F958F32B + assert gaston.evaluate([plaintext]) == ciphertext + + plaintext = 0x1F4AD9906DA6A2544B84D7F83F2BDDFA468A0853578A00E36C05A0506DF7F66E4EFB22112453C964 + ciphertext = 0x1BA89B5B5C4583B622135709AE53417D9847B975E9EC9F3DCE042DF2A402591D563EC68FC30307EA + assert gaston.evaluate([plaintext]) == ciphertext + + plaintext = 0xFFFFFFFFFFFFFFFF0123456789ABCDEFFEDCBA9876543210AAAAAAAAAAAAAAAA0101010101010101 + ciphertext = 0x3117D51B14937067338F17F773C13F79DFB86E0868D252AB0D461D35EB863DE708BCE3E354C7231A + assert gaston.evaluate([plaintext]) == ciphertext From c5561bea2e158ada414bf45b54ab16f4d5896b8b Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Thu, 1 Feb 2024 14:42:36 +0400 Subject: [PATCH 022/179] feat:add option to start Chacha permutation from a bottom lower round --- claasp/ciphers/permutations/chacha_permutation.py | 4 ++-- claasp/ciphers/permutations/util.py | 4 +++- tests/unit/ciphers/permutations/chacha_permutation_test.py | 6 ++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/claasp/ciphers/permutations/chacha_permutation.py b/claasp/ciphers/permutations/chacha_permutation.py index 2836ef23..25bcf0eb 100644 --- a/claasp/ciphers/permutations/chacha_permutation.py +++ b/claasp/ciphers/permutations/chacha_permutation.py @@ -68,11 +68,11 @@ def __init__(self, number_of_rounds=0, state_of_components=None, cipher_family="chacha_permutation", cipher_type="permutation", inputs=None, cipher_inputs_bit_size=None, rotations=[8, 7, 16, 12], - word_size=32, start_round="odd"): + word_size=32, start_round="odd", start_with_bottom_half=False): init_latin_dances_cipher( self, super(), INPUT_PLAINTEXT, state_of_components, number_of_rounds, start_round, cipher_family, cipher_type, inputs, cipher_inputs_bit_size, [COLUMNS, DIAGONALS], - word_size, rotations + word_size, rotations, start_with_bottom_half ) def top_half_quarter_round(self, a, b, c, d, state): diff --git a/claasp/ciphers/permutations/util.py b/claasp/ciphers/permutations/util.py index 99be0010..2e4e160c 100644 --- a/claasp/ciphers/permutations/util.py +++ b/claasp/ciphers/permutations/util.py @@ -118,7 +118,7 @@ def init_state_latin_dances(permutation, input_plaintext): def init_latin_dances_cipher( permutation, super_class, input_plaintext, state_of_components, number_of_rounds, start_round, cipher_family, cipher_type, inputs, cipher_inputs_bit_size, quarter_round_indexes, word_size, - rotations + rotations, start_with_bottom_half=False ): columns = quarter_round_indexes[0] diagonals = quarter_round_indexes[1] @@ -151,6 +151,8 @@ def init_latin_dances_cipher( j = i + 2 else: j = i + if start_with_bottom_half: + j += 1 permutation.add_round() half_like_round_function_latin_dances(permutation, j, columns, diagonals) add_intermediate_output_component_latin_dances_permutations(permutation, i, number_of_rounds) diff --git a/tests/unit/ciphers/permutations/chacha_permutation_test.py b/tests/unit/ciphers/permutations/chacha_permutation_test.py index 037bdbb6..dcd3ba34 100644 --- a/tests/unit/ciphers/permutations/chacha_permutation_test.py +++ b/tests/unit/ciphers/permutations/chacha_permutation_test.py @@ -21,6 +21,12 @@ def test_chacha_permutation(): '19c12b4b04e16de9e83d0cb4e3c50a2', 16) assert chacha.evaluate([plaintext], verbosity=False) == output + chacha = ChachaPermutation(number_of_rounds=1) + assert chacha.get_component_from_id("rot_0_2").description[1] == -16 + + chacha = ChachaPermutation(number_of_rounds=1, start_with_bottom_half=True) + assert chacha.get_component_from_id("rot_0_2").description[1] == -8 + def test_toy_chacha_permutation(): """ From e0cf3d660701b663a7c6949f8c229a34ab2c6fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Fri, 2 Feb 2024 14:00:16 +0100 Subject: [PATCH 023/179] Modify GitHub action to create Release after updating the CHANGELOG.md --- .github/workflows/update-changelog.yaml | 39 ++++++++++++++++++------- extract_release_notes.py | 26 +++++++++++++++++ 2 files changed, 55 insertions(+), 10 deletions(-) create mode 100644 extract_release_notes.py diff --git a/.github/workflows/update-changelog.yaml b/.github/workflows/update-changelog.yaml index e0073961..cf3c7bd6 100644 --- a/.github/workflows/update-changelog.yaml +++ b/.github/workflows/update-changelog.yaml @@ -29,15 +29,15 @@ jobs: - name: Commit push changes uses: actions-js/push@master - if: ${{env.should_add_last_changes_to_master == 'true'}} + if: ${{ env.should_add_last_changes_to_master == 'true' }} with: - github_token: ${{ secrets.AUTHORIZATION_TOKEN }} + github_token: ${{ secrets.GITHUB_TOKEN }} message: 'Changelog version updated' tags: true force: true - name: Create tags - if: ${{env.should_add_last_changes_to_master == 'true'}} + if: ${{ env.should_add_last_changes_to_master == 'true' }} run: | project_version=$(cat VERSION) tag_name="$project_version" @@ -46,20 +46,39 @@ jobs: echo "release_message=$release_message" >> $GITHUB_ENV - name: Create push tag - if: ${{env.should_add_last_changes_to_master == 'true'}} - id: 'tag_create' + if: ${{ env.should_add_last_changes_to_master == 'true' }} uses: rickstaa/action-create-tag@v1 with: - github_token: ${{ secrets.AUTHORIZATION_TOKEN }} - tag: ${{env.tag_name}} + github_token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ env.tag_name }} tag_exists_error: false - message: ${{env.release_message}} + message: ${{ env.release_message }} + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.x' + + - name: Extract release notes + run: python3 extract_release_notes.py >> ./docs/release_notes.md + + - name: Create release + if: ${{ env.should_add_last_changes_to_master == 'true' }} + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.tag_name }} + release_name: Release ${{ env.tag_name }} + body_path: ./docs/release_notes.md + draft: false + prerelease: false - name: Update develop branch - if: ${{env.should_add_last_changes_to_master == 'true'}} + if: ${{ env.should_add_last_changes_to_master == 'true' }} uses: morbalint/git-merge-action@v1 with: target: 'develop' source: 'main' - token: ${{ secrets.AUTHORIZATION_TOKEN }} + token: ${{ secrets.GITHUB_TOKEN }} strategy_options: 'ours' diff --git a/extract_release_notes.py b/extract_release_notes.py new file mode 100644 index 00000000..8483de78 --- /dev/null +++ b/extract_release_notes.py @@ -0,0 +1,26 @@ +def get_changelog_content(): + with open('VERSION', 'r') as version_file: + version = version_file.read().split('v')[1].strip() + + with open('./docs/CHANGELOG.md', 'r') as changelog_file: + changelog = changelog_file.read() + + version_start = changelog.find(f"## [{version}]") + + if version_start == -1: + print(f"Version {version} not found in the changelog.") + return None + + version_end = changelog.find("## [", version_start + 1) + + if version_end == -1: + version_content = changelog[version_start + 1:] + else: + version_content = changelog[version_start + 1:version_end] + + version_content_without_header = version_content.split('\n', 1)[1] + + return version_content_without_header + + +print(get_changelog_content()) From 2ec00df4328902fde12dca1b0390b4427228b427 Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Sun, 4 Feb 2024 17:49:02 +0400 Subject: [PATCH 024/179] added primitive testing for the LFSR feedback polynomial --- .../component_analysis_tests.py | 69 ++++++++++++++----- .../sigma_toy_word_stream_cipher.py | 0 2 files changed, 51 insertions(+), 18 deletions(-) create mode 100644 claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 5a02d9cf..84ec4f9a 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -785,43 +785,76 @@ def order_of_linear_component(component): def fsr_properties(operation): component = operation[0] + fsr_word_size = component.description[1] component_dict = {"type": component.type, "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, "description": component.description, - "number_of_occurrences": operation[1], "component_id_list": operation[2]} + "output_bit_size": component.output_bit_size, "fsr_word_size": fsr_word_size, + "description": component.description, "number_of_occurrences": operation[1], + "component_id_list": operation[2]} desc = component.description registers_len = [] registers_type = [] registers_feedback_relation_deg = [] + lin_flag = False for r in desc[0]: registers_len.append(r[0]) d = 0 - for term in r[1]: - if d < len(term): - d = len(term) + if fsr_word_size == 1: + for term in r[1]: + if d < len(term): # case for binary register + d = len(term) + else: + for term in r[1]: + if d < len(term[1]): # case for non-binary register + d = len(term[1]) registers_feedback_relation_deg.append(d) if d > 1: registers_type.append('non-linear') else: registers_type.append('linear') + lin_flag = True + component_dict['number_of_registers'] = len(registers_len) component_dict['length_of_registers'] = registers_len component_dict['type_of_registers'] = registers_type component_dict['degree_of_feedback_relation_of_registers'] = registers_feedback_relation_deg - R = GF(2)['x'] - lfsrs_primitive = [] - exp = 0 - for index, r in enumerate(desc[0]): - exp = exp + registers_len[index] - if registers_type[index] == 'linear': - f = R(1) - for term in r[1]: - f = f + R.gen() ** (exp - term[0]) - print(f) - lfsrs_primitive.append(f.is_primitive()) - - component_dict['linear_registers_feedback_polynomial_primitive'] = lfsrs_primitive + if lin_flag: + lfsrs_primitive = [] + if fsr_word_size == 1: + exp = 0 + R = GF(2)['x'] + for index, r in enumerate(desc[0]): + exp = exp + registers_len[index] + if registers_type[index] == 'linear': + f = R(1) + for term in r[1]: + f = f + R.gen() ** (exp - term[0]) + print(f) + lfsrs_primitive.append(f.is_primitive()) + del R + else: + exp = 0 + R = GF(2 ** fsr_word_size)['x'] + x = R.gens() + a = R.construction()[1].gen() + for index, r in enumerate(desc[0]): + exp = exp + registers_len[index] + if registers_type[index] == 'linear': + p = R(1) + for term in r[1]: + m = 0 + coef = "{0:b}".format(term[0]) + for i in range(len(coef)): + if coef[i] == '1': m = m + pow(a, len(coef) - 1 - i) + m = m * x[0] ** (exp - term[1][0]) + p += m + print(p) + lfsrs_primitive.append(p.is_primitive()) + breakpoint() + del R + + component_dict['linear_registers_feedback_polynomial_primitive'] = lfsrs_primitive return component_dict diff --git a/claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py b/claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py new file mode 100644 index 00000000..e69de29b From 3f7397aa3be21f1fcd5cc855a65288d61af9a30b Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 00:27:18 +0400 Subject: [PATCH 025/179] FEATURE/Add: support inversion of tweakable primitives and inversion of MixColumn operation with a non irreducible polynomial --- .../component_analysis_tests.py | 2 +- claasp/cipher_modules/inverse_cipher.py | 27 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index b459d135..5744e288 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -303,7 +303,7 @@ def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, G = PolynomialRing(GF(2), 'x') x = G.gen() irr_poly = int_to_poly(polynomial_as_int, word_size, x) - if irr_poly: + if irr_poly.is_irreducible(): F = GF(2 ** word_size, name='a', modulus=irr_poly) else: F = GF(2 ** word_size) diff --git a/claasp/cipher_modules/inverse_cipher.py b/claasp/cipher_modules/inverse_cipher.py index 5b07a564..e7c2c3ef 100644 --- a/claasp/cipher_modules/inverse_cipher.py +++ b/claasp/cipher_modules/inverse_cipher.py @@ -8,6 +8,9 @@ from claasp.components import modsub_component, cipher_output_component, linear_layer_component, \ intermediate_output_component from claasp.input import Input +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from claasp.cipher_modules.component_analysis_tests import int_to_poly from claasp.name_mappings import * @@ -677,7 +680,7 @@ def _add_output_bit_equivalences(id, bit_positions, component, all_equivalent_bi flag_is_intersection_of_input_id_links_null, input_bit_positions = is_intersection_of_input_id_links_null( inverse_component, component) - if (component.description == [INPUT_KEY]) or (component.type == CONSTANT): + if (component.description == [INPUT_KEY]) or (component.description == [INPUT_TWEAK]) or(component.type == CONSTANT): for i in range(component.output_bit_size): output_bit_name_updated = id + "_" + str(i) + "_output_updated" bit = { @@ -745,11 +748,21 @@ def component_inverse(component, available_bits, all_equivalent_bits, key_schedu elif component.type == MIX_COLUMN: input_id_links, input_bit_positions = compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_components( component, available_output_components, all_equivalent_bits, self) - inv_matrix = get_inverse_matrix_in_integer_representation(component) - inverse_component = Component(component.id, component.type, - Input(component.input_bit_size, input_id_links, input_bit_positions), - component.output_bit_size, [[list(row) for row in inv_matrix]] + component.description[1:]) - inverse_component.__class__ = component.__class__ + description = component.description + G = PolynomialRing(GF(2), 'x') + x = G.gen() + irr_poly = int_to_poly(int(description[1]), int(description[2]), x) + if not irr_poly.is_irreducible(): + binary_matrix = binary_matrix_of_linear_component(component) + inv_binary_matrix = binary_matrix.inverse() + inverse_component = Component(component.id, LINEAR_LAYER, Input(component.input_bit_size, input_id_links, input_bit_positions), component.output_bit_size, list(inv_binary_matrix.transpose())) + inverse_component.__class__ = linear_layer_component.LinearLayer + else: + inv_matrix = get_inverse_matrix_in_integer_representation(component) + inverse_component = Component(component.id, component.type, + Input(component.input_bit_size, input_id_links, input_bit_positions), + component.output_bit_size, [[list(row) for row in inv_matrix]] + component.description[1:]) + inverse_component.__class__ = component.__class__ setattr(inverse_component, "round", component.round) update_output_bits(inverse_component, self, all_equivalent_bits, available_bits) elif component.type == WORD_OPERATION and component.description[0] == "SIGMA": @@ -945,7 +958,7 @@ def get_component_from_id(component_id, self): def get_key_schedule_component_ids(self): - key_schedule_component_ids = [input for input in self.inputs if INPUT_KEY in input] + key_schedule_component_ids = [input for input in self.inputs if INPUT_KEY in input or INPUT_TWEAK in input] component_list = self.get_all_components() for c in component_list: flag_belong_to_key_schedule = True From 042d6b3a9628b58100d03c41074232b1ea9ba100 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 00:34:10 +0400 Subject: [PATCH 026/179] FEATURE/Add: create Qarmav2 with MixColumn component --- .../block_ciphers/qarmav2_block_cipher.py | 2 +- .../qarmav2_with_mixcolumn_block_cipher.py | 607 ++++++++++++++++++ tests/unit/cipher_test.py | 9 + ...armav2_with_mixcolumn_block_cipher_test.py | 34 + 4 files changed, 651 insertions(+), 1 deletion(-) create mode 100644 claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py create mode 100644 tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py diff --git a/claasp/ciphers/block_ciphers/qarmav2_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_block_cipher.py index 8961a5d8..3a5432a3 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_block_cipher.py @@ -37,7 +37,7 @@ class QARMAv2BlockCipher(Cipher): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.qarmav2_block_cipher import QARMAv2BlockCipher - sage: qarmav2 = QARMAv2WordwiseBlockCipher(number_of_rounds = 4) + sage: qarmav2 = QARMAv2BlockCipher(number_of_rounds = 4) sage: key = 0x0123456789abcdeffedcba9876543210 sage: tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 sage: plaintext = 0x0000000000000000 diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py new file mode 100644 index 00000000..ce8cb700 --- /dev/null +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -0,0 +1,607 @@ +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** + + +from claasp.cipher import Cipher +from claasp.name_mappings import INPUT_KEY, INPUT_PLAINTEXT, INPUT_TWEAK + +PARAMETERS_CONFIGURATION_LIST = [ + {'number_of_rounds': 10, 'number_of_layers': 1, 'key_bit_size': 128, 'tweak_bit_size': 128}] + + +class QARMAv2MixColumnBlockCipher(Cipher): + """ + Return a cipher object of Qarma v2 Block Cipher. This version uses the MixColumn component to model the diffusion layer. + + INPUT: + + - ``number_of_rounds`` -- **integer** (default: `10`); number of rounds of the cipher. Must be greater or equal than 1. + - ``number_of_layers`` -- **integer** (default: `1`); number of layers of the state represented as matrices. Must be equal to 1 or 2. + - ``key_bit_size`` -- **integer** (default: `128`); length of the key in bits. If number_of_layers is equal to 1 it must be equal to 128, otherwise it must be equal to 128, 192 or 256. + - ``tweak_bit_size`` -- **integer** (default: `128`); length of the tweak in bits. Must be equal to either 64*number_of_layers or 128*number_of_layers. + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher + sage: qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) + sage: key = 0x0123456789abcdeffedcba9876543210 + sage: tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + sage: plaintext = 0x0000000000000000 + sage: ciphertext = 0x2cc660354929f2ca + sage: qarmav2.evaluate([key, plaintext, tweak]) == ciphertext + True + """ + + def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tweak_bit_size=128): + + if number_of_layers not in [1, 2]: + raise ValueError("number_of_layers incorrect (should be in [1,2])") + if number_of_rounds < 1: + raise ValueError("number_of_rounds incorrect (should be at least 1)") + if key_bit_size != 128 and number_of_layers == 1 or key_bit_size not in [128, 192, + 256] and number_of_layers == 2: + raise ValueError("key_bit_size incorrect (should be 128 with 1 layer and 128, 192 or 256 with 2 layers)") + if tweak_bit_size != 64 * number_of_layers and tweak_bit_size != 128 * number_of_layers: + raise ValueError("tweak_bit_size incorrect (should be either 64*number_of_layers or 128*number_of_layers)") + + # cipher dictionary initialize + self.CIPHER_BLOCK_SIZE = 64 * number_of_layers + self.LAYER_BLOCK_SIZE = 64 + self.KEY_BLOCK_SIZE = self.CIPHER_BLOCK_SIZE + self.TWEAK_BLOCK_SIZE = self.CIPHER_BLOCK_SIZE + self.NROUNDS = number_of_rounds + self.WORD_SIZE = 4 + self.SBOX_BIT_SIZE = self.WORD_SIZE + self.LAYER_SBOXES = 16 + self.NUM_SBOXES = self.LAYER_SBOXES * number_of_layers + self.NUM_ROWS = 4 + self.ROW_SIZE = 4 + + super().__init__(family_name="qarmav2_block_cipher", + cipher_type="block_cipher", + cipher_inputs=[INPUT_KEY, INPUT_PLAINTEXT, INPUT_TWEAK], + cipher_inputs_bit_size=[key_bit_size, self.CIPHER_BLOCK_SIZE, tweak_bit_size], + cipher_output_bit_size=self.CIPHER_BLOCK_SIZE) + + self.state_shuffle = [ + 0, 11, 6, 13, + 10, 1, 12, 7, + 5, 14, 3, 8, + 15, 4, 9, 2, + ] + + self.sbox = [ + 4, 7, 9, 11, + 12, 6, 14, 15, + 0, 5, 1, 13, + 8, 3, 2, 10, + ] + + self.inverse_sbox = [self.sbox.index(i) for i in range(16)] + + self.rotations_matrix = [ + 0, 1, 2, 3, + 3, 0, 1, 2, + 2, 3, 0, 1, + 1, 2, 3, 0, + ] + + self.tweak_permutations = { + 1: [ + 1, 10, 14, 6, + 2, 9, 13, 5, + 0, 8, 12, 4, + 3, 11, 15, 7, + ], + 2: [ + 1, 10, 14, 22, + 18, 25, 29, 21, + 0, 8, 12, 4, + 19, 27, 31, 23, + 17, 26, 30, 6, + 2, 9, 13, 5, + 16, 24, 28, 20, + 3, 11, 15, 7, + ] + } + + self.mix_column_matrix = [ + [0x0, 0x2, 0x4, 0x8, ], + [0x8, 0x0, 0x2, 0x4, ], + [0x4, 0x8, 0x0, 0x2, ], + [0x2, 0x4, 0x8, 0x0, ], + ] + + lfsr_matrix = [[0 for i in range(64)] for j in range(64)] + for i in range(63): + lfsr_matrix[i][i + 1] = 1 + lfsr_matrix[13][0] = 1 + lfsr_matrix[30][0] = 1 + lfsr_matrix[44][0] = 1 + lfsr_matrix[63][0] = 1 + + inverse_state_permutation = [] + for i in self.state_shuffle: + inverse_state_permutation += list(range(4 * i, 4 * i + 4)) + state_permutation = [inverse_state_permutation.index(i) for i in range(self.LAYER_BLOCK_SIZE)] + + tweak_permutation = [] + inverse_permutation = [] + for i in self.tweak_permutations[number_of_layers]: + inverse_permutation += list(range(4 * i, 4 * i + 4)) + direct_permutation = [inverse_permutation.index(i) for i in range(self.TWEAK_BLOCK_SIZE)] + tweak_permutation = [inverse_permutation, direct_permutation] + + exchange_rows_permutation = list(range(64, 96)) + list(range(32, 64)) + list(range(32)) + list(range(96, 128)) + + # First round different from others + self.add_round() + + # Tweak initialization + tweak_0 = self.add_permutation_component([INPUT_TWEAK], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[1]) + for j in range(1, number_of_rounds - 1): + perm_tweak = self.add_permutation_component([tweak_0.id], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[1]) + tweak_0 = perm_tweak + if tweak_bit_size == self.TWEAK_BLOCK_SIZE: + tweak_1 = self.add_permutation_component([INPUT_TWEAK], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[1]) + else: + tweak_1 = self.add_permutation_component([INPUT_TWEAK], + [[i for i in + range(self.TWEAK_BLOCK_SIZE, 2 * self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + [i for i in range(self.TWEAK_BLOCK_SIZE)]) + tweak_state = [tweak_0, tweak_1] + + # Key initialization + key_0 = self.add_permutation_component([INPUT_KEY], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + if key_bit_size == 2 * self.KEY_BLOCK_SIZE: + key_1 = self.add_permutation_component([INPUT_KEY], + [[i for i in range(self.KEY_BLOCK_SIZE, 2 * self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + elif key_bit_size == self.KEY_BLOCK_SIZE: + key_1 = key_0 + else: + key_1 = self.add_permutation_component([INPUT_KEY, majority_function(INPUT_KEY).id], + [[i for i in + range(self.KEY_BLOCK_SIZE, 3 * self.KEY_BLOCK_SIZE / 2)], + [i for i in range(self.KEY_BLOCK_SIZE / 2)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + key_state = [key_0, key_1] + + # Round constants initialization + round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)] + if number_of_layers == 2: + round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)) + round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3) + round_constant.append(round_constant_0) + if number_of_layers == 2: + round_constant_1 = self.update_constants(round_constant_0) + round_constant.append(round_constant_1) + for i in range(2, number_of_rounds): + round_constant_0 = self.update_constants(round_constant[-1]) + round_constant.append(round_constant_0) + if number_of_layers == 2: + round_constant_1 = self.update_constants(round_constant_0) + round_constant.append(round_constant_1) + + first_round_add_round_key = self.add_XOR_component([key_state[0].id, INPUT_PLAINTEXT], + [[i for i in range(self.KEY_BLOCK_SIZE)], + list(range(self.CIPHER_BLOCK_SIZE))[::-1]], + self.CIPHER_BLOCK_SIZE) + + first_round_sboxes = [] + for sb in range(self.NUM_SBOXES): + sbox = self.add_SBOX_component([first_round_add_round_key.id], + [[i for i in range(4 * sb, 4 * sb + 4)]], + self.SBOX_BIT_SIZE, + self.sbox) + first_round_sboxes.append(sbox) + + round_output = self.add_permutation_component([first_round_sboxes[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE, + [i for i in range(self.CIPHER_BLOCK_SIZE)]) + + # Direct encryption + for round_number in range(1, number_of_rounds + 1): + + round_key_shuffle = [] + for l in range(number_of_layers): + xor = self.add_XOR_component([round_output.id, + key_state[round_number % 2].id, + tweak_state[round_number % 2].id, + round_constant[(round_number - 1) * number_of_layers + l].id], + [[i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + + tweak_state[round_number % 2] = self.add_permutation_component([tweak_state[round_number % 2].id], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[round_number % 2]) + + round_state_shuffle = [] + for l in range(number_of_layers): + shuffled_state = self.add_permutation_component([round_key_shuffle[l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + state_permutation) + round_state_shuffle.append(shuffled_state) + + round_state_rotate = [] + for l in range(number_of_layers): + for c in range(4): + rotate = self.add_mix_column_component([round_state_shuffle[l].id], + [[i for i in range(4 * c, 4 * c + 4)] + [i for i in + range(4 * c + 16, + 4 * c + 20)] + [ + i for i in range(4 * c + 32, 4 * c + 36)] + [i for i in + range( + 4 * c + 48, + 4 * c + 52)]], + self.LAYER_BLOCK_SIZE // 4, + [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) + round_state_rotate.append(rotate) + + round_sboxes = [] + for l in range(number_of_layers): + for sb in range(self.LAYER_SBOXES): + sbox = self.add_SBOX_component([round_state_rotate[sb % 4 + 4 * l].id], + [[i for i in range(4 * int(sb / 4), 4 * int(sb / 4) + 4)]], + self.SBOX_BIT_SIZE, + self.sbox) + round_sboxes.append(sbox) + + if number_of_layers == 2 and (number_of_rounds - round_number) % 2 == 0: + exchanging_rows = self.add_permutation_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE, + exchange_rows_permutation) + + round_output = self.add_round_output_component([exchanging_rows.id], + [[i for i in range(self.CIPHER_BLOCK_SIZE)]], + self.CIPHER_BLOCK_SIZE) + else: + round_output = self.add_round_output_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE) + + self.add_round() + + # Reflector + new_keys = self.o_function(key_state) + key_state = new_keys + W = self.o_function(new_keys) + + alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344) + alpha = [alpha_0] + if number_of_layers == 2: + alpha_1 = self.update_constants(alpha[0]) + alpha.append(alpha_1) + beta_0 = self.update_constants(alpha[-1]) + beta = [beta_0] + if number_of_layers == 2: + beta_1 = self.update_constants(beta_0) + beta.append(beta_1) + if number_of_layers == 2: + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + else: + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + + round_state_shuffle = [] + for l in range(number_of_layers): + shuffled_state = self.add_permutation_component([round_output.id], + [[i for i in range(64 * l, 64 * l + 64)]], + self.LAYER_BLOCK_SIZE, + state_permutation) + mixed_shuffled_state = self.add_XOR_component([shuffled_state.id, W[(number_of_rounds + 1) % 2].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(64 * l, 64 * l + 64)]], + self.LAYER_BLOCK_SIZE) + round_state_shuffle.append(mixed_shuffled_state) + + round_state_rotate = [] + for l in range(number_of_layers): + for c in range(4): + rotate = self.add_mix_column_component([round_state_shuffle[l].id], + [[i for i in range(4 * c, 4 * c + 4)] + [i for i in + range(4 * c + 16, + 4 * c + 20)] + [i + for + i + in + range( + 4 * c + 32, + 4 * c + 36)] + [ + i for i in range(4 * c + 48, 4 * c + 52)]], + self.LAYER_BLOCK_SIZE // 4, + [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) + round_state_rotate.append(rotate) + + central_keyed_state = [] + for l in range(number_of_layers): + for w in range(16): + central_xor = self.add_XOR_component( + [round_state_rotate[w % 4 + 4 * l].id, W[(number_of_rounds) % 2].id], + [[i for i in range(self.WORD_SIZE * int(w / 4), self.WORD_SIZE * int(w / 4) + 4)], + [i for i in range(64 * l + 4 * w, 64 * l + 4 * w + 4)]], + self.WORD_SIZE) + central_keyed_state.append(central_xor) + + central_shuffled_state = [] + for l in range(number_of_layers): + shuffled_state = self.add_permutation_component([central_keyed_state[16 * l + i].id for i in range(16)], + [[i for i in range(4)] for j in range(16)], + self.LAYER_BLOCK_SIZE, + inverse_state_permutation) + central_shuffled_state.append(shuffled_state) + + round_output = self.add_round_output_component([central_shuffled_state[i].id for i in range(number_of_layers)], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in + range(number_of_layers)], + self.CIPHER_BLOCK_SIZE) + + # Inverse encryption + for round_number in list(range(1, number_of_rounds + 1))[::-1]: + + if number_of_layers == 2 and (number_of_rounds - round_number) % 2 == 0: + exchanging_rows = self.add_permutation_component([round_output.id], + [[i for i in range(self.CIPHER_BLOCK_SIZE)]], + self.CIPHER_BLOCK_SIZE, + exchange_rows_permutation) + else: + exchanging_rows = round_output + + round_sboxes = [] + for sb in range(self.NUM_SBOXES): + sbox = self.add_SBOX_component([exchanging_rows.id], + [[i for i in range(4 * sb, 4 * sb + 4)]], + self.SBOX_BIT_SIZE, + self.inverse_sbox) + round_sboxes.append(sbox) + + round_state_rotate = [] + for l in range(number_of_layers): + for c in range(4): + rotate = self.add_mix_column_component([round_sboxes[c + 4 * i + 16 * l].id for i in range(4)], + [[i for i in range(4)] for j in range(4)], + self.LAYER_BLOCK_SIZE // 4, + [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) + round_state_rotate.append(rotate) + + round_state_shuffle = [] + for l in range(number_of_layers): + shuffled_state = self.add_permutation_component( + [round_state_rotate[i % 4 + 4 * l].id for i in range(16)], + [[i for i in range(4 * int(j / 4), 4 * int(j / 4) + 4)] for j in range(16)], + self.LAYER_BLOCK_SIZE, + inverse_state_permutation) + round_state_shuffle.append(shuffled_state) + + round_key_shuffle = [] + if round_number == 1: + for l in range(number_of_layers): + xor = self.add_XOR_component([round_state_shuffle[l].id, + key_state[(round_number + 1) % 2].id, + INPUT_TWEAK, + round_constant[(round_number - 1) * number_of_layers + l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range((self.LAYER_BLOCK_SIZE) * l, + (self.LAYER_BLOCK_SIZE) * (l + 1))], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + else: + for l in range(number_of_layers): + xor = self.add_XOR_component([round_state_shuffle[l].id, + key_state[(round_number + 1) % 2].id, + tweak_state[(round_number + 1) % 2].id, + round_constant[(round_number - 1) * number_of_layers + l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + + tweak_state[(round_number + 1) % 2] = self.add_permutation_component( + [tweak_state[(round_number + 1) % 2].id], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[(round_number + 1) % 2]) + if round_number != 1: + round_output = self.add_round_output_component( + [round_key_shuffle[i].id for i in range(number_of_layers)], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(number_of_layers)], + self.CIPHER_BLOCK_SIZE) + + self.add_round() + else: + round_output = self.add_permutation_component( + [round_key_shuffle[i].id for i in range(number_of_layers)], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(number_of_layers)], + self.CIPHER_BLOCK_SIZE, + [i for i in range(self.CIPHER_BLOCK_SIZE)]) + + # Last round different from others + last_round_sboxes = [] + for sb in range(self.NUM_SBOXES): + sbox = self.add_SBOX_component( + [round_output.id], + [[i for i in range(4 * sb, 4 * sb + 4)]], + self.SBOX_BIT_SIZE, + self.inverse_sbox) + last_round_sboxes.append(sbox) + + last_round_add_round_key = [] + for sb in range(self.NUM_SBOXES): + add_round_key = self.add_XOR_component([key_state[1].id, last_round_sboxes[sb].id], + [[i for i in range(4 * sb, 4 * sb + 4)], + [i for i in range(self.SBOX_BIT_SIZE)]], + self.SBOX_BIT_SIZE) + last_round_add_round_key.append(add_round_key) + + round_output = self.add_round_output_component([last_round_add_round_key[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE) + + cipher_output = self.add_cipher_output_component([round_output.id], + [[i for i in range(self.CIPHER_BLOCK_SIZE)]], + self.CIPHER_BLOCK_SIZE) + + def update_constants(self, constant): + spill = self.add_SHIFT_component([constant.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + 51) + tmp_0 = self.add_SHIFT_component([constant.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -13) + tmp_1 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -50) + tmp_2 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -33) + tmp_3 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -19) + tmp = self.add_XOR_component([tmp_0.id, tmp_1.id, tmp_2.id, tmp_3.id, spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(5)], + self.LAYER_BLOCK_SIZE) + spill = self.add_SHIFT_component([tmp.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + 54) + tmp_0 = self.add_SHIFT_component([tmp.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -10) + tmp_1 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -50) + tmp_2 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -33) + tmp_3 = self.add_SHIFT_component([spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + -19) + tmp = self.add_XOR_component([tmp_0.id, tmp_1.id, tmp_2.id, tmp_3.id, spill.id], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(5)], + self.LAYER_BLOCK_SIZE) + return tmp + + def o_function(self, key): + key_new = [] + key_rot_0 = self.add_rotate_component([key[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + 1) + key_shift_0 = self.add_SHIFT_component([key[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + self.KEY_BLOCK_SIZE - 1) + key_new.append(self.add_XOR_component([key_rot_0.id, key_shift_0.id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE)) + + key_lshift_1 = self.add_SHIFT_component([key[1].id], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + -1) + key_rshift_1 = self.add_SHIFT_component([key_lshift_1.id], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + self.KEY_BLOCK_SIZE - 1) + key_rotated_1 = self.add_XOR_component([key[1].id, key_rshift_1.id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + key_new.append(self.add_rotate_component([key_rotated_1.id], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + -1)) + return (key_new) + + def majority_function(self, key): + maj_key_size = self.KEY_BLOCK_SIZE / 2 + and_0_1 = self.add_AND_component([key, key], + [[i for i in range(maj_key_size)], + [i for i in range(maj_key_size, 2 * maj_key_size)]], + maj_key_size) + and_0_2 = self.add_AND_component([key, key], + [[i for i in range(maj_key_size)], + [i for i in range(2 * maj_key_size, 3 * maj_key_size)]], + maj_key_size) + and_1_2 = self.add_AND_component([key, key], + [[i for i in range(maj_key_size, 2 * maj_key_size)], + [i for i in range(2 * maj_key_size, 3 * maj_key_size)]], + maj_key_size) + maj_key_rotated = self.add_OR_component([and_0_1, and_0_2, and_1_2], + [[i for i in range(maj_key_size)] for j in range(3)], + maj_key_size) + maj_key = self.add_rotate_component([maj_key_rotated], + [[i for i in range(maj_key_size)]], + maj_key_size, + 17) + return maj_key \ No newline at end of file diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 049fb4c1..0c1e7d22 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -37,6 +37,7 @@ from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher +from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network @@ -734,3 +735,11 @@ def test_cipher_inverse(): ciphertext = cipher.evaluate([plaintext, key]) cipher_inv = cipher.cipher_inverse() assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) + key = 0x0123456789abcdeffedcba9876543210 + plaintext = 0x0000000000000000 + tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + ciphertext = qarmav2.evaluate([key, plaintext, tweak]) + cipher_inv = qarmav2.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext diff --git a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py new file mode 100644 index 00000000..666cd6a2 --- /dev/null +++ b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py @@ -0,0 +1,34 @@ +import pytest + +from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher + + +@pytest.mark.filterwarnings("ignore::DeprecationWarning:") +def test_qarmav2_mixcolumn_block_cipher(): + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) + assert qarmav2.type == 'block_cipher' + assert qarmav2.family_name == 'qarmav2_block_cipher' + assert qarmav2.number_of_rounds == 9 + assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r9' + assert qarmav2.component_from(0, 0).id == 'constant_0_0' + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) + key = 0x0123456789abcdeffedcba9876543210 + plaintext = 0x0000000000000000 + tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + ciphertext = 0x2cc660354929f2ca + assert qarmav2.evaluate([key, plaintext, tweak]) == ciphertext + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 9) + key = 0x0123456789abcdeffedcba9876543210 + plaintext = 0x0000000000000000 + tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + ciphertext = 0xd459510ab82c66fc + assert qarmav2.evaluate([key, plaintext, tweak]) == ciphertext + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_layers = 2, number_of_rounds = 9, key_bit_size = 256, tweak_bit_size = 256) + key = 0x00102030405060708090a0b0c0d0e0f00f0e0d0c0b0a09080706050403020100 + plaintext = 0x00000000000000000000000000000000 + tweak = 0x7e5c3a18f6d4b290e5c3a18f6d4b29071eb852fc630da741b852fc960da741eb + ciphertext = 0x361262e2ecf88f03f4ea898d6a4f412f + assert qarmav2.evaluate([key, plaintext, tweak]) == ciphertext From ef53862f6ce0013cc7b02770b2496586197d154d Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 00:34:10 +0400 Subject: [PATCH 027/179] FEATURE/Add: create Qarmav2 with MixColumn component --- .../block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py index 666cd6a2..99108997 100644 --- a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py +++ b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py @@ -8,8 +8,8 @@ def test_qarmav2_mixcolumn_block_cipher(): qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) assert qarmav2.type == 'block_cipher' assert qarmav2.family_name == 'qarmav2_block_cipher' - assert qarmav2.number_of_rounds == 9 - assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r9' + assert qarmav2.number_of_rounds == 8 + assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r8' assert qarmav2.component_from(0, 0).id == 'constant_0_0' qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) From 36fae54ad29b9dcdfa5c91b662a05b48e958fdde Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 00:27:18 +0400 Subject: [PATCH 028/179] FEATURE/Add: support inversion of tweakable primitives and inversion of MixColumn operation with a non irreducible polynomial --- .../component_analysis_tests.py | 2 +- claasp/cipher_modules/inverse_cipher.py | 27 ++++++++++++++----- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index b459d135..5744e288 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -303,7 +303,7 @@ def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, G = PolynomialRing(GF(2), 'x') x = G.gen() irr_poly = int_to_poly(polynomial_as_int, word_size, x) - if irr_poly: + if irr_poly.is_irreducible(): F = GF(2 ** word_size, name='a', modulus=irr_poly) else: F = GF(2 ** word_size) diff --git a/claasp/cipher_modules/inverse_cipher.py b/claasp/cipher_modules/inverse_cipher.py index 5b07a564..e7c2c3ef 100644 --- a/claasp/cipher_modules/inverse_cipher.py +++ b/claasp/cipher_modules/inverse_cipher.py @@ -8,6 +8,9 @@ from claasp.components import modsub_component, cipher_output_component, linear_layer_component, \ intermediate_output_component from claasp.input import Input +from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF +from sage.rings.polynomial.polynomial_ring_constructor import PolynomialRing +from claasp.cipher_modules.component_analysis_tests import int_to_poly from claasp.name_mappings import * @@ -677,7 +680,7 @@ def _add_output_bit_equivalences(id, bit_positions, component, all_equivalent_bi flag_is_intersection_of_input_id_links_null, input_bit_positions = is_intersection_of_input_id_links_null( inverse_component, component) - if (component.description == [INPUT_KEY]) or (component.type == CONSTANT): + if (component.description == [INPUT_KEY]) or (component.description == [INPUT_TWEAK]) or(component.type == CONSTANT): for i in range(component.output_bit_size): output_bit_name_updated = id + "_" + str(i) + "_output_updated" bit = { @@ -745,11 +748,21 @@ def component_inverse(component, available_bits, all_equivalent_bits, key_schedu elif component.type == MIX_COLUMN: input_id_links, input_bit_positions = compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_components( component, available_output_components, all_equivalent_bits, self) - inv_matrix = get_inverse_matrix_in_integer_representation(component) - inverse_component = Component(component.id, component.type, - Input(component.input_bit_size, input_id_links, input_bit_positions), - component.output_bit_size, [[list(row) for row in inv_matrix]] + component.description[1:]) - inverse_component.__class__ = component.__class__ + description = component.description + G = PolynomialRing(GF(2), 'x') + x = G.gen() + irr_poly = int_to_poly(int(description[1]), int(description[2]), x) + if not irr_poly.is_irreducible(): + binary_matrix = binary_matrix_of_linear_component(component) + inv_binary_matrix = binary_matrix.inverse() + inverse_component = Component(component.id, LINEAR_LAYER, Input(component.input_bit_size, input_id_links, input_bit_positions), component.output_bit_size, list(inv_binary_matrix.transpose())) + inverse_component.__class__ = linear_layer_component.LinearLayer + else: + inv_matrix = get_inverse_matrix_in_integer_representation(component) + inverse_component = Component(component.id, component.type, + Input(component.input_bit_size, input_id_links, input_bit_positions), + component.output_bit_size, [[list(row) for row in inv_matrix]] + component.description[1:]) + inverse_component.__class__ = component.__class__ setattr(inverse_component, "round", component.round) update_output_bits(inverse_component, self, all_equivalent_bits, available_bits) elif component.type == WORD_OPERATION and component.description[0] == "SIGMA": @@ -945,7 +958,7 @@ def get_component_from_id(component_id, self): def get_key_schedule_component_ids(self): - key_schedule_component_ids = [input for input in self.inputs if INPUT_KEY in input] + key_schedule_component_ids = [input for input in self.inputs if INPUT_KEY in input or INPUT_TWEAK in input] component_list = self.get_all_components() for c in component_list: flag_belong_to_key_schedule = True From 56bc43f41626c0f6e751791d23ef27edc12faf7b Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 00:34:10 +0400 Subject: [PATCH 029/179] FEATURE/Add: create Qarmav2 with MixColumn component --- tests/unit/cipher_test.py | 9 --------- .../qarmav2_with_mixcolumn_block_cipher_test.py | 6 +++--- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..049fb4c1 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -37,7 +37,6 @@ from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher -from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network @@ -735,11 +734,3 @@ def test_cipher_inverse(): ciphertext = cipher.evaluate([plaintext, key]) cipher_inv = cipher.cipher_inverse() assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) - key = 0x0123456789abcdeffedcba9876543210 - plaintext = 0x0000000000000000 - tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 - ciphertext = qarmav2.evaluate([key, plaintext, tweak]) - cipher_inv = qarmav2.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext diff --git a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py index 666cd6a2..dee7b28b 100644 --- a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py +++ b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py @@ -8,9 +8,9 @@ def test_qarmav2_mixcolumn_block_cipher(): qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) assert qarmav2.type == 'block_cipher' assert qarmav2.family_name == 'qarmav2_block_cipher' - assert qarmav2.number_of_rounds == 9 - assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r9' - assert qarmav2.component_from(0, 0).id == 'constant_0_0' + assert qarmav2.number_of_rounds == 8 + assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r8' + assert qarmav2.component_from(0, 0).id == 'linear_layer_0_0' qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) key = 0x0123456789abcdeffedcba9876543210 From 546d3c526829a8317aedbedd24d1d75ed98cda3e Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 08:44:45 +0400 Subject: [PATCH 030/179] Add test for Qarma inversion --- tests/unit/cipher_test.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 049fb4c1..0c1e7d22 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -37,6 +37,7 @@ from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher +from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network @@ -734,3 +735,11 @@ def test_cipher_inverse(): ciphertext = cipher.evaluate([plaintext, key]) cipher_inv = cipher.cipher_inverse() assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) + key = 0x0123456789abcdeffedcba9876543210 + plaintext = 0x0000000000000000 + tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + ciphertext = qarmav2.evaluate([key, plaintext, tweak]) + cipher_inv = qarmav2.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext From af5c1ee5ed20ae6adc5bb5521db4f29fd717dc20 Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 5 Feb 2024 11:26:36 +0400 Subject: [PATCH 031/179] FEATURE/Add: gaston permutation with sbox component --- .../permutations/gaston_sbox_permutation.py | 217 ++++++++++++++++++ .../gaston_sbox_permutation_test.py | 22 ++ 2 files changed, 239 insertions(+) create mode 100644 claasp/ciphers/permutations/gaston_sbox_permutation.py create mode 100644 tests/unit/ciphers/permutations/gaston_sbox_permutation_test.py diff --git a/claasp/ciphers/permutations/gaston_sbox_permutation.py b/claasp/ciphers/permutations/gaston_sbox_permutation.py new file mode 100644 index 00000000..1c7c7ac4 --- /dev/null +++ b/claasp/ciphers/permutations/gaston_sbox_permutation.py @@ -0,0 +1,217 @@ +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** + +from claasp.cipher import Cipher +from claasp.name_mappings import INPUT_PLAINTEXT +from claasp.utils.utils import get_inputs_parameter +from claasp.DTOs.component_state import ComponentState + +GASTON_NROWS = 5 +WORD_SIZE = 64 + +# parameters for theta +GASTON_t = [25, 32, 52, 60, 63] +# GASTON_t0 = 25 +# GASTON_t1 = 32 +# GASTON_t2 = 52 +# GASTON_t3 = 60 +# GASTON_t4 = 63 + +GASTON_r = 1 +GASTON_s = 18 +GASTON_u = 23 + +# rho-east rotation offsets +GASTON_e = [0, 60, 22, 27, 4] +# GASTON_e0 = 0 +# GASTON_e1 = 60 +# GASTON_e2 = 22 +# GASTON_e3 = 27 +# GASTON_e4 = 4 + +# rho-west rotation offsets +GASTON_w = [0, 56, 31, 46, 43] +# GASTON_w0 = 0 +# GASTON_w1 = 56 +# GASTON_w2 = 31 +# GASTON_w3 = 46 +# GASTON_w4 = 43 + +# gaston round constant +GASTON_rc = [ + 0x00000000000000F0, 0x00000000000000E1, 0x00000000000000D2, + 0x00000000000000C3, 0x00000000000000B4, 0x00000000000000A5, + 0x0000000000000096, 0x0000000000000087, 0x0000000000000078, + 0x0000000000000069, 0x000000000000005A, 0x000000000000004B +] + +SBOX = [0, 5, 10, 11, 20, 17, 22, 23, 9, 12, 3, 2, 13, 8, 15, 14, + 18, 21, 24, 27, 6, 1, 4, 7, 26, 29, 16, 19, 30, 25, 28, 31] + +PARAMETERS_CONFIGURATION_LIST = [{'number_of_rounds': 12}] + + +class GastonSboxPermutation(Cipher): + """ + Construct an instance of the Gaston Permutation class with Sbox component. + + INPUT: + + - ``number_of_rounds`` -- **integer** (default: `12`); number of rounds of the permutation + + EXAMPLES:: + + sage: from claasp.ciphers.permutations.gaston_sbox_permutation import GastonSboxPermutation + sage: gaston = GastonSboxPermutation(number_of_rounds=12) + + sage: plaintext = 0x00000000000000010000000000000001000000000000000100000000000000010000000000000001 + sage: ciphertext = 0x202d7fa691663e77043cb03594656fcdf6747f2da9cd9200ec3380fde8ec84d565247e6763406084 + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + + sage: plaintext = 0x0 + sage: ciphertext = 0x88B326096BEBC6356CA8FB64BC5CE6CAF1CE3840D819071354D70067438689B5F17FE863F958F32B + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + + sage: plaintext=0x1F4AD9906DA6A2544B84D7F83F2BDDFA468A0853578A00E36C05A0506DF7F66E4EFB22112453C964 + sage: ciphertext=0x1BA89B5B5C4583B622135709AE53417D9847B975E9EC9F3DCE042DF2A402591D563EC68FC30307EA + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + + sage: plaintext=0xFFFFFFFFFFFFFFFF0123456789ABCDEFFEDCBA9876543210AAAAAAAAAAAAAAAA0101010101010101 + sage: ciphertext=0x3117D51B14937067338F17F773C13F79DFB86E0868D252AB0D461D35EB863DE708BCE3E354C7231A + sage: print(gaston.evaluate([plaintext])==ciphertext) + True + """ + + def __init__(self, number_of_rounds=12): + self.state_bit_size = GASTON_NROWS * WORD_SIZE + + super().__init__(family_name='gaston', + cipher_type="permutation", + cipher_inputs=[INPUT_PLAINTEXT], + cipher_inputs_bit_size=[self.state_bit_size], + cipher_output_bit_size=self.state_bit_size) + + # gaston state initialization + state = [] + for row in range(GASTON_NROWS): + p = ComponentState([INPUT_PLAINTEXT], [[i + row * WORD_SIZE for i in range(WORD_SIZE)]]) + state.append(p) + + for round_number in range(12 - number_of_rounds, 12): + self.add_round() + # gaston round function + state = self.gaston_round_function(state, GASTON_rc[round_number]) + # gaston round output + inputs_id, inputs_pos = get_inputs_parameter([state[i] for i in range(GASTON_NROWS)]) + if round_number == 11: + self.add_cipher_output_component(inputs_id, inputs_pos, self.state_bit_size) + else: + self.add_round_output_component(inputs_id, inputs_pos, self.state_bit_size) + + def gaston_round_function(self, state, rc): + state = self.gaston_rho_east(state) + state = self.gaston_theta(state) + state = self.gaston_rho_west(state) + state = self.gaston_iota(state, rc) + state = self.gaston_chi_sbox(state) + + return state + + def gaston_rho_east(self, state): + for row in range(GASTON_NROWS): + self.add_rotate_component(state[row].id, state[row].input_bit_positions, WORD_SIZE, -GASTON_e[row]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + return state + + def gaston_theta(self, state): + inputs_id, inputs_pos = get_inputs_parameter([state[i] for i in range(GASTON_NROWS)]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(P.id, P.input_bit_positions, WORD_SIZE, -GASTON_r) + P_rot = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + inputs_id, inputs_pos = get_inputs_parameter([P, P_rot]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + # column parity P + + Q_rows = [] + for i in range(GASTON_NROWS): + self.add_rotate_component(state[i].id, state[i].input_bit_positions, WORD_SIZE, -GASTON_t[i]) + q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + Q_rows.append(q) + + inputs_id, inputs_pos = get_inputs_parameter([Q_rows[i] for i in range(GASTON_NROWS)]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(Q.id, Q.input_bit_positions, WORD_SIZE, -GASTON_s) + Q_rot = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + inputs_id, inputs_pos = get_inputs_parameter([Q, Q_rot]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + Q = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + # column parity Q + + inputs_id, inputs_pos = get_inputs_parameter([P, Q]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + self.add_rotate_component(P.id, P.input_bit_positions, WORD_SIZE, -GASTON_u) + P = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + for row in range(GASTON_NROWS): + inputs_id, inputs_pos = get_inputs_parameter([state[row], P]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + return state + + def gaston_rho_west(self, state): + for row in range(GASTON_NROWS): + self.add_rotate_component(state[row].id, state[row].input_bit_positions, WORD_SIZE, -GASTON_w[row]) + state[row] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + return state + + def gaston_iota(self, state, rc): + self.add_constant_component(WORD_SIZE, rc) + const = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + inputs_id, inputs_pos = get_inputs_parameter([state[0], const]) + self.add_XOR_component(inputs_id, inputs_pos, WORD_SIZE) + state[0] = ComponentState([self.get_current_component_id()], [list(range(WORD_SIZE))]) + + return state + + def gaston_chi_sbox(self, state): + state_chi = [] + inputs_id = state[0].id + state[1].id + state[2].id + state[3].id + state[4].id + output_ids = [] + for k in range(WORD_SIZE): + inputs_pos = [[k] for _ in range(GASTON_NROWS)] + self.add_SBOX_component(inputs_id, inputs_pos, GASTON_NROWS, SBOX) + output_ids = output_ids + [self.get_current_component_id()] + + for i in range(GASTON_NROWS): + state_chi.append(ComponentState(output_ids, [[i]] * WORD_SIZE)) + + return state_chi diff --git a/tests/unit/ciphers/permutations/gaston_sbox_permutation_test.py b/tests/unit/ciphers/permutations/gaston_sbox_permutation_test.py new file mode 100644 index 00000000..4d9459bd --- /dev/null +++ b/tests/unit/ciphers/permutations/gaston_sbox_permutation_test.py @@ -0,0 +1,22 @@ +from claasp.ciphers.permutations.gaston_sbox_permutation import GastonSboxPermutation + + +def test_gaston_sbox_permutation(): + gaston = GastonSboxPermutation(number_of_rounds=12) + assert gaston.number_of_rounds == 12 + + plaintext = 0x00000000000000010000000000000001000000000000000100000000000000010000000000000001 + ciphertext = 0x202d7fa691663e77043cb03594656fcdf6747f2da9cd9200ec3380fde8ec84d565247e6763406084 + assert gaston.evaluate([plaintext]) == ciphertext + + plaintext = 0x0 + ciphertext = 0x88B326096BEBC6356CA8FB64BC5CE6CAF1CE3840D819071354D70067438689B5F17FE863F958F32B + assert gaston.evaluate([plaintext]) == ciphertext + + plaintext = 0x1F4AD9906DA6A2544B84D7F83F2BDDFA468A0853578A00E36C05A0506DF7F66E4EFB22112453C964 + ciphertext = 0x1BA89B5B5C4583B622135709AE53417D9847B975E9EC9F3DCE042DF2A402591D563EC68FC30307EA + assert gaston.evaluate([plaintext]) == ciphertext + + plaintext = 0xFFFFFFFFFFFFFFFF0123456789ABCDEFFEDCBA9876543210AAAAAAAAAAAAAAAA0101010101010101 + ciphertext = 0x3117D51B14937067338F17F773C13F79DFB86E0868D252AB0D461D35EB863DE708BCE3E354C7231A + assert gaston.evaluate([plaintext]) == ciphertext From 12a03099838b0ff112e6491cbb908c28b146624e Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 14:37:38 +0400 Subject: [PATCH 032/179] Refactor to decrease complexity --- .../qarmav2_with_mixcolumn_block_cipher.py | 511 ++++++++++-------- ...armav2_with_mixcolumn_block_cipher_test.py | 4 +- 2 files changed, 287 insertions(+), 228 deletions(-) diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py index ce8cb700..da584f4d 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -70,6 +70,7 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw self.NUM_SBOXES = self.LAYER_SBOXES * number_of_layers self.NUM_ROWS = 4 self.ROW_SIZE = 4 + self.number_of_layers = number_of_layers super().__init__(family_name="qarmav2_block_cipher", cipher_type="block_cipher", @@ -137,26 +138,79 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw inverse_state_permutation = [] for i in self.state_shuffle: inverse_state_permutation += list(range(4 * i, 4 * i + 4)) + self.inverse_state_permutation = inverse_state_permutation state_permutation = [inverse_state_permutation.index(i) for i in range(self.LAYER_BLOCK_SIZE)] - + self.state_permutation = state_permutation tweak_permutation = [] inverse_permutation = [] for i in self.tweak_permutations[number_of_layers]: inverse_permutation += list(range(4 * i, 4 * i + 4)) + self.inverse_permutation = inverse_permutation direct_permutation = [inverse_permutation.index(i) for i in range(self.TWEAK_BLOCK_SIZE)] tweak_permutation = [inverse_permutation, direct_permutation] exchange_rows_permutation = list(range(64, 96)) + list(range(32, 64)) + list(range(32)) + list(range(96, 128)) - + self.exchange_rows_permutation = exchange_rows_permutation # First round different from others self.add_round() # Tweak initialization + tweak_state = self.tweak_initialization(tweak_permutation, tweak_bit_size) + + # Key initialization + key_state = self.key_initialization(key_bit_size) + + # Round constants initialization + round_constant = self.constants_initialization() + + # First round different from others + round_output = self.first_round_start(key_state) + + # Direct encryption + for round_number in range(1, number_of_rounds + 1): + round_output, round_key_shuffle = self.direct_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + self.add_round() + + # Reflector + round_output, key_state = self.reflector(round_output, key_state, round_key_shuffle, round_constant) + + # Inverse encryption + for round_number in list(range(1, number_of_rounds + 1))[::-1]: + self.add_round() + round_output, round_key_shuffle = self.inverse_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + + # Last round different from others + cipher_output = self.last_round_end(round_output, key_state, round_key_shuffle, round_constant) + + def key_initialization(self, key_bit_size): + # Key initialization + key_0 = self.add_permutation_component([INPUT_KEY], + [[i for i in range(self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + if key_bit_size == 2 * self.KEY_BLOCK_SIZE: + key_1 = self.add_permutation_component([INPUT_KEY], + [[i for i in range(self.KEY_BLOCK_SIZE, 2 * self.KEY_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + elif key_bit_size == self.KEY_BLOCK_SIZE: + key_1 = key_0 + else: + key_1 = self.add_permutation_component([INPUT_KEY, majority_function(INPUT_KEY).id], + [[i for i in + range(self.KEY_BLOCK_SIZE, 3 * self.KEY_BLOCK_SIZE / 2)], + [i for i in range(self.KEY_BLOCK_SIZE / 2)]], + self.KEY_BLOCK_SIZE, + [i for i in range(self.KEY_BLOCK_SIZE)]) + key_state = [key_0, key_1] + + return key_state + def tweak_initialization(self, tweak_permutation, tweak_bit_size): tweak_0 = self.add_permutation_component([INPUT_TWEAK], [[i for i in range(self.TWEAK_BLOCK_SIZE)]], self.TWEAK_BLOCK_SIZE, tweak_permutation[1]) - for j in range(1, number_of_rounds - 1): + for j in range(1, self.NROUNDS-1): perm_tweak = self.add_permutation_component([tweak_0.id], [[i for i in range(self.TWEAK_BLOCK_SIZE)]], self.TWEAK_BLOCK_SIZE, @@ -173,45 +227,32 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw range(self.TWEAK_BLOCK_SIZE, 2 * self.TWEAK_BLOCK_SIZE)]], self.TWEAK_BLOCK_SIZE, [i for i in range(self.TWEAK_BLOCK_SIZE)]) + tweak_state = [tweak_0, tweak_1] - # Key initialization - key_0 = self.add_permutation_component([INPUT_KEY], - [[i for i in range(self.KEY_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE, - [i for i in range(self.KEY_BLOCK_SIZE)]) - if key_bit_size == 2 * self.KEY_BLOCK_SIZE: - key_1 = self.add_permutation_component([INPUT_KEY], - [[i for i in range(self.KEY_BLOCK_SIZE, 2 * self.KEY_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE, - [i for i in range(self.KEY_BLOCK_SIZE)]) - elif key_bit_size == self.KEY_BLOCK_SIZE: - key_1 = key_0 - else: - key_1 = self.add_permutation_component([INPUT_KEY, majority_function(INPUT_KEY).id], - [[i for i in - range(self.KEY_BLOCK_SIZE, 3 * self.KEY_BLOCK_SIZE / 2)], - [i for i in range(self.KEY_BLOCK_SIZE / 2)]], - self.KEY_BLOCK_SIZE, - [i for i in range(self.KEY_BLOCK_SIZE)]) - key_state = [key_0, key_1] + return tweak_state + def constants_initialization(self): # Round constants initialization round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)] - if number_of_layers == 2: + if self.number_of_layers == 2: round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)) round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3) round_constant.append(round_constant_0) - if number_of_layers == 2: - round_constant_1 = self.update_constants(round_constant_0) + if self.number_of_layers == 2: + round_constant_1 = self.update_single_constant(round_constant_0) round_constant.append(round_constant_1) - for i in range(2, number_of_rounds): - round_constant_0 = self.update_constants(round_constant[-1]) + for i in range(2, self.NROUNDS): + round_constant_0 = self.update_single_constant(round_constant[-1]) round_constant.append(round_constant_0) - if number_of_layers == 2: - round_constant_1 = self.update_constants(round_constant_0) + if self.number_of_layers == 2: + round_constant_1 = self.update_single_constant(round_constant_0) round_constant.append(round_constant_1) + return round_constant + + def first_round_start(self, key_state): + # First round different from others first_round_add_round_key = self.add_XOR_component([key_state[0].id, INPUT_PLAINTEXT], [[i for i in range(self.KEY_BLOCK_SIZE)], list(range(self.CIPHER_BLOCK_SIZE))[::-1]], @@ -231,127 +272,102 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw self.CIPHER_BLOCK_SIZE, [i for i in range(self.CIPHER_BLOCK_SIZE)]) + return round_output + + def direct_round(self, round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number): # Direct encryption - for round_number in range(1, number_of_rounds + 1): + round_key_shuffle = [] + for l in range(self.number_of_layers): + xor = self.add_XOR_component([round_output.id, + key_state[round_number % 2].id, + tweak_state[round_number % 2].id, + round_constant[(round_number - 1) * self.number_of_layers + l].id], + [[i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + + tweak_state[round_number % 2] = self.add_permutation_component([tweak_state[round_number % 2].id], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[round_number % 2]) - round_key_shuffle = [] - for l in range(number_of_layers): - xor = self.add_XOR_component([round_output.id, - key_state[round_number % 2].id, - tweak_state[round_number % 2].id, - round_constant[(round_number - 1) * number_of_layers + l].id], - [[i for i in range(64 * l, 64 * l + 64)], - [i for i in range(64 * l, 64 * l + 64)], - [i for i in range(64 * l, 64 * l + 64)], - [i for i in range(64)]], - self.LAYER_BLOCK_SIZE) - round_key_shuffle.append(xor) + round_state_shuffle = [] + for l in range(self.number_of_layers): + shuffled_state = self.add_permutation_component([round_key_shuffle[l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)]], + self.LAYER_BLOCK_SIZE, + self.state_permutation) + round_state_shuffle.append(shuffled_state) - tweak_state[round_number % 2] = self.add_permutation_component([tweak_state[round_number % 2].id], - [[i for i in range(self.TWEAK_BLOCK_SIZE)]], - self.TWEAK_BLOCK_SIZE, - tweak_permutation[round_number % 2]) - - round_state_shuffle = [] - for l in range(number_of_layers): - shuffled_state = self.add_permutation_component([round_key_shuffle[l].id], - [[i for i in range(self.LAYER_BLOCK_SIZE)]], - self.LAYER_BLOCK_SIZE, - state_permutation) - round_state_shuffle.append(shuffled_state) - - round_state_rotate = [] - for l in range(number_of_layers): - for c in range(4): - rotate = self.add_mix_column_component([round_state_shuffle[l].id], - [[i for i in range(4 * c, 4 * c + 4)] + [i for i in - range(4 * c + 16, - 4 * c + 20)] + [ - i for i in range(4 * c + 32, 4 * c + 36)] + [i for i in - range( - 4 * c + 48, - 4 * c + 52)]], - self.LAYER_BLOCK_SIZE // 4, - [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) - round_state_rotate.append(rotate) - - round_sboxes = [] - for l in range(number_of_layers): - for sb in range(self.LAYER_SBOXES): - sbox = self.add_SBOX_component([round_state_rotate[sb % 4 + 4 * l].id], - [[i for i in range(4 * int(sb / 4), 4 * int(sb / 4) + 4)]], - self.SBOX_BIT_SIZE, - self.sbox) - round_sboxes.append(sbox) - - if number_of_layers == 2 and (number_of_rounds - round_number) % 2 == 0: - exchanging_rows = self.add_permutation_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], - [[i for i in range(self.SBOX_BIT_SIZE)] for j in - range(self.NUM_SBOXES)], - self.CIPHER_BLOCK_SIZE, - exchange_rows_permutation) - - round_output = self.add_round_output_component([exchanging_rows.id], - [[i for i in range(self.CIPHER_BLOCK_SIZE)]], - self.CIPHER_BLOCK_SIZE) - else: - round_output = self.add_round_output_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], - [[i for i in range(self.SBOX_BIT_SIZE)] for j in - range(self.NUM_SBOXES)], - self.CIPHER_BLOCK_SIZE) + round_state_rotate = [] + for l in range(self.number_of_layers): + for c in range(4): + rotate = self.add_mix_column_component([round_state_shuffle[l].id], + [[i for i in range(4 * c, 4 * c + 4)] + [i for i in + range(4 * c + 16, + 4 * c + 20)] + [ + i for i in range(4 * c + 32, 4 * c + 36)] + [i for i in + range( + 4 * c + 48, + 4 * c + 52)]], + self.LAYER_BLOCK_SIZE // 4, + [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) + round_state_rotate.append(rotate) - self.add_round() + round_sboxes = [] + for l in range(self.number_of_layers): + for sb in range(self.LAYER_SBOXES): + sbox = self.add_SBOX_component([round_state_rotate[sb % 4 + 4 * l].id], + [[i for i in range(4 * int(sb / 4), 4 * int(sb / 4) + 4)]], + self.SBOX_BIT_SIZE, + self.sbox) + round_sboxes.append(sbox) + + if self.number_of_layers == 2 and (self.NROUNDS - round_number) % 2 == 0: + exchanging_rows = self.add_permutation_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE, + self.exchange_rows_permutation) + + round_output = self.add_round_output_component([exchanging_rows.id], + [[i for i in range(self.CIPHER_BLOCK_SIZE)]], + self.CIPHER_BLOCK_SIZE) + else: + round_output = self.add_round_output_component([round_sboxes[i].id for i in range(self.NUM_SBOXES)], + [[i for i in range(self.SBOX_BIT_SIZE)] for j in + range(self.NUM_SBOXES)], + self.CIPHER_BLOCK_SIZE) + + return round_output, round_key_shuffle - # Reflector + def reflector(self, round_output, key_state, round_key_shuffle, round_constant): + # Reflector new_keys = self.o_function(key_state) key_state = new_keys W = self.o_function(new_keys) - alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344) - alpha = [alpha_0] - if number_of_layers == 2: - alpha_1 = self.update_constants(alpha[0]) - alpha.append(alpha_1) - beta_0 = self.update_constants(alpha[-1]) - beta = [beta_0] - if number_of_layers == 2: - beta_1 = self.update_constants(beta_0) - beta.append(beta_1) - if number_of_layers == 2: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1].id], - [[i for i in range(self.KEY_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1].id], - [[i for i in range(self.KEY_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE) - else: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id], - [[i for i in range(self.KEY_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id], - [[i for i in range(self.KEY_BLOCK_SIZE)], - [i for i in range(self.LAYER_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE) + alpha, beta = self.constants_update() + + key_state = self.key_update(key_state) round_state_shuffle = [] - for l in range(number_of_layers): + for l in range(self.number_of_layers): shuffled_state = self.add_permutation_component([round_output.id], [[i for i in range(64 * l, 64 * l + 64)]], self.LAYER_BLOCK_SIZE, - state_permutation) - mixed_shuffled_state = self.add_XOR_component([shuffled_state.id, W[(number_of_rounds + 1) % 2].id], + self.state_permutation) + mixed_shuffled_state = self.add_XOR_component([shuffled_state.id, W[(self.NROUNDS + 1) % 2].id], [[i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(64 * l, 64 * l + 64)]], self.LAYER_BLOCK_SIZE) round_state_shuffle.append(mixed_shuffled_state) round_state_rotate = [] - for l in range(number_of_layers): + for l in range(self.number_of_layers): for c in range(4): rotate = self.add_mix_column_component([round_state_shuffle[l].id], [[i for i in range(4 * c, 4 * c + 4)] + [i for i in @@ -369,111 +385,114 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw round_state_rotate.append(rotate) central_keyed_state = [] - for l in range(number_of_layers): + for l in range(self.number_of_layers): for w in range(16): central_xor = self.add_XOR_component( - [round_state_rotate[w % 4 + 4 * l].id, W[(number_of_rounds) % 2].id], + [round_state_rotate[w % 4 + 4 * l].id, W[(self.NROUNDS) % 2].id], [[i for i in range(self.WORD_SIZE * int(w / 4), self.WORD_SIZE * int(w / 4) + 4)], [i for i in range(64 * l + 4 * w, 64 * l + 4 * w + 4)]], self.WORD_SIZE) central_keyed_state.append(central_xor) central_shuffled_state = [] - for l in range(number_of_layers): + for l in range(self.number_of_layers): shuffled_state = self.add_permutation_component([central_keyed_state[16 * l + i].id for i in range(16)], [[i for i in range(4)] for j in range(16)], self.LAYER_BLOCK_SIZE, - inverse_state_permutation) + self.inverse_state_permutation) central_shuffled_state.append(shuffled_state) - round_output = self.add_round_output_component([central_shuffled_state[i].id for i in range(number_of_layers)], + round_output = self.add_round_output_component([central_shuffled_state[i].id for i in range(self.number_of_layers)], [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in - range(number_of_layers)], + range(self.number_of_layers)], self.CIPHER_BLOCK_SIZE) + return round_output, key_state + + def inverse_round(self, round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number): # Inverse encryption - for round_number in list(range(1, number_of_rounds + 1))[::-1]: + if self.number_of_layers == 2 and (self.NROUNDS - round_number) % 2 == 0: + exchanging_rows = self.add_permutation_component([round_output.id], + [[i for i in range(self.CIPHER_BLOCK_SIZE)]], + self.CIPHER_BLOCK_SIZE, + self.exchange_rows_permutation) + else: + exchanging_rows = round_output - if number_of_layers == 2 and (number_of_rounds - round_number) % 2 == 0: - exchanging_rows = self.add_permutation_component([round_output.id], - [[i for i in range(self.CIPHER_BLOCK_SIZE)]], - self.CIPHER_BLOCK_SIZE, - exchange_rows_permutation) - else: - exchanging_rows = round_output - - round_sboxes = [] - for sb in range(self.NUM_SBOXES): - sbox = self.add_SBOX_component([exchanging_rows.id], - [[i for i in range(4 * sb, 4 * sb + 4)]], - self.SBOX_BIT_SIZE, - self.inverse_sbox) - round_sboxes.append(sbox) + round_sboxes = [] + for sb in range(self.NUM_SBOXES): + sbox = self.add_SBOX_component([exchanging_rows.id], + [[i for i in range(4 * sb, 4 * sb + 4)]], + self.SBOX_BIT_SIZE, + self.inverse_sbox) + round_sboxes.append(sbox) - round_state_rotate = [] - for l in range(number_of_layers): - for c in range(4): - rotate = self.add_mix_column_component([round_sboxes[c + 4 * i + 16 * l].id for i in range(4)], - [[i for i in range(4)] for j in range(4)], - self.LAYER_BLOCK_SIZE // 4, - [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) - round_state_rotate.append(rotate) - - round_state_shuffle = [] - for l in range(number_of_layers): - shuffled_state = self.add_permutation_component( - [round_state_rotate[i % 4 + 4 * l].id for i in range(16)], - [[i for i in range(4 * int(j / 4), 4 * int(j / 4) + 4)] for j in range(16)], - self.LAYER_BLOCK_SIZE, - inverse_state_permutation) - round_state_shuffle.append(shuffled_state) - - round_key_shuffle = [] - if round_number == 1: - for l in range(number_of_layers): - xor = self.add_XOR_component([round_state_shuffle[l].id, - key_state[(round_number + 1) % 2].id, - INPUT_TWEAK, - round_constant[(round_number - 1) * number_of_layers + l].id], - [[i for i in range(self.LAYER_BLOCK_SIZE)], - [i for i in range(64 * l, 64 * l + 64)], - [i for i in range((self.LAYER_BLOCK_SIZE) * l, - (self.LAYER_BLOCK_SIZE) * (l + 1))], - [i for i in range(64)]], - self.LAYER_BLOCK_SIZE) - round_key_shuffle.append(xor) - else: - for l in range(number_of_layers): - xor = self.add_XOR_component([round_state_shuffle[l].id, - key_state[(round_number + 1) % 2].id, - tweak_state[(round_number + 1) % 2].id, - round_constant[(round_number - 1) * number_of_layers + l].id], - [[i for i in range(self.LAYER_BLOCK_SIZE)], - [i for i in range(64 * l, 64 * l + 64)], - [i for i in range(64 * l, 64 * l + 64)], - [i for i in range(64)]], - self.LAYER_BLOCK_SIZE) - round_key_shuffle.append(xor) - - tweak_state[(round_number + 1) % 2] = self.add_permutation_component( - [tweak_state[(round_number + 1) % 2].id], - [[i for i in range(self.TWEAK_BLOCK_SIZE)]], - self.TWEAK_BLOCK_SIZE, - tweak_permutation[(round_number + 1) % 2]) - if round_number != 1: - round_output = self.add_round_output_component( - [round_key_shuffle[i].id for i in range(number_of_layers)], - [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(number_of_layers)], - self.CIPHER_BLOCK_SIZE) - - self.add_round() - else: - round_output = self.add_permutation_component( - [round_key_shuffle[i].id for i in range(number_of_layers)], - [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(number_of_layers)], - self.CIPHER_BLOCK_SIZE, - [i for i in range(self.CIPHER_BLOCK_SIZE)]) + round_state_rotate = [] + for l in range(self.number_of_layers): + for c in range(4): + rotate = self.add_mix_column_component([round_sboxes[c + 4 * i + 16 * l].id for i in range(4)], + [[i for i in range(4)] for j in range(4)], + self.LAYER_BLOCK_SIZE // 4, + [self.mix_column_matrix, 0x11, self.SBOX_BIT_SIZE]) + round_state_rotate.append(rotate) + round_state_shuffle = [] + for l in range(self.number_of_layers): + shuffled_state = self.add_permutation_component( + [round_state_rotate[i % 4 + 4 * l].id for i in range(16)], + [[i for i in range(4 * int(j / 4), 4 * int(j / 4) + 4)] for j in range(16)], + self.LAYER_BLOCK_SIZE, + self.inverse_state_permutation) + round_state_shuffle.append(shuffled_state) + + round_key_shuffle = [] + if round_number == 1: + for l in range(self.number_of_layers): + xor = self.add_XOR_component([round_state_shuffle[l].id, + key_state[(round_number + 1) % 2].id, + INPUT_TWEAK, + round_constant[(round_number - 1) * self.number_of_layers + l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range((self.LAYER_BLOCK_SIZE) * l, + (self.LAYER_BLOCK_SIZE) * (l + 1))], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + else: + for l in range(self.number_of_layers): + xor = self.add_XOR_component([round_state_shuffle[l].id, + key_state[(round_number + 1) % 2].id, + tweak_state[(round_number + 1) % 2].id, + round_constant[(round_number - 1) * self.number_of_layers + l].id], + [[i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64 * l, 64 * l + 64)], + [i for i in range(64)]], + self.LAYER_BLOCK_SIZE) + round_key_shuffle.append(xor) + + tweak_state[(round_number + 1) % 2] = self.add_permutation_component( + [tweak_state[(round_number + 1) % 2].id], + [[i for i in range(self.TWEAK_BLOCK_SIZE)]], + self.TWEAK_BLOCK_SIZE, + tweak_permutation[(round_number + 1) % 2]) + if round_number != 1: + round_output = self.add_round_output_component( + [round_key_shuffle[i].id for i in range(self.number_of_layers)], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(self.number_of_layers)], + self.CIPHER_BLOCK_SIZE) + + else: + round_output = self.add_permutation_component( + [round_key_shuffle[i].id for i in range(self.number_of_layers)], + [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(self.number_of_layers)], + self.CIPHER_BLOCK_SIZE, + [i for i in range(self.CIPHER_BLOCK_SIZE)]) + + return round_output, round_key_shuffle + + def last_round_end(self, round_output, key_state, round_key_shuffle, round_constant): # Last round different from others last_round_sboxes = [] for sb in range(self.NUM_SBOXES): @@ -500,8 +519,51 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw cipher_output = self.add_cipher_output_component([round_output.id], [[i for i in range(self.CIPHER_BLOCK_SIZE)]], self.CIPHER_BLOCK_SIZE) + return cipher_output + + def key_update(self, key_state): + alpha, beta = self.constants_update() + + if self.number_of_layers == 2: + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + else: + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id], + [[i for i in range(self.KEY_BLOCK_SIZE)], + [i for i in range(self.LAYER_BLOCK_SIZE)]], + self.KEY_BLOCK_SIZE) + + return key_state + + def constants_update(self): + alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344) + alpha = [alpha_0] + if self.number_of_layers == 2: + alpha_1 = self.update_single_constant(alpha[0]) + alpha.append(alpha_1) + beta_0 = self.update_single_constant(alpha[-1]) + beta = [beta_0] + if self.number_of_layers == 2: + beta_1 = self.update_single_constant(beta_0) + beta.append(beta_1) + + return alpha, beta + + #--------------------------------------------------------------------------------# - def update_constants(self, constant): + def update_single_constant(self, constant): spill = self.add_SHIFT_component([constant.id], [[i for i in range(self.LAYER_BLOCK_SIZE)]], self.LAYER_BLOCK_SIZE, @@ -584,22 +646,19 @@ def o_function(self, key): return (key_new) def majority_function(self, key): - maj_key_size = self.KEY_BLOCK_SIZE / 2 + maj_key_size = self.KEY_BLOCK_SIZE/2 and_0_1 = self.add_AND_component([key, key], - [[i for i in range(maj_key_size)], - [i for i in range(maj_key_size, 2 * maj_key_size)]], + [[i for i in range(maj_key_size)], [i for i in range(maj_key_size, 2*maj_key_size)]], maj_key_size) and_0_2 = self.add_AND_component([key, key], - [[i for i in range(maj_key_size)], - [i for i in range(2 * maj_key_size, 3 * maj_key_size)]], + [[i for i in range(maj_key_size)], [i for i in range(2*maj_key_size, 3*maj_key_size)]], maj_key_size) and_1_2 = self.add_AND_component([key, key], - [[i for i in range(maj_key_size, 2 * maj_key_size)], - [i for i in range(2 * maj_key_size, 3 * maj_key_size)]], + [[i for i in range(maj_key_size, 2*maj_key_size)], [i for i in range(2*maj_key_size, 3*maj_key_size)]], maj_key_size) maj_key_rotated = self.add_OR_component([and_0_1, and_0_2, and_1_2], - [[i for i in range(maj_key_size)] for j in range(3)], - maj_key_size) + [[i for i in range(maj_key_size)] for j in range(3)], + maj_key_size) maj_key = self.add_rotate_component([maj_key_rotated], [[i for i in range(maj_key_size)]], maj_key_size, diff --git a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py index dee7b28b..f057b69b 100644 --- a/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py +++ b/tests/unit/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher_test.py @@ -8,8 +8,8 @@ def test_qarmav2_mixcolumn_block_cipher(): qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) assert qarmav2.type == 'block_cipher' assert qarmav2.family_name == 'qarmav2_block_cipher' - assert qarmav2.number_of_rounds == 8 - assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r8' + assert qarmav2.number_of_rounds == 9 + assert qarmav2.id == 'qarmav2_block_cipher_k128_p64_i128_o64_r9' assert qarmav2.component_from(0, 0).id == 'linear_layer_0_0' qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds = 4) From 6cdfee9ddc57cd47ba621e935f6faba65dea4984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 5 Feb 2024 11:44:03 +0100 Subject: [PATCH 033/179] Fix/fix: Fix SonarCloud GitHub Action so Forks can be analyzed on PR --- .github/workflows/run-pytest-and-sonarcloud-scan.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run-pytest-and-sonarcloud-scan.yaml b/.github/workflows/run-pytest-and-sonarcloud-scan.yaml index 468a6819..1c1e5eb4 100644 --- a/.github/workflows/run-pytest-and-sonarcloud-scan.yaml +++ b/.github/workflows/run-pytest-and-sonarcloud-scan.yaml @@ -4,7 +4,7 @@ on: push: branches: - '**' - pull_request: + pull_request_target: types: [opened, synchronize, reopened, edited] branches: - develop @@ -47,6 +47,7 @@ jobs: run-code-coverage: runs-on: ubuntu-latest + if: ${{ !github.event.repository.fork }} steps: - name: Checkout uses: actions/checkout@v3 From 2ced5ec75d27f8fb8e5ba23c5f75d2e2b2be0e9e Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 14:54:30 +0400 Subject: [PATCH 034/179] Start removing permutation components --- .../qarmav2_with_mixcolumn_block_cipher.py | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py index da584f4d..6eb0c6c0 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -151,36 +151,36 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw exchange_rows_permutation = list(range(64, 96)) + list(range(32, 64)) + list(range(32)) + list(range(96, 128)) self.exchange_rows_permutation = exchange_rows_permutation - # First round different from others - self.add_round() - # Tweak initialization - tweak_state = self.tweak_initialization(tweak_permutation, tweak_bit_size) + self.add_round() # Key initialization key_state = self.key_initialization(key_bit_size) + # Tweak initialization + tweak_state = self.tweak_initialization(tweak_permutation, tweak_bit_size) + # Round constants initialization - round_constant = self.constants_initialization() + constants_states = self.constants_initialization() # First round different from others - round_output = self.first_round_start(key_state) + state = self.first_round_start(key_state) # Direct encryption for round_number in range(1, number_of_rounds + 1): - round_output, round_key_shuffle = self.direct_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + state, round_key_shuffle = self.direct_round(state, key_state, tweak_state, tweak_permutation, constants_states, round_number) self.add_round() # Reflector - round_output, key_state = self.reflector(round_output, key_state, round_key_shuffle, round_constant) + state, key_state = self.reflector(state, key_state, round_key_shuffle, constants_states) # Inverse encryption for round_number in list(range(1, number_of_rounds + 1))[::-1]: self.add_round() - round_output, round_key_shuffle = self.inverse_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + state, round_key_shuffle = self.inverse_round(state, key_state, tweak_state, tweak_permutation, constants_states, round_number) # Last round different from others - cipher_output = self.last_round_end(round_output, key_state, round_key_shuffle, round_constant) + cipher_output = self.last_round_end(state, key_state, round_key_shuffle, constants_states) def key_initialization(self, key_bit_size): # Key initialization @@ -234,10 +234,10 @@ def tweak_initialization(self, tweak_permutation, tweak_bit_size): def constants_initialization(self): # Round constants initialization - round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)] + round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0).id] if self.number_of_layers == 2: - round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)) - round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3) + round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0).id) + round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3).id round_constant.append(round_constant_0) if self.number_of_layers == 2: round_constant_1 = self.update_single_constant(round_constant_0) @@ -281,7 +281,7 @@ def direct_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_output.id, key_state[round_number % 2].id, tweak_state[round_number % 2].id, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], @@ -451,7 +451,7 @@ def inverse_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_state_shuffle[l].id, key_state[(round_number + 1) % 2].id, INPUT_TWEAK, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range((self.LAYER_BLOCK_SIZE) * l, @@ -464,7 +464,7 @@ def inverse_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_state_shuffle[l].id, key_state[(round_number + 1) % 2].id, tweak_state[(round_number + 1) % 2].id, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], @@ -521,26 +521,28 @@ def last_round_end(self, round_output, key_state, round_key_shuffle, round_const self.CIPHER_BLOCK_SIZE) return cipher_output + # -------------------------------------TOTALS-------------------------------------# + def key_update(self, key_state): alpha, beta = self.constants_update() if self.number_of_layers == 2: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1].id], + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1].id], + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) else: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id], + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id], + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) @@ -548,7 +550,7 @@ def key_update(self, key_state): return key_state def constants_update(self): - alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344) + alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344).id alpha = [alpha_0] if self.number_of_layers == 2: alpha_1 = self.update_single_constant(alpha[0]) @@ -564,11 +566,11 @@ def constants_update(self): #--------------------------------------------------------------------------------# def update_single_constant(self, constant): - spill = self.add_SHIFT_component([constant.id], + spill = self.add_SHIFT_component([constant], [[i for i in range(self.LAYER_BLOCK_SIZE)]], self.LAYER_BLOCK_SIZE, 51) - tmp_0 = self.add_SHIFT_component([constant.id], + tmp_0 = self.add_SHIFT_component([constant], [[i for i in range(self.LAYER_BLOCK_SIZE)]], self.LAYER_BLOCK_SIZE, -13) @@ -610,10 +612,9 @@ def update_single_constant(self, constant): tmp = self.add_XOR_component([tmp_0.id, tmp_1.id, tmp_2.id, tmp_3.id, spill.id], [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(5)], self.LAYER_BLOCK_SIZE) - return tmp + return tmp.id def o_function(self, key): - key_new = [] key_rot_0 = self.add_rotate_component([key[0].id], [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, @@ -622,10 +623,10 @@ def o_function(self, key): [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, self.KEY_BLOCK_SIZE - 1) - key_new.append(self.add_XOR_component([key_rot_0.id, key_shift_0.id], + key_1 = self.add_XOR_component([key_rot_0.id, key_shift_0.id], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.KEY_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE)) + self.KEY_BLOCK_SIZE) key_lshift_1 = self.add_SHIFT_component([key[1].id], [[i for i in range(self.KEY_BLOCK_SIZE)]], @@ -639,10 +640,11 @@ def o_function(self, key): [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_new.append(self.add_rotate_component([key_rotated_1.id], + key_2 = self.add_rotate_component([key_rotated_1.id], [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, - -1)) + -1) + key_new = [key_1, key_2] return (key_new) def majority_function(self, key): From b888dc19bb70d06c815997ba8635223a4c185bc6 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 14:54:30 +0400 Subject: [PATCH 035/179] Start removing permutation components --- .../qarmav2_with_mixcolumn_block_cipher.py | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py index da584f4d..6eb0c6c0 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -151,36 +151,36 @@ def __init__(self, number_of_rounds=10, number_of_layers=1, key_bit_size=128, tw exchange_rows_permutation = list(range(64, 96)) + list(range(32, 64)) + list(range(32)) + list(range(96, 128)) self.exchange_rows_permutation = exchange_rows_permutation - # First round different from others - self.add_round() - # Tweak initialization - tweak_state = self.tweak_initialization(tweak_permutation, tweak_bit_size) + self.add_round() # Key initialization key_state = self.key_initialization(key_bit_size) + # Tweak initialization + tweak_state = self.tweak_initialization(tweak_permutation, tweak_bit_size) + # Round constants initialization - round_constant = self.constants_initialization() + constants_states = self.constants_initialization() # First round different from others - round_output = self.first_round_start(key_state) + state = self.first_round_start(key_state) # Direct encryption for round_number in range(1, number_of_rounds + 1): - round_output, round_key_shuffle = self.direct_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + state, round_key_shuffle = self.direct_round(state, key_state, tweak_state, tweak_permutation, constants_states, round_number) self.add_round() # Reflector - round_output, key_state = self.reflector(round_output, key_state, round_key_shuffle, round_constant) + state, key_state = self.reflector(state, key_state, round_key_shuffle, constants_states) # Inverse encryption for round_number in list(range(1, number_of_rounds + 1))[::-1]: self.add_round() - round_output, round_key_shuffle = self.inverse_round(round_output, key_state, tweak_state, tweak_permutation, round_constant, round_number) + state, round_key_shuffle = self.inverse_round(state, key_state, tweak_state, tweak_permutation, constants_states, round_number) # Last round different from others - cipher_output = self.last_round_end(round_output, key_state, round_key_shuffle, round_constant) + cipher_output = self.last_round_end(state, key_state, round_key_shuffle, constants_states) def key_initialization(self, key_bit_size): # Key initialization @@ -234,10 +234,10 @@ def tweak_initialization(self, tweak_permutation, tweak_bit_size): def constants_initialization(self): # Round constants initialization - round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)] + round_constant = [self.add_constant_component(self.LAYER_BLOCK_SIZE, 0).id] if self.number_of_layers == 2: - round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0)) - round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3) + round_constant.append(self.add_constant_component(self.LAYER_BLOCK_SIZE, 0).id) + round_constant_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x243F6A8885A308D3).id round_constant.append(round_constant_0) if self.number_of_layers == 2: round_constant_1 = self.update_single_constant(round_constant_0) @@ -281,7 +281,7 @@ def direct_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_output.id, key_state[round_number % 2].id, tweak_state[round_number % 2].id, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], @@ -451,7 +451,7 @@ def inverse_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_state_shuffle[l].id, key_state[(round_number + 1) % 2].id, INPUT_TWEAK, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range((self.LAYER_BLOCK_SIZE) * l, @@ -464,7 +464,7 @@ def inverse_round(self, round_output, key_state, tweak_state, tweak_permutation, xor = self.add_XOR_component([round_state_shuffle[l].id, key_state[(round_number + 1) % 2].id, tweak_state[(round_number + 1) % 2].id, - round_constant[(round_number - 1) * self.number_of_layers + l].id], + round_constant[(round_number - 1) * self.number_of_layers + l]], [[i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(64 * l, 64 * l + 64)], [i for i in range(64 * l, 64 * l + 64)], @@ -521,26 +521,28 @@ def last_round_end(self, round_output, key_state, round_key_shuffle, round_const self.CIPHER_BLOCK_SIZE) return cipher_output + # -------------------------------------TOTALS-------------------------------------# + def key_update(self, key_state): alpha, beta = self.constants_update() if self.number_of_layers == 2: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1].id], + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1].id], + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) else: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id], + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id], + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) @@ -548,7 +550,7 @@ def key_update(self, key_state): return key_state def constants_update(self): - alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344) + alpha_0 = self.add_constant_component(self.LAYER_BLOCK_SIZE, 0x13198A2E03707344).id alpha = [alpha_0] if self.number_of_layers == 2: alpha_1 = self.update_single_constant(alpha[0]) @@ -564,11 +566,11 @@ def constants_update(self): #--------------------------------------------------------------------------------# def update_single_constant(self, constant): - spill = self.add_SHIFT_component([constant.id], + spill = self.add_SHIFT_component([constant], [[i for i in range(self.LAYER_BLOCK_SIZE)]], self.LAYER_BLOCK_SIZE, 51) - tmp_0 = self.add_SHIFT_component([constant.id], + tmp_0 = self.add_SHIFT_component([constant], [[i for i in range(self.LAYER_BLOCK_SIZE)]], self.LAYER_BLOCK_SIZE, -13) @@ -610,10 +612,9 @@ def update_single_constant(self, constant): tmp = self.add_XOR_component([tmp_0.id, tmp_1.id, tmp_2.id, tmp_3.id, spill.id], [[i for i in range(self.LAYER_BLOCK_SIZE)] for j in range(5)], self.LAYER_BLOCK_SIZE) - return tmp + return tmp.id def o_function(self, key): - key_new = [] key_rot_0 = self.add_rotate_component([key[0].id], [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, @@ -622,10 +623,10 @@ def o_function(self, key): [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, self.KEY_BLOCK_SIZE - 1) - key_new.append(self.add_XOR_component([key_rot_0.id, key_shift_0.id], + key_1 = self.add_XOR_component([key_rot_0.id, key_shift_0.id], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.KEY_BLOCK_SIZE)]], - self.KEY_BLOCK_SIZE)) + self.KEY_BLOCK_SIZE) key_lshift_1 = self.add_SHIFT_component([key[1].id], [[i for i in range(self.KEY_BLOCK_SIZE)]], @@ -639,10 +640,11 @@ def o_function(self, key): [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_new.append(self.add_rotate_component([key_rotated_1.id], + key_2 = self.add_rotate_component([key_rotated_1.id], [[i for i in range(self.KEY_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE, - -1)) + -1) + key_new = [key_1, key_2] return (key_new) def majority_function(self, key): From 124b5eab780568c603bddae819250cdf05f74bfd Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 5 Feb 2024 17:03:19 +0400 Subject: [PATCH 036/179] Start removing permutation components --- .../block_ciphers/qarmav2_with_mixcolumn_block_cipher.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py index 6eb0c6c0..cf1d9383 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -527,12 +527,12 @@ def key_update(self, key_state): alpha, beta = self.constants_update() if self.number_of_layers == 2: - key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0].id, alpha[1]], + key_state[0] = self.add_XOR_component([key_state[0].id, alpha[0], alpha[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], self.KEY_BLOCK_SIZE) - key_state[1] = self.add_XOR_component([key_state[1].id, beta[0].id, beta[1]], + key_state[1] = self.add_XOR_component([key_state[1].id, beta[0], beta[1]], [[i for i in range(self.KEY_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)], [i for i in range(self.LAYER_BLOCK_SIZE)]], From de408b43b93bc257d6e8a4e7aa31288e13711873 Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Tue, 6 Feb 2024 13:37:53 +0400 Subject: [PATCH 037/179] added primitive testing of the connection polynomial of word based lfsr and tests for the fsr component in "component_analysis_tests_test" --- .../component_analysis_tests.py | 135 +++++++++++------- .../sigma_toy_word_stream_cipher.py | 0 .../component_analysis_tests_test.py | 27 +++- 3 files changed, 108 insertions(+), 54 deletions(-) delete mode 100644 claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 84ec4f9a..999b6e69 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -784,77 +784,106 @@ def order_of_linear_component(component): def fsr_properties(operation): + """ + Return a dictionary containing some properties of fsr component. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + + EXAMPLES:: + + sage: from claasp.cipher_modules.component_analysis_tests import fsr_properties + sage: from claasp.components.fsr_component import FSR + sage: fsr_component = FSR(0,0, ["input"],[[0,1,2,3]],4,[[[4, [[1,[0]],[3,[1]],[2,[2]]]]],4]) + sage: operation= [fsr_component, 1, ['fsr_0_0']] + sage: dictionary = fsr_properties(operation) + sage: dictionary['fsr_word_size'] == 4 + True + sage: dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] + True + + sage: from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 + sage: from claasp.cipher_modules.component_analysis_tests import component_analysis_tests + sage: e0 = BluetoothStreamCipherE0(keystream_bit_len=2) + sage: dictionary = e0.component_analysis_tests() + sage: assert dictionary[8]["number_of_registers"] == 4 + sage: dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' # first lfsr + True + sage: dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] + True + + sage: from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher + sage: triv = TriviumStreamCipher(keystream_bit_len=1) + sage: dictionary = triv.component_analysis_tests() + sage: dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] + True + """ component = operation[0] fsr_word_size = component.description[1] - component_dict = {"type": component.type, "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, "fsr_word_size": fsr_word_size, - "description": component.description, "number_of_occurrences": operation[1], - "component_id_list": operation[2]} + component_dict = { + "type": component.type, + "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, + "fsr_word_size": fsr_word_size, + "description": component.description, + "number_of_occurrences": operation[1], + "component_id_list": operation[2] + } desc = component.description registers_len = [] registers_type = [] registers_feedback_relation_deg = [] + lfsr_connection_polynomials = [] lin_flag = False + for r in desc[0]: registers_len.append(r[0]) - d = 0 - if fsr_word_size == 1: - for term in r[1]: - if d < len(term): # case for binary register - d = len(term) - else: - for term in r[1]: - if d < len(term[1]): # case for non-binary register - d = len(term[1]) + d = max(len(term) if fsr_word_size == 1 else len(term[1]) for term in r[1]) registers_feedback_relation_deg.append(d) - if d > 1: - registers_type.append('non-linear') - else: - registers_type.append('linear') - lin_flag = True + reg_type = 'non-linear' if d > 1 else 'linear' + registers_type.append(reg_type) + lin_flag = lin_flag or (reg_type == 'linear') - component_dict['number_of_registers'] = len(registers_len) - component_dict['length_of_registers'] = registers_len - component_dict['type_of_registers'] = registers_type - component_dict['degree_of_feedback_relation_of_registers'] = registers_feedback_relation_deg + component_dict.update({ + 'number_of_registers': len(registers_len), + 'length_of_registers': registers_len, + 'type_of_registers': registers_type, + 'degree_of_feedback_relation_of_registers': registers_feedback_relation_deg + }) if lin_flag: lfsrs_primitive = [] - if fsr_word_size == 1: - exp = 0 - R = GF(2)['x'] - for index, r in enumerate(desc[0]): - exp = exp + registers_len[index] - if registers_type[index] == 'linear': - f = R(1) - for term in r[1]: - f = f + R.gen() ** (exp - term[0]) - print(f) - lfsrs_primitive.append(f.is_primitive()) - del R - else: - exp = 0 - R = GF(2 ** fsr_word_size)['x'] - x = R.gens() - a = R.construction()[1].gen() - for index, r in enumerate(desc[0]): - exp = exp + registers_len[index] - if registers_type[index] == 'linear': - p = R(1) - for term in r[1]: + exp = 0 + R = GF(2)['x'] if fsr_word_size == 1 else GF(2 ** fsr_word_size)['x'] + x = R.gens() + a = R.construction()[1].gen() + + for index, r in enumerate(desc[0]): + exp = exp + registers_len[index] + if registers_type[index] == 'linear': + p = R(1) + for term in r[1]: + if fsr_word_size == 1: + p = p + x[0] ** (exp - term[0]) + else: # case: word based LFSR m = 0 - coef = "{0:b}".format(term[0]) - for i in range(len(coef)): - if coef[i] == '1': m = m + pow(a, len(coef) - 1 - i) + cf = "{0:b}".format(term[0]) + for i in range(len(cf)): + if cf[i] == '1': m = m + pow(a, len(cf) - 1 - i) m = m * x[0] ** (exp - term[1][0]) p += m - print(p) - lfsrs_primitive.append(p.is_primitive()) - breakpoint() - del R - - component_dict['linear_registers_feedback_polynomial_primitive'] = lfsrs_primitive + lfsr_connection_polynomials.append(str(p)) + lfsrs_primitive.append(p.is_primitive()) + component_dict.update({ + "lfsr_connection_polynomials": lfsr_connection_polynomials, + "lfsr_polynomials_are_primitive": lfsrs_primitive + }) return component_dict diff --git a/claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py b/claasp/ciphers/stream_ciphers/sigma_toy_word_stream_cipher.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index 079102e4..5ca0ee46 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -1,7 +1,32 @@ from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher from claasp.cipher_modules.component_analysis_tests import generate_boolean_polynomial_ring_from_cipher +from claasp.components.fsr_component import FSR +from claasp.cipher_modules.component_analysis_tests import fsr_properties +from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 +from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher def test_generate_boolean_polynomial_ring_from_cipher(): fancy = FancyBlockCipher(number_of_rounds=3) - generate_boolean_polynomial_ring_from_cipher(fancy) \ No newline at end of file + generate_boolean_polynomial_ring_from_cipher(fancy) + + +def test_fsr_properties(): + fsr_component = FSR(0, 0, ["input"], [[0, 1, 2, 3]], 4, [[[4, [[1, [0]], [3, [1]], [2, [2]]]]], 4]) + operation = [fsr_component, 1, ['fsr_0_0']] + dictionary = fsr_properties(operation) + assert dictionary['fsr_word_size'] == 4 + assert dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] + + e0 = BluetoothStreamCipherE0(keystream_bit_len=2) + dictionary = e0.component_analysis_tests() + assert dictionary[8]["number_of_registers"] == 4 + assert dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' + assert dictionary[8]["lfsr_connection_polynomials"][1] == 'x^31 + x^24 + x^16 + x^12 + 1' + assert dictionary[8]["lfsr_connection_polynomials"][2] == 'x^33 + x^28 + x^24 + x^4 + 1' + assert dictionary[8]["lfsr_connection_polynomials"][3] == 'x^39 + x^36 + x^28 + x^4 + 1' + assert dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] + + triv = TriviumStreamCipher(keystream_bit_len=1) + dictionary = triv.component_analysis_tests() + assert dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] From 69397cd6c528493b4b9a003f437d283c19083f8c Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Tue, 6 Feb 2024 14:35:56 +0400 Subject: [PATCH 038/179] Added comment regarding vectorized evaluation performance. --- .../block_ciphers/qarmav2_with_mixcolumn_block_cipher.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py index cf1d9383..47350d17 100644 --- a/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py +++ b/claasp/ciphers/block_ciphers/qarmav2_with_mixcolumn_block_cipher.py @@ -25,7 +25,8 @@ class QARMAv2MixColumnBlockCipher(Cipher): """ - Return a cipher object of Qarma v2 Block Cipher. This version uses the MixColumn component to model the diffusion layer. + Return a cipher object of Qarma v2 Block Cipher. This version uses the MixColumn component to model the diffusion layer, resulting in an invertible cipher object. + However, it may be less efficient that the QARMAv2BlockCipher cipher object for vectorized evaluation. INPUT: From 6a536e7311770c34bf7932630422bb75f0bbd5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Wed, 7 Feb 2024 11:17:50 +0100 Subject: [PATCH 039/179] Fix/fix: Create CLAASP base image for test --- .../workflows/build-claasp-base-image.yaml | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/build-claasp-base-image.yaml diff --git a/.github/workflows/build-claasp-base-image.yaml b/.github/workflows/build-claasp-base-image.yaml new file mode 100644 index 00000000..ab514cc1 --- /dev/null +++ b/.github/workflows/build-claasp-base-image.yaml @@ -0,0 +1,49 @@ +name: Build and push image for testing +on: + push: + branches: + - fix/create-base-docker-image + +jobs: + build-image: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Login dockerhub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_REGISTRY_USER }} + password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} + + - name: Build & Push + uses: docker/build-push-action@v4 + id: built-image + with: + context: . + file: ./docker/Dockerfile + push: true + tags: tiicrc/claasp-lib:latest + target: claasp-base + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache From 44bf398f12885bfcce18165de3d16c763997020f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Wed, 7 Feb 2024 11:44:07 +0100 Subject: [PATCH 040/179] Fix/fix: Create CLAASP base image for test --- .github/workflows/build-claasp-base-image.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-claasp-base-image.yaml b/.github/workflows/build-claasp-base-image.yaml index ab514cc1..8614a4a2 100644 --- a/.github/workflows/build-claasp-base-image.yaml +++ b/.github/workflows/build-claasp-base-image.yaml @@ -39,7 +39,6 @@ jobs: file: ./docker/Dockerfile push: true tags: tiicrc/claasp-lib:latest - target: claasp-base cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max From 5f9e5384499b6ca8b704414fe4d0b2ba13b2fa93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Wed, 7 Feb 2024 11:53:21 +0100 Subject: [PATCH 041/179] Create CLAASP base image for test --- .github/workflows/build-claasp-base-image.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-claasp-base-image.yaml b/.github/workflows/build-claasp-base-image.yaml index 8614a4a2..52c20a37 100644 --- a/.github/workflows/build-claasp-base-image.yaml +++ b/.github/workflows/build-claasp-base-image.yaml @@ -38,7 +38,8 @@ jobs: context: . file: ./docker/Dockerfile push: true - tags: tiicrc/claasp-lib:latest + tags: tiicrc/claasp-base:latest + target: claasp-base cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max From b885fdbdc27b49fab006d3e207f8da41e3d7851b Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Wed, 7 Feb 2024 15:29:45 +0400 Subject: [PATCH 042/179] Merge parameters to improve SonarQube maintainability score --- claasp/ciphers/permutations/chacha_permutation.py | 6 +++--- claasp/ciphers/permutations/salsa_permutation.py | 4 ++-- claasp/ciphers/permutations/util.py | 6 +++--- tests/unit/ciphers/permutations/chacha_permutation_test.py | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/claasp/ciphers/permutations/chacha_permutation.py b/claasp/ciphers/permutations/chacha_permutation.py index 25bcf0eb..a29933dc 100644 --- a/claasp/ciphers/permutations/chacha_permutation.py +++ b/claasp/ciphers/permutations/chacha_permutation.py @@ -54,7 +54,7 @@ class ChachaPermutation(Cipher): - ``cipher_inputs_bit_size`` -- **integer** (default: `None`) - ``rotations`` -- *list of integer* (default: `[8, 7, 16, 12]`) - ``word_size`` -- **integer** (default: `32`) - - ``start_round`` -- **string** (default: `odd`) + - ``start_round`` -- **tuple of strings** (default: (`odd`, `top`) EXAMPLES:: @@ -68,11 +68,11 @@ def __init__(self, number_of_rounds=0, state_of_components=None, cipher_family="chacha_permutation", cipher_type="permutation", inputs=None, cipher_inputs_bit_size=None, rotations=[8, 7, 16, 12], - word_size=32, start_round="odd", start_with_bottom_half=False): + word_size=32, start_round=("odd", "top")): init_latin_dances_cipher( self, super(), INPUT_PLAINTEXT, state_of_components, number_of_rounds, start_round, cipher_family, cipher_type, inputs, cipher_inputs_bit_size, [COLUMNS, DIAGONALS], - word_size, rotations, start_with_bottom_half + word_size, rotations ) def top_half_quarter_round(self, a, b, c, d, state): diff --git a/claasp/ciphers/permutations/salsa_permutation.py b/claasp/ciphers/permutations/salsa_permutation.py index a31d9b41..73511762 100644 --- a/claasp/ciphers/permutations/salsa_permutation.py +++ b/claasp/ciphers/permutations/salsa_permutation.py @@ -53,7 +53,7 @@ class SalsaPermutation(Cipher): - ``cipher_inputs_bit_size`` -- **integer** (default: `None`) - ``rotations`` -- *list of integer* (default: `[8, 7, 16, 12]`) - ``word_size`` -- **integer** (default: `32`) - - ``start_round`` -- **string** (default: `odd`) + - ``start_round`` -- **tuple of strings** (default: (`odd`, `top`) EXAMPLES:: @@ -67,7 +67,7 @@ def __init__(self, number_of_rounds=0, state_of_components=None, cipher_family="salsa_permutation", cipher_type="permutation", inputs=None, cipher_inputs_bit_size=None, rotations=[13, 18, 7, 9], - word_size=32, start_round="odd"): + word_size=32, start_round=("odd", "top")): init_latin_dances_cipher( self, super(), INPUT_PLAINTEXT, state_of_components, number_of_rounds, start_round, cipher_family, cipher_type, inputs, cipher_inputs_bit_size, [COLUMNS, DIAGONALS], diff --git a/claasp/ciphers/permutations/util.py b/claasp/ciphers/permutations/util.py index 2e4e160c..fd48d694 100644 --- a/claasp/ciphers/permutations/util.py +++ b/claasp/ciphers/permutations/util.py @@ -118,7 +118,7 @@ def init_state_latin_dances(permutation, input_plaintext): def init_latin_dances_cipher( permutation, super_class, input_plaintext, state_of_components, number_of_rounds, start_round, cipher_family, cipher_type, inputs, cipher_inputs_bit_size, quarter_round_indexes, word_size, - rotations, start_with_bottom_half=False + rotations ): columns = quarter_round_indexes[0] diagonals = quarter_round_indexes[1] @@ -147,11 +147,11 @@ def init_latin_dances_cipher( cipher_output_bit_size=permutation.block_bit_size) for i in range(number_of_rounds): - if start_round == 'even': + if start_round[0] == 'even': j = i + 2 else: j = i - if start_with_bottom_half: + if start_round[1] == 'bottom': j += 1 permutation.add_round() half_like_round_function_latin_dances(permutation, j, columns, diagonals) diff --git a/tests/unit/ciphers/permutations/chacha_permutation_test.py b/tests/unit/ciphers/permutations/chacha_permutation_test.py index dcd3ba34..73605842 100644 --- a/tests/unit/ciphers/permutations/chacha_permutation_test.py +++ b/tests/unit/ciphers/permutations/chacha_permutation_test.py @@ -24,7 +24,7 @@ def test_chacha_permutation(): chacha = ChachaPermutation(number_of_rounds=1) assert chacha.get_component_from_id("rot_0_2").description[1] == -16 - chacha = ChachaPermutation(number_of_rounds=1, start_with_bottom_half=True) + chacha = ChachaPermutation(number_of_rounds=1, start_round=('odd', 'bottom')) assert chacha.get_component_from_id("rot_0_2").description[1] == -8 From 459898a6d98d3e203d849b3d82ce3ba99ab79bd6 Mon Sep 17 00:00:00 2001 From: David Date: Thu, 8 Feb 2024 16:35:16 +0400 Subject: [PATCH 043/179] fix/gohr_resnet input size bug --- claasp/cipher.py | 7 ++++--- claasp/cipher_modules/neural_network_tests.py | 8 +++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 6f1753e9..ac261989 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1344,7 +1344,7 @@ def data_generator(nr, samples): testing_samples, num_epochs=number_of_epochs) def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, - training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False): + training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet'): """ Runs the AutoND pipeline ([BGHR2023]): - Find an input difference for the inputs set to True in difference_positions using an optimizer @@ -1365,6 +1365,7 @@ def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing - ``number_of_epochs`` -- **integer**; (default: `40`) number of training epochs - ``verbose`` -- **boolean**; (default: `False`) verbosity of the optimizer + - ``neural_net`` -- **string**; (default: `dbitnet`) the neural network architecture to use; supports 'dbitnet' and 'gohr_resnet' EXAMPLES:: @@ -1395,9 +1396,9 @@ def data_generator(nr, samples): verbose=verbose) input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 - neural_network = get_neural_network('dbitnet', input_size = input_size) + neural_network = get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-1) - print(f'Training DBitNet on input difference {[hex(x) for x in input_difference]}, from round {nr-1}...') + print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') return neural_staged_training(self, data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index c3a50abc..69ea3447 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -294,7 +294,7 @@ def get_neural_network(network_name, input_size, word_size = None, depth = 1): if network_name == 'gohr_resnet': if word_size is None or word_size == 0: print("Word size not specified for ", network_name, ", defaulting to ciphertext size...") - word_size = cipher.output_bit_size + word_size = input_size//2 neural_network = make_resnet(word_size = word_size, input_size = input_size, depth = depth) elif network_name == 'dbitnet': neural_network = make_dbitnet(input_size = input_size) @@ -306,14 +306,12 @@ def make_checkpoint(datei): res = ModelCheckpoint(datei, monitor='val_loss', save_best_only=True) return res - def train_neural_distinguisher(cipher, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1): + testing_samples=10 ** 6, num_epochs=1, batch_size = 5000): acc = 1 - bs = 5000 x, y = data_generator(samples=training_samples, nr=starting_round) x_eval, y_eval = data_generator(samples=testing_samples, nr=starting_round) - h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=bs, validation_data=(x_eval, y_eval)) + h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval)) acc = np.max(h.history["val_acc"]) print(f'Validation accuracy at {starting_round} rounds :{acc}') return acc From 55ffa11927abab89861fba458c59cd110ba11e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 12 Feb 2024 14:56:30 +0100 Subject: [PATCH 044/179] Run tests and benchmark tests only in head repository, not in forks --- .github/workflows/run-benchmark-tests.yaml | 3 ++- .github/workflows/run-pytest-and-sonarcloud-scan.yaml | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/run-benchmark-tests.yaml b/.github/workflows/run-benchmark-tests.yaml index 152dcb96..1bc357fa 100644 --- a/.github/workflows/run-benchmark-tests.yaml +++ b/.github/workflows/run-benchmark-tests.yaml @@ -1,6 +1,6 @@ name: Run benchmark tests on: - pull_request: + pull_request_target: types: [ opened, synchronize, reopened, edited ] branches: - main @@ -11,6 +11,7 @@ concurrency: jobs: run-benchmark-tests: + if: ${{ !github.event.repository.fork }} runs-on: self-hosted timeout-minutes: 3600 steps: diff --git a/.github/workflows/run-pytest-and-sonarcloud-scan.yaml b/.github/workflows/run-pytest-and-sonarcloud-scan.yaml index 1c1e5eb4..fb296698 100644 --- a/.github/workflows/run-pytest-and-sonarcloud-scan.yaml +++ b/.github/workflows/run-pytest-and-sonarcloud-scan.yaml @@ -16,6 +16,7 @@ concurrency: jobs: run-pytest: + if: ${{ !github.event.repository.fork }} runs-on: self-hosted steps: - name: Checkout @@ -46,8 +47,8 @@ jobs: path: /home/runner/_work/claasp/coverage.xml run-code-coverage: - runs-on: ubuntu-latest if: ${{ !github.event.repository.fork }} + runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 @@ -72,4 +73,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - needs: run-pytest \ No newline at end of file + needs: run-pytest From 8e914de07b81155f1dec19e580f9b1a44860f120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 12 Feb 2024 14:57:00 +0100 Subject: [PATCH 045/179] Create GitHub action for running the tests in forked repositories --- .github/workflows/fork-run-pytest.yaml | 31 ++++++++++++++++++++++++++ Makefile | 3 +++ 2 files changed, 34 insertions(+) create mode 100644 .github/workflows/fork-run-pytest.yaml diff --git a/.github/workflows/fork-run-pytest.yaml b/.github/workflows/fork-run-pytest.yaml new file mode 100644 index 00000000..4b75c5b8 --- /dev/null +++ b/.github/workflows/fork-run-pytest.yaml @@ -0,0 +1,31 @@ +name: Run pytest for Forked projects + +on: + push: + branches: + - '**' + pull_request: + types: [opened, synchronize, reopened, edited] + branches: + - develop + - main + +concurrency: + group: fork-run-pytest-tests_${{ github.ref }} + cancel-in-progress: true + +jobs: + run-pytest: + if: ${{ github.event.repository.fork }} + runs-on: ubuntu-latest + + steps: + + - name: Checkout + uses: actions/checkout@v2 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Run tests + run: docker run --rm -v $PWD:/home/sage/tii-claasp tiicrc/claasp-base:latest make github-pytest diff --git a/Makefile b/Makefile index 9e525fe5..e9df038d 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,9 @@ remote-pytest: pytest: pytest -v -n=auto --dist loadfile tests/unit/ +github-pytest: + pytest -v tests/unit/ + pytest-coverage: pytest -v -n=2 --dist loadfile --cov-report term-missing --cov=$(PACKAGE) tests/unit/ From 04d9dfdc610dee28b9f71ea9cdb3e7d3b104abf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 12 Feb 2024 15:04:54 +0100 Subject: [PATCH 046/179] Create new claasp-base image on new release --- .github/workflows/build-claasp-base-image.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-claasp-base-image.yaml b/.github/workflows/build-claasp-base-image.yaml index 52c20a37..5e03924f 100644 --- a/.github/workflows/build-claasp-base-image.yaml +++ b/.github/workflows/build-claasp-base-image.yaml @@ -1,8 +1,9 @@ name: Build and push image for testing on: - push: + pull_request: + types: [ closed ] branches: - - fix/create-base-docker-image + - main jobs: build-image: From be929eb3246c5a3c1c0d19f10d16c73367391d8f Mon Sep 17 00:00:00 2001 From: David Date: Mon, 12 Feb 2024 19:10:05 +0400 Subject: [PATCH 047/179] . --- claasp/cipher.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index ac261989..63c43d56 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1397,7 +1397,8 @@ def data_generator(nr, samples): input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 neural_network = get_neural_network(neural_net, input_size = input_size) - nr = max(1, highest_round-1) + #nr = max(1, highest_round-2) + nr = 1 print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') return neural_staged_training(self, data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) From 5cf7a446eed18817c3b157188d945421ffe65e78 Mon Sep 17 00:00:00 2001 From: David Date: Mon, 12 Feb 2024 19:17:02 +0400 Subject: [PATCH 048/179] . --- claasp/cipher.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 63c43d56..ac261989 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1397,8 +1397,7 @@ def data_generator(nr, samples): input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 neural_network = get_neural_network(neural_net, input_size = input_size) - #nr = max(1, highest_round-2) - nr = 1 + nr = max(1, highest_round-1) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') return neural_staged_training(self, data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) From 3479d5b44a695b0187a2ff658d13822199b9537f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 12 Feb 2024 16:17:30 +0100 Subject: [PATCH 049/179] Update documentation --- docs/CONTRIBUTING.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 305a50f5..4f2977d0 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -41,13 +41,12 @@ To contribute to this project, please, follow the following conventions. # GitHub collaboration -In order to collaborate with the project, you need to fill this [Google form](https://forms.gle/rYMKW76fCF15Lnxm6) to -be added as a collaboratior in [CLAASP GitHub repository](https://github.com/Crypto-TII/claasp). +In order to collaborate with the project, you need to fork this projects. ## Pull requests -Pull requests are the way to contribute to the project. Only collaborators can create pull requests, so pull requests -coming from forks will be rejected. +Pull requests are the way to contribute to the project. Pull requests coming from forks will be reviewed and need to +have all the checks pasding green. # Development environment From 391741fa518d51a60c64233482c5e04dcc89b405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20C=C3=A1ceres?= Date: Mon, 12 Feb 2024 16:23:17 +0100 Subject: [PATCH 050/179] Correct typo --- docs/CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 4f2977d0..edd2ef06 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -46,7 +46,7 @@ In order to collaborate with the project, you need to fork this projects. ## Pull requests Pull requests are the way to contribute to the project. Pull requests coming from forks will be reviewed and need to -have all the checks pasding green. +have all the checks passing green. # Development environment From 4457c792da3b5df16c2314919a5326471ce6a332 Mon Sep 17 00:00:00 2001 From: David Date: Wed, 14 Feb 2024 17:32:13 +0400 Subject: [PATCH 051/179] Added distinguisher and history saving --- claasp/cipher.py | 9 +++++---- claasp/cipher_modules/neural_network_tests.py | 19 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index ac261989..0e9d0caa 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1344,7 +1344,7 @@ def data_generator(nr, samples): testing_samples, num_epochs=number_of_epochs) def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, - training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet'): + training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet', save_prefix=None): """ Runs the AutoND pipeline ([BGHR2023]): - Find an input difference for the inputs set to True in difference_positions using an optimizer @@ -1397,10 +1397,11 @@ def data_generator(nr, samples): input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 neural_network = get_neural_network(neural_net, input_size = input_size) - nr = max(1, highest_round-1) + nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return neural_staged_training(self, data_generator, nr, neural_network, training_samples, - testing_samples, number_of_epochs) + return neural_staged_training(self, lambda nr, samples: get_differential_dataset(self, input_difference, number_of_rounds=nr, + samples=samples), nr, neural_network, training_samples, + testing_samples, number_of_epochs, save_prefix) def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 69ea3447..e6294441 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -280,12 +280,12 @@ def get_differential_dataset(cipher, input_differences, number_of_rounds, sample inputs_1.append(inputs_0[-1] ^ integer_to_np(input_differences[i], cipher.inputs_bit_size[i])) inputs_1[-1][:, y == 0] ^= np.frombuffer(urandom(num_rand_samples * cipher.inputs_bit_size[i] // 8), dtype=np.uint8).reshape(-1, num_rand_samples) - C0 = np.unpackbits( cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['round_output'][number_of_rounds - 1], axis=1) C1 = np.unpackbits( cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['round_output'][number_of_rounds - 1], axis=1) x = np.hstack([C0, C1]) + print("Generating differential dataset for input difference ", input_differences) return x, y @@ -307,18 +307,27 @@ def make_checkpoint(datei): return res def train_neural_distinguisher(cipher, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1, batch_size = 5000): + testing_samples=10 ** 6, num_epochs=1, batch_size = 5000, save_prefix=None): acc = 1 x, y = data_generator(samples=training_samples, nr=starting_round) x_eval, y_eval = data_generator(samples=testing_samples, nr=starting_round) - h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval)) + print("In train, save prefix is ", save_prefix, flush=True) + if save_prefix is None: + h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval)) + else: + filename = save_prefix + "_" + str(starting_round) + print("In train, filename is ", filename, flush=True) + check = make_checkpoint(filename+'.h5'); + print("In train, check is ", check, flush=True) + h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval), callbacks = [check]) + np.save(filename + '.npy', h.history['val_acc']) acc = np.max(h.history["val_acc"]) print(f'Validation accuracy at {starting_round} rounds :{acc}') return acc def neural_staged_training(cipher, data_generator, starting_round, neural_network=None, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1): + testing_samples=10 ** 6, num_epochs=1, save_prefix = None): acc = 1 nr = starting_round # threshold at 10 sigma @@ -326,7 +335,7 @@ def neural_staged_training(cipher, data_generator, starting_round, neural_networ accuracies = {} while acc >= threshold and nr < cipher.number_of_rounds: acc = train_neural_distinguisher(cipher, data_generator, nr, neural_network, training_samples, testing_samples, - num_epochs) + num_epochs, save_prefix = save_prefix) accuracies[nr] = acc nr += 1 return accuracies From e07aee231215f4c2c5d7b24d2147f65764f0e6df Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 19 Feb 2024 10:01:33 +0400 Subject: [PATCH 052/179] FIX/Add: Create a test function for nist statistical tests and dieharder statistical tests that produces a parsed result, standardized for the Report class --- claasp/cipher_modules/report.py | 4 ++-- .../dieharder_statistical_tests.py | 13 ++++++++++++- .../statistical_tests/nist_statistical_tests.py | 16 +++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 83cfd9da..86e30562 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -452,10 +452,10 @@ def _produce_graph(self, output_directory): printable_dict['rounds'] = 1 if 'dieharder' in self.test_name: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - DieharderTests.generate_chart_round(printable_dict) + DieharderTests.generate_chart_round(printable_dict, output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'nist' in self.test_name: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - StatisticalTests.generate_chart_round(printable_dict) + StatisticalTests.generate_chart_round(printable_dict, output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'algebraic' in self.test_name: print(self.test_report) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 0c874916..9584b51f 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -36,6 +36,17 @@ def __init__(self, cipher): str_of_inputs_bit_size = list(map(str, cipher.inputs_bit_size)) self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) + + @staticmethod + def dieharder_statistical_tests(input_file): + + DieharderTests.run_dieharder_statistical_tests_tool_interactively(input_file) + + report = DieharderTests.parse_report(f'dieharder_test_output.txt') + + return report + + @staticmethod def run_dieharder_statistical_tests_tool_interactively(input_file): """ @@ -201,7 +212,7 @@ def generate_chart_round(report_dict, output_dir=''): plt.yticks([-1, 0, 1], ['FAILED', 'WEAK', 'PASSED']) if output_dir =='': output_dir = f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - plt.savefig(output_dir) + plt.savefig(output_dir+'/'+f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') print(f'Drawing round {report_dict["round"]} is finished. Please find the chart in file {output_dir}.') @staticmethod diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 0ef74b66..6e4176d4 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -39,6 +39,19 @@ def __init__(self, cipher): str_of_inputs_bit_size = list(map(str, cipher.inputs_bit_size)) self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) + + @staticmethod + def nist_statistical_tests(input_file, bit_stream_length=10000, number_of_bit_streams=10, + input_file_format=1, + statistical_test_option_list=15 * '1'): + StatisticalTests.run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length, number_of_bit_streams, + input_file_format, + statistical_test_option_list) + + report = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') + + return report + @staticmethod def run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length=10000, number_of_bit_streams=10, input_file_format=1, @@ -273,7 +286,8 @@ def generate_chart_round(report_dict, output_dir=''): plt.ylabel('Passing Rate') if output_dir == '': output_dir = f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - plt.savefig(output_dir) + print(output_dir) + plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') print(f'Drawing round {report_dict["round"]} is finished.') @staticmethod From 798866f19099a4cc74e4d5adf93d9fec1a756de5 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 19 Feb 2024 11:02:16 +0400 Subject: [PATCH 053/179] fixed statistical tests generate_chart_round_function --- .../statistical_tests/dieharder_statistical_tests.py | 4 +++- .../statistical_tests/nist_statistical_tests.py | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 9584b51f..8deb7965 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -212,7 +212,9 @@ def generate_chart_round(report_dict, output_dir=''): plt.yticks([-1, 0, 1], ['FAILED', 'WEAK', 'PASSED']) if output_dir =='': output_dir = f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - plt.savefig(output_dir+'/'+f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') print(f'Drawing round {report_dict["round"]} is finished. Please find the chart in file {output_dir}.') @staticmethod diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 6e4176d4..4313cc8c 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -286,8 +286,9 @@ def generate_chart_round(report_dict, output_dir=''): plt.ylabel('Passing Rate') if output_dir == '': output_dir = f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - print(output_dir) - plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') print(f'Drawing round {report_dict["round"]} is finished.') @staticmethod From c75617f8510d4a23e026208d7539c26cdf2d2053 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 19 Feb 2024 13:25:39 +0400 Subject: [PATCH 054/179] added comments and examples for the new statistical tests functions --- .../dieharder_statistical_tests.py | 21 +++++++++++++ .../nist_statistical_tests.py | 30 +++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 8deb7965..59e4947b 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -40,6 +40,27 @@ def __init__(self, cipher): @staticmethod def dieharder_statistical_tests(input_file): + """ + Run the run_dieharder_statistical_tests_tool_interactively function and process its output with the parse_output function + to standardize it for the Report class + + INPUT: + + - ``input_file`` -- **str**; file containing the bit streams + + OUTPUT: + + a python dictionary representing the parsed output of the run_dieharder_statistical_tests_tool_interactively function + + EXAMPLES: + + from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + + result = StatisticalTests.dieharder_statistical_test(f'claasp/cipher_modules/statistical_tests/input_data_example') + + """ + + DieharderTests.run_dieharder_statistical_tests_tool_interactively(input_file) report = DieharderTests.parse_report(f'dieharder_test_output.txt') diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 4313cc8c..fe7c9718 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -44,10 +44,40 @@ def __init__(self, cipher): def nist_statistical_tests(input_file, bit_stream_length=10000, number_of_bit_streams=10, input_file_format=1, statistical_test_option_list=15 * '1'): + """ + Run the run_nist_statistical_tests_tool_interactively function and process its output with the parse_output function + to standardize it for the Report class + + INPUT: + + - ``input_file`` -- **str**; file containing the bit streams + - ``bit_stream_length`` -- **integer**; bit stream length + - ``number_of_bit_streams`` -- **integer**; number of bit streams in `input_file` + - ``input_file_format`` -- **integer**; `input_file` format. Set to 0 to indicate a file containing a binary + string in ASCII, or 1 to indicate a binary file + - ``test_type`` -- **str**; the type of the test to run + - ``statistical_test_option_list`` -- **str** (default: `15 * '1'`); a binary string of size 15. This string is + used to specify a set of statistical tests we want to run + + OUTPUT: + + a python dictionary representing the parsed output of the run_nist_statistical_tests_tool_interactively function + + EXAMPLES: + + from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests + + result = StatisticalTests.nist_statistical_test(f'claasp/cipher_modules/statistical_tests/input_data_example') + + """ + + StatisticalTests.run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length, number_of_bit_streams, input_file_format, statistical_test_option_list) + + report = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') return report From e44a1b6c6d3e4b64a8756aba0022184ca9bfa7f9 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 13:37:28 +0400 Subject: [PATCH 055/179] FIX/Refactor: continuous_tests to class --- claasp/cipher_modules/continuous_tests.py | 841 +++++++++++----------- 1 file changed, 420 insertions(+), 421 deletions(-) diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index 09e4ebce..efa1bf2c 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -1,4 +1,3 @@ - # **************************************************************************** # Copyright 2023 Technology Innovation Institute # @@ -21,7 +20,7 @@ import random import numpy as np from decimal import Decimal -from multiprocessing import Pool +from multiprocessin:q!g import Pool from claasp.cipher_modules import evaluator from claasp.cipher_modules.generic_functions_continuous_diffusion_analysis import (get_sbox_precomputations, @@ -30,439 +29,439 @@ group_list_by_key, point_pair, signed_distance) -def _compute_conditional_expected_value_for_continuous_metric(cipher, lambda_value, number_of_samples, tag_input): - def _create_list_fixing_some_inputs(tag_input): - max_bias = [-1, 1] - index_of_tag_input = cipher.inputs.index(tag_input) - lst_input = [] - i = 0 - for _ in cipher.inputs: - if i == index_of_tag_input: - lst_input.append([]) - else: - lst_input.append([Decimal(max_bias[random.randrange(0, 2)]) for _ in range(cipher.inputs_bit_size[i])]) - i += 1 - - return lst_input +class ContinuousDiffusionAnalysis: + def __init__(self, cipher): + self.cipher = cipher - sbox_components = _get_graph_representation_components_by_type(cipher.as_python_dictionary(), 'sbox') - sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = _get_graph_representation_components_by_type(cipher.as_python_dictionary(), 'mix_column') - sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) - pool = Pool() - results = [] - for _ in range(number_of_samples): - list_of_inputs = _create_list_fixing_some_inputs(tag_input) - results.append(pool.apply_async( - _compute_sample_for_continuous_avalanche_factor, - args=(cipher, lambda_value, list_of_inputs, sbox_precomputations, sbox_precomputations_mix_columns)) - ) - pool.close() - pool.join() - continuous_diffusion_tests = {tag_input: {}} - join_results = [result.get() for result in results] - flattened_results = merging_list_of_lists(join_results) - flattened_results_by_tag_output = group_list_by_key(flattened_results) - for tag_output in flattened_results_by_tag_output.keys(): - agg_by_round_and_tag_output = group_list_by_key( - merging_list_of_lists(flattened_results_by_tag_output[tag_output]) - ) - values = [] - continuous_diffusion_tests[tag_input][tag_output] = {} - for round_tag in agg_by_round_and_tag_output.keys(): - value_object = {"round": round_tag, "value": float( - sum(agg_by_round_and_tag_output[round_tag]) / Decimal(number_of_samples * 1.0) - )} - value_object["value"] = \ - round(float(value_object["value"] / cipher.output_bit_size * 1.0), 3) - values.append(value_object) - - continuous_diffusion_tests[tag_input][tag_output]["continuous_avalanche_factor"] = {} - value_list = [X['value'] for X in values] - continuous_diffusion_tests[tag_input][tag_output]["continuous_avalanche_factor"]["values"] = value_list - - return continuous_diffusion_tests - - -def _compute_conditional_expected_value_for_continuous_neutrality_measure(cipher, input_bit, beta, - number_of_samples, tag_input, output_dict): - def _create_list_fixing_tag_input(_tag_input): + def _create_list_fixing_some_inputs(self, tag_input): max_bias = [-1, 1] - index_of_tag_input = cipher.inputs.index(_tag_input) + index_of_tag_input = self.cipher.inputs.index(tag_input) lst_input = [] - ii = 0 - - for _ in cipher.inputs: - input_size = cipher.inputs_bit_size[ii] - if ii == index_of_tag_input: + for i in range(len(self.cipher.inputs)): + if i == index_of_tag_input: lst_input.append([]) else: - lst_input.append([ - Decimal(max_bias[random.randrange(0, 2)]) for _ in range(input_size) - ]) - ii += 1 - + lst_input.append( + [Decimal(max_bias[random.randrange(0, 2)]) for _ in range(self.cipher.inputs_bit_size[i])]) return lst_input - def compute_vectorized_bias(x): - return (2 * x - 1).astype('float16') - - def compute_vectorized_psi(x, _input_bit, _beta): - x[:, _input_bit] *= _beta - - def _create_gf_samples(_number_of_samples, _beta, input_bit): - _gf_samples = {} - for input_bit_key in input_bit.keys(): - sample_of_gf_2_n = generate_sample_from_gf_2_n( - cipher.inputs_bit_size[ - cipher.inputs.index(input_bit_key)], - _number_of_samples + def _compute_conditional_expected_value_for_continuous_metric(self, lambda_value, number_of_samples, tag_input): + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'sbox') + sbox_precomputations = get_sbox_precomputations(sbox_components) + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'mix_column') + sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) + pool = Pool() + results = [] + for _ in range(number_of_samples): + list_of_inputs = self._create_list_fixing_some_inputs(tag_input) + results.append(pool.apply_async( + self._compute_sample_for_continuous_avalanche_factor, + args=(lambda_value, list_of_inputs, sbox_precomputations, sbox_precomputations_mix_columns)) ) - bias_of_sample_of_gf_2_n = compute_vectorized_bias(sample_of_gf_2_n) - compute_vectorized_psi(bias_of_sample_of_gf_2_n, input_bit[input_bit_key], _beta) - _gf_samples[input_bit_key] = bias_of_sample_of_gf_2_n - - return _gf_samples - - gf_samples = _create_gf_samples(number_of_samples, beta, input_bit) - - sbox_components = _get_graph_representation_components_by_type(cipher.as_python_dictionary(), 'sbox') - sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = _get_graph_representation_components_by_type(cipher.as_python_dictionary(), 'mix_column') - sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) - - results = [] - for i in range(number_of_samples): - list_of_inputs = _create_list_fixing_tag_input(tag_input) - results.append( - _compute_sample_for_continuous_neutrality_measure( - cipher, list_of_inputs, sbox_precomputations, - sbox_precomputations_mix_columns, output_dict, - [Decimal(float(gf_sample)) for gf_sample in gf_samples[tag_input][i]] + pool.close() + pool.join() + continuous_diffusion_tests = {tag_input: {}} + join_results = [result.get() for result in results] + flattened_results = merging_list_of_lists(join_results) + flattened_results_by_tag_output = group_list_by_key(flattened_results) + for tag_output in flattened_results_by_tag_output.keys(): + agg_by_round_and_tag_output = group_list_by_key( + merging_list_of_lists(flattened_results_by_tag_output[tag_output]) + ) + values = [] + continuous_diffusion_tests[tag_input][tag_output] = {} + for round_tag in agg_by_round_and_tag_output.keys(): + value_object = {"round": round_tag, "value": float( + sum(agg_by_round_and_tag_output[round_tag]) / Decimal(number_of_samples * 1.0) + )} + value_object["value"] = round(float(value_object["value"] / self.cipher.output_bit_size * 1.0), 3) + values.append(value_object) + + continuous_diffusion_tests[tag_input][tag_output]["continuous_avalanche_factor"] = {} + value_list = [X['value'] for X in values] + continuous_diffusion_tests[tag_input][tag_output]["continuous_avalanche_factor"]["values"] = value_list + + return continuous_diffusion_tests + + def _compute_sample_for_continuous_avalanche_factor(self, lambda_value, lst_input, + sbox_precomputations, sbox_precomputations_mix_columns): + index_of_variable_input_size = lst_input.index([]) + x, y = point_pair(lambda_value, self.cipher.inputs_bit_size[index_of_variable_input_size]) + x_inputs = [x if input_element == [] else input_element for input_element in lst_input] + y_inputs = [y if input_element == [] else input_element for input_element in lst_input] + sum_by_round = [] + output_evaluated_continuous_diffusion_analysis_x = \ + evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( + self.cipher, x_inputs, + sbox_precomputations, sbox_precomputations_mix_columns)[1] + output_evaluated_continuous_diffusion_analysis_y = \ + evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( + self.cipher, y_inputs, + sbox_precomputations, sbox_precomputations_mix_columns + )[1] + + for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): + obj = {} + xc_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] + yc_list = output_evaluated_continuous_diffusion_analysis_y[tag_output] + obj[tag_output] = [{} for _ in range(len(xc_list))] + for j in range(len(xc_list)): + xc = xc_list[j]['intermediate_output'] + yc = yc_list[j]['intermediate_output'] + signed_distance_xc_yc = signed_distance(xc, yc) + if str(xc_list[j]['round']) not in obj[tag_output][j]: + obj[tag_output][j][str(xc_list[j]['round'])] = signed_distance_xc_yc + else: + obj[tag_output][j][str(xc_list[j]['round'])] += signed_distance_xc_yc + sum_by_round.append(obj) + + return sum_by_round + + @staticmethod + def _get_graph_representation_components_by_type(graph_representation, type_name): + cipher_rounds = graph_representation["cipher_rounds"][0] + components_by_type = list(filter(lambda d: d['type'] in [type_name], cipher_rounds)) + return components_by_type + + def _compute_conditional_expected_value_for_continuous_neutrality_measure(self, input_bit, beta, + number_of_samples, tag_input, + output_dict): + def _create_list_fixing_tag_input(_tag_input): + max_bias = [-1, 1] + index_of_tag_input = self.cipher.inputs.index(_tag_input) + lst_input = [] + ii = 0 + + for _ in self.cipher.inputs: + input_size = self.cipher.inputs_bit_size[ii] + if ii == index_of_tag_input: + lst_input.append([]) + else: + lst_input.append([ + Decimal(max_bias[random.randrange(0, 2)]) for _ in range(input_size) + ]) + ii += 1 + + return lst_input + + def compute_vectorized_bias(x): + return (2 * x - 1).astype('float16') + + def compute_vectorized_psi(x, _input_bit, _beta): + x[:, _input_bit] *= _beta + + def _create_gf_samples(_number_of_samples, _beta, input_bit_): + _gf_samples = {} + for input_bit_key in input_bit_.keys(): + sample_of_gf_2_n = generate_sample_from_gf_2_n( + self.cipher.inputs_bit_size[ + self.cipher.inputs.index(input_bit_key)], + _number_of_samples + ) + bias_of_sample_of_gf_2_n = compute_vectorized_bias(sample_of_gf_2_n) + compute_vectorized_psi(bias_of_sample_of_gf_2_n, input_bit_[input_bit_key], _beta) + _gf_samples[input_bit_key] = bias_of_sample_of_gf_2_n + + return _gf_samples + + gf_samples = _create_gf_samples(number_of_samples, beta, input_bit) + + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'sbox') + sbox_precomputations = get_sbox_precomputations(sbox_components) + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'mix_column') + sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) + + results = [] + for i in range(number_of_samples): + list_of_inputs = _create_list_fixing_tag_input(tag_input) + results.append( + self._compute_sample_for_continuous_neutrality_measure( + list_of_inputs, sbox_precomputations, + sbox_precomputations_mix_columns, output_dict, + [Decimal(float(gf_sample)) for gf_sample in gf_samples[tag_input][i]] + ) ) - ) - - continuous_diffusion_tests = {tag_input: {}} - flattened_results = merging_list_of_lists(results) - flattened_results_by_tag_output = group_list_by_key(flattened_results) - for tag_output in flattened_results_by_tag_output.keys(): - agg_by_round_and_tag_output = group_list_by_key( - merging_list_of_lists(flattened_results_by_tag_output[tag_output]) - ) - values = [] - continuous_diffusion_tests[tag_input][tag_output] = {} - for round_tag in agg_by_round_and_tag_output.keys(): - value_object = { - "round": round_tag, "value": float(sum(agg_by_round_and_tag_output[round_tag])) - } - value_object["value"] = round(float(value_object["value"]), 3) - values.append(value_object) - # - continuous_diffusion_tests[tag_input][tag_output]["continuous_neutrality_measure"] = {} - continuous_diffusion_tests[tag_input][tag_output]["continuous_neutrality_measure"]["values"] = values - - return continuous_diffusion_tests - - -def _compute_sample_for_continuous_avalanche_factor(cipher, lambda_value, lst_input, - sbox_precomputations, sbox_precomputations_mix_columns): - index_of_variable_input_size = lst_input.index([]) - x, y = point_pair(lambda_value, cipher.inputs_bit_size[index_of_variable_input_size]) - x_inputs = [x if input_element == [] else input_element for input_element in lst_input] - y_inputs = [y if input_element == [] else input_element for input_element in lst_input] - sum_by_round = [] - output_evaluated_continuous_diffusion_analysis_x = \ - evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( - cipher, x_inputs, - sbox_precomputations, sbox_precomputations_mix_columns)[1] - output_evaluated_continuous_diffusion_analysis_y = \ - evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( - cipher, y_inputs, - sbox_precomputations, sbox_precomputations_mix_columns - )[1] - - for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): - obj = {} - xc_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] - yc_list = output_evaluated_continuous_diffusion_analysis_y[tag_output] - obj[tag_output] = [{} for _ in range(len(xc_list))] - for j in range(len(xc_list)): - xc = xc_list[j]['intermediate_output'] - yc = yc_list[j]['intermediate_output'] - signed_distance_xc_yc = signed_distance(xc, yc) - if str(xc_list[j]['round']) not in obj[tag_output][j]: - obj[tag_output][j][str(xc_list[j]['round'])] = signed_distance_xc_yc - else: - obj[tag_output][j][str(xc_list[j]['round'])] += signed_distance_xc_yc - sum_by_round.append(obj) - - return sum_by_round - - -def _compute_sample_for_continuous_neutrality_measure(cipher, lst_input, sbox_precomputations, - sbox_precomputations_mix_columns, output_dict, x): - def mag(xx): - if xx > 0: - return math.log(abs(math.log(abs(xx), 10)) + 1, 2) - return 0 - - x_inputs = [ - x if input_element == [] else input_element for input_element in lst_input - ] - sum_by_round = [] - - output_evaluated_continuous_diffusion_analysis_x = \ - evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( - cipher, x_inputs, sbox_precomputations, sbox_precomputations_mix_columns)[1] - - if output_dict is None: - output_dict = {} - for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): - obj = {} - x_c_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] - obj[tag_output] = [{} for _ in range(len(x_c_list))] - - for j in range(len(x_c_list)): - x_c = x_c_list[j]['intermediate_output'] - output_bits_sum = sum([mag(x_c[idx]) for idx in output_dict[tag_output]]) - if str(x_c_list[j]['round']) not in obj[tag_output][j]: - obj[tag_output][j][str(x_c_list[j]['round'])] = output_bits_sum - else: - obj[tag_output][j][str(x_c_list[j]['round'])] += output_bits_sum - sum_by_round.append(obj) - - return sum_by_round - - -def _get_graph_representation_components_by_type(graph_representation, type_name): - cipher_rounds = graph_representation["cipher_rounds"][0] - components_by_type = list(filter(lambda d: d['type'] in [type_name], cipher_rounds)) - - return components_by_type - - -def _get_graph_representation_tag_output_sizes(graph_representation): - temp_components = {} - component_descriptions = [] - cipher_rounds = graph_representation["cipher_rounds"] - for cipher_round in cipher_rounds: - for component in cipher_round: - if (component["type"] == "intermediate_output" or component["type"] == "cipher_output") and \ - component["description"] not in component_descriptions: - component_descriptions.append(component["description"]) - - temp_components[component["description"][0]] = list(range(component["output_bit_size"])) - - return temp_components - - -def continuous_avalanche_factor(cipher, lambda_value, number_of_samples): - input_tags = cipher.inputs - final_dict = {} - for input_tag in input_tags: - continuous_avalanche_factor_by_tag_input_dict = _compute_conditional_expected_value_for_continuous_metric( - cipher, lambda_value, number_of_samples, input_tag) - final_dict = {**final_dict, **continuous_avalanche_factor_by_tag_input_dict} - - return final_dict - -def continuous_diffusion_factor(cipher, beta_number_of_samples, gf_number_samples): - output_tags = _get_graph_representation_tag_output_sizes(cipher.as_python_dictionary()).keys() - i = 0 - continuous_neutrality_measures = {} - for cipher_input_size in cipher.inputs_bit_size: - input_tag = cipher.inputs[i] - continuous_neutrality_measures[input_tag] = {} + continuous_diffusion_tests = {tag_input: {}} + flattened_results = merging_list_of_lists(results) + flattened_results_by_tag_output = group_list_by_key(flattened_results) + for tag_output in flattened_results_by_tag_output.keys(): + agg_by_round_and_tag_output = group_list_by_key( + merging_list_of_lists(flattened_results_by_tag_output[tag_output]) + ) + values = [] + continuous_diffusion_tests[tag_input][tag_output] = {} + for round_tag in agg_by_round_and_tag_output.keys(): + value_object = { + "round": round_tag, "value": float(sum(agg_by_round_and_tag_output[round_tag])) + } + value_object["value"] = round(float(value_object["value"]), 3) + values.append(value_object) + # + continuous_diffusion_tests[tag_input][tag_output]["continuous_neutrality_measure"] = {} + continuous_diffusion_tests[tag_input][tag_output]["continuous_neutrality_measure"]["values"] = values + + return continuous_diffusion_tests + + def _compute_sample_for_continuous_neutrality_measure(self, lst_input, sbox_precomputations, + sbox_precomputations_mix_columns, output_dict, x): + def mag(xx): + if xx > 0: + return math.log(abs(math.log(abs(xx), 10)) + 1, 2) + return 0 + + x_inputs = [ + x if input_element == [] else input_element for input_element in lst_input + ] + sum_by_round = [] + + output_evaluated_continuous_diffusion_analysis_x = \ + evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( + self.cipher, x_inputs, sbox_precomputations, sbox_precomputations_mix_columns)[1] + + if output_dict is None: + output_dict = {} + for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): + obj = {} + x_c_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] + obj[tag_output] = [{} for _ in range(len(x_c_list))] + + for j in range(len(x_c_list)): + x_c = x_c_list[j]['intermediate_output'] + output_bits_sum = sum([mag(x_c[idx]) for idx in output_dict[tag_output]]) + if str(x_c_list[j]['round']) not in obj[tag_output][j]: + obj[tag_output][j][str(x_c_list[j]['round'])] = output_bits_sum + else: + obj[tag_output][j][str(x_c_list[j]['round'])] += output_bits_sum + sum_by_round.append(obj) + + return sum_by_round + + @staticmethod + def _get_graph_representation_tag_output_sizes(graph_representation): + temp_components = {} + component_descriptions = [] + cipher_rounds = graph_representation["cipher_rounds"] + for cipher_round in cipher_rounds: + for component in cipher_round: + if (component["type"] == "intermediate_output" or component["type"] == "cipher_output") and \ + component["description"] not in component_descriptions: + component_descriptions.append(component["description"]) + + temp_components[component["description"][0]] = list(range(component["output_bit_size"])) + + return temp_components + + def continuous_avalanche_factor(self, lambda_value, number_of_samples): + input_tags = self.cipher.inputs + final_dict = {} + for input_tag in input_tags: + continuous_avalanche_factor_by_tag_input_dict = \ + self._compute_conditional_expected_value_for_continuous_metric( + lambda_value, number_of_samples, input_tag) + final_dict = {**final_dict, **continuous_avalanche_factor_by_tag_input_dict} + + return final_dict + + def process_output_tags(self, input_tag, cipher_input_size, beta_number_of_samples, gf_number_samples, output_tags, + continuous_neutrality_measures): for input_bit in range(cipher_input_size): - continuous_neutrality_measures_output = continuous_neutrality_measure_for_bit_j( - cipher, beta_number_of_samples, gf_number_samples, input_bit={input_tag: input_bit}) + continuous_neutrality_measures_output = self.continuous_neutrality_measure_for_bit_j(beta_number_of_samples, + gf_number_samples, + input_bit, input_tag) for output_tag in output_tags: - continuous_neutrality_measures_values = continuous_neutrality_measures_output[input_tag][output_tag][ - "continuous_neutrality_measure"]["values"] if output_tag not in continuous_neutrality_measures[input_tag]: - continuous_neutrality_measures[input_tag][output_tag] = {} - continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"] = {} - continuous_neutrality_measures_output_values = continuous_neutrality_measures_values - if input_bit == 0: - continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"] = [ - {} for _ in range(len(continuous_neutrality_measures_output_values))] - incrementing_counters(continuous_neutrality_measures_output_values, continuous_neutrality_measures, - cipher_input_size, input_tag, - output_tag, input_bit) - i += 1 - - for it in continuous_neutrality_measures.keys(): - for out in continuous_neutrality_measures[it].keys(): - copy_values = [list(X.values()) for X in continuous_neutrality_measures[it][out]['diffusion_factor']['values']] - copy_values = [value for round in copy_values for value in round] - continuous_neutrality_measures[it][out]['diffusion_factor']['values'] = copy_values - - return continuous_neutrality_measures - - -def incrementing_counters(continuous_neutrality_measures_output_values_, continuous_neutrality_measures_, - cipher_input_size_, input_tag_, output_tag_, input_bit): - df_values = continuous_neutrality_measures_[input_tag_][output_tag_]["diffusion_factor"]["values"] - for index in range(len(continuous_neutrality_measures_output_values_)): - for key in continuous_neutrality_measures_output_values_[index]: - if any(key in d for d in df_values): - if input_bit == cipher_input_size_ - 1: - df_values[index][key] /= cipher_input_size_ + continuous_neutrality_measures[input_tag][output_tag] = {"diffusion_factor": {"values": []}} + continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"].append( + continuous_neutrality_measures_output[input_tag][output_tag]["continuous_neutrality_measure"][ + "values"] + ) + + def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): + output_tags = self._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary())['output_tags'] + continuous_neutrality_measures = {} + for i, cipher_input_size in enumerate(self.cipher.inputs_bit_size): + input_tag = self.cipher.inputs[i] + continuous_neutrality_measures[input_tag] = {} + self.process_output_tags(input_tag, cipher_input_size, beta_number_of_samples, gf_number_samples, + output_tags, continuous_neutrality_measures) + + for input_tag, out_dict in continuous_neutrality_measures.items(): + for output_tag, measures in out_dict.items(): + diffusion_values = measures['diffusion_factor']['values'] + flattened_values = [value for sublist in diffusion_values for value in sublist] + measures['diffusion_factor']['values'] = flattened_values + + return continuous_neutrality_measures + + @staticmethod + def incrementing_counters(continuous_neutrality_measures_output_values_, continuous_neutrality_measures_, + cipher_input_size_, input_tag_, output_tag_, input_bit): + df_values = continuous_neutrality_measures_[input_tag_][output_tag_]["diffusion_factor"]["values"] + for index in range(len(continuous_neutrality_measures_output_values_)): + for key in continuous_neutrality_measures_output_values_[index]: + if any(key in d for d in df_values): + if input_bit == cipher_input_size_ - 1: + df_values[index][key] /= cipher_input_size_ + else: + df_values[index][key] += continuous_neutrality_measures_output_values_[index][key] else: - df_values[index][key] += continuous_neutrality_measures_output_values_[index][key] - else: - df_values[index][key] = 0.0 - - -def continuous_diffusion_tests(cipher, - continuous_avalanche_factor_number_of_samples=100, - threshold_for_avalanche_factor=0.001, - continuous_neutral_measure_beta_number_of_samples=10, - continuous_neutral_measure_gf_number_samples=10, - continuous_diffusion_factor_beta_number_of_samples=10, - continuous_diffusion_factor_gf_number_samples=10, - is_continuous_avalanche_factor=True, - is_continuous_neutrality_measure=True, - is_diffusion_factor=True): - continuous_diffusion_tests = {"input_parameters": { - 'continuous_avalanche_factor_number_of_samples': continuous_avalanche_factor_number_of_samples, - 'threshold_for_avalanche_factor': threshold_for_avalanche_factor, - 'continuous_neutral_measure_beta_number_of_samples': continuous_neutral_measure_beta_number_of_samples, - 'continuous_neutral_measure_gf_number_samples': continuous_neutral_measure_gf_number_samples, - 'continuous_diffusion_factor_beta_number_of_samples': continuous_diffusion_factor_beta_number_of_samples, - 'continuous_diffusion_factor_gf_number_samples': continuous_diffusion_factor_gf_number_samples, - 'is_continuous_avalanche_factor': is_continuous_avalanche_factor, - 'is_continuous_neutrality_measure': is_continuous_neutrality_measure, - 'is_diffusion_factor': is_diffusion_factor - }, - "test_results": {}} - - if is_diffusion_factor: - continuous_diffusion_factor_output = continuous_diffusion_factor( - cipher, - continuous_diffusion_factor_beta_number_of_samples, - continuous_diffusion_factor_gf_number_samples) - if is_continuous_neutrality_measure: - continuous_neutrality_measure_output = continuous_neutrality_measure_for_bit_j( - cipher, - continuous_neutral_measure_beta_number_of_samples, - continuous_neutral_measure_gf_number_samples) - - if is_continuous_avalanche_factor: - continuous_avalanche_factor_output = continuous_avalanche_factor(cipher, - threshold_for_avalanche_factor, - continuous_avalanche_factor_number_of_samples) - - inputs_tags = list(continuous_neutrality_measure_output.keys()) - output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) - - for it in inputs_tags: - for out in output_tags: - copy_values = [list(X.values()) for X in continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values']] - copy_values = [value for round in copy_values for value in round] - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values'] = copy_values - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('input_bit') - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('output_bits') - - for input_tag in inputs_tags: - continuous_diffusion_tests["test_results"][input_tag] = {} - for output_tag in output_tags: - continuous_diffusion_tests["test_results"][input_tag][output_tag] = { - **continuous_neutrality_measure_output[input_tag][output_tag], - **continuous_avalanche_factor_output[input_tag][output_tag], - **continuous_diffusion_factor_output[input_tag][output_tag], - } - - return continuous_diffusion_tests - - -def continuous_neutrality_measure_for_bit_j(cipher, beta_number_of_samples, gf_number_samples, - input_bit=None, output_bits=None): - if output_bits is None: - output_bits = _get_graph_representation_tag_output_sizes(cipher.as_python_dictionary()) - if input_bit is None: - input_bit = init_input_bits(cipher) - - beta_sample_outputs = generate_beta_sample_output(beta_number_of_samples, cipher, gf_number_samples, - input_bit, output_bits) - inputs_tags = list(beta_sample_outputs[0].keys()) - output_tags = list(beta_sample_outputs[0][inputs_tags[0]].keys()) - final_result = init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags) - final_result = add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, final_result) - - for inputs_tag in inputs_tags: - for output_tag in output_tags: - values = merging_list_of_lists( - final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"]) - total_values_by_round = aggregate_list_of_dictionary(values, "round", ["value"]) - - final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"] = [] - for key, item in total_values_by_round.items(): - final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"].append( - {key: item["value"] / beta_number_of_samples / gf_number_samples / len(output_bits[output_tag])}) - - return final_result - + df_values[index][key] = 0.0 + + def continuous_diffusion_tests(self, + continuous_avalanche_factor_number_of_samples=100, + threshold_for_avalanche_factor=0.001, + continuous_neutral_measure_beta_number_of_samples=10, + continuous_neutral_measure_gf_number_samples=10, + continuous_diffusion_factor_beta_number_of_samples=10, + continuous_diffusion_factor_gf_number_samples=10, + is_continuous_avalanche_factor=True, + is_continuous_neutrality_measure=True, + is_diffusion_factor=True): + continuous_diffusion_tests = {"input_parameters": { + 'continuous_avalanche_factor_number_of_samples': continuous_avalanche_factor_number_of_samples, + 'threshold_for_avalanche_factor': threshold_for_avalanche_factor, + 'continuous_neutral_measure_beta_number_of_samples': continuous_neutral_measure_beta_number_of_samples, + 'continuous_neutral_measure_gf_number_samples': continuous_neutral_measure_gf_number_samples, + 'continuous_diffusion_factor_beta_number_of_samples': continuous_diffusion_factor_beta_number_of_samples, + 'continuous_diffusion_factor_gf_number_samples': continuous_diffusion_factor_gf_number_samples, + 'is_continuous_avalanche_factor': is_continuous_avalanche_factor, + 'is_continuous_neutrality_measure': is_continuous_neutrality_measure, + 'is_diffusion_factor': is_diffusion_factor + }, + "test_results": {}} + + if is_diffusion_factor: + continuous_diffusion_factor_output = self.continuous_diffusion_factor( + continuous_diffusion_factor_beta_number_of_samples, + continuous_diffusion_factor_gf_number_samples) + if is_continuous_neutrality_measure: + continuous_neutrality_measure_output = self.continuous_neutrality_measure_for_bit_j( + continuous_neutral_measure_beta_number_of_samples, + continuous_neutral_measure_gf_number_samples) + + if is_continuous_avalanche_factor: + continuous_avalanche_factor_output = self.continuous_avalanche_factor( + threshold_for_avalanche_factor, continuous_avalanche_factor_number_of_samples) + + inputs_tags = list(continuous_neutrality_measure_output.keys()) + output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) + + for it in inputs_tags: + for out in output_tags: + copy_values = [list(X.values()) for X in + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values']] + copy_values = [value for round in copy_values for value in round] + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values'] = copy_values + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('input_bit') + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('output_bits') + + for input_tag in inputs_tags: + continuous_diffusion_tests["test_results"][input_tag] = {} + for output_tag in output_tags: + continuous_diffusion_tests["test_results"][input_tag][output_tag] = { + **continuous_neutrality_measure_output[input_tag][output_tag], + **continuous_avalanche_factor_output[input_tag][output_tag], + **continuous_diffusion_factor_output[input_tag][output_tag], + } + + return continuous_diffusion_tests + + def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, + input_bit=None, output_bits=None): + if output_bits is None: + output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( + self.cipher.as_python_dictionary() + ) + if input_bit is None: + input_bit = self.init_input_bits() + + beta_sample_outputs = self.generate_beta_sample_output(beta_number_of_samples, gf_number_samples, + input_bit, output_bits) + inputs_tags = list(beta_sample_outputs[0].keys()) + output_tags = list(beta_sample_outputs[0][inputs_tags[0]].keys()) + final_result = ContinuousDiffusionAnalysis.init_final_result_structure( + input_bit, inputs_tags, output_bits, output_tags + ) + final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from( + beta_sample_outputs, inputs_tags, output_tags, final_result + ) -def add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, final_result): - for beta_sample_output in beta_sample_outputs: for inputs_tag in inputs_tags: for output_tag in output_tags: - final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"].append( - beta_sample_output[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"]) - - return final_result - - -def init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags): - final_result = {} - for inputs_tag in inputs_tags: - final_result[inputs_tag] = {} - for output_tag in output_tags: - final_result[inputs_tag][output_tag] = {} - final_result[inputs_tag][output_tag]["continuous_neutrality_measure"] = {} - final_result_cnm = final_result[inputs_tag][output_tag]["continuous_neutrality_measure"] - final_result_cnm["values"] = [] - final_result_cnm["input_bit"] = input_bit - final_result_cnm["output_bits"] = output_bits[output_tag] - - return final_result - - -def generate_beta_sample_output(beta_number_of_samples, cipher, gf_number_samples, input_bit, output_bits): - betas = np.random.uniform(low=-1.0, high=1.0, size=beta_number_of_samples) - beta_sample_outputs_temp = [] - pool = Pool() - for i in range(beta_number_of_samples): - beta_sample_outputs_temp.append( - pool.apply_async(continuous_neutrality_measure_for_bit_j_and_beta, - args=(cipher, input_bit, float(betas[i]), gf_number_samples, output_bits))) - pool.close() - pool.join() - beta_sample_outputs = [result.get() for result in beta_sample_outputs_temp] - - return beta_sample_outputs - - -def init_input_bits(cipher): - input_bit = {} - for cipher_input in cipher.inputs: - input_bit[cipher_input] = 0 - - return input_bit - - -def continuous_neutrality_measure_for_bit_j_and_beta(cipher, input_bit, beta, number_of_samples, output_bits): - input_tags = input_bit.keys() - continuous_diffusion_tests = {} - for input_tag in input_tags: - continuous_avalanche_factor_by_tag_input_dict = \ - _compute_conditional_expected_value_for_continuous_neutrality_measure(cipher, input_bit, - beta, number_of_samples, - input_tag, output_bits) - continuous_diffusion_tests = { - **continuous_diffusion_tests, **continuous_avalanche_factor_by_tag_input_dict - } - - return continuous_diffusion_tests \ No newline at end of file + values = merging_list_of_lists( + final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"]) + total_values_by_round = aggregate_list_of_dictionary(values, "round", ["value"]) + + final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"] = [] + for key, item in total_values_by_round.items(): + final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"].append( + {key: item["value"] / beta_number_of_samples / gf_number_samples / len( + output_bits[output_tag])}) + + return final_result + + @staticmethod + def add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, final_result): + for beta_sample_output in beta_sample_outputs: + for inputs_tag in inputs_tags: + for output_tag in output_tags: + final_result[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"].append( + beta_sample_output[inputs_tag][output_tag]["continuous_neutrality_measure"]["values"]) + + return final_result + + @staticmethod + def init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags): + final_result = {} + for inputs_tag in inputs_tags: + final_result[inputs_tag] = {} + for output_tag in output_tags: + final_result[inputs_tag][output_tag] = {} + final_result[inputs_tag][output_tag]["continuous_neutrality_measure"] = {} + final_result_cnm = final_result[inputs_tag][output_tag]["continuous_neutrality_measure"] + final_result_cnm["values"] = [] + final_result_cnm["input_bit"] = input_bit + final_result_cnm["output_bits"] = output_bits[output_tag] + + return final_result + + def generate_beta_sample_output(self, beta_number_of_samples, gf_number_samples, input_bit, output_bits): + rng = np.random.default_rng() # Create a random generator instance + betas = rng.uniform(low=-1.0, high=1.0, size=beta_number_of_samples) + beta_sample_outputs_temp = [] + pool = Pool() + for i in range(beta_number_of_samples): + beta_sample_outputs_temp.append( + pool.apply_async(self.continuous_neutrality_measure_for_bit_j_and_beta, + args=(input_bit, float(betas[i]), gf_number_samples, output_bits))) + pool.close() + pool.join() + beta_sample_outputs = [result.get() for result in beta_sample_outputs_temp] + + return beta_sample_outputs + + def init_input_bits(self): + input_bit = {} + for cipher_input in self.cipher.inputs: + input_bit[cipher_input] = 0 + + return input_bit + + def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): + input_tags = input_bit.keys() + continuous_diffusion_tests = {} + for input_tag in input_tags: + continuous_avalanche_factor_by_tag_input_dict = \ + self._compute_conditional_expected_value_for_continuous_neutrality_measure(input_bit, + beta, number_of_samples, + input_tag, output_bits) + continuous_diffusion_tests = { + **continuous_diffusion_tests, **continuous_avalanche_factor_by_tag_input_dict + } + + return continuous_diffusion_tests From e3b052a72aa96728f174415d3f2865ca5856eb79 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 14:46:35 +0400 Subject: [PATCH 056/179] FIX/Refactor: continuous_tests to class --- claasp/cipher_modules/continuous_tests.py | 218 +++++++++--------- .../cipher_modules/continuous_tests_test.py | 10 + 2 files changed, 119 insertions(+), 109 deletions(-) create mode 100644 tests/unit/cipher_modules/continuous_tests_test.py diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index efa1bf2c..72e07842 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -20,7 +20,7 @@ import random import numpy as np from decimal import Decimal -from multiprocessin:q!g import Pool +from multiprocessing import Pool from claasp.cipher_modules import evaluator from claasp.cipher_modules.generic_functions_continuous_diffusion_analysis import (get_sbox_precomputations, @@ -33,29 +33,31 @@ class ContinuousDiffusionAnalysis: def __init__(self, cipher): self.cipher = cipher - def _create_list_fixing_some_inputs(self, tag_input): - max_bias = [-1, 1] - index_of_tag_input = self.cipher.inputs.index(tag_input) - lst_input = [] - for i in range(len(self.cipher.inputs)): - if i == index_of_tag_input: - lst_input.append([]) - else: - lst_input.append( - [Decimal(max_bias[random.randrange(0, 2)]) for _ in range(self.cipher.inputs_bit_size[i])]) - return lst_input - def _compute_conditional_expected_value_for_continuous_metric(self, lambda_value, number_of_samples, tag_input): - sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( - self.cipher.as_python_dictionary(), 'sbox') + def _create_list_fixing_some_inputs(tag_input): + max_bias = [-1, 1] + index_of_tag_input = self.cipher.inputs.index(tag_input) + lst_input = [] + i = 0 + for _ in self.cipher.inputs: + if i == index_of_tag_input: + lst_input.append([]) + else: + lst_input.append( + [Decimal(max_bias[random.randrange(0, 2)]) for _ in range(self.cipher.inputs_bit_size[i])]) + i += 1 + + return lst_input + + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), 'sbox') sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( - self.cipher.as_python_dictionary(), 'mix_column') + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), + 'mix_column') sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) pool = Pool() results = [] for _ in range(number_of_samples): - list_of_inputs = self._create_list_fixing_some_inputs(tag_input) + list_of_inputs = _create_list_fixing_some_inputs(tag_input) results.append(pool.apply_async( self._compute_sample_for_continuous_avalanche_factor, args=(lambda_value, list_of_inputs, sbox_precomputations, sbox_precomputations_mix_columns)) @@ -76,7 +78,8 @@ def _compute_conditional_expected_value_for_continuous_metric(self, lambda_value value_object = {"round": round_tag, "value": float( sum(agg_by_round_and_tag_output[round_tag]) / Decimal(number_of_samples * 1.0) )} - value_object["value"] = round(float(value_object["value"] / self.cipher.output_bit_size * 1.0), 3) + value_object["value"] = \ + round(float(value_object["value"] / self.cipher.output_bit_size * 1.0), 3) values.append(value_object) continuous_diffusion_tests[tag_input][tag_output]["continuous_avalanche_factor"] = {} @@ -85,46 +88,6 @@ def _compute_conditional_expected_value_for_continuous_metric(self, lambda_value return continuous_diffusion_tests - def _compute_sample_for_continuous_avalanche_factor(self, lambda_value, lst_input, - sbox_precomputations, sbox_precomputations_mix_columns): - index_of_variable_input_size = lst_input.index([]) - x, y = point_pair(lambda_value, self.cipher.inputs_bit_size[index_of_variable_input_size]) - x_inputs = [x if input_element == [] else input_element for input_element in lst_input] - y_inputs = [y if input_element == [] else input_element for input_element in lst_input] - sum_by_round = [] - output_evaluated_continuous_diffusion_analysis_x = \ - evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( - self.cipher, x_inputs, - sbox_precomputations, sbox_precomputations_mix_columns)[1] - output_evaluated_continuous_diffusion_analysis_y = \ - evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( - self.cipher, y_inputs, - sbox_precomputations, sbox_precomputations_mix_columns - )[1] - - for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): - obj = {} - xc_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] - yc_list = output_evaluated_continuous_diffusion_analysis_y[tag_output] - obj[tag_output] = [{} for _ in range(len(xc_list))] - for j in range(len(xc_list)): - xc = xc_list[j]['intermediate_output'] - yc = yc_list[j]['intermediate_output'] - signed_distance_xc_yc = signed_distance(xc, yc) - if str(xc_list[j]['round']) not in obj[tag_output][j]: - obj[tag_output][j][str(xc_list[j]['round'])] = signed_distance_xc_yc - else: - obj[tag_output][j][str(xc_list[j]['round'])] += signed_distance_xc_yc - sum_by_round.append(obj) - - return sum_by_round - - @staticmethod - def _get_graph_representation_components_by_type(graph_representation, type_name): - cipher_rounds = graph_representation["cipher_rounds"][0] - components_by_type = list(filter(lambda d: d['type'] in [type_name], cipher_rounds)) - return components_by_type - def _compute_conditional_expected_value_for_continuous_neutrality_measure(self, input_bit, beta, number_of_samples, tag_input, output_dict): @@ -152,27 +115,26 @@ def compute_vectorized_bias(x): def compute_vectorized_psi(x, _input_bit, _beta): x[:, _input_bit] *= _beta - def _create_gf_samples(_number_of_samples, _beta, input_bit_): + def _create_gf_samples(_number_of_samples, _beta, input_bit): _gf_samples = {} - for input_bit_key in input_bit_.keys(): + for input_bit_key in input_bit.keys(): sample_of_gf_2_n = generate_sample_from_gf_2_n( self.cipher.inputs_bit_size[ self.cipher.inputs.index(input_bit_key)], _number_of_samples ) bias_of_sample_of_gf_2_n = compute_vectorized_bias(sample_of_gf_2_n) - compute_vectorized_psi(bias_of_sample_of_gf_2_n, input_bit_[input_bit_key], _beta) + compute_vectorized_psi(bias_of_sample_of_gf_2_n, input_bit[input_bit_key], _beta) _gf_samples[input_bit_key] = bias_of_sample_of_gf_2_n return _gf_samples gf_samples = _create_gf_samples(number_of_samples, beta, input_bit) - sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( - self.cipher.as_python_dictionary(), 'sbox') + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), 'sbox') sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( - self.cipher.as_python_dictionary(), 'mix_column') + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), + 'mix_column') sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) results = [] @@ -207,6 +169,40 @@ def _create_gf_samples(_number_of_samples, _beta, input_bit_): return continuous_diffusion_tests + def _compute_sample_for_continuous_avalanche_factor(self, lambda_value, lst_input, + sbox_precomputations, sbox_precomputations_mix_columns): + index_of_variable_input_size = lst_input.index([]) + x, y = point_pair(lambda_value, self.cipher.inputs_bit_size[index_of_variable_input_size]) + x_inputs = [x if input_element == [] else input_element for input_element in lst_input] + y_inputs = [y if input_element == [] else input_element for input_element in lst_input] + sum_by_round = [] + output_evaluated_continuous_diffusion_analysis_x = \ + evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( + self.cipher, x_inputs, + sbox_precomputations, sbox_precomputations_mix_columns)[1] + output_evaluated_continuous_diffusion_analysis_y = \ + evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( + self.cipher, y_inputs, + sbox_precomputations, sbox_precomputations_mix_columns + )[1] + + for tag_output in output_evaluated_continuous_diffusion_analysis_x.keys(): + obj = {} + xc_list = output_evaluated_continuous_diffusion_analysis_x[tag_output] + yc_list = output_evaluated_continuous_diffusion_analysis_y[tag_output] + obj[tag_output] = [{} for _ in range(len(xc_list))] + for j in range(len(xc_list)): + xc = xc_list[j]['intermediate_output'] + yc = yc_list[j]['intermediate_output'] + signed_distance_xc_yc = signed_distance(xc, yc) + if str(xc_list[j]['round']) not in obj[tag_output][j]: + obj[tag_output][j][str(xc_list[j]['round'])] = signed_distance_xc_yc + else: + obj[tag_output][j][str(xc_list[j]['round'])] += signed_distance_xc_yc + sum_by_round.append(obj) + + return sum_by_round + def _compute_sample_for_continuous_neutrality_measure(self, lst_input, sbox_precomputations, sbox_precomputations_mix_columns, output_dict, x): def mag(xx): @@ -241,6 +237,13 @@ def mag(xx): return sum_by_round + @staticmethod + def _get_graph_representation_components_by_type(graph_representation, type_name): + cipher_rounds = graph_representation["cipher_rounds"][0] + components_by_type = list(filter(lambda d: d['type'] in [type_name], cipher_rounds)) + + return components_by_type + @staticmethod def _get_graph_representation_tag_output_sizes(graph_representation): temp_components = {} @@ -260,41 +263,44 @@ def continuous_avalanche_factor(self, lambda_value, number_of_samples): input_tags = self.cipher.inputs final_dict = {} for input_tag in input_tags: - continuous_avalanche_factor_by_tag_input_dict = \ - self._compute_conditional_expected_value_for_continuous_metric( - lambda_value, number_of_samples, input_tag) + continuous_avalanche_factor_by_tag_input_dict = self._compute_conditional_expected_value_for_continuous_metric( + lambda_value, number_of_samples, input_tag) final_dict = {**final_dict, **continuous_avalanche_factor_by_tag_input_dict} return final_dict - def process_output_tags(self, input_tag, cipher_input_size, beta_number_of_samples, gf_number_samples, output_tags, - continuous_neutrality_measures): - for input_bit in range(cipher_input_size): - continuous_neutrality_measures_output = self.continuous_neutrality_measure_for_bit_j(beta_number_of_samples, - gf_number_samples, - input_bit, input_tag) - for output_tag in output_tags: - if output_tag not in continuous_neutrality_measures[input_tag]: - continuous_neutrality_measures[input_tag][output_tag] = {"diffusion_factor": {"values": []}} - continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"].append( - continuous_neutrality_measures_output[input_tag][output_tag]["continuous_neutrality_measure"][ - "values"] - ) - def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): - output_tags = self._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary())['output_tags'] + output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary()).keys() + i = 0 continuous_neutrality_measures = {} - for i, cipher_input_size in enumerate(self.cipher.inputs_bit_size): + for cipher_input_size in self.cipher.inputs_bit_size: input_tag = self.cipher.inputs[i] continuous_neutrality_measures[input_tag] = {} - self.process_output_tags(input_tag, cipher_input_size, beta_number_of_samples, gf_number_samples, - output_tags, continuous_neutrality_measures) - - for input_tag, out_dict in continuous_neutrality_measures.items(): - for output_tag, measures in out_dict.items(): - diffusion_values = measures['diffusion_factor']['values'] - flattened_values = [value for sublist in diffusion_values for value in sublist] - measures['diffusion_factor']['values'] = flattened_values + for input_bit in range(cipher_input_size): + continuous_neutrality_measures_output = self.continuous_neutrality_measure_for_bit_j( + beta_number_of_samples, gf_number_samples, input_bit={input_tag: input_bit}) + for output_tag in output_tags: + continuous_neutrality_measures_values = \ + continuous_neutrality_measures_output[input_tag][output_tag][ + "continuous_neutrality_measure"]["values"] + if output_tag not in continuous_neutrality_measures[input_tag]: + continuous_neutrality_measures[input_tag][output_tag] = {} + continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"] = {} + continuous_neutrality_measures_output_values = continuous_neutrality_measures_values + if input_bit == 0: + continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"] = [ + {} for _ in range(len(continuous_neutrality_measures_output_values))] + ContinuousDiffusionAnalysis.incrementing_counters(continuous_neutrality_measures_output_values, continuous_neutrality_measures, + cipher_input_size, input_tag, + output_tag, input_bit) + i += 1 + + for it in continuous_neutrality_measures.keys(): + for out in continuous_neutrality_measures[it].keys(): + copy_values = [list(X.values()) for X in + continuous_neutrality_measures[it][out]['diffusion_factor']['values']] + copy_values = [value for round in copy_values for value in round] + continuous_neutrality_measures[it][out]['diffusion_factor']['values'] = copy_values return continuous_neutrality_measures @@ -345,8 +351,8 @@ def continuous_diffusion_tests(self, continuous_neutral_measure_gf_number_samples) if is_continuous_avalanche_factor: - continuous_avalanche_factor_output = self.continuous_avalanche_factor( - threshold_for_avalanche_factor, continuous_avalanche_factor_number_of_samples) + continuous_avalanche_factor_output = self.continuous_avalanche_factor(threshold_for_avalanche_factor, + continuous_avalanche_factor_number_of_samples) inputs_tags = list(continuous_neutrality_measure_output.keys()) output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) @@ -374,22 +380,17 @@ def continuous_diffusion_tests(self, def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, input_bit=None, output_bits=None): if output_bits is None: - output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( - self.cipher.as_python_dictionary() - ) + output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary()) if input_bit is None: input_bit = self.init_input_bits() beta_sample_outputs = self.generate_beta_sample_output(beta_number_of_samples, gf_number_samples, - input_bit, output_bits) + input_bit, output_bits) inputs_tags = list(beta_sample_outputs[0].keys()) output_tags = list(beta_sample_outputs[0][inputs_tags[0]].keys()) - final_result = ContinuousDiffusionAnalysis.init_final_result_structure( - input_bit, inputs_tags, output_bits, output_tags - ) - final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from( - beta_sample_outputs, inputs_tags, output_tags, final_result - ) + final_result = ContinuousDiffusionAnalysis.init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags) + final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, + final_result) for inputs_tag in inputs_tags: for output_tag in output_tags: @@ -431,8 +432,7 @@ def init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags return final_result def generate_beta_sample_output(self, beta_number_of_samples, gf_number_samples, input_bit, output_bits): - rng = np.random.default_rng() # Create a random generator instance - betas = rng.uniform(low=-1.0, high=1.0, size=beta_number_of_samples) + betas = np.random.uniform(low=-1.0, high=1.0, size=beta_number_of_samples) beta_sample_outputs_temp = [] pool = Pool() for i in range(beta_number_of_samples): @@ -458,8 +458,8 @@ def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, numb for input_tag in input_tags: continuous_avalanche_factor_by_tag_input_dict = \ self._compute_conditional_expected_value_for_continuous_neutrality_measure(input_bit, - beta, number_of_samples, - input_tag, output_bits) + beta, number_of_samples, + input_tag, output_bits) continuous_diffusion_tests = { **continuous_diffusion_tests, **continuous_avalanche_factor_by_tag_input_dict } diff --git a/tests/unit/cipher_modules/continuous_tests_test.py b/tests/unit/cipher_modules/continuous_tests_test.py new file mode 100644 index 00000000..6b66e130 --- /dev/null +++ b/tests/unit/cipher_modules/continuous_tests_test.py @@ -0,0 +1,10 @@ +from claasp.cipher_modules.continuous_tests import ContinuousDiffusionAnalysis +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + + +def test_continuous_tests(): + speck = SpeckBlockCipher(number_of_rounds=1) + cda = ContinuousDiffusionAnalysis(speck) + cda_for_repo = cda.continuous_diffusion_tests() + test_results = cda_for_repo['test_results'] + assert test_results['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0] > 0.01 From 47459dadc41e215c32f4cd8e1521732a8993199b Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 19 Feb 2024 14:51:42 +0400 Subject: [PATCH 057/179] FIX: refactoring of algebraic tests to an object --- claasp/cipher_modules/algebraic_tests.py | 134 +++++++++++++---------- 1 file changed, 79 insertions(+), 55 deletions(-) diff --git a/claasp/cipher_modules/algebraic_tests.py b/claasp/cipher_modules/algebraic_tests.py index 7ea2b8f3..a13e232c 100644 --- a/claasp/cipher_modules/algebraic_tests.py +++ b/claasp/cipher_modules/algebraic_tests.py @@ -1,4 +1,3 @@ - # **************************************************************************** # Copyright 2023 Technology Innovation Institute # @@ -20,57 +19,82 @@ from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel -def algebraic_tests(cipher, timeout=60): - from sage.structure.sequence import Sequence - nvars_up_to_round = [] - - npolynomials_up_to_round = [] - nmonomials_up_to_round = [] - max_deg_of_equations_up_to_round = [] - tests_up_to_round = [] - - F = [] - - algebraic_model = AlgebraicModel(cipher) - for round_number in range(cipher.number_of_rounds): - F += algebraic_model.polynomial_system_at_round(round_number) + \ - algebraic_model.connection_polynomials_at_round(round_number) - Fseq = Sequence(F) - nvars_up_to_round.append(Fseq.nvariables()) - npolynomials_up_to_round.append(len(Fseq)) - nmonomials_up_to_round.append(Fseq.nmonomials()) - max_deg_of_equations_up_to_round.append(Fseq.maximal_degree()) - - if tests_up_to_round and tests_up_to_round[-1] is True: - tests_up_to_round.append(True) - else: - from cysignals.alarm import alarm, cancel_alarm - - try: - alarm(timeout) - cancel_alarm() - result = False - except InterruptedError: - result = True - - tests_up_to_round.append(result) - - input_parameters = { - "timeout": timeout, - "test_name": "algebraic_tests" - } - - test_results = { - "number_of_variables": nvars_up_to_round, - "number_of_equations": npolynomials_up_to_round, - "number_of_monomials": nmonomials_up_to_round, - "max_degree_of_equations": max_deg_of_equations_up_to_round, - "test_passed": tests_up_to_round - } - - output = { - "input_parameters": input_parameters, - "test_results": test_results - } - - return output +class AlgebraicTest: + + """ + Construct an instance of Algebraic Tests of the cipher. + + EXAMPLES:: + sage: from claasp.cipher_modules.algebraic_tests import AlgebraicTest + sage: from claasp.ciphers.toys.toyspn1 import ToySPN1 + sage: toyspn = ToySPN1(number_of_rounds=2) + sage: alg_test = AlgebraicTest(toyspn) + sage: alg_test.algebraic_tests(120) # timeout=120 seconds + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: speck = SpeckBlockCipher(number_of_rounds=1) + sage: alg_test = AlgebraicTest(speck) + sage: alg_test.algebraic_tests(120) # timeout=120 seconds + + sage: speck = SpeckBlockCipher(number_of_rounds=2) + sage: alg_test = AlgebraicTest(speck) + sage: alg_test.algebraic_tests(120) # timeout=120 seconds + """ + + def __init__(self, cipher): + self.cipher = cipher + + def algebraic_tests(self, timeout=60): + from sage.structure.sequence import Sequence + nvars_up_to_round = [] + + npolynomials_up_to_round = [] + nmonomials_up_to_round = [] + max_deg_of_equations_up_to_round = [] + tests_up_to_round = [] + + F = [] + + algebraic_model = AlgebraicModel(self.cipher) + for round_number in range(self.cipher.number_of_rounds): + F += algebraic_model.polynomial_system_at_round(round_number) + \ + algebraic_model.connection_polynomials_at_round(round_number) + Fseq = Sequence(F) + nvars_up_to_round.append(Fseq.nvariables()) + npolynomials_up_to_round.append(len(Fseq)) + nmonomials_up_to_round.append(Fseq.nmonomials()) + max_deg_of_equations_up_to_round.append(Fseq.maximal_degree()) + + if tests_up_to_round and tests_up_to_round[-1] is True: + tests_up_to_round.append(True) + else: + from cysignals.alarm import alarm, cancel_alarm + + try: + alarm(timeout) + cancel_alarm() + result = False + except InterruptedError: + result = True + + tests_up_to_round.append(result) + + input_parameters = { + "cipher.id": self.cipher.id, + "timeout": timeout, + "test_name": "algebraic_tests" + } + test_results = { + "number_of_variables": nvars_up_to_round, + "number_of_equations": npolynomials_up_to_round, + "number_of_monomials": nmonomials_up_to_round, + "max_degree_of_equations": max_deg_of_equations_up_to_round, + "test_passed": tests_up_to_round + } + + output = { + "input_parameters": input_parameters, + "test_results": test_results + } + + return output From 5be1285e56efaf3643955d1f4316e45a90d319fe Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 19 Feb 2024 15:27:38 +0400 Subject: [PATCH 058/179] FIX: refactored algebraic tests to an object and added some tests --- .../cipher_modules/algebraic_tests_test.py | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 tests/unit/cipher_modules/algebraic_tests_test.py diff --git a/tests/unit/cipher_modules/algebraic_tests_test.py b/tests/unit/cipher_modules/algebraic_tests_test.py new file mode 100644 index 00000000..8ae5c28c --- /dev/null +++ b/tests/unit/cipher_modules/algebraic_tests_test.py @@ -0,0 +1,21 @@ +from claasp.cipher_modules.algebraic_tests import AlgebraicTest +from claasp.ciphers.toys.toyspn1 import ToySPN1 +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + + +def test_algebraic_tests_of_cipher(): + + toyspn = ToySPN1(number_of_rounds=2) + alg_test = AlgebraicTest(toyspn) + result=alg_test.algebraic_tests(120) # timeout=120 seconds + result['test_results']['test_passed']== [False, False] + + speck = SpeckBlockCipher(number_of_rounds=1) + alg_test = AlgebraicTest(speck) + result=alg_test.algebraic_tests(120) # timeout=120 seconds + result['test_results']['test_passed'] == [False] + + speck = SpeckBlockCipher(number_of_rounds=2) + alg_test = AlgebraicTest(speck) + result=alg_test.algebraic_tests(120) + result['test_results']['test_passed'] == [False, False] From d4f5bab96601e5a2989853847e86f1f90fa56a33 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 15:58:02 +0400 Subject: [PATCH 059/179] FIX/Refactor: continuous_tests to class --- claasp/cipher.py | 56 +++++++++++++++++++-------------------- tests/unit/cipher_test.py | 5 ++-- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 6f1753e9..ed5b6778 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -22,6 +22,7 @@ import claasp from claasp import editor +from claasp.cipher_modules.continuous_tests import ContinuousDiffusionAnalysis from claasp.components.cipher_output_component import CipherOutput from claasp.compound_xor_differential_cipher import convert_to_compound_xor_cipher from claasp.rounds import Rounds @@ -146,6 +147,7 @@ def __init__(self, family_name, cipher_type, cipher_inputs, self._reference_code = cipher_reference_code self._id = self.make_cipher_id() self._file_name = self.make_file_name() + self._continuous_tests = ContinuousDiffusionAnalysis(self) def _are_there_not_forbidden_components(self, forbidden_types, forbidden_descriptions): return self._rounds.are_there_not_forbidden_components(forbidden_types, forbidden_descriptions) @@ -461,7 +463,7 @@ def continuous_avalanche_factor(self, lambda_value, number_of_samples): sage: result['plaintext']['round_key_output']['continuous_avalanche_factor']['values'][0]['value'] 0.0 """ - return continuous_tests.continuous_avalanche_factor(self, lambda_value, number_of_samples) + return self._continuous_tests.continuous_avalanche_factor(lambda_value, number_of_samples) def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): """ @@ -480,7 +482,7 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0]['2'] > 0 # long time True """ - return continuous_tests.continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) + return self._continuous_tests.continuous_diffusion_factor(beta_number_of_samples, gf_number_samples) def continuous_diffusion_tests(self, continuous_avalanche_factor_number_of_samples=100, @@ -529,16 +531,16 @@ def continuous_diffusion_tests(self, sage: output['plaintext']['round_key_output']['continuous_neutrality_measure']['values'][0]['1'] == 0.0 # long time True """ - return continuous_tests.continuous_diffusion_tests(self, - continuous_avalanche_factor_number_of_samples, - threshold_for_avalanche_factor, - continuous_neutral_measure_beta_number_of_samples, - continuous_neutral_measure_gf_number_samples, - continuous_diffusion_factor_beta_number_of_samples, - continuous_diffusion_factor_gf_number_samples, - is_continuous_avalanche_factor, - is_continuous_neutrality_measure, - is_diffusion_factor) + return self._continuous_tests.continuous_diffusion_tests( + continuous_avalanche_factor_number_of_samples, + threshold_for_avalanche_factor, + continuous_neutral_measure_beta_number_of_samples, + continuous_neutral_measure_gf_number_samples, + continuous_diffusion_factor_beta_number_of_samples, + continuous_diffusion_factor_gf_number_samples, + is_continuous_avalanche_factor, + is_continuous_neutrality_measure, + is_diffusion_factor) def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, input_bit=None, output_bits=None): @@ -559,12 +561,12 @@ def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_num sage: output['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0]['2'] > 0 # long time True """ - return continuous_tests.continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, + return self._continuous_tests.continuous_neutrality_measure_for_bit_j(beta_number_of_samples, gf_number_samples, input_bit, output_bits) def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): - return continuous_tests.continuous_neutrality_measure_for_bit_j_and_beta(self, beta, input_bit, + return self._continuous_tests.continuous_neutrality_measure_for_bit_j_and_beta(beta, input_bit, number_of_samples, output_bits) def delete_generated_evaluate_c_shared_library(self): @@ -1145,7 +1147,8 @@ def cipher_partial_inverse(self, start_round=None, end_round=None, keep_key_sche partial_cipher_inverse = partial_cipher.cipher_inverse() key_schedule_component_ids = get_key_schedule_component_ids(partial_cipher_inverse) - key_schedule_components = [partial_cipher_inverse.get_component_from_id(id) for id in key_schedule_component_ids if + key_schedule_components = [partial_cipher_inverse.get_component_from_id(id) for id in key_schedule_component_ids + if INPUT_KEY not in id] if not keep_key_schedule: @@ -1257,12 +1260,12 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio """ from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher return find_good_input_difference_for_neural_distinguisher(self, - difference_positions, - initial_population, - number_of_generations, - nb_samples, - previous_generation, - verbose) + difference_positions, + initial_population, + number_of_generations, + nb_samples, + previous_generation, + verbose) def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, testing_samples=10 ** 6, epochs=5, pipeline=True): @@ -1339,7 +1342,7 @@ def data_generator(nr, samples): from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ train_neural_distinguisher, get_neural_network input_size = self.output_bit_size * 2 - neural_network = get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) + neural_network = get_neural_network('gohr_resnet', input_size=input_size, depth=depth, word_size=word_size) return train_neural_distinguisher(self, data_generator, number_of_rounds, neural_network, training_samples, testing_samples, num_epochs=number_of_epochs) @@ -1395,13 +1398,12 @@ def data_generator(nr, samples): verbose=verbose) input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 - neural_network = get_neural_network('dbitnet', input_size = input_size) - nr = max(1, highest_round-1) - print(f'Training DBitNet on input difference {[hex(x) for x in input_difference]}, from round {nr-1}...') + neural_network = get_neural_network('dbitnet', input_size=input_size) + nr = max(1, highest_round - 1) + print(f'Training DBitNet on input difference {[hex(x) for x in input_difference]}, from round {nr - 1}...') return neural_staged_training(self, data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) - def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): """ Return a string containing the C code that defines the self.evaluate() method. @@ -2390,5 +2392,3 @@ def get_descendants_subgraph(G, start_nodes): def update_input_id_links_from_component_id(self, component_id, new_input_id_links): round_number = self.get_round_from_component_id(component_id) self._rounds.rounds[round_number].update_input_id_links_from_component_id(component_id, new_input_id_links) - - diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..3a6468ff 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -138,7 +138,6 @@ def test_compute_criterion_from_avalanche_probability_vectors(): def test_continuous_avalanche_factor(): aes = AESBlockCipher(number_of_rounds=5) result = aes.continuous_avalanche_factor(0.001, 300) - print(result) assert result['plaintext']['cipher_output']['continuous_avalanche_factor']['values'][0] > 0.1 @@ -155,8 +154,8 @@ def test_continuous_diffusion_tests(): def test_continuous_neutrality_measure_for_bit_j(): - output = SpeckBlockCipher(number_of_rounds=2).continuous_neutrality_measure_for_bit_j(50, 200) - print(output) + speck = SpeckBlockCipher(number_of_rounds=2) + output = speck.continuous_neutrality_measure_for_bit_j(50, 200) assert output['plaintext']['cipher_output']['continuous_neutrality_measure']["values"][0]['2'] > 0 From 7d943575997be58f60d41e1b0f3fd8d73b9bfa60 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 16:30:35 +0400 Subject: [PATCH 060/179] FIX/Refactor: continuous_tests to class --- claasp/cipher_modules/continuous_tests.py | 58 ++++++++++++++--------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index 72e07842..100242ba 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -49,10 +49,12 @@ def _create_list_fixing_some_inputs(tag_input): return lst_input - sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), 'sbox') + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'sbox' + ) sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), - 'mix_column') + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'mix_column') sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) pool = Pool() results = [] @@ -131,10 +133,11 @@ def _create_gf_samples(_number_of_samples, _beta, input_bit): gf_samples = _create_gf_samples(number_of_samples, beta, input_bit) - sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), 'sbox') + sbox_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'sbox') sbox_precomputations = get_sbox_precomputations(sbox_components) - mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type(self.cipher.as_python_dictionary(), - 'mix_column') + mix_column_components = ContinuousDiffusionAnalysis._get_graph_representation_components_by_type( + self.cipher.as_python_dictionary(), 'mix_column') sbox_precomputations_mix_columns = get_mix_column_precomputations(mix_column_components) results = [] @@ -263,14 +266,16 @@ def continuous_avalanche_factor(self, lambda_value, number_of_samples): input_tags = self.cipher.inputs final_dict = {} for input_tag in input_tags: - continuous_avalanche_factor_by_tag_input_dict = self._compute_conditional_expected_value_for_continuous_metric( - lambda_value, number_of_samples, input_tag) + continuous_avalanche_factor_by_tag_input_dict = \ + self._compute_conditional_expected_value_for_continuous_metric( + lambda_value, number_of_samples, input_tag) final_dict = {**final_dict, **continuous_avalanche_factor_by_tag_input_dict} return final_dict def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): - output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary()).keys() + output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( + self.cipher.as_python_dictionary()).keys() i = 0 continuous_neutrality_measures = {} for cipher_input_size in self.cipher.inputs_bit_size: @@ -281,8 +286,8 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) beta_number_of_samples, gf_number_samples, input_bit={input_tag: input_bit}) for output_tag in output_tags: continuous_neutrality_measures_values = \ - continuous_neutrality_measures_output[input_tag][output_tag][ - "continuous_neutrality_measure"]["values"] + continuous_neutrality_measures_output[input_tag][output_tag][ + "continuous_neutrality_measure"]["values"] if output_tag not in continuous_neutrality_measures[input_tag]: continuous_neutrality_measures[input_tag][output_tag] = {} continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"] = {} @@ -290,9 +295,12 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) if input_bit == 0: continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"] = [ {} for _ in range(len(continuous_neutrality_measures_output_values))] - ContinuousDiffusionAnalysis.incrementing_counters(continuous_neutrality_measures_output_values, continuous_neutrality_measures, - cipher_input_size, input_tag, - output_tag, input_bit) + ContinuousDiffusionAnalysis.incrementing_counters( + continuous_neutrality_measures_output_values, + continuous_neutrality_measures, + cipher_input_size, input_tag, + output_tag, input_bit + ) i += 1 for it in continuous_neutrality_measures.keys(): @@ -329,6 +337,7 @@ def continuous_diffusion_tests(self, is_continuous_neutrality_measure=True, is_diffusion_factor=True): continuous_diffusion_tests = {"input_parameters": { + 'test_name': 'continuous_diffusion_tests', 'continuous_avalanche_factor_number_of_samples': continuous_avalanche_factor_number_of_samples, 'threshold_for_avalanche_factor': threshold_for_avalanche_factor, 'continuous_neutral_measure_beta_number_of_samples': continuous_neutral_measure_beta_number_of_samples, @@ -351,8 +360,8 @@ def continuous_diffusion_tests(self, continuous_neutral_measure_gf_number_samples) if is_continuous_avalanche_factor: - continuous_avalanche_factor_output = self.continuous_avalanche_factor(threshold_for_avalanche_factor, - continuous_avalanche_factor_number_of_samples) + continuous_avalanche_factor_output = self.continuous_avalanche_factor( + threshold_for_avalanche_factor, continuous_avalanche_factor_number_of_samples) inputs_tags = list(continuous_neutrality_measure_output.keys()) output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) @@ -380,17 +389,20 @@ def continuous_diffusion_tests(self, def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, input_bit=None, output_bits=None): if output_bits is None: - output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes(self.cipher.as_python_dictionary()) + output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( + self.cipher.as_python_dictionary()) if input_bit is None: input_bit = self.init_input_bits() beta_sample_outputs = self.generate_beta_sample_output(beta_number_of_samples, gf_number_samples, - input_bit, output_bits) + input_bit, output_bits) inputs_tags = list(beta_sample_outputs[0].keys()) output_tags = list(beta_sample_outputs[0][inputs_tags[0]].keys()) - final_result = ContinuousDiffusionAnalysis.init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags) - final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, - final_result) + final_result = ContinuousDiffusionAnalysis.init_final_result_structure( + input_bit, inputs_tags, output_bits, output_tags) + final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from(beta_sample_outputs, + inputs_tags, output_tags, + final_result) for inputs_tag in inputs_tags: for output_tag in output_tags: @@ -458,8 +470,8 @@ def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, numb for input_tag in input_tags: continuous_avalanche_factor_by_tag_input_dict = \ self._compute_conditional_expected_value_for_continuous_neutrality_measure(input_bit, - beta, number_of_samples, - input_tag, output_bits) + beta, number_of_samples, + input_tag, output_bits) continuous_diffusion_tests = { **continuous_diffusion_tests, **continuous_avalanche_factor_by_tag_input_dict } From c982b92ce389be6e395e13faf1eac8ef6e67c9ed Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 19 Feb 2024 16:50:39 +0400 Subject: [PATCH 061/179] fixed inconsistencies in cipher_test.py and report_test.py due to conversion of agebraic tests to an object --- tests/unit/cipher_modules/report_test.py | 44 +-- tests/unit/cipher_test.py | 400 ++++++++++++----------- 2 files changed, 236 insertions(+), 208 deletions(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index a9b1a4e1..709a13d4 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -8,21 +8,22 @@ from claasp.cipher_modules.report import Report from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests +from claasp.cipher_modules.algebraic_tests import AlgebraicTest -def test_print_report(): +def test_print_report(): speck = SpeckBlockCipher(number_of_rounds=2) sat = SatXorDifferentialModel(speck) plaintext = set_fixed_variables( - component_id = 'plaintext', - constraint_type = 'not_equal', - bit_positions = range(32), - bit_values = (0,) * 32) + component_id='plaintext', + constraint_type='not_equal', + bit_positions=range(32), + bit_values=(0,) * 32) key = set_fixed_variables( - component_id = 'key', - constraint_type = 'equal', - bit_positions = range(64), - bit_values = (0,) * 64) + component_id='key', + constraint_type='equal', + bit_positions=range(64), + bit_values=(0,) * 64) trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) trail_report = Report(speck, trail) trail_report.print_report() @@ -32,22 +33,24 @@ def test_print_report(): avalanche_report.print_report() blackbox_results = speck.neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(speck,blackbox_results) + blackbox_report = Report(speck, blackbox_results) blackbox_report.print_report() - algebraic_results = speck.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTest(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) algebraic_report.print_report() #### Adding tests for code coverage, currently not accurate as the statistical tests are not actually performed on Speck - nist_result = StatisticalTests.run_nist_statistical_tests_tool_interactively(f'claasp/cipher_modules/statistical_tests/input_data_example', -10000, 10, 1) - parsed_result_nist = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') + nist_result = StatisticalTests.run_nist_statistical_tests_tool_interactively( + f'claasp/cipher_modules/statistical_tests/input_data_example', + 10000, 10, 1) + parsed_result_nist = StatisticalTests.parse_report( + f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') nist_report = Report(speck, parsed_result_nist) nist_report.print_report() -def test_save_as_latex_table(): +def test_save_as_latex_table(): simon = SimonBlockCipher(number_of_rounds=2) smt = SmtXorDifferentialModel(simon) @@ -87,18 +90,18 @@ def test_save_as_DataFrame(): bit_values=(0,) * 64) trail = smt.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - algebraic_results = speck.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTest(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) algebraic_report.save_as_DataFrame() trail_report = Report(speck, trail) trail_report.save_as_DataFrame() -def test_save_as_json(): +def test_save_as_json(): simon = SimonBlockCipher(number_of_rounds=3) neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(simon,neural_network_blackbox_distinguisher_tests_results) + blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) milp = MilpXorDifferentialModel(simon) plaintext = set_fixed_variables( @@ -116,7 +119,7 @@ def test_save_as_json(): trail_report = Report(simon, trail) - algebraic_results = simon.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTest(simon).algebraic_tests(timeout=1) algebraic_report = Report(simon, algebraic_results) algebraic_report.save_as_json() @@ -125,10 +128,9 @@ def test_save_as_json(): def test_clean_reports(): - simon = SimonBlockCipher(number_of_rounds=2) neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) blackbox_report.save_as_json() - blackbox_report.clean_reports() \ No newline at end of file + blackbox_report.clean_reports() diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..470a14ef 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -41,7 +41,7 @@ from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network - +from claasp.cipher_modules.algebraic_tests import AlgebraicTest EVALUATION_PY = 'evaluation.py' DICTIONARY_EXAMPLE_PY = "claasp/ciphers/dictionary_example.py" @@ -52,23 +52,27 @@ def test_algebraic_tests(): speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) - d = speck.algebraic_tests(5) - assert d == {'input_parameters': {'timeout': 5, 'test_name': 'algebraic_tests'}, 'test_results': {'number_of_variables': [304, 800], - 'number_of_equations': [240, 688], - 'number_of_monomials': [304, 800], - 'max_degree_of_equations': [1, 1], - 'test_passed': [False, False]}} + d = AlgebraicTest(speck).algebraic_tests(5) + assert d == { + 'input_parameters': {'cipher.id': 'speck_p32_k64_o32_r2', 'timeout': 5, 'test_name': 'algebraic_tests'}, + 'test_results': {'number_of_variables': [304, 800], + 'number_of_equations': [240, 688], + 'number_of_monomials': [304, 800], + 'max_degree_of_equations': [1, 1], + 'test_passed': [False, False]}} aes = AESBlockCipher(word_size=4, state_size=2, number_of_rounds=2) - d = aes.algebraic_tests(5) - compare_result = {'input_parameters': {'timeout': 5}, + d = AlgebraicTest(aes).algebraic_tests(5) + compare_result = {'input_parameters': {'cipher.id': 'aes_block_cipher_k16_p16_o16_r2', + 'timeout': 30, + 'test_name': 'algebraic_tests'}, 'test_results': {'number_of_variables': [352, 592], - 'number_of_equations': [406, 748], + 'number_of_equations': [454, 796], 'number_of_monomials': [520, 928], 'max_degree_of_equations': [2, 2], - 'test_passed': [False, True]}} + 'test_passed': [False, False]}} - assert d != compare_result # skipped (need to be fixed) + assert d == compare_result def test_analyze_cipher(): @@ -86,7 +90,10 @@ def test_analyze_cipher(): "avalanche_entropy_criterion_threshold": 0.1}, "component_analysis_tests": {"run_tests": True}} analysis = sp.analyze_cipher(tests_configuration) - assert analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] + assert \ + analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31][ + "vectors"][ + 0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] def test_avalanche_probability_vectors(): @@ -176,7 +183,10 @@ def test_delete_generated_evaluate_c_shared_library(): def test_diffusion_tests(): speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) d = speck.diffusion_tests(number_of_samples=100) - assert d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + assert d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][0] == [0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0] aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=4) d = aes.diffusion_tests(number_of_samples=1000) @@ -249,37 +259,46 @@ def test_find_good_input_difference_for_neural_distinguisher(): assert str(type(scores)) == "" - def test_neural_staged_training(): cipher = SpeckBlockCipher() input_differences = [0x400000, 0] - data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds = nr, samples = samples) - neural_network = get_neural_network('gohr_resnet', input_size = 64, word_size = 16) - results_gohr = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) + data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds=nr, + samples=samples) + neural_network = get_neural_network('gohr_resnet', input_size=64, word_size=16) + results_gohr = cipher.train_neural_distinguisher(data_generator, starting_round=5, neural_network=neural_network, + training_samples=10 ** 5, testing_samples=10 ** 5, epochs=1) assert results_gohr[5] >= 0 - neural_network = get_neural_network('dbitnet', input_size = 64) - results_dbitnet = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) + neural_network = get_neural_network('dbitnet', input_size=64) + results_dbitnet = cipher.train_neural_distinguisher(data_generator, starting_round=5, neural_network=neural_network, + training_samples=10 ** 5, testing_samples=10 ** 5, epochs=1) assert results_dbitnet[5] >= 0 + def test_train_gohr_neural_distinguisher(): cipher = SpeckBlockCipher() input_differences = [0x400000, 0] number_of_rounds = 5 - result = cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size=16, number_of_epochs=1, training_samples = 10**3, testing_samples = 10**3) + result = cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size=16, + number_of_epochs=1, training_samples=10 ** 3, + testing_samples=10 ** 3) assert result > 0 + def test_run_autond_pipeline(): cipher = SpeckBlockCipher() result = cipher.run_autond_pipeline(optimizer_samples=10 ** 3, optimizer_generations=1, - training_samples=10 ** 2, testing_samples=10 ** 2, number_of_epochs=1, verbose=False) + training_samples=10 ** 2, testing_samples=10 ** 2, number_of_epochs=1, + verbose=False) assert not result is {} + def test_get_differential_dataset(): diff_value_plain_key = [0x400000, 0] cipher = SpeckBlockCipher() x, y = get_differential_dataset(cipher, diff_value_plain_key, 5, samples=10) assert x.shape == (10, 64) - assert y.shape == (10, ) + assert y.shape == (10,) + def test_get_model(): speck = SpeckBlockCipher(number_of_rounds=1) @@ -288,6 +307,7 @@ def test_get_model(): assert speck.get_model("smt", "xor_linear").__class__.__name__ == "SmtXorLinearModel" assert speck.get_model("milp", "xor_linear").__class__.__name__ == "MilpXorLinearModel" + def test_generate_bit_based_c_code(): bit_based_c_code = FancyBlockCipher().generate_bit_based_c_code() assert bit_based_c_code[:8] == '#include' @@ -299,7 +319,7 @@ def test_generate_bit_based_c_code(): ### Replaced by equivalent functions in Report class -#def test_generate_csv_report(): +# def test_generate_csv_report(): # tii_path = inspect.getfile(claasp) # tii_dir_path = os.path.dirname(tii_path) # identity = IdentityBlockCipher() @@ -360,10 +380,12 @@ def test_get_round_from_component_id(): def test_impossible_differential_search(): speck6 = SpeckBlockCipher(number_of_rounds=6) - #impossible_differentials = speck6.impossible_differential_search("smt", "yices-smt2") + # impossible_differentials = speck6.impossible_differential_search("smt", "yices-smt2") impossible_differentials = speck6.impossible_differential_search("cp", "chuffed") - assert ((0x400000, 1) in impossible_differentials) and ((0x400000, 2) in impossible_differentials) and ((0x400000, 0x8000) in impossible_differentials) + assert ((0x400000, 1) in impossible_differentials) and ((0x400000, 2) in impossible_differentials) and ( + (0x400000, 0x8000) in impossible_differentials) + def test_is_algebraically_secure(): identity = IdentityBlockCipher() @@ -400,7 +422,8 @@ def test_is_spn(): def test_neural_network_blackbox_distinguisher_tests(): results = SpeckBlockCipher(number_of_rounds=5).neural_network_blackbox_distinguisher_tests(nb_samples=10) assert results['input_parameters'] == \ - {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, 'test_name': 'neural_network_blackbox_distinguisher_tests'} + {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, + 'test_name': 'neural_network_blackbox_distinguisher_tests'} def test_neural_network_differential_distinguisher_tests(): @@ -554,12 +577,14 @@ def test_print_as_python_dictionary(): } """ + def test_inputs_size_to_dict(): speck = SpeckBlockCipher(number_of_rounds=1, key_bit_size=64, block_bit_size=32) input_sizes = speck.inputs_size_to_dict() assert input_sizes['key'] == 64 assert input_sizes['plaintext'] == 32 + def test_vector_check(): speck = SpeckBlockCipher(number_of_rounds=22) key1 = 0x1918111009080100 @@ -576,6 +601,7 @@ def test_vector_check(): output_list.append(0xFFFFFFFF) assert speck.test_vector_check(input_list, output_list) is False + def test_zero_correlation_linear_search(): speck6 = SpeckBlockCipher(number_of_rounds=6) zero_correlation_linear_approximations = speck6.zero_correlation_linear_search("smt", "yices-smt2") @@ -583,163 +609,163 @@ def test_zero_correlation_linear_search(): def test_cipher_inverse(): - key = 0xabcdef01abcdef01 - plaintext = 0x01234567 - cipher = SpeckBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x2b7e151628aed2a6abf7158809cf4f3c - plaintext = 0x6bc1bee22e409f96e93d7e117393172a - cipher = AESBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([key, plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x0e2ddd5c5b4ca9d4 - plaintext = 0xb779ee0a - cipher = TeaBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x98edeafc899338c45fad - plaintext = 0x42c20fd3b586879e - cipher = PresentBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - plaintext = 0 - cipher = AsconSboxSigmaPermutation(number_of_rounds=1) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - key = 0x1211100a09080201 - plaintext = 0x6120676e - cipher = SimonBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x687ded3b3c85b3f35b1009863e2a8cbf - plaintext = 0x42c20fd3b586879e - cipher = MidoriBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0xffffeeee - plaintext = 0x5778 - cipher = SkinnyBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - plaintext = 0x1234 - cipher = SpongentPiPermutation(number_of_rounds=1) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - key = 0x1de1c3c2c65880074c32dce537b22ab3 - plaintext = 0xbd7d764dff0ada1e - cipher = XTeaBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - plaintext = 0x1234 - cipher = PhotonPermutation(number_of_rounds=1) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - key = 0x0f1e2d3c4b5a69788796a5b4c3d2e1f0 - plaintext = 0x101112131415161718191a1b1c1d1e1f - cipher = LeaBlockCipher(block_bit_size=128, key_bit_size=128, number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - plaintext = 0x1234 - cipher = SparklePermutation(number_of_steps=1) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - plaintext = 0x1234 - cipher = XoodooInvertiblePermutation(number_of_rounds=1) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - key = 0x000102030405060708090A0B0C0D0E0F - plaintext = 0x000102030405060708090A0B0C0D0E0F - cipher = GiftSboxPermutation(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x1de1c3c2c65880074c32dce537b22ab3 - plaintext = 0xbd7d764dff0ada1e - cipher = RaidenBlockCipher(number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - key = 0x000000066770000000a0000000000001 - plaintext = 0x0011223344556677 - cipher = HightBlockCipher(block_bit_size=64, key_bit_size=128, number_of_rounds=2) - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - cipher = DESBlockCipher(number_of_rounds=4) - key = 0x133457799BBCDFF1 - plaintext = 0x0123456789ABCDEF - ciphertext = cipher.evaluate([key, plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - cipher = SalsaPermutation(number_of_rounds=2) - plaintext = 0xffff - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - cipher = BEA1BlockCipher(number_of_rounds=2) - key = 0x8cdd0f3459fb721e798655298d5c1 - plaintext = 0x47a57eff5d6475a68916 - ciphertext = cipher.evaluate([key, plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - plaintext = 0x1234 - cipher = KeccakInvertiblePermutation(number_of_rounds=2, word_size=8) - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - cipher = ChachaPermutation(number_of_rounds=3) - plaintext = 0x0001 - ciphertext = cipher.evaluate([plaintext]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext]) == plaintext - - cipher = LBlockBlockCipher(number_of_rounds=2) - key = 0x012345689abcdeffedc - plaintext = 0x012345689abcdef - ciphertext = cipher.evaluate([plaintext, key]) - cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) - key = 0x0123456789abcdeffedcba9876543210 - plaintext = 0x0000000000000000 - tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 - ciphertext = qarmav2.evaluate([key, plaintext, tweak]) - cipher_inv = qarmav2.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext + key = 0xabcdef01abcdef01 + plaintext = 0x01234567 + cipher = SpeckBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x2b7e151628aed2a6abf7158809cf4f3c + plaintext = 0x6bc1bee22e409f96e93d7e117393172a + cipher = AESBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([key, plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x0e2ddd5c5b4ca9d4 + plaintext = 0xb779ee0a + cipher = TeaBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x98edeafc899338c45fad + plaintext = 0x42c20fd3b586879e + cipher = PresentBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + plaintext = 0 + cipher = AsconSboxSigmaPermutation(number_of_rounds=1) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + key = 0x1211100a09080201 + plaintext = 0x6120676e + cipher = SimonBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x687ded3b3c85b3f35b1009863e2a8cbf + plaintext = 0x42c20fd3b586879e + cipher = MidoriBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0xffffeeee + plaintext = 0x5778 + cipher = SkinnyBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + plaintext = 0x1234 + cipher = SpongentPiPermutation(number_of_rounds=1) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + key = 0x1de1c3c2c65880074c32dce537b22ab3 + plaintext = 0xbd7d764dff0ada1e + cipher = XTeaBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + plaintext = 0x1234 + cipher = PhotonPermutation(number_of_rounds=1) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + key = 0x0f1e2d3c4b5a69788796a5b4c3d2e1f0 + plaintext = 0x101112131415161718191a1b1c1d1e1f + cipher = LeaBlockCipher(block_bit_size=128, key_bit_size=128, number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + plaintext = 0x1234 + cipher = SparklePermutation(number_of_steps=1) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + plaintext = 0x1234 + cipher = XoodooInvertiblePermutation(number_of_rounds=1) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + key = 0x000102030405060708090A0B0C0D0E0F + plaintext = 0x000102030405060708090A0B0C0D0E0F + cipher = GiftSboxPermutation(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x1de1c3c2c65880074c32dce537b22ab3 + plaintext = 0xbd7d764dff0ada1e + cipher = RaidenBlockCipher(number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + key = 0x000000066770000000a0000000000001 + plaintext = 0x0011223344556677 + cipher = HightBlockCipher(block_bit_size=64, key_bit_size=128, number_of_rounds=2) + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + cipher = DESBlockCipher(number_of_rounds=4) + key = 0x133457799BBCDFF1 + plaintext = 0x0123456789ABCDEF + ciphertext = cipher.evaluate([key, plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + cipher = SalsaPermutation(number_of_rounds=2) + plaintext = 0xffff + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + cipher = BEA1BlockCipher(number_of_rounds=2) + key = 0x8cdd0f3459fb721e798655298d5c1 + plaintext = 0x47a57eff5d6475a68916 + ciphertext = cipher.evaluate([key, plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + plaintext = 0x1234 + cipher = KeccakInvertiblePermutation(number_of_rounds=2, word_size=8) + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + cipher = ChachaPermutation(number_of_rounds=3) + plaintext = 0x0001 + ciphertext = cipher.evaluate([plaintext]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext]) == plaintext + + cipher = LBlockBlockCipher(number_of_rounds=2) + key = 0x012345689abcdeffedc + plaintext = 0x012345689abcdef + ciphertext = cipher.evaluate([plaintext, key]) + cipher_inv = cipher.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, key]) == plaintext + + qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) + key = 0x0123456789abcdeffedcba9876543210 + plaintext = 0x0000000000000000 + tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 + ciphertext = qarmav2.evaluate([key, plaintext, tweak]) + cipher_inv = qarmav2.cipher_inverse() + assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext From 5e957cfd18dccc9317ee398b454e93c7650dac51 Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 19 Feb 2024 17:26:51 +0400 Subject: [PATCH 062/179] fixed a typo in algebraic tests --- tests/unit/cipher_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 470a14ef..93c8b571 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -64,7 +64,7 @@ def test_algebraic_tests(): aes = AESBlockCipher(word_size=4, state_size=2, number_of_rounds=2) d = AlgebraicTest(aes).algebraic_tests(5) compare_result = {'input_parameters': {'cipher.id': 'aes_block_cipher_k16_p16_o16_r2', - 'timeout': 30, + 'timeout': 5, 'test_name': 'algebraic_tests'}, 'test_results': {'number_of_variables': [352, 592], 'number_of_equations': [454, 796], From d162473a45b712fa2fa0e6911c2665151d1ba4af Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 18:54:29 +0400 Subject: [PATCH 063/179] Fixing Sonar Security Hotspots --- claasp/cipher_modules/continuous_tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index 100242ba..45ab2498 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -44,7 +44,7 @@ def _create_list_fixing_some_inputs(tag_input): lst_input.append([]) else: lst_input.append( - [Decimal(max_bias[random.randrange(0, 2)]) for _ in range(self.cipher.inputs_bit_size[i])]) + [Decimal(max_bias[random.choice([0, 1])]) for _ in range(self.cipher.inputs_bit_size[i])]) i += 1 return lst_input From a2201bedf78f7ac4a5fd681c53cd4af75e341f8e Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 19:31:16 +0400 Subject: [PATCH 064/179] Fixing continuous tests report --- claasp/cipher_modules/continuous_tests.py | 5 +++++ tests/unit/cipher_modules/continuous_tests_test.py | 11 ++++++++++- tests/unit/cipher_test.py | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index 45ab2498..a938e611 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -383,6 +383,11 @@ def continuous_diffusion_tests(self, **continuous_avalanche_factor_output[input_tag][output_tag], **continuous_diffusion_factor_output[input_tag][output_tag], } + for input_tag in inputs_tags: + for output_tag in output_tags: + for test in continuous_diffusion_tests["test_results"][input_tag][output_tag].keys(): + continuous_diffusion_tests["test_results"][input_tag][output_tag][test] = [ + continuous_diffusion_tests["test_results"][input_tag][output_tag][test]] return continuous_diffusion_tests diff --git a/tests/unit/cipher_modules/continuous_tests_test.py b/tests/unit/cipher_modules/continuous_tests_test.py index 6b66e130..087fb257 100644 --- a/tests/unit/cipher_modules/continuous_tests_test.py +++ b/tests/unit/cipher_modules/continuous_tests_test.py @@ -1,4 +1,5 @@ from claasp.cipher_modules.continuous_tests import ContinuousDiffusionAnalysis +from claasp.cipher_modules.report import Report from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher @@ -7,4 +8,12 @@ def test_continuous_tests(): cda = ContinuousDiffusionAnalysis(speck) cda_for_repo = cda.continuous_diffusion_tests() test_results = cda_for_repo['test_results'] - assert test_results['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0] > 0.01 + assert test_results['plaintext']['cipher_output']['continuous_neutrality_measure'][0]['values'][0] > 0.01 + + +def test_continuous_tests_report(): + speck = SpeckBlockCipher(number_of_rounds=2) + cda = ContinuousDiffusionAnalysis(speck) + cda_for_repo = cda.continuous_diffusion_tests() + cda_repo = Report(speck, cda_for_repo) + cda_repo.print_report() diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 3a6468ff..74e72063 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -149,8 +149,8 @@ def test_continuous_diffusion_factor(): def test_continuous_diffusion_tests(): speck_cipher = SpeckBlockCipher(number_of_rounds=1) - output = speck_cipher.continuous_diffusion_tests() - assert output["test_results"]['plaintext']['round_key_output']['continuous_neutrality_measure']["values"][0] == 0.0 + output = speck_cipher.continuous_diffusion_tests()["test_results"] + assert output['plaintext']['round_key_output']['continuous_neutrality_measure'][0]["values"][0] == 0.0 def test_continuous_neutrality_measure_for_bit_j(): From af3ad4578fc9a780139e34a0a637a65ed551f450 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 20:26:33 +0400 Subject: [PATCH 065/179] Fixing continuous tests report --- claasp/cipher_modules/continuous_tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_tests.py index a938e611..2f0e16da 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_tests.py @@ -43,8 +43,9 @@ def _create_list_fixing_some_inputs(tag_input): if i == index_of_tag_input: lst_input.append([]) else: + import secrets lst_input.append( - [Decimal(max_bias[random.choice([0, 1])]) for _ in range(self.cipher.inputs_bit_size[i])]) + [Decimal(max_bias[secrets.choice([0, 1])]) for _ in range(self.cipher.inputs_bit_size[i])]) i += 1 return lst_input From 7413315f20b2310ddfbb9998978e27b146a97bec Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Mon, 19 Feb 2024 21:08:55 +0400 Subject: [PATCH 066/179] FEATURE/Changed polling time for Gurobi Backend --- docker/Dockerfile | 3 ++- .../sage_numerical_backends_gurobi-9.3.1.tar.gz | Bin 0 -> 29744 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz diff --git a/docker/Dockerfile b/docker/Dockerfile index eb4c0959..b35ad1bd 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -76,7 +76,6 @@ RUN sage -pip install bitstring==4.0.1 \ progress==1.6 \ pycosat==0.6.3 \ pygments==2.12.0 \ - sage-numerical-backends-gurobi==9.3.1 \ sage-package==0.0.7 \ setuptools==59.6.0 \ sphinx==4.5.0 \ @@ -301,6 +300,8 @@ RUN rm -rf /opt/MiniZincIDE-2.6.4-bundle-linux-x86_64/lib/libsystemd.so.0 RUN rm -rf /opt/MiniZincIDE-2.6.4-bundle-linux-x86_64/lib/libcrypt.so.1 RUN sage -pip install plotly -U kaleido +COPY required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz /opt/ +RUN cd /opt/ && sage -pip install sage_numerical_backends_gurobi-9.3.1.tar.gz WORKDIR /home/sage/tii-claasp diff --git a/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz b/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..711d65fb300d5457012ee3507cbfef2bddd2daf7 GIT binary patch literal 29744 zcmV(X_Dp5 zq;RPzd}52Qu?B7M@!{dU`+sn9_+angcz5^k@Z<;^zq_}8aJ2V8?|uztwm<*R_y6?t zR6oxfo3^f5>6c^%`X|%mW>#3Q=YCGp$Gcmjx9~O-c7nypTr0Ve$KkJ(R z^$!1BUe>GBq)U5wi2;~5p-7+}|5LTLtf#8Y%e-3n$H_+z7yP{?{NwYv5Bz_Tw_nlu zAAHgO4~`Bb|L-5|9_=0D`QF~i?%^N)|66>%(N9;cousa;k$*Ei)vhN0{dfNU{N+n6 zd3oUTQ#gIS`djL8 zBQG3kut)T<}2 z&tIHfyeEO)uFk`V2EPH8bojo~?a~6Eu--J5&^JxqLM?i>(niaA+NVukw|d^V5)UbE z78Hd+WoGAuwg$8{>%|jYDA-Pqbe z^=jFc1s+a0jo@d+KjX0Vx8yOtlQF5vc}vuM@~JFT|DJw%EW_E@#_}~;u4)p~=VSoT zBxYVRp(*k9zA=?A82FL-m1KSx&!+d$R12ql+s)_S<1yq_T=QIF{g$#7$f<0W_s2+o#ER)v?Xcc)``US@V~x&kC}vAxUGRr7q22s`!4R@badasz0Yyq90(HNAmF>L+RHnhaVZo2yr~ znaay=j=uYL3_H`ghYcWxK%fkPgDo>HI)LrBc}+|};pr72{jdORr)nElBuxKDcLSGi z#xx)`@EySU)D?x9xrX(FH*>u-*Te!j3Kb#~GUt4rr#iDWty`rz91aD*@OP#kW>!w8 zjq`pINoe2IWVz!YtS-$;2dCep+Aa;;%vFzCedC&|F)dTUw1|3~K>t_Pk^+WvA>vR8 zyt`*__0hNcr&I%F6c%i0iL5K^;8{}V8Ji!bzcTF-;kTjHCA=dzkl%?(oK@F(<0`UFAVM~e zYx;@*5mx!<+3TOC^m{ThSMp50v3;*#w;I;Ru_^i&T!3GM=lpB@j#=+qZSR=V;PGHo zc}0%0eiIxz_{t837~8I}D0>eDml}^)g0n0~$cvi!Cx;e_ zc)r6z+I4N+wOb&U**V)8}0Nk+5HDjW5-I$H#ku{|--1_6`pi z|Lq<9f&YGs&o|sm$xBM(lzv(YN750Pzzw@P@k{mM-J4fBSoM?w#bnVnZkDSj?|#rf ze0cZf>G|bPXYVe~-@N|Icgb$DtDZc6t`jX|EBI=YBiBx5h+c?`K1`pgcOPDBWX`3Y z6nc{CN5~49(I#zqDNWN;9P9Kh@MP7BEjt@_Dn(5DTsQ>(D9-&1Q$ma}w@N{SMF$a-LdUnZh zh9kuQhNV1CnWN+H`qos!UQmw&KyhI;bSm zm*>yUUSFL3i|GzOpZEX6gZ-oJ{_pO|!5{tK-{hn3`26ttgZ|;{_1U{8FZJ6GPhlWB z7>T-TI6glGRJT6{NUf~i`|i6vrSvn0oSH9|t=@Sy!ozRB8}lpuqOn$AxOsa+_0bF0 z!R-a-omXixR{Ds>nCc3ysxMlM21a|4&jDLr6wU!DK6SpO@volf-Tl42-O1j;?w7?Y-8N5h+R77I~JcyxxPOL|Fgkvqw#d~}hgsAO%AHO2^! zE&LpH1i7++UO+&CeSoi7qV7`;f8I9MlrtbQjCzkcE|8awb?FFQM0L>r8ETwGC2Y6m z3J-4pO;@Ny)EwH#P&MKWSFkJ*^JS^z(o zDOlRMaHS2??laR3;kYzq7_XwTUs@D{jlM^)aAuK=wEo$3D0nKCb)|(D)_h>tV*{OI z)B5YuR{Dm{J*>GRWw25sBV&3+3^jIcnX6i$A>+Os83}B`EeWDCs(i2`R8rdfnuv5wN~BRw z!iY#=D2bsi6(_=G@#|nJjR}UjVT_ng=T6`;6)uTLg|h8N_>Fo$6&s4=t}1ua)6HDy z@IVG?9I#6}n%YwF!u!Wj&-1QON!aTW$sd|ZxkVx5p^O>e_k{eOoPZs}koV#Vtn6hFA8~3I*FfY7S1Iq)QCoqYg55I&- zU`!c}0hxwE5K|R{!MD6oacjtj?Oj#^yGLGYZ>T+GYyZ98*&A`LlGM4Wb(p2v*&jiF z@bh3MgKTxP%%N1$k>{6%UBJyb3wqAbAq|d)I}Dmr&O*G6!}XZ!CxwTGXfLdx9pmVU za2rG+s^lyXNDQ96F&ca@IK>LLF*A2$xYRw%e7_YEO)H1_4JDx!FUitv}{NfmTNNj7iq`>aj%jPG+`5DF4$%^9@cni zGQu)CEvyL~LIpt}alcs)p)xVeU|Np?+Mp;eJ-YQc!(c6m5Ui&C?>(3E6UxtAq9)NK zM}Y+6b@&RluEg3>0RwYK2=E^K_jxS+{_NeW3;pEvbN%ei>*we1QM6v@7jNF-*S9~P zzy4vYpPyg6e|P@$1HIybuiiXAe{ufo2|b`CcN0cYcfqD$o2+?=BbbKTmmy3LO2i&| zWk^qyi0i@x<0T7O$DpO7UNlP9RlvT~D8&}6gGi>jJ{gHZBapruYb3G<58n!Z4*{<& zv^Z7_V0!jBM+{_;<}2-$(GOXanGx6Kl_ND(S|mMfa~65|?NkGAVXg@y2-#$@ia(-hf-Z53c zQ9J6+0-XMcFo~!zZ>d|}uFpFJ$aBj*<0V{2h7WifURNsajD9#={UO27Gm7iMO*r0} zENd*sOyl)KB$9_P?sp_)|0A7( zdNdV7p>wX9uDYfA5TPUNvDrAlx7e+fbGE@0H306eBJ4fq1!-?NA#hC1TTYMqmZ7P* zGT$zeUO!hT;iO?^0oFN+LC!lk9wq9pf_8LoWKCzoxq+uuViM|w%$$|9u$Ks;F{@uw z(MI4F$UO2xP(#~0MB0R*^NKyBL`vv@%HVv6`F0J46{)7q)6R9ikkt`$IIzQZ@uVh4 zN49|w3>X5F!%=GOX(93iA=1L+CA0#jBMdmzSJqN%tR)KwP*2G;AJZ3sAu5$OBB4}) zB)pk@vjla&PRtpXJjKqH;cbA%z8d#p47W0ZkE#VS1_XttdFwdDk`#}q}X z=5B+D5i>+KC6NsyI!=X0j#P3HgxgbQ2EV<-E@2u# z-=(!;BqD{kgQWhwq-Zl*R|KiyYlv8>2as}ZPdFL6WyL~9a_?YrOv6)LWuJ}(C+k~c zPB{6mBF<`i!;?_~D$H*2!L~^X=*bTB1?2?K3UzK?F_{}AXMW3QtZDnS&dgg;-%ys8M%jBz91o5Wh*NIGw|%?}dg5F}xMYlWqpw}jQGb7qqSv>M zudhi+U&|-ZcO8UgO$>hn?j&lmO;eF_XOcVkJW}5lVVirZASIVZ^s_&r6y;`oOD6Wi zv3qIPa=hV7O}Eppx`-aP$2{z722uB6C6Uybpq~ND@4KfZsAH8q>o|yu?R1(huiV4TM(jAy{ zE3x7mj);_~+HQ3_Vi$pu9?kFh8$zuwJ1@)I<5SaH9aZIg3sXj1bhDTpW}^LoTs98N z=Ifv$4Kd+`j|gQu%06?_AUc=}UE9sVOl}j)*^a4(OiM$qcYRr1@#?Z~1GiSgd0dF+S51?UgHGCR+!T>7q5W`*$*hv`bS7gIx4i}_3Lwwr#Z z!X+Cs1P*J7lEHOU!gh+UnPSIn#IoaC@(kUDkNYTVgmxUA?D0Wi-|6Ww?Qq%-RqfI( z43wdx85bam_Gz^CgwlLu1W>}F8J+Hg+xy`73TA8zfhL~9_$WxIkfR!@S^dhlfNtDl zqQJW;KNU*QYF9CCVV?V?R6y+}c&OZr-OwJA{QMSL7*HpOHShpBxe0ADHgx)H08r

&j({t%@mbIln8@P*wt!~jk84MW?*N}mXNZLTstU>k1Ep&meL(sATC6pK{8L$0R zQyZ7dr;zDmG#?-pI@qN468#ZEs~FC_E(0o4B$5!cBu`=R`JMS(fhzQUI9l`!6E?#2DoApJUo-y_u-X*GT zC=^EqP!7_W7yg@fg#?x&r#}JUtviyfi`Ct*)+CFp+pQAJ=hTvn=hSRD;pPR$+FpFZ z#BAYooVlO^Uz)a?r@En`hX{Vp#!xq?_1h;OatntFUK5M5hR^Gk`7CdxQD2yw{vbcp ziMQnuIt~Bv%9t+02t&m92EN{E-S33<;=L{Qk+gQ`>@n@FM%Fi>rMt1mE#p@@v8H}w zym0j2IpY(Kd-m0q61OUxaO>eXkyDg5FKxglpF{dzkhmS*Z`g96VEj}eM{kS~O~o_i z@J23;h!byi5(j7fkuP{RhoY8Fw(ULVqVYCG2v0c@L+D%1yM|AzHtwE;5^UX4f28|b zGsM;q0NAdfiX|U#C2G@?!etc!NhoabGo^i6dtf+F8bo83W2+!LN%Z+#@;Y}@;G+Gx z0ObG_?H{{r!JRz8D1+iuj-M5PC?y;l2hGEN#?u38*XSKNcrNpB^)MV=!(BV;M`Jax zLdL?ZM>Yhqot7+zM5~YQnb*2F^Wz32_w! zKS8~YZ{++}dvD&}HjX3?&)@tM7`dO7lt|R!D{Z>w6C%3?&-rAWC5jh{QhjrUFJB2>sh0Sgxe~3#U|C@ zI!Sq(A`2;(5-}TAVN2<96f)Fi@&2@>Y1}3=pD0+0$_-X#CeCO2i|=~H5G9C=Dp1W2 zsCp-qXQZu@HhV%<$Mpuz^iJFb8KleRC12@{Ut2<;!Os0If;^aaGJu*i($ zYi)@+&tD4FtA>N9kCcQT@e^*GA+di#3VEC`#*SzmZ4b&v);Y!ytvX;^bE+en2_^Ac zyukPA1`-YZ5?!(fhQxLvT|y)w!$d*PxsPA~HRuRLtCqeZvRS|^QKeTxhdP^tm%U_9 zRT+3LUw{FeJ_9l`C95kITocY9Gf2m~rYi{hD*G1^Bhg82d=gqq2r?*6LQaUUJ%@P0 z^VqIY(Uh#?u%p-tD)-6O=~l>yJ(vdjhHrqLojk4hsTxcZLn(11O>3%G)tm*mGRGwzU<{Ig5lsZA z9J4?)U=Q#_botE``mUCAQVcx42OAhKNCKkgN*7_915!%$qPTnPd4q(B0j=swlgwZ; zZPIb3r0Iok-#B!2%a>;q7SLCJ++Y(T0L=>J|8&MOXEhWF?07N8XNaC%f?=VaZ zYFAO)h)W1-JcB_aS(GK**|=x>k)@~ReHu>io2{5R>lj)20&oMF%ni8a(XhlTi^(Fe8PTdoSij}&wnMPsF`f9x!<^GH`)2SCObVl zd3)A4Vy(8clRaQ>&YDej@`mldYn;7pmayDe6HBPD&}voz0Hsdo@8-YGo5$zuw0U;a zIzIA=_vqj>>W1QVdEE=;^x2ho2TdOmv_x$;{?I~(t`f9&l^~wbapyt0$&zfx*zX7mYN6_OYd~6->A6^`gY49FEI6gUtd4iEa zKhIBSYGhdn9XbQ>jicrn%-`{OW3P4Cf+o?H_)Y8l7@8o9;|A~f{>5Pf261tAdeUy9 zP6wwDfWU;Gwc0r4$_i3SG3yH&Jzn)y+Q3B&WJir2mEPxZ$ zWCzVR&HeM%&#=5u5}IjW95uy!x6f&U4iDLJb07NKIQx~gn`b|__HiDJv*u}|1=EjK z(`RQ0<>Z(XoVtmN2Uybl8FAp^_z*{X*8JxMj3)&X5JuxIU>i=RvhKz&EodB9D8Be5 zssbOP#s3x1=!6|Le&wdxzY6q#ZicqpI#vKuMA+HbJHa{FgZ{LrThI}l5L}{z#!=&K zvt2SmB%r2+d3lMoPn-KK`~lwq^zEeB!12;_#lT;$@s1l)HArgZn%Hw< z6yW8rNSTj;D-y?HfK|m2DuN`zDK6Ni$l6kIi4(Sb;#3`y%SbRaKvv=Ev{?`yR9plU zk~xYNsB|FR^)-qjoIB#y@N`%?Q$s&A_+c6P_@MogrUX@-N5ea1sb-W;bW(LYom%2% zD&nC+lV8bVa&-mF2#HLAMPZJx$6@WUEKF8_bQOhP#8nJlAcpRx+-Zed76K=6W8aCZ zE#UG4!Ouk|$zTr{b-;wemOx7 zk;nkRBnj;L5$BWYOTz+X0`kDs;YAh)-2)-ziUDt6ahoHHuz+mGUlT0dC;LYu`@j24g`&H-=sjV_+lOumJZf7}7HwsPjO^)oh1C7B9ZThk~s>t1f zd!x%n4x>vmf>O|Jsf$TQ+f1JT^~P4nYu9M}GZphJxii>Su$(1sRRWTaJn)e)$wU8D z=%*oW6iE#{BEv#y_z4_2f{35pFu6+{-EEujgdohB<|`TBl?!Bn7&@f}jAj&lzzQsb<)r*|C-+g_Q0m7EYxfn*NTQ51gJFWG4ybh&~0}_d>IX z#fY`S@anA#-1rR_10;%Xy)4CcG;V07@8(49K8PK{?XuuhQHb$HxM5hlO2lfct!Fi1l2!bFyu0lnVl-*vb&GqwYM@(+vB7(rteOP20 zF8fD)2x|)rmd?7G4~iymW_qceT+tPbxHXB|qbueBwV`*Y3F%XuKrYacDnfCQO6{8P zc;Xs;q5wVH7<&M++=m`~APvaac4shQ_Bbe)k(QIxjlpFCriKX+z9wR@WW$FZ%v1y; z3wn1@tstG{L#t&`du;nf#@)YtBS2Yy#P390ZugFt(&%m%Y4IXQom}M4A~_J}%5c%U zKHyHC?}R)9D(pcNaFq&4{87&<;T!MG#@p zH~{J@c%H|LG%_uO-578$;D8B(7POZMifU}ee_(IeJB$G26A}E8Tb!W3IAF>79qcsE zeO+QT;MRO+L;+2ZZQ&nE7~>;wq$k+VfI&h7oIxK$g^ajiij*OUKkE9D8pKeXXTvxJ z;dPv^k|GN)bA1o*vXR*Ie5ev?a|~%lPJWz7`1xr?*Oa^`KwHTOOl?uozz3oEiXnhY zZ4)O7x6+zadV&vtrIUU($@myXdVGwe67*}w%K3ME%!&+XYC7&0YGYCSw~dXei2uF0 zvAMO4@!vMKp5lK$$|K`+N~d)Bw+NvY{*6&swLd;ae^vP3;zERB%wOgAWD@;V(Y}ee z;u4M)h(3H9g(nPO*-?B-^KLu}-zUSRg`cM0N5F3<{9E0 zpWc>R$8S!)TpRQEf4yE?-~3B$qqHQfKz>Qnr;M|qA!IP9_r;kLu-X3aPT zR%nMJ6n4Vch#eUlu_J;%hBaQA>rkgX1J2mL+hK2c=tNPR7(@&@%Z{9n_MnAE3$}j< zoQdVjYq@v8HJ2w)W`|u*r;}i(Qc;58VmClkyIv4Y(rA#dv%`)pi3(jB_EI^@(t@q1|}f>>Qr#Hx9eN@Vhg9E0>s^J)65qd&$NlsfSp0 z-jztqkI$=&gcwexh#|rK7qnYi?mr}EHlo~*r{R8? zouE$R5F-JH#&Hx@hs|7^c6sS7yXW_>$vKR71f5aPv>#Ilkb+XV(vcI{#Q?=H^8t?~ zr*f^dYP3zo3CG&fogeUhE&~U~R{x}3QkU8ZvttN-ny}QHHwtAK zU7ZYeE3?3_P^t;+OjjDRaz_bun0%bw6l4WPiyQ0XQF4d+(a0pj9)&tky&F3jGxh@u z3u*5KgYZTv(=`47GScs zHj1S%TriInuGUp_+5MtuRlqypd1=Ijz~SM(R`DE_#yMzaQYdnzB>vWl@NvIRAw@#b z6e{FIlra_E#p=vQ_z)r?zK#{qm0qI#6spNDOE~#YJ0zp8zz(<~H;j(J92P$W@T*R0 z(x?%-!$w;IZzX0|SMti0_ziWtI&KVcBdln+nnx|F#68mIQGyf3^N-B@Fmf3xne9j| zTOoD^7@d(d4D{eqDYMsdBUTMCin}Dc_O0zl$L_83!O@T1GaGMd?Q>M^a|RTut~IT| zvHgxZgB|axBU!c%=b=f(K+JVVFxT>fr{HKPFBMDLa*~2pWjfKxSMr2ykj9x3{UbW^ zX(6+=G>;|kERxs~wHwhYjf94{PZv=9Y}UF>qzXClWxA3c)_#Eimw<@gHQf7?C+WZ- zqf?dVzJFIz5J|T7)|tMW_3jTEMAzq^A;ubts<3-N6pEl{pd7GO-F zAPYr%VwJ8Tgi3GZ^(tcvcqN~b#zE~0Qc6rt6I8h$9`Y87Ui?Z6eZ+RNwS7x0m4IU6`t}}a z*Sy%uSWIckp`F>nJqs5XFR_95&hs|%-DJ>ry6U!XMYxL)HU^v~Cy;LDp3p|oC9hJv zqCh`)9%vyY+)`!h}B&UC7}QMn^M*m$D;Cg2`PR`7vQZaqJmuJ zmz$RSd%(7gZ}3Hbk-_})uy?|;1C3XB#0sv^v4n!e=DzkKKO^e5=Imo~8sNGo;moNn z3}QosF%pw*DQM%3Fphxlho?V9U&WyxkX4f6wkbq4cGNnR(_pIj%PUBbu_mQY6?#|( zS>Q@x)Gl&BmpAzd>`LLOqLmeJfp4Bjnk{>ia_FB&TPLu?d~jr+V7cVefmU2((Lg+kIMN0@fkIN?iuR=t$f-z(0SC`bMQBN_KqSRB6vmUh+MT)R^EOVg7XgG_X3SG|p zO}jg@e@D@MnDa3&N?q$f7(`F?o?} zEi$G5WIC(VJ>hzh20Ba?6OzD^Fy!Pz!+HC_wS}QcqwjluntC@H30ISbg9sy{s0b*q zlvHS3HzqfB7|=uplD@~_(~@>Q=42>qPwk62@II!i#U+05j4^2BMFQfD_d$w>tP7R1 zRAoOPWXy#|%BVS?Qs)J)|C7CvxDD&&Oh&4>D&{LxGxOlI_-(`r=r`LHSMuE~CPj2= zLg6n`C-3A2!zB--fO6bcKjnIIqpfgemX6iJ7osGva{ zykcbx$Gqdd{JV;KQ&SVf%DSGx*+9yyq7z@a7f%C9b>*7`e3gDxaLH6F)qrM5g7-E;kRsJ2H;jd^rKJ zf$7ftRt(SGWZ*sFMeGSLW(+4apYq_UVG`>?F0;K{F|XBZ&nTGH4m-sfk=ePxMO>Yw zxTH+2vXDslo{t2o4!-Z;qVfrv`@I-x`ok?JrX6p{P)T49mYtfpEoDwmQWVS&1$QCR z;XI(o@Zzdot=C@Yg7#1L9Sjs$Y&LdAlM>emmX+)FlByjvPDKvl9d>d2)A7kK$HqRU zQAh7&e}^4#?;cXmwz==-&JNpTWpo7^@N2P3n?kB-^;$B*Kw~y=C|CegYxn7Ae#Tx6YmNz$6uCcjtjjfeytUPY>#mY5as^%!=eV#F+j2AFFz{h-?R>qe9VE~8T zzrFF?zrkZx&YF#bqoz3?e6cp>+yB)zH#WAU{omI17UqAg)vH@i_J5D@d|_iU^m|7GqR1ojL$OiTGqJB_yWdUU)6}qh-9PXjkb($!bmIG z_4!6w#0G9J!IYOZlq8a2@_{*77ai6E82_wb^z(&`eT;9*xaW&5*nN$7vW<7XkkO9u zC5&{wjB!quQI0ZkU&RRLk&JJQM>Dp06eF8QHm*@tYOXPj@x_g29@%KdNHdZ#?qw9C za#FexjPYQ09>!xCxugyz)u`nG2bXQMVytGQB6^=NN?Fnv#ds*=6SYxcY+^isaf$Ke zjY*aMk4W5S<)!v!HhwS$2a~+AM#Sh9$(+c<7?m2eYwZ1h)6$Q zu#H9WpWv&w|E;apw(=#0>8oI zmnI^W99ol7o^_2wr_l8wl9|S5-UmFCzPpE7%51R$laSj`2@l0WugG?H_4*~2ns^kn>ph9j1(dds)Ig%WKbq{a;((+~o0J zH#VyE^>x_)>(wXz|8bt>_P`ncGt+GaZ7{{K}=PnA^IhUdoB$)_vknQA3%m(^a@IDlCDT9>#z<2gX zXIj{(^Ou;XJnE)zIe~3N@8Yxn5PjB2n-YgH-sP{o*}lO?(*J~l{Q=upK>ydbH)?|Z z*EZ{$P_DMIvGpYXJ<78j{Wo&CoWWT@krX;ioDs+yF3L**1cP+S^11{M2K{~uZPB#5 z%=vZ(3vCKa(_BD8O!GDM|AEe-6|UC5{Dt~`xaj2Nu`&NXIXulC(#Ygba59R1oJTh_ zfo=25Zj^)tGehAPQto3Z52-seSsSlkqs*~#dznj}#MPpT8R9z7q)gr3NG{2N*GFZ| zK7TvHVAkT*0mp{G@I*4w-T0S+JH7U8YY^;KOAOOI?Y^-_lweEPc<$z~>5}lSDKW|o z4?;$7_uQXhqM%-Ymv;15G2EG6AU2on-jvvIKmcbeH{m$|-&H@`V0t}DD6qwC7Fg8l+SH-J$^@1%+B z4cYZ$`|4Lr4L%Jj8n~e~h8|zro_`nnU}Fv;csub%ch~m7_uLBJl?tHYXIM`DPOXb+ zv11Kgdt-0p4eu%er5Ecvfd6Q8JhDH=tA7AdHC7vVD&KPkv9|#XD)-(H6ZU+U*2={H z6mpTJ+A~@Q_B{LRM|8YeV{aTkpxnpY;@+B~byjqpuin2)%6G6IVP%BE1%a_8b}4b@ zJ&+aO$HM!jKXZY~00qG}f8AwOjU{cOg~JYO3u~5?TmOMG2uohdlhTPez zeYTI@2i*P@y29;P77c`^c<~s*W^2%_N(dI5|C0avLaZM>i{$_MW>w1n^=fq!<^PQ* z`TudAkn(CWKH!$?acawrrVD;v-rVQt=KjBOalO%h<%+qy#7wCD`Zarj`m&9>w#y#) zG*qHN%-@c%73@*ixy0s=kB0d+aKxz6B*Q0F#3TsCVshK9u~VV@439yYH0uT_sIY#b z^9KgjH-#~mIdXz&NBj|#019_}<4lL;iVk>~bfV|L-!mkP!o(GraP;pf*Xrf^_70KK zk$vnfaMgtNvCOFd!PKfK4vAB@#qV*L3ccxo7wbV-v4X^-QU;( z`d{DLdh-8&lxOX)jF=MOFt34p9C)`b(sv(3H-v_RHCzZ&recZ4gGc7ebUCnQ=bU$Ju70Q>RB=E)m_t+5sYVB-&zst0-A zfmN3Di9CipUwF>$Y-(lm#n#sP=0;UGCYK$zEa-~xezqwT5}aD&GN~mf$z^%w zIsl`LEtZ`Do+4%JczKLT$6Xso7|w%vEV>(26lPsl{tk~AO+=Kf2;PQdez@tUq^UA{Na%h zf#P8LG^j+8Wq5#?fD>wTu0u!GU}Jnw4bM z%!kIY1^i!iv(D}R>KohJ>owZ{>+2g&`~NW>jsHtE&W~hbw8!sTKnQ;L8}Nf9qRBho zH5O^xLy;V1Hx}jhdG(5ZRwIS=8hZx>C0=a>uL$-(|HE6UWz}BfV2}bKz1z>!Zl926 z4+-XawVGiER{uLyWz5L%7&De|7>n*LRaY>1$r#=(3N;`a8poZ)5~f0*>35a;_Vie0C7ufV;oDfW z|ErsV|KHfG0T+Phe;xjL+W(L6C_LfqwQY}#eIB5c6EJ=`2Vfy_SRq6<^#07@cEPP|Ap({>0tPWPUkZi z!iDs|zCrZAy0NjnSqJ(L)E_=S(f>zy)_A}Um)YaV^p5mBPelGt^eo)}G1Iuo$JOJ6 z&)@&G>ekkVr2qBW=K5dozgxAZ{r?!x+Ovmzj5VPQQ9_XJQwY*(8UC}ujzK`PTo=CM z_2G{$|I_T_pMM{YEoX$v&ez#+>g*rhwaZRz-@ju&{szCz3I6{345UVTFq>0#iyc|h z>9qsm+D~+a$9@!dd4H!kY_tBrx^aR9P`051zQd0G?|JW)FV;eFT86{Pd~?8a__rOZE@j_iQu>8QXWZ4?Up2 z%@5{)zgcQ3H#w{W81w+X&Iah{_9M>00BX{oe|KEpv3QpZaZ?~-zEjLrjBY6-fbWEn zH+?${fWj{g+(E_jQCfDc?f{Gj+ah5!aDyulu{MGqKR zy@=ShwnI8P8MnJGn-K6y%<}<86jq0H0Y!>5#?zXJnr1kG%A>@1AG$M&;3uzBE5-wF zsnu+}vs|>fk2Xe=_g!w3m=lz}Z(iqw?R1}f|Dha@%FW)M?O_D2QDj=p^(0w^ZTBW# zl>h0t^c_{QP^Q3(vS-gqtbYyESL#+pF=9oua{70q*i-ep{@Jx}sn_9WvL=>e0ciB^ zsciccRZ1nQ4D)+q`KbEwW@upb%km_?OyqrQ>10wQh@E7gIVBM156y z5l$5UEjskmq{}?0|F>E;e{R|@;u*9_bmWwxv_wT%1SML_B_T|#TLFT6q zKH zILT8cPk_RY(XM_52U0K_O=Co4RWLB~ zY;dA*xE(p{Q=dF|D&SC4Qb*_IrJ~?Qny@x)g zzHgr#USz?-X+AriFWQdDhyGLAuzJQ(+id3@Y7yGZBS~hoQpaA-2MQ)8BTu zRj~F^Lr^8ARi}dtey2l0t%^!Bf~D&q%gn81;6dA69x&&;)uK01g$WmZ)p`IMJ;wZp zj)t|e{_h?k;pXc9YU|bY%`N@@r(WB7%K!H`4?4yRgYZySaNca6w_%^`&4yf6u!9-P zcDl9ti}m#|$C1d!fL@8tTl70EceL~c!++MSayblZNoUC zsLg><<`0ig@MqG+a^2&TLiR}^`<*IeLjxIeY>z3;pR{^&hQKw9Mqa-}zi~|rqxFWp zYy8~okSF;5>96PSfCp-ypS6zP#$s!jeQqCa;)-GZ2LTru#SR*2PW=+e*i>KC-+Q$6G1?a{x){GFwq0o6v>Gn6D;iJ$nm~2arz%d7;r+cjpsaZs5p1) zFY47To+J-Dl$?RL7#W5_KbWVeLJMq{pUCkpy#=cH(HR3zX+igK$_Dlj@N>a<*26`m zADr3cW+5ViD}fa`;lu%{1Z0uuz^R_d`3c)SeA)b0s+8hz%yV(-AK^oyh#0 zyu^34`;-5`#W5o>ChEL%#bV#kRsZ4JpD8{xW_LIhAL$vy2o|MOOwpyqV2DizS7C)SoU z-RgLANBD0Wk8D`ga!pwd1;uk&Q#W7Hg zl1Qm7V=(o(r5swm=J!APUYUt7}(lGmUc z0VilnNSV<;v<~CL#~m(J=Wg#gh~9!p&6b+ZZ6^ zFp+DtE<{(YF=|dI&WI)5r7<-afSZlO<}uEZ^AQAqJL$+5bsoQm$)0g^9`tB}>+IY> zcYUD6GNZ6MJ;F;M1jEydU?5=WSAoD_A(S4sj!!Snl|!)1x?KeUx?OlfK~nG?qj!>z z4tpr`3-2Ip)F3IC6GEbQ3n6v8h!fpz3?N55g4ONfp^v$IuaXnSQ@*R<2o(XIW!*!t zU_qOp;cMHfYg=_~+qP}nwr$(CZQHhuslU5pCT3=Ja&^`jU%pRfIdGKSD-WOhKAV*P zH~gBUns|UpT)s@iM#tomA)?(4Z9)LRghu-P^1!zEbXmLOJ;^Z-D&`G+D-H$HDNV-0 zcVeXD5d8$b>?)(fJUex~FkR4#b)A_xg}h<06#9!J!l#NfP5JzqF=df|4GkDg86&)X ztATd%S?Z-&B?+u-KqVbmDGsETYclLLju0I7Y8dJW2E;(?XV{{*6eG;TZc`cFFr#d{ zmyZZ{Is_NWZ_37Bj=%@JM-r}N3lrtrX%9*ODJ6jzy-N>sfJ6m=l2RX;CjD~s*j=7CThrejs`8fWs)_@`K)V#N?1x*p$=CL?Q(&x0mKrBBx}kb7UP zQbuWyq?6I75<>G_aT<1**j?{E+1U%qmajbSJ2}-=pLjb9y0#?M7fq{V-M~nSuc$=$ zZT*Lc{FnJ7AG)_jW#CfMn3=OSQH+dm4XG$AH?ji^(u1=T{|xvx(NctZddw~Xb$)yo z1Bv8wo$LKuS7kZCM*!b%?ON{&f>e{%1Dz@#dFg9iEKLfvwtEdu2w3nQdXY;|bT!s@ z7ocn!V^~(_^(>nEEnLT6&rp=T{EA{NSPI{(LhN$|w)SrBpx)dW-~{1p#yWIC>)ja) z7w`xefn_04i4j4ANI*hbb42X3t&Zl`mawEro^s3610*Sg<=qiJF zQwYN*6SpC;DxomlX$aFER|m8g&pFf=W&~0XKspmEP-r4}lbd*>W>2U5LALN)drgba zB8(m_8XTgbL-K!upGAG~A0?lnR1Zl|Qo6{&1_$ROh37;cJ?+h5f#-;BY`r$KP?4Mp ziuI5<7(Aw@RZZte7&*rBVzZTj1<2Iws}47f#b4u(PoB(*EukZfQOXNfGB_SqLCLam zq7zNmb!Qe%UY`YL0LYj_6AO}lNtq4UP*3!(J1wg)`=ysNQ6MYmUL+&*`owENl#{E9T5Jv( z(TgzPS4Zg1{{^LgZ!_#^ufQSnp+sEA0BffB4Z7Dv3%SJ_7xrJwgpr(FkRYL$GNBNb zt59*`DJJZF0%NdT_orIMiXw+WB@pd>^(~ds(35y&geS@J3g%@b5eb%(c)mcRqWES4&Q+UH1@H&i*l}VS_!Wqz59!+ zyZ^L*M^&%T_@ajuH`M5=Yk4Bc_CU3=a*UTDqMvS)P=eo=E)SN=i@kh)8MDdfYk&G)bj5_Yb_Mbav-JmUW3rWJ*<5claqlNo2AzEB)U# zJ7C|))Je?T)GfU8i_0d(DFMj{i3(YszFK9i1f38<3+*xOFq2}`*W#>}Y}4)apRC%_mT6)J)VBfB^)YZi z>$6Hq6bv%1)0y?nJVK8Y<-{3?ZO9!V9i&~|4ikf#^Y!X#$G147*@6!V!8^+AYLLh2 zzPCiO>wR@pS#G%EcuaKx3xVjY58;!dbTs+4-RO4AveKm%xCR$j{h4 zdv{P&dW8`_U~dm`mA+_H7h&w97l1{I52=jPc}p#_mCUK}sK}Vl_dUvrn)lBAd|0AM za9vm5dfE;@K@h}NRNN0MKl*KM(aup43+I4Rf>3lNQNYUzkmwk+uHqWcwx!$?$8B6< zeW7$SrRY+}3{xY6GZ0WJsc8bFO~rr``^*<&5Jo&rZCju>^Ekl!<~}IOtt~-Y8&NV4 zdbL+2V|>-h{A&B=u1pxGz&zE9nPA}AyBs^OdcyV@!$!ZI@jlcw=E zSA5-r1v>qlOWw2d&>*5b5v8Tocvq@jxYt<1(_G0#Y~$Cy)Cc|4v!eKagN56#CHS!Tueg+T!8BkHYnF&?aUa$=-gr8-|UnqkJ#sT&Aa;BUqLz3+w zsR%b7N;xTv57ZJ>Z#`7)1Gu=O^~OGXbRzeb3{B8r32$3I_Ft*MlnZq_jHI^PM@rfA zjyLA9^s6LNX`IyLSX6>-Cw`~=rgjFuXgJ7KZZOgovO{sm19MS=uf+ z2d@*5SCDQfD&ec2BtH*n%;>htSYbKmCOh&kOEwO|o##+5@#`}9B(97b)M?c`OSOr( zGdEzTFKsQN4D#5nX&6d!mP2%iixD;@WOZ#ncQIx+5`iMupulI7L_`iepmj{SphpiW zs6%0p?$*h;We&w`Bg$<@^{06_5Agrkx$d2nUP(w$Ot4NnTKmvpNrxORyimFRGr)6qQRPk6#_h+}V&JKax6SJCm0AGMBC#fsDl+51}9 z3QloZ2sb?(nNFh4KA1M<&2Q-zo~(8sG;;)M%?u+@@g{g(C_B7n7bPG z))>w=>lYa6BrUL!Csg99xrTI2Cj}#$+M7iFdGJGQO}XW`p?Aa4;84wNXlY5Y-fjgs z?SQ$AkUbL?wp5hzrIQ-@i-$dLa%98q6q+fNsW+*D3u|s;DnVZt*{`?<1vrV zgSNiWcFzQmGG%R49xa+yb0|t>Hwrgo%-2!x9UdBg7gXZ1_p<>sadr>F3p0ebP9(P>jIHd#;vckZ!9?H`(Wyc14iN zk~vXT0-BOIOU!cp!N#kUs%pikN3rURQtSlNDrqK58m(T5;w}NVfodw`ic!Xe0!xbG zYP`Et^qC}}N2^En9S81((K?+7E=6tlEQca12*Z_JgK3@@%w<8y{(jj$wG}%Vnthbn zf+yU|K(WXC2?x(!9$Tj9sM$GyF1W&~BUj)he(v65%MP`62nRoC(vlwcMQLoIx9?uB z!Q^O#xx_E)YYnb{ue*{t*AB@-tA7WvjsCTckW)OBl-VCv`rut&zyn#C&c7l;Q;#cW z>>KLH$Gx1Fe-U(lVJR_w9SXCFjHei*_j07r@td6_$I=o3GtbT; zINlUDNvl|hMl)Q^T;y3dRH>YyDF8V7Jl)!-Y2_hjaYSnpN_yKC@cmuIlQGxQQGm~mZ7-Fa@5_!Y(S0LbjOp29f1bim@Zr#7DLko$dVPO z5-otCaKDT`+U+)StH8j8F(afk`oZ!#>14-voQeE$*y?&$GzuTDJyNU9<9j7@(w`Cr z#V$NP-Jg!i6BvokX>l260BPSbNNmPiPz_#GZ;g$MxC)?Sc78{%?R)De~D`<^*_&szh z=_0?NO}?iZ{T=fWd%rS{X8#25+9`3luyKxcKnle$xbqINVbFnD&;HodH4hd7c`GY_ z9%~b=+LHKqtHA`ep0nqc>FKEq0`)^wLzsClL$qp>D4dlfmPR-7e4=?}ck_@>Ms%aC zs0UNaBx^q>0YZ+R%+=&h`7dQ z63mc97IoAMG0#a#S0PAG>^csrC&|$;jx z^+U^H?vf_{tOfBYOHn+|h`=ppA!Ptkhf3GQn)h0lj8!N;{^OJybK6ZBe#9>>n)C=S zAwnubLX&s4WN5hQ;GST?%`7XnQX32!u;568uaZP3SKiHrrQ&5*GnY4+1uW( zNQWDSlBzQ#2+7tl+R#8^?#{?ju0nL>x+O)?jIwK2o-5Q^Q}7eqV_+m#lz}nqU5m@! zW*&m7Qp@H_+jy8M;aOp2S)n7fjY*hj0RHahBt1Fxp*{b%_*B;E+WtHvBI32cGIKoS z1i7V_Zyl}|z?g~`!Q2yJBSnAagT9GodxDwJhAPOV=Q*2VZ%at7o66KEQOC)rYF@W4 zW#qN6k%~zaIUrBgTO~_=9ZjJ_FM`yt{_kfF5Y22i#Yibj>qWOTs}f)2H0#pB{)DGL zdwt33iEYjy8iesotPEhVXkrXACa$ytv;f}ZaFi)^@~z~Rbmt=1zwssjF?GEc09gQQ z5Ud%vwazc=b zyHndaVImkKoD_&LS*j>rdWb@7S$Z>2k>YNF<~%a7$ON6Zp0zY$J*##m5;xV?(aUqE z2F3ENogF9-Fs_?6#=8%uqZ&7sQfbFVqyTb91XT1AtIy-e)$JLeWDl$KfwmI|wREIp z6{w)vIAmwHHxr3gvMG7x9p&U60RqTKPj0F0vBeFqz=HXTc}ziiSk|sm=u;{p#`^R= zV`ldCN19gOKawKyGObOS;CelQ6AIOo@+R2%(=Qi+9IhiT`AjY)_IEFj8h;NJY~T3D%{1nJYeRFo7p%_+$2<6_4(AIYtI89~4`!?K? z+szjs*dM852qY19IUBMQIe3}0pOzQ+z8z)Iq6k@mE^xNo6e;TOF{IrCQs#B7-)$%r z;uqgrjeFfIW-#`JtT~l`ggix2r~7E%yA6D$p^2p?Xz_=AAW>C%*liRma2tU$sknhi zdt<|86MX|mY6>n2aR5^b+9@aU> zsW=GIx&KdunLYCUu5NjI&{dAIy%dSdJcFHmnD{7jcq(#PSMOSuvK`^Nm-kM`Ue-8r zui1R%;(;!MZTgRgx<5)$dK+xIs9Wk% zAZUiGR7yk7bNDP;HEC{0EVUdg+U>Xl|Kc{wBn#A&;G@5+__EAsl8pj1J9@Z0yi~2* zQ2jNavbVE`YTRVAtuRKSvYQ*a7a_T*fBz+OzHN#|ei7gPHz4+@bpR~OQedxUtGd9<6&#?D4>xE#RvKUjNu36z>?-F}riK0(X*VZgcV@9q~sbLT@H%l^{ZyX%pA%)!xdVa=cJ2=86kRhPH3Pc-?vx6QG*TX;i^6;Z2)6m|$S5RooRGsltq zm<*WjOo^sSgK!C!Z2t80ok_mfLgpB@EDtSK!jtFb-^lhS4D}9-cUa;KH0Jue`qXz! z#5{|9X@x?Fwcf4)X5SJFv5%2bf0hziv)9e^%ii#AlRC`=h3))%1x$T&Wwf%@A%NeP zI=P}aDV))&nAOSR6QAl?EIchZqO_;`b~fO0YCIGO{N-q>bDEG%P0wVS{X4(!%Mb|a zE3pzHYxkOY0~%CpA!l`*rH;(s(K$7SpwG49h`^iD7D5NbZWuXxvMYz z&y)xUyCnXF`ehq8`oF1F%hf$l3wJNJ^{GV!%?u4a`uHXs4%5r1;_kU5Up-Jjt5S=i zhrc0IN*tK}3h)6_=))b5W0=vW4a`@CZ)!Np>1y8v+(}%?SqC3YUZJ!TcnaVVul25{ zX><+atT#1)5dWWWa=u*>gV3Ni@+G>L;puO+n1jM&mAY7cH!OLMbr6@%ojT~ z7eDx#tzKBIz3b^|&`aIzs{V(6icsr!divvET{8&F^y#kgOS1a=RN8vHa-W&FyqVVf zd-=TaQPS{p*Q2w&QN?}zJL=}A*#Ne(MES3J!;Y|5xip#XyTjykGF5_OD5Pd6oMIS+ zu$)8GZ!$fsKi(bZtCrg7)*stt;hX4DXWDT$?BvSFrfham@WN0Z_ zO$PlopYpqZbX{XeYSv1<_FQezG{9d2S{%bF%&~o~EqycK=ys{{`~Jra!?g|m!wkU$ zLVZ;Yz*nM~{3;p&Aqd{aUDxJ+ziTHJRXwO#aLuQ@mA>i@f_0ak&sU>%(a z%l;o|c(-?q%T0)1I)S5n`p`A;KB0~9_9oq#Y;_W0StsO84Ur1 zvlXpx&3jk;qV@{T=)%LbZj0j*JbrvOBQ-OVv)yXKkHM{Kz17SI0N)!{1G2OHwDO=o zICT2gW-&1Tmtmq6f{V#cPT^|WZO#sW()1ri{DK;Uv%-~G|I=6FXzk(wo;e!)eD2Gq zu#g=KZNVm&Yie5fx4(a^Wq3hf1xsd>p0i;+@P4(Twyfwd#a?^xcJ7`z2uT$_jsIT> zg0NFp4lG<^Rs92$mJab++OxcBABJ8f*IrOA>xWY_Hn^uZr4nHik>1k<`2ryg1CYrc zj0#H4Gv5gC>gIYN)j@9eEXp*|wHJ*LK9o0btk(}ShZ^!YP*oog9D)mnAS!|6I-l9T zh*?!~%Hgf@FG6F5o825vTGrGwq$!4n$eLAaC?iMT*?IlUk^M$~ePKh>J)1Q)Y1HgQ zXHzsT4VM-%4CL;YwnBu!qDO`_#=BzPqH9Ecnhr8FdqHH8qi-JNtE!#jvpzX!Qj{g! zYW@283zl-iPJ_XG^2TDKf3?V`46Mf&e3xkV@(oAi@!9yKCV;w zcym;?o-BCU&cKyxU^och2puMI$$A@kP@@1HDBIA(v@D4Zz+v*>VwKa^Z z@|NPRUaca+hOLQh&NnmvXNm9{zjM&6YkP6zy_1%zZ=7I?)DPyFE6th9j0Z#vOR!dv zBM{(`f~B>Hbd{ybN7XL9-&xh*9kqRC!ADs`!^BL@j`cN=aR6#+ZU+91C)FR=u+n#d zwp^0NHJ#2ndt?RNv!6Uk-^rPAt$GTmH^7Z?V8+Qkgg0t0=01E`|H0lxF%A`j=JX=Q zH1tLurxt;r%zY1IgiEz$Av!w>^V2^#xal=upeA$kM8vF3#~^w=Zn;&xTfdz8#h(P|i|!VP3mx#w!S(0O{aT4e$=K zF|{y5(S}*_i1#`!sz-q^3Ln&;o!SRNZcQ+HsYsrP%^PYy1z?3FP2Wa5v+GaTu3Re> zerrq{q6)L0N|fHSc7t2u%sxgq90tKu^o0&PK=^AMry_px5xb&wufP=yJqM8`MxHjh zJt_Thxs}vpwA$akGOTO*)t=_>v$bw#9=4BqPm{#W3HB)bJs5H&ZA%S*!_Pm?V4OS3 zq77CHxv&~%2#z#?2IKHK0fqU*(zFi~0s3t?$>&On{jK~HC4j^+UK(RnG||9%#-{$t zMhz}R8pViVbagpPb!N)9Eb){_L#gKzL5hhFX@H-I1Dg1KB=`e5g(@^Pf+8cPEXwXT zpROdJ@kW-m+2@_=w?BFOPToJ5237^b0@z?4>&4xMK()KcT4A=aVXetjNuX`F>;#uM z*Wt9nma1_II??nRPHWwS^1Fca3o{ULo&OCUt8IT@r}$}O+Bn90 z9MGug6@%FFV$cJ^ri;V#LzU0A|HB<0itRsLM$+GkuOm*~H~-5v+JsHQ`eNd+EXQuD zc3*q+?(FVV^@_0{Wzb)(hpQI2FIAVi?on^x5uq-1lFh64t6=ze1(My9Cz(F_50*awyCz+&+kt zP?%nWSR!akB!PPz_w)mpBZN)@$npI4tcVix@zmDNl39T^q}XbFa8&w;xBzB7ZSz8{y6{NmQp9AbOT>l)GjvJ@MgDuOidKwRQo^N>^( zJ_b>VUHJu}<*0`|X*#|zIJgVE3M~{@()^co)Q{i>Vv6A$?g0n`7KY*clC@kw5|lk^ocOCsK&WA_ zWh&9zQN$DN;c+F;1+buq-+w~WuK++K$}wF@mBpPm(pNuMDv-+LyJ&-G=U*vTP76eu zd7Xdxj^mtUah4oU`ZCr21*GSb>tQbc`9J&YXlhTe!TVr$605470*iWOf3sD>Eg0RO2wo{ zAFL@3%A=+|{^ z)HBk6Jqxn55x1hl`20UUQi<2!X)+om0&7iicxrFXA(TnW$ZxzBQ-wUD_u`+8Y*nqQ z{|}WkJjTkTT3ypf!F`)O_I=|OD#t+cMP6Nnb)!QH%1Oa;j)&mN! z1G9J^o(1-hC3py$?66;Av*|W(ne~rkoh$q*GmilunVoKQxjb6i8)btxXSkTsa_au` z5AZ>7?QDx0-cZo>K< zs`UaI^biD#3Wm{*d|fM^JIOuIo$Doo3LC=ZEx?408oUC6#u%lQi7 zK78sHk5)FnMJ_Pjju{=AosUq8LPmd$p*wPY{99?#>ykMcR7 zXo0$&p0cy(K6<~2LYuu% zsl6Swf34I$(^KeIXqczl(WkYU@N+45q~1TY+M!j?g;cLlt!%V%0gZ|XU^ z1J^Vwu7ppXJ6KpyZ_}`$lfM#hCDXnUX!yqB3dHQvsDULzUHlSP!^j6bF2fjs%pJX2 zGVmOr1ErBQdB@T0`Wu4SKenyfhIYN6q0XAa6j#$9q)wmht%xz3p7vZy z^aCLQ#e8En2}?n(3Nt&%2Eh&flas%lNFV)DGiF<>RhfFZX%S2BwN}sS9jIf+R4lz6ml#sB%jLGf_J|g@Fln&Cs}p#0GzDy_cwX6jsLS&i@`TGzpB2KP7a($VYVrzO4Fo}*ZM4Li> zz)k6y3fcbv7g5!K;tBEO@}c_+Zj$E}`_}iW`sZMy(C-enqejl`BkMpfTpUrzM7fyl z_EqD^A9@JJTYEevaVu4N1dIQOB^I}#Y7a7Z${>6+5kZc6|A&gYdJF{Gk*^L&VVZo3 zn_U!LdDIrtuamHIAPfbW5rPx`!71mBiwT2{n&WAp3JQG^-2_$;G$=a|t(=>AMY<(e zdw>ox$DvQ-2h-bxh_wG`>{5PDjC;{)N67?vjyu(`BUtT+_XoKCBOzJ46^iU~?XhS|0!Pq6@o{09@4LRH+$$g9La7*z=mD+O_BrH*X4X-rlcB;NWWy?nN9o&KGU%4_-7oAjS-=b?A`F z*iJR6>}eic2DfQ@1UaP`8Z($PAzf@8hSyj*&Cp9{(9ETy8uO#-P1=+_Jh#&!6?xWh2qs{opoA<=sQ64b4EY2Hc9D6e zGrsz?j0lF*1EN@d)h|v&50KiH^uJAY093I<>berUdiCLnXr;H&#*>OKYxt8eteb-V(hE=oqiEyr&xdHP0}? zDu;9@UY-`jWAl!Izh(5ax;?I^b_+t|S78I1fjygSif*6S%Afvo3uKBB42kUGbMi${ zD!p335Gs)t(16+)4Si~bRDbP4cdAr6&1hOn-L8!EweCBM<0&C!@D*7VYvgAF;EQrv zZA!T?jIN|CT257wEqV{e?85ZJ@Z5#JjLn-6r@S*wgOKrl7Oc8vLk@WolVrbP;ra=oYNhm(~Sqy-zVc zWuwy=JWKRM4@79LCKpb^!tn75Zwl8J0M%wYp@KO`oKg#ryVZYI6UB|YiE80`66@ml z8cR=D0{W&DAx5FVEeTlU8air=;Xu8A6sdu?Kr?3NPFJiX3B$Os@%H|Bg*p*3C%=N7 z&!yaBd`zUWQ~H}cFJHpNZ#)H2=z8SSHc|hpFSwgi=MZ`P%NzO17|W-H%>yb1JgItT zdBX8KJz*y@mRfTr;TxilQ#+@7DymYca3zUUS#5sSJ$x(+=gs#}h6-GU}$Jsd=qF)#bXmBaYZ}BcjqCqtjHEP^PO8?%iFyvElyvJdUPU1cj0bQaAElNQZS4JzPRWL|@eJ=lB= zMs=s!Y$26kA`cK?UH()k7qBqS_ya%J4}P9swI3b&S_gS@Q3X9+tTwg!UQWdk`90p~ z0Cn0M!~R<{av8mK?V&!t1{lDe0ZBzyzkrTFoXBQ7r4j>((|qnRP8dq@L0^rDiH~P= z5dbp2A+Pjl3W{yF@)@cg>uiU=P3O7ZxT?;-)B1U6YDRze$c4KA(3HR=?C%up*s#@6;>OVZQv|HxRmUZZsn2njBq8$w z!)YlnKpA)Tf6J5->kLEhv0<)~!j7Q01urUJ81`PxQA~oHq|rdJ_@;3F^+WL&8UeCtjE``N3(Jk);*5%<5GR3n8v(|~)>vTOOC)Lx(N%?mTtxgh%YOQJ zU3sqOcHce~W4;lur)2NLvW^?xNN7J?9gi7VpqlrD@4~+c&@U6u2*BXSBdMOc&?Y)~ zAH9e4yIi3dP?o{U64M$XL@=@_2?3pWcY*5{U!aFo4{Gq20J{yi@JH~F>G-ynWER$+ zkw*soaCP^Dzno4KqO_p+R>8|K2;fHSjpZ-akvd6X0%I}uqo(l4MgE+y)5+4;l-8%D z_yU*7x$Euj^`eqNn7I6FMBFe7U9gTp2R?KTvR`qq)Z`)Gido98ObFi+O}m%zf!qmZT2Im5HErx3TC85Ys$FY*n>Y7B(i4861sDpYv;EbdB)IYLlcZA2W~678`fbV7 z*pYJL3Eo|c_76ZeYJ6cIR4P%F(s=PI!HFo>uHg1aRhr0NAjye3jPERpOI@N}p880= gSXf=@;^LN_U3`4{pO07e=`T13s1_suJrKbE0-ADA=Kufz literal 0 HcmV?d00001 From a2de9747b02cfe78d3aaf5555af3293b6814477b Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Mon, 19 Feb 2024 22:08:18 +0400 Subject: [PATCH 067/179] added some more tests for algebraic tests and deleted extra added file algebraic_tests_test.py --- .../cipher_modules/algebraic_tests_test.py | 21 ------------------- tests/unit/cipher_test.py | 12 +++++++++++ 2 files changed, 12 insertions(+), 21 deletions(-) delete mode 100644 tests/unit/cipher_modules/algebraic_tests_test.py diff --git a/tests/unit/cipher_modules/algebraic_tests_test.py b/tests/unit/cipher_modules/algebraic_tests_test.py deleted file mode 100644 index 8ae5c28c..00000000 --- a/tests/unit/cipher_modules/algebraic_tests_test.py +++ /dev/null @@ -1,21 +0,0 @@ -from claasp.cipher_modules.algebraic_tests import AlgebraicTest -from claasp.ciphers.toys.toyspn1 import ToySPN1 -from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - - -def test_algebraic_tests_of_cipher(): - - toyspn = ToySPN1(number_of_rounds=2) - alg_test = AlgebraicTest(toyspn) - result=alg_test.algebraic_tests(120) # timeout=120 seconds - result['test_results']['test_passed']== [False, False] - - speck = SpeckBlockCipher(number_of_rounds=1) - alg_test = AlgebraicTest(speck) - result=alg_test.algebraic_tests(120) # timeout=120 seconds - result['test_results']['test_passed'] == [False] - - speck = SpeckBlockCipher(number_of_rounds=2) - alg_test = AlgebraicTest(speck) - result=alg_test.algebraic_tests(120) - result['test_results']['test_passed'] == [False, False] diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 93c8b571..87b27228 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -41,6 +41,7 @@ from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network +from claasp.ciphers.toys.toyspn1 import ToySPN1 from claasp.cipher_modules.algebraic_tests import AlgebraicTest EVALUATION_PY = 'evaluation.py' @@ -51,6 +52,17 @@ def test_algebraic_tests(): + + toyspn = ToySPN1(number_of_rounds=2) + d = AlgebraicTest(toyspn).algebraic_tests(30) + assert d == { + 'input_parameters': {'cipher.id': 'toyspn1_p6_k6_o6_r2', 'timeout': 30, 'test_name': 'algebraic_tests'}, + 'test_results': {'number_of_variables': [66, 126], + 'number_of_equations': [76, 158], + 'number_of_monomials': [96, 186], + 'max_degree_of_equations': [2, 2], + 'test_passed': [False, False]}} + speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) d = AlgebraicTest(speck).algebraic_tests(5) assert d == { From 6bae04cbe90cef2692d554f40f94b745ac9c6c0c Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 20 Feb 2024 07:28:23 +0400 Subject: [PATCH 068/179] Updating sage_numerical_backends_gurobi-9.3.1.tar.gz --- ...age_numerical_backends_gurobi-9.3.1.tar.gz | Bin 29744 -> 29760 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz b/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz index 711d65fb300d5457012ee3507cbfef2bddd2daf7..a2a7bb566c1926926479194da73600151ffd3ac6 100644 GIT binary patch delta 15692 zcmV-SJ+s2F=mEg!0k9Z13?>?W)zJQHtGW&R|C1#*Pk#o{|BdZxy|%gj7yR#5?P>o% z#;9 zhj;C=Q``6N*pI)#Z*zjb|2_k$(H_j^RNZ1n)^vL9fVlP(UE#4G#a-UtDGuALKd^3` zU;&hE=zoCku%rL`Uw3*JSR)U6;XCHo5`X`FHnq$vXAX!Ltm!)+*pbQhd<#YaJMV+p zgP(sN0iY{Cy=sAmkJI>){loS>8x2Cn_MPoR59n|6gE`=DmYT{<4(k90J%F#X0Xn+< zh;uN2n)K)29oKg(-X%la6o{Db6tfkhTgnLFJAYy1P2Ua!pzuorcTn+sl$M>VI{@Q| z;Ap~{#~+8re%kbgXb>Ig0nJ%5TC#h-oHf&9-x^nv~<>hoj`1^_5tDD0#A zJOBCY#zA)k*{7QuYZU&a_FUHBG)jhJAW%fn%^UPL^|E%{-v!I8=NQ{ZbuILlx21DbAU&% z<2}d9_lM3uW_A4YVP}GdorcvGgA@yy3TL=7oM-WgTuXFmrNIKBu|F=`$@@cAyR8Ag z^)WKwcc0ibNs_V*6i!dlLBPx`145nOwC%ORV1LqKtT2>x z0QVY5$na1NNzLK6LeCigH)Z1|k5s0dhtK$lcq;$uOFjdCYv&{52c*Lj2l-R}6Hq7K zXlJi=+&KGHf46^feBL^~IJs!+?_0;`&9}`n{!%o>-@j=cx6Xexl!FZ4A2!?VPV=7^ zjlR ze9c~q@eSg#tREcTT=^%sO z=}=IsqSB0D={m?Vb88uR&~}#x%sFqh=uK2%!bM-T9>7MAG5?{XVXdtHyGKa4x%$7_ zdUb1kUBCaS(>3su{_hbUbc`1U;i0bJyxBf)!#>%Y4Y{gd2Q!xKbZhk&>+4~TBaw{( zy%L?b=yzJkx0>yr{(t_jVWYP{eD}A%{q**4f6J@>`$O}}wg-qw9eV&s2S-hTPLGb~ zj_v>u_YLNUfrSPr(p21Y;VZcqb9mbd)Q8V}@DTkhvFr>9+lFyOQJVv!%pV?~;LoIs z<+{fwh3u0;_B&O`h6Xa`*d9}wKWX*m41sGHjl6z|e&d=LMt|!Kd)N56*&$Ex{nKC1 z-vJNQK0j+6zm3J#F#Fs-+{6{b{0{;yGKw8E(wzDw)VbpC-rdv==2sWB-vC2;ynk{4 z?cF1S*Q(qVk~91l(;LWmTIAP13v4Z2n~VlXrRBMUza`R1k{$Y|?2d*iS6F(+c*v*mSeP`nIKa4QogkT%bdE!uU?$%$_t6Mxt9(E`> z18*@h426C$Pf>*y*e*Yj<6U|SRPm!T2A>=Rig7K_}i%LH@v&+pwL0Mzx2Egn6)*+Ds_|^_GVFHg zNV+YfH1)YJnKujM8xg-K4CB=MjYC3Bp8!FzxgGS>n+Ei%C?aCPTtv&Wwx$&%zd|?4 zVt>vp=bbQ6T1l;lSz9bhIqn5O=wx23C|NYj%9Yi}Ttyx*tYLayiZ~}CikqqQxiLV< zVXD_?v5E3pV_Y(dL}E#YYD^vm;AZ2nd5nbQd;}5UPP+Oe>+bLE&Uvu;;GfNmGwP#6__$LO8p zw8I|C48%J~JvB%Q=7f;w-9kv+F5*PD8w1D@k6?AX$QEF>->c+=@ucu7I6_5$XX*eW z+`SJ_UN{a@VE+U55>}F+6=X1!qPFfbIavgpJCvj#fU;I*e6?_QQZs6HU3^K|QGZ1a zJj^~vs>XSXrgZ=0;v6xIa?sPoja+mNOXS%Lp?w=nTw2o9SSizm{T#%;RZ~l9GIO>W8(=WG9o(cd{nUJg4x?UQg@}g^b zI^ptB(|I<=)bKr<<*^HSQ{@)3Bqrz`hphKZ&RzWGPL3#QHM?H?c2Cw7{m-r_um4ik z^cm|DobWZeizShwvY* zOUmJ%-ZQnpu71O*fKez|LG+=R z^;L8>Te^(t9@b)?V^(yExW0sRnepMd!aeXHhFK-cP?CyD<#glV0I1|)=i>PM*VE=f zr*ZbS9nH*YnVaxY4}VE~xERL8DpSYNxLAV^XU(Yr;BpJNGx6vV^g1ZAa+$Ny^hE@k z3N(pIEWFr>f{~3b?kF`Z54WiD`uQLRK$F=5iLc4t@>x(jOQIiL9`gQLLE!Zr3`9dS z5rU01C}d7mKCmt5<-8F%aUd3K3RrNH9m75t-SHH^P8mc~Xnzpo7yzbpx$pVD9ZWo) z0y^HGnBW?h1BLt&^($82w)XHtlhFy2V> zu-%+b`e=uTl?4fUB7#pu@ZXCFKG2>b78vR@ly)bd=IIp&zwQ58n&a=i7mx5#(!$iBL5oyQe|w9q}tera*dtA z-gwfXL4_n*R73O41fK-fTZxS=%jpCFa9cH#|{4|F1V7RcIMNI=QXzbnjI-EB&h=yP+I+d2nB3W zb?yptcBfh`TC#HX-k$@Qu47i+_tfCReg7?9T4#J-a(|>Nz0(e3`pz$Xv$qb6ZYXw8 zj7zeXxaj&Kr#AHi>j=ddR&jt!(fa3y*I=kAQ-9VBGaR8(f9@scx4scqK8Mq>qDr}M ztIO@;3=pMydKa@=)C$)#E?;8%T6?X!NnO_7CpCfdcBt;@sBhGh-f!ATm!c(Huwzq- zEXN4UAu9>r&-tBJoxkqg>802ge1s~JuSNB}u6WF}ilr8bSc&NI{8o?CsL(iNfy8~r zn}5cHC-#-&+C()3JRlnSJqdLyLk<`B?FBgAr#?^tNr7}&Ci?{q>UqAyn2;4x8c9=% zTp%5jKY*B|APwmEtD4eQ4)gzjRO(?4>{|=v|0~~iF(-|Gm&=4fVK`%uQnW>LVC&Pw zEsekZxm#k~ab(Y+hv6r2Z8@0`G>t0aqkr67rr(X=qZ3Nu5uC!xpvomzO1Z2|4tNR5 zlTvIUqZ9TxK{wN(4VM_skHU}nwVcG1;lMP?8LqxhH?5TqQAB=!oS5g-UaOT9r+`A# zU@?ieD{^=;~7usKc%|eN%z4d+Xt(g8Hk{u!i26E(wE|Md~6~p=+`hY zUHewC3-nyq9$MI;6e~qu?PCf3b#Evl{0$Q0tfh)BZ3^{gAK7!Z{_Kw2nxOht_6jT2 z)~Q;3VKse~vCbX*e>=Od)Np?+zKXrM%cz8N8biyMi^OLqX^5qY&kN=4dw+<9h@za> z0)nk5kFzw{)>%fVO*#D>OkrHh*0wEm6lOYc3=)@Lp$|x;Ya7`&0B-(C5Z2?R7x)BV zk+{0-4U)wwgRK(*DLTJB;GqXT9tGk}Xea=?X^UjA=UD7p) zqYqDGp^}{lg&YNae03_$sDBdA?U(x zn`SjtoFkYV4T1#d`JGu|bYyoKNq^kC>dN!-*eH`- zVpFiYtAd=X-G5$n#P=U5A8netSMQD*mwR!aR`Ez$un_UCiNIczYZZ@cd%}ILiNOhz z1oNE2JSN4h<-3kM3?7G;&i8RzTg$ZbTU&y2jSA1F6G*(W6(?V}eBVq}r8jepxu17OMBM#kQFhUt2HG$eQI zKq&ar?e$AM5QQh~fbna}jh^I<{m-Mk+VK!u!ak5L%U`k<6?ma!KI}-He@_owZaIlwY%N((= z#4AR3N8u#I*hA5pi7qywQkJrk{*VQOLMG z@hQa+UN*^s*)CH*$MjNk%bH#nsmOh9(Ky|6_CSBFTSXu&1GoVsF$ErVd654H(j1|9PXu3 zj#2MR(5Z{`#%3!trcx5puJn-R{1}U)!+(QN(zlW}+4#t+IB8J#wI0fcSEWxH*&**Z zx_qPj6=}g8HKPP9s+vzKyC}n3nUosR{t|T)0qpZ+v}xG&w){=EI=WvRxi5R88RAo%KTD)vW|oH5`y4?un@!cddZIHg0zbptANg@4y_ z&J-4D+BZ$}&v-#{NnW@mhFnao_#Q6}&?3#8bB`Q%;$<10e95x4?6N7h!k-z3E{S+M zVrqHpLxI+KY&h-};F5#B<+An?lJ#)p_294>JCjZ@wWhNmji4;lg3VX9rC2J3+4j=S zl)}#PK56te32d0*so181;Xy-LtQ)8wZmk08S$RgC_O^_yv0$Nq;GA5}=;f zFz+SV%7uK; zGxk~lEGD@f*%T0g=iwDfx_?1sd@shvne<*>Wn(IqB12d%SB7cP(p2E{v_YRX=%a4X z)Eye`&+y}%?U^dD{42#HIO>SZ5~0Rhi6X5QQg#?VaZg|QK2s0klV~Z+Cxj9nb7tWg z%VSi}#yuXOmIv4hDj}MFN89UuQFfNxh-tvz2}R;nn$z`m!2P6=z5z0fJ-^F67Rvz0jatd`cVFNPyLBhZp)5(f5O zSv49dIH%VLCgzR0;`Pla7H#BP$F!7)>MdrC6^t>hA3Nw0z_O7=ILJ!x*tsa9 zC!3DNo3ec2G^$@ifPXL=a~u^WX_?-lDPE$fa&O&Lv;cezl1yuha|8+9Gq-I0C0Y`0_Z+N#A#a#yx&j95I7DRR5A#jrs6UolCat zh>u*vQm=MA8U3HaIzGsK)%Sz!j~rVu!;(B@c~=Up7^S*ctbbZuDxP5cl9>kuO(H8b zDXwSt^2S`em5xmhiMRsh6XwoC#BVw(=r@77t^8cfRmAUyMBWH&g>J~7ka!MGu8hPP z3pfus)#~@$1KBO{D4E~*M%Yi?2wLpVIhuk5+AG(2mX^=)`@zs}H>PUR$ZTl^fEM#K zyiFuSvIKspCVyDvnu;E&#wsxaSqhn78qs{&OAleCr9gC-jy1k2iR6(^N0fdLN=CLy zB`r$n)MI1Ya(PB=J#J4()~|&rgVJ*?T2_?0P^rB*R91iH`?f1AiN7O7+rPQpR4*Rg z6qjCvRtY$|#}dRPX?Zf_sa7NGcii47wG`iQsh>o*u79Hbg)`%n14=4YRV%vU)LfXNXLSLFEI|H7!Z(cSYBfom-8kg&w^0h|cl z5H_G4^sPz!b}WU;P!byh zjuCLK0{W)Ncp}8}!)|VU#NXZ)|Lox_@(MSU?1ZVpl}rthm@+3)n6%0a#T3-m3Ga*$ zsKTGWL0^wB%5hjCAcwCokij4feLTVN7Z|ek3e|$1AT3I&L;7N427$5V&Xh1<-5;-~ z(|^fMrE+_FE9e>UxZ}#e>(7w8;whpw&CN;(qRc^5T$r-$moHv-I}23mv1JN_p37ln zN>o}Y5WYfA)Zww6DfOQ)M^$-ORr(5rBrNXrFpVV7mGcdXMytko48b(q@SZN5uZ*z8 zW&)Sdq^oDPMQpMos^D9<|lejXlZz}F=G|DYIx{S6%K>0a0 zFnC75GaX|zglU#jBz^`NFWvE**M_OPtZ!~st7%1^i5%(Cr;gwsL{(k#rcb*pH-Cj? z8_}|*NB4@BRgqK$0F$%_14?3`HMO+_3!keQ;gOc5`DTGyTs~>(J}X8 z{K>wf5J-!H&5?^@2vLgg){W(i$b*{Yo~Mfb;gf5+P!O>dNblIXlirDe$6&?>sDScj z!)sHGrPxJw>S1n|$^(%d z7FppD;+Ze`&^gjS(CA^?WRD&`&L2H)y3ZJWX5({4&uQQTjUIrdcc7n@bVCeYH5(IU z?>!5dozOOdn3B2S6lfct&0Hi*>P8M=uZ;$@1+OXiOt|ehx7q<=Z*te^EPvy`htabq zlrB0JHT!$wgOX5s_ltL(h)Ru$TK1gvF6*TITPh~CQYWoA&Uax_Om*einwQQ%8#K*R zm}R=CWpqWNEBssZ`|qf+2^V;{N)>yQ9cp=kI2`I;;dfyYFR~{3#&{^CfaM7T^D@=B zl=J9BKoMr(+58By(P-z|4u2dFG{`r-?_*3rmMSvf5jN_C&hoS&Zo}>z}Gy$B&uyHx-bz+kHalm{h6-dorN}R5 zEp?)68}UUxYM!)JqXtmn35Ut}k%|^SWtwe1rJ`LxcH}LOK>r^QeTLN-nZ~bTE zymfL6P&=n*CvVT1?Y2@Qwh{*yr!c#X^QKxRu>uE89B)*j9)Fwve^U2O+c;sL)D084 z#)q3m+|P&s1DMR92ckVup+hLPcQCI8Di&t02-2fehk7R$fXXSA(~85Yp7A*(oD!8N z3Otc-5<((xTA+x)X{Z2j#C>hHpnF$W>WU>t3T0s7POTuYgMZYKLILe-T7f`oBVORZ2__@! z4%tK>xanN7z|0z**@GEHp-3CZ8`{>+$eG^BHA@Tx%beLG>*Jm?Jjz(sHz54S<~`OB z6gah}*UFgm0&fBL{JS~R_4Z;fzOs6OclOM8f~nIFvUdTT2S;Qhk~Qb8@nq!K19j>X z1$^j6dw**A)3??nm)eR_<{0P_fSOwd)hf9(IPTSj+XFG+%FE~s3JAW1%lF3X)2@vd zzv$_oqX9X_)B58kaa{XObV zqM`T-CV@CEAgq}A)B>$jIbRtNTBl-h)dI0@P=A?5Pv5_ZGHrV@hgco8fMn_eiWfMG z(}7q4Z}3yBgkIp-p5A)?hisI_i9&6iLUa=gC(97NW)J}^qZ0P4GO_iGcg7z#2EWaM zX-0vQ-fwM?wQYU8dMhUw^v6=ET1uHHS66yNr?wBWQje5~S*UpG+xz}3xXzq>C~#m; z&VRhyEP{gtX4ah39}3JrCZNDSxr)H~-A<#uP=F-ud7W$ndlEQTcj*`ce5Xnt(x+lJ zp2Rw;0|7*zKhl5BEPYqU3!K@(Y^0O31frg`j@xsA5b|it9xq_q^SjY@uBO=H+yZlv zyzRg-V}CsLoxTJVD`FC=V|%he)>X#=x)ocbRB&ehsYd zU=C@Dt_#!xI@&~cU>QLE)Aqf0*61qp+{Xey6x5N30`y%n;apV-+&t=Xo-xu&hN0br z(!;spe=11>mWWP;UG4u8LA8&%Y2Y;4fK@WlV6-?fd+txb^JH)`8|0dab3tNs^OebA9+JaB~I zW!YbR&zsIGx9IzK`Yc+1(;g1XAlQ4A`?rA$yuG=(VEwC`wd(qIty;tN-`s@t-+Z`X zWfie}BDRTi;aHAKuriTbs3~{r?ybFd){znp)+bZQ$%M z25Q}`85ogbhpu7DA!d{%W|TQ*7-0=MB8>KIJhuEh8AO%I>nse%+XhJ4msQ3)Z)}$* zbm@aeR>4lCGIXZbvmRMkVK>Is^t!U3KaCmiQvMD*hO(CHvVHH`c1sLoMStMKSYy=l z?f&%?UreXhjuo(Y9za~sSi zc-8m!q2~=pAfkJ-Nq|E(4u73Kx;nyKo*v%RpBo2u(Dxk?q;_q=!h|a@#t9GYokaT0 z37_*ZnkdAV2xjIwcI?q0FdeTlxtlnZn+2;=jH+XK z)ANTF=n7s1E~r@np#hp-gpP`tP57g$-30Quixc0*5RJj;PDG`ZwtpSWBFm4d4A6Qh zXN31$SpG?5qyZFJ;LZHL&8EI>M|O2|=gZS8ar?X8%o$A)zU8u9n3L1~IE6)q-#HoO z9wubsJFp}DJGq7uftWW;~l9KLxTu>uy`aE?StqBfBwk?(p zGsbW_hN+9q9*ni8JY<4AURY zC@X?DLL?G{3YUWgGeB1u&I_}~3KrTVUB4_?|nqmDsd^P#0$>dw;FYyOX14R}P)$t?+ybM<$Cmc267U@4Bo2Cx@^^05a6`VAk=V`4Av!3>`V?3s$_OhkLpwj<`&;6^Fy8kjcfK>cp0Yx}C|VWpPI!oRzTep4;l5T81C6j8G&3m_ zbHvc#Z>e!uVV$kC(K@sYEHQwDv|%RLo)hG zNq;JW6a?n5_#r@%1T|8VMvdU~DMVWWSeIaic^_?ZARvB2-L8P#I^srH(EwU8g4K7) zh)nuhV{kWMgfMZbd*uKm-b3!6fK-wvG`0N-u`|HvjI3dRrc%V2z?7%5F)cS@)c~Vv zw8LEc*7l=g_tyE~=*RAvO`agSzU#2S)PEE>V2JA-&Z-D@pfCzhyTD7=Z78#$}ROPwv-<1?ZlC8aUrho5d zz59a((e?Rfh_Q(l3vC$aWtaAj3A}z+av{DwBHmW6P!{06=Y*_tv?o^S8bYY_MqaPN zjqxfbuU$b(c{RcS%whM6M12RqNIN4y?jA0g>>)6=zWv`b2e~-n>LmNhS+KxN5#oS4 zUI-#KmnMczOQFM9LG-`Km&Wbe8GmQump0X%=fL{oN-dhYZ7a8>WpLP3KW<<3w(I?R ze|xk3BIS^4!nEI5BcS)AyRS42A!IXzY)Z%`S`@*nI82O`&zCa=VDxbbd*=t7XuDp! zy6V~WUfM(hBBE4H*qT7ZTi7jR{*ly%rSP92M`+rvXbL>n^ zEMELd3w`t;rs+qNCZYF8yXM7K#$pot?@aYGJ4y;dw${LV=Y=aNNMg4(@E{?vyDuKeqdpvSKbI{Go?D> zB0?}1A;jvgh7!E|3&b=-)6 zh4B6G^rz^nIP?QxT>FujKyJM#s^RUkoCZ_HUtU3ij5P_8Ge|HFoPP-tt5d+CC^T?5 zhYAHbbxXmn6rL(tSpm00mdKoD%ig3M`sdNs2`D)zno_{&Z~M>?oMF@@>IE9I#H_N1pkg3Vikr2s~bbedOJID0^ifn%Xh zg)V3Qrrjdo0#~6@U4H~jX3#^|^Ev7$)zHx)UG_VhxuoF{g@e@D@MnDa3uH!Y!%;$I zXBZ(MCNCl-$l`Pa=L*A|P0Yz10ZH8xt`}*bxgt#!Te!kR4h`q+1J@Sf`GyQ1*)gQ4 zccYPTHEB2qIvL{#D6mw7_M!y0(yPb!Zkz$vPu_R%Bvf>W+<%4rc+AOA)}GoIbKreU zSBp#hAQ84R+OpZQ0FYQbeaF%$iNT)X6&m=)NV5g&6g7p z8<_6QZ^iK38OL0k=T4f=T@I4<1R2_Uzu7P}l=6)|mn*MOhiD}0hGE@@SgJq{?ZcCZdlN1H> zL&058#Pi@GMTQqw^=iHLLKn1uvhQG^z+$tpGn$mRMzE}0x0h7ypm7RR0vO5h4ikU= zddB|90uJ-avHcx(VBgpyZ$j!>o@*3xF?wS*a43uo zRBQL?XXOldDZI$iY6w#UEO*jwvBrcP4hH!5+v5xN7R7Qn6HaG6RCUYJH+9^vsD1+J zmK!M)HL$0OnZcpu4rjQ?0Fz%ctWbXxf7MqlZ*H$xV|~@~=Ell3Hdn5(wQ`M>$8Ek? zxyDP?9HqSPA<9k5cmcBme9XsbWo-E$25{&-js@$}^EuD*_J8e@i?jV^+njz})edff z{cml3eIsW7SKC@}ewo<*z_dq(2@L25zyuOu4b<|Bp9l1wqRxK_FL2|i zaol>-Y@Y)cZ=jR*QPUg`jGvol?bgY$!H;nsC1TW>x#-P0=ve*`c)Yuh#@th0d=Cb@>!n#r!D4kZ7lZxsKx02`c`fGiT*#v^Teb5xu50tze)@S+se}C3$;r?Gw?Em%Z`qTb@jAwzx;Mafd-qZ7iAK3pS z(e|%~U#yLV`yUQ_-T$|?S%32Xew61D=z9n0`+H+*4LjUGdzaB4n0^R;SB)n!@NfIb z{Xe<;a%~WYpXvW!+uE*&^8eQMRvq{M#>SKX_oF;(e`VyM)N|YlhCJaW?Z(;~D?ckU z+wFU3U$Mhx)2s3ed}n_cWH;LBT+Pr&w9}Dh1ry(Kr|{P8^Q^j|d4l|f7Ju^RtT*vJ zyt(Dj2nVO0Hwr={1$>kBu_--g;{{Af;3s_8#%=Bq z{Sy`Y^v?O+){5*4FBP-NgV2h?;x)bGm~|sEn8u}1%{PS0V@GiZG>kP$ha!!U0;7)?dt~>5LoX=f7dAH-@W!9HTz?)9 z>udYI>v3BSZk=Dq@kDLpX4jqE4!Zp6KCY}+Jh6GC902qBHG6?!%s1+K=x#!q0tLzx z77c-IkIC)^tpv4Rh+N0s^bLB!@nj6_vPlzMf6tCR z?l?=E0sTj$59|)h6M+h@E#HnjRftikOg;>Q{OTB6p0aWo7N&2PM@|oZYm-zO3g6DT zqEQ-_ClP-|UEgH%|vpzK9rhr3BvMfy%E; z1d4k^T#2R7N0_h6_wqX|``mB5|FO6Fi))W!tb2dxx(LHA`>i3tH26KHKWM!m z$^n0CDP8oLjhF|>c~hB9K=)jZ=@w%7|M(BY>PuF3ndTdwWA9(_;oJRd zkEx$t@qDF#AQVXdhp5x90JHP@`9h1p6D62%;KQL`$X%SjDZj`SO|%u9s6qGnxxxL} zlm>+J4d|`j$ z@8YJ%qY~;$5b8nKz(W@M#v6Z8gXUqIn>0Bkah8(fK!EHQ1{YTeu;tzrM8iZ0VOm32 z&&)iG4`!WvS;7zO4z2>Xl*J90S(ke8%zT!QULMPWM`#gbg(KkHfWA!InEuNh+T4HfE^vlXm@r}I zXU-pT+H@@%bEt$VC|fbxxNy!U5!-I}a!z&HEOYkCl3OLgpZ)jDv8Ti&#=pq=NCs#I z@JDgpdZr>>d_h%pl)9qYc@%FzV>ja;Q_l-hz40RnS>@f_0->3YUU-G=hLT`T2#68O zToUqdXlTAGkM8B;N{WBhMxHzDD3D;LqJ~4m)f|j(4c$n%zR5#}Or=g3KaN*O1&sO7 z&=#IDx9sLMTlhRe4D!um-l~CO0~owBdv{}KhIvF zYzQ4?y%EY&7m{dIn1wJOEFB(d6>hTdCT{^Zbi^WSFBP(jUj zCp#26bT>aYbf|x*A#{?vdG4D-*r%pM?4iFq5YqthHS)bB)9!t)lIA2R^bJ9}xq??x z8Xe9p<(-tKzRf?Jmr`oS=DWS5^=LsA@nH%@6xq0uJTlcPc z@A)xb+`Hz>w3>ob&}D{*V^Q9h(hvIiEPeb4-c6p#e3yTY2VA#|{48pBfd`eEuyYIkuqSHMj{LzgWw)sK0I|5lif5$v&8saXG_*V6Ll&qD! zV%WW0B=hJMkjvWrV^N(Qwy4CX7*uO&Ed%y4{|wzS^6y1`p+)FO(^!<~)_CKucLCL~ z%o;kXW4M1-jA-G;g5j2g+jzjF(x1eeFfxoqfyLr6uM+snjW}_xR?Zq>R)izV7r9;L z&wTqIwEC&X@Bi!TPxgP0@?665zcDo0+80>N|A;;kxo>*gq!QZOrA1OdR($fw9q z!^yxO8b}`OA*_kf^hBkI4^<*b?4WZOv9G(lFXex+)%PTy`^SrFt@NT+E4{2%OD}76 zpmD-CEaSTYBufT+-i2ehYG5RfV89!=LZRNkPzNIH-!2ch$N#FY8^$FL3dJbu%X{PY z8pcOgsu=3qcL4y~rCl7z?F^;)3!8iB_a}xiuqQ}K%KjfPC$KYt=6$Lp9MKGv=SYV^ z6-j@{KRY=&kN%D^$hX>*x z^%ec@h)??`#|Mqh-bL&1pws@fO?`qzRs)Vw#0y|SWuO!XF9nCQkwpQCd=Y3V)b?k+ArqMgX|j1_QYiw4Fw4BzdtDP4f9v0rTE4(y`cJlkuun+VczuSPRsh?PK+ zX1oSoK=D&p7(Be

HV02OQKQ1OtewE=94IOooYKdW0&6`<;E%96-l%`zF7tq7Q!u zC+DOrLN)@5PsbBPJ^B>uGA}@gISbI)Qbx{EI+|LB4@pMK6tOJuGYf!>jBV49XR72n zc5ziiXlDetgX$0bbLZ0z{f)mr<=7w5&ioXQ$XPCnU*e*FH&-rWqfiT81fSR+ahSUe<9ZrvY56yR3Y7=;4gOnkf?#F`mD-D!F>0q#ULdURCC+KjE|Y(&2R|!^ zT)kfjD^(~!G}@wN@H&6QNGxyTQ#z$hlujx2iBsFyldOuRK7}NAepylKQ$&&G7Z;^I z=~N@Lyjtp0V!Nc*iIw^kA>-Vx$x@%;g}#{XMRB zt$vTyuGODb``ce_E(~ReDMEi#A_+*w!J8dD0o3OYo9YrWje*AWzT2Ip_tmG+M{<#rQ9i9 y;>kE3xl0OpN$pb2tbeI4eQnLl)ARH^Jx|Zm^YlDDPtVtR{(s0M{2K%SFaiKz6zEz2 delta 15698 zcmV-YJ*~pP=mD_k0k9Z14aRnLeT(@2t?KsHU)Yl*H&1_tr2qBW=K5dozgxAZ{r?!x z+Ovmzj5VPQQ9_XJQwY*(8UC}ujzK`PTo=CM_2G{$|I_T_pMM{YEoX$v&ez#+>g*rh zwaZRz-@ju&{szCz3I6{345UVTFq>0#iyc|h>9qsm+D~+a$9@!dd4H!kY_tBrx^aR9 zP`051zQccx{_lU?>0MxrJnV(1sXn1<4g7r+xKiV2pQXVwhuj^zs(QkfWKL4DmOW-0~quGzRm{d==LMd z!2oK~pMQ5;-?4a?3~^H+V!l(%R*Y^bBY^LOkvD&RI}CurFAdy5#q&{GcCPLKj3a`h z32PpI92%3)$vA=m*YQnoO>Tw&1}nV59<)Ud7+JlD*tWJqIyxD*yDpm$@Jh_{0Y(&7 zhjal&iZsU4nuwZaIDyKe#CRXNGm79RuTv|=18=F-Y`n8vw7HKqMw9nlZj_i4l)Z0W z=Y)Ulbf0|xp&XCO&EB5vVFa#GWLnMjBw2-R_aQ+TDVnwua`gf$*Q}w(4*|l$}*WqWfCYECXX!P%?Z2J^dN+qfc^Lu0YsQU3{Xkhis z>-`q}G3rIXXFXZ{2B$&(@eHaXxIpwMY7~Ee_F)I|KMTkm_?OyqrQ>10wQh@E7gIVBM156y5l$5UEjskmq{}_KH z7BOr%{QV3g8?eN*`j(3~iudolTvzWFt@h>8!a?Sz4?ybx676t*=txM#=mJudQ#Tp> zM<2;-0`#>&u`wS`vs{!>sPC3~7IUkL(fYbd&p+wpMI#qHwq!IqXxG)ydBR9>I?H z94p@+I{%o}@y~~y2^w}9R$B~GEMzL2;mUBH#V2wt(WR9J3xvl0xNIly4_WQD2K?5? z5SbYOQ8B^Ks1$U^;ErScxX<2wV%H=|$}&(mJxK=vGqVf`b$-*f*9wD4hp~UcP|^Y1 zYak)RLp3Bdhu;c4WBlKgjh{SHnQ|UJ<0s;&{Hrhd4E(K~kBlFX4o@89Px((kop__2 zz1DH#>{tEW{>kxq>-gg2qOHGg9iKPfHqZD=(G-9Grghvp|J6_qGJJp7Y_~hje_k{W zV;|n0H5=#6v(#_=o!;=_N#lQ@d7!^LIX!P3$=Xp5-!vQT*4|+=@xF6%*10&|i$Q@m zCl|*F;QJTnCvV=wU_g%>=dF|D&SC4Qb*_IrJ~?Qny@x)gzHgr#USz?-X+AriFWQdDhyGLAuzJQ(+id3@Y7yGZBS~hoQpaA-2MQ)8BTuRj~F^Lr{Murd6kd41T9W zL9L2PGlHe-Aj{0HW#B>ET^=y!yw##NQH2Q?ebssZ8$HJShmMA|vi|QLA>rog|7z>i z_028){-<8sddmOzI1f6;3xn`bS8(2JpSNM3?9GN;Rj`8@%XYf8`iu4TFvpR|#(-Xl z&Rg_5E#zCx_D_HR*RX%l+aJFB+uweA`?tU4Rsa2=d1c!J#H5Zr0HlMXra-4h$8$$_ z0Eqhr^TWVG0~Bd0?z!-lT#PxqZ3XJXXFhm{ewJ8vhJdUJ-rHH=1HzeK-rO$?*;hP{7l{M_u2C;0y9ujlW8 z2Wp?6wT|D$Vr!UvZXa&qiedf-0T&s?4jO4r{SxY2@ptcTY6tVHi`s91AwAwdIe_-= z5y5L!?h45n{)_1iWIQeM>z@U-maa`k1EkXO+`-=x=_JVx{nK}pB!drs07OtH_e_5i zK|qiGHg>r%(F1?i6v>Gn6D;iJ$nm~2arz%d7;r+cjpsaZs5p1)FY47To+J-Dl$?RL z7#W5_KbWVeLJMq{pUCkpy#=cH(HR3zX+igK$_Dlj@N>a<*26`mADr3cW+5ViD}fa` z;lu%{1Z0uuz^R_d`3c)SeA)b0($wfmF*z{N2m zF(&G~bH!rc&{hBV;_z@snDE z-UHVHMkjxy|5xdPgvJ};x|c!(P$|hh?LGhVR+^yZbg(KF(4i;RmNeb!cymYiZyS$n zSk-b(Suic0;C-MyuPOc1mo&MS^d&%t5v*OP#Rq>z{hMJdt&08t=?BKemKjL}X{B49P7gV$U8qsw7d_&|F;I0VilnNSV<;v<~CL#~m(J=Wg#gh~9!p&6b+ZZ6^Fp+DtE<{(Y zF=|dI&WI)5r7<-afSZlO<}uEZ^AQAqJL$+5bsoQm$)0g^9`tB}>+IY>cYUD6GNZ6M zJ;F;M1jEydU?5=WSAoD_A(S4sj!!Snl|z59%(`6#0lHmyLqSsT9iw-Wj}Ch%^9%1F zZPXwsm=i*xcMBnPyNDCrZVVttJc8Bj;-QbZe6Nxd##6ql;0P4~o~Z+jaQ8kydEq!r zf&CBIOIS&QR*<1iirTu%)MF8F?kqx654NrorF9xR^30!xT4ecC64jb2q6~-6{!ngZ~(|t@b4D#Q!s2{~L zPq}=4Mm?DbJQV+y+BG_Z@*ndhJe7ZHW>xRadMW@+R6>qm>w0MblUhF9cpYV%#w*v% zX!X_8MZ~_Be4XP0@2NBXkwFdMDmskyJZ~hHzlibg!gtX+=Gni`|B>NrEz%C0u^%2k5(VE&Y|c*%r**-ND%V8^Z63Xi>~GAgv)?=k=Z-K-kfz?5a^1a;0P7aosG&G#s6l7!`V=F4F+MR-8nT4H`9m0RKE-8n5de77X zyZZg50!E=c>0s0XyR4jY4~l;S@!a2S-$MkgCb0tNRpfkOTV_hZ z3DZSY7Lx-hMGciCxDq#16f^KzMK0y7g1M#8aYf`12S6qdI~T|2zn(S^I*qfp z?PzLNOU#6idP?HM=-t}=#FRbb;=-{LW3a405E^0%YD!H?O@{Z4A1fY z#3a|aASeWws9&-AzC8ipP*dhA);a>Um6eWRh6(*YId8_r3Vc-bK<+~s4Nn_B0j`dR z&FR@uJo<4QKNu48;q*Gza+XAc&zF;GBIt`G8>M8b2!c;FyN2)Gu2uuL{)iOd9R&dk zn_LTtDxtYmk!pX?@k-{+h0S8I#Pq-C3@@Xzn{(+6(Y=_Qqn-A@JCj13gz-k2hwbKk z(nmWytSm^-6A^qOg8yDb@PYOe!Qk77^x&d$hw`RLUSb-~rT7cKW?U1tZ5|Dp1T`3y zm7B-X}0lxyq^_QsPE z4JstjqFSn@_reLHl43my)wq^Q(RwU%6C3J9b`yFL{WdA)C!pUd{d^7}awP?i^R2up z(5uZmaLq; ziRS>Oi$FpqzVqwb?5zW%8;TtiV|T12uB^Vu@k{-{ zIzq*TRUBY9wEp?wg%;|(lr_UlM5vyhdtLdhZ^VC<57cz5s8WvF>TmI zwZip`Yn0f&)?TabOqaFyNuA!j9jbdI>KpZ>_nUUqrRe(>?AVkd%V_oHl9hyy=KM~p zPFl-%TIdG(oL1lKn!rpeR02*!M?`Dq_iUWjgytd(MBp>tG$t6auN>E=-7nz5=GSj7 zs9S#-g0Z*(FTgQ9^aAh~~1%JpG#z)Mh&lwu1RmaxYO`j-xExWsUN z6n?|6SKkSUy%x zY0<#*Pe*CL(Ej>s7D_zrt?zqp#q@>5XQ)C+B7DlsB_xvZ5K{I5>`U4Ng}%4L=e^sz{07$0$V<#pG44Zvj$jriz4 z_3+oaSyjl@zF4PVj=d^WP1c1LbRP<<%fBO*tzaOfX!_)UhpfZf5#m3=&sYp$kW(U>n&t0B-)V5!U0S7nt;8k+_cR z4bspmgMAhODp`PQwb9RVm=Dm)HiJ1(%UHwvPYV!2fKT)l}J! zU~)7F5}@aIW`)s_)np_pa_6Wk&&y|biIj)2OL(fH?RJgFO1gN^UR&rvlJp?5kU6$c z=i!o>R$hUT$8C^T8jDl~0=RkiHh}F9lCsfoIDxcxi zk>$=2!O8aKNOR-RWG$ye6mx0M4eF?H$4GqOz2RSPR`XnnAxjJ?UF-WoWdDr5YhfO6aMmm z5x17_I_@xd99lY8pR%^LmTld)1n0U8>xxh4MMY~jAjq>lX)MR!Vy$)B$0|Za0++fv)lky6;HE^kDquT=o+F_hnhj zWsRdqA!L2fuQtOk+^Aobe&sIKLn~`ElUGU$DkPjpYuWN{e5Wg{)?~g@tmrC8<{501 z&YVpau~dI4@RA;~E6j%MGER0W8cZqd$-SpX^(BJ7T)t2F91iv}ZJ8qumRQB;o++G! z7e;)t(p*HT2g^4mZTp3NN&a;{ChGD%Ul@=IUw1_% zNlAaJ{bNRL9_VavsUE^f_Fiji5E-Cwa)ps+9+X_AL@is1SZPM}Ux!qwF|?it)e08; z3Npn>3tfC9eXeEA&^=CBz5;TX>BSc{w7Coo8}$;DDoiS-@utg@j>ElF$}#GF2|9I= z-q>t~##Bl|%9S3{oF8LRaCm@7`c~2=8y|mJ6(O=M zm2;6C%Au(Zt+96&DSmw5CT!c~@l=0lCjO=|Q@kHQU;etQ<_t=^%}GvmAt$Fg_dJ>) zyv{F#fT6!L_k-)*x`F}^W;|FuE->s)WzrbJA+4>fTnz6%ICUGU#t>YJ9Jo*#Rk2hz{wxNW}%h&wIg-m)LqXAyI5>fj(_!T(72)k!-_~IKJrhw$07Vnju-^ z6=Mw1d}9`^W{e!xls2G*PYm^JwmuKv?09Z^iDY7Xb0?)&X zk90H0_+E^SGwEo&%EnaeJBEL-T&@g_qGf)-=V^mJZO}*Eps71F+@ImcIomT;&iGe~ z^KR4;nRr2saT0|$Eu`!)eB#c$@_nZI!Y7GPmQTnMJkHC)GnNO2o{f7vDl89b6;whr z{f@TR{UX~exe?QV*Hh;;Qs^(lu~a7UcsBmo@{vn)RQnU5XAk|nm6d;{$ZD&uG*+r8 z0l2=Wg-!`2m%Y#_9vxTgSANFy<|0jTMe3zYH3N(;qwN62P*NMfku<2iUnNqvvmq#fGwc;TNjk9)K_! z^9>b-WSI`3DUP7Yvnqeh@iX-Ll!daKJwwyS&%;`@w*3sOh3elS*3Kng((1H{S)|l^ z$l4+!)HnjCK=|@F%t_yOgT_66!y7S!JU;%CSdA&>Pzy^I=!lP8#8Pi$JQ;GILMcAT zHPiQl?2jDJFvI>kWqDT$XBg#|SgcxHD)wLeZkPw+Od=~aDQzCksFqXZnu;E& zHYPCwSqhn78qt4z*-MX7rR5!TmyYkfDv9JlNk^3P4@yQRMkOtv=+t9l+j4o5YCSYh zNY<}~1%lFZEg)8uFHotyI2u-e=KHoQ41m8QMcco*xl=D5h!mGz#6t-eaH*d}x2~f8g}!2BP^6j|#eJ_HIk6(g)_o8c?$%f_=wy!|h4!;0pD?bovdl1@| zVb1z6v@PArG$L**gm%95ohjhlL{PmeXJnIJbbhSSU$Bb*@jR6vW(H`LPM%6ox1v8LDNZ=T~82xZQXP635S zla4eQ9!+u!LLbY;jAtyB?@R1WyVE@0KREy-EU|n5CxSPG4QK~_YZAX5OQAB08Do8z^1Tn1Ur#e>m-Fsp<0DVI7Clr5t6vux$X>p@t1e~jYz9}-Eh~oUPn_D08 zx3|SVd-#gH!VM)mVSa8U8ABwd%!%(MtujL~1+{g;sUifb@aJ#PMI#Jk9F_>kPb-W+ zFbJa?PcUc&My0(%wV)?Ri;`ZDzSx)~U~IWFC3si&$Lr~IvQw$t-rfp&20ZS#GVuB{ zYwz-2T!+4C*8e;rFkQBJqC zn+IUNgUV8^Dp6(|q0RQ{gF1J{_MtO&rg4Ap_VZdb<5F%85E$6Jc#O+6jdruj;P`&H z&)^Qd;Txb-G5GoXiq+vHt_x?LmKm z5W2}ZmpYFykvASY(%$*N^vhOHx(V`G>u&od}g`lsiJ@Q#Tlor_xXRV2E?zeT_QjvAYA zfrqP9u}9efk|&76q3#ua7bfu{Yoc$AM=%Olo-i;k(~CVFsSfk02Y3cCPKf z0YQUY%KJV>@?-e|vJyoOCUJkFU@!IjU`lVb5BgS?Zh0J|`BoX&6v=A-ZaJ_4A!hxl z;=QbXhN;2uOWAWM3gF~PssKw9z*!6%m$N=jU-(C3{HZ^vCh)1%8oKUMbjP!^le5mr z#d+uCP3Ne2baM8qP~~H>x?T*eXgiIww--mv<8!6hx?Zex{Bz^5b&!8nazih9as1Qq z$uGy9#`*bKYwzN`sTAGRiyk!28=d2m^G@UEM(eP#cc_-#ig)0k`7b%Bv&QjTwd{6! z7fu^zjicsy^GqrFLN5xVx@cyBeHojolg?plzj@qN%G9cQnRe?xn^5Ygb>3 zt4#~hI)2k^v|HLr)VAW&aNcTorC&vJ_b9#32_N>`%D>Y&( zad2@8v)edts$~)@aL~l@MkVU8`Tr+%@3f5*_DS6^k!yUoX~cj1j2JM0$&6JX+7lHz zgkpOK^J<`CVdje1I!bk@cX9!!oKiWhIIQX!pF_eaQHf%=6Zs|~B=V*OiU^#B3IJzJ ztBb0b#noW(^lHdhEUwl*IlM^pHjFTmSzTMGm^2fvR<1EbX=s#V(X+$Ffl^q&$79>h zWfa)6{C&^8Iro1eAUh#ft(NgI+7Zy#Tsn|<-q;)3uI#ZS9Pl>787YmjnLV;T?m5GwjAeZT!hdYuV+}!pQ)_yyj7cx>7I4qMn=@T+ zFZSXqs~31@&wMACI{hGf7r=RNL^dK>bKV+HMvgsDr#?}@hi(KNC}oa; zE&-^yWl(>ul1qc*UR}675Cg8fjLx8d;9IzSZ@fP3+IRuXB80jYb-Y62jDX-0&!rwM zNtvUKn&^nd# zl>wo3Di&8Q5bFk&Y4r5{n<&$^Cv%9^Q42_>KA?YifwMRrh!yY#KgCMu1&;0Mt>=Hp zMroWV)Yd6PH?eTC4B=}A5x_DkVb3ZPTfcZ`{BdLO+bo!76gcVq)&^PI*2k;2a)LpB zES0LIl!-EIr8jhH`yeazNQsz*il@H4@6Uqk%*lrW2lnL5yUijvSYT$&IsKu){9^(N z{F8sH2%O*TG};RVNYb9y$u_Vjfpc}2jv>Hzs^lSkDrVzJtfM**K=k<|{pZZmcXhnL znH|hVIyp-q>RIc!Jr@WekGAab0=7NB8*S%miY?A9Fc-<&4jeP~$5Y?wOF*##g11z* zQ+k183YL%tVb%lUGl%l<0&|FD`)&;Us(*i%i8klg!0Ha>kf!LmKrNu7O>_sA0pvez z-+O0`t}@SkEC5779f>GF-z5{yRh7Waqb}zeBduf@kxeK)oGbpP66=47=wzre6{;bu zJPw8hfL<&<&#^-8IoD`h(m(H?=Zd+a@t3D3_L!CVn$+@3bKR_&aQK+R-|yK*6_tN4 z8yoa5Jn?_&cWq;HYh$~*zFmj+we78~^}n#{gN`)gf%6V;_Wt5~-gI8MMc=>EXVLnb z_HbBsfDf+RzYSdA?aj>v>tEfh!SdItHC+GA&H7*1=EDs$`*~XbCD;G-r?=(S@tc#? z+nB%q>-F0Drn3I%K&?#PyZ~uc!E8I=yzRfc<~u*^`M~ zV*l{2T?Rsje^+7$){QfOs}P8>gg)@t<`m035Zx=oP@IvN+h8`qd&$2KJ#RR&hrTzP1UO{l z(CMRJCd}pO;Z6OyabO31-w}U-aMu%OJw+*@Hro&Jw<$pU}mmE1}yw> z`Pa+SyVKVDf?OMCJT!xA#~uv=)A1^kyNOe|S+F|As5+K6J%3n%uHe1pf|?bOaG?1` z=&0BPg+IF5wIvS{Iq_|bCmD?HLK#vKk%jYSoa4qc0N4WZya`o$>r$IOwP`p-M3~z7(G{Q z+_gXe55I`61m4y3*7AR0!^Gz`ZqtLI|1rw92s|@zP*Uv8c+hYFDrYvOQ~V0U4s0Gy z*&V>Hb8U8d2b;%*_33{=QqrA|3u-t}pJ!*IHNnBiw#Cw6RvJ#nFgvo@gYnm@uc)Ns zmT_If@6hoygc4T|m_eCx9uVHJsRKo(Y_0wRn3)Lor@qzKafp8xtWde4sZW3$uE@jS zV9ZvEZi<<{yb1OQO$-2=IfWGkEI!e*0QY!z;!L_IaP>zs%Dmu>5Q)T~!sTGW4A2#Z z^TMpLf`x`24iHC55_i#?xzib}rsq0+R(oMqHxAF+#gx@sTVpMy4+xykShA=n7vA3Y z`<_qz6ZiHw7GHnp&t+z_Te}xHQ)Q=#O-5sbJ;6>@?gjvlH~qgkxy- z5jIdTwZ}lLuh2kk=Hj$dPa@p6{QfltmgYGv7&PYiHfCY$(?C@NU^$W93hZ>4d2*tJ zIv|-kzUPi@C6F#4)WzA!UaRx&Hn*fE*EXzvS8$oZbys5f6}isRepOmpW@uP& zH}``w!U})P(9RF|K9_+5W2=ACE~!f`cbPA3oyOJ&d%-A_VRUse*saV0zk+x&!p?Mg zhChtpj`4}rVe)ZyQ;-!HE$8ZvXNT@l9Ip@|sCnQR#ynTH(v6*r8T)~Sg|zpA!mgX! z=0<3^USf^ekkz+Yy;^%&Vzt^%eS2s9rEWMB58i(-rlzILR-5`+fXUw4D3;jI3dPmU zq4&MXo$m~xK~idF@@6CO{V?>BaMxUW^js3NU((TCtj>Id4sSHs3A2}@np18xOXNT8kc_@kB8(sffjKOG2vFEVjnt%3 zBRGG33elDT)+Lx>Zb_TG9f;phw<{pGj<^w4G=Nr&VD(+Hc$3cI7>N!TA&h~`muXv zliSKUj3D3)C{$f*T7hHx9d!mf-c?7kY|?+94O-|Bb1j2n$q$}_qoE{CF7nEPVYnQX z=~Pp}w?WFL0VIxmTF9&|jRRn1XMt5@vUVd{r4fiPu%6VgXjShvkt*cGm+8ucQAP9){-8m0ef}9@Y@)?N8wP)R z*`>W>07Xf%ME{j85}m%kK0$h?Rvl7-`=dhNIB%1Fzq+i2HB+zE%DlI};O&7r)X%A3ca2{SklVbm%?O zu6ePQv6#gEJ5&A4jxv~#VL0&KdExg8lGv>c{D)16yhGUm7!veQo+)Xnc={xi6f^gP zHi|B$O9Q@h;9-I^ibUpuC?9~}Y$KDQA6VGvl{W&~OnI5Oh!D(02(h}Wp#=0_e^biZ z;#gGvE+NHF=>ohp`7{NW`Q?A6CI23-lA_e9dAt1S#-LxeG5iaQ5Y9XBGnB78qQ{VDn?4*dWa*M1}> zkPkA7YIs#Hr@>V5msgM=V@-nO3=)h3XM)7)6mTdC4IIv)LP1X5Qm}t3g{O*ER>19$ z*)*rwvNtJ*{&}=@0!l!Nb{}y1+deb|XBc&fdI1auh!}PDoYkTwgq_D_lmAyCB3f}= zXG*`iq&|&$dhAg=0Mb(+!R9T&QUD`II?byqoIRk%z_HM$LYFgt({2%PfvZrdE&?W- z?V;=W9Cegx=#`N!`<;KyT+;A}!a?e6_%puz1+saz;V7Z9GYn@ClNXT^WN|uzbA@5f zCg$XhfTZpT*NZgJT#=@VEnHzDhlca^folu#d_#thj4smDyU|Fvnlu~)os4k=6j&4M~YH_m|TC+|CW5-K`G?!taN=42>qPwk62@II!i#U+1!kceiD0*?!bH{J&+ z9g1gObl(|B1&2f&fi!>^6KmSPmY)+E@)U8{rMo(*u;7{r0>Xpb z(ZNJRk#q>ip+JAkAP$}tETKHYW8Qay4~oWIO}9$4CP8O1h^Z7k`z$YxYcF`Ep4=G+ z?_m7u-sgJ&b{L3T&Q>qxgyqln)epXMol4&rXLjM_xgp zFgg#<_gVmY2128JISStv`3-7d@(UJt^9uhGS6&6+BjA5cJ~>qP%L#}LOn2tDVtDRyt%G`(#m^1W8gdL6FQ7cQY9r4Y6mpsE<%)VBh4!r92gYNE zonnnJtG2{NT%D!3q)e@{kVyERj|8d?z9&CMK0$N87b8u7xaGvO;|&=q3GBhLQ!}@v z%;`yrg86@;;4UaUd+?AV!;7nWwO)In3)(-~cQ8<3vDw%eO-fuNSXQpvOR9FzI0Y&J zjO2KS3Fks%e`EoNdF9yt4m+@K?2$Ji^(;>e%XW6yCMz>wFoj!51wLS0QMDfOqLh5S zF&j7(a|f!m`}DJN2D}trWN9^osR5QdX}4HoLf(H71N{5#@dbN}VmX`%r?Vcax@GB` zI__6gKY?`1jTDL+*i*&K;Lvi1GhAeV$*&n!D2l)8tClynSFEwVYI$>G(S1U#wi?rD~2+-uDpYre(Z<*#SQ0-^q$OZzx`)<`@iQ*dBL@z+;rmggu#DVFTBE|%2*_m8#Cy(!lzij0b;%(g-1h( zFUI`sQ|WY2_0Z{Hl?6p(49Mi;VAUEhud7<~E?q&{{!7;x*cg%nc#pdd-I1?USxo(E zm8RaLGeX|!9%SlI`7BTW(-w2NHWvGT)ME61eXF+pME@V-dE(Lj+|Tm+U!}*ZwXuJA z|8K|kKQMq#{NJNI!Q|R;KR!``KkKvn{=YwKwQ&EhC-(n(^~wM9QJw`BgI~LQPtO;A zVE>au+rJuqu{IX&e>m)Q|KHkXz5cZSALF?M`rbkM{@$2c!wxsl-evR$=1PL!RpW^a z{M$Zq|4;6|TpPsUXZruwwzlh`{J(#-y;aBkzp?S;|NSV>+Fu!YDD@n-g7I0nNxQMO z#>&si%y#=8+E?tb+4QRX0^b=1*^PEOS2Oex?R2DB!NhmmDZF+2JOyxQo*;jr#h?5+ z>rH$QZ*Dm>!ojKMje^if0pDbOY)a4BcmY#dqM=4umZslUK-Mbz!c}UGjMRU*xfQ|K zr*WHmME^v^KD~2(x3wbs!b`<$@`$;juy{=`d3l&RyB~h{CbkRBqM17W!n<;=H0O3> zbPbP=E@+e|X5EMkrg3Rh^9|wh*iqa84P%XRw@728!06+}9@)L%&IPtvme}ywJwcGKLiy+VTKqL+P<5SMWJAP|gAV`13jAoU*B^08$ zWA&%xwcUwUr>F#uPWc>Lyfuaq!N}cLxEAfwT3I)qGmx&qgjq11eN!0EnV9vbBmM|V z3N-F$%MB?kR}9a?I0!ul{+^-TlQ50;uE=k%T&tJs+iH(6eAux!eS=N(K>rcx1G|62@$Lve~+Q8v9~tn%H`ON zworl+qmkd#7BLD6oWhluxD+fJL~(3ufZq$TjAcXukvJ;Z)g*r@+|APglrJKNT`5t* zcvST(6M^C$5m#a<^bzLk^1b{H%RcuT?|>K(GQ*%_z)0 zIY$>&$8QOMyCQ$P!iW?TG6*{l@^qf~JTn+CEIRbUtO^&)7iJAZ1%#c07O6cn)=jpB zUBWLBo^rri{uzB{BPPM*$m>zyNIlbR-c)82&^?!9x`kN&KmG%;`jVAhrul~F*!x#} z_;&x=W9p|@Jh>_$2u1z>A?oxi!0fz!zR)7@tPUm|_;7#d7jhTpZ^|!nMH6iWCu)WO zer|AoHl;z~x+ddPgd^Hfj}T>cit!^Z^>`DBdX#zGC*#~x{#Pt}&jg5*Vb~w1gy#9c z%fCkyMxYa6tA;0deqi~xj+@^RO-uvRfz!{QV&dZb;12dl9*}<)*c~5@IRO~X4Q+?S zR>vLE%^H=Ve%zXu~CH~~! zJztpkySVA`sD!!_gnH05@Q}s6@y1`&pn2HlCQVLBoTcPA5Fq=7kxNGoOFuV@VQY6i!;<29uG4_FM$0cv*da zxxVxMeMZfQVrsU(e0F$l!=hfd2PFGLoJwLJc<01cQ8$SQGXrFVlAJpVk(+oJQIc{w zM$t3qK(UybiZPesBacB>{5uhP1h2N4HMFn*E04rkUrOI#v5Auwr|*p@p^moWv(bI` zk57Lk5$i|)>kdodi;xV&sbvbZlG?LU#vUl93<_5x+_^h)i;>k13=pH~7otw8ZKQDA zOdmmdC(}8)6u6DBA86jDp0MK37-V!;S(8W-4kpG+fQW_}0*kgzK9;bjVcdgz@8e zg;c4|pk9KqSk1!&p1^85oNGVc1O97;JhsSRiaxCHGi&`JjEy!?rFQrsV3^LN% z`1$kf70QOtQPvxwJXOABC2qy8|%|5MLwTTQcq5=PGGVfvC8g2f+*002Y3kej!+9yCc5J@eOInW>R3R^<)R8RZy_D9;C2D`J-?yH*aqpU& z_pZ5h@0$0XAM?e%YragYDL4gPW{5Zz<$Wprpr6mu$B*FM3G0(%gE27b{BY1 zsaYHZFtPg%Y$rP1L&6{3m|>eAgu5e<1@w2!lcpi=@`!I$ zuSdyR$t#B4%SAGeUIBl(tld8r)!AW-N_>hzwWiiGU@!B}&@ChXUep&_gpM?gMTu^W zH~xATPz}qhp`$v6YsH8bZY&sXNw|#%Oe+0Jya^-2SQJ<+9`h=Jzubru=W68?7iL8` zvV4)-W&X^!|3Rytdi?&szW!wY_bAULEdP6BjiPeo)hG}=fi8dEs&cn(j)Ex#v%*CX z04$AsiVQWJ4E&*iQ$r%J*R z%|LmMbQn~Tg#5FUlk?~=iU3Z3hW9X-Qd79^QJPnJ**N3>wCSIH9#?h$&0*uMcyoFh z{c(68{!w4i?~eGie{y`#=L}WYJkMAGSGH(ie8ceFE}PN?$Qt{_R_?$q+Rd}QM!Sh19rtQ9 zBZgQBBx!%fYv2VGKZS+C!z&*8hGKlcK`lZsfT-$H6nn{Jm?)-4sB*a9*+ z4SA+Yu45NhMTB-nfIF!Ez(03B?a<%&`%{kn5$%7>Pw|MH<+AuCF8X(Kyzjq1`o-LEA+e;%DO-EeZ*nBcM35S)dr}On6n5*7@R610dzm#1F_Tg3&mIB zt{~I_y<$8d#vc0RfU*JXjbmmfwTna$f2dEe!4#sh1QR>+eyCw{S zj~IX9jLaV>MjhrkFHbP8r?Hlne*>scd0^k*zZEA4W_D1iy?7a;b{gdc!unp~oc8Q8 zxq9%ka>&*Dm9SEU0z{)NS_ZH4M~uYsHa?|O+C=G;QlB`rjXlY#Sn5+qa_5&7r9MRz zX?}50>XS}2GRv!_J|(tGdYxFQPZ2WC?V5iq^(lU~>8oA4&uZ76R{OhLZD5vGUv11T z@U+_B<7(IH_gL*({b{wo{nh5eP==TyL?x1dWITMy$;LPtUQ)#NFOwno4KO177J_3$ znK(6J%OUQ1fJ-Y=oiZ>tO#ilz`?F4fHXm+I2j*1SADPtViy^gKOJ&(rhte4Xe22Ra2@2>>tx E0MaSS5&!@I From cedf679cbbcc87acc2f09969848282f750722d33 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 20 Feb 2024 07:37:50 +0400 Subject: [PATCH 069/179] Updating sage_numerical_backends_gurobi-9.3.1.tar.gz --- ...age_numerical_backends_gurobi-9.3.1.tar.gz | Bin 29760 -> 34877 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz b/required_dependencies/sage_numerical_backends_gurobi-9.3.1.tar.gz index a2a7bb566c1926926479194da73600151ffd3ac6..7b685d93371a1d357ecd2d6859e2bb766b076891 100644 GIT binary patch literal 34877 zcmZ6y1x#f@)2_R5cXxLNHa@t!ySuv&?(Xg`gS#{6;4nB0?(Qh4r`y$?wYEWnR=(HsDA(R1!XAlU@`-i1a$unzJt4OkM2hY*6s$1xDk5)e&F z3}tbQAiZ=xvHA_I1X#0kGkq07-!Hi%d;@GlT=4obw|P~b5de~t#l1(w!oC%Eof~9n zXK8C^SuDRVn3j9@^tLvVom^9cYPptQm_N2^Vn$v^j$So-I{#{6JdCV)yWS}lf1dD% zU_uogifT&qa@+*lGCccGf*MIl%m|RLDRbQUTprurn)9XpFI zCj>uwH0m9>3>+O0m)e%wmJF{G{2a**1H!=SRe17r+OL0dB>LBqy!5&a23-bRa$XIC zT5AbE9XSZ51f$mLH;80NbLs6KOQu$1-`84 z8TKWBsvX(SY<1(jA(jICOilfULHyD>w*fOeS*@WEzKlFh%%Ao42R8w(_Fp~nHV(F* zj?JrDA&0ALtONx0ZS9;(nj70}Qb#4me#uuOAnJa7V$kyPlI9yIrIZ3s2ZEucN>E0y zf!{-teJb49PW~VswkGM~*PPhvk8PJ<{M7+eo5Hh1;=RkwaUDYpu1FJZ#p6T&EP3~c z{IKb}aJ_p^gyi?edecJM2qu#5QNT{Wffk>P)@Vk2`XA3Q|6N2n<0^#Y>DZe^>{mn# z6^CzTYVBtFtL=ZPxd&8L3Hm61e|#r$M)dl&jP_y0AD1YJ3Jb-X721vNB zLF#{V;6~4|SHHD_RX+b@iREmhzYal*|2rIak7gTN5_A{PvCG&%h+-hMol^Hb5raF$ zU%bWlO@=UQFV0c;bZO|vP!^qkOEKDg5jkTffSGVmuJTIVn6_=uRTruFbn$MmFP6{o zU@Ylcd;t()N4Vy93JoN>RzRuG*~W)qJ$ZX%FFo}qyULIBgrfewJ8*=DgDl^f`7c+| z&V#*O49I3G>Kb^PfD-WO#KUVJzzwN+n zeTHQ(qy9MZ_+0C34yJtc49c=JZj8C)W^oJhI+|@qgIA8`IBc{Ij3x9{)In|myBmFl zGT*xgQ1zMRfpIBG*23oN9j?#(d!j*Et>3hT9dzecu; z_G19i*|U1eBC9cV>J+9J2botrCbQbvOJwf@-Q-%aEGrA=Kxp6ot?Ie4#-WulD+ zSrl>=aSape>k5dlscNPD-iwL{AG-Zh$=_4cU*3y>bQ5+=idrc={D&+UwjV3J*`8Aj z?h`y1!kI8~OHS{eoGaFdgMaxdW~5EqP>}CB6{lt^2B$dh3_@d?jk7@gaG~G);VobB z0|NDE6{axi72ZP6+k?U54&L%|Y?Dfmz z^HU|&=-3ETly&jWXvw*x6F!k$q@Y&m8}(!jRE$@iQc7d!-@bz-W8Th1C4qZ#&0X87 zpAm>iY**O5(s2#YY%O<4z08b3K~aANPu1pSYa1scn7otN0vR>`7ejQ1un zl*M|D6{gSDKIyKEKURdr-4D1Fr_x^6n(}ms8&GF1zUE%6oaVB8*n)tI<(^$m{RrZUp^)rbb42VuPBoRHcKToorEK zLKO|^W7GEB*k&db7tLP}qVb~Wx_z&f!QS|Lwt;lx90&QVT@m;S*F+-0Q7IVx&b&sM zQs0l}1-4ys=GRWGt3wcuPf31uRiThKrJxfT2_Gam}B=_vb-vK+-=3YJ6{a z?U&d&Q=|-B0z`zx&H^geX2Y{PA~@9()X;Z4;k)AuDSklX5{=@6&9IwKLzelH5iI<` z&_E)s62?86AULI2zl!rSw`|{JJC$NcJO%~_;wjO-7Mnx0-FKbhU3d@HS*-q=6!jAJ#iZF@Tpa^{UhxXQV;?KIjI%8sjy9EVa)b*!ish+XYW%A0YO(SJ5Pgp(mpz z8DbBihK8d?XX;0e6qd^#%IQRErL;SF;78d@#?t$|@hsck>;7oo0%NQV&8g0bI~o?~;Ak zkD*>wEou#gN0Uz~Kc3#NnswOO)PF}R2Vys@E;_b{_taYSt!}SbIWVsr=m0O5(;@D+ zvOW|RP?zmSIC6ejxKir-rq#Pr4l*$x2g9c%P<=M%oDP)8x7cxp59ZrFV#~7w$YuUQ z*186ILRdj`bgNlN z^L%x4A8}BO?~wAFnqo*+xFJ(v^&|&eGMf~T^8yaP3P&xXc(&gH z8H<(GT^FE_;8|s6uHMtnrN}Y0)T7;ST0m2Qv6DH7x)!u)_&SSvVZ2Cn1_i_=HDMoa zFHT}4Ga~*&4brC|*J;-0Ej7$26_EG#j>Y|Xk15sANu>pEbRbpEO}KXf#sM84CXmLI z^@70s2Y^r`^0P^cg{h0*g}*?UMjf$GhbjGInmmJ@kKVPxiSs=&qwgRv5KKrNJC!SV z+sg}$?l-G~q;nl`(#l4`Qf*u$*QrMgVk)|&Wn};!gP%ROonZ-k?=u{+;NEY>uyjja zV!&qJ6Saly2uw+su5wn3s|=06Y{1s1|8<<1hz|}+pWMS)FyDn$#a8jMn)}89r+S#f zH!;$JJ7^Squhrw{u&6U!SVrYU@9%7J_2l{a&i#b}ub>y5Sq7x_27|{%>6mJpUK0*B zX;J}yS1~$35OkLfxQ+pnsft>8*+8_2#aE53fCL5oLj#S9&oO&!BUZo7?7wf+GEt}*8RSP-wYs3(lwRyGbD~drv?AB zWs&lGhB_FT2gK}}w!am9Hj;-YR+hSs=@O9EK;9#UN_@;mZKuCLasXcfp|-k5XxtCf z!3Ds#Fpta6h7#K81h}Efa2nP~u=z)jh{w0*yfR^-!W#w{)>+c8vNXT-mq zD(-v^TCDUoO`cW2#=7-&xTD6N`>@`6^jou4umU&)x%xUEvZ$5>zS_@KDo%l}p(D$T=L_eY^#c7p^)Pq>KJJDO`bPgCy1e@Bk&p|}GUxfj!$WPH1;%9n!BlJ7$976- z+6Smv!TJp}S`6{D7toV57%1PVxQX}S&A8uw+dQJnXCM%hUm1jW^kOnic*=g*hx zhlTANJ*8gzNYeO~jCPjWNl)Z&h6aBq8<=lm+uX=Ji(tyQm^_5IRHb+L7TMwcM5q6! zY^x@Y^?mG*(s2&0*+=YOioZKa6T!b6D}DrmL;07G4`3R1+C?VY^6I^V&p?)G6ks_t zcqPFTo{KC%Fx9L3##DtwPblqQ^FM(Q;a&okI%xm4ap(D6auQE~M9aKgk*)(A9XJUX z-oJi*4^-eTa|cQghxzIpecrCAw_ntJ2dS1~fk53UFIHLwr9L-(jctud+o0v!Pmm2L z;9X22aPtZ{fDo`*CqR+^+D0&-o1u`6=;y+RfM}Y8bqqOGz&)e<)*=eyRJ-1rYas*T z>|))wU1gYGkqLV~X^_t{$$|1akevE>tu$&{RGr8}IZL^52}2C{G3W9P)|lWy_yo?+ z+;knI%XO(QncCvF*ly-uxF&wg;r)~=W1l|v4QniA33!n{O4Si`8{E-+PMOZ@fyX?W zTq-{~dUwYk@K|IFq}yJahXcXFXZ}09UbYcGAE^6M71qE<+b@Lh$GhGy0^$V9H7Yd~ zHV3CXUY;b{0tQ0=ZTE+q-dEe^wt1! z8bm@|kBGC$QTa5&;M{Wv*O|*1ZPnK*Es@fAg&OJl`#piVR8-%l8&!aVAu`)m!SsIU zQ=KMP6`hw={XA1r+lL?GHeZ|yxsuBqz9mRwfhH|$(Koxo&v9>_Qy1Wn1F*W@qXZFiv3lV@9g)$%A>4JN`h@(> zZO3@_qjE(?n#B?E)u!@E3%ceN=I(82&lEl)jSqq^bb5g(X zbT=tNYaBuwxic#Mu%3GAo)ubo?m;_7Nmlw))d`oh-7h*07=ICbU(uNZ(MW%}R=d3A z{YlGh=gUs_woN?}pgkUtP@wT|`%dBiT<;%Rk0iD}9eX-kn?OFvl-QKNp8oPUt}$`T z8Psp6$`&W=ixv@JKX9Au79y@@{pO$1X}F&*gcmU0tx7(Mdgbb==uu6J;k*a~--`v? zHqi9%kWK5$PoRX6&2+HS$9L^Fu#;g{6S`;sP1RP5 z@K=Ygrt0(5tY4i*YkdmfW8|NoHV5G%@{Y^C&>Vj{QL(KG05_#xm_W7;ckk1<`I3{bG>4G?p%O zS=R3dWlCyE$ng9NQM`UY#%7)xXSIcPWI@^>2jRJ#lcCj-dIW@)&}h`)c&1@Nzn-^4Q;k|5s^ zkn~ZFu!&X0SrWh(5rN*m%!IEi#|9=;OfRNIpJ!eHweN0KXS3>xde{A`4$>msCxo+S zxjtI#L%ahm{$dZoUYbI^Ls=>Y_Lbh5vHAQ!fJTzpu9-{*P@iLf!*~>}IE3NzV7KZy zvi*WF+%;>2J7c^B9G7TEUY|T@o`%Fa(G;HKGXHX=sCEo>X_C!`QE%>EPNPB6=9Oj( z;Ft{Yx}#Ru)6v~Zt$H6@pSA0iOG9EBxjbnB#ZbML0s)>76Gsnbk#MLbAvv|%=6Nop^nuuM8t2|>; z7$FkQ;3+Qf4{ryKfTN!wkj-k~=T_FLv-()C_o51r!=0b@dY_uTgj%~Rcgt4pvYAda ztn!ZYEd(ww*p$J_O+-IOM<`*=mh*8&X^~t?6xB`h8=l*d1OyB(zxo?r+sW_bmAXT< z*;R(aVSWiZPHTpr>n|Hfk8cGX=-~5m`I)I~w)z=GZ6)MpnG(K^LB9`c<&iV!7p1cK zk}Q*1D%X;f1|1Syqo$>-?rj`%_l{B9R|_cTG>S==^QYodprwfXh*>TS@d=$wArD$S z=lA09hxh22lrY+!cYuA;vzQ;x<=YW}Hn{da;1;A5tQU3_~OYLw{p`hs^#QA!vm^Flyu?A5`|o zP2~1NF+;Ba=c%e6f=b0PKZF*%MdRxH7tl66iS(Mj!BI@Vq6vep_cMDsN3>G;qvnOQ%L5N5e71B#JtA zDl@voJV@vRL>MkkTwT4^Ag{<0IkRC*&BQz&H_F7esfSXr*C#p9X(o9rLW|ys43$Tx=u3u%w*XJa%@el^E+ z>)xy*C!}m}q#7VJ-}Fzduq{17SWai~JsZ_KsFV_*?06@qPeWJGR90_OOb>8t=~Ta8 zSDy!5;fL`mEx{i&lq)1<@`(n`lVXEblU+tD&yjD@c|&g@9oUeC=DC4euU^j|O-K9t zmCFP@F>M=TX5cZru;}gil>owNIi&nrB^7XTMXCW>Kd}cUhstbt3JKDa#wAy{CW{hHs!fRa$a)Xl*!1IWd&Tz4wxA5EBwjHRB~>V*c3IHAB3 zNO(4^si5JTqK3dXG#px*HH7&Vw2^X8-*8X<^%gxfQDWmoPI@BAYeTI(((z@C<+kqe zIk76L-5Z(Pzu`ngd-PjPgF-x_wE>H^0KXD?lfg7xbkBd<<~tT;-2-BbqCxjoN8F)( zl9(Md2Ge@x7ORo&w5jd`@X+%!l~a_^nl`Mzk^%YgL7s)?(rvG4gJ zZX8pNRs1pMv*5+_Kcf9TC^K%APo{p zCkFo=j{Spaz?pp&C36nxVrQ6`E;6EWk43Elh&tdd$Z{yQ;E)-n&O@OW;D<`+#6hlV zb==(!L1Y5X7#W~Qw{5|y*{M6ptfNZ_M7LxL#EomkO!?8O*mA>C@{$YqNIJM9a#aj% zpLK`e`ZL!ZE~I~f^K#gnNmAre>DQurc@lnSh@ofwSA#t#>FotWp)z7AtLLK-`uafz z+arAPVx>Pu$&W|U+zW?x_LBYn(|c4cg(x;SvB@b#w<||=28C?fCzaHT`R|5e%0?2s zWvULzbnise7O7~P(HjR3{{D9!1y!#pg8@-67NLi%fy$LBj{$+p2NpFH7Y0Dzt<4Uv z*0zX(Ig%;8oV^l=zg~JpK{S0u`1HfNZ5gz z;%Db!p-y664KnWR>BmTBl?Z(uq5dhw*X+LrJK=32IlvkIzljC6i`aRFxsyDo+oNyS zgG)v)?{`wYMo6!J3K=f_sHvLJeX2MubV#>eT`g5)!($oY>1O8VsxWa%;@!1*ft2dS zF|o8NGKp(PEkrsofjPwK32zw|tyhu;_>PkWIxLGtY6@iN+>$hBr<+Bi&Gp|iCXH8t zWb`$t`@OShWXz+KTih%d#FKQj_8P#Dm(szxc1pHV-YNJ_+=ov05S?S{ht)~FzMY=v zd!Z@=s+K^bV=*u|Y7JCRKi%^|0MzX6j1cl%hTy5b@}$ZOhU5%b2>ykQH)yZHM59~f zQLlz03m+}^A3x(ehXT*P9}>W{mc85Im5B|{`4f>*zYbekcf$OOu>DNy@=b%=mQxd| z)HQA03LA;RALv4edgU&`a2V$}djM*{+)!S++fGY#2RJYtxtSU)`L+qa2+RkQK)+f` zw#Kw6&Gv3FI=B$B8NYL=U8!Kd3~{(s7hcr<@P&uNr(qoBxFbyMa?Io>5TNLgnjH%u zqR7;8WBbmzqJ-A}td+g5UzD!n-1;ju(b>1e7s_?EeAV7WqLTF)6|H~-H)dr5F>MF} z;UJ-8?z{N9y}S1`&-A!jGR`}c{+M-)N{TS!p!WbPDQY8rWEuxnEa=qgkz=aGObgDh zkB~WK+k|p8aEPXL!PX{!PwmDC}_v{SsEG;oUL4aZqVMqKNO}cDIXVkdSTvEnEJxtEDCil^e;GT+66LMx{U%u#FLFNrqiMzNgNlG0) ztfDPW*vuco;v{gRnzM%%wfnAcjJT4DQ5D+`lU-ESgVgb4!Jgq z!bOv(b70x4Lk8~Xn8dpB?Xbo%Qq!4YStJWJgay3O-y{wQxfiAukFdw*3bmO>KPEo8 z&zAwBM~=ZeU;<}9W!Z6)s1v+WQ=KM8XP|+_9lKI_))h;t1;mBF!pYs?u&N}X(2SjV zBY_$jNx>p}Vb;WOsHi_=CNQC4hI_zA5^&KI)7=N*elnfgOOtn+9Srd5um zDE2BpeCAQKU-Ie8etdR{i%si79HDQhVgv3ZWYP^bR}#ZT1WncLMCg4Tp;ZQIWR{@l z4ip;UeqoXNPd<2?CG8K7+MWf5nR@cFX{?PZl8U3Ng6%7j4MqwJb&B8xkOPJ4@9!Ut zl4)6qPK)N>2+hyQScdN0NVsaX2*hH1C7-gwWQkrTPfK==wRpy)ni*py+?gnTQc@?h z8&rWOHIi^+E9tCXOJc+ij$_tYa>K!8oSvz2RzjasK3GRjr}CtZtv1l>%47(SNpZy- zmtV$?*yF#5{l>1?Ffu1^6o=vt!bi?+6{?*JSGWiBu(0m^e=|fdz zY(EsvS?rvaKlU0^_ZZhL3WK5@{jc)WQ1UYp@y?qYcvQH*t9~+ss3>m|6IF7eadGi+ z{-4*YKv){>)_Ya*9H>cjEbm&kiaBVl*3LxnyYQ;^^JMa)L)c0pusRX9+FHgw;y1lokc?r_X$BL#e|EcDBB#mO!HT z2o+-rd4@^sDLrf>^LSalen?6%iY(YNLghmIM2HlTL^e*{?#?nPmYZi{QXp|6q}YtA zJ|sI#;o_ON`{T+Tv@11qOI5ubYlyZ@N<7<7d1hZP`-Qo0%-q>r=TdgzI&V}Xr<35M z7%?l50rK!o?9+?F9U)F|1l@5hM4Kt{_S^A;_eC4hMTeb`hWY)(;OpE6M(KoP*|dDR z1j-nV->67j0Hnz*l($P&ta|i|b;WIH8K_I&gM}%y7r8gA=2QGl=&Hm`=MNF3HD(U; zQYbQ2%4$v*C3J<>rh*dGkiulhhvwpIk=RwxSTP=~(+ifcOX@IpP^?D-M+oHe1TNC1njET4CJ# z7_6bD|8m+Skrq$&p+j8xI7IP@P${CvFCL9(ZM_e+FoboS!*8ik3na?MH~85KY#s1= zd&~Y1Zi$g6LqXfaG)A*T+86u{L)sX$+L8_f%Y-2nlzI&w*{7Isf$f5OdbdUTF^T1b z$P!9NTW|t6N$WjJ=@c5|@WNomUcH4!CE!F1?60t=WEwCa5)$e;CSSabdbYm4u)BVK zw*-$4r`u|Id}8AH=KR@9r7)wg_4Ohb^+R%foH(-GvNrv@7sKQBbzYCHI&fPX!L{^U zq!Yuc(JigQz z4fKCs5g0?RYFG|(z!_4!ynCX-Id(pFcJdh&j3HSYg~6J$Q5CQ4%gb-&0s2FnIgkh^ z=-xE?bq9Dl3zhwLEDYaIam}Q`#k;?I4=s~8{@W^QS?IrC;SPQ0;oJLE=C=|~J(vD$ z|MrfXO&YV$fA#V?yi1I@w|8-0x*(E=tU#s)j^V#_^-lW86P~>S>R5?k2wn~2iGPfL zvMzE#h#JHaEYRE00N)qj>qiWq4#fD24pZA+`*HV}(9oTTk$tL1*t+QJF>M`;j56$O zOY+*~@z{LQGVO17z0ZehS-a4~DJQ5SUyx_~jb>ENDVv&!SV;O@GBhY=UzG4t`&^L8 zh!24j?0m%sW;Q$}OUGlsoRdACA=U659xDiCd=G?Z_x*)pjv2~}HK!jXuVP&q5oVK>@ixb@84J594Ae(_V znhVg|p&vj{k6H;i94aCstfCSn6w~5e0)pEg-!`ST()1uN&>20P_17LbCH6>14JBAh>7R&np7 zyQqncoR`QQvm{R=sguM|$M}!P4rSe;9FaX(1_`Y{6N@ypEJ;oD8SF@@6B)7+0TgPp zVdP7AaDQN-jAyPlC4JH`^6J~15QRW)Awtp^K&-A;?VV_vCT%$!suGSCTr&bjThARO zG_?q@)o+qR5mOjwH_EMH{iyKhVbyTM-y)<=>Lau<_q4$@USG*8nf2gLWEeSF!`eJP z?#J5JjEF-J#`G&Ecf}C~51Os*RCijLYWdqU=P!o?AUAu7j*PbM*+0G#d#3!r`>5LF z?9 zLa#0}0M9U}sT`%e#5QW-I06h~R*{`QS!3F=>^67&I3q*tu;sV}gh!F;rFet!u|&4w zs#1O*Lj#rfrVHCEqB+7pk`oh7RQo-cS+N^&8>R3JdR&7D`Yc$4LY|MRWspnIio~&V zj%A*NFO-%Qp0?Z+kb@|=-?^vc`=~3F0AvGrfzMR>o;`Hga3%+IB290zKS+t}V2(K? zNh_e;_vtm*tyeGIe|7q^Y@(%n(;I1~lL>VrPG1Q>|5PT~n}-j6FyEXcN{#LByiZ>n zPmDKOtdyQ7CSrl9K*}qkE}b#HmM)}F7dwky9H^@#P^_7wfuBto8497V_B;8FWi3QK zA7?ahKv|)Yl%BFkB*s|)7qkPpD0Ix3f7_y?1XC zLQq=rc$OP7@ABYF9XbCIh0WYqp(=INY=t~TjL)=Hhw_|!>|;LTP}Dj6_1+&6TU&t` zOt(Gpyqe<`lEr{kw!mWKh|M)*Atnt2E1D>&ET+YQjHO?;(;W$8ZKeaef_w9AM~F5A zyCnl|qVW+4|Bc~MqFZt%Q2_1t^~xUPbqqvm?hIgo@98bt3ebMEj?B$2+!iLNHajY5 zbe>}*2o6bybc6ni%V4$$r&^3C{48D1Tqzv8c(}TvDC|pkTrQmy7SY)oVYw=0=PiI4 z)yf^tNm1^TEA{NvUTi9J1vjg~3NG88Io}V{_!3=2zr03G4bQcft+owG0+21gUY&d! z1!BLAW@-k1ZuPo+M#6mvmeuoQ?%F@Mu6tI1MyDR)MlAB)`|R!Q>fQyv)Tl23zDsnM zpxefie$fxXk+0&Z<06;FCrJT$?Yp4BwV43^63wZ=d%dIG;S(tCA@1)d2s3IxAe8i9 z5|aqe$R{JAPu*NW(hWqtVPTBV?MK}T=Q)GjM+wyd=%8L}=IFkB z1lYS`fnKENV{mS@iSe>f7?Z$ZSsj5$V{T|SbN+>htieQ{F(hNALG)#V0qPOtFzWQK zJh^Hon_8cwxLQS6_x9{|<(VoPX>tVBMVg1Ox|P|%HuZh0D|IMu1h%$X1;?guzea+V zQRL{&)(q^=d^`)j!mJNC;)sYfv^g1!B&ZZ#&=j^e>BJ>s+)U&~E?V#u7)Fa``IQkg z!cgZ1j%cQLsBAh`l~j5hM5vR50UiE02@x`{UHv)~MO;p4a#@$9dxX!T%WRbI`1ca) z-^?%4#MRyiHTG!g%M|?k4Bg{5GmeMyIjioqLhOb=+t&^`^&R{^6OI_#%mx7mAQV~^ z9Hxi;{uR*|(9!FXhAGj0pJR>VU(II_<^S!+RFL9LK=ta1&MinWN#h;#e`&^7MW!(vIX73WF zY{`|&ZMO3d=U67-Nby;ujUlFXGU@#nQojHFc<2lK7A^qD+kMoa(E z!+3o2nEm-`Oc!mKV?Yj4+>Aditp57;t|sOxq92L4mL+Dnj4}2G`E^_avIbwbLEW4a6a$T z+!bjVzWw988Vnf9*!bMGvU``d^X)NaQk)?KC4q7*+4>v^Q1(En@9j(dcO-z2S}f4h ze=iuQhge&zV6$=K&&9`a$xWJo`U8l>3@G#96WLE5=WjKpue_pm7|4yy9!XlmIiQ5=;jDByQgV zF#8Gp!sI(Xh29cIj+WM5u_pqo08In`DRqB>w9DB+ps!N5!Mo;rKrqO5>dOoNvrhl_ zI5BuP+@8D!+1gg$ZPQ2}T;q9JunB+zAJ77&1@td_1u#(k?p@+7aNj?X`Z!}hzaG2N z{7@rZ@j}o1=yGbi2f?<=GPQ$r;RdDEzjq*bA6@yld`DDMkUMD}1!{=x&CP#2lJxb& z!JLAYxj4C$Zu_L4`?L)=L7v(Fm5O+Ge2iwaJO4*}e{>UIZ{O4SB_JW^FtmP4sC|9p zsgoTHRrhY~+|o0|3w*y_@cSC<_XUN*({4bIKs%_O;;lF;Co7472 zYtN?!>WXp*;A|iJ4EWMZ6o1Y1rLnmCkH&(y3MBuf@wfdlXSbN#=6kS`Af2bUk$l$I z&s>5YTGKv{rIRmJFhz;%{>;vt!Rx=j&*x6FqO^~z#ucawi9N3=g7Oto%5{!(!1m&+kgjzFgGj&?<$nJ?q>e|E?JhKl$d z#%gR|@E>IL2Z#=RHNdTF5O$Ezy-P&fQ_gQ4X}4Ck@f@i{i5B+_mKI!46_FI{d(1`c zI0Lk>LYOH8ou#LVi6Rt%K}kKLn^Qz%i&`W%<1dQ%p}OxPPagJMsT8Lq;I$3DShr1T z3diho@w!Ax70laNWnME#8Vm3FuZ|Usn<;sqAx>ru(xxxTG) zOUuO3G`?u?4!h9!U(q8lc7}CZd0*3ZA*@wd;&$Y{TIH6AL!FU8;$&upoW|jDccJ`S z_(?4%?!Yf^VD_Z0mQsAcxA?VkqBAks(ZP|*v<(;^+UQXleX4qFx_jS~46`*W*r0Yb zDF@06UxV@~y*}Cli$t;GEjl$wfOpY>e%db0L|IqIqA;vps^Rn#gy|9sCIDF~{z680 z1;|QSoLB;32o=1S*hQi0R(EmA9z|F`_ous>-#4NiRp!A3pH--I7=D(`;>0K303Eev zPRq7nn`gfML=$E$W0$=!~*Wc5(D@k-&JobA$)^06{BT)puDE1LE}vR zc831w)n)!08Z`U`6lrb3X(gd)84m3MI9wmOMEtTTU+{)Le9JEcZ8=7(D)@V-gwD%q zB~DV?0KSHgWTv|q%PuPYzSUKqWpJRkDq3jvu*+&cr&9|Fyq_Z=#jt|1$b0v1sb!aj z7J(FE9BO|>vIplv-Bs&FM1I0$d7lD5slV_y)y=VNp@h--JIhWKbW_-Y^~&SP5tkhw zH(tpqnf;lD+;=AZrS`IYJyBD~J?8m{;?h; zBc-r}@azUh59?aF_j0w!#@I!Xu%_o9FUz`G)cawcwr_x)z?(;>kw!Jg(#Nn+2jx-L zEhY9t-WA0{Ru8<@#IW*j-P6q!Jgl*z zTjv^ou{j%HFdI-BJ@Cj!q*h9c(D4058o`c+0qL09V}UNE z=Vd^5|EoiLy9uymNC3rI_#J{Cq~{0k1(_ik0wTF2N51!>nHg`m>^=aac^l4p@bp)O zKeLLg+s9aq(0*<~j!iPp>ro!Y)&GnZ;t*4@r&~U43St>7LN$nHc$hHZDsLeTva>#= z9OAM;g`C8K<8UYdj|M^KiTze$m8Cf|t$4`m8Yx`F>GP-0Bn=M{f`N!S1U~@H==i`$ zesg8@q{Q_>1e$0)qeM zhNr{)XsACh`xvM(i{$cLVIz>Oh2;uW*WmuWWlup9tGX3VQ!o$`j6?_qe9y~k6HIrL zV)J2T4Qc#FWOTc4O&$d|wjz3}NzUU!xCE!wGl< zAeU*E;7Et}kHTU{p&n9d%zN(a#P%XLh-dx&6h%9DXynO0$cntvR_BZSgam9kQ0AkH z0B0ae;EFImiUo#NGlPMMqTauxq22M%t=*rQS`KF1)06D6TuqMRL5uq`Tt_;z6lcs; zr~L%sT5N5lC<7B8=n3CPW}O*@P^_pIbdT z1#XQIOdX+;kUw3^shWw4s2O`&_@u3e3-N&QYIx*v>oP9yk-3^^jDG(sqvQETIkxcAie zWh*7NeQK_C0B6;$f zv;yX0Hh{r@@ASHu@z*Wn3Rz`3J^4v0d zh6jME4V>xI$B6-Z7nQ#Mhm=vR z`YEnIiqaM4s6x>%I-BQs<0o9ZIdoRwMt@2*uXH7f(>;bKl+NI#$gH~AJ(-;MM+ftn zL(dR~ppQ}{iiwcQPJ@*nk$98}@HgR=9bftm5liS6T*bA2PoW`Ou9?>cx)<$M)>|VL zfx^EoCYeXQF0#jpGFun?pgVn;6yR+X1N0kzhD%jLJ{?2A&tchDKBuHy-7 zFdm$f-O~j&O&a*8E}aM{_N|P1v5q{XgPT&ZVXA2NFW-)nHnsmVM@(@{18#)_9hf-5 zrG2>Qy-X;q{F@a%5}=|9pvw6Ocp}uITA_AMqef5n4cr`!^9xinvJyqwV9TizuPUY( zT(a^Bk6Uk)=!cN=Iu4^NweP&7W`wSB3n5)eWoKMmqotZm|$D{gx ziI}Xj{}3_Uzb4n``0-6%f30Sy7Nt@ESDw6|_C z!VgETpqjm}TF#V8SR4~WZuiywC9$}q+SoU2t23->#j#t*R9 zKi!l~mbQ8PcosP0?>-qr?$bx*&lMGk4}9SE~oe^*<>TRb;Fws7-{%`5({2{9)GUOrl?Wwi8qc5 z+K{@{W2AOSKO+I*Ty~Ubc$;VRRN!AVPC=@_eJ(X!+tRxA{_-hObu5mUQHH&5NS07Q za?Dgn)Xmq+rH1yu7hG?;1XK2;XWuf*Z2y4qoJx3?#vkpk-KvNfx9CtV%$!YfNp?U>yQ#MTNyFUV`_0q z28q}2tF}J|0uLT5HUaLmTU%-|A{RwpObemOl4sJ*cLGli`$fdu$GFgs6w|uVZYsNq z36+xKj!Yo9BQfbK|)|2*fb&}aa0ZkhKrrq7tHb}@sSprb&T;K zg`ko~Ua+^5hb4)0X+#u88!@y>cQru-JNFw^1uN?LHmiXY zhfpPq?QO(n35l2Wi!m^HGB2v@@?i!e5t&wkZmoHMiN>!2){37)y0(7=uEs{ymjQn~ z86W|4eB0(ASK&z17kzb?wxL@1E+M7qLV+$~&f;SVK_S9Zu#0Lbj+eh*K2OEQylalP zl&UVLmOlAwmwEe@8dVAl!YY*!BUhYBdiKmzsN|l)pe`8#k&e+{oAS4&s|$ol;l{X= zN>*kaWKLa%)uKttduFMciLUPjZ2VhvD}~fk5?GNZz@p5O$d5OiSDaUj7`5ribbbko z6hdzuVyTbM4H$E=+jq31Vk`Vm&EnNw)3$If%GhxTNzC@Vyp?8gJxpcR8|#CDf?Jpo zdIwdH9S`G&hI@=JVMKgcnSxER_}%mY+qq1@AEJ{RAn~N~0@1-}`No2!f$7aYhCzF| z9zvDAV|I-GIQn{*dxSKE-VYgzUIZze{#=2Yro<)EV2jTT_JIX}d^r;vR}tZKknJVX zOOsCzReuQearLyc5Rd4k9pUPDOPEI^_{`yW5K6br{Hi^$X1j3|4igqVx=GV{s)Sa~Ag z_7lf;^;xOmB3P%S{n#pZOUM`lHLvj!SI4~$?gxBbV&g2n@}(DcYje;;jp_*Kj$$sz z=L@I!w6(Rj{jy>Hr{jMUz^+@8#Gb5CP@MNy26!%wJ`ylA=-i#jxM};lT$UD~X{ZtA z_Co$1A30#`POwck1OC*77)3R;ay`QMg7;9?8zI;8Yb*$e>z$7=^pCn%`?2w7T=73V zxmrew1UP!GkGAjZQ@uQ`0m8?UHPXdAkJcMU1U%L1P;d9spAnO0tC}!v)SEa7Z>0tc zvePK4G;g;aj`aFg*ov7qIMK3pUgPw@S z@7(^KNWO~f{-O+(ea&fBAbJ8xXN^{o79Slm{``}E!mx|LcLpql0D*u27ddRAjD?)v zRI;vj#v=PX&)Ga`cOOqC1k5uvTq)2hn%8|zF|l$Ox#>Jpq(5!WdVTqPX|8--{s=5z zzK?~WB%bW^)6S>=tlvqaR( z!&ASA4_q4S5I0AXMwN(zoL}Wk)|+*{Aik&w%}c0=wyoD3ZqZ@qo5qB0FduLVs-ST> z+e7?!P_$;Dp85NfusfKX>#4uh;w0aT-pgVZf>Y4wMYEy(r%7+2uB|{bX@qEAK>gwP z0ZO`jfc1Q(lH!L~SanE&HhC(U+Q?Pk^#mDpE%|d<7uK&=zC4o+7L!|4V9J9C90^ff z2QpEadeg@-iy$>niwYZHK*c!73k$JidLquAS}<5JVaX$8Dv2K%>Y_Y*@5x+Lz6!qFtC-Xw?uTsPHL?2Ae+X$Ozz;ffE#1-AI z3`G-ZX2k)z0S~D(VfNDMD^m7FTv0QcMuIgsvdrhTO62+T^ORi?=qJmC3OB?lRjLne zg5CHIPY=e+!eTfODhE()5dLi6FZ^ z#M@Bp0VyyAqHu%20%x);(aonC;v{my6bd(9k2xgKgfAI5*jk{dqJ{Y{U^q|KaR%Q! z5INWxp4)4=+3D4BZ^Pz9{v=5JR{Ja-;Mv1d?TmWrP$_z>ToLgg-Wr-o_Z0nO+fL}- z?}$Q9UhJ~i848d1J$N^D4r0a8oP3cvmvmY9v-hngWB>DQci`Krd=+wSk{_RpT#B zxc4ZRsWfSLhZ2ZMQ2<>)_D@F@i>Mfd>ZDzETdEYQq6~UECUh}RPv4TNx!WK~O;UK) zu!=-3rr$vZ?cwvGs6>clMCpc1!;H|+oBD!k3+yo$^9WA6k!c7A<%a=lG^aUgDLX=c z`||#<8%=D^Qi=B&82W*C5~U=_m#k~{Iz(Q;V7VDN{0hd{gjQ9QpLFS|1nKMvR1?L;rJVX?~$P4j5eFc9LByPTRJXZtZ$YWqj;sTJmB$@#E((FBzw(kmi}w`Ligxqnik^`HwJj zFjat-&Z5*sqPE^B51tc?@GVrJ$~gCYgCnyf-=?|~LWfHEIzm74`q{_E<&Q(FgMb|;1PGumNbl=Dm8hZ0Hao}p`_I0|nI`C?1wKIm{`QMB@-l!WC?r0QwIs~2d z92@qVTh!m8hj4G#9eiz0&MxHfktZel@dybEl}YLtzjpr%7F+)^`*za9c;sy2Va|S4 zKK=VE62^?0_hEcmLuqPN9m2*pBr+w7*7x0*y&yWboiT7F(-^^bPm}RDZ+*N-YcjXA zL7TqVJKghkl#@I740VZO4Yo$2!ylt{nXj?%&+y9Kw<$qYES;ZSA{Ixpv;$e2nrL)X zpv;Epw9)x5sb&h7CPR*0X8t}5((vgC*(t-0__J=hk8y>ArAwv)=HdzFDY z28KhrU8m%mb&)qszeTsoIqE+u{oVGl>YrZFXe~7r!;9l^{xMU#xD{P0+Z=Ush1a*cs4anfS%ASC>Fnw~E8>57S?jTmC-`aQE!mo9FWobz zOwT+jX?_1b{Y^Z72up}f|N2|uL0TbE(4hcSyH%HRi5SCyM!bgKMu6V~434I%DA`8t z0gW9PBQ?WmcUAn@>Ue_mz-d`}`D2kUz$zF*&|IR8WU8{xMcQPWk?shMfJ@z&bGcSmH$DGTpod(mHZ zDFOh<>#6I1QN@X%=PB{IVwVgzdD@LSs6%2E+p0((@362Ccm?y1X9hI0a%@CZLqUSv z%mW;?2N%Ql(2`hwK5~&omc5g$8IExN_Vde-?AFDxIIe;ll=mj^#Hr2i=ia8SgWlW% zhgQwP=Ol|hR6T5^t$}+IYI>Ha9W)s@QqGKRx7Ti<3ry4SP2|IwZx%_{M<0Z$NyYZW zO>?<}nJ;(YVs0M~k4>fq$_ORK>*PI;dcM=IK~KIim-2u)-21=}05vccF$%a`Wnc9H z;8)UK{SV!=06pn=Zis>QxF7a4)!+B!{=5IbY;-&AJ65`+@dQ*zAT*ocv>$g{F0N-p zYQmI_+DK+L{uj->4~jjEM&S5HlcpXwTwkobHv2(d&&@avxZP6QZCt&VP#6W8gE0yU z|3E(cZWUVQY&pxc0B*17>;mWiN2XWF0Q!DEg5sB8AF#Um?d)s%f8_iB6%_&XTNAs$ z;iWg}Z{G9|0_%AVuGnyFmWoN%`M{sXDiGl!I@N63T`SPHRORi5`wjHVh1NEhIL^y` zs%A|@$jxf64128iHrxJ{N0Lew3 zvzxX0*%H7m%h6<%UTB7}GEo>}f@}LW zi!VoI)+Zr#WvQLgDkF>^F5`1IOb}PXbL6tMdWswA z#Cd7S0d7Z12g0U*z=!iy7~_qz`}Pv01X9kL{?Oo;{+epefRddst5}s-JD=R*B;moT zZ&p__X4IO&EWzJ(@>o+QLM>zaz?FMHNOkToKFD}lT z0R(%IH~zR7h&Z9p#KjjDOz+?Z?3!vmngvm!&9Z{e1jg^fJktz4b5~V74lJ`_e zgGImJ9)e=v5lo81^yqSsdGGq=CZQ3%PVJ?XJ4enT%|99hgcX*&Q&kD^-4%&fE)Ohs zXB72=SkQlqF@^U|6h(Ys7pW`c7Vkj6p>ngZK;hr7X@sws)U73D!AgL8{IxdHs|JW9 zV6NH1cV{N~$LfGkzM}7{tgiOQQ@q8HB zt0`xSO=}U{0*z!-0q?rf7f52|i{kwjS#y=jVIqB-t~GVH1W>3M`M60>SeAclN?B_v zcewD0-oYbgJTXWaWAE;U5a+(vn;>KF7Npc~SQ12Mo-xLceEPu^b)oL3(4BdVh3fyL z9W0)Qg!WA3PoHinINO62a>{+w<{m}2p9Avnw$0Vl7ckj1nd{B!B|c@V$HEJLFE}vf z;bIG&iy1*u-S|3FBcjJKz>CN#fK}U_tJ>Ib>hJ6FHngQ4jbc#C_^?pb=3IC(T#O49 z%)Il*8`yG%tKz^inK7I6cjni)u1RjwyD664$*sM{{qT=XrMzn`6*O|N`I0;fa66zv#BmX5h?YW^UUF` zB$Ww=xlDW_my`g`|N`N1se-}^$Da5K=@VV~(B!PVtJiD7LY`!J_M1J+Ps`5XP zxCJh$-vVIoUzb*scm#ptei1$BKw|0WP zv0k{}JTnfc(Z@ts9UXcPqz2Yz{{I8}Q^1k0ZO$c*Z@0q#H?RMFOs*qz|DyZ)HlF+s z4JR^q6~tqtGSFovaIcoEA62}ZjL%+y>w|$9W0U;E z*2cud`-9UP6W{ANLSw!~g0eXyBoW(D|8Tz#$-a}DC>nU|?Gbrpu0p=_Pu_#^Nmjm+L?p3E;U zV|5#>O0y0;87`C5|MtpcEfjQ?p16hri@MEFoG)OW3?j3Yf1TxIgsF(D6IBuV#&!{1@*MAW5PdJdS>$d7)#PRjnNk9*ByUp8c z9%K%e$24p%z;Bv&aQ*`1yFt9subA@X=2sMOe#Ta@fY9}iLK?W5VXU_yHyfcCv5D5t z1dx`6G5^Bx5-r4V^i_~}^tR`zlxIHZh;J*CArJ@0tUx+o|Ega7h4L?NX~ieG&=q$K zKIpM9q+NCm)8lc+{4#E{b7@bQz0Aakz&M`n*5%$hX3+6RE|$t#`v$zDw~*G=2bI{yIkG3M03?8-|c2biXnpQ0!B+8*&g;$^crA4s%J#Z*$)VW=WfGagTlf zYe$?0E}hW=8NUhY@pn1m#W0?n=!;bK|+(&h1E$Hi>(IBfgk<^jZhs zblO#++#-KZrCdRcmkwLLFrWlb;rx8k!#nUpkWJ$mkW2AxKr_#t`v4lx`a`b*i*Es1 z+iU-E&jfY8um5M(^?iGFjO~E6wO2qsxs2xvfdQ(Wo@C7-olR9?UIV|D0(B@pc0>FN}pm!%5iY z{h7-{9Bbah)4Sj_7YzH%#8X5_goA@`d%;m>DeoFVz|S+!PGWzCyFGFnKw9mB?2^9Y zeU7wMfD;ZQU##BX?^;U4eolFcfOZ~NS`}*9+Fj;_qNN2HGkTqiUHJw2Mj+GUIo=m? zJsE7}S-}~{#IQ8Er4lGriTUdrr*b*qOFc=jbmKt|i7_b|#KDL)e>WulA7N~V)@#N| zfzD4D&Mu)?O5y4{n$mZ{Wa&x|7X|r#m(LzLcXfDR%9n$K^DO%Ni}Kv~{;>Y8%LxCk ziDcp7l?b~v;Ze6Qa4Y10H98VQ{yqbMU&}{FWhY zZT5Jq5bDk?BWaX<%);*b;Uk-h|MHLz4DW(9&K6^#H^YV3b+kc)`LY3ybz2@t)Z6}j8v zZ27IUk(%iRJ>`5Fx!-YR&b5MTVfLR zfZ9R*_Rdu7VI+l7FNJmWzyxoK<+Wiu-YE3+dUd*{D_?IUcQ;p>534NtE9b05fw{;a z7;fN0@3*^()s9%1!QazIA1T5ty*u8s)4gRb#J62?jFB_2#lj+`k8tejm--~HJi)^Y zKCM7d)ud^R=h;ta;CGIuGq6Zuc{v4Lu-G%_%zfipwpFcm9G(Z2%vg+nY@9a%P<-#9+x^2iqcRnXgT?n2goQw;fM8z& z3x@g!4XsNLTSA}UYP_fl8%ld6O|p_FhJHe%XB4gk3z_LL84kTY7R&0%o6GD$dBu%! zz#^le2;5J~3Do%MYA7>-1a1qz9t4jmaN1exwkqCS-T6)a1f)%@+!1}@>Wv-MBOHSE zE0y}HL_qOf(UsS9{Y~of6j7?nN9%HTlT|MpovUxM6$$nd>)VBg-Vx>9kWQ+Ab)AsK z!KDcA>mhq-XLdRM=E1lr=3YGHwGw|K+mqAN=GVX5zwa-52L*}V+X4di-PZM)2%8uH-*o}I?*UN6 z!Qxmyd*<9x4Qx}q;!Hrkp3?R_u5Jw8e$j2&9Z2jBT>AC2`S0}ayJV`o$4g7|vL!%? zfq(A0lhS-Ma-XwZduQ_B(5=qlJN7Z9{r1tBAK`U&t3pg?=w;#4->3cCf4{6}Jx})g zpR*GOB28U(*>baWvvQ6-UA!C?c&x9FtvcKbOZ#W;5XF9?UQ5;~6(~^C!X~@9M^Jkr zRIee9Z>(QIeExh%kHrO1)BAm+(i(~2)A}2(h?TB1Ly1loTg%Mj9V~I>2g1rb@Neg2 zZNg6#ET4Ju{HM|29zWSf%*6s^F5tPV?J`p5CSwc2-?C40Z*Onw!c`1+;=1;R|NM(Q z!0)NZItA=WL*iTbV(kM)M~fT(_j|N->3{B;?|uPhx&fg#fL1lf|Jk*h|FdhKLcTJJ z(2A&bB&Kx>|1(eO>HV^QYJa~oUjf>(bNny?w$}IjuXS_V0QhXcbA$Wj3kPh)i&p!% zrj){c2e{~@hQL-nz^U8V+L{8NLltsufzPX*!0(nQ&B||4tF!5uRd*4wQ1!M{5Z5P z?B4o1`2+ypk*~i#w<8ao^_-{eFbhgzimR9(zxKT2-h_TkhX}slclHbFBb!1zgUYp^~c5}vO_KjhK_2m>7C5DGul zySCr!#l9Xp-!CWt>)e9YL;&N&e}iL<(|Q+jG1e%{k)s`=kCA*khR|yiafvEUb7y{yw^z97CSCww1cMwbj2J)eDi6#tLvaYsqzfYlot!a zivATp^aKLfXDky4wiTAwr}u3@q^ec&4kVtc@tZakV~TuXWGfDHS!$9~(4UK-qHwqR z7*b1)BttrGmD_FJ;(rTI7k5H-xNm2#ebPd!SLVe;Pw#4lcx>C+ah_+U25qn8zv8+> zdlT$p;ir{a2xCj8x*d3>Zh@+GHB-(OS^s)=7=vyf$WSqe1Hrpswk|8MH|?^*?ZdCl zE=qxj*dwwNI0;khBJuAb8jrDzNXTw1^AHz^ac_;IVz}{FiK%dPtlZ$rKh{0|FbkCa zEW=1xI&t)-UN#8s)X`%LXu_P=sqdGe$?VU!=)gKfyAr8d7)K+zhH01`#IL;_MMqSD_o)tl~T zNc?(fy@+WYN;zR`tODbd%DRb~j$R4K&K=rT+z(7I%9HG)rhUSc1rXOb4>K$2U-CNW z-JPu^<1#_vUsylCTe1bbF79pR0SA%tM9+ih2twemrYbm$5jE z=l!TWbS$Lwu2mm4X9p_&bchzU+=C=hY!&EtCL(3>3&Kfh%xt#I zNIxc0N-WVqKLpTU;9dS2S~r4pD-O|`eloK)gsdafrPI(JKMJwJI*LWD%@m&ZGPLmA zy}A>=AXUic7F>tCVxz?))3^drpWRlSzQ=F=IBa;~_?ucK^3<&z;}{aWtTs%TxF^1^ zoy3%4RFa2}{eE9#LAM8*2uXvf-Ks7KQ6;e(wBmrl7*CARem@jJRZ)X!8A?kbhdo3F zc5@=7G{}H4$=2E?YZS2MFu9s@+CKjK>Kv84nt?I3^=jEv4Va3(a0G;3dMG|Y&oZPN z5;ntlz>?%cTd`TB@vZ%{PTz}`h!py&Bqn}kb^i`VF(HWjSPtY%z&QQ$pJj5?! zzB0M>M^Y`ZfG@IA%6tWL5t5Vq4{^>r@~Nj52X_cumd1+Lg}~6Xs1ju+W&3p>OeJga zd-}16Qq1nu(I4_;MB`8>L+Vck8F1xI*CJ1eVP_zqkic56>Or^6&Qo~f=RQ#nGHu)6%HC9r z?-e|qIvo?Ign9=8$9A(NgOAXXsWJjynR|pQ;kyl4YNJwG&5n2?9hbTIu8c9v0vEsB zt}k>c({WRNC1(|jPMb9U$+^o*+#+MH#~C(CP7j{#(hLmOaB+bO%fDD7Yuw$M)#}3qi#7(E4x#8LVofGVAF7;42AaYfU z384oB+F!4xtc$0t7ttg~Y$cA7B6X|%T*k2PSiSQ=moBh1bNQ`&cg0PE4Vyq5%ntL% zVb)ZIdpjO^6#9VZ&iM2S7lgGJgv?aSngIPU65?T_)3f9IlGSvGHTzk?F-yG6E%w^)IYC((m= zS%1%me5?~n?;L?#Yfz=6v9k34_JC!U8L?G8%9Xw1yk5JPr2_3B}~wHfK`OD zWsclBWFpr)PU)`H@IWGy-*V}1Z_VPg5o%Eh=LqC}rS{$auJYX8E%k6&+H=R8|f+E?ZrEGBJA zi0Ie>U^;J>x@pzR7#e3Z01KOdHz5*ii91nN9V_^Bt{#9CN#urViww4(7ej-gJ4=C$}v-b4$5@r0b>&B@l&%q3+Cq`P;{J z7%5oUQP+EY`Yu*$vy8>u5-bby0swctWj$aX0X%(CJ2)6jwE%%QC>hO^E^{c)kkM^| zt;xKP{E#z#Bi*J-pwsD>3}4gKOBbyQylp!j55k|SMoijp63X9>SkWKOY&W6YoV>U|aR_LOp67B3%BMzpys*+tm()!2gSKp#7lEbCO3Vqw0oc22&u4s9x56LQojKnUr#)S=J#byM2M z=~lL$q*q^P=Fe5_1%c6!5!qTztN64<1VsYzA^As~*oZ8ZBa01!B{n^GqbRv`;+np5 z@Dh^TM8#H?hd(}BdO??)ZvOB=_>wi11)ot!kA!#qMR2$d8F8gaX~I0k?jQnEITdrI z))@)vNY_Bn>V^8y5ZA)OFF{wtAJ;_=*Kp}BGX(tM85m0iSsjO#MmfX!UmNsHS7Z(5 zHv=c=f-PB-WgOwOd!$)971QE3@wnvEFl8vFGY864v`Dn`;Cg=dRJ})VJW8=DUMjll zCjPr#)Au-EDDnkHTujls2+IOxy4C}sTt9gQgMtx2T$9l_m z>TRl`<_iW+HAXB2(Y-&Z;mOsT9-Ay_4SmB*e%~(m5!uA1gUu+8^I-tt;5_@tWprN2N*F)#kK-(b1RkHrn zCW;m#K@^nh9;dY%7y6z4UACgnaBhnD#dfkiiCm%1(CA#cj>hf1v3C(tYE4uG$8dha zA_-(G$mO7A_tz!3ak+EsQn?KRMV37Y`_+w+i)M_z9N>W17-72sg1@>pw{%_SYta96{uoy$nHLkzA}!HjR!aS}aF4+`RTay3LRxi8yaRjJd#gQLbZ9-D-JW zm8^<`UxW&#qP(dqE7&BIcwB2*#VhbrjG- z8i3fQc=HOW$qS!;U9kQPV-Z#lgzl-STth0NYXraVi+tz@J^mr8{%YKheUhMx9Srg(|Cbud)P4jqkP&9(m17KB7G}|%q?!Ct* zMXQ@$C3li;jdKDN#zn~{wZcr6-HmGVuTTlvhogpc68!?T;7($C@>#RfvBsqw3OidY z6}m=ti(i@Lr*ll-Uip6uIY#?CnP_+waM5XJCA{%J^Q1akth7N^yClhq=fA6XYgiUL|Bma2qYB(&2Q8q!H z6C4{!p2fz(CawUG;Epf1O35Z-Dw8wp8J0cT1anHA22`<+BUc{kLN4-U3quJWZz zE9vtLyN0jAbVeoW#z3pYcsO34q7KC8F{Tn>UE zC9$Cg1etD_UJn0>KPlTgYUHX=zm?lNez_S~w)iPx_}lCyUp;y98PkRcmw!&;77RxVg+o8!KR?>1N8gaoVRchyy&Ob2ytp%xRmsaAo^gw{ zDw<}C+h9u%J!zhFpp~fD!LYrdbVIRCg5KHan#ApcD0!+$h%%4O{5#JcwQw# zZ9~ZmVR#K+Bd823`i|L~x?zwTp{V6Cx9kMtOy-BQMrL~woHPTc`$`!Wq9JA2C>+rm zY7pX%y>dqj2ND$LS{v9_UxLIO=JGC(9chTvlLVw}LJRg!ZlbSh)yUnFvd~aeopUkD zs7STbqww;9Dh|tQ< zGl>Wo`rNWZZDNzS=rN5D2j+Z;?A+1wE*5Qey}`robmnh$l3#Vo45x$^ zW6xAkrm*@=npsVGG)ImCd; zFbGFqDQ9z%{v=Ncp8#(ZZn#3%Oe=Q^kW$7yhi0k}?8ai`(#VD{Uar!FS+2U_%dvDu zpc2Ov@dbY`yxdsvI+6e#uZm3rGhvX;2ziYA^1_n zn3|WfB)~I%Hp<2{Pt1EKz*}p5;z%+8oPnw1GAd9TQ*g{xNop@r$F8*@TZ?5cw#q=b zVazQuUYg>?O4ou_24{a5Yn7tx?(7&%X^ix~+Ya+5_X+PMw4Na~{bi6GD7rf#L4Fwl zO=43TjyaFVU)+8SJ~4_q9oMuHv5pe3TulEOm3}nEOVS*xt7olQq2gvD$=my+^lY~rrZ^Qr+(yRrm!ttRzW2SVO>|L zrsltdRn@i>r>wnLn6O8Zg!iPFylXqD$TJEk;W<|%e(m&2tE7BGNIZD8U=src%Y01B z%LZ)iJ^{fvE$;O&r)i@KA8!tPLryUIFbXB3>teaWdjEMqzZKeSnGE5!X1EQhK2HfX zOGPWYH;p9Ud1Rg;+h=$*gPImc!wtwP6AuTrse4x$&vw$)U7pe_4p`Ex=nj>e)OZw@ znrL{*GmV<61qK=(n5kHRxO`G>Nb^bSJFF)BP%iP(QA6#FZ*#DQUO05dTu<>&pLp#EsKC@cC z05A)-wZ}#^c|L+H1tG_*AgJ#y-=H zsU`Ef|74ZQJaY>WAbdJHRg`2;U~zy*aw`tifY# zCBGBcZYx3N;@sD?GdztUIpagptmq;m4{f}*mS^vJ)iXQ!R`7m3ec zc6YaML*0hpqES!}qapSz16p3n%ILpn zqcO5q1)BYZm|;Xqd?O_Ob~GXe1+R)4D+aU4o+_jgdAFx>a<2GTp2Tl%S> zvOhQz&xoCzQbqG58MmC;qI!Q8SE)F_>kG=5zkqH8HAn(fU+HI{Qqr4y$SEU}=_Sr& z0FpUTJ7%k_T3KzlMPFk0|fA-niWi?_2f${)gh?L z0;_?f%O0;=5dh~%QI2K_)#+cZD%oi10I);a1W~z^_4Jyr{j0Kq3mPl^_=KRHDUjND z6SqSz|BBg$zl4QW8LrOq*pnLKYkSggsk4VB+l!aGYI`LSh|Q(CdXTU24Dih~WL37} z0_)?*XB$~~5=RRUiHkp`&zqw}+Own$4F0AQU|ZvTng#bUd$djO#AN;Zv7;LPw!EB5 zhs5jPVxpsQ+1mgY8N*O`Syu3vg^sg9x^r8ahS)a^7cn@Uw_gqp(6UVH7$1Ietu6t3 zjoFST^gVNU^~X+Tw|{%krhTci!J^OP>D1_|3Md()EsJ~1lWdj3q%#kAmlS8;{TRx= z+2qAt7_q5FoiA;ym!V_eB50%U#Sf+uXAhz2@~O_m5>vDeK9*h-^nj!P z0fPG5|55(2lZj{6i7o9G6)!K#z)=nLp1Rzm3s4WIc# z6tuw1Nj{4Ubcj}}-A!MloiYB?R%6^MY&gnG(m{y|G0PPM2Ma}f9Dg3WwJ4dp*gx~1 z4aRd;$VuI+y0xv6AVg-^&Qb^LvEN%Kd=c?*fYztP?&3&eURle|tMOb5H zy$(H*jR`DC=9Jew;FdFN3bXX{Skwk~Ciz94$bEAw=|H0-UVwG+1AfgEFpr{Y0qkXB<<>frF@Vq&4R$A*;$|a9SP8%^*r`# z64iR8ix{-4s(v3EmXYYX+tLho4wdr)C?IIGvvzKlBx{uR+LLy_wZq@!9r30-?RS9t zPw5~@nqY8-_Q2x5TLS$4+Medw^R3zHt+Yv!RfD@jxD$5wUF7{m>N|D8`_UwL;jh5( z4!5Nt*muTwgT0xTFpHO01R^HY#PkQh))Dvzn4u@+d+9twlDfYMg!x=ayxkzG>KN+& z0~M|-_-OLC!by-hE1c9M4s7&)MB~^7;rwhQ08A1YvK8!Z!3nNwS3suR} zhl+!xEm&u*Ff-5>LaG9=1U+R5s3brb?AFCezzy`>kn!K&Ho|FFBa5t1hliS^diCMY zq_?<<#b}I0(t>GazL8Eetda4!4e(M z^+*kZ-7)*_0oF9#|2kHd?>&sI0U_xeXpjM(?xVt_Yn(Dr6|>&UatKNe$|EHZ z2l7W;kb>C64}AdOuo1gT6^$Oe#N&Tjg2fO-;x%ai21Cm7M3*-BM$Wr0pIN96K0OV> zMewl(skA&XVn@A z6n@_#LC6l-MJd0SUC5M)Ddn&=%UowCT9SkK6ngRqU06)?|v0A*(grr|9rfAGSk}gO&4}o+gd?lF#t>i1rsVR=nTa7R}SlI|tyu z!>)uigoN<8x0+_qAN!oXz)8-LH$~n{D?kuV^mWfG z<;%Jsz&9B1@(yHBCtvG%iPhW#>|O&XguWPjfYT!85#_t|g?GO}))=9xakoFzs~7ba z^e=5ZF_&tTuS%kAxb3O9YG z{6nWT+mu21C7x-P)0DCpNS>3LJpQFnop_A47PPGnq_X>bqLPGl-{I}4zPGB41 zhgW@P%ct_WFrtL-ROK(Jnb^kh>YOTb*f+rOm0;}GkLb4}S4W`z!uOuyLcTn|6VlCP z&aEGLtAA57xRy^RIIg7qQPC)@95`lGV&r=29Qm@GY4R@546+4P!6U0_F`e-2 zrbOzs-QeVjTR`6E>Ddmq(^Hf2r=-L6R(ehjI~?f zXYA$n-;Tpxctui#-@I%k!`Ztj%_-JC3o*2K7L86LU-_ew)WN%JR zoIPeOQV$KG_UyGK(l|rvf*vJRSwY(P5c0s;xy~Yc|3mjX)Xi>(DzSL1;>}6sdAOW& zzWcZvfS63(jjGFWn%+jiwFDubbOLj;u;{VIsn@4}^{P8xOaopLGtm>BFWXk5Z2q&} zc&i(|aU$tD1fwuH$`Fdb(rpV#;r?^0AzDO>1{i%@3#`|Q|SSt#&q)N)00y1L34;;|zJTRt>wyNSGU0)HKG9QFBQ6EZ+*%6d)?srIlJ;e#)A zepGaSoY(;NGk@-n8D_RoX+Vg19m3%gOxYAiQzI`i;g2Qr7gQ}NK_cuygieM|p7`&@ z!ssoNsYv!wMqUWD47CUbACGIa0c@9uI?E@#&N{)0A8g3AoTcxQF!pTQ5GeYdOYTbB zn=uaCZjbpQi={3;3RbBE7m9U#nKMlxXCufrEIM<;NX-2Y7H zJ}*Qxwt#e|jW8xbyZt3Lp8pp#j~3xrthff#?hf z#d(XKTK#&JwVM6`l-8Uz1?uomyvW3#lePuHE4V;ohu3&j_w$`-<{Mf4JT`d~HjX^l zqvn`o16h!I#mmC{{!he9jDc*!A8>a5etg?$V2y-@)8+>IO)3gT8_S!!m`7IT&yyB2 zX{UJZVrOwsG;a%`=&QA0#RC&6IxI=d7uNGG7v&@eB~U>fCs|jmp4alRzd!$+Tx{Wu z6gxZbhEXB9Fu?$J*<-!)7%lRU`M|y^RcSm={X?c(d+pMGYi;aUUl=CGPmF6w z^IN=jqMq+O3)K`Tv2ZTX$S)QP3Gu6i--aWt>PNWrj=YA)zh+oQ+%C?ZK#PYXQ35ic z!wtt68n8R+Q<;sotx)40a-3Es$LvgLBOs}*Ck+bNUD*|9^;4QXyld+_TVIu*hGg`r z`btaaC)88lw1WO^t&qoa;kY8gsIr(i;&5yk2&`*}y7F?lLlvlqN6{aKE6Zi_WUe`76?8TN zR>-k@NvAHj!$Fw2)XVv?giBY64@Db1QxB7Y7DQt2bk{;bqQrNRB+wGKMzt}kv-xXi z*1d6X$A`RPF}0Jz2)jGf^K;}=EQw&{2I(Z|TG+Iyp_vQK)IWrW)+CUn_a@N}rL_=5 zTKOrt6fmu~F>ko9cQXrS+_kJTQ=whpi|;UlVnhg7pXOM$@jF0yPPJi2*cgUUHO-Lj z@=UN|`}~2xk7lzR;~}BLG0Q^>mN)Q>mtBFR&xDFwyR#%|l*EJ1vrTitkDf2iyrt2~ z>*@7S9_UhQUmvVcMAI*#WgV8|D8UOOQu21fXj6?AvRhaaU2*YT3 zT6)-q41Cu>tT?|{P&8Jd$LeI785fw9hcx;0p$cvb5o@q*6V}2+CSXO&HqOv2vDOrE zG2jlQaT=~x*F2?h9IFq8T`9au4ttLgisPUcx&md;S`k69(cN$D6{U_T>QMAD{h6kr zMCH&+z{rI@ei*JaV}!w^eelUxUtAw5KAiK?uKRcowgS+v7>c-9pYl3oU$L=j?cDFP zGhV^Dvg6dF;%LW`eQ&k{1+-p$kXD8bYwxa`T{+HhlH4ijOAxw-d- zbKpJRx*M=TRfI!{idJXTu?L573ULUHr#A@IMY;Zf?+zCrxnFrEb`|sKOUjZQo-ua-AA#YgN z=-9D#?{e&4v43Cr+c3BhIw{qwhr95tXBJI+a76!2)#+c~( zNfS*S*F0ecE%(EaxCSk{pf=0FsjdWuFVm%Pu_R%q*U~X-9`O)%*hbep4#Vg z;M}Us;vs&Jil$qh!xY48=VPcIYJDi2Wh(m?Yt}XlGFnY7r$9r(F27ByIKLV>}Lrnyi+qx4}3>Cd8bgjYmPz#M~FBaX#g>1x<9-M zKc_6@3U%0~v%1h=!7LM03CkNv8xsvBb0WIjYqi6yQcS1u$YTiArr4j z@tF)}8mgW{ZJlq|j`vF3xidE2(e%~5_jeD_orR>NOsg{2NEpq>3RMr^Q)n=opxp1J z*wP=79G`YPAwwg9F^P zHLY2hSp+wP9b7vDE&+n%bWh{)x@!lP4ie_rG~7My(6}}%XGZ2(cGt4Dx2J7u z8yX0hJW{I)A23y~SPo@T45HMU!N{aER#2=vq#vstkfrb-ODe%#4G`|M+t!*h3OE|! z?{7~ow7001!=7*!4A9gaLSHwKUeWvn+AVWZC`r|x32p{Qx;+VSk)cj@%&-I~{?u3& zzOuVyiOprqAjjPL)v4}&9Koiy z^6mTbpJn|2yQdeOgI2fV-}+0nvAqBPcB8(z^8b63XXXF@RX_Lf|6i65+{6EWcdN1T z|9^~U<^TV6Ka11y}-t7Hlv>I zPCQWKZ`X3QeEyXiTjLjLlO%gDy<#KSU{+r5YEAHTLidCX!^ z`V0>-e=Rf~uW|F`T0Z$ydp$gQ==HG39MFUTVs<-Pwgk-Uve7&X7ZAvQ;W8rwv)mc> z@UBNba!VEFQ@>mx-OPV4K+gx9cnY?@=Cac4gYPD=Pe2pJn9# z`zlw<%l|vIofZ8*&a;yLzv|~c^8d1Y;2!e-PQA90{~zO7$^T#XvpD_V-?Tbc{@+Z= z|2tbdtNs5mo;eZ2e{}a&&u4y?k^fc4Ig7Nhy!^krRa?>j<2)<*|EqrPBmXbU2bPxq zH|zDy?Unrh7|%-n|GJ;W>HogF|04GPl>T4eX{`4D$9Pusw|Z93>RCNs=kxzyX_Dp5 zq;RPzd}52Qu?B7M@!{dU`+sn9_+angcz5^k@Z<;^zq_}8aJ2V8?|uztwm<*R_y6?t zR6oxfo3^f5>6c^%`X|%mW>#3Q=YCGp$Gcmjx9~O-c7nypTr0Ve$KkJ(R z^$!1BUe>GBq)U5wi2;~5p-7+}|5LTLtf#8Y%e-3n$H_+z7yP{?{NwYv5Bz_Tw_nlu zAAHgO4~`Bb|L-5|9_=0D`QF~i?%^N)|66>%(N9;cousa;k$*Ei)vhN0{dfNU{N+n6 zd3oUTQ#gIS`djL8 zBQG3kut)T<}2 z&tIHfyeEO)uFk`V2EPH8bojo~?a~6Eu--J5&^JxqLM?i>(niaA+NVukw|d^V5)UbE z78Hd+WoGAuwg$8{>%|jYDA-Pqbe z^=jFc1s+a0jo@d+KjX0Vx8yOtlQF5vc}vuM@~JFT|DJw%EW_E@#_}~;u4)p~=VSoT zBxYVRp(*k9zA=?A82FL-m1KSx&!+d$R12ql+s)_S<1yq_T=QIF{g$#7$f<0W_s2+o#ER)v?Xcc)``US@V~x&kC}vAxUGRr7q22s`!4R@badasz0Yyq90(HNAmF>L+RHnhaVZo2yr~ znaay=j=uYL3_H`ghYcWxK%fkPgDo>HI)LrBc}+|};pr72{jdORr)nElBuxKDcLSGi z#xx)`@EySU)D?x9xrX(FH*>u-*Te!j3Kb#~GUt4rr#iDWty`rz91aD*@OP#kW>!w8 zjq`pINoe2IWVz!YtS-$;2dCep+Aa;;%vFzCedC&|F)dTUw1|3~K>t_Pk^+WvA>vR8 zyt`*__0hNcr&I%F6c%i0iL5K^;8{}V8Ji!bzcTF-;kTjHCA=dzkl%?(oK@F(<0`UFAVM~e zYx;@*5mx!<+3TOC^m{ThSMp50v3;*#w;I;Ru_^i&T!3GM=lpB@j#=+qZSR=V;PGHo zc}0%0eiIxz_{t837~8I}D0>eDml}^)g0n0~$cvi!Cx;e_ zc)r6z+I4N+wOb&U**V)8}0Nk+5HDjW5-I$H#ku{|--1_6`pi z|Lq<9f&YGs&o|sm$xBM(lzv(YN750Pzzw@P@k{mM-J4fBSoM?w#bnVnZkDSj?|#rf ze0cZf>G|bPXYVe~-@N|Icgb$DtDZc6t`jX|EBI=YBiBx5h+c?`K1`pgcOPDBWX`3Y z6nc{CN5~49(I#zqDNWN;9P9Kh@MP7BEjt@_Dn(5DTsQ>(D9-&1Q$ma}w@N{SMF$a-LdUnZh zh9kuQhNV1CnWN+H`qos!UQmw&KyhI;bSm zm*>yUUSFL3i|GzOpZEX6gZ-oJ{_pO|!5{tK-{hn3`26ttgZ|;{_1U{8FZJ6GPhlWB z7>T-TI6glGRJT6{NUf~i`|i6vrSvn0oSH9|t=@Sy!ozRB8}lpuqOn$AxOsa+_0bF0 z!R-a-omXixR{Ds>nCc3ysxMlM21a|4&jDLr6wU!DK6SpO@volf-Tl42-O1j;?w7?Y-8N5h+R77I~JcyxxPOL|Fgkvqw#d~}hgsAO%AHO2^! zE&LpH1i7++UO+&CeSoi7qV7`;f8I9MlrtbQjCzkcE|8awb?FFQM0L>r8ETwGC2Y6m z3J-4pO;@Ny)EwH#P&MKWSFkJ*^JS^z(o zDOlRMaHS2??laR3;kYzq7_XwTUs@D{jlM^)aAuK=wEo$3D0nKCb)|(D)_h>tV*{OI z)B5YuR{Dm{J*>GRWw25sBV&3+3^jIcnX6i$A>+Os83}B`EeWDCs(i2`R8rdfnuv5wN~BRw z!iY#=D2bsi6(_=G@#|nJjR}UjVT_ng=T6`;6)uTLg|h8N_>Fo$6&s4=t}1ua)6HDy z@IVG?9I#6}n%YwF!u!Wj&-1QON!aTW$sd|ZxkVx5p^O>e_k{eOoPZs}koV#Vtn6hFA8~3I*FfY7S1Iq)QCoqYg55I&- zU`!c}0hxwE5K|R{!MD6oacjtj?Oj#^yGLGYZ>T+GYyZ98*&A`LlGM4Wb(p2v*&jiF z@bh3MgKTxP%%N1$k>{6%UBJyb3wqAbAq|d)I}Dmr&O*G6!}XZ!CxwTGXfLdx9pmVU za2rG+s^lyXNDQ96F&ca@IK>LLF*A2$xYRw%e7_YEO)H1_4JDx!FUitv}{NfmTNNj7iq`>aj%jPG+`5DF4$%^9@cni zGQu)CEvyL~LIpt}alcs)p)xVeU|Np?+Mp;eJ-YQc!(c6m5Ui&C?>(3E6UxtAq9)NK zM}Y+6b@&RluEg3>0RwYK2=E^K_jxS+{_NeW3;pEvbN%ei>*we1QM6v@7jNF-*S9~P zzy4vYpPyg6e|P@$1HIybuiiXAe{ufo2|b`CcN0cYcfqD$o2+?=BbbKTmmy3LO2i&| zWk^qyi0i@x<0T7O$DpO7UNlP9RlvT~D8&}6gGi>jJ{gHZBapruYb3G<58n!Z4*{<& zv^Z7_V0!jBM+{_;<}2-$(GOXanGx6Kl_ND(S|mMfa~65|?NkGAVXg@y2-#$@ia(-hf-Z53c zQ9J6+0-XMcFo~!zZ>d|}uFpFJ$aBj*<0V{2h7WifURNsajD9#={UO27Gm7iMO*r0} zENd*sOyl)KB$9_P?sp_)|0A7( zdNdV7p>wX9uDYfA5TPUNvDrAlx7e+fbGE@0H306eBJ4fq1!-?NA#hC1TTYMqmZ7P* zGT$zeUO!hT;iO?^0oFN+LC!lk9wq9pf_8LoWKCzoxq+uuViM|w%$$|9u$Ks;F{@uw z(MI4F$UO2xP(#~0MB0R*^NKyBL`vv@%HVv6`F0J46{)7q)6R9ikkt`$IIzQZ@uVh4 zN49|w3>X5F!%=GOX(93iA=1L+CA0#jBMdmzSJqN%tR)KwP*2G;AJZ3sAu5$OBB4}) zB)pk@vjla&PRtpXJjKqH;cbA%z8d#p47W0ZkE#VS1_XttdFwdDk`#}q}X z=5B+D5i>+KC6NsyI!=X0j#P3HgxgbQ2EV<-E@2u# z-=(!;BqD{kgQWhwq-Zl*R|KiyYlv8>2as}ZPdFL6WyL~9a_?YrOv6)LWuJ}(C+k~c zPB{6mBF<`i!;?_~D$H*2!L~^X=*bTB1?2?K3UzK?F_{}AXMW3QtZDnS&dgg;-%ys8M%jBz91o5Wh*NIGw|%?}dg5F}xMYlWqpw}jQGb7qqSv>M zudhi+U&|-ZcO8UgO$>hn?j&lmO;eF_XOcVkJW}5lVVirZASIVZ^s_&r6y;`oOD6Wi zv3qIPa=hV7O}Eppx`-aP$2{z722uB6C6Uybpq~ND@4KfZsAH8q>o|yu?R1(huiV4TM(jAy{ zE3x7mj);_~+HQ3_Vi$pu9?kFh8$zuwJ1@)I<5SaH9aZIg3sXj1bhDTpW}^LoTs98N z=Ifv$4Kd+`j|gQu%06?_AUc=}UE9sVOl}j)*^a4(OiM$qcYRr1@#?Z~1GiSgd0dF+S51?UgHGCR+!T>7q5W`*$*hv`bS7gIx4i}_3Lwwr#Z z!X+Cs1P*J7lEHOU!gh+UnPSIn#IoaC@(kUDkNYTVgmxUA?D0Wi-|6Ww?Qq%-RqfI( z43wdx85bam_Gz^CgwlLu1W>}F8J+Hg+xy`73TA8zfhL~9_$WxIkfR!@S^dhlfNtDl zqQJW;KNU*QYF9CCVV?V?R6y+}c&OZr-OwJA{QMSL7*HpOHShpBxe0ADHgx)H08r

&j({t%@mbIln8@P*wt!~jk84MW?*N}mXNZLTstU>k1Ep&meL(sATC6pK{8L$0R zQyZ7dr;zDmG#?-pI@qN468#ZEs~FC_E(0o4B$5!cBu`=R`JMS(fhzQUI9l`!6E?#2DoApJUo-y_u-X*GT zC=^EqP!7_W7yg@fg#?x&r#}JUtviyfi`Ct*)+CFp+pQAJ=hTvn=hSRD;pPR$+FpFZ z#BAYooVlO^Uz)a?r@En`hX{Vp#!xq?_1h;OatntFUK5M5hR^Gk`7CdxQD2yw{vbcp ziMQnuIt~Bv%9t+02t&m92EN{E-S33<;=L{Qk+gQ`>@n@FM%Fi>rMt1mE#p@@v8H}w zym0j2IpY(Kd-m0q61OUxaO>eXkyDg5FKxglpF{dzkhmS*Z`g96VEj}eM{kS~O~o_i z@J23;h!byi5(j7fkuP{RhoY8Fw(ULVqVYCG2v0c@L+D%1yM|AzHtwE;5^UX4f28|b zGsM;q0NAdfiX|U#C2G@?!etc!NhoabGo^i6dtf+F8bo83W2+!LN%Z+#@;Y}@;G+Gx z0ObG_?H{{r!JRz8D1+iuj-M5PC?y;l2hGEN#?u38*XSKNcrNpB^)MV=!(BV;M`Jax zLdL?ZM>Yhqot7+zM5~YQnb*2F^Wz32_w! zKS8~YZ{++}dvD&}HjX3?&)@tM7`dO7lt|R!D{Z>w6C%3?&-rAWC5jh{QhjrUFJB2>sh0Sgxe~3#U|C@ zI!Sq(A`2;(5-}TAVN2<96f)Fi@&2@>Y1}3=pD0+0$_-X#CeCO2i|=~H5G9C=Dp1W2 zsCp-qXQZu@HhV%<$Mpuz^iJFb8KleRC12@{Ut2<;!Os0If;^aaGJu*i($ zYi)@+&tD4FtA>N9kCcQT@e^*GA+di#3VEC`#*SzmZ4b&v);Y!ytvX;^bE+en2_^Ac zyukPA1`-YZ5?!(fhQxLvT|y)w!$d*PxsPA~HRuRLtCqeZvRS|^QKeTxhdP^tm%U_9 zRT+3LUw{FeJ_9l`C95kITocY9Gf2m~rYi{hD*G1^Bhg82d=gqq2r?*6LQaUUJ%@P0 z^VqIY(Uh#?u%p-tD)-6O=~l>yJ(vdjhHrqLojk4hsTxcZLn(11O>3%G)tm*mGRGwzU<{Ig5lsZA z9J4?)U=Q#_botE``mUCAQVcx42OAhKNCKkgN*7_915!%$qPTnPd4q(B0j=swlgwZ; zZPIb3r0Iok-#B!2%a>;q7SLCJ++Y(T0L=>J|8&MOXEhWF?07N8XNaC%f?=VaZ zYFAO)h)W1-JcB_aS(GK**|=x>k)@~ReHu>io2{5R>lj)20&oMF%ni8a(XhlTi^(Fe8PTdoSij}&wnMPsF`f9x!<^GH`)2SCObVl zd3)A4Vy(8clRaQ>&YDej@`mldYn;7pmayDe6HBPD&}voz0Hsdo@8-YGo5$zuw0U;a zIzIA=_vqj>>W1QVdEE=;^x2ho2TdOmv_x$;{?I~(t`f9&l^~wbapyt0$&zfx*zX7mYN6_OYd~6->A6^`gY49FEI6gUtd4iEa zKhIBSYGhdn9XbQ>jicrn%-`{OW3P4Cf+o?H_)Y8l7@8o9;|A~f{>5Pf261tAdeUy9 zP6wwDfWU;Gwc0r4$_i3SG3yH&Jzn)y+Q3B&WJir2mEPxZ$ zWCzVR&HeM%&#=5u5}IjW95uy!x6f&U4iDLJb07NKIQx~gn`b|__HiDJv*u}|1=EjK z(`RQ0<>Z(XoVtmN2Uybl8FAp^_z*{X*8JxMj3)&X5JuxIU>i=RvhKz&EodB9D8Be5 zssbOP#s3x1=!6|Le&wdxzY6q#ZicqpI#vKuMA+HbJHa{FgZ{LrThI}l5L}{z#!=&K zvt2SmB%r2+d3lMoPn-KK`~lwq^zEeB!12;_#lT;$@s1l)HArgZn%Hw< z6yW8rNSTj;D-y?HfK|m2DuN`zDK6Ni$l6kIi4(Sb;#3`y%SbRaKvv=Ev{?`yR9plU zk~xYNsB|FR^)-qjoIB#y@N`%?Q$s&A_+c6P_@MogrUX@-N5ea1sb-W;bW(LYom%2% zD&nC+lV8bVa&-mF2#HLAMPZJx$6@WUEKF8_bQOhP#8nJlAcpRx+-Zed76K=6W8aCZ zE#UG4!Ouk|$zTr{b-;wemOx7 zk;nkRBnj;L5$BWYOTz+X0`kDs;YAh)-2)-ziUDt6ahoHHuz+mGUlT0dC;LYu`@j24g`&H-=sjV_+lOumJZf7}7HwsPjO^)oh1C7B9ZThk~s>t1f zd!x%n4x>vmf>O|Jsf$TQ+f1JT^~P4nYu9M}GZphJxii>Su$(1sRRWTaJn)e)$wU8D z=%*oW6iE#{BEv#y_z4_2f{35pFu6+{-EEujgdohB<|`TBl?!Bn7&@f}jAj&lzzQsb<)r*|C-+g_Q0m7EYxfn*NTQ51gJFWG4ybh&~0}_d>IX z#fY`S@anA#-1rR_10;%Xy)4CcG;V07@8(49K8PK{?XuuhQHb$HxM5hlO2lfct!Fi1l2!bFyu0lnVl-*vb&GqwYM@(+vB7(rteOP20 zF8fD)2x|)rmd?7G4~iymW_qceT+tPbxHXB|qbueBwV`*Y3F%XuKrYacDnfCQO6{8P zc;Xs;q5wVH7<&M++=m`~APvaac4shQ_Bbe)k(QIxjlpFCriKX+z9wR@WW$FZ%v1y; z3wn1@tstG{L#t&`du;nf#@)YtBS2Yy#P390ZugFt(&%m%Y4IXQom}M4A~_J}%5c%U zKHyHC?}R)9D(pcNaFq&4{87&<;T!MG#@p zH~{J@c%H|LG%_uO-578$;D8B(7POZMifU}ee_(IeJB$G26A}E8Tb!W3IAF>79qcsE zeO+QT;MRO+L;+2ZZQ&nE7~>;wq$k+VfI&h7oIxK$g^ajiij*OUKkE9D8pKeXXTvxJ z;dPv^k|GN)bA1o*vXR*Ie5ev?a|~%lPJWz7`1xr?*Oa^`KwHTOOl?uozz3oEiXnhY zZ4)O7x6+zadV&vtrIUU($@myXdVGwe67*}w%K3ME%!&+XYC7&0YGYCSw~dXei2uF0 zvAMO4@!vMKp5lK$$|K`+N~d)Bw+NvY{*6&swLd;ae^vP3;zERB%wOgAWD@;V(Y}ee z;u4M)h(3H9g(nPO*-?B-^KLu}-zUSRg`cM0N5F3<{9E0 zpWc>R$8S!)TpRQEf4yE?-~3B$qqHQfKz>Qnr;M|qA!IP9_r;kLu-X3aPT zR%nMJ6n4Vch#eUlu_J;%hBaQA>rkgX1J2mL+hK2c=tNPR7(@&@%Z{9n_MnAE3$}j< zoQdVjYq@v8HJ2w)W`|u*r;}i(Qc;58VmClkyIv4Y(rA#dv%`)pi3(jB_EI^@(t@q1|}f>>Qr#Hx9eN@Vhg9E0>s^J)65qd&$NlsfSp0 z-jztqkI$=&gcwexh#|rK7qnYi?mr}EHlo~*r{R8? zouE$R5F-JH#&Hx@hs|7^c6sS7yXW_>$vKR71f5aPv>#Ilkb+XV(vcI{#Q?=H^8t?~ zr*f^dYP3zo3CG&fogeUhE&~U~R{x}3QkU8ZvttN-ny}QHHwtAK zU7ZYeE3?3_P^t;+OjjDRaz_bun0%bw6l4WPiyQ0XQF4d+(a0pj9)&tky&F3jGxh@u z3u*5KgYZTv(=`47GScs zHj1S%TriInuGUp_+5MtuRlqypd1=Ijz~SM(R`DE_#yMzaQYdnzB>vWl@NvIRAw@#b z6e{FIlra_E#p=vQ_z)r?zK#{qm0qI#6spNDOE~#YJ0zp8zz(<~H;j(J92P$W@T*R0 z(x?%-!$w;IZzX0|SMti0_ziWtI&KVcBdln+nnx|F#68mIQGyf3^N-B@Fmf3xne9j| zTOoD^7@d(d4D{eqDYMsdBUTMCin}Dc_O0zl$L_83!O@T1GaGMd?Q>M^a|RTut~IT| zvHgxZgB|axBU!c%=b=f(K+JVVFxT>fr{HKPFBMDLa*~2pWjfKxSMr2ykj9x3{UbW^ zX(6+=G>;|kERxs~wHwhYjf94{PZv=9Y}UF>qzXClWxA3c)_#Eimw<@gHQf7?C+WZ- zqf?dVzJFIz5J|T7)|tMW_3jTEMAzq^A;ubts<3-N6pEl{pd7GO-F zAPYr%VwJ8Tgi3GZ^(tcvcqN~b#zE~0Qc6rt6I8h$9`Y87Ui?Z6eZ+RNwS7x0m4IU6`t}}a z*Sy%uSWIckp`F>nJqs5XFR_95&hs|%-DJ>ry6U!XMYxL)HU^v~Cy;LDp3p|oC9hJv zqCh`)9%vyY+)`!h}B&UC7}QMn^M*m$D;Cg2`PR`7vQZaqJmuJ zmz$RSd%(7gZ}3Hbk-_})uy?|;1C3XB#0sv^v4n!e=DzkKKO^e5=Imo~8sNGo;moNn z3}QosF%pw*DQM%3Fphxlho?V9U&WyxkX4f6wkbq4cGNnR(_pIj%PUBbu_mQY6?#|( zS>Q@x)Gl&BmpAzd>`LLOqLmeJfp4Bjnk{>ia_FB&TPLu?d~jr+V7cVefmU2((Lg+kIMN0@fkIN?iuR=t$f-z(0SC`bMQBN_KqSRB6vmUh+MT)R^EOVg7XgG_X3SG|p zO}jg@e@D@MnDa3&N?q$f7(`F?o?} zEi$G5WIC(VJ>hzh20Ba?6OzD^Fy!Pz!+HC_wS}QcqwjluntC@H30ISbg9sy{s0b*q zlvHS3HzqfB7|=uplD@~_(~@>Q=42>qPwk62@II!i#U+05j4^2BMFQfD_d$w>tP7R1 zRAoOPWXy#|%BVS?Qs)J)|C7CvxDD&&Oh&4>D&{LxGxOlI_-(`r=r`LHSMuE~CPj2= zLg6n`C-3A2!zB--fO6bcKjnIIqpfgemX6iJ7osGva{ zykcbx$Gqdd{JV;KQ&SVf%DSGx*+9yyq7z@a7f%C9b>*7`e3gDxaLH6F)qrM5g7-E;kRsJ2H;jd^rKJ zf$7ftRt(SGWZ*sFMeGSLW(+4apYq_UVG`>?F0;K{F|XBZ&nTGH4m-sfk=ePxMO>Yw zxTH+2vXDslo{t2o4!-Z;qVfrv`@I-x`ok?JrX6p{P)T49mYtfpEoDwmQWVS&1$QCR z;XI(o@Zzdot=C@Yg7#1L9Sjs$Y&LdAlM>emmX+)FlByjvPDKvl9d>d2)A7kK$HqRU zQAh7&e}^4#?;cXmwz==-&JNpTWpo7^@N2P3n?kB-^;$B*Kw~y=C|CegYxn7Ae#Tx6YmNz$6uCcjtjjfeytUPY>#mY5as^%!=eV#F+j2AFFz{h-?R>qe9VE~8T zzrFF?zrkZx&YF#bqoz3?e6cp>+yB)zH#WAU{omI17UqAg)vH@i_J5D@d|_iU^m|7GqR1ojL$OiTGqJB_yWdUU)6}qh-9PXjkb($!bmIG z_4!6w#0G9J!IYOZlq8a2@_{*77ai6E82_wb^z(&`eT;9*xaW&5*nN$7vW<7XkkO9u zC5&{wjB!quQI0ZkU&RRLk&JJQM>Dp06eF8QHm*@tYOXPj@x_g29@%KdNHdZ#?qw9C za#FexjPYQ09>!xCxugyz)u`nG2bXQMVytGQB6^=NN?Fnv#ds*=6SYxcY+^isaf$Ke zjY*aMk4W5S<)!v!HhwS$2a~+AM#Sh9$(+c<7?m2eYwZ1h)6$Q zu#H9WpWv&w|E;apw(=#0>8oI zmnI^W99ol7o^_2wr_l8wl9|S5-UmFCzPpE7%51R$laSj`2@l0WugG?H_4*~2ns^kn>ph9j1(dds)Ig%WKbq{a;((+~o0J zH#VyE^>x_)>(wXz|8bt>_P`ncGt+GaZ7{{K}=PnA^IhUdoB$)_vknQA3%m(^a@IDlCDT9>#z<2gX zXIj{(^Ou;XJnE)zIe~3N@8Yxn5PjB2n-YgH-sP{o*}lO?(*J~l{Q=upK>ydbH)?|Z z*EZ{$P_DMIvGpYXJ<78j{Wo&CoWWT@krX;ioDs+yF3L**1cP+S^11{M2K{~uZPB#5 z%=vZ(3vCKa(_BD8O!GDM|AEe-6|UC5{Dt~`xaj2Nu`&NXIXulC(#Ygba59R1oJTh_ zfo=25Zj^)tGehAPQto3Z52-seSsSlkqs*~#dznj}#MPpT8R9z7q)gr3NG{2N*GFZ| zK7TvHVAkT*0mp{G@I*4w-T0S+JH7U8YY^;KOAOOI?Y^-_lweEPc<$z~>5}lSDKW|o z4?;$7_uQXhqM%-Ymv;15G2EG6AU2on-jvvIKmcbeH{m$|-&H@`V0t}DD6qwC7Fg8l+SH-J$^@1%+B z4cYZ$`|4Lr4L%Jj8n~e~h8|zro_`nnU}Fv;csub%ch~m7_uLBJl?tHYXIM`DPOXb+ zv11Kgdt-0p4eu%er5Ecvfd6Q8JhDH=tA7AdHC7vVD&KPkv9|#XD)-(H6ZU+U*2={H z6mpTJ+A~@Q_B{LRM|8YeV{aTkpxnpY;@+B~byjqpuin2)%6G6IVP%BE1%a_8b}4b@ zJ&+aO$HM!jKXZY~00qG}f8AwOjU{cOg~JYO3u~5?TmOMG2uohdlhTPez zeYTI@2i*P@y29;P77c`^c<~s*W^2%_N(dI5|C0avLaZM>i{$_MW>w1n^=fq!<^PQ* z`TudAkn(CWKH!$?acawrrVD;v-rVQt=KjBOalO%h<%+qy#7wCD`Zarj`m&9>w#y#) zG*qHN%-@c%73@*ixy0s=kB0d+aKxz6B*Q0F#3TsCVshK9u~VV@439yYH0uT_sIY#b z^9KgjH-#~mIdXz&NBj|#019_}<4lL;iVk>~bfV|L-!mkP!o(GraP;pf*Xrf^_70KK zk$vnfaMgtNvCOFd!PKfK4vAB@#qV*L3ccxo7wbV-v4X^-QU;( z`d{DLdh-8&lxOX)jF=MOFt34p9C)`b(sv(3H-v_RHCzZ&recZ4gGc7ebUCnQ=bU$Ju70Q>RB=E)m_t+5sYVB-&zst0-A zfmN3Di9CipUwF>$Y-(lm#n#sP=0;UGCYK$zEa-~xezqwT5}aD&GN~mf$z^%w zIsl`LEtZ`Do+4%JczKLT$6Xso7|w%vEV>(26lPsl{tk~AO+=Kf2;PQdez@tUq^UA{Na%h zf#P8LG^j+8Wq5#?fD>wTu0u!GU}Jnw4bM z%!kIY1^i!iv(D}R>KohJ>owZ{>+2g&`~NW>jsHtE&W~hbw8!sTKnQ;L8}Nf9qRBho zH5O^xLy;V1Hx}jhdG(5ZRwIS=8hZx>C0=a>uL$-(|HE6UWz}BfV2}bKz1z>!Zl926 z4+-XawVGiER{uLyWz5L%7&De|7>n*LRaY>1$r#=(3N;`a8poZ)5~f0*>35a;_Vie0C7ufV;oDfW z|ErsV|KHfG0T+Phe;xjL+W(L6C_LfqwQY}#eIB5 zh4jC^LG-`6v9Y~b2l@}xA3i_P|3`S%c)$*q+2hIdj`TfGME+0oEZqMw)40jU)#HTE z-~YAh*475m|BdZxy|%gj7yR#5?P>o%#;9hj;C=Q``6N*pI)#Z*zjb|2_k$(H_j^RNZ1n z)^vL9fVlP(UE#4G#a-UtDGuALKd^3`U;&hE=z#CAqyPI~cX}6CBM*DwJLcFDfB$_p zwahDL4u}`5={q0Tk;(Ra3q}Du?}OQcpMM_#pesMUYJrB2)A*A8!}dKJ4MN8Do$W&p z=x_6bIpA-Wn#xTM>i`BlfUmOwI=cOcb1;CK^yl9l*LN)5B}3d4h?wsbvlXLT$_U^) zVdPEU4g;X@O9OXM@qCn)ovS+l(q+z zz*}lH8}BR^ZSJFu(d2!X8ztrhW$&BUIbl29C*OZ4$D?wyw`Y48fol|*R&zZ`R$<${ zi5KO6Ixc-jl`NDg@S^P5vl8oH1ND`hoj`1^_5tDD0#AJOBCY#zA)k*{7QuYZU&a_FU4u3zx$ObGit-j^rjpF?~FW1$(MXPyO@fJ8goA373JF}i>h<n*gny3rZ9e0i*4VQoP4laA;5IPGuYnvzvuN z@C#1zl*tpI@ME;ApTU6?%tq4~5m^-s%slxj#QHMmjg|x=*D$L)D?^&!BYQ+T-Q@nI ztrZ)bC>(A_4*Qg4b@Fq7N3i2P$IADI&Oc^#{PSUFf`*-j)fR&k3z-UMxH6n)@rhhZ zbZMo*0->=#F5AibLsq-30l)PzL}ms+R7~(QDh1s!xZ_wq?z4BF*fmL#vJ4bXPtrla z%q#;!o!_+WwZdT1VXQEebO84nNXYO|4N1-6w?fYt|2JjhCy!L7oQKc&iFhji>PtQY ze{1I>;|HX}69@TI{u59q-e_m9b=)}nRe!gCa(v!8zBsvP>+f5~=gqgxGyYOE#oxba z9kRe z9c~q@ebf+CiD}j8AcNoOP*AI)(u`o~I><6}YZ-XZc9#dtId8S-O;lmRMPIcZz($WT z|DmH{t*rmMM@YE2`oG$Gb!&ZHzyGPzHSm-E?-3q!j28ysp|0S(**KG~ZMxvF3X zGnVaiYxNiF>tT)~k&OYp5}mi`cUs7|n(d$d{;y%9w?BOMx4-@L_HTd7tN!~#^UAgd zh)ErL07wT%O@U62j^~c<01)>L=7)iW1}M^0+;ib8xfpYJ+X~c&&wTI@{VcKU3<=wY zaYRv@1Eb6z9-rXPq>JUc$0vpClS1}8Rmg@0GUnJGQ<^_%_2vwLYZ#5Zeu;kLnixjw z4SU!4x!EC4@cq+Y&))$L)IL9J9lwpm)-e0rKHS6=!~72dE;5Q8G}4^~dkE2d*iS6F(+c*v*mSeP`nIKa4QogkT%bdE!uU z?$%$_t6Mxt9(E`>18*@h426C$Pf>*y*e*Yj<6U|SRPm!T2A>=Rig7K_} zi%LH@v&+pwLeK*5@de+(z%nBf-w`GCf$Q%swoKpEIXP$&@_OmL?oUUWK< z`8j!s?`roa|AC8RMq*6VdFP77zM-rB@x|fcjy6pcy$ut7Or5b!{^W(+J|*Ntvk^xQ zF5J(G4^1v=jg0UMu?9=L%f+-2s9KCfwcN>UI+;!1jI3d_Qc4X>vXQ2BBRy$7xZj86VY|F6;o35_?xbuWbopi+{1+I#-ztu#T+>0nhVphHir zEor*d@#c>3-!>lEu&U*nvS3;~!TUgaUQ_z1FKKcu=}UkPBUrmoiw}(YqjivKBm{Nn zUo{C72ujZjoatR*JqEz*{njCo0{GSrGGPe7tQv}j0Vxbd&Xze#1@WbOpiU2YtzD>5 z;#Wc9#WB#8l1REOqcruoFPS$Bv8%3{tf=bbQ6T1l;lSz9bhIqn5O=wx23C|NYj%9Yi}Ttyx*tYLayiZ~}C zikqqQxiLV3$!0gAq8=xLiop-)Gm2VbKDr5Ga$(CgGnXbSXUn-1AmagGsyRQTrcEI8-U)E7QtcS`GMk6WtDPCCBi|n-S=dpY&r4?JJ-lwa=GWyp{4Q1_* z^713r1!}I46ct{S(yTV&out8^*+OrIm-?h2GIBhG6A5svjFI=q@xR|?`Kxw@CnjOH z1l2O*d%4>z&3!e#gBAWtlnUIK&3*JVWt++Sg1j$o8!s;GTthI~>Ivwfj_s-ps9P`h z@HDU$U(pW*lq0v(fageMn>0h#mcV!UGGOUei58x+{PiCKOUYXFB?F@12e|ETJ1_ON z!6-*0CmVtBJ9_{ADDaXq?}catOs}Y^sU7(woUjlYQ3c?a8e$$Em^_fLJTW1}KWf1j%Mwp~r&s zr{6B@+8xnn_{&Cl#%eB+Z9Ty*8Fzc_1AMpt7zo*fVq&E9k;}m@Q2C+Z$^Pr-%EGZw znd5T{-qfU3M%JwoqLgTzc5M4zQ;|oekU$sz{##3E_X!V9RD=aN zFouoNME*B_9o^|s7c!?KA%+c%hC>qGAV22T9a^tEmZ*va(jg{LsZ0CKTMwQrZ!QS; zc3%1}b{c5NC(09z+D9Zw6Sjrg+z}CnZkm zPyI)ksR@vnb&~3{x8BS1{lg-B9;BCkKn!{9$F@6eV()_*jf_>K{#p$&`!E!I?@$yJ z+*h}M@on8{v9~(IH?{Ey{0}94TVjFh@j}!ITgyi#9u*yF1t^B1)|W37xQ)`EYZzzO zGA%l-2B+ukJkazSW3{c9#oYm)A38lPb8kH-zhav11q9>wX$GIhR)lCfN>{~bnTFK1 z(|6)B_9xH_s9{VsM}L{Q_mi*{gK{dBWjGex0%gBzvXj;xWOe?qh5AD2cKgbSt9>}6 z5>L-xjarK^D=hT-Mju*U)g4m0%i9!e0S~U_*JtJSi%Hw|>r!cjWIA=mDv`7!P?JP7 z&^t44Ichn**IQ>LtG~R1sS|6(p1Nz?Cz~QmFd{S}PVYX|;ugwhIZXqGd;nR1V2bCI zgLP3hFkV9JcRuJpG$IJUUar77x6Akyfu#amG{`@|;mj-=d$7&;iMcPlKTJsw+?8 zi*=mZHAjsTw}-U-n(9P zL+mz$k_SEJdA?e2RZ$;W=~t;Rj&P&fW8Mw~*I>@4?K^wh5L2G6Ff!?WsMW(h>a5^v ztrnosi0NG!Lx26TrzHM_M>(h}iKMrMc`_$hb8h**jNQ!4e^+~kp;=n4(DE^4^GT_n z#{2Z+>8x9H@T2XC>~5bZ4|c{DnMjKoGN-T%FNvIiJ-YG=4+$^KUIhuPri^Q3U0c=^ zFPG!`!j(1DnOJV2`-5i2?FfgGreA<4S!|87#sOsaErqmvQ1a^)%pjqy;}Sk`m^!E$ z6_|!NLzknMVEnIwp{`~i*`u&UZ#YY%AV+0q?y%3a+QP$h*l*o=wumA`1>=Im9H)7t0r0)78nDSfuSCXhTPH1xzsKR3ryitF-yFi{d?C1Sv4$&2LKy%6m#HuRP zVy`JR>?^wvLa-d@jDw^UQ&x!UD!;1J@_B4(SeasRi8sl&&=Cf% z@<$LH-mP3=yq9DVduM7OOrFtM{^aYmR?;$&v8x_p6dTWFjKZ7Qb?9m$v?qW_%fLWQ zs|=B5waw&|cy5Nw(bJ0EE8AxtduS2Pzpq{N<>RFjew zC&s532-p=k8tF<(ocZ`mMK9D1nEoEOxgcu+Ht#njHLO1HW4{&1GGqIlO_Gia9|(5( zmZNFtV&aA+<+s^+KK^jOrc3N&aLJ$h*P>JRpgxhGxM>BWBcD_^p4KFmPSv>0Q_|K&0836>+HjerjDLnxXOhz?D=Fj42}L2GH%`$V)7Ow>d>$y zH2*2cYB)iKJgl?+6vR#a$%R7TZvVQHwWO10G>Reu<8dPh)i}E*`9h1Vl)`qBh(aJC zb@qn}qm*ePiBzuhZ{4?)=*oK!(wacgjTY$`?MwRbmcHTnLT!+dN?m7VV0Pt}-k+ft z0xAOA%ntRNSnM<}$2_$=Nv%4hyPAkTy<}_jIBTx~pPGn%=p?X*>;Yc#;p(H#SROe1 zu+-@nM=kA%rUz~9K<5~knLXV*=&w2p$H=prkfnBVk-`3I$*ECfGnwh)wbr_65H76# zVoeIM5vDZ?GQ6vzU+_jI3AHgB3ZMpKTjGFi_s}y>FIG~wOF_!lg{vnSUZfC;%Oeu& zJETaX9K=36{a!dI7X5XS0z@bp*UkzXD3=ud4j&2bQb=RQll!#WUWN&6dTUBCY@&-G zUtKKUJzwCzuQaXo_&u5=nO(|SyTp5;S`!%V2Ryoa&EyYTR$}TxtTVesF4r~<;bqbR zX^-`~hU_M3jtw$%2GWKK*L-|`c~BmY?tR8j9O}|6CvfZQhG@jyB=$&$Rz>DABk0-d zlE@>I>S8;)w#s!zxl5HEqz->)-OCl7yoOJ#I1rOHR-<}T{We|rLTiW%j$JtruX3L{ z0wU7U3%RQ+6HWzzh=ojIBbg~@0{=QZafO1oQ7(}RPMSS{`Ht-id5b~clkyZR;Igs6 zpNT_J&MuFHUi`fYa&jkntxotd5%mR~Ne`7)ninmrG}^{@M>UM3$3dENaZV(+2ws6A zj#C@rJnXZW4lAoZv)!C>Of1c((ZghU!eAqQU;DtMnRfFw;P3L~I)0BHKPb!4Q(iD-YOz|Lmal5K&m6;{o9lvmU7{STbR#oc5%mZ#qhT#oMwzd9 zj6eRwj4B!oQk-v1WM6w7{mW^o_|l9&9;RNRfW1a^!`b0o^oefSkH=O7M*BBYfx44& zP&*?Td;S~c4=V8GgGrO+>Ql?7Tq}2nK5jdMR}t13U%V$0U!4>lvq%o8Q!OSNZi}aX zstMuixgGVhL~=IME+?X(FZF<8(i~@r2;dJWwM)o~(=-}}3&^JN27>p&h>7=460kCBzfrAWZCyA9_x`fg%S&r!oO zO5)SMh;X+Kizi8*vAML7FeaaNF>p$~r9^`|WbJu=DtTb~p5OA39oi;+uVS@yyj?Q? zXm&Ald6g%MRg%AstmW!{wuZIDZ=sEO8<9}eZ|gTIZpjub*-BM>l69&V{uC=V1e$Q) z>`ul<|C60A(?bweTvc2;$c9b^Yp8?d4-L()L2Wd7^02>};J+le`m;x}zyl+QS`Mu0 z&uqAXw;F4!aUhdOfaHmPg2J=Jy0vtc=485J%PDt1Yo%{S8?#-)TO-?ei1#eZvlb97c{|=38dAW?9=ddgkf}EV z0Fd#hr)O$Rok}dCL9ZTaIXADm`_Lqm$9`I5H@k?3eLZt~kbRXwUH3^dOu~5{K8aEQ z(2gLk#!z;}!_MfIGF>DXDN1Bqu z&*{u!&|@ij;jlv&2zX9W`Wh0%I7g*#R@*6yD6(RQvl_hjSpVva_%mWVL|yxl71$h2IB$LS0y*ShjzedP^s^N;#0y#!sx;c7Dt zCi0qksKZoamUL)TY3Wes8hj>ZK!VE=)38z1n7`Zubh=VvBgof84`IP_B62OAzifi8(cMvI?7WJvDr`Y%UCwZ2 z27;~AtazlR&fI z*JKb4OG*S?(qh?qs3Q&&9o|6 zI}|IrIaSsCjz3yxXd`+_#5Q`{w^SMMx6sn`g4LioJ4R53$SggW4=dD2F5Nb_shZJt z94hieTWboxL-fo|GK$x!hr8SGxs0qrxzuYp-RM<7CZXQR;2RsJ8a$c)n1{k} z1H3P#n0f1)e_z`(*pUOMVdJoGSVXXi7tvyJg{xkqyk!;yR$ zTrrR$3!jkAOrf0KG!8e6wzv#^6OB|pkk>1uAICWEs6k8^R?8UQPYCD3+kg8Dv*8(L zDKM9iPWrFNyOA+OK>g8lGNZv3L2cQ>n0$$omlw?`)@|Ftc;CfLeCIw@A^X&nG*scF zkg864!&MrCo*NIW>Uq5>Oi=EGp{ca078O#Du>9g)eGb)A9;3u>5B1;gFd?M0*H4Tw zq%$cG@R8z`01vo+*3EzCF0yN*>xRuh(&i3LW?DDD|In(4ac#}p;rqYk(#tge1*@_R zX5XkpJm19H2%BEb0Q7InST9A(v~vj>7(5X3(66wrPf-UQeC+WD@jU)Rtjfc?Cl54g zVM%Swb@tTPHmu`xJRQ+3B7$#R9E|SbeJps!tihJ4Dx|&;SPWZtSu3FxomKXBYL%8^ zxe>T$b7ir+1fsun?@JXrX*ohnapoFIBwiv@e5JOszfhiqxf{-bPkoQet}o9(WBLN&};oU9|@BC(Egbl(`u3Z^m;(kLAo zpisa(D=XlaKB|4>+nb)Hjxc4~rv%6m)gRxag5n?$cs z)Ug6*57#+zT^u}y6tO`xya!o<{EO=gF6f6NczJlZF0ys9-Q>4jVlyQu%zI&e^J7$A z49`ZkEO2^xIWF?@t4CH}3~P-Da3E+yT9R=*CjJ@`z{~q|+O*8h%WHn7pU#q=lj}Ye zI_R3?;^(?y^|fn4!0`&RTB~-4M9BO}4C1!N?fpGrSLU|YVp}3x{Ws0B^}7+eBv$Jr=RfT_6?7b+%-JIP5i>a04fs}&j#xeK zvczNOF`o*BG2ts2WiY4vQ)rEIC&vF@IF$lYpJLIx-h@5m}xz%QSjTnkUnMhra-o&j#plWu_(3y2MFz}b)zCM1b$ zC)IZ*hpV7}&QZa=PsP2g-WFPyNz>LNm5(t`QT#KtA(p7ySvjwlLN-8|cE=}9;b5S8 zLMC1S7Yj8pzxupI%dM40Xh^4_py=;(&gT-7xz^hvn3XGwiYm7;lDS@HImTgO&++&h zJ`uO8S-$wrY2p z+jO=!rGtUObk_!LU=X<3a`plN%%lK$exE>lWZ&DCd{MWeKk1c6jt!_63a7f;877E# znKb@W9q{5J9xXgm92YUFJQV-_V=9=T5my z^U|ROTfy^#?fZVzQlP2f@}bl!1=s`Q2L>8Ir^EXXxHN~k&M^S8uZM4snsgd$Kac2< zs!4VERQ=2gvneo7I|RR8bDZCc<~BC7y|+U@B|FVAQ`K_un;cdfe!z~N)|KDC)O=%m{1)&LCJ0x(Qa)M(V7t28+YP=dvzpJ}U8}VQpLRBb zpLV?449x@-E_x5&^S&SdX>VWW2G9RfA*wDDY_C*mXEm37{a_+85-#^;Y8~a-?p`uN zSZ!5dVI~-b)fkQwnI)5%C3Bf!8p3lEM?c%}wtVtniKdKQ(87&uKuE5o{RZ&Z+oVyr zoCS%i^~;wqyOgdp;%jOcasZYeI~wu@Vz6$NzY%ys8&WSCd~ViVW#CN2b_X?#7ay*^ zpV0JW%T{91>+*QLnCoRO3AURj{NrA3q%ZqA93d3{umknr3%nuly!Zb6DRT>8yWa(` zLvEQsxUBav{~%lbU-GaoNAT)+6|0^l>C0v+bQTidEqgy2ve3&EGm-_x8E2B*ed*<; z-~?WRu+Xbf%3p*XA&0+%dq5`_e|s?x2hw%+1rNE{)wX{i_&+}tBV@#@Wp2;nOvwVTREhp;?6L3=hJFg8 z2TotE30wf2sUI90nIZRDRJjFq-xh_s13-%DKb03PNom2GB%X+?fSdKCG7o;y(fF1! zDF#N<+@1RDnJVqEm2myzax$?%nT{s>@b9_bK>|GM29^F64eslt?SGjno% zzU*Ox9q@0mI;a6>wtW?IA-k<9ZB0eQA?L4kWWj=)h(m4@qfHA48c??ffO>)|ay3%r z?6-or8azM^Ujw=3ST`>4tn$)VDg1yYCSH5%D3aK`^ZvoEhDH!?p-V+z0XT4nRzywV zNB64vh>_v7Mqgn2hQ*cwlCBWgjOFT!Ex{$mBRGUFu6U^e|=Bb~Tj0ra=6)sd(xP2Gaw@fZX0 zxqscsYc5Yq%4(Cp;xBUwuj=W}q#`qQgq)M=TW=T%G6_*b3v<3V_=T=NhJHezy7|br zah91pV*%qQkc1qYRisu9zq~Z|w2w`jwXpVVY;22xxg-!}qR{Lv5kNOx{|7c!0a1k2 zi2^Y%J{TX6kIzz3cXyLagXU9H}41NPqmcw9F_l?BCi% z9EYM|6yXur{m_9xh_3#Y>MW*j-ZbrDCBW7uxCAd!44qpVGiYUo{e;;cgW_2@T6^K_N-l-5Bf&s*1%o|($5ZF_DGOzve}q+ujLgQnifxcx%z z*2B`3+aTOasfB(k?;h^jv$Oi2bVLS?sl#Pup+a*Wn%%Xph9Y>mKvQ-ZK4E8V5fXEk zl5nf%en93AmJF{o2JfSo)Qh!}Z^xrf_-PVhewUV_4nzYxu6rdCOaNn3P7;sVeWViA z2GK|}2=ySabs{A671^rs-{jsG*O&v+VhUVx8w;0x*EV+GFbHOJtnfMlBHb3b&huAI zq+o6Sf~jZeJN>tQ;a{pel+l-5*1$x^VYCEPWYsjN^RfI~Wc;%HwtG5qogtS?c)}Ry z&yuhBr`i%c_R4J$>(X5vZ>&M;7n4PS$YgUg3z>jBOl)W(t49tEY$&pYYN^W9!Zrj| z7DPPf|5A?#{wX=&p`l~zF%~J}ggt$p%7cZ!yEjDt#-r+&(xA%AjT=K;NMz$Z+249L=&sK|CHXCb$_{Jndz}sl8=IhPOM@-+1`2G9kqz}VFf3Bv zhO%HO;oc_}X8c7obY2sRGVAvxM`ayltn}6yj3!V5d%JwNfcF1!j~mJKISR<5?}Sx; zO&`g!vD2tEg!P~(TJ8-P^Y&9~Bcn&qTc}cLH7$(c@W_DRvlCp^KbztHA-7+*k7cKo zoR6ReIv)w?f_B}MfA_8$vmsQ5_4R}TquHPnStJ<|vY}BbRr(4jSsggTV8FTl$n@8s zD0=J5!j%J%pY!~CcpUf>oQ*u#eD)*h)f6O9f8!nQagEL|h8ZE9lt3{zzO$a6)l1Mn7ncbJPH6|00Ex%CWU8xkdI`n^7#Apn(3^jkZV~T- zs23>fg2|fAimW_vol`E&&JpQ8^JKLb?;-zR7ScrAW>87k)EtwDkeq>-Y;@lR>;z^o zTW)d;4_ImowdR*)emk)ox^~-uC<6S+73d1a{#z&g-n2<^WTjD$FdK^$A-^w9y)Y06yz5f1 z?b?))vS=CkWTssA;usI`X%9<03_=7ah$Rpc`ErvVod5;vA=Q4JjN2b&!+thYu;7uH zqM(RS;xnXpk$`j|TwWRtVUOVdtt8tsVNxvQ0{?%EWZ{k^BRdaXu~W`8jVm~V$zo`pj6j0?}UJe48aaW+QVINLzR5Q>cT(J0?6Iu`5Jz`y~3Z zyq*5af8M6=bCmVDEC?3@00(VTX{bmz>DQC?!?&A9T98llQF%DUY=@YPdV(GfOX9g~ zl!we46X;K?U{{*Gh|wee`A9>6bwpGfw~V7yhL$N&!Yv;Gv?`vrLQQ~o;IS`*c;>gm zM1ehoJU`F%!>^(>jm zZQ^xRI<0A{SNV=GsvwwScL=E8o`COB5QK;E`Y$|JgPm0pd*O4zC$r8CeQzfWHkK$gGfTDfYSaWlJ$UKTm*>MmyHA1XN+MdPE>hwKGi=H z^BjLRYs-B>&Qfux(AetAA~X66ju6b-MuC#_S*jG#{Fc<|?CokbjD42wj{)Os?CLf3 z%}y~XBep#n?Esl2+>)*vqH(zici=`)@5vEMQ=2ye2!~U?Sn!L52dXTPhYsKzg| zjci|?B?P;GFMC@b9}=@4^$m?3&xRkb=#hW@YsTt#Uz0>AG~6j<9~g=u{NjC79^_+g z;WRXZ!$G;@rssl99_TOo{G?~41zg1Fye#vp<+1wyI7fUkqs5H&(<$y#jc+9PuFg2X zriz|7`heOaF;(L2%Q_8zAamM%ptVT*+0X@aP@|rEh(t=gBsquKtZj(Go-^o>w+KvJ zD3X5k+eX>^S^jy!LO(TZBmgshY^47$n}MEs^RaG6V8d5h4ND!Cd~G?MKA70N`P$=&L>N=%rUWPTku0 z?t3Tp%Fh5O@3mLLBXF$wz}LGF#BbUB?aR+^*=p}wU*YoS>HK}++b`NYV0d@sdVAp^ zgkbfDbndw}RKF@FP2sW+Mmo*}4yp49_opU$?SW=~<)9&R=0~#@pw!H)7`4 zc)2_Bm2%VnkT9nMN|dHJf+vh693few*`&jWV-i4$;(mFVyab9cP#*kZ=fJ!L;Y3SXq}bysQJ}NW9t@XWYu0432%6UR{Q+fhq_Jl@TH)q%9Goe z+ZzNq6`2+B!nF_6Kj_nai*_Rt^!wx+pb23&{{SZH&171LX;@3BWIhtWlV@QVmJLgttJ_3(=GRD!43#ivwoLnIYVA^BjTLcR}xC9*|s7& zj^a8UCSJq?!bjX!uTWQo0oL_S;@)njYP}l!O1^<`ossQFc+dVj6S&I;DO4T5nOMGS zPMIv=FNtErON0s30GJxOomk%A;Yt;<{BS{^=a|~L4Nh1XrS@qO@`%3w_M)(1cBb14 zm9SGOki~TOSAB>4VDAx4Md<50CJ*>C!#vJRy(9+T3 zzAD;7l#~uI>PGv@brwj&_0_<>3`74;9zu)mmy^;a6+3V!Kq~fxW4e}rZSMz+*UExL zdWq^pl*~$`*G|0L^U!{5+IRibx4uVN#~D?5opuP%Z97K>ksV_pjY+5MckNgwK++?z zJpLi$k$2K($Fc@X*x>aXZ3v|BW{x7mR}dDg5B{jFYa&Lam96Z9kz^|xy*tF!RmJNi z1GE0>rf~9>^W`C>=ZIMLR3J>DLEyq7ur78v13UWS)RB{NO8L2FM3j zW9RO^1sv^g+xbecGQrD2$_w~Kw);N>@vKsK2!3lCxOuZ4gBfsgG~uCW6M3~}@`?m< zTRdkUQ5TjIYR+OVMs)EG7~K+;wIFTWpm5jD7|u=Vw;MCRpm(LdCi%U18}8rimyQ&n zoJ%8}3$65tV0-{@{FH)@4YRUXxyT$-6AuLaFMmP&QirZP+C~>06ood_6498MBQA|7zN=J^~1Relhl|-}clZG0ui)!}7_Onov&}_Ap+Q5`oCNK()I!y_sDLfe^218Z{E>6ges*o8lIR>6F9BA&|y25 z2UAgMGi|gvOp_yT*u6N(|5>MXejZQMChO1pdYP;*8zKetj=oDmSU}uLIBt8E66<;k z{r;2OQMm4bW-n;WaX_Fl1FPJ9M*^*Rw6zIRkP-K<3SWgL8puP1BTwj{+&frU^w7jz zA00?XE{o^#TvEmxlop1H3@+hD+rw{3w)KpOgvpl3V+zEoOM*wg&CX)vGPhnHvuVHb z3L}ybCWeBiXc(au`TaN?1JRcIf0Wv!Fv%Ld!Q77FMPHAv9@Og=xSD@kaJcKM`#O!lk_^OE(V@l2pg!3C!pf*g)Z#b|a6g9BHfZ z8y)$)>to@Wj-#pqq8U9UuEQ#EKM2?#ub^pKHNJlu-5DOBhMMJ9(K%T6@{kUDR|JhT{r|dT*}Ld zToOAyuCqi|%SuHr3wn8w7J%;9?z_nru6=3}k4Y&X;e|Td1J#wW@uumHa*|7XrUbIn zl&waNJG+aYEQHYSg{ASvl(%Ipb94%i-+eAJa9(QKJ#I3!UuryV-k9_^JC7%tG6Pj+ zO+&+tmA2F75#QfveLkVK<#NZo(_$fYTBAQ{t=s}2Q!EmA2o;;JQQo4**yLCt(PSN8h*1wFE za`0NphsrQjt*z)lpP7H)wwUj4#C!_GP9+yKl24c24{F_jm+B_5x&IossYP4t0Rs0@ zgE!p!is$o&vKX18#R7)+nQBp9Ct^4qYt*K(4b_54CVsW+9?y7x5H!74jNJTFrvDw@ zxYrrD@8wvgq?XW&0qJ+1->;^2yEvvyS7xNq0R!%vA1xbI931N-z?Q_nB&v#-dlW4R zNBm7Jb(!z{tG>3gi{Yq#>4h}!Vup-K_5<=aKUz;A|&zU4n1Pq$j{$e8~_;t%rNEogxA3{Hb6rCFXs7%8!*sDi7xKw z6eX9fhRS_%{I~MIB4PvCm&p+&Q@96Ui_kbg5AR9xkr9??R~EM{{?? zAWiC!4}4SklC&6>Z-uPywG+qRFFUyG+mRe)Wpe~!koyEr=wH|23Lg|BkTKKSVi&jh z3*XIhK7nFtps~tBum(b=`Dl;~;9-pkV!#pJ$QD$K&kiYFs^f{*Lfy$o*zu={fl7o2 zc;9i-Y|uQen7#dd@)43Xvn<6uRs^8FdE$m@k{c#U`M^Vyd!rY~6|sdmqYu&O4yI8M z01mjFs|G4v|EhX@n!vKIdB<9D7NhVK!9=qz2tC0&6%9<@uKfagN&qD8 zA~6_f_+NUl`ZU?l2qVv6>adR-pG9235vLFG-oJ&2kQ67yw8HElkqRTIqI~aY7t9QT z;asq@Ys%u&O5B-Rp@>rA<7oA?w=A&!(b2XG@#cRIxm_K9i&~h2wFR9cemb8lAbiF2 z3LLEx%uRoy#f@sxN9peu`f;e!8y6|U>Vf605;)cKN8lUX#&@*|&sY~!eX#6E-~znL zkVKSh{kbE!q6~ujD~M49Ump07cx-zWy~(a&gz;u+0H8*nOm`rQa#y4|x&ns0aHn_R zdP554^uwbiKrTN1k;wZ7xat_D&UE$G1B|cX$kU^r0Y;04=ePG@2cFp0mTw&XFe#AF z@ZZ{wfd*!fDeF;bOjcz|dW2OsWYd;2^huSF0yJSd-TKfpzbOS-*9%Q=x&4MDY3&bG zxJ%@c<*A+`R5n(Vsv=AHLrC3xHI>d)L=%pG{VL%MUM~NO?yiI@qik zQ_kBr&+1uk{-|=jvTW|1Sb{LKd|Corf+$pe@zuCi`^GKREajT%*PAT*Gtxm+@wl2sdV?pIPu$MU_7L*l&7lvD(HP|rzRF2 Z9(nl`X8!lH;_>Y_O8SWd#0UcPe*h%Le8T_$ From 7718841255259ba7043714eae141aa68bfb36b8f Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 20 Feb 2024 11:49:22 +0400 Subject: [PATCH 070/179] Reintegrating changes from neural_staged_training --- claasp/cipher.py | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index d00b4571..2750b1cf 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -562,12 +562,12 @@ def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_num True """ return self._continuous_tests.continuous_neutrality_measure_for_bit_j(beta_number_of_samples, - gf_number_samples, input_bit, - output_bits) + gf_number_samples, input_bit, + output_bits) def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): return self._continuous_tests.continuous_neutrality_measure_for_bit_j_and_beta(beta, input_bit, - number_of_samples, output_bits) + number_of_samples, output_bits) def delete_generated_evaluate_c_shared_library(self): """ @@ -1347,7 +1347,8 @@ def data_generator(nr, samples): testing_samples, num_epochs=number_of_epochs) def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, - training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet', save_prefix=None): + training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, + neural_net='dbitnet', save_prefix=None): """ Runs the AutoND pipeline ([BGHR2023]): - Find an input difference for the inputs set to True in difference_positions using an optimizer @@ -1393,17 +1394,24 @@ def data_generator(nr, samples): assert True in difference_positions, "At least one position in difference_positions must be set to True. If " \ "the default value was used, the primitive has no input named `plaintext`." - diff, scores, highest_round = self.find_good_input_difference_for_neural_distinguisher(difference_positions, - number_of_generations=optimizer_generations, - nb_samples=optimizer_samples, - verbose=verbose) + diff, scores, highest_round = self.find_good_input_difference_for_neural_distinguisher( + difference_positions, + number_of_generations=optimizer_generations, + nb_samples=optimizer_samples, + verbose=verbose) input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 - neural_network = get_neural_network('dbitnet', input_size=input_size) - nr = max(1, highest_round - 1) - print(f'Training DBitNet on input difference {[hex(x) for x in input_difference]}, from round {nr - 1}...') - return neural_staged_training(self, data_generator, nr, neural_network, training_samples, - testing_samples, number_of_epochs) + neural_network = get_neural_network(neural_net, input_size=input_size) + nr = max(1, highest_round - 3) + input_difference_list = [hex(x) for x in input_difference] + print( + f'Training {neural_net} on input difference {input_difference_list} ({self.inputs}), from round {nr}...' + ) + return neural_staged_training(self, lambda nr, samples: get_differential_dataset(self, input_difference, + number_of_rounds=nr, + samples=samples), nr, + neural_network, training_samples, + testing_samples, number_of_epochs, save_prefix) def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): """ From f4980d8915a02214c9b2b3530462575f5dc11c2f Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Wed, 21 Feb 2024 11:57:27 +0400 Subject: [PATCH 071/179] Fix/refactor algebraic tests to a class: polished code and made necessary changes in the cipher.py --- claasp/cipher.py | 36 ++++-------------------- claasp/cipher_modules/algebraic_tests.py | 16 +++++------ tests/unit/cipher_test.py | 8 +++--- 3 files changed, 18 insertions(+), 42 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 0e9d0caa..00a6d949 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -29,9 +29,10 @@ from claasp.utils.templates import TemplateManager, CSVBuilder from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel from claasp.cipher_modules import continuous_tests, code_generator, \ - component_analysis_tests, avalanche_tests, algebraic_tests + component_analysis_tests, avalanche_tests import importlib from claasp.cipher_modules.inverse_cipher import * +from claasp.cipher_modules.algebraic_tests import AlgebraicTests tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -243,34 +244,6 @@ def add_word_permutation_component(self, input_id_links, input_bit_positions, def add_XOR_component(self, input_id_links, input_bit_positions, output_bit_size): return editor.add_XOR_component(self, input_id_links, input_bit_positions, output_bit_size) - def algebraic_tests(self, timeout): - """ - Return a dictionary explaining the result of the algebraic test. - - INPUT: - - - ``timeout`` -- **integer**; the timeout for the Grobner basis computation in seconds - - OUTPUTS: a dictionary with the following keys: - - - ``npolynomials`` -- number of polynomials - - ``nvariables`` -- number of variables - - ``timeout`` -- timeout in seconds - - ``pass`` -- whether the algebraic test pass w.r.t the given timeout - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) - sage: d = speck.algebraic_tests(5) # long time - sage: d == {'input_parameters': {'timeout': 5}, 'test_results': - ....: {'number_of_variables': [304, 800], - ....: 'number_of_equations': [240, 688], 'number_of_monomials': [304, 800], - ....: 'max_degree_of_equations': [1, 1], 'test_passed': [False, False]}} # long time - True - """ - return algebraic_tests.algebraic_tests(self, timeout) - def analyze_cipher(self, tests_configuration): """ Generate a dictionary with the analysis of the cipher. @@ -296,6 +269,9 @@ def analyze_cipher(self, tests_configuration): sage: analysis = sp.analyze_cipher(tests_configuration) sage: analysis["diffusion_tests"]["test_results"]["key"]["round_output"][ # random ....: "avalanche_dependence_vectors"]["differences"][31]["output_vectors"][0]["vector"] # random + + sage: tests_configuration = {"algebraic_tests": {"run_tests": True, "timeout": 60}} + sage: analysis = sp.analyze_cipher(tests_configuration) """ tmp_tests_configuration = deepcopy(tests_configuration) analysis_results = {} @@ -308,7 +284,7 @@ def analyze_cipher(self, tests_configuration): analysis_results["component_analysis_tests"] = component_analysis_tests.component_analysis_tests(self) if "algebraic_tests" in tests_configuration and tests_configuration["algebraic_tests"]["run_tests"]: timeout = tests_configuration["algebraic_tests"]["timeout"] - analysis_results["algebraic_tests"] = algebraic_tests.algebraic_tests(self, timeout=timeout) + analysis_results["algebraic_tests"] = AlgebraicTests(self).algebraic_tests(timeout) return analysis_results diff --git a/claasp/cipher_modules/algebraic_tests.py b/claasp/cipher_modules/algebraic_tests.py index a13e232c..49809b32 100644 --- a/claasp/cipher_modules/algebraic_tests.py +++ b/claasp/cipher_modules/algebraic_tests.py @@ -19,26 +19,26 @@ from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel -class AlgebraicTest: +class AlgebraicTests: """ Construct an instance of Algebraic Tests of the cipher. EXAMPLES:: - sage: from claasp.cipher_modules.algebraic_tests import AlgebraicTest + sage: from claasp.cipher_modules.algebraic_tests import AlgebraicTests sage: from claasp.ciphers.toys.toyspn1 import ToySPN1 sage: toyspn = ToySPN1(number_of_rounds=2) - sage: alg_test = AlgebraicTest(toyspn) - sage: alg_test.algebraic_tests(120) # timeout=120 seconds + sage: alg_test = AlgebraicTests(toyspn) + sage: alg_test.algebraic_tests(30) # timeout=30 seconds sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(number_of_rounds=1) - sage: alg_test = AlgebraicTest(speck) - sage: alg_test.algebraic_tests(120) # timeout=120 seconds + sage: alg_test = AlgebraicTests(speck) + sage: alg_test.algebraic_tests(60) # timeout=60 seconds sage: speck = SpeckBlockCipher(number_of_rounds=2) - sage: alg_test = AlgebraicTest(speck) - sage: alg_test.algebraic_tests(120) # timeout=120 seconds + sage: alg_test = AlgebraicTests(speck) + sage: alg_test.algebraic_tests(60) """ def __init__(self, cipher): diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 87b27228..b3ce34ac 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -42,7 +42,7 @@ from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network from claasp.ciphers.toys.toyspn1 import ToySPN1 -from claasp.cipher_modules.algebraic_tests import AlgebraicTest +from claasp.cipher_modules.algebraic_tests import AlgebraicTests EVALUATION_PY = 'evaluation.py' DICTIONARY_EXAMPLE_PY = "claasp/ciphers/dictionary_example.py" @@ -54,7 +54,7 @@ def test_algebraic_tests(): toyspn = ToySPN1(number_of_rounds=2) - d = AlgebraicTest(toyspn).algebraic_tests(30) + d = AlgebraicTests(toyspn).algebraic_tests(30) assert d == { 'input_parameters': {'cipher.id': 'toyspn1_p6_k6_o6_r2', 'timeout': 30, 'test_name': 'algebraic_tests'}, 'test_results': {'number_of_variables': [66, 126], @@ -64,7 +64,7 @@ def test_algebraic_tests(): 'test_passed': [False, False]}} speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=2) - d = AlgebraicTest(speck).algebraic_tests(5) + d = AlgebraicTests(speck).algebraic_tests(5) assert d == { 'input_parameters': {'cipher.id': 'speck_p32_k64_o32_r2', 'timeout': 5, 'test_name': 'algebraic_tests'}, 'test_results': {'number_of_variables': [304, 800], @@ -74,7 +74,7 @@ def test_algebraic_tests(): 'test_passed': [False, False]}} aes = AESBlockCipher(word_size=4, state_size=2, number_of_rounds=2) - d = AlgebraicTest(aes).algebraic_tests(5) + d = AlgebraicTests(aes).algebraic_tests(5) compare_result = {'input_parameters': {'cipher.id': 'aes_block_cipher_k16_p16_o16_r2', 'timeout': 5, 'test_name': 'algebraic_tests'}, From 479c7016be6bd51dea763914eb1297b06db961fe Mon Sep 17 00:00:00 2001 From: Sharwan Tiwari Date: Wed, 21 Feb 2024 12:57:15 +0400 Subject: [PATCH 072/179] fixed a typo in the algebraic test object name --- tests/unit/cipher_modules/report_test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index 709a13d4..6247e08e 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -8,7 +8,7 @@ from claasp.cipher_modules.report import Report from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests -from claasp.cipher_modules.algebraic_tests import AlgebraicTest +from claasp.cipher_modules.algebraic_tests import AlgebraicTests def test_print_report(): @@ -36,7 +36,7 @@ def test_print_report(): blackbox_report = Report(speck, blackbox_results) blackbox_report.print_report() - algebraic_results = AlgebraicTest(speck).algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) algebraic_report.print_report() @@ -90,7 +90,7 @@ def test_save_as_DataFrame(): bit_values=(0,) * 64) trail = smt.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - algebraic_results = AlgebraicTest(speck).algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) algebraic_report.save_as_DataFrame() @@ -119,7 +119,7 @@ def test_save_as_json(): trail_report = Report(simon, trail) - algebraic_results = AlgebraicTest(simon).algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(simon).algebraic_tests(timeout=1) algebraic_report = Report(simon, algebraic_results) algebraic_report.save_as_json() From e39425be17c5b07d81cc195e30631c7ccd6691cd Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Wed, 21 Feb 2024 15:53:07 +0400 Subject: [PATCH 073/179] refactoring avalanche tests modules to object --- claasp/cipher.py | 249 +----- claasp/cipher_modules/avalanche_tests.py | 929 +++++++++++------------ 2 files changed, 438 insertions(+), 740 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 0e9d0caa..44eb4b89 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -29,9 +29,10 @@ from claasp.utils.templates import TemplateManager, CSVBuilder from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel from claasp.cipher_modules import continuous_tests, code_generator, \ - component_analysis_tests, avalanche_tests, algebraic_tests + component_analysis_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * +from claasp.cipher_modules.avalanche_tests import AvalancheTests tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -302,7 +303,7 @@ def analyze_cipher(self, tests_configuration): if "diffusion_tests" in tests_configuration and tests_configuration["diffusion_tests"]["run_tests"]: tmp_tests_configuration["diffusion_tests"].pop("run_tests") analysis_results['diffusion_tests'] = \ - avalanche_tests.avalanche_tests(self, **tmp_tests_configuration["diffusion_tests"]) + AvalancheTests(self).avalanche_tests(**tmp_tests_configuration["diffusion_tests"]) if "component_analysis_tests" in tests_configuration and tests_configuration[ "component_analysis_tests"]["run_tests"]: analysis_results["component_analysis_tests"] = component_analysis_tests.component_analysis_tests(self) @@ -324,33 +325,6 @@ def as_python_dictionary(self): 'cipher_reference_code': self._reference_code } - def avalanche_probability_vectors(self, nb_samples): - """ - Return the avalanche probability vectors of each input bit difference for each round. - - The inputs considered are plaintext, key, etc. - - The i-th component of the vector is the probability that i-th bit of the output - flips due to the input bit difference. - - .. NOTE:: - - apvs["key"]["round_output"][position][index_occurrence] = vector of round_output size with input diff - injected in key - - INPUT: - - - ``nb_samples`` -- **integer**; used to compute the estimated probability of flipping - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck = speck(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: apvs = speck.avalanche_probability_vectors(100) - sage: apvs["key"]["round_output"][31][0] # random - """ - return avalanche_tests.avalanche_probability_vectors(self, nb_samples) - def component_analysis_tests(self): """ Return a list of dictionaries, each one giving some properties of the cipher's operations. @@ -390,60 +364,6 @@ def print_component_analysis_as_radar_charts(self, component_analysis_results): def component_from(self, round_number, index): return self._rounds.component_from(round_number, index) - def compute_criterion_from_avalanche_probability_vectors(self, all_apvs, avalanche_dependence_uniform_bias): - r""" - Return a python dictionary that contains the dictionaries corresponding to each criterion. - - ALGORITHM: - - The avalanche dependence is the number of output bit that flip with respect to an input bit difference, - for a given round. - If the worst avalanche dependence for a certain round is close to the output bit size with respect to a certain - threshold, we say that the cipher satisfies the avalanche dependence criterion for this round. - - The avalanche dependence uniform is the number of output bit that flip with a probability - $\in \left[\frac{1}{2} - \text{bias}; \frac{1}{2} + \text{bias}\right]$, - with respect to an input bit difference, for a given round. If the worst avalanche dependence uniform for a - certain round is close to the output bit size with respect to a certain threshold, - we say that the cipher satisfies the avalanche dependence uniform criterion for this round. - - The avalanche weight is the expected Hamming weight of the output difference with respect to an input bit - difference, for a given round. - If the avalanche weights of all the input bit differences for a certain round is close to half of - the output bit size with respect to a certain threshold, we say that the cipher satisfies the - avalanche criterion for this round. - - The avalanche entropy is defined as uncertainty about whether output bits flip with respect to an input - bit difference, for a given round. - If the strict avalanche entropy of all the input bit differences for a certain round is close to - the output bit size with respect to a certain threshold, we say that the cipher satisfies the - strict avalanche criterion for this round. - - .. NOTE:: - - d["key"]["round_output"][position][index_occurrence]["avalanche_dependence"] = vector of round_output size - with input diff injected in key - - INPUT: - - - ``all_apvs`` -- **dictionary**; all avalanche probability vectors returned by avalanche_probability_vectors() - - ``avalanche_dependence_uniform_bias`` -- **float**; define the range where the probability of flipping should be - - .. SEEALSO:: - - :py:meth:`~avalanche_probability_vectors` for the returning vectors. - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck = speck(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: apvs = speck.avalanche_probability_vectors(100) - sage: d = speck.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) - sage: d["key"]["round_output"][0][0]["avalanche_dependence_vectors"] # random - """ - return avalanche_tests.compute_criterion_from_avalanche_probability_vectors(self, all_apvs, - avalanche_dependence_uniform_bias) - def continuous_avalanche_factor(self, lambda_value, number_of_samples): """ Continuous generalization of the metric Avalanche Factor. This method implements Definition 14 of [MUR2020]_. @@ -582,109 +502,6 @@ def delete_generated_evaluate_c_shared_library(self): """ code_generator.delete_generated_evaluate_c_shared_library(self) - def diffusion_tests(self, number_of_samples=5, - avalanche_dependence_uniform_bias=0.05, - avalanche_dependence_criterion_threshold=0, - avalanche_dependence_uniform_criterion_threshold=0, - avalanche_weight_criterion_threshold=0.01, - avalanche_entropy_criterion_threshold=0.01, - run_avalanche_dependence=True, - run_avalanche_dependence_uniform=True, - run_avalanche_weight=True, - run_avalanche_entropy=True): - """ - Return a python dictionary that contains the dictionaries corresponding to each criterion and their analysis. - - INPUT: - - - ``number_of_samples`` -- **integer** (default: `5`); used to compute the estimated probability of flipping - - ``avalanche_dependence_uniform_bias`` -- **float** (default: `0.05`); define the range where the probability - of flipping should be - - ``avalanche_dependence_criterion_threshold`` -- **float** (default: `0`); It is a bias. The criterion is satisfied - for a given input bit difference if for all output bits of the round under analysis, the corresponding - avalanche dependence criterion d is such that block_bit_size - bias <= d <= block_bit_size + bias - - ``avalanche_dependence_uniform_criterion_threshold`` -- **float** (default: `0`); It is a bias. The criterion is - satisfied for a given input bit difference if for all output bits of the round under analysis, the - corresponding avalanche dependence uniform criterion d is such that - block_bit_size - bias <= d <= block_bit_size + bias - - ``avalanche_weight_criterion_threshold`` -- **float** (default: `0.01`); It is a bias. The criterion is - satisfied for a given input bit difference if for all output bits of the round under analysis, the - corresponding avalanche weight criterion is such that block_bit_size/2 - bias <= d <= block_bit_size/2 + bias - - ``avalanche_entropy_criterion_threshold`` -- **float** (default: `0.01`); It is a bias. The criterion is - satisfied for a given input bit difference if for all output bits of the round under analysis, the - corresponding avalanche entropy criterion d is such that block_bit_size - bias <= d <= block_bit_size + bias - - ``run_avalanche_dependence`` -- **boolean** (default: `True`); if True, add the avalanche dependence results - to the output dictionary - - ``run_avalanche_dependence_uniform`` -- **boolean** (default: `True`); if True, add the avalanche dependence - uniform results to the output dictionary - - ``run_avalanche_weight`` -- **boolean** (default: `True`); if True, add the avalanche weight results to the - output dictionary - - ``run_avalanche_entropy`` -- **boolean** (default: `True`); if True, add the avalanche entropy results to the - output dictionary - - .. NOTE:: - - diff inserted in: - d["test_results"]["plaintext"]["round_output"]["avalanche_entropy"]["differences"][position][ - "output_vectors"][round] - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: d = speck.diffusion_tests(number_of_samples=100) - sage: d["test_results"]["key"]["round_output"][ # random - ....: "avalanche_dependence_vectors"]["differences"][0]["output_vectors"][0]["vector"] # random - """ - return avalanche_tests.avalanche_tests(self, - number_of_samples, avalanche_dependence_uniform_bias, - avalanche_dependence_criterion_threshold, - avalanche_dependence_uniform_criterion_threshold, - avalanche_weight_criterion_threshold, - avalanche_entropy_criterion_threshold, run_avalanche_dependence, - run_avalanche_dependence_uniform, run_avalanche_weight, - run_avalanche_entropy) - - def generate_heatmap_graphs_for_avalanche_tests(self, avalanche_results, difference_positions=None, - criterion_names=None): - """ - Return a string containing latex instructions to generate heatmap graphs of the avalanche tests. - The string can then be printed on a terminal or on a file. - - INPUT: - - - ``avalanche_results`` -- **dictionary**; results of the avalanche tests - - ``difference_positions`` -- **list** (default: `None`); positions of the differences to inject. - The default value is equivalent to pick one of the worst position for a difference and the average value. - - ``criterion_names`` -- **list** (default: `None`); names of the criteria to observe - The default value is equivalent to to pick all of the 4 criteria: - - "avalanche_dependence_vectors" - - "avalanche_dependence_uniform_vectors" - - "avalanche_entropy_vectors" - - "avalanche_weight_vectors" - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: sp = SpeckBlockCipher(block_bit_size=64, key_bit_size=128, number_of_rounds=5) - sage: d = sp.diffusion_tests(number_of_samples=100) - sage: h = sp.generate_heatmap_graphs_for_avalanche_tests(d) - sage: h[:20] - '\\documentclass[12pt]' - - sage: from claasp.ciphers.permutations.ascon_permutation import AsconPermutation - sage: ascon = AsconPermutation(number_of_rounds=4) - sage: d = ascon.diffusion_tests(number_of_samples=100) # long - sage: h = ascon.generate_heatmap_graphs_for_avalanche_tests(d, [0], ["avalanche_weight_vectors"]) # long - - sage: from claasp.ciphers.permutations.xoodoo_permutation import XoodooPermutation - sage: cipher = XoodooPermutation(number_of_rounds=4) - sage: d = cipher.diffusion_tests(number_of_samples=100) # long - sage: h = cipher.generate_heatmap_graphs_for_avalanche_tests(d, [1,193], ["avalanche_dependence_vectors", "avalanche_entropy_vectors"]) # long - """ - return avalanche_tests.generate_heatmap_graphs_for_avalanche_tests(self, avalanche_results, - difference_positions, criterion_names) - def evaluate(self, cipher_input, intermediate_output=False, verbosity=False): """ Return the output of the cipher. @@ -1424,66 +1241,6 @@ def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): """ return code_generator.generate_bit_based_c_code(self, intermediate_output, verbosity) - # LM: TII team needs to update this method because the keys from diffusion_tests_results do not correspond - def generate_csv_report(self, nb_samples, output_absolute_path): - """ - Generate a CSV report containing criteria to estimate the vulnerability of the cipher. - - This method generate a CSV report containing the criteria presented in the paper - "The design of Xoodoo and Xoofff" [1]. - [1] https://tosc.iacr.org/index.php/ToSC/article/view/7359 - - INPUT: - - - ``nb_samples`` -- **integer**; number of samples - - ``output_absolute_path`` -- **string**; output of the absolute path - - EXAMPLES:: - - sage: import inspect - sage: import claasp - sage: import os.path - sage: tii_path = inspect.getfile(claasp) - sage: tii_dir_path = os.path.dirname(tii_path) - sage: from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher - sage: identity = IdentityBlockCipher() - sage: identity.generate_csv_report(10, f"{tii_dir_path}/{identity.id}_report.csv") - sage: os.path.isfile(f"{tii_dir_path}/{identity.id}_report.csv") - True - sage: import os - sage: os.remove(f"{tii_dir_path}/{identity.id}_report.csv") - """ - - diffusion_tests_results = self.diffusion_tests(nb_samples) - first_input_tag = list(diffusion_tests_results['test_results'].keys())[0] - output_tags = diffusion_tests_results['test_results'][first_input_tag].keys() - property_values_array = [] - for output_tag in output_tags: - property_values_array_temp = avalanche_tests.get_average_criteria_list_by_output_tag( - diffusion_tests_results, output_tag - ) - property_values_array += property_values_array_temp - - str_of_inputs_bit_size = list(map(str, self._inputs_bit_size)) - cipher_primitive = self._id + "_" + "_".join(str_of_inputs_bit_size) - cipher_data = { - 'type': self._type, - 'scheme': self._id, - 'cipher_inputs': self._inputs, - 'cipher_inputs_bit_size': list(map(str, self._inputs_bit_size)), - 'primitive': cipher_primitive, - 'total_number_rounds': self.number_of_rounds, - 'details': property_values_array - } - template_manager = TemplateManager() - excel_builder = CSVBuilder(cipher_data) - template_manager.set_builder(excel_builder) - template_information = {"template_path": "diffusion_test_template.csv"} - excel = template_manager.get_template().render_template(template_information) - text_file = open(output_absolute_path, "w") - text_file.write(excel) - text_file.close() - def generate_evaluate_c_code_shared_library(self, intermediate_output=False, verbosity=False): """ Store the C code in a file named _evaluate.c, and build the corresponding executable. diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index 032ac901..727ba6ca 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -25,506 +25,447 @@ from claasp.cipher_modules import evaluator from claasp.name_mappings import INTERMEDIATE_OUTPUT, CIPHER_OUTPUT +class AvalancheTests: + def __init__(self, cipher): + self.cipher = cipher + + def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias=0.05, + avalanche_dependence_criterion_threshold=0, avalanche_dependence_uniform_criterion_threshold=0, + avalanche_weight_criterion_threshold=0.01, avalanche_entropy_criterion_threshold=0.01, + run_avalanche_dependence=True, run_avalanche_dependence_uniform=True, + run_avalanche_weight=True, run_avalanche_entropy=True): + """ + Return a python dictionary that contains the dictionaries corresponding to each criterion and their analysis. + + INPUT: + + - ``number_of_samples`` -- **integer** (default: `5`); used to compute the estimated probability of flipping + - ``avalanche_dependence_uniform_bias`` -- **float** (default: `0.05`); define the range where the probability + of flipping should be + - ``avalanche_dependence_criterion_threshold`` -- **float** (default: `0`); It is a bias. The criterion is satisfied + for a given input bit difference if for all output bits of the round under analysis, the corresponding + avalanche dependence criterion d is such that block_bit_size - bias <= d <= block_bit_size + bias + - ``avalanche_dependence_uniform_criterion_threshold`` -- **float** (default: `0`); It is a bias. The criterion is + satisfied for a given input bit difference if for all output bits of the round under analysis, the + corresponding avalanche dependence uniform criterion d is such that + block_bit_size - bias <= d <= block_bit_size + bias + - ``avalanche_weight_criterion_threshold`` -- **float** (default: `0.01`); It is a bias. The criterion is + satisfied for a given input bit difference if for all output bits of the round under analysis, the + corresponding avalanche weight criterion is such that block_bit_size/2 - bias <= d <= block_bit_size/2 + bias + - ``avalanche_entropy_criterion_threshold`` -- **float** (default: `0.01`); It is a bias. The criterion is + satisfied for a given input bit difference if for all output bits of the round under analysis, the + corresponding avalanche entropy criterion d is such that block_bit_size - bias <= d <= block_bit_size + bias + - ``run_avalanche_dependence`` -- **boolean** (default: `True`); if True, add the avalanche dependence results + to the output dictionary + - ``run_avalanche_dependence_uniform`` -- **boolean** (default: `True`); if True, add the avalanche dependence + uniform results to the output dictionary + - ``run_avalanche_weight`` -- **boolean** (default: `True`); if True, add the avalanche weight results to the + output dictionary + - ``run_avalanche_entropy`` -- **boolean** (default: `True`); if True, add the avalanche entropy results to the + output dictionary + + .. NOTE:: + + diff inserted in: + d["test_results"]["plaintext"]["round_output"]["avalanche_entropy"]["differences"][position][ + "output_vectors"][round] + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest + sage: test = AvalancheTest(speck) + sage: d = test.avalanche_tests(number_of_samples=100) + sage: d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][1] + # difference injected in position 0 in the key, observation of round_output after 2 rounds (1 for 2 rounds) + """ + + + all_avalanche_probability_vectors = self.avalanche_probability_vectors(number_of_samples) + criterion = self.compute_criterion_from_avalanche_probability_vectors(all_avalanche_probability_vectors, + avalanche_dependence_uniform_bias) + intermediate_output_names = self.add_intermediate_output_components_id_to_dictionary(self.cipher.get_all_components()) + diffusion_tests = {"input_parameters": { + "test_name": "avalanche_tests", + "number_of_samples": number_of_samples, + "avalanche_dependence_uniform_bias": avalanche_dependence_uniform_bias, + "avalanche_dependence_criterion_threshold": avalanche_dependence_criterion_threshold, + "avalanche_dependence_uniform_criterion_threshold": avalanche_dependence_uniform_criterion_threshold, + "avalanche_weight_criterion_threshold": avalanche_weight_criterion_threshold, + "avalanche_entropy_criterion_threshold": avalanche_entropy_criterion_threshold}, + "test_results": self.init_dictionary_test_results(intermediate_output_names)} + + parameters = { + "avalanche_dependence_vectors": [run_avalanche_dependence, 1, + avalanche_dependence_criterion_threshold], + "avalanche_dependence_uniform_vectors": [run_avalanche_dependence_uniform, 1, + avalanche_dependence_uniform_criterion_threshold], + "avalanche_weight_vectors": [run_avalanche_weight, 1 / 2, avalanche_weight_criterion_threshold], + "avalanche_entropy_vectors": [run_avalanche_entropy, 1, avalanche_entropy_criterion_threshold]} + + for criterion_name in parameters.keys(): + for index, input_name in enumerate(self.cipher.inputs): + for intermediate_output_name in list(intermediate_output_names.keys()): + if parameters[criterion_name][0]: + self.add_intermediate_output_values_to_dictionary(criterion_name, intermediate_output_names, + parameters,diffusion_tests, index, input_name, + intermediate_output_name) + all_output_vectors, largest_round_criterion_not_satisfied = \ + self.calculate_regular_difference(criterion_name, criterion, intermediate_output_names, parameters, + diffusion_tests, input_name, intermediate_output_name) + self.calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, + input_name, intermediate_output_name) + self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, + diffusion_tests, input_name, intermediate_output_name) + + return diffusion_tests + + + def init_dictionary_test_results(self, dict_intermediate_output_names): + dict_test_results = {} + for input_name in self.cipher.inputs: + dict_test_results[input_name] = {} + for intermediate_output_name in list(dict_intermediate_output_names.keys()): + dict_test_results[input_name][intermediate_output_name] = {} + + return dict_test_results + + + def is_output(self, component): + return component.type == INTERMEDIATE_OUTPUT or component.type == CIPHER_OUTPUT + + + def add_intermediate_output_components_id_to_dictionary(self, components): + intermediate_output_names = {} + for component in components: + if self.is_output(component): + if component.description[0] not in list(intermediate_output_names.keys()): + number_of_occurrences = 0 + components_id = [] + intermediate_output_names[component.description[0]] = [component.output_bit_size, + number_of_occurrences, + components_id] + number_of_occurrences_position = 1 + intermediate_output_names[component.description[0]][number_of_occurrences_position] += 1 + components_id_position = 2 + intermediate_output_names[component.description[0]][components_id_position].append(component.id) + + return intermediate_output_names + + + def add_intermediate_output_values_to_dictionary(self, criterion_name, dict_intermediate_output_names, + dict_parameters, dict_test_results, index, + input_name, intermediate_output_name): + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = {} + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_input_bit_size'] = \ + self.cipher.inputs_bit_size[index] + output_bit_size = dict_intermediate_output_names[intermediate_output_name][0] + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_output_bit_size'] = output_bit_size + #dict_test_results[input_name][intermediate_output_name][criterion_name]["max_possible_value_per_bit"] = 1 + #dict_test_results[input_name][intermediate_output_name][criterion_name]["min_possible_value_per_bit"] = 0 + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_bit'] = \ + dict_parameters[criterion_name][1] + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_max_possible_value_per_output_block'] = \ + output_bit_size + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_min_possible_value_per_output_block'] = 0 + dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_output_block'] = \ + output_bit_size * dict_parameters[criterion_name][1] + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = [] + + + def calculate_regular_difference(self, criterion_name, dict_criterion, dict_intermediate_output_names, dict_parameters, + dict_test_results, input_name, intermediate_output_name): + all_output_vectors = {} + dict_largest_round_criterion_not_satisfied = {} + for index_input_diff in range(len(dict_criterion[input_name][intermediate_output_name])): + output_vectors = [] + for nb_occurence in range(len(dict_criterion[input_name][intermediate_output_name][index_input_diff])): + tmp_dict = { + "vector": dict_criterion[input_name][intermediate_output_name][index_input_diff][nb_occurence][ + criterion_name], + "round": dict_criterion[input_name][intermediate_output_name][index_input_diff][nb_occurence]["round"]} + tmp_dict["total"] = sum(tmp_dict["vector"]) + expected_value_per_output_block = dict_test_results["input_parameters"][(f'{intermediate_output_name}_' + f'{criterion_name}_expected_value_per_output_block')] + threshold = dict_parameters[criterion_name][2] + if expected_value_per_output_block - threshold <= tmp_dict[ + "total"] <= expected_value_per_output_block + threshold: + tmp_dict["criterion_satisfied"] = True + else: + tmp_dict["criterion_satisfied"] = False + dict_largest_round_criterion_not_satisfied[index_input_diff] = tmp_dict["round"] + tmp_dict["output_component_id"] = dict_intermediate_output_names[intermediate_output_name][2][nb_occurence] + if tmp_dict["round"] not in all_output_vectors: + all_output_vectors[tmp_dict["round"]] = [] + all_output_vectors[tmp_dict["round"]].append(tmp_dict["vector"]) + output_vectors.append(tmp_dict) + + output_dict = { + "input_difference_value": hex(1 << index_input_diff), + "vectors": [vector["vector"] for vector in output_vectors], + "total": [vector["total"] for vector in output_vectors], + "satisfied_criterion": [vector["criterion_satisfied"] for vector in output_vectors], + "component_ids": [vector["output_component_id"] for vector in output_vectors] + } -def avalanche_tests(cipher, number_of_samples=5, avalanche_dependence_uniform_bias=0.05, - avalanche_dependence_criterion_threshold=0, avalanche_dependence_uniform_criterion_threshold=0, - avalanche_weight_criterion_threshold=0.01, avalanche_entropy_criterion_threshold=0.01, - run_avalanche_dependence=True, run_avalanche_dependence_uniform=True, - run_avalanche_weight=True, run_avalanche_entropy=True): - - all_avalanche_probability_vectors = avalanche_probability_vectors(cipher, number_of_samples) - criterion = compute_criterion_from_avalanche_probability_vectors(cipher, all_avalanche_probability_vectors, - avalanche_dependence_uniform_bias) - intermediate_output_names = add_intermediate_output_components_id_to_dictionary(cipher.get_all_components()) - diffusion_tests = {"input_parameters": { - "test_name": "avalanche_tests", - "number_of_samples": number_of_samples, - "avalanche_dependence_uniform_bias": avalanche_dependence_uniform_bias, - "avalanche_dependence_criterion_threshold": avalanche_dependence_criterion_threshold, - "avalanche_dependence_uniform_criterion_threshold": avalanche_dependence_uniform_criterion_threshold, - "avalanche_weight_criterion_threshold": avalanche_weight_criterion_threshold, - "avalanche_entropy_criterion_threshold": avalanche_entropy_criterion_threshold}, - "test_results": init_dictionary_test_results(cipher, intermediate_output_names)} - - parameters = { - "avalanche_dependence_vectors": [run_avalanche_dependence, 1, - avalanche_dependence_criterion_threshold], - "avalanche_dependence_uniform_vectors": [run_avalanche_dependence_uniform, 1, - avalanche_dependence_uniform_criterion_threshold], - "avalanche_weight_vectors": [run_avalanche_weight, 1 / 2, avalanche_weight_criterion_threshold], - "avalanche_entropy_vectors": [run_avalanche_entropy, 1, avalanche_entropy_criterion_threshold]} - - for criterion_name in parameters.keys(): - for index, input_name in enumerate(cipher.inputs): - for intermediate_output_name in list(intermediate_output_names.keys()): - if parameters[criterion_name][0]: - add_intermediate_output_values_to_dictionary(cipher, criterion_name, intermediate_output_names, - parameters,diffusion_tests, index, input_name, - intermediate_output_name) - all_output_vectors, largest_round_criterion_not_satisfied = \ - calculate_regular_difference(criterion_name, criterion, intermediate_output_names, parameters, - diffusion_tests, input_name, intermediate_output_name) - calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, - input_name, intermediate_output_name) - #calculate_worst_input_differences(cipher, criterion_name, largest_round_criterion_not_satisfied, - # diffusion_tests, input_name, intermediate_output_name) - - return diffusion_tests - - -def init_dictionary_test_results(cipher, dict_intermediate_output_names): - dict_test_results = {} - for input_name in cipher.inputs: - dict_test_results[input_name] = {} - for intermediate_output_name in list(dict_intermediate_output_names.keys()): - dict_test_results[input_name][intermediate_output_name] = {} - - return dict_test_results - - -def is_output(component): - return component.type == INTERMEDIATE_OUTPUT or component.type == CIPHER_OUTPUT - - -def add_intermediate_output_components_id_to_dictionary(components): - intermediate_output_names = {} - for component in components: - if is_output(component): - if component.description[0] not in list(intermediate_output_names.keys()): - number_of_occurrences = 0 - components_id = [] - intermediate_output_names[component.description[0]] = [component.output_bit_size, - number_of_occurrences, - components_id] - number_of_occurrences_position = 1 - intermediate_output_names[component.description[0]][number_of_occurrences_position] += 1 - components_id_position = 2 - intermediate_output_names[component.description[0]][components_id_position].append(component.id) - - return intermediate_output_names - - -def add_intermediate_output_values_to_dictionary(cipher, criterion_name, dict_intermediate_output_names, - dict_parameters, dict_test_results, index, - input_name, intermediate_output_name): - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = {} - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_input_bit_size'] = \ - cipher.inputs_bit_size[index] - output_bit_size = dict_intermediate_output_names[intermediate_output_name][0] - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_output_bit_size'] = output_bit_size - #dict_test_results[input_name][intermediate_output_name][criterion_name]["max_possible_value_per_bit"] = 1 - #dict_test_results[input_name][intermediate_output_name][criterion_name]["min_possible_value_per_bit"] = 0 - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_bit'] = \ - dict_parameters[criterion_name][1] - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_max_possible_value_per_output_block'] = \ - output_bit_size - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_min_possible_value_per_output_block'] = 0 - dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_output_block'] = \ - output_bit_size * dict_parameters[criterion_name][1] - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = [] - - -def calculate_regular_difference(criterion_name, dict_criterion, dict_intermediate_output_names, dict_parameters, - dict_test_results, input_name, intermediate_output_name): - all_output_vectors = {} - dict_largest_round_criterion_not_satisfied = {} - for index_input_diff in range(len(dict_criterion[input_name][intermediate_output_name])): + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(output_dict) + + return all_output_vectors, dict_largest_round_criterion_not_satisfied + + + def calculate_average_difference(self, all_output_vectors, criterion_name, dict_parameters, dict_test_results, input_name, + intermediate_output_name): + dict_for_average_diff = {"input_difference_value": 'average'} output_vectors = [] - for nb_occurence in range(len(dict_criterion[input_name][intermediate_output_name][index_input_diff])): - tmp_dict = { - "vector": dict_criterion[input_name][intermediate_output_name][index_input_diff][nb_occurence][ - criterion_name], - "round": dict_criterion[input_name][intermediate_output_name][index_input_diff][nb_occurence]["round"]} + for current_round in all_output_vectors.keys(): + tmp_dict = {} + average_vector = [ + sum(vec) / + dict_test_results["input_parameters"][(f'{intermediate_output_name}' + f'_{criterion_name}_input_bit_size')] for vec in zip(* all_output_vectors[current_round])] + tmp_dict["vector"] = average_vector tmp_dict["total"] = sum(tmp_dict["vector"]) - expected_value_per_output_block = dict_test_results["input_parameters"][(f'{intermediate_output_name}_' - f'{criterion_name}_expected_value_per_output_block')] + expected_value_per_output_block = dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_output_block'] threshold = dict_parameters[criterion_name][2] - if expected_value_per_output_block - threshold <= tmp_dict[ - "total"] <= expected_value_per_output_block + threshold: + if expected_value_per_output_block - \ + threshold <= tmp_dict["total"] <= expected_value_per_output_block + threshold: tmp_dict["criterion_satisfied"] = True else: tmp_dict["criterion_satisfied"] = False - dict_largest_round_criterion_not_satisfied[index_input_diff] = tmp_dict["round"] - tmp_dict["output_component_id"] = dict_intermediate_output_names[intermediate_output_name][2][nb_occurence] - if tmp_dict["round"] not in all_output_vectors: - all_output_vectors[tmp_dict["round"]] = [] - all_output_vectors[tmp_dict["round"]].append(tmp_dict["vector"]) - output_vectors.append(tmp_dict) - - output_dict = { - "input_difference_value": hex(1 << index_input_diff), - "vectors": [vector["vector"] for vector in output_vectors], - "total": [vector["total"] for vector in output_vectors], - "satisfied_criterion": [vector["criterion_satisfied"] for vector in output_vectors], - "component_ids": [vector["output_component_id"] for vector in output_vectors] - } - - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(output_dict) - - return all_output_vectors, dict_largest_round_criterion_not_satisfied - - -def calculate_average_difference(all_output_vectors, criterion_name, dict_parameters, dict_test_results, input_name, - intermediate_output_name): - dict_for_average_diff = {"input_difference_value": 'average'} - output_vectors = [] - for current_round in all_output_vectors.keys(): - tmp_dict = {} - average_vector = [ - sum(vec) / - dict_test_results["input_parameters"][(f'{intermediate_output_name}' - f'_{criterion_name}_input_bit_size')] for vec in zip(* all_output_vectors[current_round])] - tmp_dict["vector"] = average_vector - tmp_dict["total"] = sum(tmp_dict["vector"]) - expected_value_per_output_block = dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_output_block'] - threshold = dict_parameters[criterion_name][2] - if expected_value_per_output_block - \ - threshold <= tmp_dict["total"] <= expected_value_per_output_block + threshold: - tmp_dict["criterion_satisfied"] = True - else: - tmp_dict["criterion_satisfied"] = False - tmp_dict["round"] = current_round - tmp_dict["output_component_id"] = "None" - output_vectors.append(tmp_dict["vector"]) - dict_for_average_diff["vectors"] = output_vectors - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(dict_for_average_diff) - - -def calculate_worst_input_differences(cipher, criterion_name, largest_round_criterion_not_satisfied, - dict_test_results, input_name, intermediate_output_name): - max_round_criterion_not_satisfied = max( - largest_round_criterion_not_satisfied.values(), default=cipher.number_of_rounds) - worst_input_diffs = [input_diff for input_diff, specific_round in - largest_round_criterion_not_satisfied.items() - if specific_round == max_round_criterion_not_satisfied] - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(worst_input_diffs) - - -def avalanche_probability_vectors(cipher, nb_samples): - - intermediate_output_names = {} - for component in cipher.get_all_components(): - if is_output(component): - if component.description[0] not in list(intermediate_output_names.keys()): - intermediate_output_names[component.description[0]] = [0, component.output_bit_size] - intermediate_output_names[component.description[0]][0] += 1 - - # Structure of all_avalanche_probability_vectors: - # Example : - # all_avalanche_probability_vectors['key']['round_output'][i] = [apv_round_0,apv_round_1, ... , apv_round_(n-1)] - # where the diff has been injected in position i - all_avalanche_probability_vectors = {} - for cipher_input in cipher.inputs: - all_avalanche_probability_vectors[cipher_input] = {} - for intermediate_output_name in list(intermediate_output_names.keys()): - all_avalanche_probability_vectors[cipher_input][intermediate_output_name] = [] - - inputs = generate_random_inputs(cipher, nb_samples) - evaluated_inputs = evaluator.evaluate_vectorized(cipher, inputs, intermediate_outputs=True, verbosity=False) - input_bits_to_analyse = cipher.get_all_inputs_bit_positions() - for index_of_specific_input, specific_input in enumerate(cipher.inputs): # where the diff is injected - for input_diff in input_bits_to_analyse[specific_input]: - intermediate_avalanche_probability_vectors = generate_avalanche_probability_vectors( - cipher, intermediate_output_names, inputs, evaluated_inputs, input_diff, index_of_specific_input) + tmp_dict["round"] = current_round + tmp_dict["output_component_id"] = "None" + output_vectors.append(tmp_dict["vector"]) + dict_for_average_diff["vectors"] = output_vectors + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(dict_for_average_diff) + + + def calculate_worst_input_differences(self, criterion_name, largest_round_criterion_not_satisfied, + dict_test_results, input_name, intermediate_output_name): + max_round_criterion_not_satisfied = max( + largest_round_criterion_not_satisfied.values(), default=self.cipher.number_of_rounds) + worst_input_diffs = [input_diff for input_diff, specific_round in + largest_round_criterion_not_satisfied.items() + if specific_round == max_round_criterion_not_satisfied] + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(worst_input_diffs) + + def avalanche_probability_vectors(self, nb_samples): + """ + Return the avalanche probability vectors of each input bit difference for each round. + + The inputs considered are plaintext, key, etc. + + The i-th component of the vector is the probability that i-th bit of the output + flips due to the input bit difference. + + .. NOTE:: + + apvs["key"]["round_output"][position][index_occurrence] = vector of round_output size with input diff + injected in key + + INPUT: + + - ``nb_samples`` -- **integer**; used to compute the estimated probability of flipping + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: speck = speck(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest + sage: test = AvalancheTest(speck) + sage: apvs = test.avalanche_probability_vectors(100) + sage: apvs["key"]["round_output"][31][0] + """ + + intermediate_output_names = {} + for component in self.cipher.get_all_components(): + if self.is_output(component): + if component.description[0] not in list(intermediate_output_names.keys()): + intermediate_output_names[component.description[0]] = [0, component.output_bit_size] + intermediate_output_names[component.description[0]][0] += 1 + + # Structure of all_avalanche_probability_vectors: + # Example : + # all_avalanche_probability_vectors['key']['round_output'][i] = [apv_round_0,apv_round_1, ... , apv_round_(n-1)] + # where the diff has been injected in position i + all_avalanche_probability_vectors = {} + for cipher_input in self.cipher.inputs: + all_avalanche_probability_vectors[cipher_input] = {} for intermediate_output_name in list(intermediate_output_names.keys()): - all_avalanche_probability_vectors[specific_input][intermediate_output_name].append( - intermediate_avalanche_probability_vectors[intermediate_output_name]) - - return all_avalanche_probability_vectors - - -def generate_random_inputs(cipher, nb_samples): - inputs = [] - for i in range(len(cipher.inputs)): - inputs.append(np.random.randint(256, - size=(math.ceil(cipher.inputs_bit_size[i] / 8), nb_samples), - dtype=np.uint8)) - - return inputs - - -def generate_avalanche_probability_vectors(cipher, dict_intermediate_output_names, inputs, - evaluated_inputs, input_diff, index_of_specific_input): - inputs_prime = generate_inputs_prime(cipher, index_of_specific_input, input_diff, inputs) - evaluated_inputs_prime = evaluator.evaluate_vectorized(cipher, inputs_prime, - intermediate_outputs=True, verbosity=False) - intermediate_avalanche_probability_vectors = {} - for intermediate_output_name in list(dict_intermediate_output_names.keys()): - intermediate_avalanche_probability_vectors[intermediate_output_name] = \ - [[0] * dict_intermediate_output_names[intermediate_output_name][1] for _ in range( - dict_intermediate_output_names[intermediate_output_name][0])] - state = evaluated_inputs[intermediate_output_name] - state_prime = evaluated_inputs_prime[intermediate_output_name] - for occurence_index in range(dict_intermediate_output_names[intermediate_output_name][0]): - c_diff = state[occurence_index] ^ state_prime[occurence_index] - for position in list(range(dict_intermediate_output_names[intermediate_output_name][1])): - temporary_position = np.average((c_diff[:, position // 8] >> (7 - position % 8)) & 1) - intermediate_avalanche_probability_vectors[intermediate_output_name][occurence_index][position] = \ - temporary_position - - return intermediate_avalanche_probability_vectors - - -def generate_inputs_prime(cipher, index_of_specific_input, input_diff, inputs): - inputs_prime = [] - for input_index in range(len(cipher.inputs)): - if input_index == index_of_specific_input: - diff = (1 << (cipher.inputs_bit_size[input_index] - 1 - input_diff)) - diff_vectorized = np.array( - np.frombuffer(int.to_bytes(diff, math.ceil(cipher.inputs_bit_size[input_index] / 8), byteorder='big'), - dtype=np.uint8)).reshape((-1, 1)) - inputs_prime.append(inputs[input_index] ^ diff_vectorized) - else: - inputs_prime.append(inputs[input_index]) - - return inputs_prime - - -def compute_criterion_from_avalanche_probability_vectors(cipher, all_avalanche_probability_vectors, - avalanche_dependence_uniform_bias): - intermediate_output_names = add_intermediate_output_rounds_id_to_dictionary(cipher) - criterion = {} - for input_tag in all_avalanche_probability_vectors.keys(): - criterion[input_tag] = {} - for output_tag in all_avalanche_probability_vectors[input_tag].keys(): - criterion[input_tag][output_tag] = {} - for input_diff in range(len(all_avalanche_probability_vectors[input_tag][output_tag])): - criterion[input_tag][output_tag][input_diff] = {} - for number_of_occurrence in range( - len(all_avalanche_probability_vectors[input_tag][output_tag][input_diff])): - criterion[input_tag][output_tag][input_diff][number_of_occurrence] = {} - criterion[input_tag][output_tag][input_diff][number_of_occurrence]["round"] = \ - intermediate_output_names[output_tag][1][number_of_occurrence] - vector = all_avalanche_probability_vectors[input_tag][output_tag][input_diff][number_of_occurrence] - set_vector_dependence(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - set_vector_dependence_uniform(avalanche_dependence_uniform_bias, criterion, input_diff, - input_tag, number_of_occurrence, output_tag, vector) - set_vector_weight(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - set_vector_entropy(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - - return criterion - - -def set_vector_entropy(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): - vector_entropy = [round((-proba * log(proba, 2)) - (1 - proba) * - log(1 - proba, 2), 5) if proba not in [0, 1] else 0 for proba in vector] - criterion[input_tag][output_tag][input_diff][number_of_occurrence][ - "avalanche_entropy_vectors"] = vector_entropy - - -def set_vector_weight(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): - criterion[input_tag][output_tag][input_diff][number_of_occurrence]["avalanche_weight_vectors"] = vector - - -def set_vector_dependence_uniform(avalanche_dependence_uniform_bias, criterion, input_diff, - input_tag, number_of_occurrence, output_tag, vector): - bias = avalanche_dependence_uniform_bias - vector_dependence_uniform = [1 if 1 / 2 - bias <= proba <= 1 / 2 + bias else 0 for proba in vector] - criterion[input_tag][output_tag][input_diff][number_of_occurrence][ - "avalanche_dependence_uniform_vectors"] = vector_dependence_uniform - - -def set_vector_dependence(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): - vector_dependence = [1 if proba != 0 else 0 for proba in vector] - criterion[input_tag][output_tag][input_diff][number_of_occurrence][ - "avalanche_dependence_vectors"] = vector_dependence - - -def add_intermediate_output_rounds_id_to_dictionary(cipher): - dict_intermediate_output_names = {} - for cipher_round in cipher.rounds_as_list: - for component in cipher_round.components: - if is_output(component): - if component.description[0] not in list(dict_intermediate_output_names.keys()): - number_of_occurrences = 0 - rounds_id = [] - dict_intermediate_output_names[component.description[0]] = [number_of_occurrences, rounds_id] - number_of_occurrences_position = 0 - dict_intermediate_output_names[component.description[0]][number_of_occurrences_position] += 1 - rounds_id_position = 1 - dict_intermediate_output_names[component.description[0]][rounds_id_position].append(cipher_round.id) - - return dict_intermediate_output_names - - -def get_average_criteria_by_round_input_output(diffusion_tests_results, round_i, input_tag, output_tag): - output_tag_dict = diffusion_tests_results['test_results'][input_tag][output_tag] - avalanche_criterion = \ - output_tag_dict['avalanche_dependence_vectors']['differences'][-1]['output_vectors'][round_i] - weight_criterion = \ - output_tag_dict['avalanche_weight_vectors']['differences'][-1]['output_vectors'][round_i] - entropy_criterion = \ - output_tag_dict['avalanche_entropy_vectors']['differences'][-1]['output_vectors'][round_i] - - return avalanche_criterion, weight_criterion, entropy_criterion - - -def get_average_criteria_list_by_output_tag(diffusion_tests_results, output_tag): - first_input_tag = list(diffusion_tests_results['test_results'].keys())[0] - test_results_by_output_tag = diffusion_tests_results['test_results'][first_input_tag][output_tag] - vectors_size = len( - test_results_by_output_tag['avalanche_dependence_vectors']['differences'][-1]['output_vectors'] - ) - property_values_array = [] - for round_i in range(vectors_size): - property_values = {} - for input_tag in diffusion_tests_results['test_results'].keys(): - diffusion_tests_criteria = list(get_average_criteria_by_round_input_output( - diffusion_tests_results, round_i, input_tag, output_tag - )) - avalanche_criterion = diffusion_tests_criteria[0] - weight_criterion = diffusion_tests_criteria[1] - entropy_criterion = diffusion_tests_criteria[2] - property_values_temp = { - 'tag': output_tag, - f'dependence {input_tag}': avalanche_criterion['total'], - f'weight {input_tag}': weight_criterion['total'], - f'entropy {input_tag}': entropy_criterion['total'], - } - property_values = {**property_values, **property_values_temp} - property_values_array.append( - {**{f'round {input_tag}': avalanche_criterion['round']}, **property_values} - ) - - return property_values_array - - -def generate_heatmap_graphs_for_avalanche_tests(cipher, avalanche_results, - difference_positions=None, criterion_names=None): - intermediate_output_names = get_intermediate_output_names(cipher) - - default_criteria = ["avalanche_dependence_vectors", "avalanche_dependence_uniform_vectors", - "avalanche_entropy_vectors", "avalanche_weight_vectors"] - criteria = criterion_names if criterion_names else default_criteria - - step_divider = 2 - modulo_divider = 4 - if cipher.inputs_bit_size[0] >= 128: - step_divider = 8 - modulo_divider = 16 - elif cipher.inputs_bit_size[0] <= 16: - step_divider = 1 - modulo_divider = 1 - step = int(cipher.inputs_bit_size[0] / step_divider) - modulo = int(cipher.inputs_bit_size[0] / modulo_divider) - - code = ["\\documentclass[12pt]{article}", "\\usepackage{tikz}", "\\usepackage{collcell}", "\\usepackage{diagbox}", - "\\usepackage{rotating}", "\\usepackage{graphicx}", "\\usepackage{eqparbox} ", - "\\usepackage[margin=0.5in]{geometry}\n", "\\renewcommand{\\arraystretch}{0}", - "\\setlength{\\fboxsep}{2mm} % box size", "\\setlength{\\tabcolsep}{3pt}\n", - "\\newcommand*{\\MinNumberEntropy}{0}", "\\newcommand*{\\MidNumberEntropy}{0.99}", - "\\newcommand*{\\MaxNumberEntropy}{1}", "\\newcommand{\\ApplyGradientEntropy}[1]{", - "\t\\ifdim #1 pt > \\MidNumberEntropy pt", - "\t\t\\pgfmathsetmacro{\\PercentColor}{max(min(100.0*(#1 - \\MidNumberEntropy)/(\\MaxNumberEntropy-" - "\\MidNumberEntropy),100.0),0.00)}", - "\t\t\\hspace{-0.3em}\\colorbox{green!\\PercentColor!green}{#1} % add #1 in last " - "paranthesis to print the value as well", "\t\\else", - "\t\t\\pgfmathsetmacro{\\PercentColor}{max(min(100.0*(\\MidNumberEntropy - #1)/(\\MidNumberEntropy-" - "\\MinNumberEntropy),100.0),0.00)}", - "\t\t\\hspace{-0.3em}\\colorbox{red!\\PercentColor!green}{#1} % add #1 in last paranthesis to " - "print the value as well", "\t\\fi\n}", - "\\newcolumntype{E}{>{\\collectcell\\ApplyGradientEntropy}c<{\\endcollectcell}}", - "\\newcommand*{\\MaxNumberDependance}{0.99}", "\\newcommand{\\ApplyGradientDependance}[1]{", - "\t\\ifdim#1 pt > \\MaxNumberDependance pt", "\t\t\\hspace{-0.3em}\\colorbox{green}{#1}", "\t\\else", - "\t\t\\hspace{-0.3em}\\colorbox{red}{#1}", "\t\\fi\n}", - "\\newcolumntype{D}{>{\\collectcell\\ApplyGradientDependance}c<{\\endcollectcell}}", - "\\newcommand*{\\MinNumberWeight}{0}", "\\newcommand*{\\MidNumberWeight}{0.5}", - "\\newcommand*{\\MaxNumberWeight}{1}", "\\newcommand{\\ApplyGradientWeight}[1]{", - "\t\\ifdim #1 pt > \\MidNumberWeight pt", - "\t\t\\pgfmathsetmacro{\\PercentColor}{max(min(100.0*(#1 - \\MidNumberWeight)/(\\MaxNumberWeight-" - "\\MidNumberWeight),100.0),0.00)}", - "\t\t\\hspace{-0.3em}\\colorbox{red!\\PercentColor!green}{#1} % add #1 in last paranthesis to " - "print the value as well", "\t\\else", - "\t\t\\pgfmathsetmacro{\\PercentColor}{max(min(100.0*(\\MidNumberWeight - #1)/(\\MidNumberWeight-" - "\\MinNumberWeight),100.0),0.00)}", - "\t\t\\hspace{-0.3em}\\colorbox{red!\\PercentColor!green}{#1} % add #1 in last paranthesis to " - "print the value as well", "\t\\fi\n}", - "\\newcolumntype{W}{>{\\collectcell\\ApplyGradientWeight}c<{\\endcollectcell}}", "\\begin{document}\n"] - - for criterion in criteria: - for cipher_input in cipher.inputs: - for intermediate_output in list(intermediate_output_names.keys()): - if intermediate_output == "round_output": # remove if you want to analyse the other intermediate output - generate_graph_by_differences_positions(avalanche_results, code, criterion, difference_positions, - cipher_input, intermediate_output, modulo, step) - - code.append("\\end{document}") - str_code = "\n".join(code) - return str_code - - -def get_intermediate_output_names(cipher): - dict_intermediate_output_names = {} - for component in cipher.get_all_components(): - if component.type in [INTERMEDIATE_OUTPUT, CIPHER_OUTPUT]: - dict_intermediate_output_names.setdefault(component.description[0], [component.output_bit_size, 0, []]) - dict_intermediate_output_names[component.description[0]][1] += 1 - dict_intermediate_output_names[component.description[0]][2].append(component.id) - return dict_intermediate_output_names - - -def generate_graph_by_differences_positions(avalanche_results, code, criterion, difference_positions, - input, intermediate_output, modulo, step): - worst_diffs = avalanche_results[ - "test_results"][input][intermediate_output][criterion]["worst_differences"] - differences_on_one_worst_diff = [worst_diffs[0]] + [-1] if len(worst_diffs) != 0 else [0, -1] - differences = difference_positions if difference_positions else differences_on_one_worst_diff - for diff in differences: - output_bit_size = avalanche_results["test_results"][input][intermediate_output][criterion][ - "output_bit_size"] - nb_occ = len(avalanche_results[ - "test_results"][input][intermediate_output][criterion]["differences"][diff]["output_vectors"]) - code.append("\t\\begin{table}[h!]") - code.append("\t\t\\begin{center}") - code.append("\t\t\t\\scalebox{0.34}{") - - criteria_values = {'avalanche_entropy_vectors': 'E', 'avalanche_weight_vectors': 'W'} - step_value = criteria_values.get(criterion, 'D') - - code.append("\t\t\t\\begin{tabular}{c | *{" + f'{step}' + "}{" + f"{step_value}" + "}}") - code.append("\t\t\t\t&\\multicolumn{" + f"{step}" + "}{c}{state bit position}\\\\") - code.append("\t\t\t\t\\hline") - add_multicolumns_to_graph(avalanche_results, code, criterion, diff, input, intermediate_output, modulo, nb_occ, - output_bit_size, step) - code.append("\t\t\t\\end{tabular}}") - code.append("\t\t\\end{center}") - tmp_criterion = " ".join(criterion.split("_")) - tmp_intermediate_output = " ".join(intermediate_output.split("_")) - tmp_input = " ".join(input.split("_")) - if diff != -1: - code.append( - "\t\t\\caption{" + f'{tmp_criterion} - difference injected in position {diff} of {tmp_input} - {tmp_intermediate_output} analyzed' + "}") - else: - code.append( - "\t\t\\caption{" + f'{tmp_criterion} - average values - differences injected in {tmp_input} - {tmp_intermediate_output} analyzed' + "}") - code.append("\t\\end{table}") - code.append("\n") - - -def add_multicolumns_to_graph(avalanche_results, code, criterion, diff, input, intermediate_output, modulo, nb_occ, - output_bit_size, step): - for i in range(0, output_bit_size, step): - tmp = ['&\\multicolumn{1}{c}{}' if n % modulo != 0 - else '& \\multicolumn{1}{c}{' + f'{n}' + '}' for n in range(i, i + step)] - tmp = ["\t\t\t\\\\[0.5em]\\multicolumn{1}{c|}{rounds}"] + tmp + ["\\\\[0.5em]"] - code.append(" ".join(tmp)) - float_format = "&{:0.2f}" - for occ in range(nb_occ): - vector = avalanche_results[ - "test_results"][input][intermediate_output][criterion]["differences"][ - diff]["output_vectors"][occ]["vector"] - round_index = avalanche_results[ - "test_results"][input][intermediate_output][criterion]["differences"][ - diff]["output_vectors"][occ]["round"] - s = [float_format.format(float(n)) if n != float - else float_format.format(n) for n in vector[i:i + step]] - s = [f"{round_index + 1}"] + s - code.append(" ".join(s) + "\\\\") - vector = avalanche_results[ - "test_results"][input]["cipher_output"][criterion]["differences"][ - diff]["output_vectors"][0]["vector"] - s = [float_format.format(float(n)) if n != float - else float_format.format(n) for n in vector[i:i + step]] - s = [f"{round_index + 2}"] + s - code.append(" ".join(s) + "\\\\") + all_avalanche_probability_vectors[cipher_input][intermediate_output_name] = [] + + inputs = self.generate_random_inputs(nb_samples) + evaluated_inputs = evaluator.evaluate_vectorized(self.cipher, inputs, intermediate_outputs=True, verbosity=False) + input_bits_to_analyse = self.cipher.get_all_inputs_bit_positions() + for index_of_specific_input, specific_input in enumerate(self.cipher.inputs): # where the diff is injected + for input_diff in input_bits_to_analyse[specific_input]: + intermediate_avalanche_probability_vectors = self.generate_avalanche_probability_vectors( + intermediate_output_names, inputs, evaluated_inputs, input_diff, index_of_specific_input) + for intermediate_output_name in list(intermediate_output_names.keys()): + all_avalanche_probability_vectors[specific_input][intermediate_output_name].append( + intermediate_avalanche_probability_vectors[intermediate_output_name]) + + return all_avalanche_probability_vectors + + + def generate_random_inputs(self, nb_samples): + inputs = [] + for i in range(len(self.cipher.inputs)): + inputs.append(np.random.randint(256, + size=(math.ceil(self.cipher.inputs_bit_size[i] / 8), nb_samples), + dtype=np.uint8)) + + return inputs + + + def generate_avalanche_probability_vectors(self, dict_intermediate_output_names, inputs, + evaluated_inputs, input_diff, index_of_specific_input): + inputs_prime = self.generate_inputs_prime(index_of_specific_input, input_diff, inputs) + evaluated_inputs_prime = evaluator.evaluate_vectorized(self.cipher, inputs_prime, + intermediate_outputs=True, verbosity=False) + intermediate_avalanche_probability_vectors = {} + for intermediate_output_name in list(dict_intermediate_output_names.keys()): + intermediate_avalanche_probability_vectors[intermediate_output_name] = \ + [[0] * dict_intermediate_output_names[intermediate_output_name][1] for _ in range( + dict_intermediate_output_names[intermediate_output_name][0])] + state = evaluated_inputs[intermediate_output_name] + state_prime = evaluated_inputs_prime[intermediate_output_name] + for occurence_index in range(dict_intermediate_output_names[intermediate_output_name][0]): + c_diff = state[occurence_index] ^ state_prime[occurence_index] + for position in list(range(dict_intermediate_output_names[intermediate_output_name][1])): + temporary_position = np.average((c_diff[:, position // 8] >> (7 - position % 8)) & 1) + intermediate_avalanche_probability_vectors[intermediate_output_name][occurence_index][position] = \ + temporary_position + + return intermediate_avalanche_probability_vectors + + + def generate_inputs_prime(self, index_of_specific_input, input_diff, inputs): + inputs_prime = [] + for input_index in range(len(self.cipher.inputs)): + if input_index == index_of_specific_input: + diff = (1 << (self.cipher.inputs_bit_size[input_index] - 1 - input_diff)) + diff_vectorized = np.array( + np.frombuffer(int.to_bytes(diff, math.ceil(self.cipher.inputs_bit_size[input_index] / 8), byteorder='big'), + dtype=np.uint8)).reshape((-1, 1)) + inputs_prime.append(inputs[input_index] ^ diff_vectorized) + else: + inputs_prime.append(inputs[input_index]) + + return inputs_prime + + + def compute_criterion_from_avalanche_probability_vectors(self, all_avalanche_probability_vectors, + avalanche_dependence_uniform_bias): + r""" + Return a python dictionary that contains the dictionaries corresponding to each criterion. + + ALGORITHM: + + The avalanche dependence is the number of output bit that flip with respect to an input bit difference, + for a given round. + If the worst avalanche dependence for a certain round is close to the output bit size with respect to a certain + threshold, we say that the cipher satisfies the avalanche dependence criterion for this round. + + The avalanche dependence uniform is the number of output bit that flip with a probability + $\in \left[\frac{1}{2} - \text{bias}; \frac{1}{2} + \text{bias}\right]$, + with respect to an input bit difference, for a given round. If the worst avalanche dependence uniform for a + certain round is close to the output bit size with respect to a certain threshold, + we say that the cipher satisfies the avalanche dependence uniform criterion for this round. + + The avalanche weight is the expected Hamming weight of the output difference with respect to an input bit + difference, for a given round. + If the avalanche weights of all the input bit differences for a certain round is close to half of + the output bit size with respect to a certain threshold, we say that the cipher satisfies the + avalanche criterion for this round. + + The avalanche entropy is defined as uncertainty about whether output bits flip with respect to an input + bit difference, for a given round. + If the strict avalanche entropy of all the input bit differences for a certain round is close to + the output bit size with respect to a certain threshold, we say that the cipher satisfies the + strict avalanche criterion for this round. + + .. NOTE:: + + d["key"]["round_output"][position][index_occurrence]["avalanche_dependence"] = vector of round_output size + with input diff injected in key + + INPUT: + + - ``all_apvs`` -- **dictionary**; all avalanche probability vectors returned by avalanche_probability_vectors() + - ``avalanche_dependence_uniform_bias`` -- **float**; define the range where the probability of flipping should be + + .. SEEALSO:: + + :py:meth:`~avalanche_probability_vectors` for the returning vectors. + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest + sage: test = AvalancheTest(speck) + sage: apvs = test.avalanche_probability_vectors(100) + sage: d = test.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) + """ + intermediate_output_names = self.add_intermediate_output_rounds_id_to_dictionary() + criterion = {} + for input_tag in all_avalanche_probability_vectors.keys(): + criterion[input_tag] = {} + for output_tag in all_avalanche_probability_vectors[input_tag].keys(): + criterion[input_tag][output_tag] = {} + for input_diff in range(len(all_avalanche_probability_vectors[input_tag][output_tag])): + criterion[input_tag][output_tag][input_diff] = {} + for number_of_occurrence in range( + len(all_avalanche_probability_vectors[input_tag][output_tag][input_diff])): + criterion[input_tag][output_tag][input_diff][number_of_occurrence] = {} + criterion[input_tag][output_tag][input_diff][number_of_occurrence]["round"] = \ + intermediate_output_names[output_tag][1][number_of_occurrence] + vector = all_avalanche_probability_vectors[input_tag][output_tag][input_diff][number_of_occurrence] + self.set_vector_dependence(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + self.set_vector_dependence_uniform(avalanche_dependence_uniform_bias, criterion, input_diff, + input_tag, number_of_occurrence, output_tag, vector) + self.set_vector_weight(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + self.set_vector_entropy(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + + return criterion + + + def set_vector_entropy(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + vector_entropy = [round((-proba * log(proba, 2)) - (1 - proba) * + log(1 - proba, 2), 5) if proba not in [0, 1] else 0 for proba in vector] + criterion[input_tag][output_tag][input_diff][number_of_occurrence][ + "avalanche_entropy_vectors"] = vector_entropy + + + def set_vector_weight(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + criterion[input_tag][output_tag][input_diff][number_of_occurrence]["avalanche_weight_vectors"] = vector + + + def set_vector_dependence_uniform(self, avalanche_dependence_uniform_bias, criterion, input_diff, + input_tag, number_of_occurrence, output_tag, vector): + bias = avalanche_dependence_uniform_bias + vector_dependence_uniform = [1 if 1 / 2 - bias <= proba <= 1 / 2 + bias else 0 for proba in vector] + criterion[input_tag][output_tag][input_diff][number_of_occurrence][ + "avalanche_dependence_uniform_vectors"] = vector_dependence_uniform + + + def set_vector_dependence(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + vector_dependence = [1 if proba != 0 else 0 for proba in vector] + criterion[input_tag][output_tag][input_diff][number_of_occurrence][ + "avalanche_dependence_vectors"] = vector_dependence + + def add_intermediate_output_rounds_id_to_dictionary(self): + dict_intermediate_output_names = {} + for cipher_round in self.cipher.rounds_as_list: + for component in cipher_round.components: + if self.is_output(component): + if component.description[0] not in list(dict_intermediate_output_names.keys()): + number_of_occurrences = 0 + rounds_id = [] + dict_intermediate_output_names[component.description[0]] = [number_of_occurrences, rounds_id] + number_of_occurrences_position = 0 + dict_intermediate_output_names[component.description[0]][number_of_occurrences_position] += 1 + rounds_id_position = 1 + dict_intermediate_output_names[component.description[0]][rounds_id_position].append(cipher_round.id) + + return dict_intermediate_output_names From e029ac8117c7c7f4e5e2bc14b09619bc91a16054 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Wed, 21 Feb 2024 16:58:18 +0400 Subject: [PATCH 074/179] fixing pytests --- .../cipher_modules/avalanche_tests_test.py | 36 +++++++++++++++++++ tests/unit/cipher_modules/report_test.py | 5 +-- tests/unit/cipher_test.py | 34 ------------------ 3 files changed, 39 insertions(+), 36 deletions(-) create mode 100644 tests/unit/cipher_modules/avalanche_tests_test.py diff --git a/tests/unit/cipher_modules/avalanche_tests_test.py b/tests/unit/cipher_modules/avalanche_tests_test.py new file mode 100644 index 00000000..7862054b --- /dev/null +++ b/tests/unit/cipher_modules/avalanche_tests_test.py @@ -0,0 +1,36 @@ +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher +from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher +from claasp.ciphers.permutations.ascon_permutation import AsconPermutation +from claasp.ciphers.permutations.keccak_permutation import KeccakPermutation +from claasp.cipher_modules.avalanche_tests import AvalancheTests + +def test_avalanche_probability_vectors(): + speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + apvs = AvalancheTests(speck).avalanche_probability_vectors(100) + assert apvs["key"]["round_output"][31][0] == [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 1.0] + + +def test_compute_criterion_from_avalanche_probability_vectors(): + speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + apvs = AvalancheTests(speck).avalanche_probability_vectors(100) + d = AvalancheTests(speck).compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) + assert d["key"]["round_output"][0][0]["avalanche_dependence_vectors"] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0] + +def test_diffusion_tests(): + speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + d = AvalancheTests(speck).avalanche_tests(number_of_samples=100) + assert d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + + aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=4) + d = AvalancheTests(aes).avalanche_tests(number_of_samples=1000) + assert d["input_parameters"]["round_key_output_avalanche_dependence_vectors_input_bit_size"] == 128 + + ascon = AsconPermutation(number_of_rounds=5) + d = AvalancheTests(ascon).avalanche_tests(number_of_samples=1000) + assert d["input_parameters"]["cipher_output_avalanche_weight_vectors_input_bit_size"] == 320 + + keccak = KeccakPermutation(number_of_rounds=5, word_size=8) + d = AvalancheTests(keccak).avalanche_tests(number_of_samples=1000) + assert d["input_parameters"]["round_output_avalanche_dependence_uniform_vectors_input_bit_size"] == 200 \ No newline at end of file diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index a9b1a4e1..1cbda73e 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -8,6 +8,7 @@ from claasp.cipher_modules.report import Report from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests +from claasp.cipher_modules.avalanche_tests import AvalancheTests def test_print_report(): @@ -27,7 +28,7 @@ def test_print_report(): trail_report = Report(speck, trail) trail_report.print_report() - avalanche_results = speck.diffusion_tests() + avalanche_results = AvalancheTests(speck).avalanche_tests() avalanche_report = Report(speck, avalanche_results) avalanche_report.print_report() @@ -64,7 +65,7 @@ def test_save_as_latex_table(): trail = smt.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - avalanche_test_results = simon.diffusion_tests() + avalanche_test_results = AvalancheTests(simon).avalanche_tests() avalanche_report = Report(simon, avalanche_test_results) avalanche_report.save_as_latex_table() diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..311680b7 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -89,13 +89,6 @@ def test_analyze_cipher(): assert analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] -def test_avalanche_probability_vectors(): - speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - apvs = speck.avalanche_probability_vectors(100) - assert apvs["key"]["round_output"][31][0] == [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, - 0.0, 1.0] - - @pytest.mark.filterwarnings("ignore::DeprecationWarning:") def test_component_analysis(): fancy = FancyBlockCipher(number_of_rounds=2) @@ -126,15 +119,6 @@ def test_print_component_analysis_as_radar_charts(): fig = aes.print_component_analysis_as_radar_charts(result) assert str(type(fig)) == "" - -def test_compute_criterion_from_avalanche_probability_vectors(): - speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - apvs = speck.avalanche_probability_vectors(100) - d = speck.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) - assert d["key"]["round_output"][0][0]["avalanche_dependence_vectors"] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0] - - def test_continuous_avalanche_factor(): aes = AESBlockCipher(number_of_rounds=5) result = aes.continuous_avalanche_factor(0.001, 300) @@ -173,24 +157,6 @@ def test_delete_generated_evaluate_c_shared_library(): assert os.path.exists(BIT_BASED_C_FUNCTIONS_O_FILE) is False -def test_diffusion_tests(): - speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - d = speck.diffusion_tests(number_of_samples=100) - assert d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - - aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=4) - d = aes.diffusion_tests(number_of_samples=1000) - assert d["input_parameters"]["round_key_output_avalanche_dependence_vectors_input_bit_size"] == 128 - - ascon = AsconPermutation(number_of_rounds=5) - d = ascon.diffusion_tests(number_of_samples=1000) - assert d["input_parameters"]["cipher_output_avalanche_weight_vectors_input_bit_size"] == 320 - - keccak = KeccakPermutation(number_of_rounds=5, word_size=8) - d = keccak.diffusion_tests(number_of_samples=1000) - assert d["input_parameters"]["round_output_avalanche_dependence_uniform_vectors_input_bit_size"] == 200 - - def test_evaluate_using_c(): assert FancyBlockCipher(number_of_rounds=2).evaluate_using_c([0x012345, 0x89ABCD], True) == { 'round_key_output': [3502917, 73728], From f5b004d91bfc1acb974d1bcf453d6a91d54602b5 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Wed, 21 Feb 2024 17:38:38 +0400 Subject: [PATCH 075/179] fixing pytests --- claasp/cipher_modules/avalanche_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index 727ba6ca..c94ff1d2 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -115,8 +115,8 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias diffusion_tests, input_name, intermediate_output_name) self.calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, input_name, intermediate_output_name) - self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, - diffusion_tests, input_name, intermediate_output_name) + # self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, + # diffusion_tests, input_name, intermediate_output_name) return diffusion_tests From 2424a70c49db2f5316d57da60fbd9ebcaf562667 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Wed, 21 Feb 2024 18:49:59 +0400 Subject: [PATCH 076/179] FIX/refactored neural network tests to a class --- claasp/cipher.py | 67 +- claasp/cipher_modules/neural_network_tests.py | 1154 ++++++++--------- tests/unit/cipher_test.py | 25 +- 3 files changed, 601 insertions(+), 645 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 0e9d0caa..f144d4f2 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1,16 +1,16 @@ # **************************************************************************** # Copyright 2023 Technology Innovation Institute -# +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # **************************************************************************** @@ -32,6 +32,7 @@ component_analysis_tests, avalanche_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * +from claasp.cipher_modules.neural_network_tests import NeuralNetworkDistinguisher tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -1255,8 +1256,8 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio sage: cipher = SpeckBlockCipher() sage: diff, scores, highest_round = find_good_input_difference_for_neural_distinguisher(cipher, [True, False], verbose = False, number_of_generations=5) """ - from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher - return find_good_input_difference_for_neural_distinguisher(self, + # from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher + return NeuralNetworkDistinguisher(self).find_good_input_difference_for_neural_distinguisher( difference_positions, initial_population, number_of_generations, @@ -1267,17 +1268,17 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, testing_samples=10 ** 6, epochs=5, pipeline=True): """ - Trains a neural distinguisher for the data generated by the data_generator function, using the provided neural network, at round starting_rounds. + Trains a neural distinguisher for the data generated by the data_generator function, using the provided neural network, at round starting_rounds. If pipeline is set to True, retrains the distinguisher for one more round, as long as the validation accuracy remains significant. INPUT: - - ``data_generator`` -- **function**; A dataset generation function, taking as input a cipher (usually self), a number of rounds, - and a number of samples, an returns a dataset X, Y, where X is a numpy matrix with one row per sample, and Y is a label veector. - To reproduce classical neural distinguisher results, on would use the example below. + - ``data_generator`` -- **function**; A dataset generation function, taking as input a cipher (usually self), a number of rounds, + and a number of samples, an returns a dataset X, Y, where X is a numpy matrix with one row per sample, and Y is a label veector. + To reproduce classical neural distinguisher results, on would use the example below. - ``starting_round`` -- **integer**; number of rounds to analyze - ``neural_network`` -- **(compiled) keras model** (default: `None`); the neural network to use for distinguishing, either a custom one or one - returned by the get_neural_network function of neural_network_tests. + returned by the get_neural_network function of neural_network_tests. - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing - ``pipeline`` -- **boolean**; (default: `True`) If False, only trains for starting_round. If True, increments starting_round and retrain @@ -1294,12 +1295,12 @@ def train_neural_distinguisher(self, data_generator, starting_round, neural_netw sage: cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network) """ if pipeline: - from claasp.cipher_modules.neural_network_tests import neural_staged_training - acc = neural_staged_training(self, data_generator, starting_round, neural_network, training_samples, + # from claasp.cipher_modules.neural_network_tests import neural_staged_training + acc = NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, starting_round, neural_network, training_samples, testing_samples, epochs) else: - from claasp.cipher_modules.neural_network_tests import train_neural_distinguisher - acc = train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples, + # from claasp.cipher_modules.neural_network_tests import train_neural_distinguisher + acc = NeuralNetworkDistinguisher(self).train_neural_distinguisher(data_generator, starting_round, neural_network, training_samples, testing_samples, epochs) return acc @@ -1333,14 +1334,14 @@ def train_gohr_neural_distinguisher(self, input_difference, number_of_rounds, de """ def data_generator(nr, samples): - return get_differential_dataset(self, input_difference, number_of_rounds=nr, + return NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples) - from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ - train_neural_distinguisher, get_neural_network + # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ + # train_neural_distinguisher, get_neural_network input_size = self.output_bit_size * 2 - neural_network = get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) - return train_neural_distinguisher(self, data_generator, number_of_rounds, neural_network, training_samples, + neural_network = NeuralNetworkDistinguisher(self).get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) + return NeuralNetworkDistinguisher(self).train_neural_distinguisher(data_generator, number_of_rounds, neural_network, training_samples, testing_samples, num_epochs=number_of_epochs) def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, @@ -1373,11 +1374,11 @@ def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** sage: cipher = SpeckBlockCipher() sage: cipher.run_autond_pipeline() """ - from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network, \ - int_difference_to_input_differences, neural_staged_training + # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network, \ + # int_difference_to_input_differences, neural_staged_training def data_generator(nr, samples): - return get_differential_dataset(self, input_difference, number_of_rounds=nr, + return NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples) if difference_positions is None: @@ -1394,12 +1395,12 @@ def data_generator(nr, samples): number_of_generations=optimizer_generations, nb_samples=optimizer_samples, verbose=verbose) - input_difference = int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) + input_difference = NeuralNetworkDistinguisher(self).int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) input_size = self.output_bit_size * 2 - neural_network = get_neural_network(neural_net, input_size = input_size) + neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return neural_staged_training(self, lambda nr, samples: get_differential_dataset(self, input_difference, number_of_rounds=nr, + return NeuralNetworkDistinguisher(self).neural_staged_training(lambda nr, samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples), nr, neural_network, training_samples, testing_samples, number_of_epochs, save_prefix) @@ -1798,9 +1799,9 @@ def neural_network_blackbox_distinguisher_tests( sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck sage: #speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random """ - from claasp.cipher_modules.neural_network_tests import neural_network_blackbox_distinguisher_tests - return neural_network_blackbox_distinguisher_tests( - self, nb_samples, hidden_layers, number_of_epochs) + # from claasp.cipher_modules.neural_network_tests import neural_network_blackbox_distinguisher_tests + return NeuralNetworkDistinguisher(self).neural_network_blackbox_distinguisher_tests( + nb_samples, hidden_layers, number_of_epochs) def neural_network_differential_distinguisher_tests( self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[0x01]): @@ -1820,9 +1821,9 @@ def neural_network_differential_distinguisher_tests( sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck sage: #speck(number_of_rounds=22).neural_network_differential_distinguisher_tests(nb_samples = 10) # random """ - from claasp.cipher_modules.neural_network_tests import neural_network_differential_distinguisher_tests - return neural_network_differential_distinguisher_tests( - self, nb_samples, hidden_layers, number_of_epochs, diff) + # from claasp.cipher_modules.neural_network_tests import neural_network_differential_distinguisher_tests + return NeuralNetworkDistinguisher(self).neural_network_differential_distinguisher_tests( + nb_samples, hidden_layers, number_of_epochs, diff) def print(self): """ @@ -2391,6 +2392,4 @@ def get_descendants_subgraph(G, start_nodes): def update_input_id_links_from_component_id(self, component_id, new_input_id_links): round_number = self.get_round_from_component_id(component_id) - self._rounds.rounds[round_number].update_input_id_links_from_component_id(component_id, new_input_id_links) - - + self._rounds.rounds[round_number].update_input_id_links_from_component_id(component_id, new_input_id_links) \ No newline at end of file diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index e6294441..80fec08b 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -1,608 +1,576 @@ -# **************************************************************************** -# Copyright 2023 Technology Innovation Institute -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# **************************************************************************** - - import os import secrets import random import numpy as np - from math import sqrt from claasp.cipher_modules import evaluator from keras.callbacks import ModelCheckpoint +import tensorflow as tf +from tensorflow.keras.models import Model +from tensorflow.keras.layers import Input, Conv1D, Dense, Dropout, Lambda, concatenate, BatchNormalization, Activation, \ + Add +from tensorflow.keras.regularizers import l2 + + +class NeuralNetworkDistinguisher: + def __init__(self, cipher): + super(NeuralNetworkDistinguisher, self).__init__() + self.cipher = cipher + + def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, + hidden_layers=[32, 32, 32], number_of_epochs=10, + rounds_to_train=[]): + results = {"input_parameters": { + "test_name": "neural_network_blackbox_distinguisher_tests", + "number_of_samples": nb_samples, + "hidden_layers": hidden_layers, + "number_of_epochs": number_of_epochs}, "test_results": {}} + + input_tags = self.cipher.inputs + test_name = "neural_network_blackbox_distinguisher" + for index, input_tag in enumerate(input_tags): + partial_result = {} + results["test_results"][input_tag] = {} + + labels = np.frombuffer(os.urandom(nb_samples), dtype=np.uint8) + labels = labels & 1 + + base_inputs = [secrets.randbits(i) for i in self.cipher.inputs_bit_size] + base_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] + + partial_result, ds, component_output_ids = self.create_structure(base_output, test_name, partial_result) + self.update_component_output_ids(component_output_ids) + self.update_blackbox_distinguisher_vectorized_tests_ds(base_inputs, base_output, ds, index, labels, + nb_samples) + self.update_partial_result(component_output_ids, ds, index, test_name, + labels, number_of_epochs, partial_result, 0, blackbox=True, + rounds_to_train=rounds_to_train) + + results["test_results"][input_tag].update(partial_result) + + return results + + def update_partial_result(self, component_output_ids, ds, index, test_name, labels, number_of_epochs, + partial_result, diff, blackbox=True, rounds_to_train=[]): + # noinspection PyUnresolvedReferences + input_lengths = self.cipher.inputs_bit_size + + if rounds_to_train: + assert all([r < self.cipher.number_of_rounds for r in + rounds_to_train]), "Rounds to train don't match the number of rounds of the cipher" + + for k in ds: + + tmp_dict = { + 'accuracies': [], + 'component_ids': [] + } + for i in range(len(ds[k][1])): + + if rounds_to_train and self.cipher.get_round_from_component_id( + component_output_ids[k][i]) not in rounds_to_train: + continue + m = self.make_resnet(input_lengths[index] + ds[k][0] if blackbox else 2 * ds[k][0]) + m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) + history = m.fit(np.array(ds[k][1][i]), labels, validation_split=0.1, shuffle=1, verbose=0) if blackbox \ + else m.fit(np.array(ds[k][1][i]), labels, epochs=number_of_epochs, + validation_split=0.1, shuffle=1, verbose=0) + + tmp_dict["accuracies"].append(history.history['val_binary_accuracy'][-1]) + tmp_dict["component_ids"].append(component_output_ids[k][i]) + + if blackbox == False: + tmp_dict["input_difference_value"] = hex(diff) + partial_result[k][test_name].append(tmp_dict) + + def update_blackbox_distinguisher_vectorized_tests_ds(self, base_inputs, base_output, ds, index, labels, + nb_samples): + input_lengths = self.cipher.inputs_bit_size + random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) + # cipher_output = base_output + + base_inputs_np = [np.broadcast_to( + np.array([b for b in x.to_bytes(input_lengths[i] // 8, byteorder='big')], dtype=np.uint8), + (nb_samples, input_lengths[i] // 8) + ).transpose().copy() for i, x in enumerate(base_inputs)] + random_inputs_for_index = np.frombuffer(os.urandom(nb_samples * input_lengths[index] // 8), + dtype=np.uint8).reshape( + nb_samples, input_lengths[index] // 8).transpose() + base_inputs_np[index] = random_inputs_for_index + base_input_index_unpacked = np.unpackbits(base_inputs_np[index].transpose(), axis=1) + + cipher_output = evaluator.evaluate_vectorized(self.cipher, base_inputs_np, intermediate_outputs=True) -def neural_network_blackbox_distinguisher_tests(cipher, nb_samples=10000, - hidden_layers=[32, 32, 32], number_of_epochs=10, rounds_to_train=[]): - results = {"input_parameters": { - "test_name": "neural_network_blackbox_distinguisher_tests", - "number_of_samples": nb_samples, - "hidden_layers": hidden_layers, - "number_of_epochs": number_of_epochs}, "test_results": {}} - - input_tags = cipher.inputs - test_name = "neural_network_blackbox_distinguisher" - for index, input_tag in enumerate(input_tags): - partial_result = {} - results["test_results"][input_tag] = {} - - labels = np.frombuffer(os.urandom(nb_samples), dtype=np.uint8) - labels = labels & 1 - - base_inputs = [secrets.randbits(i) for i in cipher.inputs_bit_size] - base_output = evaluator.evaluate(cipher, base_inputs, intermediate_output=True)[1] - - partial_result, ds, component_output_ids = create_structure(base_output, cipher, test_name, partial_result) - update_component_output_ids(cipher, component_output_ids) - update_blackbox_distinguisher_vectorized_tests_ds(base_inputs, base_output, cipher, ds, index, labels, - nb_samples) - update_partial_result(cipher, component_output_ids, ds, index, test_name, - labels, number_of_epochs, partial_result, 0, blackbox=True, - rounds_to_train=rounds_to_train) - - results["test_results"][input_tag].update(partial_result) - - return results - - -def update_partial_result(cipher, component_output_ids, ds, index, test_name, labels, number_of_epochs, - partial_result, diff, blackbox=True, rounds_to_train=[]): - # noinspection PyUnresolvedReferences - input_lengths = cipher.inputs_bit_size - - if rounds_to_train: - assert all([r < cipher.number_of_rounds for r in - rounds_to_train]), "Rounds to train don't match the number of rounds of the cipher" - - for k in ds: - - tmp_dict = { - 'accuracies': [], - 'component_ids': [] - } - for i in range(len(ds[k][1])): - - if rounds_to_train and cipher.get_round_from_component_id( - component_output_ids[k][i]) not in rounds_to_train: - continue - m = make_resnet(input_lengths[index] + ds[k][0] if blackbox else 2 * ds[k][0]) - m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) - history = m.fit(np.array(ds[k][1][i]), labels, validation_split=0.1, shuffle=1, verbose=0) if blackbox \ - else m.fit(np.array(ds[k][1][i]), labels, epochs=number_of_epochs, - validation_split=0.1, shuffle=1, verbose=0) - - tmp_dict["accuracies"].append(history.history['val_binary_accuracy'][-1]) - tmp_dict["component_ids"].append(component_output_ids[k][i]) - - if blackbox == False: - tmp_dict["input_difference_value"] = hex(diff) - partial_result[k][test_name].append(tmp_dict) - - - -def update_blackbox_distinguisher_tests_ds(base_inputs, base_output, cipher, ds, index, labels, nb_samples): - input_lengths = cipher.inputs_bit_size - iteration_base = base_output - - for i in range(nb_samples): - base_inputs[index] = secrets.randbits(input_lengths[index]) - if labels[i] == 1: - iteration_base = evaluator.evaluate(cipher, base_inputs, intermediate_output=True)[1] - for k in iteration_base: - for j in range(len(iteration_base[k])): - if labels[i] == 1: - ds[k][1][j].append(np.array( - list(map(int, list(bin(base_inputs[index])[2:].rjust(input_lengths[index], '0')))) + - list(map(int, list(bin(iteration_base[k][j])[2:].rjust(ds[k][0], '0')))), - dtype=np.float32)) - else: - ds[k][1][j].append(np.array( - list(map(int, list(bin(base_inputs[index])[2:].rjust(input_lengths[index], '0')))) + - list(map(int, list(bin(secrets.randbits(ds[k][0]))[2:].rjust(ds[k][0], '0')))), - dtype=np.float32)) - - -def update_blackbox_distinguisher_vectorized_tests_ds(base_inputs, base_output, cipher, ds, index, labels, nb_samples): - input_lengths = cipher.inputs_bit_size - random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) - # cipher_output = base_output - - base_inputs_np = [np.broadcast_to( - np.array([b for b in x.to_bytes(input_lengths[i] // 8, byteorder='big')], dtype=np.uint8), - (nb_samples, input_lengths[i] // 8) - ).transpose().copy() for i, x in enumerate(base_inputs)] - random_inputs_for_index = np.frombuffer(os.urandom(nb_samples * input_lengths[index] // 8), dtype=np.uint8).reshape( - nb_samples, input_lengths[index] // 8).transpose() - base_inputs_np[index] = random_inputs_for_index - base_input_index_unpacked = np.unpackbits(base_inputs_np[index].transpose(), axis=1) - - cipher_output = evaluator.evaluate_vectorized(cipher, base_inputs_np, intermediate_outputs=True) - - for k in cipher_output: - for j in range(len(cipher_output[k])): - output_size = len(cipher_output[k][j][0]) - cipher_output[k][j][labels == 0] = np.frombuffer(os.urandom(random_labels_size * output_size), - dtype=np.uint8).reshape(random_labels_size, output_size) - cipher_output_unpacked = np.unpackbits(cipher_output[k][j], axis=1) - - full_output = np.append(base_input_index_unpacked, cipher_output_unpacked, axis=1) - ds[k][1][j].extend(list(full_output)) - - -def update_component_output_ids(cipher, component_output_ids): - for k in component_output_ids: - for component in cipher.get_all_components(): - if k in component.description: - component_output_ids[k].append(component.id) - - -def create_structure(base_output, cipher, test_name, partial_result): - ds = {} - component_output_ids = {} - - for k in base_output: - tmp_len = cipher.output_bit_size - - try: - partial_result[k][test_name] - except: - partial_result[k] = {test_name: []} - - for component in cipher.get_all_components(): - - if k in component.description: - tmp_len = component.output_bit_size - break + for k in cipher_output: + for j in range(len(cipher_output[k])): + output_size = len(cipher_output[k][j][0]) + cipher_output[k][j][labels == 0] = np.frombuffer(os.urandom(random_labels_size * output_size), + dtype=np.uint8).reshape(random_labels_size, + output_size) + cipher_output_unpacked = np.unpackbits(cipher_output[k][j], axis=1) + + full_output = np.append(base_input_index_unpacked, cipher_output_unpacked, axis=1) + ds[k][1][j].extend(list(full_output)) + + def update_component_output_ids(self, component_output_ids): + for k in component_output_ids: + for component in self.cipher.get_all_components(): + if k in component.description: + component_output_ids[k].append(component.id) + + def create_structure(self, base_output, test_name, partial_result): + ds = {} + component_output_ids = {} + + for k in base_output: + tmp_len = self.cipher.output_bit_size + + try: + partial_result[k][test_name] + except: + partial_result[k] = {test_name: []} + + for component in self.cipher.get_all_components(): + + if k in component.description: + tmp_len = component.output_bit_size + break + + ds[k] = (tmp_len, [[] for _ in range(len(base_output[k]))]) + component_output_ids[k] = [] + + return partial_result, ds, component_output_ids + + def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], + number_of_epochs=10, diff=[0x01, 0x0a], rounds_to_train=[]): + results = {"input_parameters": { + "test_name": "neural_network_differential_distinguisher_tests", + "number_of_samples": nb_samples, + "input_differences": diff, + "hidden_layers": hidden_layers, + "min_accuracy_value": 0, + "max_accuracy_value": 1, + "output_bit_size": self.cipher.output_bit_size, + "number_of_epochs": number_of_epochs}, + + "test_results": {}} + + test_name = "neural_network_differential_distinguisher" + for index, it in enumerate(self.cipher.inputs): + results["input_parameters"][f'{it}_input_bit_size'] = self.cipher.inputs_bit_size[index] + results["test_results"][it] = {} + + labels = np.frombuffer(os.urandom(nb_samples), dtype=np.uint8) + labels = labels & 1 + + base_inputs = [secrets.randbits(i) for i in self.cipher.inputs_bit_size] + base_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] + partial_result = {} + for d in diff: + partial_result, ds, component_output_ids = self.create_structure(base_output, test_name, partial_result) + self.update_component_output_ids(component_output_ids) + self.update_distinguisher_vectorized_tests_ds(base_inputs, d, ds, index, labels, nb_samples) + self.update_partial_result(component_output_ids, ds, index, test_name, labels, + number_of_epochs, partial_result, d, blackbox=False, + rounds_to_train=rounds_to_train) + results["test_results"][it] = partial_result + # self.update_partial_result(ds, index, test_name, labels, number_of_epochs, partial_result, 0, blackbox=True, + # rounds_to_train=rounds_to_train) + # def update_partial_result(self, ds, index, test_name, labels, number_of_epochs, + # partial_result, diff, blackbox=True, rounds_to_train=[]): + return results + + def update_distinguisher_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): + input_lengths = self.cipher.inputs_bit_size + for i in range(nb_samples): + base_inputs[index] = secrets.randbits(input_lengths[index]) + other_inputs = base_inputs.copy() + other_inputs[index] ^= d + cipher_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] + for k in cipher_output: + for j in range(len(cipher_output[k])): + if labels[i] == 1: + other_output = evaluator.evaluate(self.cipher, other_inputs, intermediate_output=True)[1] + ds[k][1][j] \ + .append(np.array(list(map(int, list(bin(cipher_output[k][j])[2:].rjust(ds[k][0], '0')))) + + list(map(int, list(bin(other_output[k][j])[2:].rjust(ds[k][0], '0')))), + dtype=np.float32)) + else: + ds[k][1][j] \ + .append(np.array(list(map(int, list(bin(cipher_output[k][j])[2:].rjust(ds[k][0], '0')))) + + list(map(int, + list(bin(secrets.randbits(ds[k][0]))[2:].rjust(ds[k][0], '0')))), + dtype=np.float32)) + + def update_distinguisher_vectorized_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): + input_lengths = self.cipher.inputs_bit_size + random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) + + base_inputs_np = [np.broadcast_to( + np.array([b for b in x.to_bytes(input_lengths[i] // 8, byteorder='big')], dtype=np.uint8), + (nb_samples, input_lengths[i] // 8) + ).transpose().copy() for i, x in enumerate(base_inputs)] + random_inputs_for_index = np.frombuffer(os.urandom(nb_samples * input_lengths[index] // 8), + dtype=np.uint8).reshape( + nb_samples, input_lengths[index] // 8).transpose() + base_inputs_np[index] = random_inputs_for_index + + other_inputs_np = list(base_inputs_np) + + d_array = np.array([b for b in d.to_bytes(input_lengths[index] // 8, byteorder='big')]) + other_inputs_np[index] = other_inputs_np[index] ^ np.broadcast_to(d_array, ( + nb_samples, input_lengths[index] // 8)).transpose() + + cipher_output = evaluator.evaluate_vectorized(self.cipher, base_inputs_np, intermediate_outputs=True) + other_output = evaluator.evaluate_vectorized(self.cipher, other_inputs_np, intermediate_outputs=True) - ds[k] = (tmp_len, [[] for _ in range(len(base_output[k]))]) - component_output_ids[k] = [] - - return partial_result, ds, component_output_ids - - -def neural_network_differential_distinguisher_tests(cipher, nb_samples=10000, hidden_layers=[32, 32, 32], - number_of_epochs=10, diff=[0x01, 0x0a], rounds_to_train=[]): - results = {"input_parameters": { - "test_name": "neural_network_differential_distinguisher_tests", - "number_of_samples": nb_samples, - "input_differences": diff, - "hidden_layers": hidden_layers, - "min_accuracy_value": 0, - "max_accuracy_value": 1, - "output_bit_size": cipher.output_bit_size, - "number_of_epochs": number_of_epochs}, - - "test_results": {}} - - test_name = "neural_network_differential_distinguisher" - for index, it in enumerate(cipher.inputs): - results["input_parameters"][f'{it}_input_bit_size'] = cipher.inputs_bit_size[index] - results["test_results"][it] = {} - - labels = np.frombuffer(os.urandom(nb_samples), dtype=np.uint8) - labels = labels & 1 - - base_inputs = [secrets.randbits(i) for i in cipher.inputs_bit_size] - base_output = evaluator.evaluate(cipher, base_inputs, intermediate_output=True)[1] - partial_result = {} - for d in diff: - partial_result, ds, component_output_ids = create_structure(base_output, cipher, test_name, partial_result) - update_component_output_ids(cipher, component_output_ids) - update_distinguisher_vectorized_tests_ds(base_inputs, cipher, d, ds, index, labels, nb_samples) - update_partial_result(cipher, component_output_ids, ds, index, test_name, labels, - number_of_epochs, partial_result, d, blackbox=False, rounds_to_train=rounds_to_train) - results["test_results"][it] = partial_result - - return results - - -def update_distinguisher_tests_ds(base_inputs, cipher, d, ds, index, labels, nb_samples): - input_lengths = cipher.inputs_bit_size - for i in range(nb_samples): - base_inputs[index] = secrets.randbits(input_lengths[index]) - other_inputs = base_inputs.copy() - other_inputs[index] ^= d - cipher_output = evaluator.evaluate(cipher, base_inputs, intermediate_output=True)[1] for k in cipher_output: for j in range(len(cipher_output[k])): - if labels[i] == 1: - other_output = evaluator.evaluate(cipher, other_inputs, intermediate_output=True)[1] - ds[k][1][j] \ - .append(np.array(list(map(int, list(bin(cipher_output[k][j])[2:].rjust(ds[k][0], '0')))) + - list(map(int, list(bin(other_output[k][j])[2:].rjust(ds[k][0], '0')))), - dtype=np.float32)) - else: - ds[k][1][j] \ - .append(np.array(list(map(int, list(bin(cipher_output[k][j])[2:].rjust(ds[k][0], '0')))) + - list(map(int, list(bin(secrets.randbits(ds[k][0]))[2:].rjust(ds[k][0], '0')))), - dtype=np.float32)) - - -def update_distinguisher_vectorized_tests_ds(base_inputs, cipher, d, ds, index, labels, nb_samples): - input_lengths = cipher.inputs_bit_size - random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) - - base_inputs_np = [np.broadcast_to( - np.array([b for b in x.to_bytes(input_lengths[i] // 8, byteorder='big')], dtype=np.uint8), - (nb_samples, input_lengths[i] // 8) - ).transpose().copy() for i, x in enumerate(base_inputs)] - random_inputs_for_index = np.frombuffer(os.urandom(nb_samples * input_lengths[index] // 8), dtype=np.uint8).reshape( - nb_samples, input_lengths[index] // 8).transpose() - base_inputs_np[index] = random_inputs_for_index - - other_inputs_np = list(base_inputs_np) - d_array = np.array([b for b in d.to_bytes(input_lengths[index] // 8, byteorder='big')]) - other_inputs_np[index] = other_inputs_np[index] ^ np.broadcast_to(d_array, ( - nb_samples, input_lengths[index] // 8)).transpose() - - cipher_output = evaluator.evaluate_vectorized(cipher, base_inputs_np, intermediate_outputs=True) - other_output = evaluator.evaluate_vectorized(cipher, other_inputs_np, intermediate_outputs=True) - - for k in cipher_output: - for j in range(len(cipher_output[k])): - output_size = len(cipher_output[k][j][0]) - other_output[k][j][labels == 0] = np.frombuffer(os.urandom(random_labels_size * output_size), - dtype=np.uint8).reshape(random_labels_size, output_size) - cipher_output_unpacked = np.unpackbits(cipher_output[k][j], axis=1) - other_output_unpacked = np.unpackbits(other_output[k][j], axis=1) - - full_output = np.append(cipher_output_unpacked, other_output_unpacked, axis=1) - ds[k][1][j].extend(list(full_output)) - - -def integer_to_np(val, number_of_bits): - return np.frombuffer(int(val).to_bytes(length=number_of_bits // 8, byteorder='big'), dtype=np.uint8).reshape(-1, 1) - - -def get_differential_dataset(cipher, input_differences, number_of_rounds, samples=10 ** 7): - from os import urandom - inputs_0 = [] - inputs_1 = [] - y = np.frombuffer(urandom(samples), dtype=np.uint8) & 1 - num_rand_samples = np.sum(y == 0) - for i, inp in enumerate(cipher.inputs): - inputs_0.append(np.frombuffer(urandom(samples * (cipher.inputs_bit_size[i] // 8)), - dtype=np.uint8).reshape(-1, samples)) # requires input size to be a multiple of 8 - inputs_1.append(inputs_0[-1] ^ integer_to_np(input_differences[i], cipher.inputs_bit_size[i])) - inputs_1[-1][:, y == 0] ^= np.frombuffer(urandom(num_rand_samples * cipher.inputs_bit_size[i] // 8), - dtype=np.uint8).reshape(-1, num_rand_samples) - C0 = np.unpackbits( - cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['round_output'][number_of_rounds - 1], axis=1) - C1 = np.unpackbits( - cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['round_output'][number_of_rounds - 1], axis=1) - x = np.hstack([C0, C1]) - print("Generating differential dataset for input difference ", input_differences) - return x, y - - -def get_neural_network(network_name, input_size, word_size = None, depth = 1): - from tensorflow.keras.optimizers import Adam - if network_name == 'gohr_resnet': - if word_size is None or word_size == 0: - print("Word size not specified for ", network_name, ", defaulting to ciphertext size...") - word_size = input_size//2 - neural_network = make_resnet(word_size = word_size, input_size = input_size, depth = depth) - elif network_name == 'dbitnet': - neural_network = make_dbitnet(input_size = input_size) - neural_network.compile(optimizer=Adam(amsgrad=True), loss='mse', metrics=['acc']) - return neural_network - - -def make_checkpoint(datei): - res = ModelCheckpoint(datei, monitor='val_loss', save_best_only=True) - return res - -def train_neural_distinguisher(cipher, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1, batch_size = 5000, save_prefix=None): - acc = 1 - x, y = data_generator(samples=training_samples, nr=starting_round) - x_eval, y_eval = data_generator(samples=testing_samples, nr=starting_round) - print("In train, save prefix is ", save_prefix, flush=True) - if save_prefix is None: - h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval)) - else: - filename = save_prefix + "_" + str(starting_round) - print("In train, filename is ", filename, flush=True) - check = make_checkpoint(filename+'.h5'); - print("In train, check is ", check, flush=True) - h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=batch_size, validation_data=(x_eval, y_eval), callbacks = [check]) - np.save(filename + '.npy', h.history['val_acc']) - acc = np.max(h.history["val_acc"]) - print(f'Validation accuracy at {starting_round} rounds :{acc}') - return acc - - -def neural_staged_training(cipher, data_generator, starting_round, neural_network=None, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1, save_prefix = None): - acc = 1 - nr = starting_round - # threshold at 10 sigma - threshold = 0.5 + 10 * sqrt(testing_samples // 4) / testing_samples - accuracies = {} - while acc >= threshold and nr < cipher.number_of_rounds: - acc = train_neural_distinguisher(cipher, data_generator, nr, neural_network, training_samples, testing_samples, - num_epochs, save_prefix = save_prefix) - accuracies[nr] = acc - nr += 1 - return accuracies - - -def make_resnet(input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, reg_param=10 ** -5, - final_activation='sigmoid', depth=1): - from keras.models import Model - from keras.layers import Dense, Conv1D, Input, Reshape, Permute, Add, Flatten, BatchNormalization, Activation - from keras import backend as K - from keras.regularizers import l2 - # Input and preprocessing layers - inp = Input(shape=(input_size,)) - rs = Reshape((input_size // word_size, word_size))(inp) - perm = Permute((2, 1))(rs) - # add a single residual layer that will expand the data to num_filters channels - # this is a bit-sliced layer - conv0 = Conv1D(num_filters, kernel_size=1, padding='same', kernel_regularizer=l2(reg_param))(perm) - conv0 = BatchNormalization()(conv0) - conv0 = Activation('relu')(conv0) - # add residual blocks - shortcut = conv0 - for _ in range(depth): - conv1 = Conv1D(num_filters, kernel_size=ks, padding='same', kernel_regularizer=l2(reg_param))(shortcut) - conv1 = BatchNormalization()(conv1) - conv1 = Activation('relu')(conv1) - conv2 = Conv1D(num_filters, kernel_size=ks, padding='same', kernel_regularizer=l2(reg_param))(conv1) - conv2 = BatchNormalization()(conv2) - conv2 = Activation('relu')(conv2) - shortcut = Add()([shortcut, conv2]) - # add prediction head - flat1 = Flatten()(shortcut) - dense1 = Dense(d1, kernel_regularizer=l2(reg_param))(flat1) - dense1 = BatchNormalization()(dense1) - dense1 = Activation('relu')(dense1) - dense2 = Dense(d2, kernel_regularizer=l2(reg_param))(dense1) - dense2 = BatchNormalization()(dense2) - dense2 = Activation('relu')(dense2) - out = Dense(num_outputs, activation=final_activation, kernel_regularizer=l2(reg_param))(dense2) - model = Model(inputs=inp, outputs=out) - return (model) - - -def make_dbitnet(input_size=64, n_filters=32, n_add_filters=16): - """Create a DBITNet model. - - :param input_size: e.g. for SPECK32/64 and 2 ciphertexts, the input_size is 64 bit. - :return: DBitNet model. - """ - - def get_dilation_rates(input_size): - """Helper function to determine the dilation rates of DBitNet given an input_size. """ - drs = [] - while input_size >= 8: - drs.append(int(input_size / 2 - 1)) - input_size = input_size // 2 - - return drs - - import tensorflow as tf - from tensorflow.keras.models import Model - from tensorflow.keras.layers import Input, Conv1D, Dense, Dropout, Lambda, concatenate, BatchNormalization, \ - Activation, Add - from tensorflow.keras.regularizers import l2 - - # determine the dilation rates from the given input size - dilation_rates = get_dilation_rates(input_size) - - # prediction head parameters (similar to Gohr) - d1 = 256 - d2 = 64 - reg_param = 1e-5 - - # define the input shape - inputs = Input(shape=(input_size, 1)) - x = inputs - - # normalize the input data to a range of [-1, 1]: - x = tf.subtract(x, 0.5) - x = tf.divide(x, 0.5) - - for dilation_rate in dilation_rates: - ### wide-narrow blocks - x = Conv1D(filters=n_filters, - kernel_size=2, - padding='valid', - dilation_rate=dilation_rate, - strides=1, - activation='relu')(x) - x = BatchNormalization()(x) - x_skip = x - x = Conv1D(filters=n_filters, - kernel_size=2, - padding='causal', - dilation_rate=1, - activation='relu')(x) - x = Add()([x, x_skip]) - x = BatchNormalization()(x) - - n_filters += n_add_filters - - ### prediction head - out = tf.keras.layers.Flatten()(x) - dense0 = Dense(d1, kernel_regularizer=l2(reg_param))(out); - dense0 = BatchNormalization()(dense0); - dense0 = Activation('relu')(dense0); - dense1 = Dense(d1, kernel_regularizer=l2(reg_param))(dense0); - dense1 = BatchNormalization()(dense1); - dense1 = Activation('relu')(dense1); - dense2 = Dense(d2, kernel_regularizer=l2(reg_param))(dense1); - dense2 = BatchNormalization()(dense2); - dense2 = Activation('relu')(dense2); - out = Dense(1, activation='sigmoid', kernel_regularizer=l2(reg_param))(dense2) - model = Model(inputs, out) - return model - - -def find_good_input_difference_for_neural_distinguisher(cipher, difference_positions, - initial_population=32, number_of_generations=15, - nb_samples=10 ** 3, previous_generation=None, verbose=False): - # Initialisation - input_lengths = cipher.inputs_bit_size - input_tags = cipher.inputs - evaluate = lambda x: cipher.evaluate_vectorized(x, intermediate_outputs=True) - threshold = 0.05 - # Generation of the baseline ciphertexts - inputs0 = [] - num_input_bits = 0 - for i in range(len(input_tags)): - inputs0.append(np.random.randint(256, size=(input_lengths[i] // 8, nb_samples), dtype=np.uint8)) - if difference_positions[i]: - num_input_bits += input_lengths[i] - C0 = evaluate(inputs0)['round_output'] - diffs, scores, highest_round = evolutionary_algorithm(previous_generation, initial_population, - number_of_generations, verbose, - difference_evaluation_function=lambda - x: evaluate_multiple_differences(input_lengths, - difference_positions, - evaluate, x, inputs0, C0, - threshold), - difference_bits=num_input_bits) - if verbose: - print("The highest reached round was", highest_round) - print("The best differences found by the optimizer are...") - for i in range(1, 11): - print(hex(diffs[-i]), ", with score", scores[-i]) - return diffs, scores, highest_round - - -def evolutionary_algorithm(previous_generation, initial_population, number_of_generations, verbose, - difference_evaluation_function, difference_bits): - mut_prob = 0.1 - if previous_generation is None: - generation = np.array([random.randint(1, 1 << difference_bits) - for _ in range(initial_population)], dtype=object) - # Restored randint instead of secrets. secrets.choice has a bound on max value, - # while randint does not, and we sometimes need 64+ bit integers here - # generation = np.array([secrets.choice(range(1, 1 << difference_bits)) - # for _ in range(initial_population ** 2)], dtype=object) - else: - generation = previous_generation - scores, highest_round = difference_evaluation_function(generation) - idx = np.arange(len(generation)) - explored = np.copy(generation) - best_differences = idx[np.argsort(scores)][-initial_population:] - generation = generation[best_differences] - - scores = scores[best_differences] - cpt = initial_population ** 2 - for i in range(number_of_generations): - # New generation - kids = np.array([a ^ b for a in generation for b in generation if a != b], dtype=object) - # Mutation: selecting mutating kids - selected_for_mutation = np.random.randint(0, 100, len(kids)) - number_to_mutate = np.sum(selected_for_mutation >= 100 * (1 - mut_prob)) - # Selected kids are XORed with 1<= 100 * (1 - mut_prob)] ^= \ - (np.array(1, dtype=object) << np.random.randint(0, difference_bits - 1, number_to_mutate)) - # Removing kids that have been explored before, duplicates, and 0 values - kids = np.unique(np.setdiff1d(kids, explored)) - - # Appending to explored - kids = kids[kids != 0] - explored = np.append(explored, kids) - cpt += len(kids) - # Computing the scores - if len(kids) > 0: - tmp_scores, tmp_highest_round = difference_evaluation_function(kids) - scores = np.append(scores, tmp_scores) - generation = np.append(generation, kids) - if highest_round < tmp_highest_round: - highest_round = tmp_highest_round - # Sorting, keeping only the L best ones - idx = np.arange(len(generation)) - best_l_differences = idx[np.argsort(scores)][-initial_population:] - generation = generation[best_l_differences] - scores = scores[best_l_differences] + output_size = len(cipher_output[k][j][0]) + other_output[k][j][labels == 0] = np.frombuffer(os.urandom(random_labels_size * output_size), + dtype=np.uint8).reshape(random_labels_size, output_size) + cipher_output_unpacked = np.unpackbits(cipher_output[k][j], axis=1) + other_output_unpacked = np.unpackbits(other_output[k][j], axis=1) + + full_output = np.append(cipher_output_unpacked, other_output_unpacked, axis=1) + ds[k][1][j].extend(list(full_output)) + + def integer_to_np(self, val, number_of_bits): + return np.frombuffer(int(val).to_bytes(length=number_of_bits // 8, byteorder='big'), dtype=np.uint8).reshape(-1, + 1) + + def get_differential_dataset(self, input_differences, number_of_rounds, samples=10 ** 7): + from os import urandom + inputs_0 = [] + inputs_1 = [] + y = np.frombuffer(urandom(samples), dtype=np.uint8) & 1 + num_rand_samples = np.sum(y == 0) + for i, inp in enumerate(self.cipher.inputs): + inputs_0.append(np.frombuffer(urandom(samples * (self.cipher.inputs_bit_size[i] // 8)), + dtype=np.uint8).reshape(-1, + samples)) # requires input size to be a multiple of 8 + inputs_1.append(inputs_0[-1] ^ self.integer_to_np(input_differences[i], self.cipher.inputs_bit_size[i])) + inputs_1[-1][:, y == 0] ^= np.frombuffer(urandom(num_rand_samples * self.cipher.inputs_bit_size[i] // 8), + dtype=np.uint8).reshape(-1, num_rand_samples) + + C0 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['round_output'][number_of_rounds - 1], + axis=1) + C1 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['round_output'][number_of_rounds - 1], + axis=1) + x = np.hstack([C0, C1]) + return x, y + + def get_neural_network(self, network_name, input_size, word_size=None, depth=1): + from tensorflow.keras.optimizers import Adam + if network_name == 'gohr_resnet': + if word_size is None or word_size == 0: + print("Word size not specified for ", network_name, ", defaulting to ciphertext size...") + word_size = self.cipher.output_bit_size + neural_network = self.make_resnet(word_size=word_size, input_size=input_size, depth=depth) + elif network_name == 'dbitnet': + neural_network = self.make_dbitnet(input_size=input_size) + neural_network.compile(optimizer=Adam(amsgrad=True), loss='mse', metrics=['acc']) + return neural_network + + def make_checkpoint(self, datei): + res = ModelCheckpoint(datei, monitor='val_loss', save_best_only=True) + return res + + def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, + testing_samples=10 ** 6, num_epochs=1): + acc = 1 + bs = 5000 + x, y = data_generator(samples=training_samples, nr=starting_round) + x_eval, y_eval = data_generator(samples=testing_samples, nr=starting_round) + h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=bs, validation_data=(x_eval, y_eval)) + acc = np.max(h.history["val_acc"]) + print(f'Validation accuracy at {starting_round} rounds :{acc}') + return acc + + def neural_staged_training(self, data_generator, starting_round, neural_network=None, training_samples=10 ** 7, + testing_samples=10 ** 6, num_epochs=1): + acc = 1 + nr = starting_round + # threshold at 10 sigma + threshold = 0.5 + 10 * sqrt(testing_samples // 4) / testing_samples + accuracies = {} + while acc >= threshold and nr < self.cipher.number_of_rounds: + # acc = train_neural_distinguisher(cipher, data_generator, nr, neural_network, training_samples, testing_samples, + # num_epochs) + acc = self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, testing_samples, + num_epochs) + accuracies[nr] = acc + nr += 1 + return accuracies + + def make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, + reg_param=10 ** -5, + final_activation='sigmoid', depth=1): + from keras.models import Model + from keras.layers import Dense, Conv1D, Input, Reshape, Permute, Add, Flatten, BatchNormalization, Activation + from keras import backend as K + from keras.regularizers import l2 + # Input and preprocessing layers + inp = Input(shape=(input_size,)) + rs = Reshape((input_size // word_size, word_size))(inp) + perm = Permute((2, 1))(rs) + # add a single residual layer that will expand the data to num_filters channels + # this is a bit-sliced layer + conv0 = Conv1D(num_filters, kernel_size=1, padding='same', kernel_regularizer=l2(reg_param))(perm) + conv0 = BatchNormalization()(conv0) + conv0 = Activation('relu')(conv0) + + # add residual blocks + shortcut = conv0 + for i in range(depth): + conv1 = Conv1D(num_filters, kernel_size=ks, padding='same', kernel_regularizer=l2(reg_param))(shortcut) + conv1 = BatchNormalization()(conv1) + conv1 = Activation('relu')(conv1) + conv2 = Conv1D(num_filters, kernel_size=ks, padding='same', kernel_regularizer=l2(reg_param))(conv1) + conv2 = BatchNormalization()(conv2) + conv2 = Activation('relu')(conv2) + shortcut = Add()([shortcut, conv2]) + + # add prediction head + flat1 = Flatten()(shortcut) + dense = Dense(d1, kernel_regularizer=l2(reg_param))(flat1) + dense = BatchNormalization()(dense) + dense = Activation('relu')(dense) + dense = Dense(d2, kernel_regularizer=l2(reg_param))(dense) + dense = BatchNormalization()(dense) + dense = Activation('relu')(dense) + out = Dense(num_outputs, activation=final_activation, kernel_regularizer=l2(reg_param))(dense) + model = Model(inputs=inp, outputs=out) + return model + + def make_dbitnet(self, input_size=64, n_filters=32, n_add_filters=16): + """Create a DBITNet model. + + :param input_size: e.g. for SPECK32/64 and 2 ciphertexts, the input_size is 64 bit. + :return: DBitNet model. + """ + + def get_dilation_rates(input_size): + """Helper function to determine the dilation rates of DBitNet given an input_size. """ + drs = [] + while input_size >= 8: + drs.append(int(input_size / 2 - 1)) + input_size = input_size // 2 + + return drs + + # determine the dilation rates from the given input size + dilation_rates = get_dilation_rates(input_size) + + # prediction head parameters (similar to Gohr) + d1 = 256 + d2 = 64 + reg_param = 1e-5 + + # define the input shape + inputs = Input(shape=(input_size, 1)) + x = inputs + + # normalize the input data to a range of [-1, 1]: + x = tf.subtract(x, 0.5) + x = tf.divide(x, 0.5) + + for dilation_rate in dilation_rates: + ### wide-narrow blocks + x = Conv1D(filters=n_filters, + kernel_size=2, + padding='valid', + dilation_rate=dilation_rate, + strides=1, + activation='relu')(x) + x = BatchNormalization()(x) + x_skip = x + x = Conv1D(filters=n_filters, + kernel_size=2, + padding='causal', + dilation_rate=1, + activation='relu')(x) + x = Add()([x, x_skip]) + x = BatchNormalization()(x) + + n_filters += n_add_filters + + ### prediction head + out = tf.keras.layers.Flatten()(x) + dense0 = Dense(d1, kernel_regularizer=l2(reg_param))(out); + dense0 = BatchNormalization()(dense0); + dense0 = Activation('relu')(dense0); + dense1 = Dense(d1, kernel_regularizer=l2(reg_param))(dense0); + dense1 = BatchNormalization()(dense1); + dense1 = Activation('relu')(dense1); + dense2 = Dense(d2, kernel_regularizer=l2(reg_param))(dense1); + dense2 = BatchNormalization()(dense2); + dense2 = Activation('relu')(dense2); + out = Dense(1, activation='sigmoid', kernel_regularizer=l2(reg_param))(dense2) + model = Model(inputs, out) + return model + + def find_good_input_difference_for_neural_distinguisher(self, difference_positions, + initial_population=32, number_of_generations=15, + nb_samples=10 ** 3, previous_generation=None, + verbose=False): + # Initialisation + input_lengths = self.cipher.inputs_bit_size + input_tags = self.cipher.inputs + evaluate = lambda x: self.cipher.evaluate_vectorized(x, intermediate_outputs=True) + threshold = 0.05 + # Generation of the baseline ciphertexts + inputs0 = [] + num_input_bits = 0 + for i in range(len(input_tags)): + inputs0.append(np.random.randint(256, size=(input_lengths[i] // 8, nb_samples), dtype=np.uint8)) + if difference_positions[i]: + num_input_bits += input_lengths[i] + C0 = evaluate(inputs0)['round_output'] + diffs, scores, highest_round = self.evolutionary_algorithm(previous_generation, initial_population, + number_of_generations, verbose, + difference_evaluation_function=lambda + x: self.evaluate_multiple_differences( + input_lengths, + difference_positions, + evaluate, x, inputs0, C0, + threshold), + difference_bits=num_input_bits) if verbose: - print( - f'Generation {i}/{number_of_generations}, {cpt} nodes explored, {len(generation)} ' - f'current, best is {[hex(x) for x in generation[-4:]]} with {scores[-4:]}', - flush=True) - - return generation, scores, highest_round - - -def evaluate_multiple_differences(input_lengths, difference_positions, encrypt, candidate_differences, inputs0, c0, - threshold): - inputs1 = [None for _ in inputs0] - formatted_differences, number_of_differences = int_difference_to_np_uint8(input_lengths, difference_positions, - candidate_differences) - for input_index in range(len(difference_positions)): - difference_in_input = formatted_differences[input_index] - if difference_positions[input_index]: - inputs1[input_index] = (difference_in_input[:, :, None] ^ inputs0[input_index][:, None, :]) \ - .reshape(inputs0[input_index].shape[0], -1) - else: - inputs1[input_index] = np.tile(inputs0[input_index], number_of_differences) - round_outputs = encrypt(inputs1)['round_output'] - scores = 0 - for i in range(1, len(round_outputs)): - nr = i - 1 - C1 = round_outputs[nr] - differences_in_output = C1.reshape(number_of_differences, c0[nr].shape[0], c0[nr].shape[1]) ^ c0[nr] - binary_differences = np.unpackbits(differences_in_output, axis=2) - bit_scores_per_diff = np.abs(0.5 - np.average(binary_differences, axis=1)) - round_scores = np.average(bit_scores_per_diff, axis=1) - scores += i * round_scores - if np.max(round_scores) < threshold: - break - - return scores, i - -def int_difference_to_input_differences(diff, difference_positions, input_bit_sizes): - formated = [] - """ - Splits a difference received as an integer into differences for each input that needs one, in integer format. - """ - for i in range(len(input_bit_sizes)): - if difference_positions[i]: - formated.append(diff&2**input_bit_sizes[i]-1) - diff = diff >> input_bit_sizes[i] + print("The highest reached round was", highest_round) + print("The best differences found by the optimizer are...") + for i in range(1, 11): + print(hex(diffs[-i]), ", with score", scores[-i]) + return diffs, scores, highest_round + + def evolutionary_algorithm(self, previous_generation, initial_population, number_of_generations, verbose, + difference_evaluation_function, difference_bits): + mut_prob = 0.1 + if previous_generation is None: + generation = np.array([random.randint(1, 1 << difference_bits) + for _ in range(initial_population)], dtype=object) + # Restored randint instead of secrets. secrets.choice has a bound on max value, + # while randint does not, and we sometimes need 64+ bit integers here + # generation = np.array([secrets.choice(range(1, 1 << difference_bits)) + # for _ in range(initial_population ** 2)], dtype=object) else: - formated.append(0) - return formated - -def int_difference_to_np_uint8(input_lengths, difference_positions, differences=None): - """ - Splits a difference received as an integer into differences for each input that needs one, in np.uint8 format. - """ - - num_bytes = 0 - for i in range(len(input_lengths)): - if difference_positions[i]: - num_bytes += input_lengths[i] // 8 - numpy_differences = np.uint8([(differences >> ((num_bytes - i - 1) * 8)) & 0xff - for i in range(num_bytes)]).reshape((num_bytes, -1)) - taken = 0 - number_of_differences = 0 - formatted_differences = [] - for i in range(len(difference_positions)): - if difference_positions[i]: - to_take = input_lengths[i] // 8 - formatted_differences.append(numpy_differences[taken:taken + to_take]) - taken += to_take - number_of_differences = len(differences) - else: - formatted_differences.append(0) + generation = previous_generation + scores, highest_round = difference_evaluation_function(generation) + idx = np.arange(len(generation)) + explored = np.copy(generation) + best_differences = idx[np.argsort(scores)][-initial_population:] + generation = generation[best_differences] + + scores = scores[best_differences] + cpt = initial_population ** 2 + for i in range(number_of_generations): + # New generation + kids = np.array([a ^ b for a in generation for b in generation if a != b], dtype=object) + # Mutation: selecting mutating kids + selected_for_mutation = np.random.randint(0, 100, len(kids)) + number_to_mutate = np.sum(selected_for_mutation >= 100 * (1 - mut_prob)) + # Selected kids are XORed with 1<= 100 * (1 - mut_prob)] ^= \ + (np.array(1, dtype=object) << np.random.randint(0, difference_bits - 1, number_to_mutate)) + # Removing kids that have been explored before, duplicates, and 0 values + kids = np.unique(np.setdiff1d(kids, explored)) + + # Appending to explored + kids = kids[kids != 0] + explored = np.append(explored, kids) + cpt += len(kids) + # Computing the scores + if len(kids) > 0: + tmp_scores, tmp_highest_round = difference_evaluation_function(kids) + scores = np.append(scores, tmp_scores) + generation = np.append(generation, kids) + if highest_round < tmp_highest_round: + highest_round = tmp_highest_round + # Sorting, keeping only the L best ones + idx = np.arange(len(generation)) + best_l_differences = idx[np.argsort(scores)][-initial_population:] + generation = generation[best_l_differences] + scores = scores[best_l_differences] + if verbose: + print( + f'Generation {i}/{number_of_generations}, {cpt} nodes explored, {len(generation)} ' + f'current, best is {[hex(x) for x in generation[-4:]]} with {scores[-4:]}', + flush=True) + + return generation, scores, highest_round + + def evaluate_multiple_differences(self, input_lengths, difference_positions, encrypt, candidate_differences, + inputs0, c0, + threshold): + inputs1 = [None for _ in inputs0] + formatted_differences, number_of_differences = self.int_difference_to_np_uint8(input_lengths, + difference_positions, + candidate_differences) + for input_index in range(len(difference_positions)): + difference_in_input = formatted_differences[input_index] + if difference_positions[input_index]: + inputs1[input_index] = (difference_in_input[:, :, None] ^ inputs0[input_index][:, None, :]) \ + .reshape(inputs0[input_index].shape[0], -1) + else: + inputs1[input_index] = np.tile(inputs0[input_index], number_of_differences) + round_outputs = encrypt(inputs1)['round_output'] + scores = 0 + for i in range(1, len(round_outputs)): + nr = i - 1 + C1 = round_outputs[nr] + differences_in_output = C1.reshape(number_of_differences, c0[nr].shape[0], c0[nr].shape[1]) ^ c0[nr] + binary_differences = np.unpackbits(differences_in_output, axis=2) + bit_scores_per_diff = np.abs(0.5 - np.average(binary_differences, axis=1)) + round_scores = np.average(bit_scores_per_diff, axis=1) + scores += i * round_scores + if np.max(round_scores) < threshold: + break - return formatted_differences, number_of_differences + return scores, i + + def int_difference_to_input_differences(self, diff, difference_positions, input_bit_sizes): + formated = [] + """ + Splits a difference received as an integer into differences for each input that needs one, in integer format. + """ + for i in range(len(input_bit_sizes)): + if difference_positions[i]: + formated.append(diff & 2 ** input_bit_sizes[i] - 1) + diff = diff >> input_bit_sizes[i] + else: + formated.append(0) + return formated + + def int_difference_to_np_uint8(self, input_lengths, difference_positions, differences=None): + """ + Splits a difference received as an integer into differences for each input that needs one, in np.uint8 format. + """ + + num_bytes = 0 + for i in range(len(input_lengths)): + if difference_positions[i]: + num_bytes += input_lengths[i] // 8 + numpy_differences = np.uint8([(differences >> ((num_bytes - i - 1) * 8)) & 0xff + for i in range(num_bytes)]).reshape((num_bytes, -1)) + taken = 0 + number_of_differences = 0 + formatted_differences = [] + for i in range(len(difference_positions)): + if difference_positions[i]: + to_take = input_lengths[i] // 8 + formatted_differences.append(numpy_differences[taken:taken + to_take]) + taken += to_take + number_of_differences = len(differences) + else: + formatted_differences.append(0) + + return formatted_differences, number_of_differences + +# # Example usage: + +# from class_neural_network_tests import Neural_Network_Distinguisher +# results1 = Neural_Network_Distinguisher(SpeckBlockCipher(number_of_rounds=2)).neural_network_blackbox_distinguisher_tests(nb_samples=10) +# results2 = Neural_Network_Distinguisher(SpeckBlockCipher(number_of_rounds=2)).neural_network_differential_distinguisher_tests(nb_samples=10) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..912aca8d 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -37,11 +37,8 @@ from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher -from claasp.ciphers.block_ciphers.qarmav2_with_mixcolumn_block_cipher import QARMAv2MixColumnBlockCipher -from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher -from claasp.cipher_modules.neural_network_tests import get_differential_dataset -from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network +from claasp.cipher_modules.neural_network_tests import NeuralNetworkDistinguisher EVALUATION_PY = 'evaluation.py' DICTIONARY_EXAMPLE_PY = "claasp/ciphers/dictionary_example.py" @@ -241,7 +238,7 @@ def test_evaluate_with_intermediate_outputs_continuous_diffusion_analysis(): def test_find_good_input_difference_for_neural_distinguisher(): cipher = SpeckBlockCipher() - diff, scores, highest_round = find_good_input_difference_for_neural_distinguisher(cipher, [True, False], + diff, scores, highest_round = NeuralNetworkDistinguisher(cipher).find_good_input_difference_for_neural_distinguisher([True, False], verbose=False, number_of_generations=5) @@ -253,11 +250,11 @@ def test_find_good_input_difference_for_neural_distinguisher(): def test_neural_staged_training(): cipher = SpeckBlockCipher() input_differences = [0x400000, 0] - data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds = nr, samples = samples) - neural_network = get_neural_network('gohr_resnet', input_size = 64, word_size = 16) + data_generator = lambda nr, samples: NeuralNetworkDistinguisher(cipher).get_differential_dataset(input_differences, number_of_rounds = nr, samples = samples) + neural_network = NeuralNetworkDistinguisher(cipher).get_neural_network('gohr_resnet', input_size = 64, word_size = 16) results_gohr = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) assert results_gohr[5] >= 0 - neural_network = get_neural_network('dbitnet', input_size = 64) + neural_network = NeuralNetworkDistinguisher(cipher).get_neural_network('dbitnet', input_size = 64) results_dbitnet = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) assert results_dbitnet[5] >= 0 @@ -277,7 +274,7 @@ def test_run_autond_pipeline(): def test_get_differential_dataset(): diff_value_plain_key = [0x400000, 0] cipher = SpeckBlockCipher() - x, y = get_differential_dataset(cipher, diff_value_plain_key, 5, samples=10) + x, y = NeuralNetworkDistinguisher(cipher).get_differential_dataset(diff_value_plain_key, 5, samples=10) assert x.shape == (10, 64) assert y.shape == (10, ) @@ -734,12 +731,4 @@ def test_cipher_inverse(): plaintext = 0x012345689abcdef ciphertext = cipher.evaluate([plaintext, key]) cipher_inv = cipher.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, key]) == plaintext - - qarmav2 = QARMAv2MixColumnBlockCipher(number_of_rounds=2) - key = 0x0123456789abcdeffedcba9876543210 - plaintext = 0x0000000000000000 - tweak = 0x7e5c3a18f6d4b2901eb852fc9630da74 - ciphertext = qarmav2.evaluate([key, plaintext, tweak]) - cipher_inv = qarmav2.cipher_inverse() - assert cipher_inv.evaluate([ciphertext, tweak, key]) == plaintext + assert cipher_inv.evaluate([ciphertext, key]) == plaintext \ No newline at end of file From 44d3550726bab0ea8e54c6316aafe6d22310dea4 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Thu, 22 Feb 2024 14:54:12 +0400 Subject: [PATCH 077/179] refactor of component_analysis_tests.py as a class --- .../component_analysis_tests.py | 319 ++++++++++-------- .../component_analysis_tests_test.py | 10 + 2 files changed, 184 insertions(+), 145 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 999b6e69..10ff42ba 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -32,6 +32,180 @@ from math import pi, log2 +class CipherComponentsAnalysis: + def __init__(self, cipher): + self.cipher = cipher + + def component_analysis_tests(self): + """ + Return a list of properties for all the operation used in a cipher + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: components_analysis = CipherComponentsAnalysis(fancy).component_analysis_tests() + + """ + all_variables_names = [] + for cipher_round in self.cipher.rounds_as_list: + for component in cipher_round.components: + for id_link, bit_positions in zip(component.input_id_links, component.input_bit_positions): + all_variables_names.extend([f'{id_link}_{i}' for i in bit_positions]) + all_variables_names = list(set(all_variables_names)) + boolean_polynomial_ring = BooleanPolynomialRing(len(all_variables_names), all_variables_names) + + cipher_operations = self.get_all_operations() + components_analysis = [] + if "concatenate" in cipher_operations: + cipher_operations.pop("concatenate") + for op in cipher_operations: + for same_op_different_param in cipher_operations[op]: + result = select_properties_function(boolean_polynomial_ring, same_op_different_param) + if result != {}: + components_analysis.append(result) + + return components_analysis + + def get_all_operations(self): + """ + Return a dictionary for which the keys are all the operations that are used in the cipher. + + The attributes are a list containing: + - a component with the operation under study; + - number of occurrences of the operation; + - list of ids of all the components with the same underlying operation. + + INPUT: + + - ``cipher`` -- **Cipher object**; a cipher instance + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: cipher_operations = CipherComponentsAnalysis(fancy).get_all_operations() + sage: list(cipher_operations.keys()) + ['sbox', 'linear_layer', 'XOR', 'AND', 'MODADD', 'ROTATE', 'SHIFT'] + """ + tmp_cipher_operations = {} + for component in self.cipher.get_all_components(): + collect_component_operations(component, tmp_cipher_operations) + + for operation in list(tmp_cipher_operations.keys()): + if operation not in [LINEAR_LAYER, MIX_COLUMN, 'fsr']: + tmp_cipher_operations[operation]["distinguisher"] = \ + list(set(tmp_cipher_operations[operation]["distinguisher"])) + if operation == 'fsr': + tmp_list = [] + for item in tmp_cipher_operations[operation]["distinguisher"]: + if item not in tmp_list: + tmp_list.append(item) + tmp_cipher_operations[operation]["distinguisher"] = tmp_list + tmp_cipher_operations[operation]["types"] = \ + [[] for _ in range(len(tmp_cipher_operations[operation]["distinguisher"]))] + collect_components_with_the_same_operation(operation, tmp_cipher_operations) + cipher_operations = {} + for operation in list(tmp_cipher_operations.keys()): + add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) + return cipher_operations + + def print_component_analysis_as_radar_charts(self): + """ + Display the properties of all the operations of a cipher in a spider graph + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: CipherComponentsAnalysis(fancy).print_component_analysis_as_radar_charts() + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=3) + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: CipherComponentsAnalysis(speck).print_component_analysis_as_radar_charts() + + """ + results = self.component_analysis_tests() + SMALL_SIZE = 10 + MEDIUM_SIZE = 11 + BIG_SIZE = 12 + + plt.rc('font', size=SMALL_SIZE) # controls default text sizes + plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title + plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels + plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels + plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels + plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize + plt.rc('figure', titlesize=BIG_SIZE) # fontsize of the figure title + + # remove XOR from results + results_without_xor = [results[i] for i in range(len(results)) if results[i]["description"][0] != "XOR"] + results = remove_components_with_strings_as_values(results_without_xor) + + nb_plots = len(results) + col = 2 + row = nb_plots // col + if nb_plots % col != 0: + row += nb_plots % col + positions = {8: -0.7, 3: -0.4} + + for plot_number in range(nb_plots): + categories = list(results[plot_number]["properties"].keys()) + values = plot_first_line_of_data_frame(categories, plot_number, results) + values += values[:1] # necessary to fill the area + + # What will be the angle of each axis in the plot? (we divide the plot / number of variable) + N = len(categories) + angles = [n / float(N) * 2 * pi for n in range(N)] + angles += angles[:1] + + ax = plt.subplot(row, col, plot_number + 1, polar=True) + initialise_spider_plot(plot_number, results) + + # Draw one axe per variable + add labels + plt.xticks(angles[:-1], categories, color='grey', size=8) + + # Draw ylabels + ax.set_rlabel_position(30) + # Log version: + # plt.yticks(list(range(max_value)), [str(i) for i in range(max_value)], color="grey", size=7) + # plt.ylim(0, max_value) + # Uniform version: + plt.yticks([0, 1], ["0", "1"], color="grey", size=8) + plt.ylim(0, 1) + + # Position of labels + for label, rot in zip(ax.get_xticklabels(), angles): + if 90 < (rot * 180. / pi) < 270: + label.set_rotation(rot * 180. / pi) + label.set_horizontalalignment("right") + label.set_rotation_mode("anchor") + elif int(rot * 180. / pi) == 90 or int(rot * 180. / pi) == 270: + label.set_rotation(rot * 180. / pi) + label.set_horizontalalignment("center") + label.set_rotation_mode("anchor") + else: + label.set_rotation(rot * 180. / pi) + label.set_horizontalalignment("left") + label.set_rotation_mode("anchor") + + # Plot data + ax.plot(angles, values, linewidth=1, linestyle='solid') + + # Fill area + ax.fill(angles, values, 'b', alpha=0.1) + fill_area(ax, categories, plot_number, positions, results) + + # Show the graph + plt.subplots_adjust(left=0.25, bottom=0.1, right=0.7, top=0.95, wspace=0, hspace=0.96) + # plt.show() + return plt + + def AND_as_boolean_function(component, boolean_polynomial_ring): """ Return a list of boolean polynomials corresponding to the output bits of a AND component. @@ -537,28 +711,6 @@ def int_to_poly(integer_value, word_size, variable): return z -def component_analysis_tests(cipher): - all_variables_names = [] - for cipher_round in cipher.rounds_as_list: - for component in cipher_round.components: - for id_link, bit_positions in zip(component.input_id_links, component.input_bit_positions): - all_variables_names.extend([f'{id_link}_{i}' for i in bit_positions]) - all_variables_names = list(set(all_variables_names)) - boolean_polynomial_ring = BooleanPolynomialRing(len(all_variables_names), all_variables_names) - - cipher_operations = get_all_operations(cipher) - components_analysis = [] - if "concatenate" in cipher_operations: - cipher_operations.pop("concatenate") - for op in cipher_operations: - for same_op_different_param in cipher_operations[op]: - result = select_properties_function(boolean_polynomial_ring, same_op_different_param) - if result != {}: - components_analysis.append(result) - - return components_analysis - - def select_properties_function(boolean_polynomial_ring, operation): component = operation[0] if component.type == SBOX: @@ -612,52 +764,6 @@ def generate_boolean_polynomial_ring_from_cipher(cipher): return BooleanPolynomialRing(len(all_variables_names), all_variables_names) - -def get_all_operations(cipher): - """ - Return a dictionary for which the keys are all the operations that are used in the cipher. - - The attributes are a list containing: - - a component with the operation under study; - - number of occurrences of the operation; - - list of ids of all the components with the same underlying operation. - - INPUT: - - - ``cipher`` -- **Cipher object**; a cipher instance - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import get_all_operations - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: cipher_operations = get_all_operations(fancy) - sage: list(cipher_operations.keys()) - ['sbox', 'linear_layer', 'XOR', 'AND', 'MODADD', 'ROTATE', 'SHIFT'] - """ - tmp_cipher_operations = {} - for component in cipher.get_all_components(): - collect_component_operations(component, tmp_cipher_operations) - - for operation in list(tmp_cipher_operations.keys()): - if operation not in [LINEAR_LAYER, MIX_COLUMN, 'fsr']: - tmp_cipher_operations[operation]["distinguisher"] = \ - list(set(tmp_cipher_operations[operation]["distinguisher"])) - if operation == 'fsr': - tmp_list = [] - for item in tmp_cipher_operations[operation]["distinguisher"]: - if item not in tmp_list: - tmp_list.append(item) - tmp_cipher_operations[operation]["distinguisher"] = tmp_list - tmp_cipher_operations[operation]["types"] = \ - [[] for _ in range(len(tmp_cipher_operations[operation]["distinguisher"]))] - collect_components_with_the_same_operation(operation, tmp_cipher_operations) - cipher_operations = {} - for operation in list(tmp_cipher_operations.keys()): - add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) - return cipher_operations - - def collect_components_with_the_same_operation(operation, tmp_cipher_operations): for component in tmp_cipher_operations[operation]["all"]: for index, distinguisher in enumerate(tmp_cipher_operations[operation]["distinguisher"]): @@ -1033,83 +1139,6 @@ def select_boolean_function(component, boolean_polynomial_ring): return "TODO(...)" -def print_component_analysis_as_radar_charts(results): - SMALL_SIZE = 10 - MEDIUM_SIZE = 11 - BIG_SIZE = 12 - - plt.rc('font', size=SMALL_SIZE) # controls default text sizes - plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title - plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels - plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels - plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels - plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize - plt.rc('figure', titlesize=BIG_SIZE) # fontsize of the figure title - - # remove XOR from results - results_without_xor = [results[i] for i in range(len(results)) if results[i]["description"][0] != "XOR"] - results = remove_components_with_strings_as_values(results_without_xor) - - nb_plots = len(results) - col = 2 - row = nb_plots // col - if nb_plots % col != 0: - row += nb_plots % col - positions = {8: -0.7, 3: -0.4} - - for plot_number in range(nb_plots): - categories = list(results[plot_number]["properties"].keys()) - values = plot_first_line_of_data_frame(categories, plot_number, results) - values += values[:1] # necessary to fill the area - - # What will be the angle of each axis in the plot? (we divide the plot / number of variable) - N = len(categories) - angles = [n / float(N) * 2 * pi for n in range(N)] - angles += angles[:1] - - ax = plt.subplot(row, col, plot_number + 1, polar=True) - initialise_spider_plot(plot_number, results) - - # Draw one axe per variable + add labels - plt.xticks(angles[:-1], categories, color='grey', size=8) - - # Draw ylabels - ax.set_rlabel_position(30) - # Log version: - # plt.yticks(list(range(max_value)), [str(i) for i in range(max_value)], color="grey", size=7) - # plt.ylim(0, max_value) - # Uniform version: - plt.yticks([0, 1], ["0", "1"], color="grey", size=8) - plt.ylim(0, 1) - - # Position of labels - for label, rot in zip(ax.get_xticklabels(), angles): - if 90 < (rot * 180. / pi) < 270: - label.set_rotation(rot * 180. / pi) - label.set_horizontalalignment("right") - label.set_rotation_mode("anchor") - elif int(rot * 180. / pi) == 90 or int(rot * 180. / pi) == 270: - label.set_rotation(rot * 180. / pi) - label.set_horizontalalignment("center") - label.set_rotation_mode("anchor") - else: - label.set_rotation(rot * 180. / pi) - label.set_horizontalalignment("left") - label.set_rotation_mode("anchor") - - # Plot data - ax.plot(angles, values, linewidth=1, linestyle='solid') - - # Fill area - ax.fill(angles, values, 'b', alpha=0.1) - fill_area(ax, categories, plot_number, positions, results) - - # Show the graph - plt.subplots_adjust(left=0.25, bottom=0.1, right=0.7, top=0.95, wspace=0, hspace=0.96) - # plt.show() - return plt - - def fill_area(ax, categories, plot_number, positions, results): text = "" for category in categories: diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index 5ca0ee46..5c0b9637 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -1,5 +1,6 @@ from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher from claasp.cipher_modules.component_analysis_tests import generate_boolean_polynomial_ring_from_cipher +from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis from claasp.components.fsr_component import FSR from claasp.cipher_modules.component_analysis_tests import fsr_properties from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 @@ -10,6 +11,15 @@ def test_generate_boolean_polynomial_ring_from_cipher(): fancy = FancyBlockCipher(number_of_rounds=3) generate_boolean_polynomial_ring_from_cipher(fancy) +def test_get_all_operations(): + fancy = FancyBlockCipher(number_of_rounds=3) + cipher_operations = CipherComponentsAnalysis(fancy).get_all_operations() + assert list(cipher_operations.keys()) == ['sbox', 'linear_layer', 'XOR', 'AND', 'MODADD', 'ROTATE', 'SHIFT'] + +def test_component_analysis_tests(): + fancy = FancyBlockCipher(number_of_rounds=3) + components_analysis = CipherComponentsAnalysis(fancy).component_analysis_tests() + assert len(components_analysis) == 9 def test_fsr_properties(): fsr_component = FSR(0, 0, ["input"], [[0, 1, 2, 3]], 4, [[[4, [[1, [0]], [3, [1]], [2, [2]]]]], 4]) From 62b02815557261bcbc615a2991015cb7ba80da1a Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Thu, 22 Feb 2024 15:57:00 +0400 Subject: [PATCH 078/179] fixing pytests --- claasp/cipher.py | 42 ++----------------- .../component_analysis_tests_test.py | 4 +- tests/unit/cipher_test.py | 14 +++---- 3 files changed, 12 insertions(+), 48 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 0e9d0caa..2e4c1f46 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -28,10 +28,10 @@ from claasp.cipher_modules import tester, evaluator from claasp.utils.templates import TemplateManager, CSVBuilder from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel -from claasp.cipher_modules import continuous_tests, code_generator, \ - component_analysis_tests, avalanche_tests, algebraic_tests +from claasp.cipher_modules import continuous_tests, code_generator, avalanche_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * +from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -305,7 +305,7 @@ def analyze_cipher(self, tests_configuration): avalanche_tests.avalanche_tests(self, **tmp_tests_configuration["diffusion_tests"]) if "component_analysis_tests" in tests_configuration and tests_configuration[ "component_analysis_tests"]["run_tests"]: - analysis_results["component_analysis_tests"] = component_analysis_tests.component_analysis_tests(self) + analysis_results["component_analysis_tests"] = CipherComponentsAnalysis(self).component_analysis_tests() if "algebraic_tests" in tests_configuration and tests_configuration["algebraic_tests"]["run_tests"]: timeout = tests_configuration["algebraic_tests"]["timeout"] analysis_results["algebraic_tests"] = algebraic_tests.algebraic_tests(self, timeout=timeout) @@ -351,42 +351,6 @@ def avalanche_probability_vectors(self, nb_samples): """ return avalanche_tests.avalanche_probability_vectors(self, nb_samples) - def component_analysis_tests(self): - """ - Return a list of dictionaries, each one giving some properties of the cipher's operations. - - INPUT: - - - None - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) - sage: result = aes.component_analysis_tests() - sage: len(result) - 9 - """ - return component_analysis_tests.component_analysis_tests(self) - - def print_component_analysis_as_radar_charts(self, component_analysis_results): - """ - Return a matplotlib object containing the radar charts of the components analysis test - - INPUT: - - - ``component_analysis_results`` -- **list**; results of the component analysis method - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) - sage: result = aes.component_analysis_tests() - sage: fig = aes.print_component_analysis_as_radar_charts(result) - sage: fig.show() # doctest: +SKIP - """ - return component_analysis_tests.print_component_analysis_as_radar_charts(component_analysis_results) - def component_from(self, round_number, index): return self._rounds.component_from(round_number, index) diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index 5c0b9637..362b052b 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -29,7 +29,7 @@ def test_fsr_properties(): assert dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] e0 = BluetoothStreamCipherE0(keystream_bit_len=2) - dictionary = e0.component_analysis_tests() + dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() assert dictionary[8]["number_of_registers"] == 4 assert dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' assert dictionary[8]["lfsr_connection_polynomials"][1] == 'x^31 + x^24 + x^16 + x^12 + 1' @@ -38,5 +38,5 @@ def test_fsr_properties(): assert dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] triv = TriviumStreamCipher(keystream_bit_len=1) - dictionary = triv.component_analysis_tests() + dictionary = CipherComponentsAnalysis(triv).component_analysis_tests() assert dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 0c1e7d22..451bcbc0 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -41,6 +41,7 @@ from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network +from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis EVALUATION_PY = 'evaluation.py' @@ -99,31 +100,30 @@ def test_avalanche_probability_vectors(): @pytest.mark.filterwarnings("ignore::DeprecationWarning:") def test_component_analysis(): fancy = FancyBlockCipher(number_of_rounds=2) - result = fancy.component_analysis_tests() + result = CipherComponentsAnalysis(fancy).component_analysis_tests() assert len(result) == 9 aes = AESBlockCipher(word_size=8, state_size=2, number_of_rounds=2) - result = aes.component_analysis_tests() + result = CipherComponentsAnalysis(aes).component_analysis_tests() assert len(result) == 7 present = PresentBlockCipher(number_of_rounds=2) - result = present.component_analysis_tests() + result = CipherComponentsAnalysis(present).component_analysis_tests() assert len(result) == 5 speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=22) - result = speck.component_analysis_tests() + result = CipherComponentsAnalysis(speck).component_analysis_tests() assert len(result) == 4 tea = TeaBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=32) - result = tea.component_analysis_tests() + result = CipherComponentsAnalysis(tea).component_analysis_tests() assert len(result) == 4 @pytest.mark.filterwarnings("ignore::DeprecationWarning:") def test_print_component_analysis_as_radar_charts(): aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) - result = aes.component_analysis_tests() - fig = aes.print_component_analysis_as_radar_charts(result) + fig = CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() assert str(type(fig)) == "" From fad5a13a1b8201149e638e730cbfd248abcf0d99 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Thu, 22 Feb 2024 16:39:24 +0400 Subject: [PATCH 079/179] FIX/refactored neural network tests to a class cipher.py error --- claasp/cipher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index f144d4f2..fd04d5ee 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1400,7 +1400,7 @@ def data_generator(nr, samples): neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return NeuralNetworkDistinguisher(self).neural_staged_training(lambda nr, samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, + return NeuralNetworkDistinguisher(self).neural_staged_training(samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples), nr, neural_network, training_samples, testing_samples, number_of_epochs, save_prefix) From 8c6bfd518b6f9e9ab554ef1224cdbc8cb14e57a3 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Thu, 22 Feb 2024 17:17:20 +0400 Subject: [PATCH 080/179] FIX/refactored neural network tests to a class cipher.py error --- claasp/cipher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index fd04d5ee..4429dd0e 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1400,7 +1400,7 @@ def data_generator(nr, samples): neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return NeuralNetworkDistinguisher(self).neural_staged_training(samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, + return NeuralNetworkDistinguisher(self).neural_staged_training(NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples), nr, neural_network, training_samples, testing_samples, number_of_epochs, save_prefix) From 55a9d35714b57fb063bc1e925a9924cbaf8f4527 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Thu, 22 Feb 2024 17:23:08 +0400 Subject: [PATCH 081/179] FIX/refactored neural network tests to a class cipher.py error --- claasp/cipher.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 4429dd0e..274457cd 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1400,8 +1400,8 @@ def data_generator(nr, samples): neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return NeuralNetworkDistinguisher(self).neural_staged_training(NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples), nr, neural_network, training_samples, + return NeuralNetworkDistinguisher(self).neural_staged_training((lambda nr, samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, + samples=samples)), nr, neural_network, training_samples, testing_samples, number_of_epochs, save_prefix) From afd2edab41166ab5f7cac68cb60ab46c590cf05a Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Thu, 22 Feb 2024 17:27:31 +0400 Subject: [PATCH 082/179] FIX/refactored neural network tests to a class cipher.py error --- claasp/cipher.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 274457cd..f267a125 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1400,9 +1400,12 @@ def data_generator(nr, samples): neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return NeuralNetworkDistinguisher(self).neural_staged_training((lambda nr, samples: NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples)), nr, neural_network, training_samples, + return NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs, save_prefix) + # return NeuralNetworkDistinguisher(self).neural_staged_training((lambda nr, samples: NeuralNetworkDistinguisher( + # self).get_differential_dataset(input_difference, number_of_rounds=nr, + # samples=samples)), nr, neural_network, training_samples, + # testing_samples, number_of_epochs, save_prefix) def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): From db77e1680a221bfc167d9000b89a401e96c81431 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Thu, 22 Feb 2024 19:46:25 +0400 Subject: [PATCH 083/179] FIX/refactored neural network tests to a class cipher.py error --- claasp/cipher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index f267a125..61ebc0f6 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1401,7 +1401,7 @@ def data_generator(nr, samples): nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') return NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, nr, neural_network, training_samples, - testing_samples, number_of_epochs, save_prefix) + testing_samples, number_of_epochs) #save_prefix # return NeuralNetworkDistinguisher(self).neural_staged_training((lambda nr, samples: NeuralNetworkDistinguisher( # self).get_differential_dataset(input_difference, number_of_rounds=nr, # samples=samples)), nr, neural_network, training_samples, From 7aaf3dff690865a4d1ab4ce858977deaeb39b55b Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Fri, 23 Feb 2024 10:04:07 +0400 Subject: [PATCH 084/179] fixing pytests --- claasp/cipher_modules/avalanche_tests.py | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index c94ff1d2..a74ed292 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -66,20 +66,19 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias .. NOTE:: - diff inserted in: - d["test_results"]["plaintext"]["round_output"]["avalanche_entropy"]["differences"][position][ - "output_vectors"][round] + d["test_results"]["plaintext"]["round_output"]["avalanche_entropy"][i]["vectors"][j] + The vector returned by this command correspond to the avalanche entropy after j+1 rounds, when an input + difference has been injected in position i in the plaintext. EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest - sage: test = AvalancheTest(speck) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: test = AvalancheTests(speck) sage: d = test.avalanche_tests(number_of_samples=100) sage: d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][1] - # difference injected in position 0 in the key, observation of round_output after 2 rounds (1 for 2 rounds) - """ + """ all_avalanche_probability_vectors = self.avalanche_probability_vectors(number_of_samples) criterion = self.compute_criterion_from_avalanche_probability_vectors(all_avalanche_probability_vectors, @@ -259,8 +258,9 @@ def avalanche_probability_vectors(self, nb_samples): .. NOTE:: - apvs["key"]["round_output"][position][index_occurrence] = vector of round_output size with input diff - injected in key + apvs["key"]["round_output"][i][j] + The vector returned corresponds to the probablity of flipping of each output bits after j+1 rounds when the + difference is injected in position i in the key. INPUT: @@ -270,10 +270,10 @@ def avalanche_probability_vectors(self, nb_samples): sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck sage: speck = speck(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest - sage: test = AvalancheTest(speck) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: test = AvalancheTests(speck) sage: apvs = test.avalanche_probability_vectors(100) - sage: apvs["key"]["round_output"][31][0] + sage: apvs["plaintext"]["round_output"][0][3] """ intermediate_output_names = {} @@ -401,8 +401,8 @@ def compute_criterion_from_avalanche_probability_vectors(self, all_avalanche_pro EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: from claasp.cipher_modules.avalanche_tests import AvalancheTest - sage: test = AvalancheTest(speck) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: test = AvalancheTests(speck) sage: apvs = test.avalanche_probability_vectors(100) sage: d = test.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) """ From 65cc566a5886d0d62af8bf6dee91bd07b71b4fd1 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Fri, 23 Feb 2024 10:19:25 +0400 Subject: [PATCH 085/179] FIX/refactored neural network tests to a class cipher.py comment removed --- claasp/cipher.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 61ebc0f6..23e3c2c6 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -1402,11 +1402,6 @@ def data_generator(nr, samples): print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') return NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) #save_prefix - # return NeuralNetworkDistinguisher(self).neural_staged_training((lambda nr, samples: NeuralNetworkDistinguisher( - # self).get_differential_dataset(input_difference, number_of_rounds=nr, - # samples=samples)), nr, neural_network, training_samples, - # testing_samples, number_of_epochs, save_prefix) - def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): """ From b992a39b914b122c83d5ce7a07e9ee4e3a637fef Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Fri, 23 Feb 2024 11:48:22 +0400 Subject: [PATCH 086/179] Removing continuous diffusion analysis from cipher.py --- claasp/cipher.py | 128 +----------------- ...ts.py => continuous_diffusion_analysis.py} | 86 ++++++++++++ .../continuous_diffusion_analysis_test.py | 48 +++++++ .../cipher_modules/continuous_tests_test.py | 19 --- tests/unit/cipher_test.py | 25 ---- 5 files changed, 135 insertions(+), 171 deletions(-) rename claasp/cipher_modules/{continuous_tests.py => continuous_diffusion_analysis.py} (84%) create mode 100644 tests/unit/cipher_modules/continuous_diffusion_analysis_test.py delete mode 100644 tests/unit/cipher_modules/continuous_tests_test.py diff --git a/claasp/cipher.py b/claasp/cipher.py index 2750b1cf..5d417a6c 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -22,15 +22,13 @@ import claasp from claasp import editor -from claasp.cipher_modules.continuous_tests import ContinuousDiffusionAnalysis from claasp.components.cipher_output_component import CipherOutput from claasp.compound_xor_differential_cipher import convert_to_compound_xor_cipher from claasp.rounds import Rounds from claasp.cipher_modules import tester, evaluator from claasp.utils.templates import TemplateManager, CSVBuilder from claasp.cipher_modules.models.algebraic.algebraic_model import AlgebraicModel -from claasp.cipher_modules import continuous_tests, code_generator, \ - component_analysis_tests, avalanche_tests, algebraic_tests +from claasp.cipher_modules import code_generator, component_analysis_tests, avalanche_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * @@ -147,7 +145,6 @@ def __init__(self, family_name, cipher_type, cipher_inputs, self._reference_code = cipher_reference_code self._id = self.make_cipher_id() self._file_name = self.make_file_name() - self._continuous_tests = ContinuousDiffusionAnalysis(self) def _are_there_not_forbidden_components(self, forbidden_types, forbidden_descriptions): return self._rounds.are_there_not_forbidden_components(forbidden_types, forbidden_descriptions) @@ -446,129 +443,6 @@ def compute_criterion_from_avalanche_probability_vectors(self, all_apvs, avalanc return avalanche_tests.compute_criterion_from_avalanche_probability_vectors(self, all_apvs, avalanche_dependence_uniform_bias) - def continuous_avalanche_factor(self, lambda_value, number_of_samples): - """ - Continuous generalization of the metric Avalanche Factor. This method implements Definition 14 of [MUR2020]_. - - INPUT: - - - ``lambda_value`` -- **float**; threshold value used to express the input difference - - ``number_of_samples`` -- **integer**; number of samples used to compute the continuous avalanche factor - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck_cipher = speck(number_of_rounds=2) - sage: result = speck_cipher.continuous_avalanche_factor(0.001, 10) - sage: result['plaintext']['round_key_output']['continuous_avalanche_factor']['values'][0]['value'] - 0.0 - """ - return self._continuous_tests.continuous_avalanche_factor(lambda_value, number_of_samples) - - def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): - """ - Continuous Diffusion Factor. This method implements Definition 16 of [MUR2020]_. - - INPUT: - - - ``beta_number_of_samples`` -- **integer**; number of samples used to compute the continuous measure metric - - ``gf_number_samples`` -- **integer**; number of vectors used to approximate gf_2 - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck_cipher = speck(number_of_rounds=2) # long time - sage: output = speck_cipher.continuous_diffusion_factor(5, 20) # long time - sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0]['2'] > 0 # long time - True - """ - return self._continuous_tests.continuous_diffusion_factor(beta_number_of_samples, gf_number_samples) - - def continuous_diffusion_tests(self, - continuous_avalanche_factor_number_of_samples=100, - threshold_for_avalanche_factor=0.001, - continuous_neutral_measure_beta_number_of_samples=10, - continuous_neutral_measure_gf_number_samples=10, - continuous_diffusion_factor_beta_number_of_samples=10, - continuous_diffusion_factor_gf_number_samples=10, - is_continuous_avalanche_factor=True, - is_continuous_neutrality_measure=True, - is_diffusion_factor=True): - """ - Return a python dictionary that contains the dictionaries corresponding to each metric in [MUR2020]_. - - INPUT: - - - ``continuous_avalanche_factor_number_of_samples`` -- **integer** (default: `100`); number of samples - used to obtain the metric continuous_avalanche_factor - - ``threshold_for_avalanche_factor`` -- **float** (default: `0.001`); threshold value used to compute the - input difference for the metric continuous_avalanche_factor - - ``continuous_neutral_measure_beta_number_of_samples`` -- **integer** (default: `10`); number of samples - used to compute the continuous measure metric - - ``continuous_neutral_measure_gf_number_samples`` -- **integer** (default: `10`); number of vectors used - to approximate gf_2 - - ``continuous_diffusion_factor_beta_number_of_samples`` -- **integer** (default: `10`); number of samples - used to compute the continuous measure metric - - ``continuous_diffusion_factor_gf_number_samples`` -- **integer** (default: `10`); number of vectors - used to approximate gf_2 - - ``is_continuous_avalanche_factor`` -- **boolean** (default: `True`); flag indicating if we want the - continuous_avalanche_factor or not - - ``is_continuous_neutrality_measure`` -- **boolean** (default: `True`); flag indicating if we want the - continuous_neutrality_measure or not - - ``is_diffusion_factor`` -- **boolean** (default: `True`); flag indicating if we want the - continuous_neutrality_measure, or not - - OUTPUT: - - - A python dictionary that contains the test result to each metric. E.g.: continuous_neutrality_measure, - continuous_avalanche_factor, diffusion_factor - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck_cipher = speck(number_of_rounds=1) # long time - sage: output = speck_cipher.continuous_diffusion_tests() # long time - sage: output['plaintext']['round_key_output']['continuous_neutrality_measure']['values'][0]['1'] == 0.0 # long time - True - """ - return self._continuous_tests.continuous_diffusion_tests( - continuous_avalanche_factor_number_of_samples, - threshold_for_avalanche_factor, - continuous_neutral_measure_beta_number_of_samples, - continuous_neutral_measure_gf_number_samples, - continuous_diffusion_factor_beta_number_of_samples, - continuous_diffusion_factor_gf_number_samples, - is_continuous_avalanche_factor, - is_continuous_neutrality_measure, - is_diffusion_factor) - - def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, - input_bit=None, output_bits=None): - """ - Continuous Neutrality Measure. This method implements Definition 15 of [MUR2020]_. - - INPUT: - - - ``beta_number_of_samples`` -- **integer**; number of samples used to compute the continuous measure metric - - ``gf_number_samples`` -- **integer**; number of vectors used to approximate gf_2 - - ``input_bit`` -- **integer** (default: `None`); input bit position to be analyzed - - ``output_bits`` -- **list** (default: `None`); output bit positions to be analyzed - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: output = speck(number_of_rounds=2).continuous_neutrality_measure_for_bit_j(50, 200) # long time - sage: output['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0]['2'] > 0 # long time - True - """ - return self._continuous_tests.continuous_neutrality_measure_for_bit_j(beta_number_of_samples, - gf_number_samples, input_bit, - output_bits) - - def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): - return self._continuous_tests.continuous_neutrality_measure_for_bit_j_and_beta(beta, input_bit, - number_of_samples, output_bits) - def delete_generated_evaluate_c_shared_library(self): """ Delete the file named _evaluate.c and the corresponding executable. diff --git a/claasp/cipher_modules/continuous_tests.py b/claasp/cipher_modules/continuous_diffusion_analysis.py similarity index 84% rename from claasp/cipher_modules/continuous_tests.py rename to claasp/cipher_modules/continuous_diffusion_analysis.py index 2f0e16da..555bb2f8 100644 --- a/claasp/cipher_modules/continuous_tests.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -264,6 +264,22 @@ def _get_graph_representation_tag_output_sizes(graph_representation): return temp_components def continuous_avalanche_factor(self, lambda_value, number_of_samples): + """ + Continuous generalization of the metric Avalanche Factor. This method implements Definition 14 of [MUR2020]_. + + INPUT: + + - ``lambda_value`` -- **float**; threshold value used to express the input difference + - ``number_of_samples`` -- **integer**; number of samples used to compute the continuous avalanche factor + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: speck_cipher = speck(number_of_rounds=2) + sage: result = speck_cipher.continuous_avalanche_factor(0.001, 10) + sage: result['plaintext']['round_key_output']['continuous_avalanche_factor']['values'][0]['value'] + 0.0 + """ input_tags = self.cipher.inputs final_dict = {} for input_tag in input_tags: @@ -275,6 +291,22 @@ def continuous_avalanche_factor(self, lambda_value, number_of_samples): return final_dict def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples): + """ + Continuous Diffusion Factor. This method implements Definition 16 of [MUR2020]_. + + INPUT: + + - ``beta_number_of_samples`` -- **integer**; number of samples used to compute the continuous measure metric + - ``gf_number_samples`` -- **integer**; number of vectors used to approximate gf_2 + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: speck_cipher = speck(number_of_rounds=2) # long time + sage: output = speck_cipher.continuous_diffusion_factor(5, 20) # long time + sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0]['2'] > 0 # long time + True + """ output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( self.cipher.as_python_dictionary()).keys() i = 0 @@ -337,6 +369,43 @@ def continuous_diffusion_tests(self, is_continuous_avalanche_factor=True, is_continuous_neutrality_measure=True, is_diffusion_factor=True): + """ + Return a python dictionary that contains the dictionaries corresponding to each metric in [MUR2020]_. + + INPUT: + + - ``continuous_avalanche_factor_number_of_samples`` -- **integer** (default: `100`); number of samples + used to obtain the metric continuous_avalanche_factor + - ``threshold_for_avalanche_factor`` -- **float** (default: `0.001`); threshold value used to compute the + input difference for the metric continuous_avalanche_factor + - ``continuous_neutral_measure_beta_number_of_samples`` -- **integer** (default: `10`); number of samples + used to compute the continuous measure metric + - ``continuous_neutral_measure_gf_number_samples`` -- **integer** (default: `10`); number of vectors used + to approximate gf_2 + - ``continuous_diffusion_factor_beta_number_of_samples`` -- **integer** (default: `10`); number of samples + used to compute the continuous measure metric + - ``continuous_diffusion_factor_gf_number_samples`` -- **integer** (default: `10`); number of vectors + used to approximate gf_2 + - ``is_continuous_avalanche_factor`` -- **boolean** (default: `True`); flag indicating if we want the + continuous_avalanche_factor or not + - ``is_continuous_neutrality_measure`` -- **boolean** (default: `True`); flag indicating if we want the + continuous_neutrality_measure or not + - ``is_diffusion_factor`` -- **boolean** (default: `True`); flag indicating if we want the + continuous_neutrality_measure, or not + + OUTPUT: + + - A python dictionary that contains the test result to each metric. E.g.: continuous_neutrality_measure, + continuous_avalanche_factor, diffusion_factor + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: speck_cipher = speck(number_of_rounds=1) # long time + sage: output = speck_cipher.continuous_diffusion_tests() # long time + sage: output['plaintext']['round_key_output']['continuous_neutrality_measure']['values'][0]['1'] == 0.0 # long time + True + """ continuous_diffusion_tests = {"input_parameters": { 'test_name': 'continuous_diffusion_tests', 'continuous_avalanche_factor_number_of_samples': continuous_avalanche_factor_number_of_samples, @@ -394,6 +463,23 @@ def continuous_diffusion_tests(self, def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, input_bit=None, output_bits=None): + """ + Continuous Neutrality Measure. This method implements Definition 15 of [MUR2020]_. + + INPUT: + + - ``beta_number_of_samples`` -- **integer**; number of samples used to compute the continuous measure metric + - ``gf_number_samples`` -- **integer**; number of vectors used to approximate gf_2 + - ``input_bit`` -- **integer** (default: `None`); input bit position to be analyzed + - ``output_bits`` -- **list** (default: `None`); output bit positions to be analyzed + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: output = speck(number_of_rounds=2).continuous_neutrality_measure_for_bit_j(50, 200) # long time + sage: output['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0]['2'] > 0 # long time + True + """ if output_bits is None: output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( self.cipher.as_python_dictionary()) diff --git a/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py b/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py new file mode 100644 index 00000000..3bd9909d --- /dev/null +++ b/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py @@ -0,0 +1,48 @@ +from claasp.cipher_modules.continuous_diffusion_analysis import ContinuousDiffusionAnalysis +from claasp.cipher_modules.report import Report +from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + + +def test_continuous_tests(): + speck = SpeckBlockCipher(number_of_rounds=1) + cda = ContinuousDiffusionAnalysis(speck) + cda_for_repo = cda.continuous_diffusion_tests() + test_results = cda_for_repo['test_results'] + assert test_results['plaintext']['cipher_output']['continuous_neutrality_measure'][0]['values'][0] > 0.01 + + +def test_continuous_tests_report(): + speck = SpeckBlockCipher(number_of_rounds=2) + cda = ContinuousDiffusionAnalysis(speck) + cda_for_repo = cda.continuous_diffusion_tests() + cda_repo = Report(speck, cda_for_repo) + cda_repo.print_report() + + +def test_continuous_avalanche_factor(): + aes = AESBlockCipher(number_of_rounds=5) + cda = ContinuousDiffusionAnalysis(aes) + result = cda.continuous_avalanche_factor(0.001, 300) + assert result['plaintext']['cipher_output']['continuous_avalanche_factor']['values'][0] > 0.1 + + +def test_continuous_diffusion_factor(): + speck = SpeckBlockCipher(number_of_rounds=2) + cda = ContinuousDiffusionAnalysis(speck) + output = cda.continuous_diffusion_factor(5, 20) + assert output['plaintext']['cipher_output']['diffusion_factor']['values'][0] > 0 + + +def test_continuous_diffusion_tests(): + speck = SpeckBlockCipher(number_of_rounds=1) + cda = ContinuousDiffusionAnalysis(speck) + output = cda.continuous_diffusion_tests()["test_results"] + assert output['plaintext']['round_key_output']['continuous_neutrality_measure'][0]["values"][0] == 0.0 + + +def test_continuous_neutrality_measure_for_bit_j(): + speck = SpeckBlockCipher(number_of_rounds=2) + cda = ContinuousDiffusionAnalysis(speck) + output = cda.continuous_neutrality_measure_for_bit_j(50, 200) + assert output['plaintext']['cipher_output']['continuous_neutrality_measure']["values"][0]['2'] > 0 diff --git a/tests/unit/cipher_modules/continuous_tests_test.py b/tests/unit/cipher_modules/continuous_tests_test.py deleted file mode 100644 index 087fb257..00000000 --- a/tests/unit/cipher_modules/continuous_tests_test.py +++ /dev/null @@ -1,19 +0,0 @@ -from claasp.cipher_modules.continuous_tests import ContinuousDiffusionAnalysis -from claasp.cipher_modules.report import Report -from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - - -def test_continuous_tests(): - speck = SpeckBlockCipher(number_of_rounds=1) - cda = ContinuousDiffusionAnalysis(speck) - cda_for_repo = cda.continuous_diffusion_tests() - test_results = cda_for_repo['test_results'] - assert test_results['plaintext']['cipher_output']['continuous_neutrality_measure'][0]['values'][0] > 0.01 - - -def test_continuous_tests_report(): - speck = SpeckBlockCipher(number_of_rounds=2) - cda = ContinuousDiffusionAnalysis(speck) - cda_for_repo = cda.continuous_diffusion_tests() - cda_repo = Report(speck, cda_for_repo) - cda_repo.print_report() diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 74e72063..84a960ea 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -134,31 +134,6 @@ def test_compute_criterion_from_avalanche_probability_vectors(): assert d["key"]["round_output"][0][0]["avalanche_dependence_vectors"] == [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - -def test_continuous_avalanche_factor(): - aes = AESBlockCipher(number_of_rounds=5) - result = aes.continuous_avalanche_factor(0.001, 300) - assert result['plaintext']['cipher_output']['continuous_avalanche_factor']['values'][0] > 0.1 - - -def test_continuous_diffusion_factor(): - speck = SpeckBlockCipher(number_of_rounds=2) - output = speck.continuous_diffusion_factor(5, 20) - assert output['plaintext']['cipher_output']['diffusion_factor']['values'][0] > 0 - - -def test_continuous_diffusion_tests(): - speck_cipher = SpeckBlockCipher(number_of_rounds=1) - output = speck_cipher.continuous_diffusion_tests()["test_results"] - assert output['plaintext']['round_key_output']['continuous_neutrality_measure'][0]["values"][0] == 0.0 - - -def test_continuous_neutrality_measure_for_bit_j(): - speck = SpeckBlockCipher(number_of_rounds=2) - output = speck.continuous_neutrality_measure_for_bit_j(50, 200) - assert output['plaintext']['cipher_output']['continuous_neutrality_measure']["values"][0]['2'] > 0 - - def test_delete_generated_evaluate_c_shared_library(): file_c = open(FANCY_EVALUATE_C_FILE, 'a') file_o = open(FANCY_EVALUATE_O_FILE, 'a') From d5ab306a358d738208ac6e17fcdd85e16400ccd9 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Fri, 23 Feb 2024 12:30:26 +0400 Subject: [PATCH 087/179] Removing continuous diffusion analysis from cipher.py --- .../continuous_diffusion_analysis.py | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index 555bb2f8..e6504f17 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -105,8 +105,9 @@ def _create_list_fixing_tag_input(_tag_input): if ii == index_of_tag_input: lst_input.append([]) else: + import secrets lst_input.append([ - Decimal(max_bias[random.randrange(0, 2)]) for _ in range(input_size) + Decimal(max_bias[secrets.choice([0, 1])]) for _ in range(input_size) ]) ii += 1 @@ -484,17 +485,17 @@ def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_num output_bits = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( self.cipher.as_python_dictionary()) if input_bit is None: - input_bit = self.init_input_bits() + input_bit = self._init_input_bits() - beta_sample_outputs = self.generate_beta_sample_output(beta_number_of_samples, gf_number_samples, - input_bit, output_bits) + beta_sample_outputs = self._generate_beta_sample_output(beta_number_of_samples, gf_number_samples, + input_bit, output_bits) inputs_tags = list(beta_sample_outputs[0].keys()) output_tags = list(beta_sample_outputs[0][inputs_tags[0]].keys()) - final_result = ContinuousDiffusionAnalysis.init_final_result_structure( + final_result = ContinuousDiffusionAnalysis._init_final_result_structure( input_bit, inputs_tags, output_bits, output_tags) - final_result = ContinuousDiffusionAnalysis.add_beta_samples_to_final_result_from(beta_sample_outputs, - inputs_tags, output_tags, - final_result) + final_result = ContinuousDiffusionAnalysis._add_beta_samples_to_final_result_from(beta_sample_outputs, + inputs_tags, output_tags, + final_result) for inputs_tag in inputs_tags: for output_tag in output_tags: @@ -511,7 +512,7 @@ def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_num return final_result @staticmethod - def add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, final_result): + def _add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, output_tags, final_result): for beta_sample_output in beta_sample_outputs: for inputs_tag in inputs_tags: for output_tag in output_tags: @@ -521,7 +522,7 @@ def add_beta_samples_to_final_result_from(beta_sample_outputs, inputs_tags, outp return final_result @staticmethod - def init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags): + def _init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags): final_result = {} for inputs_tag in inputs_tags: final_result[inputs_tag] = {} @@ -535,13 +536,13 @@ def init_final_result_structure(input_bit, inputs_tags, output_bits, output_tags return final_result - def generate_beta_sample_output(self, beta_number_of_samples, gf_number_samples, input_bit, output_bits): + def _generate_beta_sample_output(self, beta_number_of_samples, gf_number_samples, input_bit, output_bits): betas = np.random.uniform(low=-1.0, high=1.0, size=beta_number_of_samples) beta_sample_outputs_temp = [] pool = Pool() for i in range(beta_number_of_samples): beta_sample_outputs_temp.append( - pool.apply_async(self.continuous_neutrality_measure_for_bit_j_and_beta, + pool.apply_async(self._continuous_neutrality_measure_for_bit_j_and_beta, args=(input_bit, float(betas[i]), gf_number_samples, output_bits))) pool.close() pool.join() @@ -549,14 +550,14 @@ def generate_beta_sample_output(self, beta_number_of_samples, gf_number_samples, return beta_sample_outputs - def init_input_bits(self): + def _init_input_bits(self): input_bit = {} for cipher_input in self.cipher.inputs: input_bit[cipher_input] = 0 return input_bit - def continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): + def _continuous_neutrality_measure_for_bit_j_and_beta(self, input_bit, beta, number_of_samples, output_bits): input_tags = input_bit.keys() continuous_diffusion_tests = {} for input_tag in input_tags: From d1625b554b55c181557311ec1f17dfd8ac2fd5dd Mon Sep 17 00:00:00 2001 From: sharwan Date: Fri, 23 Feb 2024 11:56:01 +0000 Subject: [PATCH 088/179] removed analyze_cipher function from cipher.py --- claasp/cipher.py | 45 --------------------------------------- tests/unit/cipher_test.py | 22 ------------------- 2 files changed, 67 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 00a6d949..e7db460b 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -32,7 +32,6 @@ component_analysis_tests, avalanche_tests import importlib from claasp.cipher_modules.inverse_cipher import * -from claasp.cipher_modules.algebraic_tests import AlgebraicTests tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -244,50 +243,6 @@ def add_word_permutation_component(self, input_id_links, input_bit_positions, def add_XOR_component(self, input_id_links, input_bit_positions, output_bit_size): return editor.add_XOR_component(self, input_id_links, input_bit_positions, output_bit_size) - def analyze_cipher(self, tests_configuration): - """ - Generate a dictionary with the analysis of the cipher. - - The analysis is related to the following tests: - - - Diffusion Tests - - INPUT: - - - ``tests_configuration`` -- **python dictionary** - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, - ....: "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, - ....: "run_avalanche_weight": True, "run_avalanche_entropy": True, - ....: "avalanche_dependence_uniform_bias": 0.2, "avalanche_dependence_criterion_threshold": 0, - ....: "avalanche_dependence_uniform_criterion_threshold":0, "avalanche_weight_criterion_threshold": 0.1, - ....: "avalanche_entropy_criterion_threshold":0.1}, "component_analysis_tests": {"run_tests": True}} - sage: analysis = sp.analyze_cipher(tests_configuration) - sage: analysis["diffusion_tests"]["test_results"]["key"]["round_output"][ # random - ....: "avalanche_dependence_vectors"]["differences"][31]["output_vectors"][0]["vector"] # random - - sage: tests_configuration = {"algebraic_tests": {"run_tests": True, "timeout": 60}} - sage: analysis = sp.analyze_cipher(tests_configuration) - """ - tmp_tests_configuration = deepcopy(tests_configuration) - analysis_results = {} - if "diffusion_tests" in tests_configuration and tests_configuration["diffusion_tests"]["run_tests"]: - tmp_tests_configuration["diffusion_tests"].pop("run_tests") - analysis_results['diffusion_tests'] = \ - avalanche_tests.avalanche_tests(self, **tmp_tests_configuration["diffusion_tests"]) - if "component_analysis_tests" in tests_configuration and tests_configuration[ - "component_analysis_tests"]["run_tests"]: - analysis_results["component_analysis_tests"] = component_analysis_tests.component_analysis_tests(self) - if "algebraic_tests" in tests_configuration and tests_configuration["algebraic_tests"]["run_tests"]: - timeout = tests_configuration["algebraic_tests"]["timeout"] - analysis_results["algebraic_tests"] = AlgebraicTests(self).algebraic_tests(timeout) - - return analysis_results - def as_python_dictionary(self): return { 'cipher_id': self._id, diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index b3ce34ac..7f3f0dc5 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -86,28 +86,6 @@ def test_algebraic_tests(): assert d == compare_result - -def test_analyze_cipher(): - sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, - "run_avalanche_dependence": True, - "run_avalanche_dependence_uniform": True, - "run_avalanche_weight": True, - "run_avalanche_entropy": True, - "avalanche_dependence_uniform_bias": 0.2, - "avalanche_dependence_criterion_threshold": 0, - "avalanche_dependence_uniform_criterion_threshold": 0, - "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} - analysis = sp.analyze_cipher(tests_configuration) - assert \ - analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31][ - "vectors"][ - 0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] - - def test_avalanche_probability_vectors(): speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) apvs = speck.avalanche_probability_vectors(100) From 01c15c3dbdc9105864b8c6298ffdfb8fd172c67e Mon Sep 17 00:00:00 2001 From: sharwan Date: Sat, 24 Feb 2024 10:51:35 +0100 Subject: [PATCH 089/179] fixed 'test_pprint_dictionary' and 'test_pprint_dictionary_to_file' functions after removing 'analyze_cipher'function, which was used --- tests/unit/utils/utils_test.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/tests/unit/utils/utils_test.py b/tests/unit/utils/utils_test.py index 258dc815..00de5b74 100644 --- a/tests/unit/utils/utils_test.py +++ b/tests/unit/utils/utils_test.py @@ -12,7 +12,7 @@ from claasp.utils.utils import pprint_dictionary_to_file from claasp.utils.utils import bytes_positions_to_little_endian_for_32_bits from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher - +from claasp.cipher_modules import avalanche_tests def test_bytes_positions_to_little_endian_for_32_bits(): lst = list(range(32)) @@ -26,8 +26,7 @@ def test_get_k_th_bit(): def test_pprint_dictionary(): - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, + tests_configuration = {"diffusion_tests": {"number_of_samples": 100, "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, "run_avalanche_weight": True, "run_avalanche_entropy": True, @@ -35,10 +34,9 @@ def test_pprint_dictionary(): "avalanche_dependence_criterion_threshold": 0, "avalanche_dependence_uniform_criterion_threshold": 0, "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} + "avalanche_entropy_criterion_threshold": 0.1}} cipher = IdentityBlockCipher() - analysis = cipher.analyze_cipher(tests_configuration) + analysis= {'diffusion_tests': avalanche_tests.avalanche_tests(cipher, **tests_configuration["diffusion_tests"])} pprint_dictionary(analysis['diffusion_tests']['input_parameters']) result = analysis['diffusion_tests']['input_parameters'] assert result == {'avalanche_dependence_criterion_threshold': 0, @@ -100,7 +98,7 @@ def test_pprint_dictionary(): def test_pprint_dictionary_to_file(): identity = IdentityBlockCipher() - tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, + tests_configuration = {"diffusion_tests": {"number_of_samples": 100, "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, "run_avalanche_weight": True, @@ -109,11 +107,10 @@ def test_pprint_dictionary_to_file(): "avalanche_dependence_criterion_threshold": 0, "avalanche_dependence_uniform_criterion_threshold": 0, "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} + "avalanche_entropy_criterion_threshold": 0.1}} tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) - analysis = identity.analyze_cipher(tests_configuration) + analysis = {'diffusion_tests': avalanche_tests.avalanche_tests(identity, **tests_configuration["diffusion_tests"])} pprint_dictionary_to_file(analysis['diffusion_tests']['input_parameters'], f"{tii_dir_path}/test_json") assert os.path.isfile(f"{tii_dir_path}/test_json") is True os.remove(f"{tii_dir_path}/test_json") From 8ca784966ab0aca608a49f27576c936f16feaba1 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 11:33:35 +0400 Subject: [PATCH 090/179] move private methods inside the class and use underscore --- claasp/cipher.py | 41 - .../component_analysis_tests.py | 1530 ++++++++--------- docs/build/html/searchindex.js | 3 +- .../component_analysis_tests_test.py | 22 +- tests/unit/cipher_test.py | 50 - 5 files changed, 771 insertions(+), 875 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 2e4c1f46..73ff6b56 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -31,7 +31,6 @@ from claasp.cipher_modules import continuous_tests, code_generator, avalanche_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * -from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -271,46 +270,6 @@ def algebraic_tests(self, timeout): """ return algebraic_tests.algebraic_tests(self, timeout) - def analyze_cipher(self, tests_configuration): - """ - Generate a dictionary with the analysis of the cipher. - - The analysis is related to the following tests: - - - Diffusion Tests - - INPUT: - - - ``tests_configuration`` -- **python dictionary** - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, - ....: "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, - ....: "run_avalanche_weight": True, "run_avalanche_entropy": True, - ....: "avalanche_dependence_uniform_bias": 0.2, "avalanche_dependence_criterion_threshold": 0, - ....: "avalanche_dependence_uniform_criterion_threshold":0, "avalanche_weight_criterion_threshold": 0.1, - ....: "avalanche_entropy_criterion_threshold":0.1}, "component_analysis_tests": {"run_tests": True}} - sage: analysis = sp.analyze_cipher(tests_configuration) - sage: analysis["diffusion_tests"]["test_results"]["key"]["round_output"][ # random - ....: "avalanche_dependence_vectors"]["differences"][31]["output_vectors"][0]["vector"] # random - """ - tmp_tests_configuration = deepcopy(tests_configuration) - analysis_results = {} - if "diffusion_tests" in tests_configuration and tests_configuration["diffusion_tests"]["run_tests"]: - tmp_tests_configuration["diffusion_tests"].pop("run_tests") - analysis_results['diffusion_tests'] = \ - avalanche_tests.avalanche_tests(self, **tmp_tests_configuration["diffusion_tests"]) - if "component_analysis_tests" in tests_configuration and tests_configuration[ - "component_analysis_tests"]["run_tests"]: - analysis_results["component_analysis_tests"] = CipherComponentsAnalysis(self).component_analysis_tests() - if "algebraic_tests" in tests_configuration and tests_configuration["algebraic_tests"]["run_tests"]: - timeout = tests_configuration["algebraic_tests"]["timeout"] - analysis_results["algebraic_tests"] = algebraic_tests.algebraic_tests(self, timeout=timeout) - - return analysis_results def as_python_dictionary(self): return { diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 10ff42ba..fb3cf8ff 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -34,7 +34,7 @@ class CipherComponentsAnalysis: def __init__(self, cipher): - self.cipher = cipher + self._cipher = cipher def component_analysis_tests(self): """ @@ -49,7 +49,7 @@ def component_analysis_tests(self): """ all_variables_names = [] - for cipher_round in self.cipher.rounds_as_list: + for cipher_round in self._cipher.rounds_as_list: for component in cipher_round.components: for id_link, bit_positions in zip(component.input_id_links, component.input_bit_positions): all_variables_names.extend([f'{id_link}_{i}' for i in bit_positions]) @@ -62,7 +62,7 @@ def component_analysis_tests(self): cipher_operations.pop("concatenate") for op in cipher_operations: for same_op_different_param in cipher_operations[op]: - result = select_properties_function(boolean_polynomial_ring, same_op_different_param) + result = self._select_properties_function(boolean_polynomial_ring, same_op_different_param) if result != {}: components_analysis.append(result) @@ -91,8 +91,8 @@ def get_all_operations(self): ['sbox', 'linear_layer', 'XOR', 'AND', 'MODADD', 'ROTATE', 'SHIFT'] """ tmp_cipher_operations = {} - for component in self.cipher.get_all_components(): - collect_component_operations(component, tmp_cipher_operations) + for component in self._cipher.get_all_components(): + self._collect_component_operations(component, tmp_cipher_operations) for operation in list(tmp_cipher_operations.keys()): if operation not in [LINEAR_LAYER, MIX_COLUMN, 'fsr']: @@ -106,10 +106,10 @@ def get_all_operations(self): tmp_cipher_operations[operation]["distinguisher"] = tmp_list tmp_cipher_operations[operation]["types"] = \ [[] for _ in range(len(tmp_cipher_operations[operation]["distinguisher"]))] - collect_components_with_the_same_operation(operation, tmp_cipher_operations) + self._collect_components_with_the_same_operation(operation, tmp_cipher_operations) cipher_operations = {} for operation in list(tmp_cipher_operations.keys()): - add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) + self._add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) return cipher_operations def print_component_analysis_as_radar_charts(self): @@ -144,7 +144,7 @@ def print_component_analysis_as_radar_charts(self): # remove XOR from results results_without_xor = [results[i] for i in range(len(results)) if results[i]["description"][0] != "XOR"] - results = remove_components_with_strings_as_values(results_without_xor) + results = self._remove_components_with_strings_as_values(results_without_xor) nb_plots = len(results) col = 2 @@ -155,7 +155,7 @@ def print_component_analysis_as_radar_charts(self): for plot_number in range(nb_plots): categories = list(results[plot_number]["properties"].keys()) - values = plot_first_line_of_data_frame(categories, plot_number, results) + values = self._plot_first_line_of_data_frame(categories, plot_number, results) values += values[:1] # necessary to fill the area # What will be the angle of each axis in the plot? (we divide the plot / number of variable) @@ -164,7 +164,7 @@ def print_component_analysis_as_radar_charts(self): angles += angles[:1] ax = plt.subplot(row, col, plot_number + 1, polar=True) - initialise_spider_plot(plot_number, results) + self._initialise_spider_plot(plot_number, results) # Draw one axe per variable + add labels plt.xticks(angles[:-1], categories, color='grey', size=8) @@ -198,191 +198,787 @@ def print_component_analysis_as_radar_charts(self): # Fill area ax.fill(angles, values, 'b', alpha=0.1) - fill_area(ax, categories, plot_number, positions, results) + self._fill_area(ax, categories, plot_number, positions, results) # Show the graph plt.subplots_adjust(left=0.25, bottom=0.1, right=0.7, top=0.95, wspace=0, hspace=0.96) # plt.show() + print("The radar chart can be plot with the build-in method plt.show()") return plt -def AND_as_boolean_function(component, boolean_polynomial_ring): - """ - Return a list of boolean polynomials corresponding to the output bits of a AND component. + def _AND_as_boolean_function(self, component, boolean_polynomial_ring): + """ + Return a list of boolean polynomials corresponding to the output bits of a AND component. - INPUT: + INPUT: - - ``component`` -- **Component object**; a component from the cipher - - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring + - ``component`` -- **Component object**; a component from the cipher + - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring - EXAMPLES:: + EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import (AND_as_boolean_function, - ....: generate_boolean_polynomial_ring_from_cipher) - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: and_component = fancy.get_component_from_id('and_0_8') - sage: boolean_polynomial_ring = generate_boolean_polynomial_ring_from_cipher(fancy) - sage: boolean_polynomials = AND_as_boolean_function(and_component, boolean_polynomial_ring) - sage: len(boolean_polynomials) - 12 - """ - number_of_inputs = len(component.input_id_links) - number_of_blocks = component.description[1] - output_bit_size = component.output_bit_size - variables_names = [] - variables_names_positions = {} - for input_number in range(number_of_inputs): - tmp = [component.input_id_links[input_number] + "_" + str(bit_position) - for bit_position in component.input_bit_positions[input_number]] - variables_names += tmp - if component.input_id_links[input_number] not in variables_names_positions: - variables_names_positions[component.input_id_links[input_number]] = \ - [tmp, component.input_bit_positions[input_number]] - else: # Keys are unique in a python dico, so need to handle 2 same entries in input_id_link ! - variables_names_positions[component.input_id_links[input_number]] = \ - [variables_names_positions[component.input_id_links[input_number]][0] + tmp, - variables_names_positions[component.input_id_links[input_number]][1] + - component.input_bit_positions[input_number]] - - component_as_bf = [] - for input_number in range(output_bit_size): - tmp = 1 - for block_number in range(number_of_blocks): - tmp *= boolean_polynomial_ring(variables_names[input_number + output_bit_size * block_number]) - component_as_bf.append(tmp) - - return component_as_bf - - -def MODADD_as_boolean_function(component, boolean_polynomial_ring): - """ - Return a list of boolean polynomials corresponding to the output bits of a MODADD component. + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: and_component = fancy.get_component_from_id('and_0_8') + sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._AND_as_boolean_function(and_component, boolean_polynomial_ring) + sage: len(boolean_polynomials) + 12 + """ + number_of_inputs = len(component.input_id_links) + number_of_blocks = component.description[1] + output_bit_size = component.output_bit_size + variables_names = [] + variables_names_positions = {} + for input_number in range(number_of_inputs): + tmp = [component.input_id_links[input_number] + "_" + str(bit_position) + for bit_position in component.input_bit_positions[input_number]] + variables_names += tmp + if component.input_id_links[input_number] not in variables_names_positions: + variables_names_positions[component.input_id_links[input_number]] = \ + [tmp, component.input_bit_positions[input_number]] + else: # Keys are unique in a python dico, so need to handle 2 same entries in input_id_link ! + variables_names_positions[component.input_id_links[input_number]] = \ + [variables_names_positions[component.input_id_links[input_number]][0] + tmp, + variables_names_positions[component.input_id_links[input_number]][1] + + component.input_bit_positions[input_number]] + + component_as_bf = [] + for input_number in range(output_bit_size): + tmp = 1 + for block_number in range(number_of_blocks): + tmp *= boolean_polynomial_ring(variables_names[input_number + output_bit_size * block_number]) + component_as_bf.append(tmp) + + return component_as_bf + + def _select_boolean_function(self, component, boolean_polynomial_ring): + if component.description[0] == "XOR": + return self._XOR_as_boolean_function(component, boolean_polynomial_ring) + elif component.description[0] == "AND": + return self._AND_as_boolean_function(component, boolean_polynomial_ring) + elif component.description[0] == "MODADD": + return self._MODADD_as_boolean_function(component, boolean_polynomial_ring) + else: + return "TODO(...)" - INPUT: - - ``component`` -- **Component object**; a component from the cipher - - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring + def _MODADD_as_boolean_function(self, component, boolean_polynomial_ring): + """ + Return a list of boolean polynomials corresponding to the output bits of a MODADD component. - EXAMPLES:: + INPUT: - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import (MODADD_as_boolean_function, - ....: generate_boolean_polynomial_ring_from_cipher) - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: modadd_component = fancy.get_component_from_id('modadd_1_9') - sage: boolean_polynomial_ring = generate_boolean_polynomial_ring_from_cipher(fancy) - sage: boolean_polynomials = MODADD_as_boolean_function(modadd_component, boolean_polynomial_ring) - sage: len(boolean_polynomials) - 6 - """ - number_of_inputs = len(component.input_id_links) - output_bit_size = component.output_bit_size - number_of_blocks = component.description[1] - variables_names = set_variables_names(component, number_of_inputs) + - ``component`` -- **Component object**; a component from the cipher + - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring - if number_of_blocks == 2: - component_as_boolean_function = calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, - variables_names) + EXAMPLES:: - elif number_of_blocks == 3: - component_as_boolean_function = calculate_carry_for_three_blocks(boolean_polynomial_ring, output_bit_size, - variables_names) - else: - raise ValueError( - f'Expression of the output bits of MODADD with {component.description[1]} inputs not implemented yet') + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: modadd_component = fancy.get_component_from_id('modadd_1_9') + sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._MODADD_as_boolean_function(modadd_component, boolean_polynomial_ring) + sage: len(boolean_polynomials) + 6 + """ + number_of_inputs = len(component.input_id_links) + output_bit_size = component.output_bit_size + number_of_blocks = component.description[1] + variables_names = self._set_variables_names(component, number_of_inputs) + + if number_of_blocks == 2: + component_as_boolean_function = self._calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, + variables_names) + + elif number_of_blocks == 3: + component_as_boolean_function = self._calculate_carry_for_three_blocks(boolean_polynomial_ring, output_bit_size, + variables_names) + else: + raise ValueError( + f'Expression of the output bits of MODADD with {component.description[1]} inputs not implemented yet') - return component_as_boolean_function + return component_as_boolean_function -def calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, variables_names): - component_as_boolean_function = [] - two_first_blocks = variables_names - carries = [0] - for input_number in range(output_bit_size): - tmp = 0 - carry_left_part = 1 - carry_right_part = 0 - for block_number in range(2): - tmp += boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) - carry_left_part *= \ - boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) - carry_right_part += \ - boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) - tmp += carries[input_number] - component_as_boolean_function.append(tmp) - carry = carry_left_part + carries[input_number] * carry_right_part - carries.append(carry) + def _calculate_carry_for_two_blocks(self, boolean_polynomial_ring, output_bit_size, variables_names): + component_as_boolean_function = [] + two_first_blocks = variables_names + carries = [0] + for input_number in range(output_bit_size): + tmp = 0 + carry_left_part = 1 + carry_right_part = 0 + for block_number in range(2): + tmp += boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) + carry_left_part *= \ + boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) + carry_right_part += \ + boolean_polynomial_ring(two_first_blocks[input_number + output_bit_size * block_number]) + tmp += carries[input_number] + component_as_boolean_function.append(tmp) + carry = carry_left_part + carries[input_number] * carry_right_part + carries.append(carry) - return component_as_boolean_function + return component_as_boolean_function -def calculate_carry_for_three_blocks(boolean_polynomial_ring, output_bit_size, variables_names): - two_first_blocks = variables_names[:2 * output_bit_size] - component_as_boolean_function = calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, - two_first_blocks) - # Handling the MODADD of first 2 block with the last block - two_remaining_blocks = component_as_boolean_function + variables_names[-output_bit_size:] - component_as_boolean_function = calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, - two_remaining_blocks) + def _calculate_carry_for_three_blocks(self, boolean_polynomial_ring, output_bit_size, variables_names): + two_first_blocks = variables_names[:2 * output_bit_size] + component_as_boolean_function = self._calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, + two_first_blocks) + # Handling the MODADD of first 2 block with the last block + two_remaining_blocks = component_as_boolean_function + variables_names[-output_bit_size:] + component_as_boolean_function = self._calculate_carry_for_two_blocks(boolean_polynomial_ring, output_bit_size, + two_remaining_blocks) - return component_as_boolean_function + return component_as_boolean_function -def set_variables_names(component, number_of_inputs): - variables_names = [] - for input_number in range(number_of_inputs): - temporary_variables_names = [component.input_id_links[input_number] + "_" + str(bit_position) - for bit_position in component.input_bit_positions[input_number]] - variables_names += temporary_variables_names + def _set_variables_names(self, component, number_of_inputs): + variables_names = [] + for input_number in range(number_of_inputs): + temporary_variables_names = [component.input_id_links[input_number] + "_" + str(bit_position) + for bit_position in component.input_bit_positions[input_number]] + variables_names += temporary_variables_names - return variables_names + return variables_names -def XOR_as_boolean_function(component, boolean_polynomial_ring): - """ - Return a list of boolean polynomials corresponding to the output bits of a XOR component. + def _XOR_as_boolean_function(self, component, boolean_polynomial_ring): + """ + Return a list of boolean polynomials corresponding to the output bits of a XOR component. - INPUT: + INPUT: - - ``component`` -- **Component object**; a component from the cipher - - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring + - ``component`` -- **Component object**; a component from the cipher + - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring - EXAMPLES:: + EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import (XOR_as_boolean_function, - ....: generate_boolean_polynomial_ring_from_cipher) - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: xor_component = fancy.get_component_from_id('xor_2_7') - sage: boolean_polynomial_ring = generate_boolean_polynomial_ring_from_cipher(fancy) - sage: boolean_polynomials = XOR_as_boolean_function(xor_component, boolean_polynomial_ring) - sage: len(boolean_polynomials) - 12 - """ - number_of_inputs = len(component.input_id_links) - number_of_blocks = component.description[1] - output_bit_size = component.output_bit_size - variables_names = [] - variables_names_positions = {} - for i in range(number_of_inputs): - tmp = [component.input_id_links[i] + "_" + str(j) for j in component.input_bit_positions[i]] - variables_names += tmp - if component.input_id_links[i] not in variables_names_positions: - variables_names_positions[component.input_id_links[i]] = [tmp, component.input_bit_positions[i]] - else: # Keys are unique in a python dico, so need to handle 2 same entries in input_id_link ! - variables_names_positions[component.input_id_links[i]] = \ - [variables_names_positions[component.input_id_links[i]][0] + tmp, - variables_names_positions[component.input_id_links[i]][1] + component.input_bit_positions[i]] - - component_as_bf = [] - for i in range(output_bit_size): - tmp = 0 - for j in range(number_of_blocks): - tmp += boolean_polynomial_ring(variables_names[i + output_bit_size * j]) - component_as_bf.append(tmp) - - return component_as_bf + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: xor_component = fancy.get_component_from_id('xor_2_7') + sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._XOR_as_boolean_function(xor_component, boolean_polynomial_ring) + sage: len(boolean_polynomials) + 12 + """ + number_of_inputs = len(component.input_id_links) + number_of_blocks = component.description[1] + output_bit_size = component.output_bit_size + variables_names = [] + variables_names_positions = {} + for i in range(number_of_inputs): + tmp = [component.input_id_links[i] + "_" + str(j) for j in component.input_bit_positions[i]] + variables_names += tmp + if component.input_id_links[i] not in variables_names_positions: + variables_names_positions[component.input_id_links[i]] = [tmp, component.input_bit_positions[i]] + else: # Keys are unique in a python dico, so need to handle 2 same entries in input_id_link ! + variables_names_positions[component.input_id_links[i]] = \ + [variables_names_positions[component.input_id_links[i]][0] + tmp, + variables_names_positions[component.input_id_links[i]][1] + component.input_bit_positions[i]] + + component_as_bf = [] + for i in range(output_bit_size): + tmp = 0 + for j in range(number_of_blocks): + tmp += boolean_polynomial_ring(variables_names[i + output_bit_size * j]) + component_as_bf.append(tmp) + + return component_as_bf + + def _select_properties_function(self, boolean_polynomial_ring, operation): + component = operation[0] + if component.type == SBOX: + return self._sbox_properties(operation) + if (component.type == LINEAR_LAYER) or (component.type == MIX_COLUMN): + return self._linear_layer_properties(operation) + if (component.type == WORD_OPERATION) and (component.description[0] == "ROTATE"): + return self._linear_layer_properties(operation) + if (component.type == WORD_OPERATION) and (component.description[0] == "SHIFT"): + return self._linear_layer_properties(operation) + if (component.type == WORD_OPERATION) and (component.description[0] == "XOR"): + return self._word_operation_properties(operation, boolean_polynomial_ring) + if (component.type == WORD_OPERATION) and (component.description[0] == "AND"): + return self._word_operation_properties(operation, boolean_polynomial_ring) + if (component.type == WORD_OPERATION) and (component.description[0] == "MODADD"): + return self._word_operation_properties(operation, boolean_polynomial_ring) + if component.type == 'fsr': + return self._fsr_properties(operation) + + if component.type == WORD_OPERATION: + print(f"TODO : {component.description[0]}") + return {} + else: + print(f"TODO : {component.type}") + return {} + + def _is_mds(self, component): + """ + A matrix is MDS if and only if all the minors (determinants of square submatrices) are non-zero + + INPUT: + + - ``component`` -- **Component object**; a component from the cipher + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.twofish_block_cipher import TwofishBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: twofish = TwofishBlockCipher(number_of_rounds=2) + sage: mix_column_component = twofish.get_component_from_id('mix_column_0_19') + sage: CipherComponentsAnalysis(twofish)._is_mds(mix_column_component) + True + + sage: from claasp.ciphers.block_ciphers.skinny_block_cipher import SkinnyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: skinny = SkinnyBlockCipher(block_bit_size=128, key_bit_size=384, number_of_rounds=40) + sage: mix_column_component = skinny.get_component_from_id('mix_column_0_31') + sage: CipherComponentsAnalysis(skinny)._is_mds(mix_column_component) + False + + sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: aes = AESBlockCipher(number_of_rounds=3) + sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') + sage: CipherComponentsAnalysis(aes)._is_mds(mix_column_component) + True + """ + + description = component.description + final_mtr, _ = self._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + component.input_bit_size, component.output_bit_size) + + num_rows, num_cols = final_mtr.dimensions() + for size in range(1, min(num_rows, num_cols) + 1): + for i in range(num_rows - size + 1): + for j in range(num_cols - size + 1): + submatrix = final_mtr[i:i + size, j:j + size] + if submatrix.is_singular(): + return False + return True + + def _instantiate_matrix_over_correct_field(self, matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): + """ + sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: midori = MidoriBlockCipher(number_of_rounds=2) + sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') + sage: description = mix_column_component.description + sage: mc_matrix, _ = CipherComponentsAnalysis(midori)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + + sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: midori = MidoriBlockCipher(number_of_rounds=2) + sage: mix_column_component = midori.get_component_from_id('mix_column_0_21') + sage: description = mix_column_component.description + sage: mc_matrix, _ = CipherComponentsAnalysis(midori)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + + """ + + G = PolynomialRing(GF(2), 'x') + x = G.gen() + irr_poly = int_to_poly(polynomial_as_int, word_size, x) + if irr_poly: + F = GF(2 ** word_size, name='a', modulus=irr_poly) + else: + F = GF(2 ** word_size) + a = F.gen() + input_word_size = input_bit_size // word_size + output_word_size = output_bit_size // word_size + mtr = [[0 for _ in range(input_word_size)] for _ in range(output_word_size)] + + for i in range(output_word_size): + for j in range(input_word_size): + mtr[i][j] = int_to_poly(matrix[i][j], word_size, a) + final_mtr = Matrix(F, mtr) + + return final_mtr, F + + def _field_element_matrix_to_integer_matrix(self, matrix): + """ + Converts a matrix of field elements to the corresponding integer matrix representation + + INPUT: + + - ``matrix`` -- **Matrix object**; a matrix whose entries are field elements + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: aes = AESBlockCipher(number_of_rounds=3) + sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') + sage: description = mix_column_component.description + sage: mc_matrix, _ = CipherComponentsAnalysis(aes)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + sage: mc_matrix + [ a a + 1 1 1] + [ 1 a a + 1 1] + [ 1 1 a a + 1] + [a + 1 1 1 a] + sage: CipherComponentsAnalysis(aes)._field_element_matrix_to_integer_matrix(mc_matrix) + [2 3 1 1] + [1 2 3 1] + [1 1 2 3] + [3 1 1 2] + """ + + int_matrix = [] + for i in range(matrix.nrows()): + for j in range(matrix.ncols()): + int_matrix.append(matrix[i][j].integer_representation()) + + return Matrix(matrix.nrows(), matrix.ncols(), int_matrix) + + def _word_operation_properties(self, operation, boolean_polynomial_ring): + """ + Return a dictionary containing some properties of word operation component. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: modadd_component = fancy.component_from(1, 9) + sage: operation = [modadd_component, 2, ['modadd_1_9', 'modadd_1_10']] + sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + sage: d = CipherComponentsAnalysis(fancy)._word_operation_properties(operation, boolean_polynomial_ring) + sage: d["properties"]["degree"]["value"] + 4.5 + """ + component = operation[0] + component_as_dictionary = {"type": component.type, "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, "description": component.description, + "number_of_occurrences": operation[1], "component_id_list": operation[2]} + component_as_boolean_function = self._select_boolean_function(component, boolean_polynomial_ring) + + # Adding some properties of boolean function : + degree_list = [f.degree() for f in component_as_boolean_function] + degree_average = sum(degree_list) / len(degree_list) + numbers_of_terms = [len(f.terms()) for f in component_as_boolean_function] + numbers_of_terms_average = sum(numbers_of_terms) / len(numbers_of_terms) + numbers_of_variables = [f.nvariables() for f in component_as_boolean_function] + numbers_of_variables_average = sum(numbers_of_variables) / len(numbers_of_variables) + component_as_dictionary["properties"] = {} + component_as_dictionary["properties"]["degree"] = { + "value": degree_average, + "min_possible_value": 1, + "max_possible_value": component.input_bit_size + } + component_as_dictionary["properties"]["nterms"] = { + "value": numbers_of_terms_average, + "min_possible_value": 1, + "max_possible_value": max(numbers_of_terms) + } + component_as_dictionary["properties"]["nvariables"] = { + "value": numbers_of_variables_average, + "min_possible_value": 1, + "max_possible_value": component.input_bit_size + } + + return component_as_dictionary + + def _generate_boolean_polynomial_ring_from_cipher(self): + """ + Return the boolean polynomial ring for which the variables correspond to all input bits of each cipher component. + + INPUT: + + - ``cipher`` -- **Cipher object**; a cipher instance + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + """ + all_variables_names = [] + for cipher_round in self._cipher.rounds_as_list: + for component in cipher_round.components: + for i in range(len(component.input_id_links)): + all_variables_names += [component.input_id_links[i] + "_" + str(bit_position) + for bit_position in component.input_bit_positions[i]] + + all_variables_names = list(set(all_variables_names)) + + return BooleanPolynomialRing(len(all_variables_names), all_variables_names) + + def _collect_components_with_the_same_operation(self, operation, tmp_cipher_operations): + for component in tmp_cipher_operations[operation]["all"]: + for index, distinguisher in enumerate(tmp_cipher_operations[operation]["distinguisher"]): + if component.type == WORD_OPERATION: + tmp = (component.input_bit_size, component.description[1]) + elif component.type in [LINEAR_LAYER, MIX_COLUMN]: + tmp = component.description + else: + tmp = tuple(component.description) + if tmp == distinguisher: + tmp_cipher_operations[operation]["types"][index].append(component) + + def _add_attributes_to_operation(self, cipher_operations, operation, tmp_cipher_operations): + for components in tmp_cipher_operations[operation]["types"]: + base_component = components[0] + number_of_occurrences = len(components) + ids = [components[i].id for i in range(len(components))] + if operation not in cipher_operations.keys(): + cipher_operations[operation] = [] + cipher_operations[operation].append([base_component, number_of_occurrences, ids]) + + def _collect_component_operations(self, component, tmp_cipher_operations): + if component.type == WORD_OPERATION: + if component.description[0] not in list(tmp_cipher_operations.keys()): + tmp_cipher_operations[component.description[0]] = {"all": [], "distinguisher": []} + tmp_cipher_operations[component.description[0]]["all"].append(component) + tmp_cipher_operations[component.description[0]]["distinguisher"].append( + (component.input_bit_size, component.description[1])) + elif component.type in [LINEAR_LAYER, MIX_COLUMN]: + if component.type not in list(tmp_cipher_operations.keys()): + tmp_cipher_operations[component.type] = {"all": [], "distinguisher": []} + tmp_cipher_operations[component.type]["all"].append(component) + if component.description not in tmp_cipher_operations[component.type]["distinguisher"]: + tmp_cipher_operations[component.type]["distinguisher"].append(component.description) + elif component.type not in [INTERMEDIATE_OUTPUT, CIPHER_OUTPUT, CONSTANT]: + if component.type not in list(tmp_cipher_operations.keys()): + tmp_cipher_operations[component.type] = {"all": [], "distinguisher": []} + tmp_cipher_operations[component.type]["all"].append(component) + tmp_cipher_operations[component.type]["distinguisher"].append(tuple(component.description)) + + def _linear_layer_properties(self, operation): + """ + Return a dictionary containing some properties of the linear layer operation under study. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + + EXAMPLES:: + + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.components.rotate_component import Rotate + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: rot_component = Rotate(1, 11, ['sbox_1_1', 'sbox_1_2'], [[2, 3], [0, 1, 2, 3]], 6, -3) + sage: operation = [rot_component, 1, ['rot_1_11']] + sage: d = CipherComponentsAnalysis(fancy)._linear_layer_properties(operation) + sage: d["properties"]["differential_branch_number"]["value"] + 2 + """ + component = operation[0] + dictio = {"type": component.type, "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, "description": component.description, + "bin_matrix": binary_matrix_of_linear_component(component), "number_of_occurrences": operation[1], + "component_id_list": operation[2], "properties": {}} + + # Adding some properties of the linear layer : + dictio["properties"]["order"] = { + "value": self._order_of_linear_component(component), + "min_possible_value": 1, + "max_possible_value": pow(2, component.input_bit_size) - 1 + } + if component.input_bit_size <= 32: + dictio["properties"]["differential_branch_number"] = {"value": branch_number(component, 'differential', 'bit'), + "min_possible_value": 0, + "max_possible_value": component.input_bit_size} + dictio["properties"]["linear_branch_number"] = {"value": branch_number(component, 'linear', 'bit'), + "min_possible_value": 0, + "max_possible_value": component.input_bit_size} + else: + dictio["properties"]["differential_branch_number"] = { + "value": "input bit size too large", + "min_possible_value": 0, + "max_possible_value": component.input_bit_size + } + dictio["properties"]["linear_branch_number"] = { + "value": "input bit size too large", + "min_possible_value": 0, + "max_possible_value": component.input_bit_size + } + + return dictio + + def _order_of_linear_component(self, component): + """ + Return the multiplicative order of a linear component + + INPUT: + + - ``component`` -- **Component object**; a component from the cipher + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: rot_component = fancy.get_component_from_id('rot_1_11') + sage: CipherComponentsAnalysis(fancy)._order_of_linear_component(rot_component) + 2 + """ + binary_matrix = binary_matrix_of_linear_component(component) + if not binary_matrix: + raise TypeError(f'Cannot compute the binary matrix of {component.id}') + try: + return binary_matrix.multiplicative_order() + except Exception: + return 0 + + def _sbox_properties(self, operation): + """ + Return a dictionary containing some properties of Sbox component. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + + EXAMPLES:: + + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: from claasp.components.sbox_component import SBOX + sage: sbox_component = SBOX(0, 0, ['plaintext'], [[0, 1, 2, 3]], 4, [0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15]) + sage: operation = [sbox_component, 12, ['sbox_0_0', 'sbox_0_1', 'sbox_0_2', 'sbox_0_3', 'sbox_0_4', 'sbox_0_5', + ....: 'sbox_1_0', 'sbox_1_1', 'sbox_1_2', 'sbox_1_3', 'sbox_1_4', 'sbox_1_5']] + sage: d = CipherComponentsAnalysis(fancy)._sbox_properties(operation) + sage: d["properties"]["boomerang_uniformity"]["value"] + 16 + + """ + component = operation[0] + sbox_table = component.description + sbox = SBox(sbox_table) + dictio = {"type": component.type, "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, "description": component.description, + "number_of_occurrences": operation[1], "component_id_list": operation[2], "properties": {}} + + # Adding some properties of sbox : + dictio["properties"]["boomerang_uniformity"] = { + "value": sbox.boomerang_uniformity(), + "min_possible_value": 2, + "max_possible_value": pow(2, component.input_bit_size) + } + dictio["properties"]["differential_uniformity"] = { + "value": sbox.differential_uniformity(), + "min_possible_value": 2, + "max_possible_value": pow(2, component.input_bit_size) + } + dictio["properties"]["is_apn"] = { + "value": sbox.is_apn(), + "min_possible_value": 0, + "max_possible_value": 1 + } + dictio["properties"]["is_balanced"] = { + "value": sbox.is_balanced(), + "min_possible_value": 0, + "max_possible_value": 1 + } + dictio["properties"]["differential_branch_number"] = { + "value": sbox.differential_branch_number(), + "min_possible_value": 0, + "max_possible_value": component.input_bit_size + } + dictio["properties"]["linear_branch_number"] = { + "value": sbox.linear_branch_number(), + "min_possible_value": 0, + "max_possible_value": component.input_bit_size + } + dictio["properties"]["nonlinearity"] = { + "value": sbox.nonlinearity(), + "min_possible_value": 0, + "max_possible_value": pow(2, component.input_bit_size - 1) + } + dictio["properties"]["max_degree"] = { + "value": sbox.max_degree(), + "min_possible_value": 0, + "max_possible_value": component.input_bit_size + } + + return dictio + + def _fsr_properties(self, operation): + """ + Return a dictionary containing some properties of fsr component. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + + EXAMPLES:: + + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: from claasp.components.fsr_component import FSR + sage: fsr_component = FSR(0,0, ["input"],[[0,1,2,3]],4,[[[4, [[1,[0]],[3,[1]],[2,[2]]]]],4]) + sage: operation= [fsr_component, 1, ['fsr_0_0']] + sage: dictionary = CipherComponentsAnalysis(fancy)._fsr_properties(operation) + sage: dictionary['fsr_word_size'] == 4 + True + sage: dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] + True + + sage: from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: e0 = BluetoothStreamCipherE0(keystream_bit_len=2) + sage: dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() + sage: assert dictionary[8]["number_of_registers"] == 4 + sage: dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' # first lfsr + True + sage: dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] + True + + sage: from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher + sage: triv = TriviumStreamCipher(keystream_bit_len=1) + sage: dictionary = CipherComponentsAnalysis(triv).component_analysis_tests() + sage: dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] + True + """ + component = operation[0] + fsr_word_size = component.description[1] + component_dict = { + "type": component.type, + "input_bit_size": component.input_bit_size, + "output_bit_size": component.output_bit_size, + "fsr_word_size": fsr_word_size, + "description": component.description, + "number_of_occurrences": operation[1], + "component_id_list": operation[2] + } + + desc = component.description + registers_len = [] + registers_type = [] + registers_feedback_relation_deg = [] + lfsr_connection_polynomials = [] + lin_flag = False + + for r in desc[0]: + registers_len.append(r[0]) + d = max(len(term) if fsr_word_size == 1 else len(term[1]) for term in r[1]) + registers_feedback_relation_deg.append(d) + reg_type = 'non-linear' if d > 1 else 'linear' + registers_type.append(reg_type) + lin_flag = lin_flag or (reg_type == 'linear') + + component_dict.update({ + 'number_of_registers': len(registers_len), + 'length_of_registers': registers_len, + 'type_of_registers': registers_type, + 'degree_of_feedback_relation_of_registers': registers_feedback_relation_deg + }) + + if lin_flag: + lfsrs_primitive = [] + exp = 0 + R = GF(2)['x'] if fsr_word_size == 1 else GF(2 ** fsr_word_size)['x'] + x = R.gens() + a = R.construction()[1].gen() + + for index, r in enumerate(desc[0]): + exp = exp + registers_len[index] + if registers_type[index] == 'linear': + p = R(1) + for term in r[1]: + if fsr_word_size == 1: + p = p + x[0] ** (exp - term[0]) + else: # case: word based LFSR + m = 0 + cf = "{0:b}".format(term[0]) + for i in range(len(cf)): + if cf[i] == '1': m = m + pow(a, len(cf) - 1 - i) + m = m * x[0] ** (exp - term[1][0]) + p += m + lfsr_connection_polynomials.append(str(p)) + lfsrs_primitive.append(p.is_primitive()) + component_dict.update({ + "lfsr_connection_polynomials": lfsr_connection_polynomials, + "lfsr_polynomials_are_primitive": lfsrs_primitive + }) + return component_dict + + def _fill_area(self, ax, categories, plot_number, positions, results): + text = "" + for category in categories: + if category in ["boomerang_uniformity", "differential_uniformity"]: + text += f"{category} = {int(results[plot_number]['properties'][category]['value'])} " \ + f"(best is {results[plot_number]['properties'][category]['min_possible_value']}, " \ + f"worst is {results[plot_number]['properties'][category]['max_possible_value']})\n" + else: + text += f"{category} = {int(results[plot_number]['properties'][category]['value'])} " \ + f"(best is {results[plot_number]['properties'][category]['max_possible_value']}, " \ + f"worst is {results[plot_number]['properties'][category]['min_possible_value']})\n" + plt.text(0, positions[len(categories)], text, transform=ax.transAxes, size="small") + + def _initialise_spider_plot(self, plot_number, results): + is_component_word_operation = results[plot_number]["type"] == "word_operation" + is_component_rotate_or_shift = results[plot_number]["description"][0] in ["ROTATE", "SHIFT"] + if is_component_word_operation and is_component_rotate_or_shift: + title = results[plot_number]["description"][0] + f" {results[plot_number]['description'][1]}" + \ + f", {results[plot_number]['input_bit_size']} input bit size" + elif is_component_word_operation and not is_component_rotate_or_shift: + title = results[plot_number]["description"][0] + \ + f", {results[plot_number]['description'][1]} inputs of {results[plot_number]['output_bit_size']} bits" + else: + title = results[plot_number]["type"] + f", {results[plot_number]['input_bit_size']} input bit size" + title += f", {results[plot_number]['number_of_occurrences']} occurrences" + plt.gca().set_title(title) + + def _plot_first_line_of_data_frame(self, categories, plot_number, results): + # We need to repeat the first value to close the circular graph: + values = [] + for category in categories: + if isinstance(results[plot_number]["properties"][category]["value"], str): + continue + elif results[plot_number]["properties"][category]["value"] not in [False, True]: + if category in ["boomerang_uniformity", "differential_uniformity"]: + values.append(1 - (log2(results[plot_number]["properties"][category]["value"]) / log2( + results[plot_number]["properties"][category]["max_possible_value"]))) + else: + values.append(log2(results[plot_number]["properties"][category]["value"]) / log2( + results[plot_number]["properties"][category]["max_possible_value"])) + else: + values.append(results[plot_number]["properties"][category]["value"] / results[plot_number][ + "properties"][category]["max_possible_value"]) + return values + + def _remove_components_with_strings_as_values(self, results_without_xor): + results = [] + str_in_list = [] + for i in range(len(results_without_xor)): + for result_property in list(results_without_xor[i]["properties"].keys()): + str_in_list.append(isinstance(results_without_xor[i]["properties"][result_property]["value"], str)) + if True not in str_in_list: + results.append(results_without_xor[i]) + return results def binary_matrix_of_linear_component(component): @@ -455,129 +1051,6 @@ def branch_number(component, type, format): return min(calculate_weights_for_mix_column(component, format, type)) -def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): - """ - sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field, field_element_matrix_to_integer_matrix - sage: midori = MidoriBlockCipher(number_of_rounds=2) - sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') - sage: description = mix_column_component.description - sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - - sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field, field_element_matrix_to_integer_matrix - sage: midori = MidoriBlockCipher(number_of_rounds=2) - sage: mix_column_component = midori.get_component_from_id('mix_column_0_21') - sage: description = mix_column_component.description - sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - - """ - - G = PolynomialRing(GF(2), 'x') - x = G.gen() - irr_poly = int_to_poly(polynomial_as_int, word_size, x) - if irr_poly: - F = GF(2 ** word_size, name='a', modulus=irr_poly) - else: - F = GF(2 ** word_size) - a = F.gen() - input_word_size = input_bit_size // word_size - output_word_size = output_bit_size // word_size - mtr = [[0 for _ in range(input_word_size)] for _ in range(output_word_size)] - - for i in range(output_word_size): - for j in range(input_word_size): - mtr[i][j] = int_to_poly(matrix[i][j], word_size, a) - final_mtr = Matrix(F, mtr) - - return final_mtr, F - - -def is_mds(component): - """ - A matrix is MDS if and only if all the minors (determinants of square submatrices) are non-zero - - INPUT: - - - ``component`` -- **Component object**; a component from the cipher - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.twofish_block_cipher import TwofishBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import is_mds - sage: twofish = TwofishBlockCipher(number_of_rounds=2) - sage: mix_column_component = twofish.get_component_from_id('mix_column_0_19') - sage: is_mds(mix_column_component) - True - - sage: from claasp.ciphers.block_ciphers.skinny_block_cipher import SkinnyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import is_mds - sage: skinny = SkinnyBlockCipher(block_bit_size=128, key_bit_size=384, number_of_rounds=40) - sage: mix_column_component = skinny.get_component_from_id('mix_column_0_31') - sage: is_mds(mix_column_component) - False - - sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import is_mds - sage: aes = AESBlockCipher(number_of_rounds=3) - sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') - sage: is_mds(mix_column_component) - True - """ - - description = component.description - final_mtr, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - component.input_bit_size, component.output_bit_size) - - num_rows, num_cols = final_mtr.dimensions() - for size in range(1, min(num_rows, num_cols) + 1): - for i in range(num_rows - size + 1): - for j in range(num_cols - size + 1): - submatrix = final_mtr[i:i + size, j:j + size] - if submatrix.is_singular(): - return False - return True - - -def field_element_matrix_to_integer_matrix(matrix): - """ - Converts a matrix of field elements to the corresponding integer matrix representation - - INPUT: - - - ``matrix`` -- **Matrix object**; a matrix whose entries are field elements - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field, field_element_matrix_to_integer_matrix - sage: aes = AESBlockCipher(number_of_rounds=3) - sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') - sage: description = mix_column_component.description - sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - sage: mc_matrix - [ a a + 1 1 1] - [ 1 a a + 1 1] - [ 1 1 a a + 1] - [a + 1 1 1 a] - sage: field_element_matrix_to_integer_matrix(mc_matrix) - [2 3 1 1] - [1 2 3 1] - [1 1 2 3] - [3 1 1 2] - """ - - int_matrix = [] - for i in range(matrix.nrows()): - for j in range(matrix.ncols()): - int_matrix.append(matrix[i][j].integer_representation()) - - return Matrix(matrix.nrows(), matrix.ncols(), int_matrix) - - def get_inverse_matrix_in_integer_representation(component): """ Returns the inverse matrix in its integer representation @@ -709,490 +1182,3 @@ def int_to_poly(integer_value, word_size, variable): z = z + pow(variable, i) return z - - -def select_properties_function(boolean_polynomial_ring, operation): - component = operation[0] - if component.type == SBOX: - return sbox_properties(operation) - if (component.type == LINEAR_LAYER) or (component.type == MIX_COLUMN): - return linear_layer_properties(operation) - if (component.type == WORD_OPERATION) and (component.description[0] == "ROTATE"): - return linear_layer_properties(operation) - if (component.type == WORD_OPERATION) and (component.description[0] == "SHIFT"): - return linear_layer_properties(operation) - if (component.type == WORD_OPERATION) and (component.description[0] == "XOR"): - return word_operation_properties(operation, boolean_polynomial_ring) - if (component.type == WORD_OPERATION) and (component.description[0] == "AND"): - return word_operation_properties(operation, boolean_polynomial_ring) - if (component.type == WORD_OPERATION) and (component.description[0] == "MODADD"): - return word_operation_properties(operation, boolean_polynomial_ring) - if component.type == 'fsr': - return fsr_properties(operation) - - if component.type == WORD_OPERATION: - print(f"TODO : {component.description[0]}") - return {} - else: - print(f"TODO : {component.type}") - return {} - - -def generate_boolean_polynomial_ring_from_cipher(cipher): - """ - Return the boolean polynomial ring for which the variables correspond to all input bits of each cipher component. - - INPUT: - - - ``cipher`` -- **Cipher object**; a cipher instance - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import generate_boolean_polynomial_ring_from_cipher - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: boolean_polynomial_ring = generate_boolean_polynomial_ring_from_cipher(fancy) - """ - all_variables_names = [] - for cipher_round in cipher.rounds_as_list: - for component in cipher_round.components: - for i in range(len(component.input_id_links)): - all_variables_names += [component.input_id_links[i] + "_" + str(bit_position) - for bit_position in component.input_bit_positions[i]] - - all_variables_names = list(set(all_variables_names)) - - return BooleanPolynomialRing(len(all_variables_names), all_variables_names) - -def collect_components_with_the_same_operation(operation, tmp_cipher_operations): - for component in tmp_cipher_operations[operation]["all"]: - for index, distinguisher in enumerate(tmp_cipher_operations[operation]["distinguisher"]): - if component.type == WORD_OPERATION: - tmp = (component.input_bit_size, component.description[1]) - elif component.type in [LINEAR_LAYER, MIX_COLUMN]: - tmp = component.description - else: - tmp = tuple(component.description) - if tmp == distinguisher: - tmp_cipher_operations[operation]["types"][index].append(component) - - -def add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations): - for components in tmp_cipher_operations[operation]["types"]: - base_component = components[0] - number_of_occurrences = len(components) - ids = [components[i].id for i in range(len(components))] - if operation not in cipher_operations.keys(): - cipher_operations[operation] = [] - cipher_operations[operation].append([base_component, number_of_occurrences, ids]) - - -def collect_component_operations(component, tmp_cipher_operations): - if component.type == WORD_OPERATION: - if component.description[0] not in list(tmp_cipher_operations.keys()): - tmp_cipher_operations[component.description[0]] = {"all": [], "distinguisher": []} - tmp_cipher_operations[component.description[0]]["all"].append(component) - tmp_cipher_operations[component.description[0]]["distinguisher"].append( - (component.input_bit_size, component.description[1])) - elif component.type in [LINEAR_LAYER, MIX_COLUMN]: - if component.type not in list(tmp_cipher_operations.keys()): - tmp_cipher_operations[component.type] = {"all": [], "distinguisher": []} - tmp_cipher_operations[component.type]["all"].append(component) - if component.description not in tmp_cipher_operations[component.type]["distinguisher"]: - tmp_cipher_operations[component.type]["distinguisher"].append(component.description) - elif component.type not in [INTERMEDIATE_OUTPUT, CIPHER_OUTPUT, CONSTANT]: - if component.type not in list(tmp_cipher_operations.keys()): - tmp_cipher_operations[component.type] = {"all": [], "distinguisher": []} - tmp_cipher_operations[component.type]["all"].append(component) - tmp_cipher_operations[component.type]["distinguisher"].append(tuple(component.description)) - - -def linear_layer_properties(operation): - """ - Return a dictionary containing some properties of the linear layer operation under study. - - INPUT: - - - ``operation`` -- **list**; a list containing: - - * a component with the operation under study - * number of occurrences of the operation - * list of ids of all the components with the same underlying operation - - EXAMPLES:: - - sage: from claasp.cipher_modules.component_analysis_tests import linear_layer_properties - sage: from claasp.components.rotate_component import Rotate - sage: rot_component = Rotate(1, 11, ['sbox_1_1', 'sbox_1_2'], [[2, 3], [0, 1, 2, 3]], 6, -3) - sage: operation = [rot_component, 1, ['rot_1_11']] - sage: d = linear_layer_properties(operation) - sage: d["properties"]["differential_branch_number"]["value"] - 2 - """ - component = operation[0] - dictio = {"type": component.type, "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, "description": component.description, - "bin_matrix": binary_matrix_of_linear_component(component), "number_of_occurrences": operation[1], - "component_id_list": operation[2], "properties": {}} - - # Adding some properties of the linear layer : - dictio["properties"]["order"] = { - "value": order_of_linear_component(component), - "min_possible_value": 1, - "max_possible_value": pow(2, component.input_bit_size) - 1 - } - if component.input_bit_size <= 32: - dictio["properties"]["differential_branch_number"] = {"value": branch_number(component, 'differential', 'bit'), - "min_possible_value": 0, - "max_possible_value": component.input_bit_size} - dictio["properties"]["linear_branch_number"] = {"value": branch_number(component, 'linear', 'bit'), - "min_possible_value": 0, - "max_possible_value": component.input_bit_size} - else: - dictio["properties"]["differential_branch_number"] = { - "value": "input bit size too large", - "min_possible_value": 0, - "max_possible_value": component.input_bit_size - } - dictio["properties"]["linear_branch_number"] = { - "value": "input bit size too large", - "min_possible_value": 0, - "max_possible_value": component.input_bit_size - } - - return dictio - - -def order_of_linear_component(component): - """ - Return the multiplicative order of a linear component - - INPUT: - - - ``component`` -- **Component object**; a component from the cipher - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import order_of_linear_component - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: rot_component = fancy.get_component_from_id('rot_1_11') - sage: order_of_linear_component(rot_component) - 2 - """ - binary_matrix = binary_matrix_of_linear_component(component) - if not binary_matrix: - raise TypeError(f'Cannot compute the binary matrix of {component.id}') - try: - return binary_matrix.multiplicative_order() - except Exception: - return 0 - - -def fsr_properties(operation): - """ - Return a dictionary containing some properties of fsr component. - - INPUT: - - - ``operation`` -- **list**; a list containing: - - * a component with the operation under study - * number of occurrences of the operation - * list of ids of all the components with the same underlying operation - - EXAMPLES:: - - sage: from claasp.cipher_modules.component_analysis_tests import fsr_properties - sage: from claasp.components.fsr_component import FSR - sage: fsr_component = FSR(0,0, ["input"],[[0,1,2,3]],4,[[[4, [[1,[0]],[3,[1]],[2,[2]]]]],4]) - sage: operation= [fsr_component, 1, ['fsr_0_0']] - sage: dictionary = fsr_properties(operation) - sage: dictionary['fsr_word_size'] == 4 - True - sage: dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] - True - - sage: from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 - sage: from claasp.cipher_modules.component_analysis_tests import component_analysis_tests - sage: e0 = BluetoothStreamCipherE0(keystream_bit_len=2) - sage: dictionary = e0.component_analysis_tests() - sage: assert dictionary[8]["number_of_registers"] == 4 - sage: dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' # first lfsr - True - sage: dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] - True - - sage: from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher - sage: triv = TriviumStreamCipher(keystream_bit_len=1) - sage: dictionary = triv.component_analysis_tests() - sage: dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] - True - """ - component = operation[0] - fsr_word_size = component.description[1] - component_dict = { - "type": component.type, - "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, - "fsr_word_size": fsr_word_size, - "description": component.description, - "number_of_occurrences": operation[1], - "component_id_list": operation[2] - } - - desc = component.description - registers_len = [] - registers_type = [] - registers_feedback_relation_deg = [] - lfsr_connection_polynomials = [] - lin_flag = False - - for r in desc[0]: - registers_len.append(r[0]) - d = max(len(term) if fsr_word_size == 1 else len(term[1]) for term in r[1]) - registers_feedback_relation_deg.append(d) - reg_type = 'non-linear' if d > 1 else 'linear' - registers_type.append(reg_type) - lin_flag = lin_flag or (reg_type == 'linear') - - component_dict.update({ - 'number_of_registers': len(registers_len), - 'length_of_registers': registers_len, - 'type_of_registers': registers_type, - 'degree_of_feedback_relation_of_registers': registers_feedback_relation_deg - }) - - if lin_flag: - lfsrs_primitive = [] - exp = 0 - R = GF(2)['x'] if fsr_word_size == 1 else GF(2 ** fsr_word_size)['x'] - x = R.gens() - a = R.construction()[1].gen() - - for index, r in enumerate(desc[0]): - exp = exp + registers_len[index] - if registers_type[index] == 'linear': - p = R(1) - for term in r[1]: - if fsr_word_size == 1: - p = p + x[0] ** (exp - term[0]) - else: # case: word based LFSR - m = 0 - cf = "{0:b}".format(term[0]) - for i in range(len(cf)): - if cf[i] == '1': m = m + pow(a, len(cf) - 1 - i) - m = m * x[0] ** (exp - term[1][0]) - p += m - lfsr_connection_polynomials.append(str(p)) - lfsrs_primitive.append(p.is_primitive()) - component_dict.update({ - "lfsr_connection_polynomials": lfsr_connection_polynomials, - "lfsr_polynomials_are_primitive": lfsrs_primitive - }) - return component_dict - - -def sbox_properties(operation): - """ - Return a dictionary containing some properties of Sbox component. - - INPUT: - - - ``operation`` -- **list**; a list containing: - - * a component with the operation under study - * number of occurrences of the operation - * list of ids of all the components with the same underlying operation - - EXAMPLES:: - - sage: from claasp.cipher_modules.component_analysis_tests import sbox_properties - sage: from claasp.components.sbox_component import SBOX - sage: sbox_component = SBOX(0, 0, ['plaintext'], [[0, 1, 2, 3]], 4, [0, 2, 4, 6, 8, 10, 12, 14, 1, 3, 5, 7, 9, 11, 13, 15]) - sage: operation = [sbox_component, 12, ['sbox_0_0', 'sbox_0_1', 'sbox_0_2', 'sbox_0_3', 'sbox_0_4', 'sbox_0_5', - ....: 'sbox_1_0', 'sbox_1_1', 'sbox_1_2', 'sbox_1_3', 'sbox_1_4', 'sbox_1_5']] - sage: d = sbox_properties(operation) - sage: d["properties"]["boomerang_uniformity"]["value"] - 16 - - """ - component = operation[0] - sbox_table = component.description - sbox = SBox(sbox_table) - dictio = {"type": component.type, "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, "description": component.description, - "number_of_occurrences": operation[1], "component_id_list": operation[2], "properties": {}} - - # Adding some properties of sbox : - dictio["properties"]["boomerang_uniformity"] = { - "value": sbox.boomerang_uniformity(), - "min_possible_value": 2, - "max_possible_value": pow(2, component.input_bit_size) - } - dictio["properties"]["differential_uniformity"] = { - "value": sbox.differential_uniformity(), - "min_possible_value": 2, - "max_possible_value": pow(2, component.input_bit_size) - } - dictio["properties"]["is_apn"] = { - "value": sbox.is_apn(), - "min_possible_value": 0, - "max_possible_value": 1 - } - dictio["properties"]["is_balanced"] = { - "value": sbox.is_balanced(), - "min_possible_value": 0, - "max_possible_value": 1 - } - dictio["properties"]["differential_branch_number"] = { - "value": sbox.differential_branch_number(), - "min_possible_value": 0, - "max_possible_value": component.input_bit_size - } - dictio["properties"]["linear_branch_number"] = { - "value": sbox.linear_branch_number(), - "min_possible_value": 0, - "max_possible_value": component.input_bit_size - } - dictio["properties"]["nonlinearity"] = { - "value": sbox.nonlinearity(), - "min_possible_value": 0, - "max_possible_value": pow(2, component.input_bit_size - 1) - } - dictio["properties"]["max_degree"] = { - "value": sbox.max_degree(), - "min_possible_value": 0, - "max_possible_value": component.input_bit_size - } - - return dictio - - -def word_operation_properties(operation, boolean_polynomial_ring): - """ - Return a dictionary containing some properties of word operation component. - - INPUT: - - - ``operation`` -- **list**; a list containing: - - * a component with the operation under study - * number of occurrences of the operation - * list of ids of all the components with the same underlying operation - - ``boolean_polynomial_ring`` -- **Boolean Polynomial Ring object**; a boolean polynomial ring - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import (word_operation_properties, - ....: generate_boolean_polynomial_ring_from_cipher) - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: modadd_component = fancy.component_from(1, 9) - sage: operation = [modadd_component, 2, ['modadd_1_9', 'modadd_1_10']] - sage: boolean_polynomial_ring = generate_boolean_polynomial_ring_from_cipher(fancy) - sage: d = word_operation_properties(operation, boolean_polynomial_ring) - sage: d["properties"]["degree"]["value"] - 4.5 - """ - component = operation[0] - component_as_dictionary = {"type": component.type, "input_bit_size": component.input_bit_size, - "output_bit_size": component.output_bit_size, "description": component.description, - "number_of_occurrences": operation[1], "component_id_list": operation[2]} - component_as_boolean_function = select_boolean_function(component, boolean_polynomial_ring) - - # Adding some properties of boolean function : - degree_list = [f.degree() for f in component_as_boolean_function] - degree_average = sum(degree_list) / len(degree_list) - numbers_of_terms = [len(f.terms()) for f in component_as_boolean_function] - numbers_of_terms_average = sum(numbers_of_terms) / len(numbers_of_terms) - numbers_of_variables = [f.nvariables() for f in component_as_boolean_function] - numbers_of_variables_average = sum(numbers_of_variables) / len(numbers_of_variables) - component_as_dictionary["properties"] = {} - component_as_dictionary["properties"]["degree"] = { - "value": degree_average, - "min_possible_value": 1, - "max_possible_value": component.input_bit_size - } - component_as_dictionary["properties"]["nterms"] = { - "value": numbers_of_terms_average, - "min_possible_value": 1, - "max_possible_value": max(numbers_of_terms) - } - component_as_dictionary["properties"]["nvariables"] = { - "value": numbers_of_variables_average, - "min_possible_value": 1, - "max_possible_value": component.input_bit_size - } - - return component_as_dictionary - - -def select_boolean_function(component, boolean_polynomial_ring): - if component.description[0] == "XOR": - return XOR_as_boolean_function(component, boolean_polynomial_ring) - elif component.description[0] == "AND": - return AND_as_boolean_function(component, boolean_polynomial_ring) - elif component.description[0] == "MODADD": - return MODADD_as_boolean_function(component, boolean_polynomial_ring) - else: - return "TODO(...)" - - -def fill_area(ax, categories, plot_number, positions, results): - text = "" - for category in categories: - if category in ["boomerang_uniformity", "differential_uniformity"]: - text += f"{category} = {int(results[plot_number]['properties'][category]['value'])} " \ - f"(best is {results[plot_number]['properties'][category]['min_possible_value']}, " \ - f"worst is {results[plot_number]['properties'][category]['max_possible_value']})\n" - else: - text += f"{category} = {int(results[plot_number]['properties'][category]['value'])} " \ - f"(best is {results[plot_number]['properties'][category]['max_possible_value']}, " \ - f"worst is {results[plot_number]['properties'][category]['min_possible_value']})\n" - plt.text(0, positions[len(categories)], text, transform=ax.transAxes, size="small") - - -def initialise_spider_plot(plot_number, results): - is_component_word_operation = results[plot_number]["type"] == "word_operation" - is_component_rotate_or_shift = results[plot_number]["description"][0] in ["ROTATE", "SHIFT"] - if is_component_word_operation and is_component_rotate_or_shift: - title = results[plot_number]["description"][0] + f" {results[plot_number]['description'][1]}" + \ - f", {results[plot_number]['input_bit_size']} input bit size" - elif is_component_word_operation and not is_component_rotate_or_shift: - title = results[plot_number]["description"][0] + \ - f", {results[plot_number]['description'][1]} inputs of {results[plot_number]['output_bit_size']} bits" - else: - title = results[plot_number]["type"] + f", {results[plot_number]['input_bit_size']} input bit size" - title += f", {results[plot_number]['number_of_occurrences']} occurrences" - plt.gca().set_title(title) - - -def plot_first_line_of_data_frame(categories, plot_number, results): - # We need to repeat the first value to close the circular graph: - values = [] - for category in categories: - if isinstance(results[plot_number]["properties"][category]["value"], str): - continue - elif results[plot_number]["properties"][category]["value"] not in [False, True]: - if category in ["boomerang_uniformity", "differential_uniformity"]: - values.append(1 - (log2(results[plot_number]["properties"][category]["value"]) / log2( - results[plot_number]["properties"][category]["max_possible_value"]))) - else: - values.append(log2(results[plot_number]["properties"][category]["value"]) / log2( - results[plot_number]["properties"][category]["max_possible_value"])) - else: - values.append(results[plot_number]["properties"][category]["value"] / results[plot_number][ - "properties"][category]["max_possible_value"]) - return values - - -def remove_components_with_strings_as_values(results_without_xor): - results = [] - str_in_list = [] - for i in range(len(results_without_xor)): - for result_property in list(results_without_xor[i]["properties"].keys()): - str_in_list.append(isinstance(results_without_xor[i]["properties"][result_property]["value"], str)) - if True not in str_in_list: - results.append(results_without_xor[i]) - return results diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index e17cd347..467a342d 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1,2 @@ -Search.setIndex({docnames:["cipher","cipher_modules/algebraic_tests","cipher_modules/avalanche_tests","cipher_modules/code_generator","cipher_modules/component_analysis_tests","cipher_modules/continuous_tests","cipher_modules/evaluator","cipher_modules/generic_bit_based_c_functions","cipher_modules/generic_functions","cipher_modules/generic_functions_continuous_diffusion_analysis","cipher_modules/generic_functions_vectorized_bit","cipher_modules/generic_functions_vectorized_byte","cipher_modules/generic_word_based_c_functions","cipher_modules/graph_generator","cipher_modules/inverse_cipher","cipher_modules/models/algebraic/algebraic_model","cipher_modules/models/algebraic/boolean_polynomial_ring","cipher_modules/models/algebraic/constraints","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions","cipher_modules/models/cp/cp_model","cipher_modules/models/cp/cp_models/cp_cipher_model","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_linear_model","cipher_modules/models/milp/milp_model","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_cipher_model","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_linear_model","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model","cipher_modules/models/milp/utils/config","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes","cipher_modules/models/milp/utils/milp_name_mappings","cipher_modules/models/milp/utils/mzn_predicates","cipher_modules/models/milp/utils/utils","cipher_modules/models/minizinc/minizinc_model","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model","cipher_modules/models/sat/cms_models/cms_cipher_model","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_linear_model","cipher_modules/models/sat/sat_model","cipher_modules/models/sat/sat_models/sat_cipher_model","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_linear_model","cipher_modules/models/sat/utils/mzn_predicates","cipher_modules/models/sat/utils/n_window_heuristic_helper","cipher_modules/models/sat/utils/utils","cipher_modules/models/smt/smt_model","cipher_modules/models/smt/smt_models/smt_cipher_model","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_linear_model","cipher_modules/models/smt/utils/utils","cipher_modules/models/utils","cipher_modules/neural_network_tests","cipher_modules/statistical_tests/dataset_generator","cipher_modules/statistical_tests/dieharder_statistical_tests","cipher_modules/statistical_tests/input_data_example","cipher_modules/statistical_tests/nist_statistical_tests","cipher_modules/tester","ciphers/block_ciphers/aes_block_cipher","ciphers/block_ciphers/bea1_block_cipher","ciphers/block_ciphers/constant_block_cipher","ciphers/block_ciphers/des_block_cipher","ciphers/block_ciphers/des_exact_key_length_block_cipher","ciphers/block_ciphers/fancy_block_cipher","ciphers/block_ciphers/hight_block_cipher","ciphers/block_ciphers/identity_block_cipher","ciphers/block_ciphers/kasumi_block_cipher","ciphers/block_ciphers/lblock_block_cipher","ciphers/block_ciphers/lea_block_cipher","ciphers/block_ciphers/lowmc_block_cipher","ciphers/block_ciphers/lowmc_generate_matrices","ciphers/block_ciphers/midori_block_cipher","ciphers/block_ciphers/present_block_cipher","ciphers/block_ciphers/qarmav2_block_cipher","ciphers/block_ciphers/raiden_block_cipher","ciphers/block_ciphers/rc5_block_cipher","ciphers/block_ciphers/simon_block_cipher","ciphers/block_ciphers/skinny_block_cipher","ciphers/block_ciphers/sparx_block_cipher","ciphers/block_ciphers/speck_block_cipher","ciphers/block_ciphers/tea_block_cipher","ciphers/block_ciphers/threefish_block_cipher","ciphers/block_ciphers/twofish_block_cipher","ciphers/block_ciphers/xtea_block_cipher","ciphers/hash_functions/blake2_hash_function","ciphers/hash_functions/blake_hash_function","ciphers/hash_functions/md5_hash_function","ciphers/hash_functions/sha1_hash_function","ciphers/hash_functions/sha2_hash_function","ciphers/hash_functions/whirlpool_hash_function","ciphers/permutations/ascon_permutation","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation","ciphers/permutations/ascon_sbox_sigma_permutation","ciphers/permutations/chacha_permutation","ciphers/permutations/gift_permutation","ciphers/permutations/gift_sbox_permutation","ciphers/permutations/gimli_permutation","ciphers/permutations/gimli_sbox_permutation","ciphers/permutations/grain_core_permutation","ciphers/permutations/keccak_invertible_permutation","ciphers/permutations/keccak_permutation","ciphers/permutations/keccak_sbox_permutation","ciphers/permutations/photon_permutation","ciphers/permutations/salsa_permutation","ciphers/permutations/sparkle_permutation","ciphers/permutations/spongent_pi_fsr_permutation","ciphers/permutations/spongent_pi_permutation","ciphers/permutations/spongent_pi_precomputation_permutation","ciphers/permutations/tinyjambu_32bits_word_permutation","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation","ciphers/permutations/tinyjambu_permutation","ciphers/permutations/util","ciphers/permutations/xoodoo_invertible_permutation","ciphers/permutations/xoodoo_permutation","ciphers/permutations/xoodoo_sbox_permutation","ciphers/stream_ciphers/a5_1_stream_cipher","ciphers/stream_ciphers/bivium_stream_cipher","ciphers/stream_ciphers/bluetooth_stream_cipher_e0","ciphers/stream_ciphers/chacha_stream_cipher","ciphers/stream_ciphers/snow3g_stream_cipher","ciphers/stream_ciphers/trivium_stream_cipher","ciphers/stream_ciphers/zuc_stream_cipher","ciphers/toys/toyspn1","ciphers/toys/toyspn2","component","components/and_component","components/cipher_output_component","components/concatenate_component","components/constant_component","components/fsr_component","components/intermediate_output_component","components/linear_layer_component","components/mix_column_component","components/modadd_component","components/modsub_component","components/modular_component","components/multi_input_non_linear_logical_operator_component","components/not_component","components/or_component","components/permutation_component","components/reverse_component","components/rotate_component","components/sbox_component","components/shift_component","components/shift_rows_component","components/sigma_component","components/theta_keccak_component","components/theta_xoodoo_component","components/variable_rotate_component","components/variable_shift_component","components/word_permutation_component","components/xor_component","compound_xor_differential_cipher","editor","index","input","references","round","rounds","utils/integer","utils/integer_functions","utils/sage_scripts","utils/sequence_operations","utils/templates","utils/utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":9,sphinx:56},filenames:["cipher.rst","cipher_modules/algebraic_tests.rst","cipher_modules/avalanche_tests.rst","cipher_modules/code_generator.rst","cipher_modules/component_analysis_tests.rst","cipher_modules/continuous_tests.rst","cipher_modules/evaluator.rst","cipher_modules/generic_bit_based_c_functions.rst","cipher_modules/generic_functions.rst","cipher_modules/generic_functions_continuous_diffusion_analysis.rst","cipher_modules/generic_functions_vectorized_bit.rst","cipher_modules/generic_functions_vectorized_byte.rst","cipher_modules/generic_word_based_c_functions.rst","cipher_modules/graph_generator.rst","cipher_modules/inverse_cipher.rst","cipher_modules/models/algebraic/algebraic_model.rst","cipher_modules/models/algebraic/boolean_polynomial_ring.rst","cipher_modules/models/algebraic/constraints.rst","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions.rst","cipher_modules/models/cp/cp_model.rst","cipher_modules/models/cp/cp_models/cp_cipher_model.rst","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_linear_model.rst","cipher_modules/models/milp/milp_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_cipher_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_linear_model.rst","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model.rst","cipher_modules/models/milp/utils/config.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.rst","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.rst","cipher_modules/models/milp/utils/milp_name_mappings.rst","cipher_modules/models/milp/utils/mzn_predicates.rst","cipher_modules/models/milp/utils/utils.rst","cipher_modules/models/minizinc/minizinc_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_cipher_model.rst","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_linear_model.rst","cipher_modules/models/sat/sat_model.rst","cipher_modules/models/sat/sat_models/sat_cipher_model.rst","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_linear_model.rst","cipher_modules/models/sat/utils/mzn_predicates.rst","cipher_modules/models/sat/utils/n_window_heuristic_helper.rst","cipher_modules/models/sat/utils/utils.rst","cipher_modules/models/smt/smt_model.rst","cipher_modules/models/smt/smt_models/smt_cipher_model.rst","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_linear_model.rst","cipher_modules/models/smt/utils/utils.rst","cipher_modules/models/utils.rst","cipher_modules/neural_network_tests.rst","cipher_modules/statistical_tests/dataset_generator.rst","cipher_modules/statistical_tests/dieharder_statistical_tests.rst","cipher_modules/statistical_tests/input_data_example.rst","cipher_modules/statistical_tests/nist_statistical_tests.rst","cipher_modules/tester.rst","ciphers/block_ciphers/aes_block_cipher.rst","ciphers/block_ciphers/bea1_block_cipher.rst","ciphers/block_ciphers/constant_block_cipher.rst","ciphers/block_ciphers/des_block_cipher.rst","ciphers/block_ciphers/des_exact_key_length_block_cipher.rst","ciphers/block_ciphers/fancy_block_cipher.rst","ciphers/block_ciphers/hight_block_cipher.rst","ciphers/block_ciphers/identity_block_cipher.rst","ciphers/block_ciphers/kasumi_block_cipher.rst","ciphers/block_ciphers/lblock_block_cipher.rst","ciphers/block_ciphers/lea_block_cipher.rst","ciphers/block_ciphers/lowmc_block_cipher.rst","ciphers/block_ciphers/lowmc_generate_matrices.rst","ciphers/block_ciphers/midori_block_cipher.rst","ciphers/block_ciphers/present_block_cipher.rst","ciphers/block_ciphers/qarmav2_block_cipher.rst","ciphers/block_ciphers/raiden_block_cipher.rst","ciphers/block_ciphers/rc5_block_cipher.rst","ciphers/block_ciphers/simon_block_cipher.rst","ciphers/block_ciphers/skinny_block_cipher.rst","ciphers/block_ciphers/sparx_block_cipher.rst","ciphers/block_ciphers/speck_block_cipher.rst","ciphers/block_ciphers/tea_block_cipher.rst","ciphers/block_ciphers/threefish_block_cipher.rst","ciphers/block_ciphers/twofish_block_cipher.rst","ciphers/block_ciphers/xtea_block_cipher.rst","ciphers/hash_functions/blake2_hash_function.rst","ciphers/hash_functions/blake_hash_function.rst","ciphers/hash_functions/md5_hash_function.rst","ciphers/hash_functions/sha1_hash_function.rst","ciphers/hash_functions/sha2_hash_function.rst","ciphers/hash_functions/whirlpool_hash_function.rst","ciphers/permutations/ascon_permutation.rst","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation.rst","ciphers/permutations/ascon_sbox_sigma_permutation.rst","ciphers/permutations/chacha_permutation.rst","ciphers/permutations/gift_permutation.rst","ciphers/permutations/gift_sbox_permutation.rst","ciphers/permutations/gimli_permutation.rst","ciphers/permutations/gimli_sbox_permutation.rst","ciphers/permutations/grain_core_permutation.rst","ciphers/permutations/keccak_invertible_permutation.rst","ciphers/permutations/keccak_permutation.rst","ciphers/permutations/keccak_sbox_permutation.rst","ciphers/permutations/photon_permutation.rst","ciphers/permutations/salsa_permutation.rst","ciphers/permutations/sparkle_permutation.rst","ciphers/permutations/spongent_pi_fsr_permutation.rst","ciphers/permutations/spongent_pi_permutation.rst","ciphers/permutations/spongent_pi_precomputation_permutation.rst","ciphers/permutations/tinyjambu_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_permutation.rst","ciphers/permutations/util.rst","ciphers/permutations/xoodoo_invertible_permutation.rst","ciphers/permutations/xoodoo_permutation.rst","ciphers/permutations/xoodoo_sbox_permutation.rst","ciphers/stream_ciphers/a5_1_stream_cipher.rst","ciphers/stream_ciphers/bivium_stream_cipher.rst","ciphers/stream_ciphers/bluetooth_stream_cipher_e0.rst","ciphers/stream_ciphers/chacha_stream_cipher.rst","ciphers/stream_ciphers/snow3g_stream_cipher.rst","ciphers/stream_ciphers/trivium_stream_cipher.rst","ciphers/stream_ciphers/zuc_stream_cipher.rst","ciphers/toys/toyspn1.rst","ciphers/toys/toyspn2.rst","component.rst","components/and_component.rst","components/cipher_output_component.rst","components/concatenate_component.rst","components/constant_component.rst","components/fsr_component.rst","components/intermediate_output_component.rst","components/linear_layer_component.rst","components/mix_column_component.rst","components/modadd_component.rst","components/modsub_component.rst","components/modular_component.rst","components/multi_input_non_linear_logical_operator_component.rst","components/not_component.rst","components/or_component.rst","components/permutation_component.rst","components/reverse_component.rst","components/rotate_component.rst","components/sbox_component.rst","components/shift_component.rst","components/shift_rows_component.rst","components/sigma_component.rst","components/theta_keccak_component.rst","components/theta_xoodoo_component.rst","components/variable_rotate_component.rst","components/variable_shift_component.rst","components/word_permutation_component.rst","components/xor_component.rst","compound_xor_differential_cipher.rst","editor.rst","index.rst","input.rst","references.rst","round.rst","rounds.rst","utils/integer.rst","utils/integer_functions.rst","utils/sage_scripts.rst","utils/sequence_operations.rst","utils/templates.rst","utils/utils.rst"],objects:{"":[[0,0,0,"-","cipher"],[150,0,0,"-","component"],[178,0,0,"-","compound_xor_differential_cipher"],[179,0,0,"-","editor"],[181,0,0,"-","input"],[183,0,0,"-","round"],[184,0,0,"-","rounds"]],"cipher.Cipher":[[0,2,1,"","add_AND_component"],[0,2,1,"","add_FSR_component"],[0,2,1,"","add_MODADD_component"],[0,2,1,"","add_MODSUB_component"],[0,2,1,"","add_NOT_component"],[0,2,1,"","add_OR_component"],[0,2,1,"","add_SBOX_component"],[0,2,1,"","add_SHIFT_component"],[0,2,1,"","add_XOR_component"],[0,2,1,"","add_cipher_output_component"],[0,2,1,"","add_concatenate_component"],[0,2,1,"","add_constant_component"],[0,2,1,"","add_intermediate_output_component"],[0,2,1,"","add_linear_layer_component"],[0,2,1,"","add_mix_column_component"],[0,2,1,"","add_permutation_component"],[0,2,1,"","add_reverse_component"],[0,2,1,"","add_rotate_component"],[0,2,1,"","add_round"],[0,2,1,"","add_round_key_output_component"],[0,2,1,"","add_round_output_component"],[0,2,1,"","add_shift_rows_component"],[0,2,1,"","add_sigma_component"],[0,2,1,"","add_suffix_to_components"],[0,2,1,"","add_theta_keccak_component"],[0,2,1,"","add_theta_xoodoo_component"],[0,2,1,"","add_variable_rotate_component"],[0,2,1,"","add_variable_shift_component"],[0,2,1,"","add_word_permutation_component"],[0,2,1,"","algebraic_tests"],[0,2,1,"","analyze_cipher"],[0,2,1,"","as_python_dictionary"],[0,2,1,"","avalanche_probability_vectors"],[0,2,1,"","cipher_inverse"],[0,2,1,"","cipher_partial_inverse"],[0,2,1,"","component_analysis_tests"],[0,2,1,"","component_from"],[0,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[0,2,1,"","continuous_avalanche_factor"],[0,2,1,"","continuous_diffusion_factor"],[0,2,1,"","continuous_diffusion_tests"],[0,2,1,"","continuous_neutrality_measure_for_bit_j"],[0,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[0,2,1,"","convert_to_compound_xor_cipher"],[0,3,1,"","current_round"],[0,3,1,"","current_round_number"],[0,3,1,"","current_round_number_of_components"],[0,2,1,"","delete_generated_evaluate_c_shared_library"],[0,2,1,"","diffusion_tests"],[0,2,1,"","evaluate"],[0,2,1,"","evaluate_using_c"],[0,2,1,"","evaluate_vectorized"],[0,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[0,3,1,"","family_name"],[0,3,1,"","file_name"],[0,2,1,"","find_good_input_difference_for_neural_distinguisher"],[0,2,1,"","find_impossible_property"],[0,2,1,"","generate_bit_based_c_code"],[0,2,1,"","generate_csv_report"],[0,2,1,"","generate_evaluate_c_code_shared_library"],[0,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[0,2,1,"","generate_word_based_c_code"],[0,2,1,"","get_all_components"],[0,2,1,"","get_all_components_ids"],[0,2,1,"","get_all_inputs_bit_positions"],[0,2,1,"","get_component_from_id"],[0,2,1,"","get_components_in_round"],[0,2,1,"","get_current_component_id"],[0,2,1,"","get_model"],[0,2,1,"","get_number_of_components_in_round"],[0,2,1,"","get_partial_cipher"],[0,2,1,"","get_round_from_component_id"],[0,2,1,"","get_sizes_of_components_by_type"],[0,3,1,"","id"],[0,2,1,"","impossible_differential_search"],[0,3,1,"","inputs"],[0,3,1,"","inputs_bit_size"],[0,2,1,"","inputs_size_to_dict"],[0,2,1,"","is_algebraically_secure"],[0,2,1,"","is_andrx"],[0,2,1,"","is_arx"],[0,2,1,"","is_power_of_2_word_based"],[0,2,1,"","is_shift_arx"],[0,2,1,"","is_spn"],[0,2,1,"","make_cipher_id"],[0,2,1,"","make_file_name"],[0,2,1,"","neural_network_blackbox_distinguisher_tests"],[0,2,1,"","neural_network_differential_distinguisher_tests"],[0,3,1,"","number_of_rounds"],[0,3,1,"","output_bit_size"],[0,2,1,"","polynomial_system"],[0,2,1,"","polynomial_system_at_round"],[0,2,1,"","print"],[0,2,1,"","print_as_python_dictionary"],[0,2,1,"","print_as_python_dictionary_to_file"],[0,2,1,"","print_component_analysis_as_radar_charts"],[0,2,1,"","print_evaluation_python_code"],[0,2,1,"","print_evaluation_python_code_to_file"],[0,2,1,"","print_input_information"],[0,3,1,"","reference_code"],[0,2,1,"","remove_key_schedule"],[0,2,1,"","remove_round_component"],[0,2,1,"","remove_round_component_from_id"],[0,3,1,"","rounds"],[0,3,1,"","rounds_as_list"],[0,2,1,"","run_autond_pipeline"],[0,2,1,"","set_file_name"],[0,2,1,"","set_id"],[0,2,1,"","set_inputs"],[0,2,1,"","sort_cipher"],[0,2,1,"","test_against_reference_code"],[0,2,1,"","test_vector_check"],[0,2,1,"","train_gohr_neural_distinguisher"],[0,2,1,"","train_neural_distinguisher"],[0,3,1,"","type"],[0,2,1,"","zero_correlation_linear_search"]],"cipher_modules.algebraic_tests":[[1,4,1,"","algebraic_tests"]],"cipher_modules.avalanche_tests":[[2,4,1,"","add_intermediate_output_components_id_to_dictionary"],[2,4,1,"","add_intermediate_output_rounds_id_to_dictionary"],[2,4,1,"","add_intermediate_output_values_to_dictionary"],[2,4,1,"","add_multicolumns_to_graph"],[2,4,1,"","avalanche_probability_vectors"],[2,4,1,"","avalanche_tests"],[2,4,1,"","calculate_average_difference"],[2,4,1,"","calculate_regular_difference"],[2,4,1,"","calculate_worst_input_differences"],[2,4,1,"","compute_criterion_from_avalanche_probability_vectors"],[2,4,1,"","generate_avalanche_probability_vectors"],[2,4,1,"","generate_graph_by_differences_positions"],[2,4,1,"","generate_heatmap_graphs_for_avalanche_tests"],[2,4,1,"","generate_inputs_prime"],[2,4,1,"","generate_random_inputs"],[2,4,1,"","get_average_criteria_by_round_input_output"],[2,4,1,"","get_average_criteria_list_by_output_tag"],[2,4,1,"","get_intermediate_output_names"],[2,4,1,"","init_dictionary_test_results"],[2,4,1,"","is_output"],[2,4,1,"","set_vector_dependence"],[2,4,1,"","set_vector_dependence_uniform"],[2,4,1,"","set_vector_entropy"],[2,4,1,"","set_vector_weight"]],"cipher_modules.code_generator":[[3,4,1,"","build_code_for_components"],[3,4,1,"","build_code_for_continuous_diffusion_analysis_components"],[3,4,1,"","build_continuous_diffusion_analysis_function_call"],[3,4,1,"","build_function_call"],[3,4,1,"","constant_to_bitstring"],[3,4,1,"","constant_to_repr"],[3,4,1,"","delete_generated_evaluate_c_shared_library"],[3,4,1,"","generate_bit_based_c_code"],[3,4,1,"","generate_bit_based_vectorized_python_code_string"],[3,4,1,"","generate_byte_based_vectorized_python_code_string"],[3,4,1,"","generate_evaluate_c_code_shared_library"],[3,4,1,"","generate_python_code_string"],[3,4,1,"","generate_python_code_string_for_continuous_diffusion_analysis"],[3,4,1,"","generate_word_based_c_code"],[3,4,1,"","get_cipher_output_component_bit_based_c_code"],[3,4,1,"","get_cipher_output_word_based_c_code"],[3,4,1,"","get_intermediate_output_component_bit_based_c_code"],[3,4,1,"","get_intermediate_output_word_based_c_code"],[3,4,1,"","get_number_of_inputs"],[3,4,1,"","get_padding_component_bit_based_c_code"],[3,4,1,"","get_rounds_bit_based_c_code"],[3,4,1,"","get_rounds_word_based_c_code"],[3,4,1,"","get_word_operation_component_bit_based_c_code"],[3,4,1,"","get_word_operation_word_based_c_code"],[3,4,1,"","prepare_input_bit_based_vectorized_python_code_string"],[3,4,1,"","prepare_input_byte_based_vectorized_python_code_string"],[3,4,1,"","update_intermediate_structure"]],"cipher_modules.component_analysis_tests":[[4,4,1,"","AND_as_boolean_function"],[4,4,1,"","MODADD_as_boolean_function"],[4,4,1,"","XOR_as_boolean_function"],[4,4,1,"","add_attributes_to_operation"],[4,4,1,"","binary_matrix_of_linear_component"],[4,4,1,"","branch_number"],[4,4,1,"","calculate_carry_for_three_blocks"],[4,4,1,"","calculate_carry_for_two_blocks"],[4,4,1,"","calculate_weights_for_linear_layer"],[4,4,1,"","calculate_weights_for_mix_column"],[4,4,1,"","collect_component_operations"],[4,4,1,"","collect_components_with_the_same_operation"],[4,4,1,"","component_analysis_tests"],[4,4,1,"","field_element_matrix_to_integer_matrix"],[4,4,1,"","fill_area"],[4,4,1,"","generate_boolean_polynomial_ring_from_cipher"],[4,4,1,"","get_all_operations"],[4,4,1,"","get_inverse_matrix_in_integer_representation"],[4,4,1,"","has_maximal_branch_number"],[4,4,1,"","initialise_spider_plot"],[4,4,1,"","instantiate_matrix_over_correct_field"],[4,4,1,"","int_to_poly"],[4,4,1,"","is_mds"],[4,4,1,"","linear_layer_properties"],[4,4,1,"","order_of_linear_component"],[4,4,1,"","plot_first_line_of_data_frame"],[4,4,1,"","print_component_analysis_as_radar_charts"],[4,4,1,"","remove_components_with_strings_as_values"],[4,4,1,"","sbox_properties"],[4,4,1,"","select_boolean_function"],[4,4,1,"","select_properties_function"],[4,4,1,"","set_variables_names"],[4,4,1,"","word_operation_properties"]],"cipher_modules.continuous_tests":[[5,4,1,"","add_beta_samples_to_final_result_from"],[5,4,1,"","continuous_avalanche_factor"],[5,4,1,"","continuous_diffusion_factor"],[5,4,1,"","continuous_diffusion_tests"],[5,4,1,"","continuous_neutrality_measure_for_bit_j"],[5,4,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[5,4,1,"","generate_beta_sample_output"],[5,4,1,"","incrementing_counters"],[5,4,1,"","init_final_result_structure"],[5,4,1,"","init_input_bits"]],"cipher_modules.evaluator":[[6,4,1,"","evaluate"],[6,4,1,"","evaluate_using_c"],[6,4,1,"","evaluate_vectorized"],[6,4,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"]],"cipher_modules.generic_functions":[[8,4,1,"","AND"],[8,4,1,"","MODADD"],[8,4,1,"","MODSUB"],[8,4,1,"","NOT"],[8,4,1,"","OR"],[8,4,1,"","ROTATE"],[8,4,1,"","ROTATE_BY_VARIABLE_AMOUNT"],[8,4,1,"","ROTATE_boolean_function"],[8,4,1,"","SHIFT"],[8,4,1,"","SHIFT_BY_VARIABLE_AMOUNT"],[8,4,1,"","SIGMA"],[8,4,1,"","THETA_KECCAK"],[8,4,1,"","THETA_XOODOO"],[8,4,1,"","XOR"],[8,4,1,"","XOR_boolean_function"],[8,4,1,"","add_padding"],[8,4,1,"","concatenate_bool_func"],[8,4,1,"","constant_bool_func"],[8,4,1,"","convert_polynomial_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","convert_x_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","fsr_binary"],[8,4,1,"","fsr_word"],[8,4,1,"","int_to_byte_array"],[8,4,1,"","linear_layer"],[8,4,1,"","merge_bits"],[8,4,1,"","mix_column_generalized"],[8,4,1,"","mix_column_generalized_bool_func"],[8,4,1,"","padding"],[8,4,1,"","sbox"],[8,4,1,"","sbox_bool_func"],[8,4,1,"","select_bits"],[8,4,1,"","set_from_hex_string"],[8,4,1,"","transform_GF2NMatrix_to_BinMatrix"]],"cipher_modules.generic_functions_continuous_diffusion_analysis":[[9,4,1,"","AND_continuous_diffusion_analysis"],[9,4,1,"","CONSTANT_continuous_diffusion_analysis"],[9,4,1,"","LINEAR_LAYER_continuous_diffusion_analysis"],[9,4,1,"","MIX_COLUMN_generalized_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis_two_words"],[9,4,1,"","MODSUB_continuous_diffusion_analysis"],[9,4,1,"","NOT_continuous_diffusion_analysis"],[9,4,1,"","OR_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_continuous_diffusion_analysis"],[9,4,1,"","SBOX_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_continuous_diffusion_analysis"],[9,4,1,"","SIGMA_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis_two_words"],[9,4,1,"","compute_sbox_precomputations"],[9,4,1,"","create_lookup_table_by_matrix"],[9,4,1,"","create_lookup_table_for_finite_field_element"],[9,4,1,"","extended_and_bit"],[9,4,1,"","extended_left_rotation_by_variable_amount"],[9,4,1,"","extended_left_shift_by_variable_amount"],[9,4,1,"","extended_not_bit"],[9,4,1,"","extended_one_left_rotation_iteration"],[9,4,1,"","extended_one_left_shift_iteration"],[9,4,1,"","extended_one_right_rotation_iteration"],[9,4,1,"","extended_one_right_shift_iteration"],[9,4,1,"","extended_right_rotation_by_variable_amount"],[9,4,1,"","extended_right_shift_by_variable_amount"],[9,4,1,"","extended_two_bit_multiplexer"],[9,4,1,"","get_mix_column_precomputations"],[9,4,1,"","get_sbox_precomputations"],[9,4,1,"","select_bits_continuous_diffusion_analysis"]],"cipher_modules.generic_functions_vectorized_bit":[[10,4,1,"","bit_vector_AND"],[10,4,1,"","bit_vector_CONCAT"],[10,4,1,"","bit_vector_MODADD"],[10,4,1,"","bit_vector_MODSUB"],[10,4,1,"","bit_vector_NOT"],[10,4,1,"","bit_vector_OR"],[10,4,1,"","bit_vector_ROTATE"],[10,4,1,"","bit_vector_SBOX"],[10,4,1,"","bit_vector_SHIFT"],[10,4,1,"","bit_vector_SHIFT_BY_VARIABLE_AMOUNT"],[10,4,1,"","bit_vector_XOR"],[10,4,1,"","bit_vector_linear_layer"],[10,4,1,"","bit_vector_mix_column"],[10,4,1,"","bit_vector_mix_column_poly0"],[10,4,1,"","bit_vector_print_as_hex_values"],[10,4,1,"","bit_vector_select_word"],[10,4,1,"","bit_vector_to_integer"],[10,4,1,"","print_component_info"]],"cipher_modules.generic_functions_vectorized_byte":[[11,4,1,"","byte_vector_AND"],[11,4,1,"","byte_vector_MODADD"],[11,4,1,"","byte_vector_MODSUB"],[11,4,1,"","byte_vector_NOT"],[11,4,1,"","byte_vector_OR"],[11,4,1,"","byte_vector_ROTATE"],[11,4,1,"","byte_vector_SBOX"],[11,4,1,"","byte_vector_SHIFT"],[11,4,1,"","byte_vector_SHIFT_BY_VARIABLE_AMOUNT"],[11,4,1,"","byte_vector_XOR"],[11,4,1,"","byte_vector_is_consecutive"],[11,4,1,"","byte_vector_linear_layer"],[11,4,1,"","byte_vector_mix_column"],[11,4,1,"","byte_vector_mix_column_poly0"],[11,4,1,"","byte_vector_print_as_hex_values"],[11,4,1,"","byte_vector_select_all_words"],[11,4,1,"","generate_formatted_inputs"],[11,4,1,"","print_component_info"]],"cipher_modules.graph_generator":[[13,4,1,"","create_networkx_graph_from_input_ids"],[13,4,1,"","split_cipher_graph_into_top_bottom"]],"cipher_modules.inverse_cipher":[[14,4,1,"","add_bit_to_bit_list"],[14,4,1,"","add_new_component_to_list"],[14,4,1,"","all_input_bits_available"],[14,4,1,"","all_output_bits_available"],[14,4,1,"","all_output_updated_bits_available"],[14,4,1,"","are_equal_components"],[14,4,1,"","are_there_enough_available_inputs_to_evaluate_component"],[14,4,1,"","are_there_enough_available_inputs_to_perform_inversion"],[14,4,1,"","are_these_bits_available"],[14,4,1,"","cipher_find_component"],[14,4,1,"","component_input_bits"],[14,4,1,"","component_inverse"],[14,4,1,"","component_output_bits"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_components"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_components"],[14,4,1,"","delete_orphan_links"],[14,4,1,"","equivalent_bits_in_common"],[14,4,1,"","evaluated_component"],[14,4,1,"","find_correct_order"],[14,4,1,"","find_correct_order_for_inversion"],[14,4,1,"","find_input_id_link_bits_equivalent"],[14,4,1,"","get_all_bit_names"],[14,4,1,"","get_all_components_with_the_same_input_id_link_and_input_bit_positions"],[14,4,1,"","get_all_equivalent_bits"],[14,4,1,"","get_available_output_components"],[14,4,1,"","get_cipher_components"],[14,4,1,"","get_component_from_id"],[14,4,1,"","get_equivalent_input_bit_from_output_bit"],[14,4,1,"","get_key_schedule_component_ids"],[14,4,1,"","get_most_recent_intermediate_output"],[14,4,1,"","get_output_components"],[14,4,1,"","get_relative_position"],[14,4,1,"","is_bit_adjacent_to_list_of_bits"],[14,4,1,"","is_bit_contained_in"],[14,4,1,"","is_intersection_of_input_id_links_null"],[14,4,1,"","is_output_bits_updated_equivalent_to_input_bits"],[14,4,1,"","is_possibly_invertible_component"],[14,4,1,"","order_input_id_links_for_modadd"],[14,4,1,"","remove_components_from_rounds"],[14,4,1,"","sort_cipher_graph"],[14,4,1,"","sort_input_id_links_and_input_bit_positions"],[14,4,1,"","topological_sort"],[14,4,1,"","update_available_bits_with_component_input_bits"],[14,4,1,"","update_available_bits_with_component_output_bits"],[14,4,1,"","update_input_links_from_rounds"],[14,4,1,"","update_output_bits"]],"cipher_modules.models":[[77,0,0,"-","utils"]],"cipher_modules.models.algebraic":[[15,0,0,"-","algebraic_model"],[16,0,0,"-","boolean_polynomial_ring"],[17,0,0,"-","constraints"]],"cipher_modules.models.algebraic.algebraic_model":[[15,1,1,"","AlgebraicModel"]],"cipher_modules.models.algebraic.algebraic_model.AlgebraicModel":[[15,2,1,"","connection_polynomials"],[15,2,1,"","connection_polynomials_at_round"],[15,2,1,"","is_algebraically_secure"],[15,2,1,"","nvars"],[15,2,1,"","polynomial_system"],[15,2,1,"","polynomial_system_at_round"],[15,2,1,"","ring"],[15,2,1,"","var_names"]],"cipher_modules.models.algebraic.boolean_polynomial_ring":[[16,4,1,"","is_boolean_polynomial_ring"]],"cipher_modules.models.algebraic.constraints":[[17,4,1,"","equality_polynomials"],[17,4,1,"","mod_addition_polynomials"],[17,4,1,"","mod_binary_operation_polynomials"],[17,4,1,"","mod_subtraction_polynomials"]],"cipher_modules.models.cp":[[19,0,0,"-","cp_model"]],"cipher_modules.models.cp.cp_model":[[19,1,1,"","CpModel"]],"cipher_modules.models.cp.cp_model.CpModel":[[19,2,1,"","add_solution_to_components_values"],[19,2,1,"","add_solutions_from_components_values"],[19,2,1,"","build_mix_column_truncated_table"],[19,2,1,"","calculate_bit_positions"],[19,2,1,"","calculate_bit_values"],[19,2,1,"","calculate_input_bit_positions"],[19,3,1,"","cipher"],[19,3,1,"","cipher_id"],[19,2,1,"","find_possible_number_of_active_sboxes"],[19,2,1,"","fix_variables_value_constraints"],[19,3,1,"","float_and_lat_values"],[19,2,1,"","format_component_value"],[19,2,1,"","get_command_for_solver_process"],[19,2,1,"","get_mix_column_all_inputs"],[19,2,1,"","get_total_weight"],[19,2,1,"","initialise_model"],[19,3,1,"","model_constraints"],[19,2,1,"","parse_solver_information"],[19,2,1,"","set_component_solution_value"],[19,2,1,"","solve"],[19,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models":[[20,0,0,"-","cp_cipher_model"],[21,0,0,"-","cp_deterministic_truncated_xor_differential_model"],[22,0,0,"-","cp_xor_differential_model"],[23,0,0,"-","cp_xor_differential_number_of_active_sboxes_model"],[24,0,0,"-","cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model"],[25,0,0,"-","cp_xor_linear_model"]],"cipher_modules.models.cp.cp_models.cp_cipher_model":[[20,1,1,"","CpCipherModel"]],"cipher_modules.models.cp.cp_models.cp_cipher_model.CpCipherModel":[[20,2,1,"","add_solution_to_components_values"],[20,2,1,"","add_solutions_from_components_values"],[20,2,1,"","build_cipher_model"],[20,2,1,"","build_mix_column_truncated_table"],[20,2,1,"","calculate_bit_positions"],[20,2,1,"","calculate_bit_values"],[20,2,1,"","calculate_input_bit_positions"],[20,3,1,"","cipher"],[20,3,1,"","cipher_id"],[20,2,1,"","final_constraints"],[20,2,1,"","find_possible_number_of_active_sboxes"],[20,2,1,"","fix_variables_value_constraints"],[20,3,1,"","float_and_lat_values"],[20,2,1,"","format_component_value"],[20,2,1,"","get_command_for_solver_process"],[20,2,1,"","get_mix_column_all_inputs"],[20,2,1,"","get_total_weight"],[20,2,1,"","initialise_model"],[20,2,1,"","input_constraints"],[20,3,1,"","model_constraints"],[20,2,1,"","parse_solver_information"],[20,2,1,"","set_component_solution_value"],[20,2,1,"","solve"],[20,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model":[[21,1,1,"","CpDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model.CpDeterministicTruncatedXorDifferentialModel":[[21,2,1,"","add_solution_to_components_values"],[21,2,1,"","add_solutions_from_components_values"],[21,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_inverse_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_mix_column_truncated_table"],[21,2,1,"","calculate_bit_positions"],[21,2,1,"","calculate_bit_values"],[21,2,1,"","calculate_input_bit_positions"],[21,3,1,"","cipher"],[21,3,1,"","cipher_id"],[21,2,1,"","final_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","final_impossible_constraints"],[21,2,1,"","find_all_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_one_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_possible_number_of_active_sboxes"],[21,2,1,"","fix_variables_value_constraints"],[21,3,1,"","float_and_lat_values"],[21,2,1,"","format_component_value"],[21,2,1,"","get_command_for_solver_process"],[21,2,1,"","get_mix_column_all_inputs"],[21,2,1,"","get_total_weight"],[21,2,1,"","initialise_model"],[21,2,1,"","input_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[21,3,1,"","model_constraints"],[21,2,1,"","output_constraints"],[21,2,1,"","output_inverse_constraints"],[21,2,1,"","parse_solver_information"],[21,2,1,"","set_component_solution_value"],[21,2,1,"","solve"],[21,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model":[[22,1,1,"","CpXorDifferentialModel"],[22,4,1,"","and_xor_differential_probability_ddt"],[22,4,1,"","update_and_or_ddt_valid_probabilities"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model.CpXorDifferentialModel":[[22,2,1,"","add_solution_to_components_values"],[22,2,1,"","add_solutions_from_components_values"],[22,2,1,"","build_mix_column_truncated_table"],[22,2,1,"","build_xor_differential_trail_model"],[22,2,1,"","build_xor_differential_trail_model_template"],[22,2,1,"","calculate_bit_positions"],[22,2,1,"","calculate_bit_values"],[22,2,1,"","calculate_input_bit_positions"],[22,3,1,"","cipher"],[22,3,1,"","cipher_id"],[22,2,1,"","final_xor_differential_constraints"],[22,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[22,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[22,2,1,"","find_differential_weight"],[22,2,1,"","find_lowest_weight_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[22,2,1,"","find_possible_number_of_active_sboxes"],[22,2,1,"","fix_variables_value_constraints"],[22,3,1,"","float_and_lat_values"],[22,2,1,"","format_component_value"],[22,2,1,"","get_command_for_solver_process"],[22,2,1,"","get_mix_column_all_inputs"],[22,2,1,"","get_total_weight"],[22,2,1,"","get_word_operation_xor_differential_constraints"],[22,2,1,"","initialise_model"],[22,2,1,"","input_xor_differential_constraints"],[22,3,1,"","model_constraints"],[22,2,1,"","parse_solver_information"],[22,2,1,"","set_component_solution_value"],[22,2,1,"","solve"],[22,2,1,"","update_sbox_ddt_valid_probabilities"],[22,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model":[[23,1,1,"","CpXorDifferentialNumberOfActiveSboxesModel"],[23,4,1,"","build_xor_truncated_table"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model.CpXorDifferentialNumberOfActiveSboxesModel":[[23,2,1,"","add_additional_xor_constraints"],[23,2,1,"","add_solution_to_components_values"],[23,2,1,"","add_solutions_from_components_values"],[23,2,1,"","build_mix_column_truncated_table"],[23,2,1,"","build_xor_differential_trail_first_step_model"],[23,2,1,"","calculate_bit_positions"],[23,2,1,"","calculate_bit_values"],[23,2,1,"","calculate_input_bit_positions"],[23,3,1,"","cipher"],[23,3,1,"","cipher_id"],[23,2,1,"","create_xor_component"],[23,2,1,"","final_xor_differential_first_step_constraints"],[23,2,1,"","find_possible_number_of_active_sboxes"],[23,2,1,"","fix_variables_value_constraints"],[23,3,1,"","float_and_lat_values"],[23,2,1,"","format_component_value"],[23,2,1,"","get_command_for_solver_process"],[23,2,1,"","get_mix_column_all_inputs"],[23,2,1,"","get_new_xor_input_links_and_positions"],[23,2,1,"","get_total_weight"],[23,2,1,"","get_xor_all_inputs"],[23,2,1,"","initialise_model"],[23,2,1,"","input_xor_differential_first_step_constraints"],[23,3,1,"","model_constraints"],[23,2,1,"","parse_solver_information"],[23,2,1,"","set_component_solution_value"],[23,2,1,"","solve"],[23,2,1,"","weight_constraints"],[23,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model":[[24,1,1,"","CpXorDifferentialFixingNumberOfActiveSboxesModel"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.CpXorDifferentialFixingNumberOfActiveSboxesModel":[[24,2,1,"","add_additional_xor_constraints"],[24,2,1,"","add_solution_to_components_values"],[24,2,1,"","add_solutions_from_components_values"],[24,2,1,"","build_mix_column_truncated_table"],[24,2,1,"","build_xor_differential_trail_first_step_model"],[24,2,1,"","build_xor_differential_trail_model"],[24,2,1,"","build_xor_differential_trail_model_template"],[24,2,1,"","build_xor_differential_trail_second_step_model"],[24,2,1,"","calculate_bit_positions"],[24,2,1,"","calculate_bit_values"],[24,2,1,"","calculate_input_bit_positions"],[24,3,1,"","cipher"],[24,3,1,"","cipher_id"],[24,2,1,"","create_xor_component"],[24,2,1,"","final_xor_differential_constraints"],[24,2,1,"","final_xor_differential_first_step_constraints"],[24,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[24,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[24,2,1,"","find_differential_weight"],[24,2,1,"","find_lowest_weight_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[24,2,1,"","find_possible_number_of_active_sboxes"],[24,2,1,"","fix_variables_value_constraints"],[24,3,1,"","float_and_lat_values"],[24,2,1,"","format_component_value"],[24,2,1,"","generate_table_of_solutions"],[24,2,1,"","get_command_for_solver_process"],[24,2,1,"","get_mix_column_all_inputs"],[24,2,1,"","get_new_xor_input_links_and_positions"],[24,2,1,"","get_solutions_dictionaries_with_build_time"],[24,2,1,"","get_total_weight"],[24,2,1,"","get_word_operation_xor_differential_constraints"],[24,2,1,"","get_xor_all_inputs"],[24,2,1,"","initialise_model"],[24,2,1,"","input_xor_differential_constraints"],[24,2,1,"","input_xor_differential_first_step_constraints"],[24,3,1,"","model_constraints"],[24,2,1,"","parse_solver_information"],[24,2,1,"","set_component_solution_value"],[24,2,1,"","solve"],[24,2,1,"","solve_full_two_steps_xor_differential_model"],[24,2,1,"","solve_model"],[24,2,1,"","transform_first_step_model"],[24,2,1,"","update_sbox_ddt_valid_probabilities"],[24,2,1,"","weight_constraints"],[24,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model":[[25,1,1,"","CpXorLinearModel"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model.CpXorLinearModel":[[25,2,1,"","add_solution_to_components_values"],[25,2,1,"","add_solutions_from_components_values"],[25,2,1,"","and_xor_linear_probability_lat"],[25,2,1,"","branch_xor_linear_constraints"],[25,2,1,"","build_mix_column_truncated_table"],[25,2,1,"","build_xor_linear_trail_model"],[25,2,1,"","calculate_bit_positions"],[25,2,1,"","calculate_bit_values"],[25,2,1,"","calculate_input_bit_positions"],[25,3,1,"","cipher"],[25,3,1,"","cipher_id"],[25,2,1,"","final_xor_linear_constraints"],[25,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[25,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[25,2,1,"","find_lowest_weight_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[25,2,1,"","find_possible_number_of_active_sboxes"],[25,2,1,"","fix_variables_value_constraints"],[25,2,1,"","fix_variables_value_xor_linear_constraints"],[25,3,1,"","float_and_lat_values"],[25,2,1,"","format_component_value"],[25,2,1,"","get_command_for_solver_process"],[25,2,1,"","get_lat_values"],[25,2,1,"","get_mix_column_all_inputs"],[25,2,1,"","get_total_weight"],[25,2,1,"","get_word_operation_final_xor_linear_constraints"],[25,2,1,"","initialise_model"],[25,2,1,"","input_xor_linear_constraints"],[25,3,1,"","model_constraints"],[25,2,1,"","parse_solver_information"],[25,2,1,"","set_component_solution_value"],[25,2,1,"","solve"],[25,2,1,"","update_and_or_lat_valid_probabilities"],[25,2,1,"","update_sbox_lat_valid_probabilities"],[25,2,1,"","weight_constraints"],[25,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp":[[26,0,0,"-","milp_model"]],"cipher_modules.models.milp.milp_model":[[26,1,1,"","MilpModel"],[26,4,1,"","get_independent_input_output_variables"],[26,4,1,"","get_input_output_variables"],[26,4,1,"","verbose_print"]],"cipher_modules.models.milp.milp_model.MilpModel":[[26,3,1,"","binary_variable"],[26,3,1,"","cipher"],[26,3,1,"","cipher_id"],[26,2,1,"","fix_variables_value_constraints"],[26,2,1,"","init_model_in_sage_milp_class"],[26,3,1,"","integer_variable"],[26,3,1,"","intermediate_output_names"],[26,3,1,"","model"],[26,3,1,"","model_constraints"],[26,3,1,"","non_linear_component_id"],[26,2,1,"","solve"],[26,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models":[[27,0,0,"-","milp_bitwise_deterministic_truncated_xor_differential_model"],[28,0,0,"-","milp_bitwise_impossible_xor_differential_model"],[29,0,0,"-","milp_cipher_model"],[30,0,0,"-","milp_wordwise_deterministic_truncated_xor_differential_model"],[31,0,0,"-","milp_wordwise_impossible_xor_differential_model"],[32,0,0,"-","milp_xor_differential_model"],[33,0,0,"-","milp_xor_linear_model"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model":[[27,1,1,"","MilpBitwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model.MilpBitwiseDeterministicTruncatedXorDifferentialModel":[[27,2,1,"","add_constraints_to_build_in_sage_milp_class"],[27,3,1,"","binary_variable"],[27,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[27,3,1,"","cipher"],[27,3,1,"","cipher_id"],[27,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[27,2,1,"","fix_variables_value_constraints"],[27,2,1,"","init_model_in_sage_milp_class"],[27,3,1,"","integer_variable"],[27,3,1,"","intermediate_output_names"],[27,2,1,"","link_binary_tuples_to_integer_variables"],[27,3,1,"","model"],[27,3,1,"","model_constraints"],[27,3,1,"","non_linear_component_id"],[27,2,1,"","solve"],[27,3,1,"","trunc_binvar"],[27,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model":[[28,1,1,"","MilpBitwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model.MilpBitwiseImpossibleXorDifferentialModel":[[28,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[28,3,1,"","binary_variable"],[28,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[28,2,1,"","build_bitwise_impossible_xor_differential_trail_model"],[28,3,1,"","cipher"],[28,3,1,"","cipher_id"],[28,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fixed_component"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model"],[28,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[28,2,1,"","fix_variables_value_constraints"],[28,2,1,"","init_model_in_sage_milp_class"],[28,3,1,"","integer_variable"],[28,3,1,"","intermediate_output_names"],[28,2,1,"","link_binary_tuples_to_integer_variables"],[28,3,1,"","model"],[28,3,1,"","model_constraints"],[28,3,1,"","non_linear_component_id"],[28,2,1,"","solve"],[28,3,1,"","trunc_binvar"],[28,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_cipher_model":[[29,1,1,"","MilpCipherModel"]],"cipher_modules.models.milp.milp_models.milp_cipher_model.MilpCipherModel":[[29,3,1,"","binary_variable"],[29,2,1,"","build_cipher_model"],[29,3,1,"","cipher"],[29,3,1,"","cipher_id"],[29,2,1,"","fix_variables_value_constraints"],[29,2,1,"","init_model_in_sage_milp_class"],[29,3,1,"","integer_variable"],[29,3,1,"","intermediate_output_names"],[29,3,1,"","model"],[29,3,1,"","model_constraints"],[29,3,1,"","non_linear_component_id"],[29,2,1,"","solve"],[29,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model":[[30,1,1,"","MilpWordwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model.MilpWordwiseDeterministicTruncatedXorDifferentialModel":[[30,2,1,"","add_constraints_to_build_in_sage_milp_class"],[30,3,1,"","binary_variable"],[30,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[30,3,1,"","cipher"],[30,3,1,"","cipher_id"],[30,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","fix_variables_value_constraints"],[30,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[30,2,1,"","init_model_in_sage_milp_class"],[30,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[30,3,1,"","integer_variable"],[30,3,1,"","intermediate_output_names"],[30,3,1,"","model"],[30,3,1,"","model_constraints"],[30,3,1,"","non_linear_component_id"],[30,2,1,"","solve"],[30,3,1,"","trunc_wordvar"],[30,2,1,"","weight_constraints"],[30,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model":[[31,1,1,"","MilpWordwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model.MilpWordwiseImpossibleXorDifferentialModel":[[31,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[31,3,1,"","binary_variable"],[31,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[31,2,1,"","build_wordwise_impossible_xor_differential_trail_model"],[31,3,1,"","cipher"],[31,3,1,"","cipher_id"],[31,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fixed_component"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model"],[31,2,1,"","fix_variables_value_constraints"],[31,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[31,2,1,"","init_model_in_sage_milp_class"],[31,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[31,3,1,"","integer_variable"],[31,3,1,"","intermediate_output_names"],[31,3,1,"","model"],[31,3,1,"","model_constraints"],[31,3,1,"","non_linear_component_id"],[31,2,1,"","solve"],[31,3,1,"","trunc_wordvar"],[31,2,1,"","weight_constraints"],[31,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model":[[32,1,1,"","MilpXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model.MilpXorDifferentialModel":[[32,2,1,"","add_constraints_to_build_in_sage_milp_class"],[32,3,1,"","binary_variable"],[32,2,1,"","build_xor_differential_trail_model"],[32,3,1,"","cipher"],[32,3,1,"","cipher_id"],[32,2,1,"","exclude_variables_value_constraints"],[32,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[32,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","find_lowest_weight_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[32,2,1,"","fix_variables_value_constraints"],[32,2,1,"","get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","init_model_in_sage_milp_class"],[32,3,1,"","integer_variable"],[32,3,1,"","intermediate_output_names"],[32,2,1,"","is_single_key"],[32,3,1,"","model"],[32,3,1,"","model_constraints"],[32,3,1,"","non_linear_component_id"],[32,2,1,"","solve"],[32,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model":[[33,1,1,"","MilpXorLinearModel"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model.MilpXorLinearModel":[[33,2,1,"","add_constraints_to_build_in_sage_milp_class"],[33,3,1,"","binary_variable"],[33,2,1,"","branch_xor_linear_constraints"],[33,2,1,"","build_xor_linear_trail_model"],[33,3,1,"","cipher"],[33,3,1,"","cipher_id"],[33,2,1,"","exclude_variables_value_xor_linear_constraints"],[33,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[33,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","find_lowest_weight_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[33,2,1,"","fix_variables_value_constraints"],[33,2,1,"","fix_variables_value_xor_linear_constraints"],[33,2,1,"","get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","init_model_in_sage_milp_class"],[33,3,1,"","integer_variable"],[33,3,1,"","intermediate_output_names"],[33,3,1,"","model"],[33,3,1,"","model_constraints"],[33,3,1,"","non_linear_component_id"],[33,2,1,"","solve"],[33,2,1,"","update_xor_linear_constraints_for_more_than_two_bits"],[33,2,1,"","weight_constraints"],[33,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp.utils":[[35,0,0,"-","config"],[45,0,0,"-","generate_inequalities_for_and_operation_2_input_bits"],[46,0,0,"-","generate_inequalities_for_large_sboxes"],[47,0,0,"-","generate_inequalities_for_wordwise_truncated_mds_matrices"],[48,0,0,"-","generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits"],[49,0,0,"-","generate_inequalities_for_xor_with_n_input_bits"],[50,0,0,"-","generate_sbox_inequalities_for_trail_search"],[51,0,0,"-","generate_undisturbed_bits_inequalities_for_sboxes"],[52,0,0,"-","milp_name_mappings"],[53,0,0,"-","mzn_predicates"],[54,0,0,"-","utils"]],"cipher_modules.models.milp.utils.generate_inequalities_for_and_operation_2_input_bits":[[45,4,1,"","and_LAT"],[45,4,1,"","and_inequalities"],[45,4,1,"","convex_hull"],[45,4,1,"","cutting_off_greedy"],[45,4,1,"","cutting_off_milp"]],"cipher_modules.models.milp.utils.generate_inequalities_for_large_sboxes":[[46,4,1,"","delete_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","generate_espresso_input"],[46,4,1,"","generate_product_of_sum_from_espresso"],[46,4,1,"","get_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","update_dictionary_that_contains_inequalities_for_large_sboxes"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_mds_matrices":[[47,4,1,"","delete_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","generate_valid_points_for_truncated_mds_matrix"],[47,4,1,"","output_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","update_dictionary_that_contains_wordwise_truncated_mds_inequalities"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits":[[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","generate_valid_points_for_xor_between_n_input_words"],[48,4,1,"","generate_valid_points_input_words"],[48,4,1,"","get_valid_points_for_wordwise_xor"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_inputs"],[48,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix"]],"cipher_modules.models.milp.utils.generate_inequalities_for_xor_with_n_input_bits":[[49,4,1,"","delete_dictionary_that_contains_xor_inequalities"],[49,4,1,"","generate_all_possible_points_with_n_bits"],[49,4,1,"","generate_impossible_points_for_xor_between_n_input_bits"],[49,4,1,"","output_dictionary_that_contains_xor_inequalities"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_between_n_input_bits"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_matrix"]],"cipher_modules.models.milp.utils.generate_sbox_inequalities_for_trail_search":[[50,4,1,"","convex_hull"],[50,4,1,"","cutting_off_greedy"],[50,4,1,"","cutting_off_milp"],[50,4,1,"","delete_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","get_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","sbox_inequalities"],[50,4,1,"","to_bits"],[50,4,1,"","update_dictionary_that_contains_inequalities_for_small_sboxes"]],"cipher_modules.models.milp.utils.generate_undisturbed_bits_inequalities_for_sboxes":[[51,4,1,"","delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","generate_dict_product_of_sum_from_espresso"],[51,4,1,"","get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","get_transitions_for_single_output_bit"],[51,4,1,"","update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"]],"cipher_modules.models.milp.utils.mzn_predicates":[[53,4,1,"","get_word_operations"]],"cipher_modules.models.milp.utils.utils":[[54,4,1,"","delete_espresso_dictionary"],[54,4,1,"","espresso_pos_to_constraints"],[54,4,1,"","fix_variables_value_deterministic_truncated_xor_differential_constraints"],[54,4,1,"","generate_espresso_input"],[54,4,1,"","generate_product_of_sum_from_espresso"],[54,4,1,"","milp_and"],[54,4,1,"","milp_else"],[54,4,1,"","milp_eq"],[54,4,1,"","milp_generalized_and"],[54,4,1,"","milp_generalized_xor"],[54,4,1,"","milp_geq"],[54,4,1,"","milp_greater"],[54,4,1,"","milp_if_elif_else"],[54,4,1,"","milp_if_then"],[54,4,1,"","milp_if_then_else"],[54,4,1,"","milp_leq"],[54,4,1,"","milp_less"],[54,4,1,"","milp_neq"],[54,4,1,"","milp_or"],[54,4,1,"","milp_xor"],[54,4,1,"","milp_xor_truncated"],[54,4,1,"","milp_xor_truncated_wordwise"],[54,4,1,"","output_espresso_dictionary"]],"cipher_modules.models.minizinc":[[55,0,0,"-","minizinc_model"]],"cipher_modules.models.minizinc.minizinc_model":[[55,1,1,"","MinizincModel"]],"cipher_modules.models.minizinc.minizinc_model.MinizincModel":[[55,2,1,"","add_comment"],[55,2,1,"","add_constraint_from_str"],[55,2,1,"","add_output_comment"],[55,3,1,"","cipher"],[55,3,1,"","cipher_id"],[55,2,1,"","fix_variables_value_constraints"],[55,3,1,"","model_constraints"],[55,2,1,"","output_probability_per_round"],[55,2,1,"","solve"],[55,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models":[[56,0,0,"-","minizinc_cipher_model"],[57,0,0,"-","minizinc_deterministic_truncated_xor_differential_model"],[58,0,0,"-","minizinc_xor_differential_model"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model":[[56,1,1,"","MinizincCipherModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model.MinizincCipherModel":[[56,2,1,"","add_comment"],[56,2,1,"","add_constraint_from_str"],[56,2,1,"","add_output_comment"],[56,2,1,"","build_cipher_model"],[56,3,1,"","cipher"],[56,3,1,"","cipher_id"],[56,2,1,"","fix_variables_value_constraints"],[56,3,1,"","model_constraints"],[56,2,1,"","output_probability_per_round"],[56,2,1,"","solve"],[56,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model":[[57,1,1,"","MinizincDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model.MinizincDeterministicTruncatedXorDifferentialModel":[[57,2,1,"","add_comment"],[57,2,1,"","add_constraint_from_str"],[57,2,1,"","add_output_comment"],[57,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[57,3,1,"","cipher"],[57,3,1,"","cipher_id"],[57,2,1,"","fix_variables_value_constraints"],[57,3,1,"","model_constraints"],[57,2,1,"","output_probability_per_round"],[57,2,1,"","solve"],[57,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model":[[58,1,1,"","MinizincXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model.MinizincXorDifferentialModel":[[58,2,1,"","add_comment"],[58,2,1,"","add_constraint_from_str"],[58,2,1,"","add_output_comment"],[58,2,1,"","build_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","build_lowest_weight_xor_differential_trail_model"],[58,2,1,"","build_lowest_xor_differential_trails_with_at_most_weight"],[58,2,1,"","build_xor_differential_trail_model"],[58,3,1,"","cipher"],[58,3,1,"","cipher_id"],[58,2,1,"","connect_rounds"],[58,2,1,"","constraint_permutation_and_key_schedule_separately_by_input_sizes"],[58,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[58,2,1,"","find_lowest_weight_xor_differential_trail"],[58,2,1,"","find_min_of_max_xor_differential_between_permutation_and_key_schedule"],[58,2,1,"","fix_variables_value_constraints"],[58,2,1,"","get_probability_vars_from_key_schedule"],[58,2,1,"","get_probability_vars_from_permutation"],[58,2,1,"","init_constraints"],[58,3,1,"","model_constraints"],[58,2,1,"","objective_generator"],[58,2,1,"","output_probability_per_round"],[58,2,1,"","parse_probability_vars"],[58,2,1,"","satisfy_generator"],[58,2,1,"","set_max_number_of_carries_on_arx_cipher"],[58,2,1,"","set_max_number_of_nonlinear_carries"],[58,2,1,"","solve"],[58,2,1,"","weight_constraints"],[58,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.sat":[[63,0,0,"-","sat_model"]],"cipher_modules.models.sat.cms_models":[[59,0,0,"-","cms_cipher_model"],[60,0,0,"-","cms_deterministic_truncated_xor_differential_model"],[61,0,0,"-","cms_xor_differential_model"],[62,0,0,"-","cms_xor_linear_model"]],"cipher_modules.models.sat.cms_models.cms_cipher_model":[[59,1,1,"","CmsSatCipherModel"]],"cipher_modules.models.sat.cms_models.cms_cipher_model.CmsSatCipherModel":[[59,2,1,"","build_cipher_model"],[59,2,1,"","calculate_component_weight"],[59,3,1,"","cipher_id"],[59,2,1,"","find_missing_bits"],[59,2,1,"","fix_variables_value_constraints"],[59,3,1,"","model_constraints"],[59,3,1,"","sboxes_ddt_templates"],[59,3,1,"","sboxes_lat_templates"],[59,2,1,"","solve"],[59,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model":[[60,1,1,"","CmsSatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model.CmsSatDeterministicTruncatedXorDifferentialModel":[[60,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[60,2,1,"","calculate_component_weight"],[60,3,1,"","cipher_id"],[60,2,1,"","fix_variables_value_constraints"],[60,3,1,"","model_constraints"],[60,3,1,"","sboxes_ddt_templates"],[60,3,1,"","sboxes_lat_templates"],[60,2,1,"","solve"],[60,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model":[[61,1,1,"","CmsSatXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model.CmsSatXorDifferentialModel":[[61,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[61,2,1,"","build_xor_differential_trail_model"],[61,2,1,"","calculate_component_weight"],[61,3,1,"","cipher_id"],[61,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[61,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[61,2,1,"","find_lowest_weight_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[61,2,1,"","fix_variables_value_constraints"],[61,3,1,"","model_constraints"],[61,3,1,"","sboxes_ddt_templates"],[61,3,1,"","sboxes_lat_templates"],[61,2,1,"","solve"],[61,2,1,"","weight_constraints"],[61,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model":[[62,1,1,"","CmsSatXorLinearModel"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model.CmsSatXorLinearModel":[[62,2,1,"","branch_xor_linear_constraints"],[62,2,1,"","build_xor_linear_trail_model"],[62,2,1,"","calculate_component_weight"],[62,3,1,"","cipher_id"],[62,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[62,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[62,2,1,"","find_lowest_weight_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[62,2,1,"","fix_variables_value_constraints"],[62,2,1,"","fix_variables_value_xor_linear_constraints"],[62,3,1,"","model_constraints"],[62,3,1,"","sboxes_ddt_templates"],[62,3,1,"","sboxes_lat_templates"],[62,2,1,"","solve"],[62,2,1,"","weight_constraints"],[62,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.sat_model":[[63,1,1,"","SatModel"]],"cipher_modules.models.sat.sat_model.SatModel":[[63,2,1,"","calculate_component_weight"],[63,3,1,"","cipher_id"],[63,2,1,"","fix_variables_value_constraints"],[63,3,1,"","model_constraints"],[63,3,1,"","sboxes_ddt_templates"],[63,3,1,"","sboxes_lat_templates"],[63,2,1,"","solve"],[63,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models":[[64,0,0,"-","sat_cipher_model"],[65,0,0,"-","sat_deterministic_truncated_xor_differential_model"],[66,0,0,"-","sat_xor_differential_model"],[67,0,0,"-","sat_xor_linear_model"]],"cipher_modules.models.sat.sat_models.sat_cipher_model":[[64,1,1,"","SatCipherModel"]],"cipher_modules.models.sat.sat_models.sat_cipher_model.SatCipherModel":[[64,2,1,"","build_cipher_model"],[64,2,1,"","calculate_component_weight"],[64,3,1,"","cipher_id"],[64,2,1,"","find_missing_bits"],[64,2,1,"","fix_variables_value_constraints"],[64,3,1,"","model_constraints"],[64,3,1,"","sboxes_ddt_templates"],[64,3,1,"","sboxes_lat_templates"],[64,2,1,"","solve"],[64,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model":[[65,1,1,"","SatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model.SatDeterministicTruncatedXorDifferentialModel":[[65,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[65,2,1,"","calculate_component_weight"],[65,3,1,"","cipher_id"],[65,2,1,"","fix_variables_value_constraints"],[65,3,1,"","model_constraints"],[65,3,1,"","sboxes_ddt_templates"],[65,3,1,"","sboxes_lat_templates"],[65,2,1,"","solve"],[65,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model":[[66,1,1,"","SatXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model.SatXorDifferentialModel":[[66,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[66,2,1,"","build_xor_differential_trail_model"],[66,2,1,"","calculate_component_weight"],[66,3,1,"","cipher_id"],[66,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[66,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[66,2,1,"","find_lowest_weight_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[66,2,1,"","fix_variables_value_constraints"],[66,3,1,"","model_constraints"],[66,3,1,"","sboxes_ddt_templates"],[66,3,1,"","sboxes_lat_templates"],[66,2,1,"","solve"],[66,2,1,"","weight_constraints"],[66,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model":[[67,1,1,"","SatXorLinearModel"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model.SatXorLinearModel":[[67,2,1,"","branch_xor_linear_constraints"],[67,2,1,"","build_xor_linear_trail_model"],[67,2,1,"","calculate_component_weight"],[67,3,1,"","cipher_id"],[67,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[67,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[67,2,1,"","find_lowest_weight_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[67,2,1,"","fix_variables_value_constraints"],[67,2,1,"","fix_variables_value_xor_linear_constraints"],[67,3,1,"","model_constraints"],[67,3,1,"","sboxes_ddt_templates"],[67,3,1,"","sboxes_lat_templates"],[67,2,1,"","solve"],[67,2,1,"","weight_constraints"],[67,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.utils":[[68,0,0,"-","mzn_predicates"],[69,0,0,"-","n_window_heuristic_helper"],[70,0,0,"-","utils"]],"cipher_modules.models.sat.utils.mzn_predicates":[[68,4,1,"","get_word_operations"]],"cipher_modules.models.sat.utils.n_window_heuristic_helper":[[69,4,1,"","window_size_0_cnf"],[69,4,1,"","window_size_1_cnf"],[69,4,1,"","window_size_2_cnf"],[69,4,1,"","window_size_3_cnf"],[69,4,1,"","window_size_4_cnf"],[69,4,1,"","window_size_5_cnf"]],"cipher_modules.models.sat.utils.utils":[[70,4,1,"","cms_add_clauses_to_solver"],[70,4,1,"","cnf_and"],[70,4,1,"","cnf_and_differential"],[70,4,1,"","cnf_and_linear"],[70,4,1,"","cnf_and_seq"],[70,4,1,"","cnf_carry"],[70,4,1,"","cnf_carry_comp2"],[70,4,1,"","cnf_equivalent"],[70,4,1,"","cnf_hw_lipmaa"],[70,4,1,"","cnf_inequality"],[70,4,1,"","cnf_lipmaa"],[70,4,1,"","cnf_modadd_inequality"],[70,4,1,"","cnf_n_window_heuristic_on_w_vars"],[70,4,1,"","cnf_or"],[70,4,1,"","cnf_or_seq"],[70,4,1,"","cnf_result_comp2"],[70,4,1,"","cnf_vshift_false"],[70,4,1,"","cnf_vshift_id"],[70,4,1,"","cnf_xor"],[70,4,1,"","cnf_xor_seq"],[70,4,1,"","create_numerical_cnf"],[70,4,1,"","numerical_cnf_to_dimacs"],[70,4,1,"","run_minisat"],[70,4,1,"","run_parkissat"],[70,4,1,"","run_sat_solver"],[70,4,1,"","run_yices"]],"cipher_modules.models.smt":[[71,0,0,"-","smt_model"]],"cipher_modules.models.smt.smt_model":[[71,1,1,"","SmtModel"],[71,4,1,"","mathsat_parser"],[71,4,1,"","yices_parser"],[71,4,1,"","z3_parser"]],"cipher_modules.models.smt.smt_model.SmtModel":[[71,2,1,"","calculate_component_weight"],[71,3,1,"","cipher_id"],[71,2,1,"","cipher_input_variables"],[71,2,1,"","fix_variables_value_constraints"],[71,2,1,"","get_xor_probability_constraints"],[71,3,1,"","model_constraints"],[71,3,1,"","sboxes_ddt_templates"],[71,3,1,"","sboxes_lat_templates"],[71,2,1,"","solve"],[71,2,1,"","update_constraints_for_equal_type"],[71,2,1,"","update_constraints_for_not_equal_type"],[71,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models":[[72,0,0,"-","smt_cipher_model"],[73,0,0,"-","smt_deterministic_truncated_xor_differential_model"],[74,0,0,"-","smt_xor_differential_model"],[75,0,0,"-","smt_xor_linear_model"]],"cipher_modules.models.smt.smt_models.smt_cipher_model":[[72,1,1,"","SmtCipherModel"]],"cipher_modules.models.smt.smt_models.smt_cipher_model.SmtCipherModel":[[72,2,1,"","build_cipher_model"],[72,2,1,"","calculate_component_weight"],[72,3,1,"","cipher_id"],[72,2,1,"","cipher_input_variables"],[72,2,1,"","find_missing_bits"],[72,2,1,"","fix_variables_value_constraints"],[72,2,1,"","get_xor_probability_constraints"],[72,3,1,"","model_constraints"],[72,3,1,"","sboxes_ddt_templates"],[72,3,1,"","sboxes_lat_templates"],[72,2,1,"","solve"],[72,2,1,"","update_constraints_for_equal_type"],[72,2,1,"","update_constraints_for_not_equal_type"],[72,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model":[[73,1,1,"","SmtDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model.SmtDeterministicTruncatedXorDifferentialModel":[[73,2,1,"","calculate_component_weight"],[73,3,1,"","cipher_id"],[73,2,1,"","cipher_input_variables"],[73,2,1,"","fix_variables_value_constraints"],[73,2,1,"","get_xor_probability_constraints"],[73,3,1,"","model_constraints"],[73,3,1,"","sboxes_ddt_templates"],[73,3,1,"","sboxes_lat_templates"],[73,2,1,"","solve"],[73,2,1,"","update_constraints_for_equal_type"],[73,2,1,"","update_constraints_for_not_equal_type"],[73,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model":[[74,1,1,"","SmtXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model.SmtXorDifferentialModel":[[74,2,1,"","build_xor_differential_trail_model"],[74,2,1,"","calculate_component_weight"],[74,3,1,"","cipher_id"],[74,2,1,"","cipher_input_variables"],[74,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[74,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[74,2,1,"","find_lowest_weight_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[74,2,1,"","fix_variables_value_constraints"],[74,2,1,"","get_operands"],[74,2,1,"","get_xor_probability_constraints"],[74,3,1,"","model_constraints"],[74,3,1,"","sboxes_ddt_templates"],[74,3,1,"","sboxes_lat_templates"],[74,2,1,"","solve"],[74,2,1,"","update_constraints_for_equal_type"],[74,2,1,"","update_constraints_for_not_equal_type"],[74,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model":[[75,1,1,"","SmtXorLinearModel"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model.SmtXorLinearModel":[[75,2,1,"","branch_xor_linear_constraints"],[75,2,1,"","build_xor_linear_trail_model"],[75,2,1,"","calculate_component_weight"],[75,3,1,"","cipher_id"],[75,2,1,"","cipher_input_variables"],[75,2,1,"","cipher_input_xor_linear_variables"],[75,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[75,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[75,2,1,"","find_lowest_weight_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[75,2,1,"","fix_variables_value_constraints"],[75,2,1,"","fix_variables_value_xor_linear_constraints"],[75,2,1,"","get_xor_probability_constraints"],[75,3,1,"","model_constraints"],[75,3,1,"","sboxes_ddt_templates"],[75,3,1,"","sboxes_lat_templates"],[75,2,1,"","solve"],[75,2,1,"","update_constraints_for_equal_type"],[75,2,1,"","update_constraints_for_not_equal_type"],[75,2,1,"","weight_constraints"],[75,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.smt.utils":[[76,0,0,"-","utils"]],"cipher_modules.models.smt.utils.utils":[[76,4,1,"","get_component_hex_value"],[76,4,1,"","smt_and"],[76,4,1,"","smt_assert"],[76,4,1,"","smt_carry"],[76,4,1,"","smt_distinct"],[76,4,1,"","smt_equivalent"],[76,4,1,"","smt_implies"],[76,4,1,"","smt_ite"],[76,4,1,"","smt_lipmaa"],[76,4,1,"","smt_not"],[76,4,1,"","smt_or"],[76,4,1,"","smt_xor"]],"cipher_modules.models.utils":[[77,4,1,"","add_arcs"],[77,4,1,"","convert_solver_solution_to_dictionary"],[77,4,1,"","create_directory"],[77,4,1,"","find_sign_for_one_xor_linear_trail"],[77,4,1,"","find_sign_for_xor_linear_trails"],[77,4,1,"","get_bit_bindings"],[77,4,1,"","get_library_path"],[77,4,1,"","get_previous_output_bit_ids"],[77,4,1,"","get_related_key_scenario_format_for_fixed_values"],[77,4,1,"","get_single_key_scenario_format_for_fixed_values"],[77,4,1,"","integer_to_bit_list"],[77,4,1,"","print_components_values"],[77,4,1,"","set_component_solution"],[77,4,1,"","set_component_value_weight_sign"],[77,4,1,"","set_fixed_variables"],[77,4,1,"","to_bias_for_correlation_measure"],[77,4,1,"","to_bias_for_probability_measure"],[77,4,1,"","to_bias_for_xor_linear_trail"],[77,4,1,"","to_correlation_for_bias_measure"],[77,4,1,"","to_correlation_for_probability_measure"],[77,4,1,"","to_correlation_for_xor_linear_trail"],[77,4,1,"","to_probability_for_bias_measure"],[77,4,1,"","to_probability_for_correlation_measure"],[77,4,1,"","to_probability_for_xor_linear_trail"],[77,4,1,"","write_model_to_file"],[77,4,1,"","write_solution_into_a_file"],[77,4,1,"","write_solution_to_file"]],"cipher_modules.statistical_tests":[[79,0,0,"-","dataset_generator"],[80,0,0,"-","dieharder_statistical_tests"],[82,0,0,"-","nist_statistical_tests"]],"cipher_modules.statistical_tests.dataset_generator":[[79,1,1,"","DatasetGenerator"],[79,1,1,"","DatasetType"],[79,4,1,"","get_low_density_sequences"],[79,4,1,"","set_testing_data_amount"]],"cipher_modules.statistical_tests.dataset_generator.DatasetGenerator":[[79,2,1,"","generate_avalanche_dataset"],[79,2,1,"","generate_cbc_dataset"],[79,2,1,"","generate_correlation_dataset"],[79,2,1,"","generate_high_density_dataset"],[79,2,1,"","generate_low_density_dataset"],[79,2,1,"","generate_random_dataset"],[79,2,1,"","get_cipher_outputs_for_cbc_dataset"],[79,2,1,"","get_cipher_outputs_for_correlation_dataset"],[79,2,1,"","get_cipher_outputs_for_density_dataset"]],"cipher_modules.statistical_tests.dataset_generator.DatasetType":[[79,5,1,"","avalanche"],[79,5,1,"","cbc"],[79,5,1,"","correlation"],[79,5,1,"","high_density"],[79,5,1,"","low_density"],[79,5,1,"","random"]],"cipher_modules.statistical_tests.dieharder_statistical_tests":[[80,1,1,"","DieharderTests"]],"cipher_modules.statistical_tests.dieharder_statistical_tests.DieharderTests":[[80,2,1,"","generate_chart_all"],[80,2,1,"","generate_chart_round"],[80,2,1,"","parse_report"],[80,2,1,"","run_CBC_dieharder_statistics_test"],[80,2,1,"","run_avalanche_dieharder_statistics_test"],[80,2,1,"","run_correlation_dieharder_statistics_test"],[80,2,1,"","run_dieharder_statistical_tests_tool_interactively"],[80,2,1,"","run_high_density_dieharder_statistics_test"],[80,2,1,"","run_low_density_dieharder_statistics_test"],[80,2,1,"","run_random_dieharder_statistics_test"]],"cipher_modules.statistical_tests.nist_statistical_tests":[[82,1,1,"","StatisticalTests"]],"cipher_modules.statistical_tests.nist_statistical_tests.StatisticalTests":[[82,2,1,"","generate_chart_all"],[82,2,1,"","generate_chart_for_all_rounds"],[82,2,1,"","generate_chart_round"],[82,2,1,"","parse_report"],[82,2,1,"","run_CBC_nist_statistics_test"],[82,2,1,"","run_avalanche_nist_statistics_test"],[82,2,1,"","run_correlation_nist_statistics_test"],[82,2,1,"","run_high_density_nist_statistics_test"],[82,2,1,"","run_low_density_nist_statistics_test"],[82,2,1,"","run_nist_statistical_tests_tool_interactively"],[82,2,1,"","run_random_nist_statistics_test"]],"cipher_modules.tester":[[83,4,1,"","test_against_reference_code"],[83,4,1,"","test_vector_check"]],"ciphers.block_ciphers":[[84,0,0,"-","aes_block_cipher"],[85,0,0,"-","bea1_block_cipher"],[86,0,0,"-","constant_block_cipher"],[87,0,0,"-","des_block_cipher"],[88,0,0,"-","des_exact_key_length_block_cipher"],[89,0,0,"-","fancy_block_cipher"],[90,0,0,"-","hight_block_cipher"],[91,0,0,"-","identity_block_cipher"],[92,0,0,"-","kasumi_block_cipher"],[93,0,0,"-","lblock_block_cipher"],[94,0,0,"-","lea_block_cipher"],[95,0,0,"-","lowmc_block_cipher"],[96,0,0,"-","lowmc_generate_matrices"],[97,0,0,"-","midori_block_cipher"],[98,0,0,"-","present_block_cipher"],[99,0,0,"-","qarmav2_block_cipher"],[100,0,0,"-","raiden_block_cipher"],[101,0,0,"-","rc5_block_cipher"],[102,0,0,"-","simon_block_cipher"],[103,0,0,"-","skinny_block_cipher"],[104,0,0,"-","sparx_block_cipher"],[105,0,0,"-","speck_block_cipher"],[106,0,0,"-","tea_block_cipher"],[107,0,0,"-","threefish_block_cipher"],[108,0,0,"-","twofish_block_cipher"],[109,0,0,"-","xtea_block_cipher"]],"ciphers.block_ciphers.aes_block_cipher":[[84,1,1,"","AESBlockCipher"]],"ciphers.block_ciphers.aes_block_cipher.AESBlockCipher":[[84,2,1,"","add_AND_component"],[84,2,1,"","add_FSR_component"],[84,2,1,"","add_MODADD_component"],[84,2,1,"","add_MODSUB_component"],[84,2,1,"","add_NOT_component"],[84,2,1,"","add_OR_component"],[84,2,1,"","add_SBOX_component"],[84,2,1,"","add_SHIFT_component"],[84,2,1,"","add_XOR_component"],[84,2,1,"","add_cipher_output_component"],[84,2,1,"","add_concatenate_component"],[84,2,1,"","add_constant_component"],[84,2,1,"","add_intermediate_output_component"],[84,2,1,"","add_linear_layer_component"],[84,2,1,"","add_mix_column_component"],[84,2,1,"","add_permutation_component"],[84,2,1,"","add_reverse_component"],[84,2,1,"","add_rotate_component"],[84,2,1,"","add_round"],[84,2,1,"","add_round_key_output_component"],[84,2,1,"","add_round_output_component"],[84,2,1,"","add_shift_rows_component"],[84,2,1,"","add_sigma_component"],[84,2,1,"","add_suffix_to_components"],[84,2,1,"","add_theta_keccak_component"],[84,2,1,"","add_theta_xoodoo_component"],[84,2,1,"","add_variable_rotate_component"],[84,2,1,"","add_variable_shift_component"],[84,2,1,"","add_word_permutation_component"],[84,2,1,"","algebraic_tests"],[84,2,1,"","analyze_cipher"],[84,2,1,"","as_python_dictionary"],[84,2,1,"","avalanche_probability_vectors"],[84,2,1,"","cipher_inverse"],[84,2,1,"","cipher_partial_inverse"],[84,2,1,"","component_analysis_tests"],[84,2,1,"","component_from"],[84,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[84,2,1,"","continuous_avalanche_factor"],[84,2,1,"","continuous_diffusion_factor"],[84,2,1,"","continuous_diffusion_tests"],[84,2,1,"","continuous_neutrality_measure_for_bit_j"],[84,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[84,2,1,"","convert_to_compound_xor_cipher"],[84,2,1,"","create_constant_component"],[84,2,1,"","create_key_sbox_components"],[84,2,1,"","create_mix_column_components"],[84,2,1,"","create_rotate_component"],[84,2,1,"","create_round_key"],[84,2,1,"","create_round_output_component"],[84,2,1,"","create_sbox_components"],[84,2,1,"","create_shift_row_components"],[84,2,1,"","create_xor_components"],[84,3,1,"","current_round"],[84,3,1,"","current_round_number"],[84,3,1,"","current_round_number_of_components"],[84,2,1,"","delete_generated_evaluate_c_shared_library"],[84,2,1,"","diffusion_tests"],[84,2,1,"","evaluate"],[84,2,1,"","evaluate_using_c"],[84,2,1,"","evaluate_vectorized"],[84,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[84,3,1,"","family_name"],[84,3,1,"","file_name"],[84,2,1,"","find_good_input_difference_for_neural_distinguisher"],[84,2,1,"","find_impossible_property"],[84,2,1,"","generate_bit_based_c_code"],[84,2,1,"","generate_csv_report"],[84,2,1,"","generate_evaluate_c_code_shared_library"],[84,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[84,2,1,"","generate_word_based_c_code"],[84,2,1,"","get_all_components"],[84,2,1,"","get_all_components_ids"],[84,2,1,"","get_all_inputs_bit_positions"],[84,2,1,"","get_component_from_id"],[84,2,1,"","get_components_in_round"],[84,2,1,"","get_current_component_id"],[84,2,1,"","get_model"],[84,2,1,"","get_number_of_components_in_round"],[84,2,1,"","get_partial_cipher"],[84,2,1,"","get_round_from_component_id"],[84,2,1,"","get_sizes_of_components_by_type"],[84,3,1,"","id"],[84,2,1,"","impossible_differential_search"],[84,3,1,"","inputs"],[84,3,1,"","inputs_bit_size"],[84,2,1,"","inputs_size_to_dict"],[84,2,1,"","is_algebraically_secure"],[84,2,1,"","is_andrx"],[84,2,1,"","is_arx"],[84,2,1,"","is_power_of_2_word_based"],[84,2,1,"","is_shift_arx"],[84,2,1,"","is_spn"],[84,2,1,"","make_cipher_id"],[84,2,1,"","make_file_name"],[84,2,1,"","neural_network_blackbox_distinguisher_tests"],[84,2,1,"","neural_network_differential_distinguisher_tests"],[84,3,1,"","number_of_rounds"],[84,3,1,"","output_bit_size"],[84,2,1,"","polynomial_system"],[84,2,1,"","polynomial_system_at_round"],[84,2,1,"","print"],[84,2,1,"","print_as_python_dictionary"],[84,2,1,"","print_as_python_dictionary_to_file"],[84,2,1,"","print_component_analysis_as_radar_charts"],[84,2,1,"","print_evaluation_python_code"],[84,2,1,"","print_evaluation_python_code_to_file"],[84,2,1,"","print_input_information"],[84,3,1,"","reference_code"],[84,2,1,"","remove_key_schedule"],[84,2,1,"","remove_round_component"],[84,2,1,"","remove_round_component_from_id"],[84,3,1,"","rounds"],[84,3,1,"","rounds_as_list"],[84,2,1,"","run_autond_pipeline"],[84,2,1,"","set_file_name"],[84,2,1,"","set_id"],[84,2,1,"","set_inputs"],[84,2,1,"","sort_cipher"],[84,2,1,"","test_against_reference_code"],[84,2,1,"","test_vector_check"],[84,2,1,"","train_gohr_neural_distinguisher"],[84,2,1,"","train_neural_distinguisher"],[84,3,1,"","type"],[84,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.bea1_block_cipher":[[85,1,1,"","BEA1BlockCipher"]],"ciphers.block_ciphers.bea1_block_cipher.BEA1BlockCipher":[[85,2,1,"","add_AND_component"],[85,2,1,"","add_FSR_component"],[85,2,1,"","add_MODADD_component"],[85,2,1,"","add_MODSUB_component"],[85,2,1,"","add_NOT_component"],[85,2,1,"","add_OR_component"],[85,2,1,"","add_SBOX_component"],[85,2,1,"","add_SHIFT_component"],[85,2,1,"","add_XOR_component"],[85,2,1,"","add_cipher_output_component"],[85,2,1,"","add_concatenate_component"],[85,2,1,"","add_constant_component"],[85,2,1,"","add_intermediate_output_component"],[85,2,1,"","add_linear_layer_component"],[85,2,1,"","add_mix_column_component"],[85,2,1,"","add_permutation_component"],[85,2,1,"","add_reverse_component"],[85,2,1,"","add_rotate_component"],[85,2,1,"","add_round"],[85,2,1,"","add_round_key_output_component"],[85,2,1,"","add_round_output_component"],[85,2,1,"","add_shift_rows_component"],[85,2,1,"","add_sigma_component"],[85,2,1,"","add_suffix_to_components"],[85,2,1,"","add_theta_keccak_component"],[85,2,1,"","add_theta_xoodoo_component"],[85,2,1,"","add_variable_rotate_component"],[85,2,1,"","add_variable_shift_component"],[85,2,1,"","add_word_permutation_component"],[85,2,1,"","algebraic_tests"],[85,2,1,"","analyze_cipher"],[85,2,1,"","as_python_dictionary"],[85,2,1,"","avalanche_probability_vectors"],[85,2,1,"","cipher_inverse"],[85,2,1,"","cipher_partial_inverse"],[85,2,1,"","component_analysis_tests"],[85,2,1,"","component_from"],[85,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[85,2,1,"","continuous_avalanche_factor"],[85,2,1,"","continuous_diffusion_factor"],[85,2,1,"","continuous_diffusion_tests"],[85,2,1,"","continuous_neutrality_measure_for_bit_j"],[85,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[85,2,1,"","convert_to_compound_xor_cipher"],[85,3,1,"","current_round"],[85,3,1,"","current_round_number"],[85,3,1,"","current_round_number_of_components"],[85,2,1,"","delete_generated_evaluate_c_shared_library"],[85,2,1,"","diffusion_tests"],[85,2,1,"","evaluate"],[85,2,1,"","evaluate_using_c"],[85,2,1,"","evaluate_vectorized"],[85,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[85,3,1,"","family_name"],[85,3,1,"","file_name"],[85,2,1,"","find_good_input_difference_for_neural_distinguisher"],[85,2,1,"","find_impossible_property"],[85,2,1,"","generate_bit_based_c_code"],[85,2,1,"","generate_csv_report"],[85,2,1,"","generate_evaluate_c_code_shared_library"],[85,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[85,2,1,"","generate_word_based_c_code"],[85,2,1,"","get_all_components"],[85,2,1,"","get_all_components_ids"],[85,2,1,"","get_all_inputs_bit_positions"],[85,2,1,"","get_component_from_id"],[85,2,1,"","get_components_in_round"],[85,2,1,"","get_current_component_id"],[85,2,1,"","get_model"],[85,2,1,"","get_number_of_components_in_round"],[85,2,1,"","get_partial_cipher"],[85,2,1,"","get_round_from_component_id"],[85,2,1,"","get_sizes_of_components_by_type"],[85,3,1,"","id"],[85,2,1,"","impossible_differential_search"],[85,3,1,"","inputs"],[85,3,1,"","inputs_bit_size"],[85,2,1,"","inputs_size_to_dict"],[85,2,1,"","is_algebraically_secure"],[85,2,1,"","is_andrx"],[85,2,1,"","is_arx"],[85,2,1,"","is_power_of_2_word_based"],[85,2,1,"","is_shift_arx"],[85,2,1,"","is_spn"],[85,2,1,"","make_cipher_id"],[85,2,1,"","make_file_name"],[85,2,1,"","neural_network_blackbox_distinguisher_tests"],[85,2,1,"","neural_network_differential_distinguisher_tests"],[85,3,1,"","number_of_rounds"],[85,3,1,"","output_bit_size"],[85,2,1,"","polynomial_system"],[85,2,1,"","polynomial_system_at_round"],[85,2,1,"","print"],[85,2,1,"","print_as_python_dictionary"],[85,2,1,"","print_as_python_dictionary_to_file"],[85,2,1,"","print_component_analysis_as_radar_charts"],[85,2,1,"","print_evaluation_python_code"],[85,2,1,"","print_evaluation_python_code_to_file"],[85,2,1,"","print_input_information"],[85,3,1,"","reference_code"],[85,2,1,"","remove_key_schedule"],[85,2,1,"","remove_round_component"],[85,2,1,"","remove_round_component_from_id"],[85,3,1,"","rounds"],[85,3,1,"","rounds_as_list"],[85,2,1,"","run_autond_pipeline"],[85,2,1,"","set_file_name"],[85,2,1,"","set_id"],[85,2,1,"","set_inputs"],[85,2,1,"","sort_cipher"],[85,2,1,"","test_against_reference_code"],[85,2,1,"","test_vector_check"],[85,2,1,"","train_gohr_neural_distinguisher"],[85,2,1,"","train_neural_distinguisher"],[85,3,1,"","type"],[85,2,1,"","xor_round_key"],[85,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.constant_block_cipher":[[86,1,1,"","ConstantBlockCipher"]],"ciphers.block_ciphers.constant_block_cipher.ConstantBlockCipher":[[86,2,1,"","add_AND_component"],[86,2,1,"","add_FSR_component"],[86,2,1,"","add_MODADD_component"],[86,2,1,"","add_MODSUB_component"],[86,2,1,"","add_NOT_component"],[86,2,1,"","add_OR_component"],[86,2,1,"","add_SBOX_component"],[86,2,1,"","add_SHIFT_component"],[86,2,1,"","add_XOR_component"],[86,2,1,"","add_cipher_output_component"],[86,2,1,"","add_concatenate_component"],[86,2,1,"","add_constant_component"],[86,2,1,"","add_intermediate_output_component"],[86,2,1,"","add_linear_layer_component"],[86,2,1,"","add_mix_column_component"],[86,2,1,"","add_permutation_component"],[86,2,1,"","add_reverse_component"],[86,2,1,"","add_rotate_component"],[86,2,1,"","add_round"],[86,2,1,"","add_round_key_output_component"],[86,2,1,"","add_round_output_component"],[86,2,1,"","add_shift_rows_component"],[86,2,1,"","add_sigma_component"],[86,2,1,"","add_suffix_to_components"],[86,2,1,"","add_theta_keccak_component"],[86,2,1,"","add_theta_xoodoo_component"],[86,2,1,"","add_variable_rotate_component"],[86,2,1,"","add_variable_shift_component"],[86,2,1,"","add_word_permutation_component"],[86,2,1,"","algebraic_tests"],[86,2,1,"","analyze_cipher"],[86,2,1,"","as_python_dictionary"],[86,2,1,"","avalanche_probability_vectors"],[86,2,1,"","cipher_inverse"],[86,2,1,"","cipher_partial_inverse"],[86,2,1,"","component_analysis_tests"],[86,2,1,"","component_from"],[86,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[86,2,1,"","continuous_avalanche_factor"],[86,2,1,"","continuous_diffusion_factor"],[86,2,1,"","continuous_diffusion_tests"],[86,2,1,"","continuous_neutrality_measure_for_bit_j"],[86,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[86,2,1,"","convert_to_compound_xor_cipher"],[86,2,1,"","create_rounds"],[86,3,1,"","current_round"],[86,3,1,"","current_round_number"],[86,3,1,"","current_round_number_of_components"],[86,2,1,"","delete_generated_evaluate_c_shared_library"],[86,2,1,"","diffusion_tests"],[86,2,1,"","evaluate"],[86,2,1,"","evaluate_using_c"],[86,2,1,"","evaluate_vectorized"],[86,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[86,3,1,"","family_name"],[86,3,1,"","file_name"],[86,2,1,"","find_good_input_difference_for_neural_distinguisher"],[86,2,1,"","find_impossible_property"],[86,2,1,"","generate_bit_based_c_code"],[86,2,1,"","generate_csv_report"],[86,2,1,"","generate_evaluate_c_code_shared_library"],[86,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[86,2,1,"","generate_word_based_c_code"],[86,2,1,"","get_all_components"],[86,2,1,"","get_all_components_ids"],[86,2,1,"","get_all_inputs_bit_positions"],[86,2,1,"","get_component_from_id"],[86,2,1,"","get_components_in_round"],[86,2,1,"","get_current_component_id"],[86,2,1,"","get_model"],[86,2,1,"","get_number_of_components_in_round"],[86,2,1,"","get_partial_cipher"],[86,2,1,"","get_round_from_component_id"],[86,2,1,"","get_sizes_of_components_by_type"],[86,3,1,"","id"],[86,2,1,"","impossible_differential_search"],[86,3,1,"","inputs"],[86,3,1,"","inputs_bit_size"],[86,2,1,"","inputs_size_to_dict"],[86,2,1,"","is_algebraically_secure"],[86,2,1,"","is_andrx"],[86,2,1,"","is_arx"],[86,2,1,"","is_power_of_2_word_based"],[86,2,1,"","is_shift_arx"],[86,2,1,"","is_spn"],[86,2,1,"","make_cipher_id"],[86,2,1,"","make_file_name"],[86,2,1,"","neural_network_blackbox_distinguisher_tests"],[86,2,1,"","neural_network_differential_distinguisher_tests"],[86,3,1,"","number_of_rounds"],[86,3,1,"","output_bit_size"],[86,2,1,"","polynomial_system"],[86,2,1,"","polynomial_system_at_round"],[86,2,1,"","print"],[86,2,1,"","print_as_python_dictionary"],[86,2,1,"","print_as_python_dictionary_to_file"],[86,2,1,"","print_component_analysis_as_radar_charts"],[86,2,1,"","print_evaluation_python_code"],[86,2,1,"","print_evaluation_python_code_to_file"],[86,2,1,"","print_input_information"],[86,3,1,"","reference_code"],[86,2,1,"","remove_key_schedule"],[86,2,1,"","remove_round_component"],[86,2,1,"","remove_round_component_from_id"],[86,3,1,"","rounds"],[86,3,1,"","rounds_as_list"],[86,2,1,"","run_autond_pipeline"],[86,2,1,"","set_file_name"],[86,2,1,"","set_id"],[86,2,1,"","set_inputs"],[86,2,1,"","sort_cipher"],[86,2,1,"","test_against_reference_code"],[86,2,1,"","test_vector_check"],[86,2,1,"","train_gohr_neural_distinguisher"],[86,2,1,"","train_neural_distinguisher"],[86,3,1,"","type"],[86,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_block_cipher":[[87,1,1,"","DESBlockCipher"]],"ciphers.block_ciphers.des_block_cipher.DESBlockCipher":[[87,2,1,"","add_AND_component"],[87,2,1,"","add_FSR_component"],[87,2,1,"","add_MODADD_component"],[87,2,1,"","add_MODSUB_component"],[87,2,1,"","add_NOT_component"],[87,2,1,"","add_OR_component"],[87,2,1,"","add_SBOX_component"],[87,2,1,"","add_SHIFT_component"],[87,2,1,"","add_XOR_component"],[87,2,1,"","add_cipher_output_component"],[87,2,1,"","add_concatenate_component"],[87,2,1,"","add_constant_component"],[87,2,1,"","add_intermediate_output_component"],[87,2,1,"","add_linear_layer_component"],[87,2,1,"","add_mix_column_component"],[87,2,1,"","add_permutation_component"],[87,2,1,"","add_reverse_component"],[87,2,1,"","add_rotate_component"],[87,2,1,"","add_round"],[87,2,1,"","add_round_key_output_component"],[87,2,1,"","add_round_output_component"],[87,2,1,"","add_shift_rows_component"],[87,2,1,"","add_sigma_component"],[87,2,1,"","add_suffix_to_components"],[87,2,1,"","add_theta_keccak_component"],[87,2,1,"","add_theta_xoodoo_component"],[87,2,1,"","add_variable_rotate_component"],[87,2,1,"","add_variable_shift_component"],[87,2,1,"","add_word_permutation_component"],[87,2,1,"","algebraic_tests"],[87,2,1,"","analyze_cipher"],[87,2,1,"","as_python_dictionary"],[87,2,1,"","avalanche_probability_vectors"],[87,2,1,"","cipher_inverse"],[87,2,1,"","cipher_partial_inverse"],[87,2,1,"","component_analysis_tests"],[87,2,1,"","component_from"],[87,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[87,2,1,"","continuous_avalanche_factor"],[87,2,1,"","continuous_diffusion_factor"],[87,2,1,"","continuous_diffusion_tests"],[87,2,1,"","continuous_neutrality_measure_for_bit_j"],[87,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[87,2,1,"","convert_to_compound_xor_cipher"],[87,3,1,"","current_round"],[87,3,1,"","current_round_number"],[87,3,1,"","current_round_number_of_components"],[87,2,1,"","delete_generated_evaluate_c_shared_library"],[87,2,1,"","diffusion_tests"],[87,2,1,"","evaluate"],[87,2,1,"","evaluate_using_c"],[87,2,1,"","evaluate_vectorized"],[87,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[87,3,1,"","family_name"],[87,3,1,"","file_name"],[87,2,1,"","find_good_input_difference_for_neural_distinguisher"],[87,2,1,"","find_impossible_property"],[87,2,1,"","generate_bit_based_c_code"],[87,2,1,"","generate_csv_report"],[87,2,1,"","generate_evaluate_c_code_shared_library"],[87,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[87,2,1,"","generate_word_based_c_code"],[87,2,1,"","get_all_components"],[87,2,1,"","get_all_components_ids"],[87,2,1,"","get_all_inputs_bit_positions"],[87,2,1,"","get_component_from_id"],[87,2,1,"","get_components_in_round"],[87,2,1,"","get_current_component_id"],[87,2,1,"","get_model"],[87,2,1,"","get_number_of_components_in_round"],[87,2,1,"","get_partial_cipher"],[87,2,1,"","get_round_from_component_id"],[87,2,1,"","get_sizes_of_components_by_type"],[87,3,1,"","id"],[87,2,1,"","impossible_differential_search"],[87,3,1,"","inputs"],[87,3,1,"","inputs_bit_size"],[87,2,1,"","inputs_size_to_dict"],[87,2,1,"","is_algebraically_secure"],[87,2,1,"","is_andrx"],[87,2,1,"","is_arx"],[87,2,1,"","is_power_of_2_word_based"],[87,2,1,"","is_shift_arx"],[87,2,1,"","is_spn"],[87,2,1,"","make_cipher_id"],[87,2,1,"","make_file_name"],[87,2,1,"","neural_network_blackbox_distinguisher_tests"],[87,2,1,"","neural_network_differential_distinguisher_tests"],[87,3,1,"","number_of_rounds"],[87,3,1,"","output_bit_size"],[87,2,1,"","polynomial_system"],[87,2,1,"","polynomial_system_at_round"],[87,2,1,"","print"],[87,2,1,"","print_as_python_dictionary"],[87,2,1,"","print_as_python_dictionary_to_file"],[87,2,1,"","print_component_analysis_as_radar_charts"],[87,2,1,"","print_evaluation_python_code"],[87,2,1,"","print_evaluation_python_code_to_file"],[87,2,1,"","print_input_information"],[87,3,1,"","reference_code"],[87,2,1,"","remove_key_schedule"],[87,2,1,"","remove_round_component"],[87,2,1,"","remove_round_component_from_id"],[87,3,1,"","rounds"],[87,3,1,"","rounds_as_list"],[87,2,1,"","run_autond_pipeline"],[87,2,1,"","set_file_name"],[87,2,1,"","set_id"],[87,2,1,"","set_inputs"],[87,2,1,"","sort_cipher"],[87,2,1,"","test_against_reference_code"],[87,2,1,"","test_vector_check"],[87,2,1,"","train_gohr_neural_distinguisher"],[87,2,1,"","train_neural_distinguisher"],[87,3,1,"","type"],[87,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher":[[88,1,1,"","DESExactKeyLengthBlockCipher"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher.DESExactKeyLengthBlockCipher":[[88,2,1,"","add_AND_component"],[88,2,1,"","add_FSR_component"],[88,2,1,"","add_MODADD_component"],[88,2,1,"","add_MODSUB_component"],[88,2,1,"","add_NOT_component"],[88,2,1,"","add_OR_component"],[88,2,1,"","add_SBOX_component"],[88,2,1,"","add_SHIFT_component"],[88,2,1,"","add_XOR_component"],[88,2,1,"","add_cipher_output_component"],[88,2,1,"","add_concatenate_component"],[88,2,1,"","add_constant_component"],[88,2,1,"","add_intermediate_output_component"],[88,2,1,"","add_linear_layer_component"],[88,2,1,"","add_mix_column_component"],[88,2,1,"","add_permutation_component"],[88,2,1,"","add_reverse_component"],[88,2,1,"","add_rotate_component"],[88,2,1,"","add_round"],[88,2,1,"","add_round_key_output_component"],[88,2,1,"","add_round_output_component"],[88,2,1,"","add_shift_rows_component"],[88,2,1,"","add_sigma_component"],[88,2,1,"","add_suffix_to_components"],[88,2,1,"","add_theta_keccak_component"],[88,2,1,"","add_theta_xoodoo_component"],[88,2,1,"","add_variable_rotate_component"],[88,2,1,"","add_variable_shift_component"],[88,2,1,"","add_word_permutation_component"],[88,2,1,"","algebraic_tests"],[88,2,1,"","analyze_cipher"],[88,2,1,"","as_python_dictionary"],[88,2,1,"","avalanche_probability_vectors"],[88,2,1,"","cipher_inverse"],[88,2,1,"","cipher_partial_inverse"],[88,2,1,"","component_analysis_tests"],[88,2,1,"","component_from"],[88,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[88,2,1,"","continuous_avalanche_factor"],[88,2,1,"","continuous_diffusion_factor"],[88,2,1,"","continuous_diffusion_tests"],[88,2,1,"","continuous_neutrality_measure_for_bit_j"],[88,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[88,2,1,"","convert_to_compound_xor_cipher"],[88,3,1,"","current_round"],[88,3,1,"","current_round_number"],[88,3,1,"","current_round_number_of_components"],[88,2,1,"","delete_generated_evaluate_c_shared_library"],[88,2,1,"","diffusion_tests"],[88,2,1,"","evaluate"],[88,2,1,"","evaluate_using_c"],[88,2,1,"","evaluate_vectorized"],[88,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[88,3,1,"","family_name"],[88,3,1,"","file_name"],[88,2,1,"","find_good_input_difference_for_neural_distinguisher"],[88,2,1,"","find_impossible_property"],[88,2,1,"","generate_bit_based_c_code"],[88,2,1,"","generate_csv_report"],[88,2,1,"","generate_evaluate_c_code_shared_library"],[88,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[88,2,1,"","generate_word_based_c_code"],[88,2,1,"","get_all_components"],[88,2,1,"","get_all_components_ids"],[88,2,1,"","get_all_inputs_bit_positions"],[88,2,1,"","get_component_from_id"],[88,2,1,"","get_components_in_round"],[88,2,1,"","get_current_component_id"],[88,2,1,"","get_model"],[88,2,1,"","get_number_of_components_in_round"],[88,2,1,"","get_partial_cipher"],[88,2,1,"","get_round_from_component_id"],[88,2,1,"","get_sizes_of_components_by_type"],[88,3,1,"","id"],[88,2,1,"","impossible_differential_search"],[88,3,1,"","inputs"],[88,3,1,"","inputs_bit_size"],[88,2,1,"","inputs_size_to_dict"],[88,2,1,"","is_algebraically_secure"],[88,2,1,"","is_andrx"],[88,2,1,"","is_arx"],[88,2,1,"","is_power_of_2_word_based"],[88,2,1,"","is_shift_arx"],[88,2,1,"","is_spn"],[88,2,1,"","make_cipher_id"],[88,2,1,"","make_file_name"],[88,2,1,"","neural_network_blackbox_distinguisher_tests"],[88,2,1,"","neural_network_differential_distinguisher_tests"],[88,3,1,"","number_of_rounds"],[88,3,1,"","output_bit_size"],[88,2,1,"","polynomial_system"],[88,2,1,"","polynomial_system_at_round"],[88,2,1,"","print"],[88,2,1,"","print_as_python_dictionary"],[88,2,1,"","print_as_python_dictionary_to_file"],[88,2,1,"","print_component_analysis_as_radar_charts"],[88,2,1,"","print_evaluation_python_code"],[88,2,1,"","print_evaluation_python_code_to_file"],[88,2,1,"","print_input_information"],[88,3,1,"","reference_code"],[88,2,1,"","remove_key_schedule"],[88,2,1,"","remove_round_component"],[88,2,1,"","remove_round_component_from_id"],[88,3,1,"","rounds"],[88,3,1,"","rounds_as_list"],[88,2,1,"","run_autond_pipeline"],[88,2,1,"","set_file_name"],[88,2,1,"","set_id"],[88,2,1,"","set_inputs"],[88,2,1,"","sort_cipher"],[88,2,1,"","test_against_reference_code"],[88,2,1,"","test_vector_check"],[88,2,1,"","train_gohr_neural_distinguisher"],[88,2,1,"","train_neural_distinguisher"],[88,3,1,"","type"],[88,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.fancy_block_cipher":[[89,1,1,"","FancyBlockCipher"]],"ciphers.block_ciphers.fancy_block_cipher.FancyBlockCipher":[[89,2,1,"","add_AND_component"],[89,2,1,"","add_FSR_component"],[89,2,1,"","add_MODADD_component"],[89,2,1,"","add_MODSUB_component"],[89,2,1,"","add_NOT_component"],[89,2,1,"","add_OR_component"],[89,2,1,"","add_SBOX_component"],[89,2,1,"","add_SHIFT_component"],[89,2,1,"","add_XOR_component"],[89,2,1,"","add_and_component_to_even_round"],[89,2,1,"","add_cipher_output_component"],[89,2,1,"","add_concatenate_component"],[89,2,1,"","add_constant_component"],[89,2,1,"","add_intermediate_output_component"],[89,2,1,"","add_linear_layer_component"],[89,2,1,"","add_mix_column_component"],[89,2,1,"","add_permutation_component"],[89,2,1,"","add_reverse_component"],[89,2,1,"","add_rotate_component"],[89,2,1,"","add_round"],[89,2,1,"","add_round_key_output_component"],[89,2,1,"","add_round_output_component"],[89,2,1,"","add_sbox_components_layer_in_even_rounds"],[89,2,1,"","add_shift_rows_component"],[89,2,1,"","add_sigma_component"],[89,2,1,"","add_suffix_to_components"],[89,2,1,"","add_theta_keccak_component"],[89,2,1,"","add_theta_xoodoo_component"],[89,2,1,"","add_variable_rotate_component"],[89,2,1,"","add_variable_shift_component"],[89,2,1,"","add_word_permutation_component"],[89,2,1,"","add_xor_component_to_even_round"],[89,2,1,"","algebraic_tests"],[89,2,1,"","analyze_cipher"],[89,2,1,"","as_python_dictionary"],[89,2,1,"","avalanche_probability_vectors"],[89,2,1,"","cipher_inverse"],[89,2,1,"","cipher_partial_inverse"],[89,2,1,"","collect_input_id_links"],[89,2,1,"","component_analysis_tests"],[89,2,1,"","component_from"],[89,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[89,2,1,"","continuous_avalanche_factor"],[89,2,1,"","continuous_diffusion_factor"],[89,2,1,"","continuous_diffusion_tests"],[89,2,1,"","continuous_neutrality_measure_for_bit_j"],[89,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[89,2,1,"","convert_to_compound_xor_cipher"],[89,3,1,"","current_round"],[89,3,1,"","current_round_number"],[89,3,1,"","current_round_number_of_components"],[89,2,1,"","delete_generated_evaluate_c_shared_library"],[89,2,1,"","diffusion_tests"],[89,2,1,"","evaluate"],[89,2,1,"","evaluate_using_c"],[89,2,1,"","evaluate_vectorized"],[89,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[89,3,1,"","family_name"],[89,3,1,"","file_name"],[89,2,1,"","find_good_input_difference_for_neural_distinguisher"],[89,2,1,"","find_impossible_property"],[89,2,1,"","generate_bit_based_c_code"],[89,2,1,"","generate_csv_report"],[89,2,1,"","generate_evaluate_c_code_shared_library"],[89,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[89,2,1,"","generate_word_based_c_code"],[89,2,1,"","get_all_components"],[89,2,1,"","get_all_components_ids"],[89,2,1,"","get_all_inputs_bit_positions"],[89,2,1,"","get_component_from_id"],[89,2,1,"","get_components_in_round"],[89,2,1,"","get_current_component_id"],[89,2,1,"","get_model"],[89,2,1,"","get_number_of_components_in_round"],[89,2,1,"","get_partial_cipher"],[89,2,1,"","get_round_from_component_id"],[89,2,1,"","get_sizes_of_components_by_type"],[89,3,1,"","id"],[89,2,1,"","impossible_differential_search"],[89,3,1,"","inputs"],[89,3,1,"","inputs_bit_size"],[89,2,1,"","inputs_size_to_dict"],[89,2,1,"","is_algebraically_secure"],[89,2,1,"","is_andrx"],[89,2,1,"","is_arx"],[89,2,1,"","is_power_of_2_word_based"],[89,2,1,"","is_shift_arx"],[89,2,1,"","is_spn"],[89,2,1,"","make_cipher_id"],[89,2,1,"","make_file_name"],[89,2,1,"","neural_network_blackbox_distinguisher_tests"],[89,2,1,"","neural_network_differential_distinguisher_tests"],[89,3,1,"","number_of_rounds"],[89,3,1,"","output_bit_size"],[89,2,1,"","polynomial_system"],[89,2,1,"","polynomial_system_at_round"],[89,2,1,"","print"],[89,2,1,"","print_as_python_dictionary"],[89,2,1,"","print_as_python_dictionary_to_file"],[89,2,1,"","print_component_analysis_as_radar_charts"],[89,2,1,"","print_evaluation_python_code"],[89,2,1,"","print_evaluation_python_code_to_file"],[89,2,1,"","print_input_information"],[89,3,1,"","reference_code"],[89,2,1,"","remove_key_schedule"],[89,2,1,"","remove_round_component"],[89,2,1,"","remove_round_component_from_id"],[89,3,1,"","rounds"],[89,3,1,"","rounds_as_list"],[89,2,1,"","run_autond_pipeline"],[89,2,1,"","set_file_name"],[89,2,1,"","set_id"],[89,2,1,"","set_inputs"],[89,2,1,"","sort_cipher"],[89,2,1,"","test_against_reference_code"],[89,2,1,"","test_vector_check"],[89,2,1,"","train_gohr_neural_distinguisher"],[89,2,1,"","train_neural_distinguisher"],[89,3,1,"","type"],[89,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.hight_block_cipher":[[90,1,1,"","HightBlockCipher"],[90,4,1,"","init_input"],[90,4,1,"","temp_subkey_generation"],[90,4,1,"","whitening_key_generation"]],"ciphers.block_ciphers.hight_block_cipher.HightBlockCipher":[[90,2,1,"","add_AND_component"],[90,2,1,"","add_FSR_component"],[90,2,1,"","add_MODADD_component"],[90,2,1,"","add_MODSUB_component"],[90,2,1,"","add_NOT_component"],[90,2,1,"","add_OR_component"],[90,2,1,"","add_SBOX_component"],[90,2,1,"","add_SHIFT_component"],[90,2,1,"","add_XOR_component"],[90,2,1,"","add_cipher_output_component"],[90,2,1,"","add_concatenate_component"],[90,2,1,"","add_constant_component"],[90,2,1,"","add_intermediate_output_component"],[90,2,1,"","add_intermediate_output_components"],[90,2,1,"","add_linear_layer_component"],[90,2,1,"","add_mix_column_component"],[90,2,1,"","add_permutation_component"],[90,2,1,"","add_reverse_component"],[90,2,1,"","add_rotate_component"],[90,2,1,"","add_round"],[90,2,1,"","add_round_key_output_component"],[90,2,1,"","add_round_output_component"],[90,2,1,"","add_shift_rows_component"],[90,2,1,"","add_sigma_component"],[90,2,1,"","add_suffix_to_components"],[90,2,1,"","add_theta_keccak_component"],[90,2,1,"","add_theta_xoodoo_component"],[90,2,1,"","add_variable_rotate_component"],[90,2,1,"","add_variable_shift_component"],[90,2,1,"","add_word_permutation_component"],[90,2,1,"","algebraic_tests"],[90,2,1,"","analyze_cipher"],[90,2,1,"","as_python_dictionary"],[90,2,1,"","avalanche_probability_vectors"],[90,2,1,"","cipher_inverse"],[90,2,1,"","cipher_partial_inverse"],[90,2,1,"","component_analysis_tests"],[90,2,1,"","component_from"],[90,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[90,2,1,"","continuous_avalanche_factor"],[90,2,1,"","continuous_diffusion_factor"],[90,2,1,"","continuous_diffusion_tests"],[90,2,1,"","continuous_neutrality_measure_for_bit_j"],[90,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[90,2,1,"","convert_to_compound_xor_cipher"],[90,2,1,"","create_sub_key"],[90,3,1,"","current_round"],[90,3,1,"","current_round_number"],[90,3,1,"","current_round_number_of_components"],[90,2,1,"","delete_generated_evaluate_c_shared_library"],[90,2,1,"","diffusion_tests"],[90,2,1,"","evaluate"],[90,2,1,"","evaluate_using_c"],[90,2,1,"","evaluate_vectorized"],[90,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[90,3,1,"","family_name"],[90,3,1,"","file_name"],[90,2,1,"","final_transformation"],[90,2,1,"","find_good_input_difference_for_neural_distinguisher"],[90,2,1,"","find_impossible_property"],[90,2,1,"","generate_bit_based_c_code"],[90,2,1,"","generate_csv_report"],[90,2,1,"","generate_evaluate_c_code_shared_library"],[90,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[90,2,1,"","generate_word_based_c_code"],[90,2,1,"","get_all_components"],[90,2,1,"","get_all_components_ids"],[90,2,1,"","get_all_inputs_bit_positions"],[90,2,1,"","get_component_from_id"],[90,2,1,"","get_components_in_round"],[90,2,1,"","get_current_component_id"],[90,2,1,"","get_model"],[90,2,1,"","get_number_of_components_in_round"],[90,2,1,"","get_numbers_of_rounds"],[90,2,1,"","get_partial_cipher"],[90,2,1,"","get_round_from_component_id"],[90,2,1,"","get_sizes_of_components_by_type"],[90,3,1,"","id"],[90,2,1,"","impossible_differential_search"],[90,2,1,"","initial_transformation"],[90,3,1,"","inputs"],[90,3,1,"","inputs_bit_size"],[90,2,1,"","inputs_size_to_dict"],[90,2,1,"","is_algebraically_secure"],[90,2,1,"","is_andrx"],[90,2,1,"","is_arx"],[90,2,1,"","is_power_of_2_word_based"],[90,2,1,"","is_shift_arx"],[90,2,1,"","is_spn"],[90,2,1,"","make_cipher_id"],[90,2,1,"","make_file_name"],[90,2,1,"","neural_network_blackbox_distinguisher_tests"],[90,2,1,"","neural_network_differential_distinguisher_tests"],[90,3,1,"","number_of_rounds"],[90,3,1,"","output_bit_size"],[90,2,1,"","polynomial_system"],[90,2,1,"","polynomial_system_at_round"],[90,2,1,"","print"],[90,2,1,"","print_as_python_dictionary"],[90,2,1,"","print_as_python_dictionary_to_file"],[90,2,1,"","print_component_analysis_as_radar_charts"],[90,2,1,"","print_evaluation_python_code"],[90,2,1,"","print_evaluation_python_code_to_file"],[90,2,1,"","print_input_information"],[90,3,1,"","reference_code"],[90,2,1,"","remove_key_schedule"],[90,2,1,"","remove_round_component"],[90,2,1,"","remove_round_component_from_id"],[90,2,1,"","round_function"],[90,3,1,"","rounds"],[90,3,1,"","rounds_as_list"],[90,2,1,"","run_autond_pipeline"],[90,2,1,"","set_file_name"],[90,2,1,"","set_id"],[90,2,1,"","set_inputs"],[90,2,1,"","sort_cipher"],[90,2,1,"","test_against_reference_code"],[90,2,1,"","test_vector_check"],[90,2,1,"","train_gohr_neural_distinguisher"],[90,2,1,"","train_neural_distinguisher"],[90,3,1,"","type"],[90,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.identity_block_cipher":[[91,1,1,"","IdentityBlockCipher"]],"ciphers.block_ciphers.identity_block_cipher.IdentityBlockCipher":[[91,2,1,"","add_AND_component"],[91,2,1,"","add_FSR_component"],[91,2,1,"","add_MODADD_component"],[91,2,1,"","add_MODSUB_component"],[91,2,1,"","add_NOT_component"],[91,2,1,"","add_OR_component"],[91,2,1,"","add_SBOX_component"],[91,2,1,"","add_SHIFT_component"],[91,2,1,"","add_XOR_component"],[91,2,1,"","add_cipher_output_component"],[91,2,1,"","add_concatenate_component"],[91,2,1,"","add_constant_component"],[91,2,1,"","add_intermediate_output_component"],[91,2,1,"","add_linear_layer_component"],[91,2,1,"","add_mix_column_component"],[91,2,1,"","add_permutation_component"],[91,2,1,"","add_reverse_component"],[91,2,1,"","add_rotate_component"],[91,2,1,"","add_round"],[91,2,1,"","add_round_key_output_component"],[91,2,1,"","add_round_output_component"],[91,2,1,"","add_shift_rows_component"],[91,2,1,"","add_sigma_component"],[91,2,1,"","add_suffix_to_components"],[91,2,1,"","add_theta_keccak_component"],[91,2,1,"","add_theta_xoodoo_component"],[91,2,1,"","add_variable_rotate_component"],[91,2,1,"","add_variable_shift_component"],[91,2,1,"","add_word_permutation_component"],[91,2,1,"","algebraic_tests"],[91,2,1,"","analyze_cipher"],[91,2,1,"","as_python_dictionary"],[91,2,1,"","avalanche_probability_vectors"],[91,2,1,"","cipher_inverse"],[91,2,1,"","cipher_partial_inverse"],[91,2,1,"","component_analysis_tests"],[91,2,1,"","component_from"],[91,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[91,2,1,"","continuous_avalanche_factor"],[91,2,1,"","continuous_diffusion_factor"],[91,2,1,"","continuous_diffusion_tests"],[91,2,1,"","continuous_neutrality_measure_for_bit_j"],[91,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[91,2,1,"","convert_to_compound_xor_cipher"],[91,3,1,"","current_round"],[91,3,1,"","current_round_number"],[91,3,1,"","current_round_number_of_components"],[91,2,1,"","delete_generated_evaluate_c_shared_library"],[91,2,1,"","diffusion_tests"],[91,2,1,"","evaluate"],[91,2,1,"","evaluate_using_c"],[91,2,1,"","evaluate_vectorized"],[91,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[91,3,1,"","family_name"],[91,3,1,"","file_name"],[91,2,1,"","find_good_input_difference_for_neural_distinguisher"],[91,2,1,"","find_impossible_property"],[91,2,1,"","generate_bit_based_c_code"],[91,2,1,"","generate_csv_report"],[91,2,1,"","generate_evaluate_c_code_shared_library"],[91,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[91,2,1,"","generate_word_based_c_code"],[91,2,1,"","get_all_components"],[91,2,1,"","get_all_components_ids"],[91,2,1,"","get_all_inputs_bit_positions"],[91,2,1,"","get_component_from_id"],[91,2,1,"","get_components_in_round"],[91,2,1,"","get_current_component_id"],[91,2,1,"","get_model"],[91,2,1,"","get_number_of_components_in_round"],[91,2,1,"","get_partial_cipher"],[91,2,1,"","get_round_from_component_id"],[91,2,1,"","get_sizes_of_components_by_type"],[91,3,1,"","id"],[91,2,1,"","impossible_differential_search"],[91,3,1,"","inputs"],[91,3,1,"","inputs_bit_size"],[91,2,1,"","inputs_size_to_dict"],[91,2,1,"","is_algebraically_secure"],[91,2,1,"","is_andrx"],[91,2,1,"","is_arx"],[91,2,1,"","is_power_of_2_word_based"],[91,2,1,"","is_shift_arx"],[91,2,1,"","is_spn"],[91,2,1,"","make_cipher_id"],[91,2,1,"","make_file_name"],[91,2,1,"","neural_network_blackbox_distinguisher_tests"],[91,2,1,"","neural_network_differential_distinguisher_tests"],[91,3,1,"","number_of_rounds"],[91,3,1,"","output_bit_size"],[91,2,1,"","polynomial_system"],[91,2,1,"","polynomial_system_at_round"],[91,2,1,"","print"],[91,2,1,"","print_as_python_dictionary"],[91,2,1,"","print_as_python_dictionary_to_file"],[91,2,1,"","print_component_analysis_as_radar_charts"],[91,2,1,"","print_evaluation_python_code"],[91,2,1,"","print_evaluation_python_code_to_file"],[91,2,1,"","print_input_information"],[91,3,1,"","reference_code"],[91,2,1,"","remove_key_schedule"],[91,2,1,"","remove_round_component"],[91,2,1,"","remove_round_component_from_id"],[91,3,1,"","rounds"],[91,3,1,"","rounds_as_list"],[91,2,1,"","run_autond_pipeline"],[91,2,1,"","set_file_name"],[91,2,1,"","set_id"],[91,2,1,"","set_inputs"],[91,2,1,"","sort_cipher"],[91,2,1,"","test_against_reference_code"],[91,2,1,"","test_vector_check"],[91,2,1,"","train_gohr_neural_distinguisher"],[91,2,1,"","train_neural_distinguisher"],[91,3,1,"","type"],[91,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.kasumi_block_cipher":[[92,1,1,"","KasumiBlockCipher"]],"ciphers.block_ciphers.kasumi_block_cipher.KasumiBlockCipher":[[92,2,1,"","add_AND_component"],[92,2,1,"","add_FSR_component"],[92,2,1,"","add_MODADD_component"],[92,2,1,"","add_MODSUB_component"],[92,2,1,"","add_NOT_component"],[92,2,1,"","add_OR_component"],[92,2,1,"","add_SBOX_component"],[92,2,1,"","add_SHIFT_component"],[92,2,1,"","add_XOR_component"],[92,2,1,"","add_cipher_output_component"],[92,2,1,"","add_concatenate_component"],[92,2,1,"","add_constant_component"],[92,2,1,"","add_intermediate_output_component"],[92,2,1,"","add_linear_layer_component"],[92,2,1,"","add_mix_column_component"],[92,2,1,"","add_permutation_component"],[92,2,1,"","add_reverse_component"],[92,2,1,"","add_rotate_component"],[92,2,1,"","add_round"],[92,2,1,"","add_round_key_output_component"],[92,2,1,"","add_round_output_component"],[92,2,1,"","add_shift_rows_component"],[92,2,1,"","add_sigma_component"],[92,2,1,"","add_suffix_to_components"],[92,2,1,"","add_theta_keccak_component"],[92,2,1,"","add_theta_xoodoo_component"],[92,2,1,"","add_variable_rotate_component"],[92,2,1,"","add_variable_shift_component"],[92,2,1,"","add_word_permutation_component"],[92,2,1,"","algebraic_tests"],[92,2,1,"","analyze_cipher"],[92,2,1,"","as_python_dictionary"],[92,2,1,"","avalanche_probability_vectors"],[92,2,1,"","cipher_inverse"],[92,2,1,"","cipher_partial_inverse"],[92,2,1,"","component_analysis_tests"],[92,2,1,"","component_from"],[92,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[92,2,1,"","continuous_avalanche_factor"],[92,2,1,"","continuous_diffusion_factor"],[92,2,1,"","continuous_diffusion_tests"],[92,2,1,"","continuous_neutrality_measure_for_bit_j"],[92,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[92,2,1,"","convert_to_compound_xor_cipher"],[92,3,1,"","current_round"],[92,3,1,"","current_round_number"],[92,3,1,"","current_round_number_of_components"],[92,2,1,"","delete_generated_evaluate_c_shared_library"],[92,2,1,"","derived_key"],[92,2,1,"","diffusion_tests"],[92,2,1,"","evaluate"],[92,2,1,"","evaluate_using_c"],[92,2,1,"","evaluate_vectorized"],[92,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[92,3,1,"","family_name"],[92,2,1,"","fi_function"],[92,3,1,"","file_name"],[92,2,1,"","find_good_input_difference_for_neural_distinguisher"],[92,2,1,"","find_impossible_property"],[92,2,1,"","fl_function"],[92,2,1,"","fo_function"],[92,2,1,"","generate_bit_based_c_code"],[92,2,1,"","generate_csv_report"],[92,2,1,"","generate_evaluate_c_code_shared_library"],[92,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[92,2,1,"","generate_word_based_c_code"],[92,2,1,"","get_all_components"],[92,2,1,"","get_all_components_ids"],[92,2,1,"","get_all_inputs_bit_positions"],[92,2,1,"","get_component_from_id"],[92,2,1,"","get_components_in_round"],[92,2,1,"","get_current_component_id"],[92,2,1,"","get_model"],[92,2,1,"","get_number_of_components_in_round"],[92,2,1,"","get_partial_cipher"],[92,2,1,"","get_round_from_component_id"],[92,2,1,"","get_sizes_of_components_by_type"],[92,3,1,"","id"],[92,2,1,"","impossible_differential_search"],[92,3,1,"","inputs"],[92,3,1,"","inputs_bit_size"],[92,2,1,"","inputs_size_to_dict"],[92,2,1,"","is_algebraically_secure"],[92,2,1,"","is_andrx"],[92,2,1,"","is_arx"],[92,2,1,"","is_power_of_2_word_based"],[92,2,1,"","is_shift_arx"],[92,2,1,"","is_spn"],[92,2,1,"","make_cipher_id"],[92,2,1,"","make_file_name"],[92,2,1,"","neural_network_blackbox_distinguisher_tests"],[92,2,1,"","neural_network_differential_distinguisher_tests"],[92,3,1,"","number_of_rounds"],[92,3,1,"","output_bit_size"],[92,2,1,"","polynomial_system"],[92,2,1,"","polynomial_system_at_round"],[92,2,1,"","print"],[92,2,1,"","print_as_python_dictionary"],[92,2,1,"","print_as_python_dictionary_to_file"],[92,2,1,"","print_component_analysis_as_radar_charts"],[92,2,1,"","print_evaluation_python_code"],[92,2,1,"","print_evaluation_python_code_to_file"],[92,2,1,"","print_input_information"],[92,3,1,"","reference_code"],[92,2,1,"","remove_key_schedule"],[92,2,1,"","remove_round_component"],[92,2,1,"","remove_round_component_from_id"],[92,2,1,"","round_initialization"],[92,2,1,"","round_key"],[92,3,1,"","rounds"],[92,3,1,"","rounds_as_list"],[92,2,1,"","run_autond_pipeline"],[92,2,1,"","set_file_name"],[92,2,1,"","set_id"],[92,2,1,"","set_inputs"],[92,2,1,"","sort_cipher"],[92,2,1,"","test_against_reference_code"],[92,2,1,"","test_vector_check"],[92,2,1,"","train_gohr_neural_distinguisher"],[92,2,1,"","train_neural_distinguisher"],[92,3,1,"","type"],[92,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lblock_block_cipher":[[93,1,1,"","LBlockBlockCipher"]],"ciphers.block_ciphers.lblock_block_cipher.LBlockBlockCipher":[[93,2,1,"","add_AND_component"],[93,2,1,"","add_FSR_component"],[93,2,1,"","add_MODADD_component"],[93,2,1,"","add_MODSUB_component"],[93,2,1,"","add_NOT_component"],[93,2,1,"","add_OR_component"],[93,2,1,"","add_SBOX_component"],[93,2,1,"","add_SHIFT_component"],[93,2,1,"","add_XOR_component"],[93,2,1,"","add_cipher_output_component"],[93,2,1,"","add_concatenate_component"],[93,2,1,"","add_constant_component"],[93,2,1,"","add_intermediate_output_component"],[93,2,1,"","add_linear_layer_component"],[93,2,1,"","add_mix_column_component"],[93,2,1,"","add_permutation_component"],[93,2,1,"","add_reverse_component"],[93,2,1,"","add_rotate_component"],[93,2,1,"","add_round"],[93,2,1,"","add_round_key_output_component"],[93,2,1,"","add_round_output_component"],[93,2,1,"","add_shift_rows_component"],[93,2,1,"","add_sigma_component"],[93,2,1,"","add_suffix_to_components"],[93,2,1,"","add_theta_keccak_component"],[93,2,1,"","add_theta_xoodoo_component"],[93,2,1,"","add_variable_rotate_component"],[93,2,1,"","add_variable_shift_component"],[93,2,1,"","add_word_permutation_component"],[93,2,1,"","algebraic_tests"],[93,2,1,"","analyze_cipher"],[93,2,1,"","as_python_dictionary"],[93,2,1,"","avalanche_probability_vectors"],[93,2,1,"","cipher_inverse"],[93,2,1,"","cipher_partial_inverse"],[93,2,1,"","component_analysis_tests"],[93,2,1,"","component_from"],[93,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[93,2,1,"","continuous_avalanche_factor"],[93,2,1,"","continuous_diffusion_factor"],[93,2,1,"","continuous_diffusion_tests"],[93,2,1,"","continuous_neutrality_measure_for_bit_j"],[93,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[93,2,1,"","convert_to_compound_xor_cipher"],[93,3,1,"","current_round"],[93,3,1,"","current_round_number"],[93,3,1,"","current_round_number_of_components"],[93,2,1,"","delete_generated_evaluate_c_shared_library"],[93,2,1,"","diffusion_tests"],[93,2,1,"","evaluate"],[93,2,1,"","evaluate_using_c"],[93,2,1,"","evaluate_vectorized"],[93,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[93,3,1,"","family_name"],[93,3,1,"","file_name"],[93,2,1,"","find_good_input_difference_for_neural_distinguisher"],[93,2,1,"","find_impossible_property"],[93,2,1,"","generate_bit_based_c_code"],[93,2,1,"","generate_csv_report"],[93,2,1,"","generate_evaluate_c_code_shared_library"],[93,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[93,2,1,"","generate_word_based_c_code"],[93,2,1,"","get_all_components"],[93,2,1,"","get_all_components_ids"],[93,2,1,"","get_all_inputs_bit_positions"],[93,2,1,"","get_component_from_id"],[93,2,1,"","get_components_in_round"],[93,2,1,"","get_current_component_id"],[93,2,1,"","get_model"],[93,2,1,"","get_number_of_components_in_round"],[93,2,1,"","get_partial_cipher"],[93,2,1,"","get_round_from_component_id"],[93,2,1,"","get_sizes_of_components_by_type"],[93,3,1,"","id"],[93,2,1,"","impossible_differential_search"],[93,3,1,"","inputs"],[93,3,1,"","inputs_bit_size"],[93,2,1,"","inputs_size_to_dict"],[93,2,1,"","is_algebraically_secure"],[93,2,1,"","is_andrx"],[93,2,1,"","is_arx"],[93,2,1,"","is_power_of_2_word_based"],[93,2,1,"","is_shift_arx"],[93,2,1,"","is_spn"],[93,2,1,"","make_cipher_id"],[93,2,1,"","make_file_name"],[93,2,1,"","neural_network_blackbox_distinguisher_tests"],[93,2,1,"","neural_network_differential_distinguisher_tests"],[93,3,1,"","number_of_rounds"],[93,3,1,"","output_bit_size"],[93,2,1,"","polynomial_system"],[93,2,1,"","polynomial_system_at_round"],[93,2,1,"","print"],[93,2,1,"","print_as_python_dictionary"],[93,2,1,"","print_as_python_dictionary_to_file"],[93,2,1,"","print_component_analysis_as_radar_charts"],[93,2,1,"","print_evaluation_python_code"],[93,2,1,"","print_evaluation_python_code_to_file"],[93,2,1,"","print_input_information"],[93,3,1,"","reference_code"],[93,2,1,"","remove_key_schedule"],[93,2,1,"","remove_round_component"],[93,2,1,"","remove_round_component_from_id"],[93,2,1,"","round_function"],[93,3,1,"","rounds"],[93,3,1,"","rounds_as_list"],[93,2,1,"","run_autond_pipeline"],[93,2,1,"","set_file_name"],[93,2,1,"","set_id"],[93,2,1,"","set_inputs"],[93,2,1,"","sort_cipher"],[93,2,1,"","test_against_reference_code"],[93,2,1,"","test_vector_check"],[93,2,1,"","train_gohr_neural_distinguisher"],[93,2,1,"","train_neural_distinguisher"],[93,3,1,"","type"],[93,2,1,"","update_key"],[93,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lea_block_cipher":[[94,1,1,"","LeaBlockCipher"],[94,4,1,"","format_output"],[94,4,1,"","init_input"]],"ciphers.block_ciphers.lea_block_cipher.LeaBlockCipher":[[94,2,1,"","add_AND_component"],[94,2,1,"","add_FSR_component"],[94,2,1,"","add_MODADD_component"],[94,2,1,"","add_MODSUB_component"],[94,2,1,"","add_NOT_component"],[94,2,1,"","add_OR_component"],[94,2,1,"","add_SBOX_component"],[94,2,1,"","add_SHIFT_component"],[94,2,1,"","add_XOR_component"],[94,2,1,"","add_cipher_output_component"],[94,2,1,"","add_concatenate_component"],[94,2,1,"","add_constant_component"],[94,2,1,"","add_intermediate_output_component"],[94,2,1,"","add_intermediate_output_components"],[94,2,1,"","add_linear_layer_component"],[94,2,1,"","add_mix_column_component"],[94,2,1,"","add_permutation_component"],[94,2,1,"","add_reverse_component"],[94,2,1,"","add_rotate_component"],[94,2,1,"","add_round"],[94,2,1,"","add_round_key_output_component"],[94,2,1,"","add_round_output_component"],[94,2,1,"","add_shift_rows_component"],[94,2,1,"","add_sigma_component"],[94,2,1,"","add_suffix_to_components"],[94,2,1,"","add_theta_keccak_component"],[94,2,1,"","add_theta_xoodoo_component"],[94,2,1,"","add_variable_rotate_component"],[94,2,1,"","add_variable_shift_component"],[94,2,1,"","add_word_permutation_component"],[94,2,1,"","algebraic_tests"],[94,2,1,"","analyze_cipher"],[94,2,1,"","as_python_dictionary"],[94,2,1,"","avalanche_probability_vectors"],[94,2,1,"","cipher_inverse"],[94,2,1,"","cipher_partial_inverse"],[94,2,1,"","component_analysis_tests"],[94,2,1,"","component_from"],[94,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[94,2,1,"","continuous_avalanche_factor"],[94,2,1,"","continuous_diffusion_factor"],[94,2,1,"","continuous_diffusion_tests"],[94,2,1,"","continuous_neutrality_measure_for_bit_j"],[94,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[94,2,1,"","convert_to_compound_xor_cipher"],[94,3,1,"","current_round"],[94,3,1,"","current_round_number"],[94,3,1,"","current_round_number_of_components"],[94,2,1,"","delete_generated_evaluate_c_shared_library"],[94,2,1,"","diffusion_tests"],[94,2,1,"","evaluate"],[94,2,1,"","evaluate_using_c"],[94,2,1,"","evaluate_vectorized"],[94,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[94,3,1,"","family_name"],[94,3,1,"","file_name"],[94,2,1,"","find_good_input_difference_for_neural_distinguisher"],[94,2,1,"","find_impossible_property"],[94,2,1,"","generate_bit_based_c_code"],[94,2,1,"","generate_csv_report"],[94,2,1,"","generate_evaluate_c_code_shared_library"],[94,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[94,2,1,"","generate_word_based_c_code"],[94,2,1,"","get_all_components"],[94,2,1,"","get_all_components_ids"],[94,2,1,"","get_all_inputs_bit_positions"],[94,2,1,"","get_component_from_id"],[94,2,1,"","get_components_in_round"],[94,2,1,"","get_current_component_id"],[94,2,1,"","get_ith_key128"],[94,2,1,"","get_ith_key192"],[94,2,1,"","get_ith_key256"],[94,2,1,"","get_model"],[94,2,1,"","get_number_of_components_in_round"],[94,2,1,"","get_numbers_of_rounds"],[94,2,1,"","get_partial_cipher"],[94,2,1,"","get_round_from_component_id"],[94,2,1,"","get_sizes_of_components_by_type"],[94,3,1,"","id"],[94,2,1,"","impossible_differential_search"],[94,3,1,"","inputs"],[94,3,1,"","inputs_bit_size"],[94,2,1,"","inputs_size_to_dict"],[94,2,1,"","is_algebraically_secure"],[94,2,1,"","is_andrx"],[94,2,1,"","is_arx"],[94,2,1,"","is_power_of_2_word_based"],[94,2,1,"","is_shift_arx"],[94,2,1,"","is_spn"],[94,2,1,"","make_cipher_id"],[94,2,1,"","make_file_name"],[94,2,1,"","neural_network_blackbox_distinguisher_tests"],[94,2,1,"","neural_network_differential_distinguisher_tests"],[94,3,1,"","number_of_rounds"],[94,3,1,"","output_bit_size"],[94,2,1,"","polynomial_system"],[94,2,1,"","polynomial_system_at_round"],[94,2,1,"","print"],[94,2,1,"","print_as_python_dictionary"],[94,2,1,"","print_as_python_dictionary_to_file"],[94,2,1,"","print_component_analysis_as_radar_charts"],[94,2,1,"","print_evaluation_python_code"],[94,2,1,"","print_evaluation_python_code_to_file"],[94,2,1,"","print_input_information"],[94,3,1,"","reference_code"],[94,2,1,"","remove_key_schedule"],[94,2,1,"","remove_round_component"],[94,2,1,"","remove_round_component_from_id"],[94,2,1,"","round_function"],[94,3,1,"","rounds"],[94,3,1,"","rounds_as_list"],[94,2,1,"","run_autond_pipeline"],[94,2,1,"","set_file_name"],[94,2,1,"","set_id"],[94,2,1,"","set_inputs"],[94,2,1,"","sort_cipher"],[94,2,1,"","test_against_reference_code"],[94,2,1,"","test_vector_check"],[94,2,1,"","train_gohr_neural_distinguisher"],[94,2,1,"","train_neural_distinguisher"],[94,3,1,"","type"],[94,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_block_cipher":[[95,1,1,"","LowMCBlockCipher"]],"ciphers.block_ciphers.lowmc_block_cipher.LowMCBlockCipher":[[95,2,1,"","add_AND_component"],[95,2,1,"","add_FSR_component"],[95,2,1,"","add_MODADD_component"],[95,2,1,"","add_MODSUB_component"],[95,2,1,"","add_NOT_component"],[95,2,1,"","add_OR_component"],[95,2,1,"","add_SBOX_component"],[95,2,1,"","add_SHIFT_component"],[95,2,1,"","add_XOR_component"],[95,2,1,"","add_cipher_output_component"],[95,2,1,"","add_concatenate_component"],[95,2,1,"","add_constant_component"],[95,2,1,"","add_intermediate_output_component"],[95,2,1,"","add_linear_layer_component"],[95,2,1,"","add_mix_column_component"],[95,2,1,"","add_output_component"],[95,2,1,"","add_permutation_component"],[95,2,1,"","add_reverse_component"],[95,2,1,"","add_rotate_component"],[95,2,1,"","add_round"],[95,2,1,"","add_round_constant"],[95,2,1,"","add_round_key"],[95,2,1,"","add_round_key_output_component"],[95,2,1,"","add_round_output_component"],[95,2,1,"","add_shift_rows_component"],[95,2,1,"","add_sigma_component"],[95,2,1,"","add_suffix_to_components"],[95,2,1,"","add_theta_keccak_component"],[95,2,1,"","add_theta_xoodoo_component"],[95,2,1,"","add_variable_rotate_component"],[95,2,1,"","add_variable_shift_component"],[95,2,1,"","add_word_permutation_component"],[95,2,1,"","algebraic_tests"],[95,2,1,"","analyze_cipher"],[95,2,1,"","as_python_dictionary"],[95,2,1,"","avalanche_probability_vectors"],[95,2,1,"","cipher_inverse"],[95,2,1,"","cipher_partial_inverse"],[95,2,1,"","component_analysis_tests"],[95,2,1,"","component_from"],[95,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[95,2,1,"","continuous_avalanche_factor"],[95,2,1,"","continuous_diffusion_factor"],[95,2,1,"","continuous_diffusion_tests"],[95,2,1,"","continuous_neutrality_measure_for_bit_j"],[95,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[95,2,1,"","convert_to_compound_xor_cipher"],[95,3,1,"","current_round"],[95,3,1,"","current_round_number"],[95,3,1,"","current_round_number_of_components"],[95,2,1,"","define_number_of_rounds"],[95,2,1,"","define_number_of_sboxes"],[95,2,1,"","delete_generated_evaluate_c_shared_library"],[95,2,1,"","diffusion_tests"],[95,2,1,"","evaluate"],[95,2,1,"","evaluate_using_c"],[95,2,1,"","evaluate_vectorized"],[95,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[95,3,1,"","family_name"],[95,3,1,"","file_name"],[95,2,1,"","find_good_input_difference_for_neural_distinguisher"],[95,2,1,"","find_impossible_property"],[95,2,1,"","generate_bit_based_c_code"],[95,2,1,"","generate_csv_report"],[95,2,1,"","generate_evaluate_c_code_shared_library"],[95,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[95,2,1,"","generate_word_based_c_code"],[95,2,1,"","get_all_components"],[95,2,1,"","get_all_components_ids"],[95,2,1,"","get_all_inputs_bit_positions"],[95,2,1,"","get_component_from_id"],[95,2,1,"","get_components_in_round"],[95,2,1,"","get_current_component_id"],[95,2,1,"","get_model"],[95,2,1,"","get_number_of_components_in_round"],[95,2,1,"","get_partial_cipher"],[95,2,1,"","get_round_from_component_id"],[95,2,1,"","get_sizes_of_components_by_type"],[95,3,1,"","id"],[95,2,1,"","impossible_differential_search"],[95,3,1,"","inputs"],[95,3,1,"","inputs_bit_size"],[95,2,1,"","inputs_size_to_dict"],[95,2,1,"","is_algebraically_secure"],[95,2,1,"","is_andrx"],[95,2,1,"","is_arx"],[95,2,1,"","is_power_of_2_word_based"],[95,2,1,"","is_shift_arx"],[95,2,1,"","is_spn"],[95,2,1,"","linear_layer"],[95,2,1,"","load_constants"],[95,2,1,"","make_cipher_id"],[95,2,1,"","make_file_name"],[95,2,1,"","neural_network_blackbox_distinguisher_tests"],[95,2,1,"","neural_network_differential_distinguisher_tests"],[95,3,1,"","number_of_rounds"],[95,3,1,"","output_bit_size"],[95,2,1,"","polynomial_system"],[95,2,1,"","polynomial_system_at_round"],[95,2,1,"","print"],[95,2,1,"","print_as_python_dictionary"],[95,2,1,"","print_as_python_dictionary_to_file"],[95,2,1,"","print_component_analysis_as_radar_charts"],[95,2,1,"","print_evaluation_python_code"],[95,2,1,"","print_evaluation_python_code_to_file"],[95,2,1,"","print_input_information"],[95,3,1,"","reference_code"],[95,2,1,"","remove_key_schedule"],[95,2,1,"","remove_round_component"],[95,2,1,"","remove_round_component_from_id"],[95,3,1,"","rounds"],[95,3,1,"","rounds_as_list"],[95,2,1,"","run_autond_pipeline"],[95,2,1,"","sbox_layer"],[95,2,1,"","sbox_layer_picnic"],[95,2,1,"","set_file_name"],[95,2,1,"","set_id"],[95,2,1,"","set_inputs"],[95,2,1,"","sort_cipher"],[95,2,1,"","test_against_reference_code"],[95,2,1,"","test_vector_check"],[95,2,1,"","train_gohr_neural_distinguisher"],[95,2,1,"","train_neural_distinguisher"],[95,3,1,"","type"],[95,2,1,"","update_key_register"],[95,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_generate_matrices":[[96,4,1,"","grain_ssg"],[96,4,1,"","instantiate_matrix"],[96,4,1,"","main"],[96,4,1,"","rank"],[96,4,1,"","xor_matrix_values"]],"ciphers.block_ciphers.midori_block_cipher":[[97,1,1,"","MidoriBlockCipher"]],"ciphers.block_ciphers.midori_block_cipher.MidoriBlockCipher":[[97,2,1,"","add_AND_component"],[97,2,1,"","add_FSR_component"],[97,2,1,"","add_MODADD_component"],[97,2,1,"","add_MODSUB_component"],[97,2,1,"","add_NOT_component"],[97,2,1,"","add_OR_component"],[97,2,1,"","add_SBOX_component"],[97,2,1,"","add_SHIFT_component"],[97,2,1,"","add_XOR_component"],[97,2,1,"","add_cipher_output_component"],[97,2,1,"","add_concatenate_component"],[97,2,1,"","add_constant_component"],[97,2,1,"","add_intermediate_output_component"],[97,2,1,"","add_linear_layer_component"],[97,2,1,"","add_mix_column_component"],[97,2,1,"","add_permutation_component"],[97,2,1,"","add_reverse_component"],[97,2,1,"","add_rotate_component"],[97,2,1,"","add_round"],[97,2,1,"","add_round_key_output_component"],[97,2,1,"","add_round_output_component"],[97,2,1,"","add_shift_rows_component"],[97,2,1,"","add_sigma_component"],[97,2,1,"","add_suffix_to_components"],[97,2,1,"","add_theta_keccak_component"],[97,2,1,"","add_theta_xoodoo_component"],[97,2,1,"","add_variable_rotate_component"],[97,2,1,"","add_variable_shift_component"],[97,2,1,"","add_word_permutation_component"],[97,2,1,"","algebraic_tests"],[97,2,1,"","analyze_cipher"],[97,2,1,"","as_python_dictionary"],[97,2,1,"","avalanche_probability_vectors"],[97,2,1,"","cipher_inverse"],[97,2,1,"","cipher_partial_inverse"],[97,2,1,"","component_analysis_tests"],[97,2,1,"","component_from"],[97,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[97,2,1,"","continuous_avalanche_factor"],[97,2,1,"","continuous_diffusion_factor"],[97,2,1,"","continuous_diffusion_tests"],[97,2,1,"","continuous_neutrality_measure_for_bit_j"],[97,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[97,2,1,"","convert_to_compound_xor_cipher"],[97,3,1,"","current_round"],[97,3,1,"","current_round_number"],[97,3,1,"","current_round_number_of_components"],[97,2,1,"","delete_generated_evaluate_c_shared_library"],[97,2,1,"","diffusion_tests"],[97,2,1,"","evaluate"],[97,2,1,"","evaluate_using_c"],[97,2,1,"","evaluate_vectorized"],[97,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[97,3,1,"","family_name"],[97,3,1,"","file_name"],[97,2,1,"","find_good_input_difference_for_neural_distinguisher"],[97,2,1,"","find_impossible_property"],[97,2,1,"","generate_bit_based_c_code"],[97,2,1,"","generate_csv_report"],[97,2,1,"","generate_evaluate_c_code_shared_library"],[97,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[97,2,1,"","generate_word_based_c_code"],[97,2,1,"","get_all_components"],[97,2,1,"","get_all_components_ids"],[97,2,1,"","get_all_inputs_bit_positions"],[97,2,1,"","get_component_from_id"],[97,2,1,"","get_components_in_round"],[97,2,1,"","get_current_component_id"],[97,2,1,"","get_model"],[97,2,1,"","get_number_of_components_in_round"],[97,2,1,"","get_partial_cipher"],[97,2,1,"","get_round_from_component_id"],[97,2,1,"","get_sizes_of_components_by_type"],[97,3,1,"","id"],[97,2,1,"","impossible_differential_search"],[97,3,1,"","inputs"],[97,3,1,"","inputs_bit_size"],[97,2,1,"","inputs_size_to_dict"],[97,2,1,"","is_algebraically_secure"],[97,2,1,"","is_andrx"],[97,2,1,"","is_arx"],[97,2,1,"","is_power_of_2_word_based"],[97,2,1,"","is_shift_arx"],[97,2,1,"","is_spn"],[97,2,1,"","key_add"],[97,2,1,"","make_cipher_id"],[97,2,1,"","make_file_name"],[97,2,1,"","mix_column"],[97,2,1,"","neural_network_blackbox_distinguisher_tests"],[97,2,1,"","neural_network_differential_distinguisher_tests"],[97,3,1,"","number_of_rounds"],[97,3,1,"","output_bit_size"],[97,2,1,"","polynomial_system"],[97,2,1,"","polynomial_system_at_round"],[97,2,1,"","print"],[97,2,1,"","print_as_python_dictionary"],[97,2,1,"","print_as_python_dictionary_to_file"],[97,2,1,"","print_component_analysis_as_radar_charts"],[97,2,1,"","print_evaluation_python_code"],[97,2,1,"","print_evaluation_python_code_to_file"],[97,2,1,"","print_input_information"],[97,3,1,"","reference_code"],[97,2,1,"","remove_key_schedule"],[97,2,1,"","remove_round_component"],[97,2,1,"","remove_round_component_from_id"],[97,2,1,"","round_key"],[97,3,1,"","rounds"],[97,3,1,"","rounds_as_list"],[97,2,1,"","run_autond_pipeline"],[97,2,1,"","set_file_name"],[97,2,1,"","set_id"],[97,2,1,"","set_inputs"],[97,2,1,"","shuffle_cell"],[97,2,1,"","sort_cipher"],[97,2,1,"","sub_cell"],[97,2,1,"","test_against_reference_code"],[97,2,1,"","test_vector_check"],[97,2,1,"","train_gohr_neural_distinguisher"],[97,2,1,"","train_neural_distinguisher"],[97,3,1,"","type"],[97,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.present_block_cipher":[[98,1,1,"","PresentBlockCipher"]],"ciphers.block_ciphers.present_block_cipher.PresentBlockCipher":[[98,2,1,"","add_AND_component"],[98,2,1,"","add_FSR_component"],[98,2,1,"","add_MODADD_component"],[98,2,1,"","add_MODSUB_component"],[98,2,1,"","add_NOT_component"],[98,2,1,"","add_OR_component"],[98,2,1,"","add_SBOX_component"],[98,2,1,"","add_SHIFT_component"],[98,2,1,"","add_XOR_component"],[98,2,1,"","add_cipher_output_component"],[98,2,1,"","add_concatenate_component"],[98,2,1,"","add_constant_component"],[98,2,1,"","add_intermediate_output_component"],[98,2,1,"","add_linear_layer_component"],[98,2,1,"","add_mix_column_component"],[98,2,1,"","add_permutation_component"],[98,2,1,"","add_reverse_component"],[98,2,1,"","add_rotate_component"],[98,2,1,"","add_round"],[98,2,1,"","add_round_key"],[98,2,1,"","add_round_key_output_component"],[98,2,1,"","add_round_output_component"],[98,2,1,"","add_shift_rows_component"],[98,2,1,"","add_sigma_component"],[98,2,1,"","add_suffix_to_components"],[98,2,1,"","add_theta_keccak_component"],[98,2,1,"","add_theta_xoodoo_component"],[98,2,1,"","add_variable_rotate_component"],[98,2,1,"","add_variable_shift_component"],[98,2,1,"","add_word_permutation_component"],[98,2,1,"","algebraic_tests"],[98,2,1,"","analyze_cipher"],[98,2,1,"","as_python_dictionary"],[98,2,1,"","avalanche_probability_vectors"],[98,2,1,"","cipher_inverse"],[98,2,1,"","cipher_partial_inverse"],[98,2,1,"","component_analysis_tests"],[98,2,1,"","component_from"],[98,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[98,2,1,"","continuous_avalanche_factor"],[98,2,1,"","continuous_diffusion_factor"],[98,2,1,"","continuous_diffusion_tests"],[98,2,1,"","continuous_neutrality_measure_for_bit_j"],[98,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[98,2,1,"","convert_to_compound_xor_cipher"],[98,3,1,"","current_round"],[98,3,1,"","current_round_number"],[98,3,1,"","current_round_number_of_components"],[98,2,1,"","delete_generated_evaluate_c_shared_library"],[98,2,1,"","diffusion_tests"],[98,2,1,"","evaluate"],[98,2,1,"","evaluate_using_c"],[98,2,1,"","evaluate_vectorized"],[98,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[98,3,1,"","family_name"],[98,3,1,"","file_name"],[98,2,1,"","find_good_input_difference_for_neural_distinguisher"],[98,2,1,"","find_impossible_property"],[98,2,1,"","generate_bit_based_c_code"],[98,2,1,"","generate_csv_report"],[98,2,1,"","generate_evaluate_c_code_shared_library"],[98,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[98,2,1,"","generate_word_based_c_code"],[98,2,1,"","get_all_components"],[98,2,1,"","get_all_components_ids"],[98,2,1,"","get_all_inputs_bit_positions"],[98,2,1,"","get_component_from_id"],[98,2,1,"","get_components_in_round"],[98,2,1,"","get_current_component_id"],[98,2,1,"","get_model"],[98,2,1,"","get_number_of_components_in_round"],[98,2,1,"","get_partial_cipher"],[98,2,1,"","get_round_from_component_id"],[98,2,1,"","get_sizes_of_components_by_type"],[98,3,1,"","id"],[98,2,1,"","impossible_differential_search"],[98,3,1,"","inputs"],[98,3,1,"","inputs_bit_size"],[98,2,1,"","inputs_size_to_dict"],[98,2,1,"","is_algebraically_secure"],[98,2,1,"","is_andrx"],[98,2,1,"","is_arx"],[98,2,1,"","is_power_of_2_word_based"],[98,2,1,"","is_shift_arx"],[98,2,1,"","is_spn"],[98,2,1,"","make_cipher_id"],[98,2,1,"","make_file_name"],[98,2,1,"","neural_network_blackbox_distinguisher_tests"],[98,2,1,"","neural_network_differential_distinguisher_tests"],[98,3,1,"","number_of_rounds"],[98,3,1,"","output_bit_size"],[98,2,1,"","permutation_layer"],[98,2,1,"","polynomial_system"],[98,2,1,"","polynomial_system_at_round"],[98,2,1,"","print"],[98,2,1,"","print_as_python_dictionary"],[98,2,1,"","print_as_python_dictionary_to_file"],[98,2,1,"","print_component_analysis_as_radar_charts"],[98,2,1,"","print_evaluation_python_code"],[98,2,1,"","print_evaluation_python_code_to_file"],[98,2,1,"","print_input_information"],[98,3,1,"","reference_code"],[98,2,1,"","remove_key_schedule"],[98,2,1,"","remove_round_component"],[98,2,1,"","remove_round_component_from_id"],[98,3,1,"","rounds"],[98,3,1,"","rounds_as_list"],[98,2,1,"","run_autond_pipeline"],[98,2,1,"","sbox_layer"],[98,2,1,"","set_file_name"],[98,2,1,"","set_id"],[98,2,1,"","set_inputs"],[98,2,1,"","sort_cipher"],[98,2,1,"","test_against_reference_code"],[98,2,1,"","test_vector_check"],[98,2,1,"","train_gohr_neural_distinguisher"],[98,2,1,"","train_neural_distinguisher"],[98,3,1,"","type"],[98,2,1,"","update_key_register"],[98,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.qarmav2_block_cipher":[[99,1,1,"","QARMAv2BlockCipher"]],"ciphers.block_ciphers.qarmav2_block_cipher.QARMAv2BlockCipher":[[99,2,1,"","M_function"],[99,2,1,"","add_AND_component"],[99,2,1,"","add_FSR_component"],[99,2,1,"","add_MODADD_component"],[99,2,1,"","add_MODSUB_component"],[99,2,1,"","add_NOT_component"],[99,2,1,"","add_OR_component"],[99,2,1,"","add_SBOX_component"],[99,2,1,"","add_SHIFT_component"],[99,2,1,"","add_XOR_component"],[99,2,1,"","add_cipher_output_component"],[99,2,1,"","add_concatenate_component"],[99,2,1,"","add_constant_component"],[99,2,1,"","add_intermediate_output_component"],[99,2,1,"","add_linear_layer_component"],[99,2,1,"","add_mix_column_component"],[99,2,1,"","add_permutation_component"],[99,2,1,"","add_reverse_component"],[99,2,1,"","add_rotate_component"],[99,2,1,"","add_round"],[99,2,1,"","add_round_key_output_component"],[99,2,1,"","add_round_output_component"],[99,2,1,"","add_shift_rows_component"],[99,2,1,"","add_sigma_component"],[99,2,1,"","add_suffix_to_components"],[99,2,1,"","add_theta_keccak_component"],[99,2,1,"","add_theta_xoodoo_component"],[99,2,1,"","add_variable_rotate_component"],[99,2,1,"","add_variable_shift_component"],[99,2,1,"","add_word_permutation_component"],[99,2,1,"","algebraic_tests"],[99,2,1,"","analyze_cipher"],[99,2,1,"","as_python_dictionary"],[99,2,1,"","avalanche_probability_vectors"],[99,2,1,"","cipher_inverse"],[99,2,1,"","cipher_partial_inverse"],[99,2,1,"","component_analysis_tests"],[99,2,1,"","component_from"],[99,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[99,2,1,"","continuous_avalanche_factor"],[99,2,1,"","continuous_diffusion_factor"],[99,2,1,"","continuous_diffusion_tests"],[99,2,1,"","continuous_neutrality_measure_for_bit_j"],[99,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[99,2,1,"","convert_to_compound_xor_cipher"],[99,3,1,"","current_round"],[99,3,1,"","current_round_number"],[99,3,1,"","current_round_number_of_components"],[99,2,1,"","delete_generated_evaluate_c_shared_library"],[99,2,1,"","diffusion_tests"],[99,2,1,"","evaluate"],[99,2,1,"","evaluate_using_c"],[99,2,1,"","evaluate_vectorized"],[99,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[99,3,1,"","family_name"],[99,3,1,"","file_name"],[99,2,1,"","find_good_input_difference_for_neural_distinguisher"],[99,2,1,"","find_impossible_property"],[99,2,1,"","generate_bit_based_c_code"],[99,2,1,"","generate_csv_report"],[99,2,1,"","generate_evaluate_c_code_shared_library"],[99,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[99,2,1,"","generate_word_based_c_code"],[99,2,1,"","get_all_components"],[99,2,1,"","get_all_components_ids"],[99,2,1,"","get_all_inputs_bit_positions"],[99,2,1,"","get_component_from_id"],[99,2,1,"","get_components_in_round"],[99,2,1,"","get_current_component_id"],[99,2,1,"","get_model"],[99,2,1,"","get_number_of_components_in_round"],[99,2,1,"","get_partial_cipher"],[99,2,1,"","get_round_from_component_id"],[99,2,1,"","get_sizes_of_components_by_type"],[99,3,1,"","id"],[99,2,1,"","impossible_differential_search"],[99,3,1,"","inputs"],[99,3,1,"","inputs_bit_size"],[99,2,1,"","inputs_size_to_dict"],[99,2,1,"","is_algebraically_secure"],[99,2,1,"","is_andrx"],[99,2,1,"","is_arx"],[99,2,1,"","is_power_of_2_word_based"],[99,2,1,"","is_shift_arx"],[99,2,1,"","is_spn"],[99,2,1,"","majority_function"],[99,2,1,"","make_cipher_id"],[99,2,1,"","make_file_name"],[99,2,1,"","neural_network_blackbox_distinguisher_tests"],[99,2,1,"","neural_network_differential_distinguisher_tests"],[99,3,1,"","number_of_rounds"],[99,2,1,"","o_function"],[99,3,1,"","output_bit_size"],[99,2,1,"","polynomial_system"],[99,2,1,"","polynomial_system_at_round"],[99,2,1,"","print"],[99,2,1,"","print_as_python_dictionary"],[99,2,1,"","print_as_python_dictionary_to_file"],[99,2,1,"","print_component_analysis_as_radar_charts"],[99,2,1,"","print_evaluation_python_code"],[99,2,1,"","print_evaluation_python_code_to_file"],[99,2,1,"","print_input_information"],[99,3,1,"","reference_code"],[99,2,1,"","remove_key_schedule"],[99,2,1,"","remove_round_component"],[99,2,1,"","remove_round_component_from_id"],[99,3,1,"","rounds"],[99,3,1,"","rounds_as_list"],[99,2,1,"","run_autond_pipeline"],[99,2,1,"","set_file_name"],[99,2,1,"","set_id"],[99,2,1,"","set_inputs"],[99,2,1,"","sort_cipher"],[99,2,1,"","test_against_reference_code"],[99,2,1,"","test_vector_check"],[99,2,1,"","train_gohr_neural_distinguisher"],[99,2,1,"","train_neural_distinguisher"],[99,3,1,"","type"],[99,2,1,"","update_constants"],[99,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.raiden_block_cipher":[[100,1,1,"","RaidenBlockCipher"]],"ciphers.block_ciphers.raiden_block_cipher.RaidenBlockCipher":[[100,2,1,"","add_AND_component"],[100,2,1,"","add_FSR_component"],[100,2,1,"","add_MODADD_component"],[100,2,1,"","add_MODSUB_component"],[100,2,1,"","add_NOT_component"],[100,2,1,"","add_OR_component"],[100,2,1,"","add_SBOX_component"],[100,2,1,"","add_SHIFT_component"],[100,2,1,"","add_XOR_component"],[100,2,1,"","add_cipher_output_component"],[100,2,1,"","add_concatenate_component"],[100,2,1,"","add_constant_component"],[100,2,1,"","add_intermediate_output_component"],[100,2,1,"","add_linear_layer_component"],[100,2,1,"","add_mix_column_component"],[100,2,1,"","add_permutation_component"],[100,2,1,"","add_reverse_component"],[100,2,1,"","add_rotate_component"],[100,2,1,"","add_round"],[100,2,1,"","add_round_key_output_component"],[100,2,1,"","add_round_output_component"],[100,2,1,"","add_shift_rows_component"],[100,2,1,"","add_sigma_component"],[100,2,1,"","add_suffix_to_components"],[100,2,1,"","add_theta_keccak_component"],[100,2,1,"","add_theta_xoodoo_component"],[100,2,1,"","add_variable_rotate_component"],[100,2,1,"","add_variable_shift_component"],[100,2,1,"","add_word_permutation_component"],[100,2,1,"","algebraic_tests"],[100,2,1,"","analyze_cipher"],[100,2,1,"","as_python_dictionary"],[100,2,1,"","avalanche_probability_vectors"],[100,2,1,"","cipher_inverse"],[100,2,1,"","cipher_partial_inverse"],[100,2,1,"","component_analysis_tests"],[100,2,1,"","component_from"],[100,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[100,2,1,"","continuous_avalanche_factor"],[100,2,1,"","continuous_diffusion_factor"],[100,2,1,"","continuous_diffusion_tests"],[100,2,1,"","continuous_neutrality_measure_for_bit_j"],[100,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[100,2,1,"","convert_to_compound_xor_cipher"],[100,3,1,"","current_round"],[100,3,1,"","current_round_number"],[100,3,1,"","current_round_number_of_components"],[100,2,1,"","delete_generated_evaluate_c_shared_library"],[100,2,1,"","diffusion_tests"],[100,2,1,"","evaluate"],[100,2,1,"","evaluate_using_c"],[100,2,1,"","evaluate_vectorized"],[100,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[100,3,1,"","family_name"],[100,3,1,"","file_name"],[100,2,1,"","find_good_input_difference_for_neural_distinguisher"],[100,2,1,"","find_impossible_property"],[100,2,1,"","generate_bit_based_c_code"],[100,2,1,"","generate_csv_report"],[100,2,1,"","generate_evaluate_c_code_shared_library"],[100,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[100,2,1,"","generate_word_based_c_code"],[100,2,1,"","get_all_components"],[100,2,1,"","get_all_components_ids"],[100,2,1,"","get_all_inputs_bit_positions"],[100,2,1,"","get_component_from_id"],[100,2,1,"","get_components_in_round"],[100,2,1,"","get_current_component_id"],[100,2,1,"","get_model"],[100,2,1,"","get_number_of_components_in_round"],[100,2,1,"","get_partial_cipher"],[100,2,1,"","get_round_from_component_id"],[100,2,1,"","get_sizes_of_components_by_type"],[100,3,1,"","id"],[100,2,1,"","impossible_differential_search"],[100,3,1,"","inputs"],[100,3,1,"","inputs_bit_size"],[100,2,1,"","inputs_size_to_dict"],[100,2,1,"","is_algebraically_secure"],[100,2,1,"","is_andrx"],[100,2,1,"","is_arx"],[100,2,1,"","is_power_of_2_word_based"],[100,2,1,"","is_shift_arx"],[100,2,1,"","is_spn"],[100,2,1,"","make_cipher_id"],[100,2,1,"","make_file_name"],[100,2,1,"","neural_network_blackbox_distinguisher_tests"],[100,2,1,"","neural_network_differential_distinguisher_tests"],[100,3,1,"","number_of_rounds"],[100,3,1,"","output_bit_size"],[100,2,1,"","polynomial_system"],[100,2,1,"","polynomial_system_at_round"],[100,2,1,"","print"],[100,2,1,"","print_as_python_dictionary"],[100,2,1,"","print_as_python_dictionary_to_file"],[100,2,1,"","print_component_analysis_as_radar_charts"],[100,2,1,"","print_evaluation_python_code"],[100,2,1,"","print_evaluation_python_code_to_file"],[100,2,1,"","print_input_information"],[100,3,1,"","reference_code"],[100,2,1,"","remove_key_schedule"],[100,2,1,"","remove_round_component"],[100,2,1,"","remove_round_component_from_id"],[100,3,1,"","rounds"],[100,3,1,"","rounds_as_list"],[100,2,1,"","run_autond_pipeline"],[100,2,1,"","set_file_name"],[100,2,1,"","set_id"],[100,2,1,"","set_inputs"],[100,2,1,"","sort_cipher"],[100,2,1,"","test_against_reference_code"],[100,2,1,"","test_vector_check"],[100,2,1,"","train_gohr_neural_distinguisher"],[100,2,1,"","train_neural_distinguisher"],[100,3,1,"","type"],[100,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.rc5_block_cipher":[[101,1,1,"","RC5BlockCipher"]],"ciphers.block_ciphers.rc5_block_cipher.RC5BlockCipher":[[101,2,1,"","add_AND_component"],[101,2,1,"","add_FSR_component"],[101,2,1,"","add_MODADD_component"],[101,2,1,"","add_MODSUB_component"],[101,2,1,"","add_NOT_component"],[101,2,1,"","add_OR_component"],[101,2,1,"","add_SBOX_component"],[101,2,1,"","add_SHIFT_component"],[101,2,1,"","add_XOR_component"],[101,2,1,"","add_cipher_output_component"],[101,2,1,"","add_concatenate_component"],[101,2,1,"","add_constant_component"],[101,2,1,"","add_intermediate_output_component"],[101,2,1,"","add_linear_layer_component"],[101,2,1,"","add_mix_column_component"],[101,2,1,"","add_permutation_component"],[101,2,1,"","add_reverse_component"],[101,2,1,"","add_rotate_component"],[101,2,1,"","add_round"],[101,2,1,"","add_round_key_output_component"],[101,2,1,"","add_round_output_component"],[101,2,1,"","add_shift_rows_component"],[101,2,1,"","add_sigma_component"],[101,2,1,"","add_suffix_to_components"],[101,2,1,"","add_theta_keccak_component"],[101,2,1,"","add_theta_xoodoo_component"],[101,2,1,"","add_variable_rotate_component"],[101,2,1,"","add_variable_shift_component"],[101,2,1,"","add_word_permutation_component"],[101,2,1,"","algebraic_tests"],[101,2,1,"","analyze_cipher"],[101,2,1,"","as_python_dictionary"],[101,2,1,"","avalanche_probability_vectors"],[101,2,1,"","cipher_inverse"],[101,2,1,"","cipher_partial_inverse"],[101,2,1,"","component_analysis_tests"],[101,2,1,"","component_from"],[101,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[101,2,1,"","compute_magic_constants"],[101,2,1,"","continuous_avalanche_factor"],[101,2,1,"","continuous_diffusion_factor"],[101,2,1,"","continuous_diffusion_tests"],[101,2,1,"","continuous_neutrality_measure_for_bit_j"],[101,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[101,2,1,"","convert_to_compound_xor_cipher"],[101,3,1,"","current_round"],[101,3,1,"","current_round_number"],[101,3,1,"","current_round_number_of_components"],[101,2,1,"","delete_generated_evaluate_c_shared_library"],[101,2,1,"","diffusion_tests"],[101,2,1,"","evaluate"],[101,2,1,"","evaluate_using_c"],[101,2,1,"","evaluate_vectorized"],[101,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[101,3,1,"","family_name"],[101,3,1,"","file_name"],[101,2,1,"","find_good_input_difference_for_neural_distinguisher"],[101,2,1,"","find_impossible_property"],[101,2,1,"","first_round"],[101,2,1,"","generate_bit_based_c_code"],[101,2,1,"","generate_csv_report"],[101,2,1,"","generate_evaluate_c_code_shared_library"],[101,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[101,2,1,"","generate_word_based_c_code"],[101,2,1,"","get_all_components"],[101,2,1,"","get_all_components_ids"],[101,2,1,"","get_all_inputs_bit_positions"],[101,2,1,"","get_component_from_id"],[101,2,1,"","get_components_in_round"],[101,2,1,"","get_current_component_id"],[101,2,1,"","get_model"],[101,2,1,"","get_number_of_components_in_round"],[101,2,1,"","get_partial_cipher"],[101,2,1,"","get_round_from_component_id"],[101,2,1,"","get_sizes_of_components_by_type"],[101,3,1,"","id"],[101,2,1,"","impossible_differential_search"],[101,3,1,"","inputs"],[101,3,1,"","inputs_bit_size"],[101,2,1,"","inputs_size_to_dict"],[101,2,1,"","is_algebraically_secure"],[101,2,1,"","is_andrx"],[101,2,1,"","is_arx"],[101,2,1,"","is_power_of_2_word_based"],[101,2,1,"","is_shift_arx"],[101,2,1,"","is_spn"],[101,2,1,"","key_expansion"],[101,2,1,"","make_cipher_id"],[101,2,1,"","make_file_name"],[101,2,1,"","neural_network_blackbox_distinguisher_tests"],[101,2,1,"","neural_network_differential_distinguisher_tests"],[101,3,1,"","number_of_rounds"],[101,3,1,"","output_bit_size"],[101,2,1,"","polynomial_system"],[101,2,1,"","polynomial_system_at_round"],[101,2,1,"","print"],[101,2,1,"","print_as_python_dictionary"],[101,2,1,"","print_as_python_dictionary_to_file"],[101,2,1,"","print_component_analysis_as_radar_charts"],[101,2,1,"","print_evaluation_python_code"],[101,2,1,"","print_evaluation_python_code_to_file"],[101,2,1,"","print_input_information"],[101,3,1,"","reference_code"],[101,2,1,"","remove_key_schedule"],[101,2,1,"","remove_round_component"],[101,2,1,"","remove_round_component_from_id"],[101,2,1,"","round_function"],[101,3,1,"","rounds"],[101,3,1,"","rounds_as_list"],[101,2,1,"","run_autond_pipeline"],[101,2,1,"","set_file_name"],[101,2,1,"","set_id"],[101,2,1,"","set_inputs"],[101,2,1,"","sort_cipher"],[101,2,1,"","test_against_reference_code"],[101,2,1,"","test_vector_check"],[101,2,1,"","train_gohr_neural_distinguisher"],[101,2,1,"","train_neural_distinguisher"],[101,3,1,"","type"],[101,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.simon_block_cipher":[[102,1,1,"","SimonBlockCipher"]],"ciphers.block_ciphers.simon_block_cipher.SimonBlockCipher":[[102,2,1,"","add_AND_component"],[102,2,1,"","add_FSR_component"],[102,2,1,"","add_MODADD_component"],[102,2,1,"","add_MODSUB_component"],[102,2,1,"","add_NOT_component"],[102,2,1,"","add_OR_component"],[102,2,1,"","add_SBOX_component"],[102,2,1,"","add_SHIFT_component"],[102,2,1,"","add_XOR_component"],[102,2,1,"","add_cipher_output_component"],[102,2,1,"","add_concatenate_component"],[102,2,1,"","add_constant_component"],[102,2,1,"","add_intermediate_output_component"],[102,2,1,"","add_linear_layer_component"],[102,2,1,"","add_mix_column_component"],[102,2,1,"","add_permutation_component"],[102,2,1,"","add_reverse_component"],[102,2,1,"","add_rotate_component"],[102,2,1,"","add_round"],[102,2,1,"","add_round_key_output_component"],[102,2,1,"","add_round_output_component"],[102,2,1,"","add_shift_rows_component"],[102,2,1,"","add_sigma_component"],[102,2,1,"","add_suffix_to_components"],[102,2,1,"","add_theta_keccak_component"],[102,2,1,"","add_theta_xoodoo_component"],[102,2,1,"","add_variable_rotate_component"],[102,2,1,"","add_variable_shift_component"],[102,2,1,"","add_word_permutation_component"],[102,2,1,"","algebraic_tests"],[102,2,1,"","analyze_cipher"],[102,2,1,"","as_python_dictionary"],[102,2,1,"","avalanche_probability_vectors"],[102,2,1,"","cipher_inverse"],[102,2,1,"","cipher_partial_inverse"],[102,2,1,"","component_analysis_tests"],[102,2,1,"","component_from"],[102,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[102,2,1,"","continuous_avalanche_factor"],[102,2,1,"","continuous_diffusion_factor"],[102,2,1,"","continuous_diffusion_tests"],[102,2,1,"","continuous_neutrality_measure_for_bit_j"],[102,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[102,2,1,"","convert_to_compound_xor_cipher"],[102,3,1,"","current_round"],[102,3,1,"","current_round_number"],[102,3,1,"","current_round_number_of_components"],[102,2,1,"","delete_generated_evaluate_c_shared_library"],[102,2,1,"","diffusion_tests"],[102,2,1,"","evaluate"],[102,2,1,"","evaluate_using_c"],[102,2,1,"","evaluate_vectorized"],[102,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[102,2,1,"","f"],[102,3,1,"","family_name"],[102,2,1,"","feistel_function"],[102,3,1,"","file_name"],[102,2,1,"","find_good_input_difference_for_neural_distinguisher"],[102,2,1,"","find_impossible_property"],[102,2,1,"","generate_bit_based_c_code"],[102,2,1,"","generate_csv_report"],[102,2,1,"","generate_evaluate_c_code_shared_library"],[102,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[102,2,1,"","generate_round_key"],[102,2,1,"","generate_word_based_c_code"],[102,2,1,"","get_all_components"],[102,2,1,"","get_all_components_ids"],[102,2,1,"","get_all_inputs_bit_positions"],[102,2,1,"","get_component_from_id"],[102,2,1,"","get_components_in_round"],[102,2,1,"","get_current_component_id"],[102,2,1,"","get_model"],[102,2,1,"","get_number_of_components_in_round"],[102,2,1,"","get_partial_cipher"],[102,2,1,"","get_round_from_component_id"],[102,2,1,"","get_sizes_of_components_by_type"],[102,3,1,"","id"],[102,2,1,"","impossible_differential_search"],[102,3,1,"","inputs"],[102,3,1,"","inputs_bit_size"],[102,2,1,"","inputs_size_to_dict"],[102,2,1,"","is_algebraically_secure"],[102,2,1,"","is_andrx"],[102,2,1,"","is_arx"],[102,2,1,"","is_power_of_2_word_based"],[102,2,1,"","is_shift_arx"],[102,2,1,"","is_spn"],[102,2,1,"","make_cipher_id"],[102,2,1,"","make_file_name"],[102,2,1,"","neural_network_blackbox_distinguisher_tests"],[102,2,1,"","neural_network_differential_distinguisher_tests"],[102,3,1,"","number_of_rounds"],[102,3,1,"","output_bit_size"],[102,2,1,"","polynomial_system"],[102,2,1,"","polynomial_system_at_round"],[102,2,1,"","print"],[102,2,1,"","print_as_python_dictionary"],[102,2,1,"","print_as_python_dictionary_to_file"],[102,2,1,"","print_component_analysis_as_radar_charts"],[102,2,1,"","print_evaluation_python_code"],[102,2,1,"","print_evaluation_python_code_to_file"],[102,2,1,"","print_input_information"],[102,3,1,"","reference_code"],[102,2,1,"","remove_key_schedule"],[102,2,1,"","remove_round_component"],[102,2,1,"","remove_round_component_from_id"],[102,3,1,"","rounds"],[102,3,1,"","rounds_as_list"],[102,2,1,"","run_autond_pipeline"],[102,2,1,"","set_file_name"],[102,2,1,"","set_id"],[102,2,1,"","set_inputs"],[102,2,1,"","sort_cipher"],[102,2,1,"","test_against_reference_code"],[102,2,1,"","test_vector_check"],[102,2,1,"","train_gohr_neural_distinguisher"],[102,2,1,"","train_neural_distinguisher"],[102,3,1,"","type"],[102,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.skinny_block_cipher":[[103,1,1,"","SkinnyBlockCipher"],[103,4,1,"","add_shift_rows_components"],[103,4,1,"","key_initialization"],[103,4,1,"","state_initialization"]],"ciphers.block_ciphers.skinny_block_cipher.SkinnyBlockCipher":[[103,2,1,"","add_AND_component"],[103,2,1,"","add_FSR_component"],[103,2,1,"","add_MODADD_component"],[103,2,1,"","add_MODSUB_component"],[103,2,1,"","add_NOT_component"],[103,2,1,"","add_OR_component"],[103,2,1,"","add_SBOX_component"],[103,2,1,"","add_SHIFT_component"],[103,2,1,"","add_XOR_component"],[103,2,1,"","add_add_round_tweakey"],[103,2,1,"","add_cipher_output_component"],[103,2,1,"","add_concatenate_component"],[103,2,1,"","add_constant_component"],[103,2,1,"","add_intermediate_output_component"],[103,2,1,"","add_linear_layer_component"],[103,2,1,"","add_mix_column_component"],[103,2,1,"","add_mix_column_serials"],[103,2,1,"","add_output_component"],[103,2,1,"","add_permutation_component"],[103,2,1,"","add_reverse_component"],[103,2,1,"","add_rotate_component"],[103,2,1,"","add_round"],[103,2,1,"","add_round_key_output_component"],[103,2,1,"","add_round_output_component"],[103,2,1,"","add_shift_rows_component"],[103,2,1,"","add_sigma_component"],[103,2,1,"","add_suffix_to_components"],[103,2,1,"","add_theta_keccak_component"],[103,2,1,"","add_theta_xoodoo_component"],[103,2,1,"","add_variable_rotate_component"],[103,2,1,"","add_variable_shift_component"],[103,2,1,"","add_word_permutation_component"],[103,2,1,"","algebraic_tests"],[103,2,1,"","analyze_cipher"],[103,2,1,"","as_python_dictionary"],[103,2,1,"","avalanche_probability_vectors"],[103,2,1,"","cipher_inverse"],[103,2,1,"","cipher_partial_inverse"],[103,2,1,"","component_analysis_tests"],[103,2,1,"","component_from"],[103,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[103,2,1,"","continuous_avalanche_factor"],[103,2,1,"","continuous_diffusion_factor"],[103,2,1,"","continuous_diffusion_tests"],[103,2,1,"","continuous_neutrality_measure_for_bit_j"],[103,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[103,2,1,"","convert_to_compound_xor_cipher"],[103,3,1,"","current_round"],[103,3,1,"","current_round_number"],[103,3,1,"","current_round_number_of_components"],[103,2,1,"","delete_generated_evaluate_c_shared_library"],[103,2,1,"","diffusion_tests"],[103,2,1,"","evaluate"],[103,2,1,"","evaluate_using_c"],[103,2,1,"","evaluate_vectorized"],[103,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[103,3,1,"","family_name"],[103,3,1,"","file_name"],[103,2,1,"","find_good_input_difference_for_neural_distinguisher"],[103,2,1,"","find_impossible_property"],[103,2,1,"","generate_bit_based_c_code"],[103,2,1,"","generate_csv_report"],[103,2,1,"","generate_evaluate_c_code_shared_library"],[103,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[103,2,1,"","generate_word_based_c_code"],[103,2,1,"","get_all_components"],[103,2,1,"","get_all_components_ids"],[103,2,1,"","get_all_inputs_bit_positions"],[103,2,1,"","get_component_from_id"],[103,2,1,"","get_components_in_round"],[103,2,1,"","get_current_component_id"],[103,2,1,"","get_model"],[103,2,1,"","get_number_of_components_in_round"],[103,2,1,"","get_partial_cipher"],[103,2,1,"","get_round_from_component_id"],[103,2,1,"","get_sizes_of_components_by_type"],[103,3,1,"","id"],[103,2,1,"","impossible_differential_search"],[103,2,1,"","initial_round_elements_definition"],[103,3,1,"","inputs"],[103,3,1,"","inputs_bit_size"],[103,2,1,"","inputs_size_to_dict"],[103,2,1,"","is_algebraically_secure"],[103,2,1,"","is_andrx"],[103,2,1,"","is_arx"],[103,2,1,"","is_power_of_2_word_based"],[103,2,1,"","is_shift_arx"],[103,2,1,"","is_spn"],[103,2,1,"","key_schedule"],[103,2,1,"","make_cipher_id"],[103,2,1,"","make_file_name"],[103,2,1,"","neural_network_blackbox_distinguisher_tests"],[103,2,1,"","neural_network_differential_distinguisher_tests"],[103,3,1,"","number_of_rounds"],[103,3,1,"","output_bit_size"],[103,2,1,"","polynomial_system"],[103,2,1,"","polynomial_system_at_round"],[103,2,1,"","print"],[103,2,1,"","print_as_python_dictionary"],[103,2,1,"","print_as_python_dictionary_to_file"],[103,2,1,"","print_component_analysis_as_radar_charts"],[103,2,1,"","print_evaluation_python_code"],[103,2,1,"","print_evaluation_python_code_to_file"],[103,2,1,"","print_input_information"],[103,3,1,"","reference_code"],[103,2,1,"","remove_key_schedule"],[103,2,1,"","remove_round_component"],[103,2,1,"","remove_round_component_from_id"],[103,2,1,"","round_function"],[103,3,1,"","rounds"],[103,3,1,"","rounds_as_list"],[103,2,1,"","run_autond_pipeline"],[103,2,1,"","set_file_name"],[103,2,1,"","set_id"],[103,2,1,"","set_inputs"],[103,2,1,"","sort_cipher"],[103,2,1,"","test_against_reference_code"],[103,2,1,"","test_vector_check"],[103,2,1,"","train_gohr_neural_distinguisher"],[103,2,1,"","train_neural_distinguisher"],[103,3,1,"","type"],[103,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.sparx_block_cipher":[[104,1,1,"","SparxBlockCipher"],[104,4,1,"","get_number_of_steps_from"]],"ciphers.block_ciphers.sparx_block_cipher.SparxBlockCipher":[[104,2,1,"","K_4_128"],[104,2,1,"","K_4_64"],[104,2,1,"","K_8_256"],[104,2,1,"","add_AND_component"],[104,2,1,"","add_FSR_component"],[104,2,1,"","add_MODADD_component"],[104,2,1,"","add_MODSUB_component"],[104,2,1,"","add_NOT_component"],[104,2,1,"","add_OR_component"],[104,2,1,"","add_SBOX_component"],[104,2,1,"","add_SHIFT_component"],[104,2,1,"","add_XOR_component"],[104,2,1,"","add_cipher_output_component"],[104,2,1,"","add_concatenate_component"],[104,2,1,"","add_constant_component"],[104,2,1,"","add_intermediate_output_component"],[104,2,1,"","add_linear_layer_component"],[104,2,1,"","add_mix_column_component"],[104,2,1,"","add_permutation_component"],[104,2,1,"","add_reverse_component"],[104,2,1,"","add_rotate_component"],[104,2,1,"","add_round"],[104,2,1,"","add_round_key_output_component"],[104,2,1,"","add_round_output_component"],[104,2,1,"","add_shift_rows_component"],[104,2,1,"","add_sigma_component"],[104,2,1,"","add_suffix_to_components"],[104,2,1,"","add_theta_keccak_component"],[104,2,1,"","add_theta_xoodoo_component"],[104,2,1,"","add_variable_rotate_component"],[104,2,1,"","add_variable_shift_component"],[104,2,1,"","add_word_permutation_component"],[104,2,1,"","algebraic_tests"],[104,2,1,"","analyze_cipher"],[104,2,1,"","arx_box"],[104,2,1,"","as_python_dictionary"],[104,2,1,"","assign_functions_based_on"],[104,2,1,"","avalanche_probability_vectors"],[104,2,1,"","cipher_inverse"],[104,2,1,"","cipher_partial_inverse"],[104,2,1,"","component_analysis_tests"],[104,2,1,"","component_from"],[104,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[104,2,1,"","continuous_avalanche_factor"],[104,2,1,"","continuous_diffusion_factor"],[104,2,1,"","continuous_diffusion_tests"],[104,2,1,"","continuous_neutrality_measure_for_bit_j"],[104,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[104,2,1,"","convert_to_compound_xor_cipher"],[104,3,1,"","current_round"],[104,3,1,"","current_round_number"],[104,3,1,"","current_round_number_of_components"],[104,2,1,"","delete_generated_evaluate_c_shared_library"],[104,2,1,"","diffusion_tests"],[104,2,1,"","evaluate"],[104,2,1,"","evaluate_using_c"],[104,2,1,"","evaluate_vectorized"],[104,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[104,3,1,"","family_name"],[104,3,1,"","file_name"],[104,2,1,"","find_good_input_difference_for_neural_distinguisher"],[104,2,1,"","find_impossible_property"],[104,2,1,"","generate_bit_based_c_code"],[104,2,1,"","generate_csv_report"],[104,2,1,"","generate_evaluate_c_code_shared_library"],[104,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[104,2,1,"","generate_word_based_c_code"],[104,2,1,"","get_all_components"],[104,2,1,"","get_all_components_ids"],[104,2,1,"","get_all_inputs_bit_positions"],[104,2,1,"","get_component_from_id"],[104,2,1,"","get_components_in_round"],[104,2,1,"","get_current_component_id"],[104,2,1,"","get_model"],[104,2,1,"","get_number_of_components_in_round"],[104,2,1,"","get_partial_cipher"],[104,2,1,"","get_round_from_component_id"],[104,2,1,"","get_sizes_of_components_by_type"],[104,3,1,"","id"],[104,2,1,"","impossible_differential_search"],[104,3,1,"","inputs"],[104,3,1,"","inputs_bit_size"],[104,2,1,"","inputs_size_to_dict"],[104,2,1,"","is_algebraically_secure"],[104,2,1,"","is_andrx"],[104,2,1,"","is_arx"],[104,2,1,"","is_power_of_2_word_based"],[104,2,1,"","is_shift_arx"],[104,2,1,"","is_spn"],[104,2,1,"","lambda_2"],[104,2,1,"","lambda_4"],[104,2,1,"","make_cipher_id"],[104,2,1,"","make_file_name"],[104,2,1,"","neural_network_blackbox_distinguisher_tests"],[104,2,1,"","neural_network_differential_distinguisher_tests"],[104,3,1,"","number_of_rounds"],[104,3,1,"","output_bit_size"],[104,2,1,"","polynomial_system"],[104,2,1,"","polynomial_system_at_round"],[104,2,1,"","print"],[104,2,1,"","print_as_python_dictionary"],[104,2,1,"","print_as_python_dictionary_to_file"],[104,2,1,"","print_component_analysis_as_radar_charts"],[104,2,1,"","print_evaluation_python_code"],[104,2,1,"","print_evaluation_python_code_to_file"],[104,2,1,"","print_input_information"],[104,3,1,"","reference_code"],[104,2,1,"","remove_key_schedule"],[104,2,1,"","remove_round_component"],[104,2,1,"","remove_round_component_from_id"],[104,3,1,"","rounds"],[104,3,1,"","rounds_as_list"],[104,2,1,"","run_autond_pipeline"],[104,2,1,"","set_file_name"],[104,2,1,"","set_id"],[104,2,1,"","set_inputs"],[104,2,1,"","sort_cipher"],[104,2,1,"","test_against_reference_code"],[104,2,1,"","test_vector_check"],[104,2,1,"","train_gohr_neural_distinguisher"],[104,2,1,"","train_neural_distinguisher"],[104,3,1,"","type"],[104,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.speck_block_cipher":[[105,1,1,"","SpeckBlockCipher"]],"ciphers.block_ciphers.speck_block_cipher.SpeckBlockCipher":[[105,2,1,"","add_AND_component"],[105,2,1,"","add_FSR_component"],[105,2,1,"","add_MODADD_component"],[105,2,1,"","add_MODSUB_component"],[105,2,1,"","add_NOT_component"],[105,2,1,"","add_OR_component"],[105,2,1,"","add_SBOX_component"],[105,2,1,"","add_SHIFT_component"],[105,2,1,"","add_XOR_component"],[105,2,1,"","add_cipher_output_component"],[105,2,1,"","add_concatenate_component"],[105,2,1,"","add_constant_component"],[105,2,1,"","add_intermediate_output_component"],[105,2,1,"","add_linear_layer_component"],[105,2,1,"","add_mix_column_component"],[105,2,1,"","add_output_component"],[105,2,1,"","add_permutation_component"],[105,2,1,"","add_reverse_component"],[105,2,1,"","add_rotate_component"],[105,2,1,"","add_round"],[105,2,1,"","add_round_key_output_component"],[105,2,1,"","add_round_output_component"],[105,2,1,"","add_shift_rows_component"],[105,2,1,"","add_sigma_component"],[105,2,1,"","add_suffix_to_components"],[105,2,1,"","add_theta_keccak_component"],[105,2,1,"","add_theta_xoodoo_component"],[105,2,1,"","add_variable_rotate_component"],[105,2,1,"","add_variable_shift_component"],[105,2,1,"","add_word_permutation_component"],[105,2,1,"","algebraic_tests"],[105,2,1,"","analyze_cipher"],[105,2,1,"","as_python_dictionary"],[105,2,1,"","avalanche_probability_vectors"],[105,2,1,"","cipher_inverse"],[105,2,1,"","cipher_partial_inverse"],[105,2,1,"","component_analysis_tests"],[105,2,1,"","component_from"],[105,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[105,2,1,"","continuous_avalanche_factor"],[105,2,1,"","continuous_diffusion_factor"],[105,2,1,"","continuous_diffusion_tests"],[105,2,1,"","continuous_neutrality_measure_for_bit_j"],[105,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[105,2,1,"","convert_to_compound_xor_cipher"],[105,3,1,"","current_round"],[105,3,1,"","current_round_number"],[105,3,1,"","current_round_number_of_components"],[105,2,1,"","delete_generated_evaluate_c_shared_library"],[105,2,1,"","diffusion_tests"],[105,2,1,"","evaluate"],[105,2,1,"","evaluate_using_c"],[105,2,1,"","evaluate_vectorized"],[105,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[105,3,1,"","family_name"],[105,3,1,"","file_name"],[105,2,1,"","find_good_input_difference_for_neural_distinguisher"],[105,2,1,"","find_impossible_property"],[105,2,1,"","generate_bit_based_c_code"],[105,2,1,"","generate_csv_report"],[105,2,1,"","generate_evaluate_c_code_shared_library"],[105,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[105,2,1,"","generate_word_based_c_code"],[105,2,1,"","get_all_components"],[105,2,1,"","get_all_components_ids"],[105,2,1,"","get_all_inputs_bit_positions"],[105,2,1,"","get_component_from_id"],[105,2,1,"","get_components_in_round"],[105,2,1,"","get_current_component_id"],[105,2,1,"","get_model"],[105,2,1,"","get_number_of_components_in_round"],[105,2,1,"","get_partial_cipher"],[105,2,1,"","get_round_from_component_id"],[105,2,1,"","get_sizes_of_components_by_type"],[105,3,1,"","id"],[105,2,1,"","impossible_differential_search"],[105,3,1,"","inputs"],[105,3,1,"","inputs_bit_size"],[105,2,1,"","inputs_size_to_dict"],[105,2,1,"","is_algebraically_secure"],[105,2,1,"","is_andrx"],[105,2,1,"","is_arx"],[105,2,1,"","is_power_of_2_word_based"],[105,2,1,"","is_shift_arx"],[105,2,1,"","is_spn"],[105,2,1,"","key_initialization"],[105,2,1,"","make_cipher_id"],[105,2,1,"","make_file_name"],[105,2,1,"","neural_network_blackbox_distinguisher_tests"],[105,2,1,"","neural_network_differential_distinguisher_tests"],[105,3,1,"","number_of_rounds"],[105,3,1,"","output_bit_size"],[105,2,1,"","polynomial_system"],[105,2,1,"","polynomial_system_at_round"],[105,2,1,"","print"],[105,2,1,"","print_as_python_dictionary"],[105,2,1,"","print_as_python_dictionary_to_file"],[105,2,1,"","print_component_analysis_as_radar_charts"],[105,2,1,"","print_evaluation_python_code"],[105,2,1,"","print_evaluation_python_code_to_file"],[105,2,1,"","print_input_information"],[105,3,1,"","reference_code"],[105,2,1,"","remove_key_schedule"],[105,2,1,"","remove_round_component"],[105,2,1,"","remove_round_component_from_id"],[105,2,1,"","round_function"],[105,2,1,"","round_initialization"],[105,3,1,"","rounds"],[105,3,1,"","rounds_as_list"],[105,2,1,"","run_autond_pipeline"],[105,2,1,"","set_file_name"],[105,2,1,"","set_id"],[105,2,1,"","set_inputs"],[105,2,1,"","sort_cipher"],[105,2,1,"","test_against_reference_code"],[105,2,1,"","test_vector_check"],[105,2,1,"","train_gohr_neural_distinguisher"],[105,2,1,"","train_neural_distinguisher"],[105,3,1,"","type"],[105,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.tea_block_cipher":[[106,1,1,"","TeaBlockCipher"]],"ciphers.block_ciphers.tea_block_cipher.TeaBlockCipher":[[106,2,1,"","add_AND_component"],[106,2,1,"","add_FSR_component"],[106,2,1,"","add_MODADD_component"],[106,2,1,"","add_MODSUB_component"],[106,2,1,"","add_NOT_component"],[106,2,1,"","add_OR_component"],[106,2,1,"","add_SBOX_component"],[106,2,1,"","add_SHIFT_component"],[106,2,1,"","add_XOR_component"],[106,2,1,"","add_cipher_output_component"],[106,2,1,"","add_concatenate_component"],[106,2,1,"","add_constant_component"],[106,2,1,"","add_intermediate_output_component"],[106,2,1,"","add_linear_layer_component"],[106,2,1,"","add_mix_column_component"],[106,2,1,"","add_permutation_component"],[106,2,1,"","add_reverse_component"],[106,2,1,"","add_rotate_component"],[106,2,1,"","add_round"],[106,2,1,"","add_round_key_output_component"],[106,2,1,"","add_round_output_component"],[106,2,1,"","add_shift_rows_component"],[106,2,1,"","add_sigma_component"],[106,2,1,"","add_suffix_to_components"],[106,2,1,"","add_theta_keccak_component"],[106,2,1,"","add_theta_xoodoo_component"],[106,2,1,"","add_variable_rotate_component"],[106,2,1,"","add_variable_shift_component"],[106,2,1,"","add_word_permutation_component"],[106,2,1,"","algebraic_tests"],[106,2,1,"","analyze_cipher"],[106,2,1,"","as_python_dictionary"],[106,2,1,"","avalanche_probability_vectors"],[106,2,1,"","cipher_inverse"],[106,2,1,"","cipher_partial_inverse"],[106,2,1,"","component_analysis_tests"],[106,2,1,"","component_from"],[106,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[106,2,1,"","continuous_avalanche_factor"],[106,2,1,"","continuous_diffusion_factor"],[106,2,1,"","continuous_diffusion_tests"],[106,2,1,"","continuous_neutrality_measure_for_bit_j"],[106,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[106,2,1,"","convert_to_compound_xor_cipher"],[106,3,1,"","current_round"],[106,3,1,"","current_round_number"],[106,3,1,"","current_round_number_of_components"],[106,2,1,"","delete_generated_evaluate_c_shared_library"],[106,2,1,"","diffusion_tests"],[106,2,1,"","evaluate"],[106,2,1,"","evaluate_using_c"],[106,2,1,"","evaluate_vectorized"],[106,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[106,3,1,"","family_name"],[106,3,1,"","file_name"],[106,2,1,"","find_good_input_difference_for_neural_distinguisher"],[106,2,1,"","find_impossible_property"],[106,2,1,"","generate_bit_based_c_code"],[106,2,1,"","generate_csv_report"],[106,2,1,"","generate_evaluate_c_code_shared_library"],[106,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[106,2,1,"","generate_word_based_c_code"],[106,2,1,"","get_all_components"],[106,2,1,"","get_all_components_ids"],[106,2,1,"","get_all_inputs_bit_positions"],[106,2,1,"","get_component_from_id"],[106,2,1,"","get_components_in_round"],[106,2,1,"","get_current_component_id"],[106,2,1,"","get_model"],[106,2,1,"","get_number_of_components_in_round"],[106,2,1,"","get_partial_cipher"],[106,2,1,"","get_round_from_component_id"],[106,2,1,"","get_sizes_of_components_by_type"],[106,3,1,"","id"],[106,2,1,"","impossible_differential_search"],[106,3,1,"","inputs"],[106,3,1,"","inputs_bit_size"],[106,2,1,"","inputs_size_to_dict"],[106,2,1,"","is_algebraically_secure"],[106,2,1,"","is_andrx"],[106,2,1,"","is_arx"],[106,2,1,"","is_power_of_2_word_based"],[106,2,1,"","is_shift_arx"],[106,2,1,"","is_spn"],[106,2,1,"","make_cipher_id"],[106,2,1,"","make_file_name"],[106,2,1,"","neural_network_blackbox_distinguisher_tests"],[106,2,1,"","neural_network_differential_distinguisher_tests"],[106,3,1,"","number_of_rounds"],[106,3,1,"","output_bit_size"],[106,2,1,"","polynomial_system"],[106,2,1,"","polynomial_system_at_round"],[106,2,1,"","print"],[106,2,1,"","print_as_python_dictionary"],[106,2,1,"","print_as_python_dictionary_to_file"],[106,2,1,"","print_component_analysis_as_radar_charts"],[106,2,1,"","print_evaluation_python_code"],[106,2,1,"","print_evaluation_python_code_to_file"],[106,2,1,"","print_input_information"],[106,3,1,"","reference_code"],[106,2,1,"","remove_key_schedule"],[106,2,1,"","remove_round_component"],[106,2,1,"","remove_round_component_from_id"],[106,3,1,"","rounds"],[106,3,1,"","rounds_as_list"],[106,2,1,"","run_autond_pipeline"],[106,2,1,"","set_file_name"],[106,2,1,"","set_id"],[106,2,1,"","set_inputs"],[106,2,1,"","sort_cipher"],[106,2,1,"","test_against_reference_code"],[106,2,1,"","test_vector_check"],[106,2,1,"","train_gohr_neural_distinguisher"],[106,2,1,"","train_neural_distinguisher"],[106,3,1,"","type"],[106,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.threefish_block_cipher":[[107,1,1,"","ThreefishBlockCipher"]],"ciphers.block_ciphers.threefish_block_cipher.ThreefishBlockCipher":[[107,2,1,"","add_AND_component"],[107,2,1,"","add_FSR_component"],[107,2,1,"","add_MODADD_component"],[107,2,1,"","add_MODSUB_component"],[107,2,1,"","add_NOT_component"],[107,2,1,"","add_OR_component"],[107,2,1,"","add_SBOX_component"],[107,2,1,"","add_SHIFT_component"],[107,2,1,"","add_XOR_component"],[107,2,1,"","add_cipher_output_component"],[107,2,1,"","add_concatenate_component"],[107,2,1,"","add_constant_component"],[107,2,1,"","add_intermediate_output_component"],[107,2,1,"","add_linear_layer_component"],[107,2,1,"","add_mix_column_component"],[107,2,1,"","add_permutation_component"],[107,2,1,"","add_reverse_component"],[107,2,1,"","add_rotate_component"],[107,2,1,"","add_round"],[107,2,1,"","add_round_key_output_component"],[107,2,1,"","add_round_output_component"],[107,2,1,"","add_shift_rows_component"],[107,2,1,"","add_sigma_component"],[107,2,1,"","add_subkey"],[107,2,1,"","add_suffix_to_components"],[107,2,1,"","add_theta_keccak_component"],[107,2,1,"","add_theta_xoodoo_component"],[107,2,1,"","add_variable_rotate_component"],[107,2,1,"","add_variable_shift_component"],[107,2,1,"","add_word_permutation_component"],[107,2,1,"","algebraic_tests"],[107,2,1,"","analyze_cipher"],[107,2,1,"","as_python_dictionary"],[107,2,1,"","avalanche_probability_vectors"],[107,2,1,"","cipher_inverse"],[107,2,1,"","cipher_partial_inverse"],[107,2,1,"","component_analysis_tests"],[107,2,1,"","component_from"],[107,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[107,2,1,"","continuous_avalanche_factor"],[107,2,1,"","continuous_diffusion_factor"],[107,2,1,"","continuous_diffusion_tests"],[107,2,1,"","continuous_neutrality_measure_for_bit_j"],[107,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[107,2,1,"","convert_to_compound_xor_cipher"],[107,3,1,"","current_round"],[107,3,1,"","current_round_number"],[107,3,1,"","current_round_number_of_components"],[107,2,1,"","delete_generated_evaluate_c_shared_library"],[107,2,1,"","diffusion_tests"],[107,2,1,"","evaluate"],[107,2,1,"","evaluate_using_c"],[107,2,1,"","evaluate_vectorized"],[107,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[107,3,1,"","family_name"],[107,3,1,"","file_name"],[107,2,1,"","find_good_input_difference_for_neural_distinguisher"],[107,2,1,"","find_impossible_property"],[107,2,1,"","generate_bit_based_c_code"],[107,2,1,"","generate_csv_report"],[107,2,1,"","generate_evaluate_c_code_shared_library"],[107,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[107,2,1,"","generate_word_based_c_code"],[107,2,1,"","get_all_components"],[107,2,1,"","get_all_components_ids"],[107,2,1,"","get_all_inputs_bit_positions"],[107,2,1,"","get_component_from_id"],[107,2,1,"","get_components_in_round"],[107,2,1,"","get_current_component_id"],[107,2,1,"","get_model"],[107,2,1,"","get_number_of_components_in_round"],[107,2,1,"","get_partial_cipher"],[107,2,1,"","get_round_from_component_id"],[107,2,1,"","get_sizes_of_components_by_type"],[107,3,1,"","id"],[107,2,1,"","impossible_differential_search"],[107,3,1,"","inputs"],[107,3,1,"","inputs_bit_size"],[107,2,1,"","inputs_size_to_dict"],[107,2,1,"","is_algebraically_secure"],[107,2,1,"","is_andrx"],[107,2,1,"","is_arx"],[107,2,1,"","is_power_of_2_word_based"],[107,2,1,"","is_shift_arx"],[107,2,1,"","is_spn"],[107,2,1,"","make_cipher_id"],[107,2,1,"","make_file_name"],[107,2,1,"","mix"],[107,2,1,"","neural_network_blackbox_distinguisher_tests"],[107,2,1,"","neural_network_differential_distinguisher_tests"],[107,3,1,"","number_of_rounds"],[107,3,1,"","output_bit_size"],[107,2,1,"","polynomial_system"],[107,2,1,"","polynomial_system_at_round"],[107,2,1,"","print"],[107,2,1,"","print_as_python_dictionary"],[107,2,1,"","print_as_python_dictionary_to_file"],[107,2,1,"","print_component_analysis_as_radar_charts"],[107,2,1,"","print_evaluation_python_code"],[107,2,1,"","print_evaluation_python_code_to_file"],[107,2,1,"","print_input_information"],[107,3,1,"","reference_code"],[107,2,1,"","remove_key_schedule"],[107,2,1,"","remove_round_component"],[107,2,1,"","remove_round_component_from_id"],[107,3,1,"","rounds"],[107,3,1,"","rounds_as_list"],[107,2,1,"","run_autond_pipeline"],[107,2,1,"","set_file_name"],[107,2,1,"","set_id"],[107,2,1,"","set_inputs"],[107,2,1,"","sort_cipher"],[107,2,1,"","subkey_schedule"],[107,2,1,"","test_against_reference_code"],[107,2,1,"","test_vector_check"],[107,2,1,"","train_gohr_neural_distinguisher"],[107,2,1,"","train_neural_distinguisher"],[107,3,1,"","type"],[107,2,1,"","word_permutation"],[107,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.twofish_block_cipher":[[108,1,1,"","TwofishBlockCipher"]],"ciphers.block_ciphers.twofish_block_cipher.TwofishBlockCipher":[[108,2,1,"","add_AND_component"],[108,2,1,"","add_FSR_component"],[108,2,1,"","add_MODADD_component"],[108,2,1,"","add_MODSUB_component"],[108,2,1,"","add_NOT_component"],[108,2,1,"","add_OR_component"],[108,2,1,"","add_SBOX_component"],[108,2,1,"","add_SHIFT_component"],[108,2,1,"","add_XOR_component"],[108,2,1,"","add_cipher_output_component"],[108,2,1,"","add_concatenate_component"],[108,2,1,"","add_constant_component"],[108,2,1,"","add_intermediate_output_component"],[108,2,1,"","add_linear_layer_component"],[108,2,1,"","add_mix_column_component"],[108,2,1,"","add_permutation_component"],[108,2,1,"","add_reverse_component"],[108,2,1,"","add_rotate_component"],[108,2,1,"","add_round"],[108,2,1,"","add_round_key_output_component"],[108,2,1,"","add_round_output_component"],[108,2,1,"","add_shift_rows_component"],[108,2,1,"","add_sigma_component"],[108,2,1,"","add_suffix_to_components"],[108,2,1,"","add_theta_keccak_component"],[108,2,1,"","add_theta_xoodoo_component"],[108,2,1,"","add_variable_rotate_component"],[108,2,1,"","add_variable_shift_component"],[108,2,1,"","add_word_permutation_component"],[108,2,1,"","algebraic_tests"],[108,2,1,"","analyze_cipher"],[108,2,1,"","as_python_dictionary"],[108,2,1,"","avalanche_probability_vectors"],[108,2,1,"","cipher_inverse"],[108,2,1,"","cipher_partial_inverse"],[108,2,1,"","component_analysis_tests"],[108,2,1,"","component_from"],[108,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[108,2,1,"","continuous_avalanche_factor"],[108,2,1,"","continuous_diffusion_factor"],[108,2,1,"","continuous_diffusion_tests"],[108,2,1,"","continuous_neutrality_measure_for_bit_j"],[108,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[108,2,1,"","convert_to_compound_xor_cipher"],[108,3,1,"","current_round"],[108,3,1,"","current_round_number"],[108,3,1,"","current_round_number_of_components"],[108,2,1,"","delete_generated_evaluate_c_shared_library"],[108,2,1,"","diffusion_tests"],[108,2,1,"","evaluate"],[108,2,1,"","evaluate_using_c"],[108,2,1,"","evaluate_vectorized"],[108,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[108,3,1,"","family_name"],[108,3,1,"","file_name"],[108,2,1,"","find_good_input_difference_for_neural_distinguisher"],[108,2,1,"","find_impossible_property"],[108,2,1,"","generate_bit_based_c_code"],[108,2,1,"","generate_csv_report"],[108,2,1,"","generate_evaluate_c_code_shared_library"],[108,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[108,2,1,"","generate_word_based_c_code"],[108,2,1,"","get_all_components"],[108,2,1,"","get_all_components_ids"],[108,2,1,"","get_all_inputs_bit_positions"],[108,2,1,"","get_component_from_id"],[108,2,1,"","get_components_in_round"],[108,2,1,"","get_current_component_id"],[108,2,1,"","get_model"],[108,2,1,"","get_number_of_components_in_round"],[108,2,1,"","get_partial_cipher"],[108,2,1,"","get_round_from_component_id"],[108,2,1,"","get_sizes_of_components_by_type"],[108,2,1,"","h_function"],[108,3,1,"","id"],[108,2,1,"","impossible_differential_search"],[108,3,1,"","inputs"],[108,3,1,"","inputs_bit_size"],[108,2,1,"","inputs_size_to_dict"],[108,2,1,"","is_algebraically_secure"],[108,2,1,"","is_andrx"],[108,2,1,"","is_arx"],[108,2,1,"","is_power_of_2_word_based"],[108,2,1,"","is_shift_arx"],[108,2,1,"","is_spn"],[108,2,1,"","make_cipher_id"],[108,2,1,"","make_file_name"],[108,2,1,"","neural_network_blackbox_distinguisher_tests"],[108,2,1,"","neural_network_differential_distinguisher_tests"],[108,3,1,"","number_of_rounds"],[108,3,1,"","output_bit_size"],[108,2,1,"","polynomial_system"],[108,2,1,"","polynomial_system_at_round"],[108,2,1,"","print"],[108,2,1,"","print_as_python_dictionary"],[108,2,1,"","print_as_python_dictionary_to_file"],[108,2,1,"","print_component_analysis_as_radar_charts"],[108,2,1,"","print_evaluation_python_code"],[108,2,1,"","print_evaluation_python_code_to_file"],[108,2,1,"","print_input_information"],[108,3,1,"","reference_code"],[108,2,1,"","remove_key_schedule"],[108,2,1,"","remove_round_component"],[108,2,1,"","remove_round_component_from_id"],[108,3,1,"","rounds"],[108,3,1,"","rounds_as_list"],[108,2,1,"","run_autond_pipeline"],[108,2,1,"","set_file_name"],[108,2,1,"","set_id"],[108,2,1,"","set_inputs"],[108,2,1,"","sort_cipher"],[108,2,1,"","test_against_reference_code"],[108,2,1,"","test_vector_check"],[108,2,1,"","train_gohr_neural_distinguisher"],[108,2,1,"","train_neural_distinguisher"],[108,3,1,"","type"],[108,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.xtea_block_cipher":[[109,1,1,"","XTeaBlockCipher"]],"ciphers.block_ciphers.xtea_block_cipher.XTeaBlockCipher":[[109,2,1,"","add_AND_component"],[109,2,1,"","add_FSR_component"],[109,2,1,"","add_MODADD_component"],[109,2,1,"","add_MODSUB_component"],[109,2,1,"","add_NOT_component"],[109,2,1,"","add_OR_component"],[109,2,1,"","add_SBOX_component"],[109,2,1,"","add_SHIFT_component"],[109,2,1,"","add_XOR_component"],[109,2,1,"","add_cipher_output_component"],[109,2,1,"","add_concatenate_component"],[109,2,1,"","add_constant_component"],[109,2,1,"","add_intermediate_output_component"],[109,2,1,"","add_linear_layer_component"],[109,2,1,"","add_mix_column_component"],[109,2,1,"","add_permutation_component"],[109,2,1,"","add_reverse_component"],[109,2,1,"","add_rotate_component"],[109,2,1,"","add_round"],[109,2,1,"","add_round_key_output_component"],[109,2,1,"","add_round_output_component"],[109,2,1,"","add_shift_rows_component"],[109,2,1,"","add_sigma_component"],[109,2,1,"","add_suffix_to_components"],[109,2,1,"","add_theta_keccak_component"],[109,2,1,"","add_theta_xoodoo_component"],[109,2,1,"","add_variable_rotate_component"],[109,2,1,"","add_variable_shift_component"],[109,2,1,"","add_word_permutation_component"],[109,2,1,"","algebraic_tests"],[109,2,1,"","analyze_cipher"],[109,2,1,"","as_python_dictionary"],[109,2,1,"","avalanche_probability_vectors"],[109,2,1,"","cipher_inverse"],[109,2,1,"","cipher_partial_inverse"],[109,2,1,"","component_analysis_tests"],[109,2,1,"","component_from"],[109,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[109,2,1,"","continuous_avalanche_factor"],[109,2,1,"","continuous_diffusion_factor"],[109,2,1,"","continuous_diffusion_tests"],[109,2,1,"","continuous_neutrality_measure_for_bit_j"],[109,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[109,2,1,"","convert_to_compound_xor_cipher"],[109,3,1,"","current_round"],[109,3,1,"","current_round_number"],[109,3,1,"","current_round_number_of_components"],[109,2,1,"","delete_generated_evaluate_c_shared_library"],[109,2,1,"","diffusion_tests"],[109,2,1,"","evaluate"],[109,2,1,"","evaluate_using_c"],[109,2,1,"","evaluate_vectorized"],[109,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[109,3,1,"","family_name"],[109,3,1,"","file_name"],[109,2,1,"","find_good_input_difference_for_neural_distinguisher"],[109,2,1,"","find_impossible_property"],[109,2,1,"","generate_bit_based_c_code"],[109,2,1,"","generate_csv_report"],[109,2,1,"","generate_evaluate_c_code_shared_library"],[109,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[109,2,1,"","generate_word_based_c_code"],[109,2,1,"","get_all_components"],[109,2,1,"","get_all_components_ids"],[109,2,1,"","get_all_inputs_bit_positions"],[109,2,1,"","get_component_from_id"],[109,2,1,"","get_components_in_round"],[109,2,1,"","get_current_component_id"],[109,2,1,"","get_model"],[109,2,1,"","get_number_of_components_in_round"],[109,2,1,"","get_partial_cipher"],[109,2,1,"","get_round_from_component_id"],[109,2,1,"","get_sizes_of_components_by_type"],[109,3,1,"","id"],[109,2,1,"","impossible_differential_search"],[109,3,1,"","inputs"],[109,3,1,"","inputs_bit_size"],[109,2,1,"","inputs_size_to_dict"],[109,2,1,"","is_algebraically_secure"],[109,2,1,"","is_andrx"],[109,2,1,"","is_arx"],[109,2,1,"","is_power_of_2_word_based"],[109,2,1,"","is_shift_arx"],[109,2,1,"","is_spn"],[109,2,1,"","make_cipher_id"],[109,2,1,"","make_file_name"],[109,2,1,"","neural_network_blackbox_distinguisher_tests"],[109,2,1,"","neural_network_differential_distinguisher_tests"],[109,3,1,"","number_of_rounds"],[109,3,1,"","output_bit_size"],[109,2,1,"","polynomial_system"],[109,2,1,"","polynomial_system_at_round"],[109,2,1,"","print"],[109,2,1,"","print_as_python_dictionary"],[109,2,1,"","print_as_python_dictionary_to_file"],[109,2,1,"","print_component_analysis_as_radar_charts"],[109,2,1,"","print_evaluation_python_code"],[109,2,1,"","print_evaluation_python_code_to_file"],[109,2,1,"","print_input_information"],[109,3,1,"","reference_code"],[109,2,1,"","remove_key_schedule"],[109,2,1,"","remove_round_component"],[109,2,1,"","remove_round_component_from_id"],[109,3,1,"","rounds"],[109,3,1,"","rounds_as_list"],[109,2,1,"","run_autond_pipeline"],[109,2,1,"","set_file_name"],[109,2,1,"","set_id"],[109,2,1,"","set_inputs"],[109,2,1,"","sort_cipher"],[109,2,1,"","test_against_reference_code"],[109,2,1,"","test_vector_check"],[109,2,1,"","train_gohr_neural_distinguisher"],[109,2,1,"","train_neural_distinguisher"],[109,3,1,"","type"],[109,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions":[[110,0,0,"-","blake2_hash_function"],[111,0,0,"-","blake_hash_function"],[112,0,0,"-","md5_hash_function"],[113,0,0,"-","sha1_hash_function"],[114,0,0,"-","sha2_hash_function"],[115,0,0,"-","whirlpool_hash_function"]],"ciphers.hash_functions.blake2_hash_function":[[110,1,1,"","Blake2HashFunction"]],"ciphers.hash_functions.blake2_hash_function.Blake2HashFunction":[[110,2,1,"","add_AND_component"],[110,2,1,"","add_FSR_component"],[110,2,1,"","add_MODADD_component"],[110,2,1,"","add_MODSUB_component"],[110,2,1,"","add_NOT_component"],[110,2,1,"","add_OR_component"],[110,2,1,"","add_SBOX_component"],[110,2,1,"","add_SHIFT_component"],[110,2,1,"","add_XOR_component"],[110,2,1,"","add_cipher_output_component"],[110,2,1,"","add_concatenate_component"],[110,2,1,"","add_constant_component"],[110,2,1,"","add_intermediate_output_component"],[110,2,1,"","add_linear_layer_component"],[110,2,1,"","add_mix_column_component"],[110,2,1,"","add_permutation_component"],[110,2,1,"","add_reverse_component"],[110,2,1,"","add_rotate_component"],[110,2,1,"","add_round"],[110,2,1,"","add_round_key_output_component"],[110,2,1,"","add_round_output_component"],[110,2,1,"","add_shift_rows_component"],[110,2,1,"","add_sigma_component"],[110,2,1,"","add_suffix_to_components"],[110,2,1,"","add_theta_keccak_component"],[110,2,1,"","add_theta_xoodoo_component"],[110,2,1,"","add_variable_rotate_component"],[110,2,1,"","add_variable_shift_component"],[110,2,1,"","add_word_permutation_component"],[110,2,1,"","algebraic_tests"],[110,2,1,"","analyze_cipher"],[110,2,1,"","as_python_dictionary"],[110,2,1,"","avalanche_probability_vectors"],[110,2,1,"","cipher_inverse"],[110,2,1,"","cipher_partial_inverse"],[110,2,1,"","column_step"],[110,2,1,"","component_analysis_tests"],[110,2,1,"","component_from"],[110,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[110,2,1,"","continuous_avalanche_factor"],[110,2,1,"","continuous_diffusion_factor"],[110,2,1,"","continuous_diffusion_tests"],[110,2,1,"","continuous_neutrality_measure_for_bit_j"],[110,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[110,2,1,"","convert_to_compound_xor_cipher"],[110,3,1,"","current_round"],[110,3,1,"","current_round_number"],[110,3,1,"","current_round_number_of_components"],[110,2,1,"","define_number_of_rounds"],[110,2,1,"","define_permutations"],[110,2,1,"","define_rotation_amounts"],[110,2,1,"","delete_generated_evaluate_c_shared_library"],[110,2,1,"","diagonal_step"],[110,2,1,"","diffusion_tests"],[110,2,1,"","evaluate"],[110,2,1,"","evaluate_using_c"],[110,2,1,"","evaluate_vectorized"],[110,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[110,3,1,"","family_name"],[110,3,1,"","file_name"],[110,2,1,"","find_good_input_difference_for_neural_distinguisher"],[110,2,1,"","find_impossible_property"],[110,2,1,"","generate_bit_based_c_code"],[110,2,1,"","generate_csv_report"],[110,2,1,"","generate_evaluate_c_code_shared_library"],[110,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[110,2,1,"","generate_word_based_c_code"],[110,2,1,"","get_all_components"],[110,2,1,"","get_all_components_ids"],[110,2,1,"","get_all_inputs_bit_positions"],[110,2,1,"","get_component_from_id"],[110,2,1,"","get_components_in_round"],[110,2,1,"","get_current_component_id"],[110,2,1,"","get_model"],[110,2,1,"","get_number_of_components_in_round"],[110,2,1,"","get_partial_cipher"],[110,2,1,"","get_round_from_component_id"],[110,2,1,"","get_sizes_of_components_by_type"],[110,3,1,"","id"],[110,2,1,"","impossible_differential_search"],[110,3,1,"","inputs"],[110,3,1,"","inputs_bit_size"],[110,2,1,"","inputs_size_to_dict"],[110,2,1,"","is_algebraically_secure"],[110,2,1,"","is_andrx"],[110,2,1,"","is_arx"],[110,2,1,"","is_power_of_2_word_based"],[110,2,1,"","is_shift_arx"],[110,2,1,"","is_spn"],[110,2,1,"","make_cipher_id"],[110,2,1,"","make_file_name"],[110,2,1,"","neural_network_blackbox_distinguisher_tests"],[110,2,1,"","neural_network_differential_distinguisher_tests"],[110,3,1,"","number_of_rounds"],[110,3,1,"","output_bit_size"],[110,2,1,"","polynomial_system"],[110,2,1,"","polynomial_system_at_round"],[110,2,1,"","print"],[110,2,1,"","print_as_python_dictionary"],[110,2,1,"","print_as_python_dictionary_to_file"],[110,2,1,"","print_component_analysis_as_radar_charts"],[110,2,1,"","print_evaluation_python_code"],[110,2,1,"","print_evaluation_python_code_to_file"],[110,2,1,"","print_input_information"],[110,3,1,"","reference_code"],[110,2,1,"","remove_key_schedule"],[110,2,1,"","remove_round_component"],[110,2,1,"","remove_round_component_from_id"],[110,3,1,"","rounds"],[110,3,1,"","rounds_as_list"],[110,2,1,"","run_autond_pipeline"],[110,2,1,"","set_file_name"],[110,2,1,"","set_id"],[110,2,1,"","set_inputs"],[110,2,1,"","sort_cipher"],[110,2,1,"","state_transformation"],[110,2,1,"","test_against_reference_code"],[110,2,1,"","test_vector_check"],[110,2,1,"","train_gohr_neural_distinguisher"],[110,2,1,"","train_neural_distinguisher"],[110,3,1,"","type"],[110,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.blake_hash_function":[[111,1,1,"","BlakeHashFunction"]],"ciphers.hash_functions.blake_hash_function.BlakeHashFunction":[[111,2,1,"","add_AND_component"],[111,2,1,"","add_FSR_component"],[111,2,1,"","add_MODADD_component"],[111,2,1,"","add_MODSUB_component"],[111,2,1,"","add_NOT_component"],[111,2,1,"","add_OR_component"],[111,2,1,"","add_SBOX_component"],[111,2,1,"","add_SHIFT_component"],[111,2,1,"","add_XOR_component"],[111,2,1,"","add_cipher_output_component"],[111,2,1,"","add_concatenate_component"],[111,2,1,"","add_constant_component"],[111,2,1,"","add_intermediate_output_component"],[111,2,1,"","add_linear_layer_component"],[111,2,1,"","add_mix_column_component"],[111,2,1,"","add_permutation_component"],[111,2,1,"","add_reverse_component"],[111,2,1,"","add_rotate_component"],[111,2,1,"","add_round"],[111,2,1,"","add_round_key_output_component"],[111,2,1,"","add_round_output_component"],[111,2,1,"","add_shift_rows_component"],[111,2,1,"","add_sigma_component"],[111,2,1,"","add_suffix_to_components"],[111,2,1,"","add_theta_keccak_component"],[111,2,1,"","add_theta_xoodoo_component"],[111,2,1,"","add_variable_rotate_component"],[111,2,1,"","add_variable_shift_component"],[111,2,1,"","add_word_permutation_component"],[111,2,1,"","algebraic_tests"],[111,2,1,"","analyze_cipher"],[111,2,1,"","as_python_dictionary"],[111,2,1,"","avalanche_probability_vectors"],[111,2,1,"","cipher_inverse"],[111,2,1,"","cipher_partial_inverse"],[111,2,1,"","column_step"],[111,2,1,"","component_analysis_tests"],[111,2,1,"","component_from"],[111,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[111,2,1,"","continuous_avalanche_factor"],[111,2,1,"","continuous_diffusion_factor"],[111,2,1,"","continuous_diffusion_tests"],[111,2,1,"","continuous_neutrality_measure_for_bit_j"],[111,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[111,2,1,"","convert_to_compound_xor_cipher"],[111,3,1,"","current_round"],[111,3,1,"","current_round_number"],[111,3,1,"","current_round_number_of_components"],[111,2,1,"","define_constants"],[111,2,1,"","define_number_of_rounds"],[111,2,1,"","define_permutations"],[111,2,1,"","define_rotation_amounts"],[111,2,1,"","delete_generated_evaluate_c_shared_library"],[111,2,1,"","diagonal_step"],[111,2,1,"","diffusion_tests"],[111,2,1,"","evaluate"],[111,2,1,"","evaluate_using_c"],[111,2,1,"","evaluate_vectorized"],[111,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[111,3,1,"","family_name"],[111,3,1,"","file_name"],[111,2,1,"","find_good_input_difference_for_neural_distinguisher"],[111,2,1,"","find_impossible_property"],[111,2,1,"","generate_bit_based_c_code"],[111,2,1,"","generate_csv_report"],[111,2,1,"","generate_evaluate_c_code_shared_library"],[111,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[111,2,1,"","generate_word_based_c_code"],[111,2,1,"","get_all_components"],[111,2,1,"","get_all_components_ids"],[111,2,1,"","get_all_inputs_bit_positions"],[111,2,1,"","get_component_from_id"],[111,2,1,"","get_components_in_round"],[111,2,1,"","get_current_component_id"],[111,2,1,"","get_model"],[111,2,1,"","get_number_of_components_in_round"],[111,2,1,"","get_partial_cipher"],[111,2,1,"","get_round_from_component_id"],[111,2,1,"","get_sizes_of_components_by_type"],[111,3,1,"","id"],[111,2,1,"","impossible_differential_search"],[111,3,1,"","inputs"],[111,3,1,"","inputs_bit_size"],[111,2,1,"","inputs_size_to_dict"],[111,2,1,"","is_algebraically_secure"],[111,2,1,"","is_andrx"],[111,2,1,"","is_arx"],[111,2,1,"","is_power_of_2_word_based"],[111,2,1,"","is_shift_arx"],[111,2,1,"","is_spn"],[111,2,1,"","make_cipher_id"],[111,2,1,"","make_file_name"],[111,2,1,"","neural_network_blackbox_distinguisher_tests"],[111,2,1,"","neural_network_differential_distinguisher_tests"],[111,3,1,"","number_of_rounds"],[111,3,1,"","output_bit_size"],[111,2,1,"","polynomial_system"],[111,2,1,"","polynomial_system_at_round"],[111,2,1,"","print"],[111,2,1,"","print_as_python_dictionary"],[111,2,1,"","print_as_python_dictionary_to_file"],[111,2,1,"","print_component_analysis_as_radar_charts"],[111,2,1,"","print_evaluation_python_code"],[111,2,1,"","print_evaluation_python_code_to_file"],[111,2,1,"","print_input_information"],[111,3,1,"","reference_code"],[111,2,1,"","remove_key_schedule"],[111,2,1,"","remove_round_component"],[111,2,1,"","remove_round_component_from_id"],[111,3,1,"","rounds"],[111,3,1,"","rounds_as_list"],[111,2,1,"","run_autond_pipeline"],[111,2,1,"","set_file_name"],[111,2,1,"","set_id"],[111,2,1,"","set_inputs"],[111,2,1,"","sort_cipher"],[111,2,1,"","state_transformation"],[111,2,1,"","test_against_reference_code"],[111,2,1,"","test_vector_check"],[111,2,1,"","train_gohr_neural_distinguisher"],[111,2,1,"","train_neural_distinguisher"],[111,3,1,"","type"],[111,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.md5_hash_function":[[112,1,1,"","MD5HashFunction"]],"ciphers.hash_functions.md5_hash_function.MD5HashFunction":[[112,2,1,"","F"],[112,2,1,"","G"],[112,2,1,"","H"],[112,2,1,"","I"],[112,2,1,"","add_AND_component"],[112,2,1,"","add_FSR_component"],[112,2,1,"","add_MODADD_component"],[112,2,1,"","add_MODSUB_component"],[112,2,1,"","add_NOT_component"],[112,2,1,"","add_OR_component"],[112,2,1,"","add_SBOX_component"],[112,2,1,"","add_SHIFT_component"],[112,2,1,"","add_XOR_component"],[112,2,1,"","add_and_component_in_md5"],[112,2,1,"","add_cipher_output_component"],[112,2,1,"","add_concatenate_component"],[112,2,1,"","add_constant_component"],[112,2,1,"","add_intermediate_output_component"],[112,2,1,"","add_linear_layer_component"],[112,2,1,"","add_mix_column_component"],[112,2,1,"","add_modadd_component_in_md5"],[112,2,1,"","add_modadd_component_in_md5_for_x"],[112,2,1,"","add_not_component_in_md5"],[112,2,1,"","add_or_component_in_md5"],[112,2,1,"","add_permutation_component"],[112,2,1,"","add_reverse_component"],[112,2,1,"","add_rotate_component"],[112,2,1,"","add_rotate_component_in_md5"],[112,2,1,"","add_round"],[112,2,1,"","add_round_key_output_component"],[112,2,1,"","add_round_output_component"],[112,2,1,"","add_round_output_component_in_md5"],[112,2,1,"","add_shift_rows_component"],[112,2,1,"","add_sigma_component"],[112,2,1,"","add_suffix_to_components"],[112,2,1,"","add_theta_keccak_component"],[112,2,1,"","add_theta_xoodoo_component"],[112,2,1,"","add_variable_rotate_component"],[112,2,1,"","add_variable_shift_component"],[112,2,1,"","add_word_permutation_component"],[112,2,1,"","add_xor_component_in_md5"],[112,2,1,"","algebraic_tests"],[112,2,1,"","analyze_cipher"],[112,2,1,"","as_python_dictionary"],[112,2,1,"","avalanche_probability_vectors"],[112,2,1,"","cipher_inverse"],[112,2,1,"","cipher_partial_inverse"],[112,2,1,"","component_analysis_tests"],[112,2,1,"","component_from"],[112,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[112,2,1,"","continuous_avalanche_factor"],[112,2,1,"","continuous_diffusion_factor"],[112,2,1,"","continuous_diffusion_tests"],[112,2,1,"","continuous_neutrality_measure_for_bit_j"],[112,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[112,2,1,"","convert_to_compound_xor_cipher"],[112,3,1,"","current_round"],[112,3,1,"","current_round_number"],[112,3,1,"","current_round_number_of_components"],[112,2,1,"","delete_generated_evaluate_c_shared_library"],[112,2,1,"","diffusion_tests"],[112,2,1,"","evaluate"],[112,2,1,"","evaluate_using_c"],[112,2,1,"","evaluate_vectorized"],[112,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[112,3,1,"","family_name"],[112,3,1,"","file_name"],[112,2,1,"","find_good_input_difference_for_neural_distinguisher"],[112,2,1,"","find_impossible_property"],[112,2,1,"","generate_bit_based_c_code"],[112,2,1,"","generate_csv_report"],[112,2,1,"","generate_evaluate_c_code_shared_library"],[112,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[112,2,1,"","generate_word_based_c_code"],[112,2,1,"","get_all_components"],[112,2,1,"","get_all_components_ids"],[112,2,1,"","get_all_inputs_bit_positions"],[112,2,1,"","get_component_from_id"],[112,2,1,"","get_components_in_round"],[112,2,1,"","get_current_component_id"],[112,2,1,"","get_model"],[112,2,1,"","get_number_of_components_in_round"],[112,2,1,"","get_partial_cipher"],[112,2,1,"","get_round_from_component_id"],[112,2,1,"","get_sizes_of_components_by_type"],[112,3,1,"","id"],[112,2,1,"","impossible_differential_search"],[112,3,1,"","inputs"],[112,3,1,"","inputs_bit_size"],[112,2,1,"","inputs_size_to_dict"],[112,2,1,"","is_algebraically_secure"],[112,2,1,"","is_andrx"],[112,2,1,"","is_arx"],[112,2,1,"","is_power_of_2_word_based"],[112,2,1,"","is_shift_arx"],[112,2,1,"","is_spn"],[112,2,1,"","make_cipher_id"],[112,2,1,"","make_file_name"],[112,2,1,"","md5_step"],[112,2,1,"","neural_network_blackbox_distinguisher_tests"],[112,2,1,"","neural_network_differential_distinguisher_tests"],[112,3,1,"","number_of_rounds"],[112,3,1,"","output_bit_size"],[112,2,1,"","polynomial_system"],[112,2,1,"","polynomial_system_at_round"],[112,2,1,"","print"],[112,2,1,"","print_as_python_dictionary"],[112,2,1,"","print_as_python_dictionary_to_file"],[112,2,1,"","print_component_analysis_as_radar_charts"],[112,2,1,"","print_evaluation_python_code"],[112,2,1,"","print_evaluation_python_code_to_file"],[112,2,1,"","print_input_information"],[112,3,1,"","reference_code"],[112,2,1,"","remove_key_schedule"],[112,2,1,"","remove_round_component"],[112,2,1,"","remove_round_component_from_id"],[112,3,1,"","rounds"],[112,3,1,"","rounds_as_list"],[112,2,1,"","run_autond_pipeline"],[112,2,1,"","set_file_name"],[112,2,1,"","set_id"],[112,2,1,"","set_inputs"],[112,2,1,"","sort_cipher"],[112,2,1,"","test_against_reference_code"],[112,2,1,"","test_vector_check"],[112,2,1,"","train_gohr_neural_distinguisher"],[112,2,1,"","train_neural_distinguisher"],[112,3,1,"","type"],[112,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha1_hash_function":[[113,1,1,"","SHA1HashFunction"]],"ciphers.hash_functions.sha1_hash_function.SHA1HashFunction":[[113,2,1,"","add_AND_component"],[113,2,1,"","add_FSR_component"],[113,2,1,"","add_MODADD_component"],[113,2,1,"","add_MODSUB_component"],[113,2,1,"","add_NOT_component"],[113,2,1,"","add_OR_component"],[113,2,1,"","add_SBOX_component"],[113,2,1,"","add_SHIFT_component"],[113,2,1,"","add_XOR_component"],[113,2,1,"","add_and_component_in_sha1"],[113,2,1,"","add_cipher_output_component"],[113,2,1,"","add_concatenate_component"],[113,2,1,"","add_constant_component"],[113,2,1,"","add_intermediate_output_component"],[113,2,1,"","add_linear_layer_component"],[113,2,1,"","add_mix_column_component"],[113,2,1,"","add_modadd_component_in_sha1"],[113,2,1,"","add_permutation_component"],[113,2,1,"","add_reverse_component"],[113,2,1,"","add_rotate_component"],[113,2,1,"","add_rotate_component_in_sha1"],[113,2,1,"","add_round"],[113,2,1,"","add_round_key_output_component"],[113,2,1,"","add_round_output_component"],[113,2,1,"","add_round_output_component_in_sha1"],[113,2,1,"","add_shift_rows_component"],[113,2,1,"","add_sigma_component"],[113,2,1,"","add_suffix_to_components"],[113,2,1,"","add_theta_keccak_component"],[113,2,1,"","add_theta_xoodoo_component"],[113,2,1,"","add_variable_rotate_component"],[113,2,1,"","add_variable_shift_component"],[113,2,1,"","add_word_permutation_component"],[113,2,1,"","algebraic_tests"],[113,2,1,"","analyze_cipher"],[113,2,1,"","as_python_dictionary"],[113,2,1,"","avalanche_probability_vectors"],[113,2,1,"","cipher_inverse"],[113,2,1,"","cipher_partial_inverse"],[113,2,1,"","component_analysis_tests"],[113,2,1,"","component_from"],[113,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[113,2,1,"","compute_temp_and_s_30_b"],[113,2,1,"","continuous_avalanche_factor"],[113,2,1,"","continuous_diffusion_factor"],[113,2,1,"","continuous_diffusion_tests"],[113,2,1,"","continuous_neutrality_measure_for_bit_j"],[113,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[113,2,1,"","convert_to_compound_xor_cipher"],[113,3,1,"","current_round"],[113,3,1,"","current_round_number"],[113,3,1,"","current_round_number_of_components"],[113,2,1,"","delete_generated_evaluate_c_shared_library"],[113,2,1,"","diffusion_tests"],[113,2,1,"","evaluate"],[113,2,1,"","evaluate_using_c"],[113,2,1,"","evaluate_vectorized"],[113,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[113,3,1,"","family_name"],[113,3,1,"","file_name"],[113,2,1,"","find_good_input_difference_for_neural_distinguisher"],[113,2,1,"","find_impossible_property"],[113,2,1,"","generate_bit_based_c_code"],[113,2,1,"","generate_csv_report"],[113,2,1,"","generate_evaluate_c_code_shared_library"],[113,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[113,2,1,"","generate_word_based_c_code"],[113,2,1,"","get_all_components"],[113,2,1,"","get_all_components_ids"],[113,2,1,"","get_all_inputs_bit_positions"],[113,2,1,"","get_component_from_id"],[113,2,1,"","get_components_in_round"],[113,2,1,"","get_current_component_id"],[113,2,1,"","get_model"],[113,2,1,"","get_number_of_components_in_round"],[113,2,1,"","get_partial_cipher"],[113,2,1,"","get_round_from_component_id"],[113,2,1,"","get_sizes_of_components_by_type"],[113,3,1,"","id"],[113,2,1,"","impossible_differential_search"],[113,3,1,"","inputs"],[113,3,1,"","inputs_bit_size"],[113,2,1,"","inputs_size_to_dict"],[113,2,1,"","is_algebraically_secure"],[113,2,1,"","is_andrx"],[113,2,1,"","is_arx"],[113,2,1,"","is_power_of_2_word_based"],[113,2,1,"","is_shift_arx"],[113,2,1,"","is_spn"],[113,2,1,"","make_cipher_id"],[113,2,1,"","make_file_name"],[113,2,1,"","neural_network_blackbox_distinguisher_tests"],[113,2,1,"","neural_network_differential_distinguisher_tests"],[113,3,1,"","number_of_rounds"],[113,3,1,"","output_bit_size"],[113,2,1,"","polynomial_system"],[113,2,1,"","polynomial_system_at_round"],[113,2,1,"","print"],[113,2,1,"","print_as_python_dictionary"],[113,2,1,"","print_as_python_dictionary_to_file"],[113,2,1,"","print_component_analysis_as_radar_charts"],[113,2,1,"","print_evaluation_python_code"],[113,2,1,"","print_evaluation_python_code_to_file"],[113,2,1,"","print_input_information"],[113,3,1,"","reference_code"],[113,2,1,"","remove_key_schedule"],[113,2,1,"","remove_round_component"],[113,2,1,"","remove_round_component_from_id"],[113,3,1,"","rounds"],[113,2,1,"","rounds_0_19"],[113,2,1,"","rounds_20_39"],[113,2,1,"","rounds_40_59"],[113,3,1,"","rounds_as_list"],[113,2,1,"","run_autond_pipeline"],[113,2,1,"","schedule"],[113,2,1,"","set_file_name"],[113,2,1,"","set_id"],[113,2,1,"","set_inputs"],[113,2,1,"","sort_cipher"],[113,2,1,"","test_against_reference_code"],[113,2,1,"","test_vector_check"],[113,2,1,"","train_gohr_neural_distinguisher"],[113,2,1,"","train_neural_distinguisher"],[113,3,1,"","type"],[113,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha2_hash_function":[[114,1,1,"","SHA2HashFunction"]],"ciphers.hash_functions.sha2_hash_function.SHA2HashFunction":[[114,2,1,"","add_AND_component"],[114,2,1,"","add_FSR_component"],[114,2,1,"","add_MODADD_component"],[114,2,1,"","add_MODSUB_component"],[114,2,1,"","add_NOT_component"],[114,2,1,"","add_OR_component"],[114,2,1,"","add_SBOX_component"],[114,2,1,"","add_SHIFT_component"],[114,2,1,"","add_XOR_component"],[114,2,1,"","add_and_component_sha2"],[114,2,1,"","add_cipher_output_component"],[114,2,1,"","add_concatenate_component"],[114,2,1,"","add_constant_component"],[114,2,1,"","add_intermediate_output_component"],[114,2,1,"","add_linear_layer_component"],[114,2,1,"","add_mix_column_component"],[114,2,1,"","add_modadd_component_sha2"],[114,2,1,"","add_permutation_component"],[114,2,1,"","add_reverse_component"],[114,2,1,"","add_rotate_component"],[114,2,1,"","add_rotate_component_sha2"],[114,2,1,"","add_round"],[114,2,1,"","add_round_key_output_component"],[114,2,1,"","add_round_output_component"],[114,2,1,"","add_round_output_component_sha2"],[114,2,1,"","add_shift_rows_component"],[114,2,1,"","add_sigma_component"],[114,2,1,"","add_suffix_to_components"],[114,2,1,"","add_theta_keccak_component"],[114,2,1,"","add_theta_xoodoo_component"],[114,2,1,"","add_variable_rotate_component"],[114,2,1,"","add_variable_shift_component"],[114,2,1,"","add_word_permutation_component"],[114,2,1,"","add_xor_component_sha2"],[114,2,1,"","algebraic_tests"],[114,2,1,"","analyze_cipher"],[114,2,1,"","as_python_dictionary"],[114,2,1,"","avalanche_probability_vectors"],[114,2,1,"","cipher_inverse"],[114,2,1,"","cipher_partial_inverse"],[114,2,1,"","component_analysis_tests"],[114,2,1,"","component_from"],[114,2,1,"","compute_bsig0_bsig1"],[114,2,1,"","compute_ch"],[114,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[114,2,1,"","compute_maj"],[114,2,1,"","compute_ssig0_ssig1"],[114,2,1,"","continuous_avalanche_factor"],[114,2,1,"","continuous_diffusion_factor"],[114,2,1,"","continuous_diffusion_tests"],[114,2,1,"","continuous_neutrality_measure_for_bit_j"],[114,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[114,2,1,"","convert_to_compound_xor_cipher"],[114,3,1,"","current_round"],[114,3,1,"","current_round_number"],[114,3,1,"","current_round_number_of_components"],[114,2,1,"","delete_generated_evaluate_c_shared_library"],[114,2,1,"","diffusion_tests"],[114,2,1,"","evaluate"],[114,2,1,"","evaluate_using_c"],[114,2,1,"","evaluate_vectorized"],[114,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[114,3,1,"","family_name"],[114,3,1,"","file_name"],[114,2,1,"","find_good_input_difference_for_neural_distinguisher"],[114,2,1,"","find_impossible_property"],[114,2,1,"","generate_bit_based_c_code"],[114,2,1,"","generate_csv_report"],[114,2,1,"","generate_evaluate_c_code_shared_library"],[114,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[114,2,1,"","generate_word_based_c_code"],[114,2,1,"","get_all_components"],[114,2,1,"","get_all_components_ids"],[114,2,1,"","get_all_inputs_bit_positions"],[114,2,1,"","get_component_from_id"],[114,2,1,"","get_components_in_round"],[114,2,1,"","get_current_component_id"],[114,2,1,"","get_model"],[114,2,1,"","get_number_of_components_in_round"],[114,2,1,"","get_partial_cipher"],[114,2,1,"","get_round_from_component_id"],[114,2,1,"","get_sizes_of_components_by_type"],[114,3,1,"","id"],[114,2,1,"","impossible_differential_search"],[114,3,1,"","inputs"],[114,3,1,"","inputs_bit_size"],[114,2,1,"","inputs_size_to_dict"],[114,2,1,"","is_algebraically_secure"],[114,2,1,"","is_andrx"],[114,2,1,"","is_arx"],[114,2,1,"","is_power_of_2_word_based"],[114,2,1,"","is_shift_arx"],[114,2,1,"","is_spn"],[114,2,1,"","make_cipher_id"],[114,2,1,"","make_file_name"],[114,2,1,"","neural_network_blackbox_distinguisher_tests"],[114,2,1,"","neural_network_differential_distinguisher_tests"],[114,3,1,"","number_of_rounds"],[114,3,1,"","output_bit_size"],[114,2,1,"","polynomial_system"],[114,2,1,"","polynomial_system_at_round"],[114,2,1,"","print"],[114,2,1,"","print_as_python_dictionary"],[114,2,1,"","print_as_python_dictionary_to_file"],[114,2,1,"","print_component_analysis_as_radar_charts"],[114,2,1,"","print_evaluation_python_code"],[114,2,1,"","print_evaluation_python_code_to_file"],[114,2,1,"","print_input_information"],[114,3,1,"","reference_code"],[114,2,1,"","remove_key_schedule"],[114,2,1,"","remove_round_component"],[114,2,1,"","remove_round_component_from_id"],[114,2,1,"","round_function"],[114,3,1,"","rounds"],[114,3,1,"","rounds_as_list"],[114,2,1,"","run_autond_pipeline"],[114,2,1,"","schedule"],[114,2,1,"","set_file_name"],[114,2,1,"","set_id"],[114,2,1,"","set_inputs"],[114,2,1,"","sort_cipher"],[114,2,1,"","test_against_reference_code"],[114,2,1,"","test_vector_check"],[114,2,1,"","train_gohr_neural_distinguisher"],[114,2,1,"","train_neural_distinguisher"],[114,3,1,"","type"],[114,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.whirlpool_hash_function":[[115,1,1,"","WhirlpoolHashFunction"]],"ciphers.hash_functions.whirlpool_hash_function.WhirlpoolHashFunction":[[115,2,1,"","add_AND_component"],[115,2,1,"","add_FSR_component"],[115,2,1,"","add_MODADD_component"],[115,2,1,"","add_MODSUB_component"],[115,2,1,"","add_NOT_component"],[115,2,1,"","add_OR_component"],[115,2,1,"","add_SBOX_component"],[115,2,1,"","add_SHIFT_component"],[115,2,1,"","add_XOR_component"],[115,2,1,"","add_cipher_output_component"],[115,2,1,"","add_concatenate_component"],[115,2,1,"","add_constant_component"],[115,2,1,"","add_intermediate_output_component"],[115,2,1,"","add_linear_layer_component"],[115,2,1,"","add_mix_column_component"],[115,2,1,"","add_permutation_component"],[115,2,1,"","add_reverse_component"],[115,2,1,"","add_rotate_component"],[115,2,1,"","add_round"],[115,2,1,"","add_round_key_output_component"],[115,2,1,"","add_round_output_component"],[115,2,1,"","add_shift_rows_component"],[115,2,1,"","add_sigma_component"],[115,2,1,"","add_suffix_to_components"],[115,2,1,"","add_theta_keccak_component"],[115,2,1,"","add_theta_xoodoo_component"],[115,2,1,"","add_variable_rotate_component"],[115,2,1,"","add_variable_shift_component"],[115,2,1,"","add_word_permutation_component"],[115,2,1,"","algebraic_tests"],[115,2,1,"","analyze_cipher"],[115,2,1,"","as_python_dictionary"],[115,2,1,"","avalanche_probability_vectors"],[115,2,1,"","cipher_inverse"],[115,2,1,"","cipher_partial_inverse"],[115,2,1,"","component_analysis_tests"],[115,2,1,"","component_from"],[115,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[115,2,1,"","continuous_avalanche_factor"],[115,2,1,"","continuous_diffusion_factor"],[115,2,1,"","continuous_diffusion_tests"],[115,2,1,"","continuous_neutrality_measure_for_bit_j"],[115,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[115,2,1,"","convert_to_compound_xor_cipher"],[115,2,1,"","create_SBOX_component"],[115,2,1,"","create_mix_row_components"],[115,2,1,"","create_round_constant_component"],[115,2,1,"","create_shift_column_components"],[115,3,1,"","current_round"],[115,3,1,"","current_round_number"],[115,3,1,"","current_round_number_of_components"],[115,2,1,"","delete_generated_evaluate_c_shared_library"],[115,2,1,"","diffusion_tests"],[115,2,1,"","evaluate"],[115,2,1,"","evaluate_using_c"],[115,2,1,"","evaluate_vectorized"],[115,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[115,3,1,"","family_name"],[115,3,1,"","file_name"],[115,2,1,"","find_good_input_difference_for_neural_distinguisher"],[115,2,1,"","find_impossible_property"],[115,2,1,"","generate_bit_based_c_code"],[115,2,1,"","generate_csv_report"],[115,2,1,"","generate_evaluate_c_code_shared_library"],[115,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[115,2,1,"","generate_word_based_c_code"],[115,2,1,"","get_all_components"],[115,2,1,"","get_all_components_ids"],[115,2,1,"","get_all_inputs_bit_positions"],[115,2,1,"","get_component_from_id"],[115,2,1,"","get_components_in_round"],[115,2,1,"","get_current_component_id"],[115,2,1,"","get_model"],[115,2,1,"","get_number_of_components_in_round"],[115,2,1,"","get_partial_cipher"],[115,2,1,"","get_round_from_component_id"],[115,2,1,"","get_sizes_of_components_by_type"],[115,3,1,"","id"],[115,2,1,"","impossible_differential_search"],[115,3,1,"","inputs"],[115,3,1,"","inputs_bit_size"],[115,2,1,"","inputs_size_to_dict"],[115,2,1,"","is_algebraically_secure"],[115,2,1,"","is_andrx"],[115,2,1,"","is_arx"],[115,2,1,"","is_power_of_2_word_based"],[115,2,1,"","is_shift_arx"],[115,2,1,"","is_spn"],[115,2,1,"","make_cipher_id"],[115,2,1,"","make_file_name"],[115,2,1,"","neural_network_blackbox_distinguisher_tests"],[115,2,1,"","neural_network_differential_distinguisher_tests"],[115,3,1,"","number_of_rounds"],[115,3,1,"","output_bit_size"],[115,2,1,"","polynomial_system"],[115,2,1,"","polynomial_system_at_round"],[115,2,1,"","print"],[115,2,1,"","print_as_python_dictionary"],[115,2,1,"","print_as_python_dictionary_to_file"],[115,2,1,"","print_component_analysis_as_radar_charts"],[115,2,1,"","print_evaluation_python_code"],[115,2,1,"","print_evaluation_python_code_to_file"],[115,2,1,"","print_input_information"],[115,3,1,"","reference_code"],[115,2,1,"","remove_key_schedule"],[115,2,1,"","remove_round_component"],[115,2,1,"","remove_round_component_from_id"],[115,3,1,"","rounds"],[115,3,1,"","rounds_as_list"],[115,2,1,"","run_autond_pipeline"],[115,2,1,"","set_file_name"],[115,2,1,"","set_id"],[115,2,1,"","set_inputs"],[115,2,1,"","sort_cipher"],[115,2,1,"","test_against_reference_code"],[115,2,1,"","test_vector_check"],[115,2,1,"","train_gohr_neural_distinguisher"],[115,2,1,"","train_neural_distinguisher"],[115,3,1,"","type"],[115,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations":[[116,0,0,"-","ascon_permutation"],[117,0,0,"-","ascon_sbox_sigma_no_matrix_permutation"],[118,0,0,"-","ascon_sbox_sigma_permutation"],[119,0,0,"-","chacha_permutation"],[120,0,0,"-","gift_permutation"],[121,0,0,"-","gift_sbox_permutation"],[122,0,0,"-","gimli_permutation"],[123,0,0,"-","gimli_sbox_permutation"],[124,0,0,"-","grain_core_permutation"],[125,0,0,"-","keccak_invertible_permutation"],[126,0,0,"-","keccak_permutation"],[127,0,0,"-","keccak_sbox_permutation"],[128,0,0,"-","photon_permutation"],[129,0,0,"-","salsa_permutation"],[130,0,0,"-","sparkle_permutation"],[131,0,0,"-","spongent_pi_fsr_permutation"],[132,0,0,"-","spongent_pi_permutation"],[133,0,0,"-","spongent_pi_precomputation_permutation"],[134,0,0,"-","tinyjambu_32bits_word_permutation"],[135,0,0,"-","tinyjambu_fsr_32bits_word_permutation"],[136,0,0,"-","tinyjambu_permutation"],[137,0,0,"-","util"],[138,0,0,"-","xoodoo_invertible_permutation"],[139,0,0,"-","xoodoo_permutation"],[140,0,0,"-","xoodoo_sbox_permutation"]],"ciphers.permutations.ascon_permutation":[[116,1,1,"","AsconPermutation"]],"ciphers.permutations.ascon_permutation.AsconPermutation":[[116,2,1,"","add_AND_component"],[116,2,1,"","add_FSR_component"],[116,2,1,"","add_MODADD_component"],[116,2,1,"","add_MODSUB_component"],[116,2,1,"","add_NOT_component"],[116,2,1,"","add_OR_component"],[116,2,1,"","add_SBOX_component"],[116,2,1,"","add_SHIFT_component"],[116,2,1,"","add_XOR_component"],[116,2,1,"","add_cipher_output_component"],[116,2,1,"","add_concatenate_component"],[116,2,1,"","add_constant_component"],[116,2,1,"","add_intermediate_output_component"],[116,2,1,"","add_linear_layer_component"],[116,2,1,"","add_mix_column_component"],[116,2,1,"","add_permutation_component"],[116,2,1,"","add_reverse_component"],[116,2,1,"","add_rotate_component"],[116,2,1,"","add_round"],[116,2,1,"","add_round_key_output_component"],[116,2,1,"","add_round_output_component"],[116,2,1,"","add_shift_rows_component"],[116,2,1,"","add_sigma_component"],[116,2,1,"","add_suffix_to_components"],[116,2,1,"","add_theta_keccak_component"],[116,2,1,"","add_theta_xoodoo_component"],[116,2,1,"","add_variable_rotate_component"],[116,2,1,"","add_variable_shift_component"],[116,2,1,"","add_word_permutation_component"],[116,2,1,"","algebraic_tests"],[116,2,1,"","analyze_cipher"],[116,2,1,"","as_python_dictionary"],[116,2,1,"","avalanche_probability_vectors"],[116,2,1,"","cipher_inverse"],[116,2,1,"","cipher_partial_inverse"],[116,2,1,"","component_analysis_tests"],[116,2,1,"","component_from"],[116,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[116,2,1,"","continuous_avalanche_factor"],[116,2,1,"","continuous_diffusion_factor"],[116,2,1,"","continuous_diffusion_tests"],[116,2,1,"","continuous_neutrality_measure_for_bit_j"],[116,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[116,2,1,"","convert_to_compound_xor_cipher"],[116,3,1,"","current_round"],[116,3,1,"","current_round_number"],[116,3,1,"","current_round_number_of_components"],[116,2,1,"","delete_generated_evaluate_c_shared_library"],[116,2,1,"","diffusion_tests"],[116,2,1,"","evaluate"],[116,2,1,"","evaluate_using_c"],[116,2,1,"","evaluate_vectorized"],[116,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[116,3,1,"","family_name"],[116,3,1,"","file_name"],[116,2,1,"","find_good_input_difference_for_neural_distinguisher"],[116,2,1,"","find_impossible_property"],[116,2,1,"","generate_bit_based_c_code"],[116,2,1,"","generate_csv_report"],[116,2,1,"","generate_evaluate_c_code_shared_library"],[116,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[116,2,1,"","generate_word_based_c_code"],[116,2,1,"","get_all_components"],[116,2,1,"","get_all_components_ids"],[116,2,1,"","get_all_inputs_bit_positions"],[116,2,1,"","get_component_from_id"],[116,2,1,"","get_components_in_round"],[116,2,1,"","get_current_component_id"],[116,2,1,"","get_model"],[116,2,1,"","get_number_of_components_in_round"],[116,2,1,"","get_partial_cipher"],[116,2,1,"","get_round_from_component_id"],[116,2,1,"","get_sizes_of_components_by_type"],[116,3,1,"","id"],[116,2,1,"","impossible_differential_search"],[116,3,1,"","inputs"],[116,3,1,"","inputs_bit_size"],[116,2,1,"","inputs_size_to_dict"],[116,2,1,"","is_algebraically_secure"],[116,2,1,"","is_andrx"],[116,2,1,"","is_arx"],[116,2,1,"","is_power_of_2_word_based"],[116,2,1,"","is_shift_arx"],[116,2,1,"","is_spn"],[116,2,1,"","make_cipher_id"],[116,2,1,"","make_file_name"],[116,2,1,"","neural_network_blackbox_distinguisher_tests"],[116,2,1,"","neural_network_differential_distinguisher_tests"],[116,3,1,"","number_of_rounds"],[116,3,1,"","output_bit_size"],[116,2,1,"","polynomial_system"],[116,2,1,"","polynomial_system_at_round"],[116,2,1,"","print"],[116,2,1,"","print_as_python_dictionary"],[116,2,1,"","print_as_python_dictionary_to_file"],[116,2,1,"","print_component_analysis_as_radar_charts"],[116,2,1,"","print_evaluation_python_code"],[116,2,1,"","print_evaluation_python_code_to_file"],[116,2,1,"","print_input_information"],[116,3,1,"","reference_code"],[116,2,1,"","remove_key_schedule"],[116,2,1,"","remove_round_component"],[116,2,1,"","remove_round_component_from_id"],[116,2,1,"","round_function"],[116,3,1,"","rounds"],[116,3,1,"","rounds_as_list"],[116,2,1,"","run_autond_pipeline"],[116,2,1,"","set_file_name"],[116,2,1,"","set_id"],[116,2,1,"","set_inputs"],[116,2,1,"","sort_cipher"],[116,2,1,"","test_against_reference_code"],[116,2,1,"","test_vector_check"],[116,2,1,"","train_gohr_neural_distinguisher"],[116,2,1,"","train_neural_distinguisher"],[116,3,1,"","type"],[116,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation":[[117,1,1,"","AsconSboxSigmaNoMatrixPermutation"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation.AsconSboxSigmaNoMatrixPermutation":[[117,2,1,"","add_AND_component"],[117,2,1,"","add_FSR_component"],[117,2,1,"","add_MODADD_component"],[117,2,1,"","add_MODSUB_component"],[117,2,1,"","add_NOT_component"],[117,2,1,"","add_OR_component"],[117,2,1,"","add_SBOX_component"],[117,2,1,"","add_SHIFT_component"],[117,2,1,"","add_XOR_component"],[117,2,1,"","add_cipher_output_component"],[117,2,1,"","add_concatenate_component"],[117,2,1,"","add_constant_component"],[117,2,1,"","add_intermediate_output_component"],[117,2,1,"","add_linear_layer_component"],[117,2,1,"","add_mix_column_component"],[117,2,1,"","add_permutation_component"],[117,2,1,"","add_reverse_component"],[117,2,1,"","add_rotate_component"],[117,2,1,"","add_round"],[117,2,1,"","add_round_key_output_component"],[117,2,1,"","add_round_output_component"],[117,2,1,"","add_shift_rows_component"],[117,2,1,"","add_sigma_component"],[117,2,1,"","add_suffix_to_components"],[117,2,1,"","add_theta_keccak_component"],[117,2,1,"","add_theta_xoodoo_component"],[117,2,1,"","add_variable_rotate_component"],[117,2,1,"","add_variable_shift_component"],[117,2,1,"","add_word_permutation_component"],[117,2,1,"","algebraic_tests"],[117,2,1,"","analyze_cipher"],[117,2,1,"","as_python_dictionary"],[117,2,1,"","avalanche_probability_vectors"],[117,2,1,"","cipher_inverse"],[117,2,1,"","cipher_partial_inverse"],[117,2,1,"","component_analysis_tests"],[117,2,1,"","component_from"],[117,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[117,2,1,"","continuous_avalanche_factor"],[117,2,1,"","continuous_diffusion_factor"],[117,2,1,"","continuous_diffusion_tests"],[117,2,1,"","continuous_neutrality_measure_for_bit_j"],[117,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[117,2,1,"","convert_to_compound_xor_cipher"],[117,3,1,"","current_round"],[117,3,1,"","current_round_number"],[117,3,1,"","current_round_number_of_components"],[117,2,1,"","delete_generated_evaluate_c_shared_library"],[117,2,1,"","diffusion_tests"],[117,2,1,"","evaluate"],[117,2,1,"","evaluate_using_c"],[117,2,1,"","evaluate_vectorized"],[117,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[117,3,1,"","family_name"],[117,3,1,"","file_name"],[117,2,1,"","find_good_input_difference_for_neural_distinguisher"],[117,2,1,"","find_impossible_property"],[117,2,1,"","generate_bit_based_c_code"],[117,2,1,"","generate_csv_report"],[117,2,1,"","generate_evaluate_c_code_shared_library"],[117,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[117,2,1,"","generate_word_based_c_code"],[117,2,1,"","get_all_components"],[117,2,1,"","get_all_components_ids"],[117,2,1,"","get_all_inputs_bit_positions"],[117,2,1,"","get_component_from_id"],[117,2,1,"","get_components_in_round"],[117,2,1,"","get_current_component_id"],[117,2,1,"","get_model"],[117,2,1,"","get_number_of_components_in_round"],[117,2,1,"","get_partial_cipher"],[117,2,1,"","get_round_from_component_id"],[117,2,1,"","get_sizes_of_components_by_type"],[117,3,1,"","id"],[117,2,1,"","impossible_differential_search"],[117,3,1,"","inputs"],[117,3,1,"","inputs_bit_size"],[117,2,1,"","inputs_size_to_dict"],[117,2,1,"","is_algebraically_secure"],[117,2,1,"","is_andrx"],[117,2,1,"","is_arx"],[117,2,1,"","is_power_of_2_word_based"],[117,2,1,"","is_shift_arx"],[117,2,1,"","is_spn"],[117,2,1,"","make_cipher_id"],[117,2,1,"","make_file_name"],[117,2,1,"","neural_network_blackbox_distinguisher_tests"],[117,2,1,"","neural_network_differential_distinguisher_tests"],[117,3,1,"","number_of_rounds"],[117,3,1,"","output_bit_size"],[117,2,1,"","polynomial_system"],[117,2,1,"","polynomial_system_at_round"],[117,2,1,"","print"],[117,2,1,"","print_as_python_dictionary"],[117,2,1,"","print_as_python_dictionary_to_file"],[117,2,1,"","print_component_analysis_as_radar_charts"],[117,2,1,"","print_evaluation_python_code"],[117,2,1,"","print_evaluation_python_code_to_file"],[117,2,1,"","print_input_information"],[117,3,1,"","reference_code"],[117,2,1,"","remove_key_schedule"],[117,2,1,"","remove_round_component"],[117,2,1,"","remove_round_component_from_id"],[117,2,1,"","round_function"],[117,3,1,"","rounds"],[117,3,1,"","rounds_as_list"],[117,2,1,"","run_autond_pipeline"],[117,2,1,"","set_file_name"],[117,2,1,"","set_id"],[117,2,1,"","set_inputs"],[117,2,1,"","sort_cipher"],[117,2,1,"","test_against_reference_code"],[117,2,1,"","test_vector_check"],[117,2,1,"","train_gohr_neural_distinguisher"],[117,2,1,"","train_neural_distinguisher"],[117,3,1,"","type"],[117,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_permutation":[[118,1,1,"","AsconSboxSigmaPermutation"]],"ciphers.permutations.ascon_sbox_sigma_permutation.AsconSboxSigmaPermutation":[[118,2,1,"","add_AND_component"],[118,2,1,"","add_FSR_component"],[118,2,1,"","add_MODADD_component"],[118,2,1,"","add_MODSUB_component"],[118,2,1,"","add_NOT_component"],[118,2,1,"","add_OR_component"],[118,2,1,"","add_SBOX_component"],[118,2,1,"","add_SHIFT_component"],[118,2,1,"","add_XOR_component"],[118,2,1,"","add_cipher_output_component"],[118,2,1,"","add_concatenate_component"],[118,2,1,"","add_constant_component"],[118,2,1,"","add_intermediate_output_component"],[118,2,1,"","add_linear_layer_component"],[118,2,1,"","add_mix_column_component"],[118,2,1,"","add_permutation_component"],[118,2,1,"","add_reverse_component"],[118,2,1,"","add_rotate_component"],[118,2,1,"","add_round"],[118,2,1,"","add_round_key_output_component"],[118,2,1,"","add_round_output_component"],[118,2,1,"","add_shift_rows_component"],[118,2,1,"","add_sigma_component"],[118,2,1,"","add_suffix_to_components"],[118,2,1,"","add_theta_keccak_component"],[118,2,1,"","add_theta_xoodoo_component"],[118,2,1,"","add_variable_rotate_component"],[118,2,1,"","add_variable_shift_component"],[118,2,1,"","add_word_permutation_component"],[118,2,1,"","algebraic_tests"],[118,2,1,"","analyze_cipher"],[118,2,1,"","as_python_dictionary"],[118,2,1,"","avalanche_probability_vectors"],[118,2,1,"","cipher_inverse"],[118,2,1,"","cipher_partial_inverse"],[118,2,1,"","component_analysis_tests"],[118,2,1,"","component_from"],[118,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[118,2,1,"","continuous_avalanche_factor"],[118,2,1,"","continuous_diffusion_factor"],[118,2,1,"","continuous_diffusion_tests"],[118,2,1,"","continuous_neutrality_measure_for_bit_j"],[118,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[118,2,1,"","convert_to_compound_xor_cipher"],[118,3,1,"","current_round"],[118,3,1,"","current_round_number"],[118,3,1,"","current_round_number_of_components"],[118,2,1,"","delete_generated_evaluate_c_shared_library"],[118,2,1,"","diffusion_tests"],[118,2,1,"","evaluate"],[118,2,1,"","evaluate_using_c"],[118,2,1,"","evaluate_vectorized"],[118,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[118,3,1,"","family_name"],[118,3,1,"","file_name"],[118,2,1,"","find_good_input_difference_for_neural_distinguisher"],[118,2,1,"","find_impossible_property"],[118,2,1,"","generate_bit_based_c_code"],[118,2,1,"","generate_csv_report"],[118,2,1,"","generate_evaluate_c_code_shared_library"],[118,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[118,2,1,"","generate_word_based_c_code"],[118,2,1,"","get_all_components"],[118,2,1,"","get_all_components_ids"],[118,2,1,"","get_all_inputs_bit_positions"],[118,2,1,"","get_component_from_id"],[118,2,1,"","get_components_in_round"],[118,2,1,"","get_current_component_id"],[118,2,1,"","get_model"],[118,2,1,"","get_number_of_components_in_round"],[118,2,1,"","get_partial_cipher"],[118,2,1,"","get_round_from_component_id"],[118,2,1,"","get_sizes_of_components_by_type"],[118,3,1,"","id"],[118,2,1,"","impossible_differential_search"],[118,3,1,"","inputs"],[118,3,1,"","inputs_bit_size"],[118,2,1,"","inputs_size_to_dict"],[118,2,1,"","is_algebraically_secure"],[118,2,1,"","is_andrx"],[118,2,1,"","is_arx"],[118,2,1,"","is_power_of_2_word_based"],[118,2,1,"","is_shift_arx"],[118,2,1,"","is_spn"],[118,2,1,"","make_cipher_id"],[118,2,1,"","make_file_name"],[118,2,1,"","neural_network_blackbox_distinguisher_tests"],[118,2,1,"","neural_network_differential_distinguisher_tests"],[118,3,1,"","number_of_rounds"],[118,3,1,"","output_bit_size"],[118,2,1,"","polynomial_system"],[118,2,1,"","polynomial_system_at_round"],[118,2,1,"","print"],[118,2,1,"","print_as_python_dictionary"],[118,2,1,"","print_as_python_dictionary_to_file"],[118,2,1,"","print_component_analysis_as_radar_charts"],[118,2,1,"","print_evaluation_python_code"],[118,2,1,"","print_evaluation_python_code_to_file"],[118,2,1,"","print_input_information"],[118,3,1,"","reference_code"],[118,2,1,"","remove_key_schedule"],[118,2,1,"","remove_round_component"],[118,2,1,"","remove_round_component_from_id"],[118,2,1,"","round_function"],[118,3,1,"","rounds"],[118,3,1,"","rounds_as_list"],[118,2,1,"","run_autond_pipeline"],[118,2,1,"","set_file_name"],[118,2,1,"","set_id"],[118,2,1,"","set_inputs"],[118,2,1,"","sort_cipher"],[118,2,1,"","test_against_reference_code"],[118,2,1,"","test_vector_check"],[118,2,1,"","train_gohr_neural_distinguisher"],[118,2,1,"","train_neural_distinguisher"],[118,3,1,"","type"],[118,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.chacha_permutation":[[119,1,1,"","ChachaPermutation"]],"ciphers.permutations.chacha_permutation.ChachaPermutation":[[119,2,1,"","add_AND_component"],[119,2,1,"","add_FSR_component"],[119,2,1,"","add_MODADD_component"],[119,2,1,"","add_MODSUB_component"],[119,2,1,"","add_NOT_component"],[119,2,1,"","add_OR_component"],[119,2,1,"","add_SBOX_component"],[119,2,1,"","add_SHIFT_component"],[119,2,1,"","add_XOR_component"],[119,2,1,"","add_cipher_output_component"],[119,2,1,"","add_concatenate_component"],[119,2,1,"","add_constant_component"],[119,2,1,"","add_intermediate_output_component"],[119,2,1,"","add_linear_layer_component"],[119,2,1,"","add_mix_column_component"],[119,2,1,"","add_permutation_component"],[119,2,1,"","add_reverse_component"],[119,2,1,"","add_rotate_component"],[119,2,1,"","add_round"],[119,2,1,"","add_round_key_output_component"],[119,2,1,"","add_round_output_component"],[119,2,1,"","add_shift_rows_component"],[119,2,1,"","add_sigma_component"],[119,2,1,"","add_suffix_to_components"],[119,2,1,"","add_theta_keccak_component"],[119,2,1,"","add_theta_xoodoo_component"],[119,2,1,"","add_variable_rotate_component"],[119,2,1,"","add_variable_shift_component"],[119,2,1,"","add_word_permutation_component"],[119,2,1,"","algebraic_tests"],[119,2,1,"","analyze_cipher"],[119,2,1,"","as_python_dictionary"],[119,2,1,"","avalanche_probability_vectors"],[119,2,1,"","bottom_half_quarter_round"],[119,2,1,"","cipher_inverse"],[119,2,1,"","cipher_partial_inverse"],[119,2,1,"","component_analysis_tests"],[119,2,1,"","component_from"],[119,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[119,2,1,"","continuous_avalanche_factor"],[119,2,1,"","continuous_diffusion_factor"],[119,2,1,"","continuous_diffusion_tests"],[119,2,1,"","continuous_neutrality_measure_for_bit_j"],[119,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[119,2,1,"","convert_to_compound_xor_cipher"],[119,3,1,"","current_round"],[119,3,1,"","current_round_number"],[119,3,1,"","current_round_number_of_components"],[119,2,1,"","delete_generated_evaluate_c_shared_library"],[119,2,1,"","diffusion_tests"],[119,2,1,"","evaluate"],[119,2,1,"","evaluate_using_c"],[119,2,1,"","evaluate_vectorized"],[119,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[119,3,1,"","family_name"],[119,3,1,"","file_name"],[119,2,1,"","find_good_input_difference_for_neural_distinguisher"],[119,2,1,"","find_impossible_property"],[119,2,1,"","generate_bit_based_c_code"],[119,2,1,"","generate_csv_report"],[119,2,1,"","generate_evaluate_c_code_shared_library"],[119,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[119,2,1,"","generate_word_based_c_code"],[119,2,1,"","get_all_components"],[119,2,1,"","get_all_components_ids"],[119,2,1,"","get_all_inputs_bit_positions"],[119,2,1,"","get_component_from_id"],[119,2,1,"","get_components_in_round"],[119,2,1,"","get_current_component_id"],[119,2,1,"","get_model"],[119,2,1,"","get_number_of_components_in_round"],[119,2,1,"","get_partial_cipher"],[119,2,1,"","get_round_from_component_id"],[119,2,1,"","get_sizes_of_components_by_type"],[119,3,1,"","id"],[119,2,1,"","impossible_differential_search"],[119,3,1,"","inputs"],[119,3,1,"","inputs_bit_size"],[119,2,1,"","inputs_size_to_dict"],[119,2,1,"","is_algebraically_secure"],[119,2,1,"","is_andrx"],[119,2,1,"","is_arx"],[119,2,1,"","is_power_of_2_word_based"],[119,2,1,"","is_shift_arx"],[119,2,1,"","is_spn"],[119,2,1,"","make_cipher_id"],[119,2,1,"","make_file_name"],[119,2,1,"","neural_network_blackbox_distinguisher_tests"],[119,2,1,"","neural_network_differential_distinguisher_tests"],[119,3,1,"","number_of_rounds"],[119,3,1,"","output_bit_size"],[119,2,1,"","polynomial_system"],[119,2,1,"","polynomial_system_at_round"],[119,2,1,"","print"],[119,2,1,"","print_as_python_dictionary"],[119,2,1,"","print_as_python_dictionary_to_file"],[119,2,1,"","print_component_analysis_as_radar_charts"],[119,2,1,"","print_evaluation_python_code"],[119,2,1,"","print_evaluation_python_code_to_file"],[119,2,1,"","print_input_information"],[119,3,1,"","reference_code"],[119,2,1,"","remove_key_schedule"],[119,2,1,"","remove_round_component"],[119,2,1,"","remove_round_component_from_id"],[119,3,1,"","rounds"],[119,3,1,"","rounds_as_list"],[119,2,1,"","run_autond_pipeline"],[119,2,1,"","set_file_name"],[119,2,1,"","set_id"],[119,2,1,"","set_inputs"],[119,2,1,"","sort_cipher"],[119,2,1,"","test_against_reference_code"],[119,2,1,"","test_vector_check"],[119,2,1,"","top_half_quarter_round"],[119,2,1,"","train_gohr_neural_distinguisher"],[119,2,1,"","train_neural_distinguisher"],[119,3,1,"","type"],[119,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_permutation":[[120,1,1,"","GiftPermutation"]],"ciphers.permutations.gift_permutation.GiftPermutation":[[120,2,1,"","add_AND_component"],[120,2,1,"","add_FSR_component"],[120,2,1,"","add_MODADD_component"],[120,2,1,"","add_MODSUB_component"],[120,2,1,"","add_NOT_component"],[120,2,1,"","add_OR_component"],[120,2,1,"","add_SBOX_component"],[120,2,1,"","add_SHIFT_component"],[120,2,1,"","add_XOR_component"],[120,2,1,"","add_cipher_output_component"],[120,2,1,"","add_concatenate_component"],[120,2,1,"","add_constant_component"],[120,2,1,"","add_intermediate_output_component"],[120,2,1,"","add_linear_layer_component"],[120,2,1,"","add_mix_column_component"],[120,2,1,"","add_permutation_component"],[120,2,1,"","add_reverse_component"],[120,2,1,"","add_rotate_component"],[120,2,1,"","add_round"],[120,2,1,"","add_round_key_output_component"],[120,2,1,"","add_round_output_component"],[120,2,1,"","add_shift_rows_component"],[120,2,1,"","add_sigma_component"],[120,2,1,"","add_suffix_to_components"],[120,2,1,"","add_theta_keccak_component"],[120,2,1,"","add_theta_xoodoo_component"],[120,2,1,"","add_variable_rotate_component"],[120,2,1,"","add_variable_shift_component"],[120,2,1,"","add_word_permutation_component"],[120,2,1,"","algebraic_tests"],[120,2,1,"","analyze_cipher"],[120,2,1,"","as_python_dictionary"],[120,2,1,"","avalanche_probability_vectors"],[120,2,1,"","cipher_inverse"],[120,2,1,"","cipher_partial_inverse"],[120,2,1,"","component_analysis_tests"],[120,2,1,"","component_from"],[120,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[120,2,1,"","continuous_avalanche_factor"],[120,2,1,"","continuous_diffusion_factor"],[120,2,1,"","continuous_diffusion_tests"],[120,2,1,"","continuous_neutrality_measure_for_bit_j"],[120,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[120,2,1,"","convert_to_compound_xor_cipher"],[120,3,1,"","current_round"],[120,3,1,"","current_round_number"],[120,3,1,"","current_round_number_of_components"],[120,2,1,"","delete_generated_evaluate_c_shared_library"],[120,2,1,"","diffusion_tests"],[120,2,1,"","evaluate"],[120,2,1,"","evaluate_using_c"],[120,2,1,"","evaluate_vectorized"],[120,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[120,3,1,"","family_name"],[120,3,1,"","file_name"],[120,2,1,"","find_good_input_difference_for_neural_distinguisher"],[120,2,1,"","find_impossible_property"],[120,2,1,"","generate_bit_based_c_code"],[120,2,1,"","generate_csv_report"],[120,2,1,"","generate_evaluate_c_code_shared_library"],[120,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[120,2,1,"","generate_word_based_c_code"],[120,2,1,"","get_all_components"],[120,2,1,"","get_all_components_ids"],[120,2,1,"","get_all_inputs_bit_positions"],[120,2,1,"","get_component_from_id"],[120,2,1,"","get_components_in_round"],[120,2,1,"","get_current_component_id"],[120,2,1,"","get_model"],[120,2,1,"","get_number_of_components_in_round"],[120,2,1,"","get_partial_cipher"],[120,2,1,"","get_round_from_component_id"],[120,2,1,"","get_sizes_of_components_by_type"],[120,3,1,"","id"],[120,2,1,"","impossible_differential_search"],[120,3,1,"","inputs"],[120,3,1,"","inputs_bit_size"],[120,2,1,"","inputs_size_to_dict"],[120,2,1,"","is_algebraically_secure"],[120,2,1,"","is_andrx"],[120,2,1,"","is_arx"],[120,2,1,"","is_power_of_2_word_based"],[120,2,1,"","is_shift_arx"],[120,2,1,"","is_spn"],[120,2,1,"","key_schedule"],[120,2,1,"","make_cipher_id"],[120,2,1,"","make_file_name"],[120,2,1,"","neural_network_blackbox_distinguisher_tests"],[120,2,1,"","neural_network_differential_distinguisher_tests"],[120,3,1,"","number_of_rounds"],[120,3,1,"","output_bit_size"],[120,2,1,"","polynomial_system"],[120,2,1,"","polynomial_system_at_round"],[120,2,1,"","print"],[120,2,1,"","print_as_python_dictionary"],[120,2,1,"","print_as_python_dictionary_to_file"],[120,2,1,"","print_component_analysis_as_radar_charts"],[120,2,1,"","print_evaluation_python_code"],[120,2,1,"","print_evaluation_python_code_to_file"],[120,2,1,"","print_input_information"],[120,3,1,"","reference_code"],[120,2,1,"","remove_key_schedule"],[120,2,1,"","remove_round_component"],[120,2,1,"","remove_round_component_from_id"],[120,2,1,"","round_function"],[120,3,1,"","rounds"],[120,3,1,"","rounds_as_list"],[120,2,1,"","run_autond_pipeline"],[120,2,1,"","set_file_name"],[120,2,1,"","set_id"],[120,2,1,"","set_inputs"],[120,2,1,"","sort_cipher"],[120,2,1,"","test_against_reference_code"],[120,2,1,"","test_vector_check"],[120,2,1,"","train_gohr_neural_distinguisher"],[120,2,1,"","train_neural_distinguisher"],[120,3,1,"","type"],[120,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_sbox_permutation":[[121,1,1,"","GiftSboxPermutation"]],"ciphers.permutations.gift_sbox_permutation.GiftSboxPermutation":[[121,2,1,"","add_AND_component"],[121,2,1,"","add_FSR_component"],[121,2,1,"","add_MODADD_component"],[121,2,1,"","add_MODSUB_component"],[121,2,1,"","add_NOT_component"],[121,2,1,"","add_OR_component"],[121,2,1,"","add_SBOX_component"],[121,2,1,"","add_SHIFT_component"],[121,2,1,"","add_XOR_component"],[121,2,1,"","add_cipher_output_component"],[121,2,1,"","add_concatenate_component"],[121,2,1,"","add_constant_component"],[121,2,1,"","add_intermediate_output_component"],[121,2,1,"","add_linear_layer_component"],[121,2,1,"","add_mix_column_component"],[121,2,1,"","add_permutation_component"],[121,2,1,"","add_reverse_component"],[121,2,1,"","add_rotate_component"],[121,2,1,"","add_round"],[121,2,1,"","add_round_key_output_component"],[121,2,1,"","add_round_output_component"],[121,2,1,"","add_shift_rows_component"],[121,2,1,"","add_sigma_component"],[121,2,1,"","add_suffix_to_components"],[121,2,1,"","add_theta_keccak_component"],[121,2,1,"","add_theta_xoodoo_component"],[121,2,1,"","add_variable_rotate_component"],[121,2,1,"","add_variable_shift_component"],[121,2,1,"","add_word_permutation_component"],[121,2,1,"","algebraic_tests"],[121,2,1,"","analyze_cipher"],[121,2,1,"","as_python_dictionary"],[121,2,1,"","avalanche_probability_vectors"],[121,2,1,"","cipher_inverse"],[121,2,1,"","cipher_partial_inverse"],[121,2,1,"","component_analysis_tests"],[121,2,1,"","component_from"],[121,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[121,2,1,"","continuous_avalanche_factor"],[121,2,1,"","continuous_diffusion_factor"],[121,2,1,"","continuous_diffusion_tests"],[121,2,1,"","continuous_neutrality_measure_for_bit_j"],[121,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[121,2,1,"","convert_to_compound_xor_cipher"],[121,3,1,"","current_round"],[121,3,1,"","current_round_number"],[121,3,1,"","current_round_number_of_components"],[121,2,1,"","delete_generated_evaluate_c_shared_library"],[121,2,1,"","diffusion_tests"],[121,2,1,"","evaluate"],[121,2,1,"","evaluate_using_c"],[121,2,1,"","evaluate_vectorized"],[121,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[121,3,1,"","family_name"],[121,3,1,"","file_name"],[121,2,1,"","find_good_input_difference_for_neural_distinguisher"],[121,2,1,"","find_impossible_property"],[121,2,1,"","generate_bit_based_c_code"],[121,2,1,"","generate_csv_report"],[121,2,1,"","generate_evaluate_c_code_shared_library"],[121,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[121,2,1,"","generate_word_based_c_code"],[121,2,1,"","get_all_components"],[121,2,1,"","get_all_components_ids"],[121,2,1,"","get_all_inputs_bit_positions"],[121,2,1,"","get_component_from_id"],[121,2,1,"","get_components_in_round"],[121,2,1,"","get_current_component_id"],[121,2,1,"","get_model"],[121,2,1,"","get_number_of_components_in_round"],[121,2,1,"","get_partial_cipher"],[121,2,1,"","get_round_from_component_id"],[121,2,1,"","get_sizes_of_components_by_type"],[121,3,1,"","id"],[121,2,1,"","impossible_differential_search"],[121,3,1,"","inputs"],[121,3,1,"","inputs_bit_size"],[121,2,1,"","inputs_size_to_dict"],[121,2,1,"","is_algebraically_secure"],[121,2,1,"","is_andrx"],[121,2,1,"","is_arx"],[121,2,1,"","is_power_of_2_word_based"],[121,2,1,"","is_shift_arx"],[121,2,1,"","is_spn"],[121,2,1,"","key_schedule"],[121,2,1,"","make_cipher_id"],[121,2,1,"","make_file_name"],[121,2,1,"","neural_network_blackbox_distinguisher_tests"],[121,2,1,"","neural_network_differential_distinguisher_tests"],[121,3,1,"","number_of_rounds"],[121,3,1,"","output_bit_size"],[121,2,1,"","polynomial_system"],[121,2,1,"","polynomial_system_at_round"],[121,2,1,"","print"],[121,2,1,"","print_as_python_dictionary"],[121,2,1,"","print_as_python_dictionary_to_file"],[121,2,1,"","print_component_analysis_as_radar_charts"],[121,2,1,"","print_evaluation_python_code"],[121,2,1,"","print_evaluation_python_code_to_file"],[121,2,1,"","print_input_information"],[121,3,1,"","reference_code"],[121,2,1,"","remove_key_schedule"],[121,2,1,"","remove_round_component"],[121,2,1,"","remove_round_component_from_id"],[121,2,1,"","round_function"],[121,3,1,"","rounds"],[121,3,1,"","rounds_as_list"],[121,2,1,"","run_autond_pipeline"],[121,2,1,"","set_file_name"],[121,2,1,"","set_id"],[121,2,1,"","set_inputs"],[121,2,1,"","sort_cipher"],[121,2,1,"","test_against_reference_code"],[121,2,1,"","test_vector_check"],[121,2,1,"","train_gohr_neural_distinguisher"],[121,2,1,"","train_neural_distinguisher"],[121,3,1,"","type"],[121,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_permutation":[[122,1,1,"","GimliPermutation"],[122,4,1,"","big_swap"],[122,4,1,"","small_swap"]],"ciphers.permutations.gimli_permutation.GimliPermutation":[[122,2,1,"","add_AND_component"],[122,2,1,"","add_FSR_component"],[122,2,1,"","add_MODADD_component"],[122,2,1,"","add_MODSUB_component"],[122,2,1,"","add_NOT_component"],[122,2,1,"","add_OR_component"],[122,2,1,"","add_SBOX_component"],[122,2,1,"","add_SHIFT_component"],[122,2,1,"","add_XOR_component"],[122,2,1,"","add_cipher_output_component"],[122,2,1,"","add_concatenate_component"],[122,2,1,"","add_constant_component"],[122,2,1,"","add_intermediate_output_component"],[122,2,1,"","add_linear_layer_component"],[122,2,1,"","add_mix_column_component"],[122,2,1,"","add_permutation_component"],[122,2,1,"","add_reverse_component"],[122,2,1,"","add_rotate_component"],[122,2,1,"","add_round"],[122,2,1,"","add_round_key_output_component"],[122,2,1,"","add_round_output_component"],[122,2,1,"","add_shift_rows_component"],[122,2,1,"","add_sigma_component"],[122,2,1,"","add_suffix_to_components"],[122,2,1,"","add_theta_keccak_component"],[122,2,1,"","add_theta_xoodoo_component"],[122,2,1,"","add_variable_rotate_component"],[122,2,1,"","add_variable_shift_component"],[122,2,1,"","add_word_permutation_component"],[122,2,1,"","algebraic_tests"],[122,2,1,"","analyze_cipher"],[122,2,1,"","as_python_dictionary"],[122,2,1,"","avalanche_probability_vectors"],[122,2,1,"","cipher_inverse"],[122,2,1,"","cipher_partial_inverse"],[122,2,1,"","component_analysis_tests"],[122,2,1,"","component_from"],[122,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[122,2,1,"","continuous_avalanche_factor"],[122,2,1,"","continuous_diffusion_factor"],[122,2,1,"","continuous_diffusion_tests"],[122,2,1,"","continuous_neutrality_measure_for_bit_j"],[122,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[122,2,1,"","convert_to_compound_xor_cipher"],[122,3,1,"","current_round"],[122,3,1,"","current_round_number"],[122,3,1,"","current_round_number_of_components"],[122,2,1,"","delete_generated_evaluate_c_shared_library"],[122,2,1,"","diffusion_tests"],[122,2,1,"","evaluate"],[122,2,1,"","evaluate_using_c"],[122,2,1,"","evaluate_vectorized"],[122,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[122,3,1,"","family_name"],[122,3,1,"","file_name"],[122,2,1,"","find_good_input_difference_for_neural_distinguisher"],[122,2,1,"","find_impossible_property"],[122,2,1,"","generate_bit_based_c_code"],[122,2,1,"","generate_csv_report"],[122,2,1,"","generate_evaluate_c_code_shared_library"],[122,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[122,2,1,"","generate_word_based_c_code"],[122,2,1,"","get_all_components"],[122,2,1,"","get_all_components_ids"],[122,2,1,"","get_all_inputs_bit_positions"],[122,2,1,"","get_component_from_id"],[122,2,1,"","get_components_in_round"],[122,2,1,"","get_current_component_id"],[122,2,1,"","get_model"],[122,2,1,"","get_number_of_components_in_round"],[122,2,1,"","get_partial_cipher"],[122,2,1,"","get_round_from_component_id"],[122,2,1,"","get_sizes_of_components_by_type"],[122,3,1,"","id"],[122,2,1,"","impossible_differential_search"],[122,3,1,"","inputs"],[122,3,1,"","inputs_bit_size"],[122,2,1,"","inputs_size_to_dict"],[122,2,1,"","is_algebraically_secure"],[122,2,1,"","is_andrx"],[122,2,1,"","is_arx"],[122,2,1,"","is_power_of_2_word_based"],[122,2,1,"","is_shift_arx"],[122,2,1,"","is_spn"],[122,2,1,"","make_cipher_id"],[122,2,1,"","make_file_name"],[122,2,1,"","neural_network_blackbox_distinguisher_tests"],[122,2,1,"","neural_network_differential_distinguisher_tests"],[122,3,1,"","number_of_rounds"],[122,3,1,"","output_bit_size"],[122,2,1,"","polynomial_system"],[122,2,1,"","polynomial_system_at_round"],[122,2,1,"","print"],[122,2,1,"","print_as_python_dictionary"],[122,2,1,"","print_as_python_dictionary_to_file"],[122,2,1,"","print_component_analysis_as_radar_charts"],[122,2,1,"","print_evaluation_python_code"],[122,2,1,"","print_evaluation_python_code_to_file"],[122,2,1,"","print_input_information"],[122,3,1,"","reference_code"],[122,2,1,"","remove_key_schedule"],[122,2,1,"","remove_round_component"],[122,2,1,"","remove_round_component_from_id"],[122,2,1,"","round_constant"],[122,2,1,"","round_function"],[122,3,1,"","rounds"],[122,3,1,"","rounds_as_list"],[122,2,1,"","run_autond_pipeline"],[122,2,1,"","set_file_name"],[122,2,1,"","set_id"],[122,2,1,"","set_inputs"],[122,2,1,"","sort_cipher"],[122,2,1,"","sp_box"],[122,2,1,"","test_against_reference_code"],[122,2,1,"","test_vector_check"],[122,2,1,"","train_gohr_neural_distinguisher"],[122,2,1,"","train_neural_distinguisher"],[122,3,1,"","type"],[122,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_sbox_permutation":[[123,1,1,"","GimliSboxPermutation"],[123,4,1,"","big_swap"],[123,4,1,"","small_swap"]],"ciphers.permutations.gimli_sbox_permutation.GimliSboxPermutation":[[123,2,1,"","add_AND_component"],[123,2,1,"","add_FSR_component"],[123,2,1,"","add_MODADD_component"],[123,2,1,"","add_MODSUB_component"],[123,2,1,"","add_NOT_component"],[123,2,1,"","add_OR_component"],[123,2,1,"","add_SBOX_component"],[123,2,1,"","add_SHIFT_component"],[123,2,1,"","add_XOR_component"],[123,2,1,"","add_cipher_output_component"],[123,2,1,"","add_concatenate_component"],[123,2,1,"","add_constant_component"],[123,2,1,"","add_intermediate_output_component"],[123,2,1,"","add_linear_layer_component"],[123,2,1,"","add_mix_column_component"],[123,2,1,"","add_permutation_component"],[123,2,1,"","add_reverse_component"],[123,2,1,"","add_rotate_component"],[123,2,1,"","add_round"],[123,2,1,"","add_round_key_output_component"],[123,2,1,"","add_round_output_component"],[123,2,1,"","add_shift_rows_component"],[123,2,1,"","add_sigma_component"],[123,2,1,"","add_suffix_to_components"],[123,2,1,"","add_theta_keccak_component"],[123,2,1,"","add_theta_xoodoo_component"],[123,2,1,"","add_variable_rotate_component"],[123,2,1,"","add_variable_shift_component"],[123,2,1,"","add_word_permutation_component"],[123,2,1,"","algebraic_tests"],[123,2,1,"","analyze_cipher"],[123,2,1,"","as_python_dictionary"],[123,2,1,"","avalanche_probability_vectors"],[123,2,1,"","cipher_inverse"],[123,2,1,"","cipher_partial_inverse"],[123,2,1,"","component_analysis_tests"],[123,2,1,"","component_from"],[123,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[123,2,1,"","continuous_avalanche_factor"],[123,2,1,"","continuous_diffusion_factor"],[123,2,1,"","continuous_diffusion_tests"],[123,2,1,"","continuous_neutrality_measure_for_bit_j"],[123,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[123,2,1,"","convert_to_compound_xor_cipher"],[123,3,1,"","current_round"],[123,3,1,"","current_round_number"],[123,3,1,"","current_round_number_of_components"],[123,2,1,"","delete_generated_evaluate_c_shared_library"],[123,2,1,"","diffusion_tests"],[123,2,1,"","evaluate"],[123,2,1,"","evaluate_using_c"],[123,2,1,"","evaluate_vectorized"],[123,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[123,3,1,"","family_name"],[123,3,1,"","file_name"],[123,2,1,"","find_good_input_difference_for_neural_distinguisher"],[123,2,1,"","find_impossible_property"],[123,2,1,"","generate_bit_based_c_code"],[123,2,1,"","generate_csv_report"],[123,2,1,"","generate_evaluate_c_code_shared_library"],[123,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[123,2,1,"","generate_word_based_c_code"],[123,2,1,"","get_all_components"],[123,2,1,"","get_all_components_ids"],[123,2,1,"","get_all_inputs_bit_positions"],[123,2,1,"","get_component_from_id"],[123,2,1,"","get_components_in_round"],[123,2,1,"","get_current_component_id"],[123,2,1,"","get_model"],[123,2,1,"","get_number_of_components_in_round"],[123,2,1,"","get_partial_cipher"],[123,2,1,"","get_round_from_component_id"],[123,2,1,"","get_sizes_of_components_by_type"],[123,3,1,"","id"],[123,2,1,"","impossible_differential_search"],[123,3,1,"","inputs"],[123,3,1,"","inputs_bit_size"],[123,2,1,"","inputs_size_to_dict"],[123,2,1,"","is_algebraically_secure"],[123,2,1,"","is_andrx"],[123,2,1,"","is_arx"],[123,2,1,"","is_power_of_2_word_based"],[123,2,1,"","is_shift_arx"],[123,2,1,"","is_spn"],[123,2,1,"","make_cipher_id"],[123,2,1,"","make_file_name"],[123,2,1,"","neural_network_blackbox_distinguisher_tests"],[123,2,1,"","neural_network_differential_distinguisher_tests"],[123,3,1,"","number_of_rounds"],[123,3,1,"","output_bit_size"],[123,2,1,"","polynomial_system"],[123,2,1,"","polynomial_system_at_round"],[123,2,1,"","print"],[123,2,1,"","print_as_python_dictionary"],[123,2,1,"","print_as_python_dictionary_to_file"],[123,2,1,"","print_component_analysis_as_radar_charts"],[123,2,1,"","print_evaluation_python_code"],[123,2,1,"","print_evaluation_python_code_to_file"],[123,2,1,"","print_input_information"],[123,3,1,"","reference_code"],[123,2,1,"","remove_key_schedule"],[123,2,1,"","remove_round_component"],[123,2,1,"","remove_round_component_from_id"],[123,2,1,"","round_constant"],[123,2,1,"","round_function"],[123,3,1,"","rounds"],[123,3,1,"","rounds_as_list"],[123,2,1,"","run_autond_pipeline"],[123,2,1,"","set_file_name"],[123,2,1,"","set_id"],[123,2,1,"","set_inputs"],[123,2,1,"","sort_cipher"],[123,2,1,"","sp_box"],[123,2,1,"","test_against_reference_code"],[123,2,1,"","test_vector_check"],[123,2,1,"","train_gohr_neural_distinguisher"],[123,2,1,"","train_neural_distinguisher"],[123,3,1,"","type"],[123,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.grain_core_permutation":[[124,1,1,"","GrainCorePermutation"]],"ciphers.permutations.grain_core_permutation.GrainCorePermutation":[[124,2,1,"","add_AND_component"],[124,2,1,"","add_FSR_component"],[124,2,1,"","add_MODADD_component"],[124,2,1,"","add_MODSUB_component"],[124,2,1,"","add_NOT_component"],[124,2,1,"","add_OR_component"],[124,2,1,"","add_SBOX_component"],[124,2,1,"","add_SHIFT_component"],[124,2,1,"","add_XOR_component"],[124,2,1,"","add_cipher_output_component"],[124,2,1,"","add_concatenate_component"],[124,2,1,"","add_constant_component"],[124,2,1,"","add_intermediate_output_component"],[124,2,1,"","add_linear_layer_component"],[124,2,1,"","add_mix_column_component"],[124,2,1,"","add_permutation_component"],[124,2,1,"","add_reverse_component"],[124,2,1,"","add_rotate_component"],[124,2,1,"","add_round"],[124,2,1,"","add_round_key_output_component"],[124,2,1,"","add_round_output_component"],[124,2,1,"","add_shift_rows_component"],[124,2,1,"","add_sigma_component"],[124,2,1,"","add_suffix_to_components"],[124,2,1,"","add_theta_keccak_component"],[124,2,1,"","add_theta_xoodoo_component"],[124,2,1,"","add_variable_rotate_component"],[124,2,1,"","add_variable_shift_component"],[124,2,1,"","add_word_permutation_component"],[124,2,1,"","algebraic_tests"],[124,2,1,"","analyze_cipher"],[124,2,1,"","as_python_dictionary"],[124,2,1,"","avalanche_probability_vectors"],[124,2,1,"","cipher_inverse"],[124,2,1,"","cipher_partial_inverse"],[124,2,1,"","component_analysis_tests"],[124,2,1,"","component_from"],[124,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[124,2,1,"","continuous_avalanche_factor"],[124,2,1,"","continuous_diffusion_factor"],[124,2,1,"","continuous_diffusion_tests"],[124,2,1,"","continuous_neutrality_measure_for_bit_j"],[124,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[124,2,1,"","convert_to_compound_xor_cipher"],[124,3,1,"","current_round"],[124,3,1,"","current_round_number"],[124,3,1,"","current_round_number_of_components"],[124,2,1,"","delete_generated_evaluate_c_shared_library"],[124,2,1,"","diffusion_tests"],[124,2,1,"","evaluate"],[124,2,1,"","evaluate_using_c"],[124,2,1,"","evaluate_vectorized"],[124,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[124,3,1,"","family_name"],[124,3,1,"","file_name"],[124,2,1,"","find_good_input_difference_for_neural_distinguisher"],[124,2,1,"","find_impossible_property"],[124,2,1,"","generate_bit_based_c_code"],[124,2,1,"","generate_csv_report"],[124,2,1,"","generate_evaluate_c_code_shared_library"],[124,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[124,2,1,"","generate_word_based_c_code"],[124,2,1,"","get_all_components"],[124,2,1,"","get_all_components_ids"],[124,2,1,"","get_all_inputs_bit_positions"],[124,2,1,"","get_component_from_id"],[124,2,1,"","get_components_in_round"],[124,2,1,"","get_current_component_id"],[124,2,1,"","get_model"],[124,2,1,"","get_number_of_components_in_round"],[124,2,1,"","get_partial_cipher"],[124,2,1,"","get_round_from_component_id"],[124,2,1,"","get_sizes_of_components_by_type"],[124,3,1,"","id"],[124,2,1,"","impossible_differential_search"],[124,3,1,"","inputs"],[124,3,1,"","inputs_bit_size"],[124,2,1,"","inputs_size_to_dict"],[124,2,1,"","is_algebraically_secure"],[124,2,1,"","is_andrx"],[124,2,1,"","is_arx"],[124,2,1,"","is_power_of_2_word_based"],[124,2,1,"","is_shift_arx"],[124,2,1,"","is_spn"],[124,2,1,"","make_cipher_id"],[124,2,1,"","make_file_name"],[124,2,1,"","neural_network_blackbox_distinguisher_tests"],[124,2,1,"","neural_network_differential_distinguisher_tests"],[124,3,1,"","number_of_rounds"],[124,3,1,"","output_bit_size"],[124,2,1,"","polynomial_system"],[124,2,1,"","polynomial_system_at_round"],[124,2,1,"","print"],[124,2,1,"","print_as_python_dictionary"],[124,2,1,"","print_as_python_dictionary_to_file"],[124,2,1,"","print_component_analysis_as_radar_charts"],[124,2,1,"","print_evaluation_python_code"],[124,2,1,"","print_evaluation_python_code_to_file"],[124,2,1,"","print_input_information"],[124,3,1,"","reference_code"],[124,2,1,"","remove_key_schedule"],[124,2,1,"","remove_round_component"],[124,2,1,"","remove_round_component_from_id"],[124,3,1,"","rounds"],[124,3,1,"","rounds_as_list"],[124,2,1,"","run_autond_pipeline"],[124,2,1,"","set_file_name"],[124,2,1,"","set_id"],[124,2,1,"","set_inputs"],[124,2,1,"","sort_cipher"],[124,2,1,"","test_against_reference_code"],[124,2,1,"","test_vector_check"],[124,2,1,"","train_gohr_neural_distinguisher"],[124,2,1,"","train_neural_distinguisher"],[124,3,1,"","type"],[124,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_invertible_permutation":[[125,1,1,"","KeccakInvertiblePermutation"]],"ciphers.permutations.keccak_invertible_permutation.KeccakInvertiblePermutation":[[125,2,1,"","add_AND_component"],[125,2,1,"","add_FSR_component"],[125,2,1,"","add_MODADD_component"],[125,2,1,"","add_MODSUB_component"],[125,2,1,"","add_NOT_component"],[125,2,1,"","add_OR_component"],[125,2,1,"","add_SBOX_component"],[125,2,1,"","add_SHIFT_component"],[125,2,1,"","add_XOR_component"],[125,2,1,"","add_cipher_output_component"],[125,2,1,"","add_concatenate_component"],[125,2,1,"","add_constant_component"],[125,2,1,"","add_intermediate_output_component"],[125,2,1,"","add_linear_layer_component"],[125,2,1,"","add_mix_column_component"],[125,2,1,"","add_output_component"],[125,2,1,"","add_permutation_component"],[125,2,1,"","add_reverse_component"],[125,2,1,"","add_rotate_component"],[125,2,1,"","add_round"],[125,2,1,"","add_round_key_output_component"],[125,2,1,"","add_round_output_component"],[125,2,1,"","add_shift_rows_component"],[125,2,1,"","add_sigma_component"],[125,2,1,"","add_suffix_to_components"],[125,2,1,"","add_theta_keccak_component"],[125,2,1,"","add_theta_xoodoo_component"],[125,2,1,"","add_variable_rotate_component"],[125,2,1,"","add_variable_shift_component"],[125,2,1,"","add_word_permutation_component"],[125,2,1,"","algebraic_tests"],[125,2,1,"","analyze_cipher"],[125,2,1,"","as_python_dictionary"],[125,2,1,"","avalanche_probability_vectors"],[125,2,1,"","chi_definition"],[125,2,1,"","cipher_inverse"],[125,2,1,"","cipher_partial_inverse"],[125,2,1,"","component_analysis_tests"],[125,2,1,"","component_from"],[125,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[125,2,1,"","continuous_avalanche_factor"],[125,2,1,"","continuous_diffusion_factor"],[125,2,1,"","continuous_diffusion_tests"],[125,2,1,"","continuous_neutrality_measure_for_bit_j"],[125,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[125,2,1,"","convert_to_compound_xor_cipher"],[125,3,1,"","current_round"],[125,3,1,"","current_round_number"],[125,3,1,"","current_round_number_of_components"],[125,2,1,"","delete_generated_evaluate_c_shared_library"],[125,2,1,"","diffusion_tests"],[125,2,1,"","evaluate"],[125,2,1,"","evaluate_using_c"],[125,2,1,"","evaluate_vectorized"],[125,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[125,3,1,"","family_name"],[125,3,1,"","file_name"],[125,2,1,"","find_good_input_difference_for_neural_distinguisher"],[125,2,1,"","find_impossible_property"],[125,2,1,"","generate_bit_based_c_code"],[125,2,1,"","generate_csv_report"],[125,2,1,"","generate_evaluate_c_code_shared_library"],[125,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[125,2,1,"","generate_word_based_c_code"],[125,2,1,"","get_all_components"],[125,2,1,"","get_all_components_ids"],[125,2,1,"","get_all_inputs_bit_positions"],[125,2,1,"","get_ci"],[125,2,1,"","get_component_from_id"],[125,2,1,"","get_components_in_round"],[125,2,1,"","get_current_component_id"],[125,2,1,"","get_model"],[125,2,1,"","get_number_of_components_in_round"],[125,2,1,"","get_partial_cipher"],[125,2,1,"","get_round_from_component_id"],[125,2,1,"","get_sizes_of_components_by_type"],[125,3,1,"","id"],[125,2,1,"","impossible_differential_search"],[125,3,1,"","inputs"],[125,3,1,"","inputs_bit_size"],[125,2,1,"","inputs_size_to_dict"],[125,2,1,"","iota_definition"],[125,2,1,"","is_algebraically_secure"],[125,2,1,"","is_andrx"],[125,2,1,"","is_arx"],[125,2,1,"","is_power_of_2_word_based"],[125,2,1,"","is_shift_arx"],[125,2,1,"","is_spn"],[125,2,1,"","make_cipher_id"],[125,2,1,"","make_file_name"],[125,2,1,"","neural_network_blackbox_distinguisher_tests"],[125,2,1,"","neural_network_differential_distinguisher_tests"],[125,3,1,"","number_of_rounds"],[125,3,1,"","output_bit_size"],[125,2,1,"","polynomial_system"],[125,2,1,"","polynomial_system_at_round"],[125,2,1,"","print"],[125,2,1,"","print_as_python_dictionary"],[125,2,1,"","print_as_python_dictionary_to_file"],[125,2,1,"","print_component_analysis_as_radar_charts"],[125,2,1,"","print_evaluation_python_code"],[125,2,1,"","print_evaluation_python_code_to_file"],[125,2,1,"","print_input_information"],[125,3,1,"","reference_code"],[125,2,1,"","remove_key_schedule"],[125,2,1,"","remove_round_component"],[125,2,1,"","remove_round_component_from_id"],[125,2,1,"","rho_and_pi_definition"],[125,2,1,"","round_function"],[125,3,1,"","rounds"],[125,3,1,"","rounds_as_list"],[125,2,1,"","run_autond_pipeline"],[125,2,1,"","set_file_name"],[125,2,1,"","set_id"],[125,2,1,"","set_inputs"],[125,2,1,"","sort_cipher"],[125,2,1,"","state_initialization"],[125,2,1,"","test_against_reference_code"],[125,2,1,"","test_vector_check"],[125,2,1,"","theta_definition"],[125,2,1,"","train_gohr_neural_distinguisher"],[125,2,1,"","train_neural_distinguisher"],[125,3,1,"","type"],[125,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_permutation":[[126,1,1,"","KeccakPermutation"]],"ciphers.permutations.keccak_permutation.KeccakPermutation":[[126,2,1,"","add_AND_component"],[126,2,1,"","add_FSR_component"],[126,2,1,"","add_MODADD_component"],[126,2,1,"","add_MODSUB_component"],[126,2,1,"","add_NOT_component"],[126,2,1,"","add_OR_component"],[126,2,1,"","add_SBOX_component"],[126,2,1,"","add_SHIFT_component"],[126,2,1,"","add_XOR_component"],[126,2,1,"","add_cipher_output_component"],[126,2,1,"","add_concatenate_component"],[126,2,1,"","add_constant_component"],[126,2,1,"","add_intermediate_output_component"],[126,2,1,"","add_linear_layer_component"],[126,2,1,"","add_mix_column_component"],[126,2,1,"","add_output_component"],[126,2,1,"","add_permutation_component"],[126,2,1,"","add_reverse_component"],[126,2,1,"","add_rotate_component"],[126,2,1,"","add_round"],[126,2,1,"","add_round_key_output_component"],[126,2,1,"","add_round_output_component"],[126,2,1,"","add_round_output_linear"],[126,2,1,"","add_round_output_nonlinear"],[126,2,1,"","add_shift_rows_component"],[126,2,1,"","add_sigma_component"],[126,2,1,"","add_suffix_to_components"],[126,2,1,"","add_theta_keccak_component"],[126,2,1,"","add_theta_xoodoo_component"],[126,2,1,"","add_variable_rotate_component"],[126,2,1,"","add_variable_shift_component"],[126,2,1,"","add_word_permutation_component"],[126,2,1,"","algebraic_tests"],[126,2,1,"","analyze_cipher"],[126,2,1,"","as_python_dictionary"],[126,2,1,"","avalanche_probability_vectors"],[126,2,1,"","chi_definition"],[126,2,1,"","cipher_inverse"],[126,2,1,"","cipher_partial_inverse"],[126,2,1,"","component_analysis_tests"],[126,2,1,"","component_from"],[126,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[126,2,1,"","continuous_avalanche_factor"],[126,2,1,"","continuous_diffusion_factor"],[126,2,1,"","continuous_diffusion_tests"],[126,2,1,"","continuous_neutrality_measure_for_bit_j"],[126,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[126,2,1,"","convert_to_compound_xor_cipher"],[126,3,1,"","current_round"],[126,3,1,"","current_round_number"],[126,3,1,"","current_round_number_of_components"],[126,2,1,"","delete_generated_evaluate_c_shared_library"],[126,2,1,"","diffusion_tests"],[126,2,1,"","evaluate"],[126,2,1,"","evaluate_using_c"],[126,2,1,"","evaluate_vectorized"],[126,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[126,3,1,"","family_name"],[126,3,1,"","file_name"],[126,2,1,"","find_good_input_difference_for_neural_distinguisher"],[126,2,1,"","find_impossible_property"],[126,2,1,"","generate_bit_based_c_code"],[126,2,1,"","generate_csv_report"],[126,2,1,"","generate_evaluate_c_code_shared_library"],[126,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[126,2,1,"","generate_word_based_c_code"],[126,2,1,"","get_all_components"],[126,2,1,"","get_all_components_ids"],[126,2,1,"","get_all_inputs_bit_positions"],[126,2,1,"","get_ci"],[126,2,1,"","get_component_from_id"],[126,2,1,"","get_components_in_round"],[126,2,1,"","get_current_component_id"],[126,2,1,"","get_model"],[126,2,1,"","get_number_of_components_in_round"],[126,2,1,"","get_partial_cipher"],[126,2,1,"","get_round_from_component_id"],[126,2,1,"","get_sizes_of_components_by_type"],[126,3,1,"","id"],[126,2,1,"","impossible_differential_search"],[126,3,1,"","inputs"],[126,3,1,"","inputs_bit_size"],[126,2,1,"","inputs_size_to_dict"],[126,2,1,"","iota_definition"],[126,2,1,"","is_algebraically_secure"],[126,2,1,"","is_andrx"],[126,2,1,"","is_arx"],[126,2,1,"","is_power_of_2_word_based"],[126,2,1,"","is_shift_arx"],[126,2,1,"","is_spn"],[126,2,1,"","make_cipher_id"],[126,2,1,"","make_file_name"],[126,2,1,"","neural_network_blackbox_distinguisher_tests"],[126,2,1,"","neural_network_differential_distinguisher_tests"],[126,3,1,"","number_of_rounds"],[126,3,1,"","output_bit_size"],[126,2,1,"","polynomial_system"],[126,2,1,"","polynomial_system_at_round"],[126,2,1,"","print"],[126,2,1,"","print_as_python_dictionary"],[126,2,1,"","print_as_python_dictionary_to_file"],[126,2,1,"","print_component_analysis_as_radar_charts"],[126,2,1,"","print_evaluation_python_code"],[126,2,1,"","print_evaluation_python_code_to_file"],[126,2,1,"","print_input_information"],[126,3,1,"","reference_code"],[126,2,1,"","remove_key_schedule"],[126,2,1,"","remove_round_component"],[126,2,1,"","remove_round_component_from_id"],[126,2,1,"","rho_and_pi_definition"],[126,2,1,"","round_function"],[126,3,1,"","rounds"],[126,3,1,"","rounds_as_list"],[126,2,1,"","run_autond_pipeline"],[126,2,1,"","set_file_name"],[126,2,1,"","set_id"],[126,2,1,"","set_inputs"],[126,2,1,"","sort_cipher"],[126,2,1,"","state_initialization"],[126,2,1,"","test_against_reference_code"],[126,2,1,"","test_vector_check"],[126,2,1,"","theta_definition"],[126,2,1,"","train_gohr_neural_distinguisher"],[126,2,1,"","train_neural_distinguisher"],[126,3,1,"","type"],[126,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_sbox_permutation":[[127,1,1,"","KeccakSboxPermutation"]],"ciphers.permutations.keccak_sbox_permutation.KeccakSboxPermutation":[[127,2,1,"","add_AND_component"],[127,2,1,"","add_FSR_component"],[127,2,1,"","add_MODADD_component"],[127,2,1,"","add_MODSUB_component"],[127,2,1,"","add_NOT_component"],[127,2,1,"","add_OR_component"],[127,2,1,"","add_SBOX_component"],[127,2,1,"","add_SHIFT_component"],[127,2,1,"","add_XOR_component"],[127,2,1,"","add_cipher_output_component"],[127,2,1,"","add_concatenate_component"],[127,2,1,"","add_constant_component"],[127,2,1,"","add_intermediate_output_component"],[127,2,1,"","add_linear_layer_component"],[127,2,1,"","add_mix_column_component"],[127,2,1,"","add_output_component"],[127,2,1,"","add_permutation_component"],[127,2,1,"","add_reverse_component"],[127,2,1,"","add_rotate_component"],[127,2,1,"","add_round"],[127,2,1,"","add_round_key_output_component"],[127,2,1,"","add_round_output_component"],[127,2,1,"","add_shift_rows_component"],[127,2,1,"","add_sigma_component"],[127,2,1,"","add_suffix_to_components"],[127,2,1,"","add_theta_keccak_component"],[127,2,1,"","add_theta_xoodoo_component"],[127,2,1,"","add_variable_rotate_component"],[127,2,1,"","add_variable_shift_component"],[127,2,1,"","add_word_permutation_component"],[127,2,1,"","algebraic_tests"],[127,2,1,"","analyze_cipher"],[127,2,1,"","as_python_dictionary"],[127,2,1,"","avalanche_probability_vectors"],[127,2,1,"","chi_definition"],[127,2,1,"","cipher_inverse"],[127,2,1,"","cipher_partial_inverse"],[127,2,1,"","component_analysis_tests"],[127,2,1,"","component_from"],[127,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[127,2,1,"","continuous_avalanche_factor"],[127,2,1,"","continuous_diffusion_factor"],[127,2,1,"","continuous_diffusion_tests"],[127,2,1,"","continuous_neutrality_measure_for_bit_j"],[127,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[127,2,1,"","convert_to_compound_xor_cipher"],[127,3,1,"","current_round"],[127,3,1,"","current_round_number"],[127,3,1,"","current_round_number_of_components"],[127,2,1,"","delete_generated_evaluate_c_shared_library"],[127,2,1,"","diffusion_tests"],[127,2,1,"","evaluate"],[127,2,1,"","evaluate_using_c"],[127,2,1,"","evaluate_vectorized"],[127,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[127,3,1,"","family_name"],[127,3,1,"","file_name"],[127,2,1,"","find_good_input_difference_for_neural_distinguisher"],[127,2,1,"","find_impossible_property"],[127,2,1,"","generate_bit_based_c_code"],[127,2,1,"","generate_csv_report"],[127,2,1,"","generate_evaluate_c_code_shared_library"],[127,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[127,2,1,"","generate_word_based_c_code"],[127,2,1,"","get_all_components"],[127,2,1,"","get_all_components_ids"],[127,2,1,"","get_all_inputs_bit_positions"],[127,2,1,"","get_ci"],[127,2,1,"","get_component_from_id"],[127,2,1,"","get_components_in_round"],[127,2,1,"","get_current_component_id"],[127,2,1,"","get_model"],[127,2,1,"","get_number_of_components_in_round"],[127,2,1,"","get_partial_cipher"],[127,2,1,"","get_round_from_component_id"],[127,2,1,"","get_sizes_of_components_by_type"],[127,3,1,"","id"],[127,2,1,"","impossible_differential_search"],[127,3,1,"","inputs"],[127,3,1,"","inputs_bit_size"],[127,2,1,"","inputs_size_to_dict"],[127,2,1,"","iota_definition"],[127,2,1,"","is_algebraically_secure"],[127,2,1,"","is_andrx"],[127,2,1,"","is_arx"],[127,2,1,"","is_power_of_2_word_based"],[127,2,1,"","is_shift_arx"],[127,2,1,"","is_spn"],[127,2,1,"","make_cipher_id"],[127,2,1,"","make_file_name"],[127,2,1,"","neural_network_blackbox_distinguisher_tests"],[127,2,1,"","neural_network_differential_distinguisher_tests"],[127,3,1,"","number_of_rounds"],[127,3,1,"","output_bit_size"],[127,2,1,"","polynomial_system"],[127,2,1,"","polynomial_system_at_round"],[127,2,1,"","print"],[127,2,1,"","print_as_python_dictionary"],[127,2,1,"","print_as_python_dictionary_to_file"],[127,2,1,"","print_component_analysis_as_radar_charts"],[127,2,1,"","print_evaluation_python_code"],[127,2,1,"","print_evaluation_python_code_to_file"],[127,2,1,"","print_input_information"],[127,3,1,"","reference_code"],[127,2,1,"","remove_key_schedule"],[127,2,1,"","remove_round_component"],[127,2,1,"","remove_round_component_from_id"],[127,2,1,"","rho_and_pi_definition"],[127,2,1,"","round_function"],[127,3,1,"","rounds"],[127,3,1,"","rounds_as_list"],[127,2,1,"","run_autond_pipeline"],[127,2,1,"","set_file_name"],[127,2,1,"","set_id"],[127,2,1,"","set_inputs"],[127,2,1,"","sort_cipher"],[127,2,1,"","state_initialization"],[127,2,1,"","test_against_reference_code"],[127,2,1,"","test_vector_check"],[127,2,1,"","theta_definition"],[127,2,1,"","train_gohr_neural_distinguisher"],[127,2,1,"","train_neural_distinguisher"],[127,3,1,"","type"],[127,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.photon_permutation":[[128,1,1,"","PhotonPermutation"]],"ciphers.permutations.photon_permutation.PhotonPermutation":[[128,2,1,"","add_AND_component"],[128,2,1,"","add_FSR_component"],[128,2,1,"","add_MODADD_component"],[128,2,1,"","add_MODSUB_component"],[128,2,1,"","add_NOT_component"],[128,2,1,"","add_OR_component"],[128,2,1,"","add_SBOX_component"],[128,2,1,"","add_SHIFT_component"],[128,2,1,"","add_XOR_component"],[128,2,1,"","add_cipher_output_component"],[128,2,1,"","add_concatenate_component"],[128,2,1,"","add_constant_component"],[128,2,1,"","add_intermediate_output_component"],[128,2,1,"","add_linear_layer_component"],[128,2,1,"","add_mix_column_component"],[128,2,1,"","add_permutation_component"],[128,2,1,"","add_reverse_component"],[128,2,1,"","add_rotate_component"],[128,2,1,"","add_round"],[128,2,1,"","add_round_key_output_component"],[128,2,1,"","add_round_output_component"],[128,2,1,"","add_shift_rows_component"],[128,2,1,"","add_sigma_component"],[128,2,1,"","add_suffix_to_components"],[128,2,1,"","add_theta_keccak_component"],[128,2,1,"","add_theta_xoodoo_component"],[128,2,1,"","add_variable_rotate_component"],[128,2,1,"","add_variable_shift_component"],[128,2,1,"","add_word_permutation_component"],[128,2,1,"","algebraic_tests"],[128,2,1,"","analyze_cipher"],[128,2,1,"","as_python_dictionary"],[128,2,1,"","avalanche_probability_vectors"],[128,2,1,"","cipher_inverse"],[128,2,1,"","cipher_partial_inverse"],[128,2,1,"","component_analysis_tests"],[128,2,1,"","component_from"],[128,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[128,2,1,"","continuous_avalanche_factor"],[128,2,1,"","continuous_diffusion_factor"],[128,2,1,"","continuous_diffusion_tests"],[128,2,1,"","continuous_neutrality_measure_for_bit_j"],[128,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[128,2,1,"","convert_to_compound_xor_cipher"],[128,3,1,"","current_round"],[128,3,1,"","current_round_number"],[128,3,1,"","current_round_number_of_components"],[128,2,1,"","delete_generated_evaluate_c_shared_library"],[128,2,1,"","diffusion_tests"],[128,2,1,"","evaluate"],[128,2,1,"","evaluate_using_c"],[128,2,1,"","evaluate_vectorized"],[128,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[128,3,1,"","family_name"],[128,3,1,"","file_name"],[128,2,1,"","find_good_input_difference_for_neural_distinguisher"],[128,2,1,"","find_impossible_property"],[128,2,1,"","generate_bit_based_c_code"],[128,2,1,"","generate_csv_report"],[128,2,1,"","generate_evaluate_c_code_shared_library"],[128,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[128,2,1,"","generate_word_based_c_code"],[128,2,1,"","get_all_components"],[128,2,1,"","get_all_components_ids"],[128,2,1,"","get_all_inputs_bit_positions"],[128,2,1,"","get_component_from_id"],[128,2,1,"","get_components_in_round"],[128,2,1,"","get_current_component_id"],[128,2,1,"","get_model"],[128,2,1,"","get_number_of_components_in_round"],[128,2,1,"","get_partial_cipher"],[128,2,1,"","get_round_from_component_id"],[128,2,1,"","get_sizes_of_components_by_type"],[128,3,1,"","id"],[128,2,1,"","impossible_differential_search"],[128,3,1,"","inputs"],[128,3,1,"","inputs_bit_size"],[128,2,1,"","inputs_size_to_dict"],[128,2,1,"","is_algebraically_secure"],[128,2,1,"","is_andrx"],[128,2,1,"","is_arx"],[128,2,1,"","is_power_of_2_word_based"],[128,2,1,"","is_shift_arx"],[128,2,1,"","is_spn"],[128,2,1,"","make_cipher_id"],[128,2,1,"","make_file_name"],[128,2,1,"","neural_network_blackbox_distinguisher_tests"],[128,2,1,"","neural_network_differential_distinguisher_tests"],[128,3,1,"","number_of_rounds"],[128,3,1,"","output_bit_size"],[128,2,1,"","polynomial_system"],[128,2,1,"","polynomial_system_at_round"],[128,2,1,"","print"],[128,2,1,"","print_as_python_dictionary"],[128,2,1,"","print_as_python_dictionary_to_file"],[128,2,1,"","print_component_analysis_as_radar_charts"],[128,2,1,"","print_evaluation_python_code"],[128,2,1,"","print_evaluation_python_code_to_file"],[128,2,1,"","print_input_information"],[128,3,1,"","reference_code"],[128,2,1,"","remove_key_schedule"],[128,2,1,"","remove_round_component"],[128,2,1,"","remove_round_component_from_id"],[128,2,1,"","round_function"],[128,3,1,"","rounds"],[128,3,1,"","rounds_as_list"],[128,2,1,"","run_autond_pipeline"],[128,2,1,"","set_file_name"],[128,2,1,"","set_id"],[128,2,1,"","set_inputs"],[128,2,1,"","sort_cipher"],[128,2,1,"","test_against_reference_code"],[128,2,1,"","test_vector_check"],[128,2,1,"","train_gohr_neural_distinguisher"],[128,2,1,"","train_neural_distinguisher"],[128,3,1,"","type"],[128,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.salsa_permutation":[[129,1,1,"","SalsaPermutation"]],"ciphers.permutations.salsa_permutation.SalsaPermutation":[[129,2,1,"","add_AND_component"],[129,2,1,"","add_FSR_component"],[129,2,1,"","add_MODADD_component"],[129,2,1,"","add_MODSUB_component"],[129,2,1,"","add_NOT_component"],[129,2,1,"","add_OR_component"],[129,2,1,"","add_SBOX_component"],[129,2,1,"","add_SHIFT_component"],[129,2,1,"","add_XOR_component"],[129,2,1,"","add_cipher_output_component"],[129,2,1,"","add_concatenate_component"],[129,2,1,"","add_constant_component"],[129,2,1,"","add_intermediate_output_component"],[129,2,1,"","add_linear_layer_component"],[129,2,1,"","add_mix_column_component"],[129,2,1,"","add_permutation_component"],[129,2,1,"","add_reverse_component"],[129,2,1,"","add_rotate_component"],[129,2,1,"","add_round"],[129,2,1,"","add_round_key_output_component"],[129,2,1,"","add_round_output_component"],[129,2,1,"","add_shift_rows_component"],[129,2,1,"","add_sigma_component"],[129,2,1,"","add_suffix_to_components"],[129,2,1,"","add_theta_keccak_component"],[129,2,1,"","add_theta_xoodoo_component"],[129,2,1,"","add_variable_rotate_component"],[129,2,1,"","add_variable_shift_component"],[129,2,1,"","add_word_permutation_component"],[129,2,1,"","algebraic_tests"],[129,2,1,"","analyze_cipher"],[129,2,1,"","as_python_dictionary"],[129,2,1,"","avalanche_probability_vectors"],[129,2,1,"","bottom_half_quarter_round"],[129,2,1,"","cipher_inverse"],[129,2,1,"","cipher_partial_inverse"],[129,2,1,"","component_analysis_tests"],[129,2,1,"","component_from"],[129,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[129,2,1,"","continuous_avalanche_factor"],[129,2,1,"","continuous_diffusion_factor"],[129,2,1,"","continuous_diffusion_tests"],[129,2,1,"","continuous_neutrality_measure_for_bit_j"],[129,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[129,2,1,"","convert_to_compound_xor_cipher"],[129,3,1,"","current_round"],[129,3,1,"","current_round_number"],[129,3,1,"","current_round_number_of_components"],[129,2,1,"","delete_generated_evaluate_c_shared_library"],[129,2,1,"","diffusion_tests"],[129,2,1,"","evaluate"],[129,2,1,"","evaluate_using_c"],[129,2,1,"","evaluate_vectorized"],[129,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[129,3,1,"","family_name"],[129,3,1,"","file_name"],[129,2,1,"","find_good_input_difference_for_neural_distinguisher"],[129,2,1,"","find_impossible_property"],[129,2,1,"","generate_bit_based_c_code"],[129,2,1,"","generate_csv_report"],[129,2,1,"","generate_evaluate_c_code_shared_library"],[129,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[129,2,1,"","generate_word_based_c_code"],[129,2,1,"","get_all_components"],[129,2,1,"","get_all_components_ids"],[129,2,1,"","get_all_inputs_bit_positions"],[129,2,1,"","get_component_from_id"],[129,2,1,"","get_components_in_round"],[129,2,1,"","get_current_component_id"],[129,2,1,"","get_model"],[129,2,1,"","get_number_of_components_in_round"],[129,2,1,"","get_partial_cipher"],[129,2,1,"","get_round_from_component_id"],[129,2,1,"","get_sizes_of_components_by_type"],[129,3,1,"","id"],[129,2,1,"","impossible_differential_search"],[129,3,1,"","inputs"],[129,3,1,"","inputs_bit_size"],[129,2,1,"","inputs_size_to_dict"],[129,2,1,"","is_algebraically_secure"],[129,2,1,"","is_andrx"],[129,2,1,"","is_arx"],[129,2,1,"","is_power_of_2_word_based"],[129,2,1,"","is_shift_arx"],[129,2,1,"","is_spn"],[129,2,1,"","make_cipher_id"],[129,2,1,"","make_file_name"],[129,2,1,"","neural_network_blackbox_distinguisher_tests"],[129,2,1,"","neural_network_differential_distinguisher_tests"],[129,3,1,"","number_of_rounds"],[129,3,1,"","output_bit_size"],[129,2,1,"","polynomial_system"],[129,2,1,"","polynomial_system_at_round"],[129,2,1,"","print"],[129,2,1,"","print_as_python_dictionary"],[129,2,1,"","print_as_python_dictionary_to_file"],[129,2,1,"","print_component_analysis_as_radar_charts"],[129,2,1,"","print_evaluation_python_code"],[129,2,1,"","print_evaluation_python_code_to_file"],[129,2,1,"","print_input_information"],[129,3,1,"","reference_code"],[129,2,1,"","remove_key_schedule"],[129,2,1,"","remove_round_component"],[129,2,1,"","remove_round_component_from_id"],[129,3,1,"","rounds"],[129,3,1,"","rounds_as_list"],[129,2,1,"","run_autond_pipeline"],[129,2,1,"","set_file_name"],[129,2,1,"","set_id"],[129,2,1,"","set_inputs"],[129,2,1,"","sort_cipher"],[129,2,1,"","test_against_reference_code"],[129,2,1,"","test_vector_check"],[129,2,1,"","top_half_quarter_round"],[129,2,1,"","train_gohr_neural_distinguisher"],[129,2,1,"","train_neural_distinguisher"],[129,3,1,"","type"],[129,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.sparkle_permutation":[[130,1,1,"","SparklePermutation"]],"ciphers.permutations.sparkle_permutation.SparklePermutation":[[130,2,1,"","add_AND_component"],[130,2,1,"","add_FSR_component"],[130,2,1,"","add_MODADD_component"],[130,2,1,"","add_MODSUB_component"],[130,2,1,"","add_NOT_component"],[130,2,1,"","add_OR_component"],[130,2,1,"","add_SBOX_component"],[130,2,1,"","add_SHIFT_component"],[130,2,1,"","add_XOR_component"],[130,2,1,"","add_cipher_output_component"],[130,2,1,"","add_concatenate_component"],[130,2,1,"","add_constant_component"],[130,2,1,"","add_intermediate_output_component"],[130,2,1,"","add_linear_layer_component"],[130,2,1,"","add_mix_column_component"],[130,2,1,"","add_permutation_component"],[130,2,1,"","add_reverse_component"],[130,2,1,"","add_rotate_component"],[130,2,1,"","add_round"],[130,2,1,"","add_round_key_output_component"],[130,2,1,"","add_round_output_component"],[130,2,1,"","add_shift_rows_component"],[130,2,1,"","add_sigma_component"],[130,2,1,"","add_suffix_to_components"],[130,2,1,"","add_theta_keccak_component"],[130,2,1,"","add_theta_xoodoo_component"],[130,2,1,"","add_variable_rotate_component"],[130,2,1,"","add_variable_shift_component"],[130,2,1,"","add_word_permutation_component"],[130,2,1,"","algebraic_tests"],[130,2,1,"","alzette"],[130,2,1,"","alzette_round"],[130,2,1,"","analyze_cipher"],[130,2,1,"","as_python_dictionary"],[130,2,1,"","avalanche_probability_vectors"],[130,2,1,"","cipher_inverse"],[130,2,1,"","cipher_partial_inverse"],[130,2,1,"","component_analysis_tests"],[130,2,1,"","component_from"],[130,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[130,2,1,"","continuous_avalanche_factor"],[130,2,1,"","continuous_diffusion_factor"],[130,2,1,"","continuous_diffusion_tests"],[130,2,1,"","continuous_neutrality_measure_for_bit_j"],[130,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[130,2,1,"","convert_to_compound_xor_cipher"],[130,3,1,"","current_round"],[130,3,1,"","current_round_number"],[130,3,1,"","current_round_number_of_components"],[130,2,1,"","delete_generated_evaluate_c_shared_library"],[130,2,1,"","diffusion_tests"],[130,2,1,"","ell_function"],[130,2,1,"","evaluate"],[130,2,1,"","evaluate_using_c"],[130,2,1,"","evaluate_vectorized"],[130,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[130,3,1,"","family_name"],[130,3,1,"","file_name"],[130,2,1,"","find_good_input_difference_for_neural_distinguisher"],[130,2,1,"","find_impossible_property"],[130,2,1,"","generate_bit_based_c_code"],[130,2,1,"","generate_csv_report"],[130,2,1,"","generate_evaluate_c_code_shared_library"],[130,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[130,2,1,"","generate_word_based_c_code"],[130,2,1,"","get_all_components"],[130,2,1,"","get_all_components_ids"],[130,2,1,"","get_all_inputs_bit_positions"],[130,2,1,"","get_component_from_id"],[130,2,1,"","get_components_in_round"],[130,2,1,"","get_current_component_id"],[130,2,1,"","get_model"],[130,2,1,"","get_number_of_components_in_round"],[130,2,1,"","get_partial_cipher"],[130,2,1,"","get_round_from_component_id"],[130,2,1,"","get_sizes_of_components_by_type"],[130,3,1,"","id"],[130,2,1,"","impossible_differential_search"],[130,3,1,"","inputs"],[130,3,1,"","inputs_bit_size"],[130,2,1,"","inputs_size_to_dict"],[130,2,1,"","is_algebraically_secure"],[130,2,1,"","is_andrx"],[130,2,1,"","is_arx"],[130,2,1,"","is_power_of_2_word_based"],[130,2,1,"","is_shift_arx"],[130,2,1,"","is_spn"],[130,2,1,"","linear_layer"],[130,2,1,"","make_cipher_id"],[130,2,1,"","make_file_name"],[130,2,1,"","neural_network_blackbox_distinguisher_tests"],[130,2,1,"","neural_network_differential_distinguisher_tests"],[130,3,1,"","number_of_rounds"],[130,3,1,"","output_bit_size"],[130,2,1,"","polynomial_system"],[130,2,1,"","polynomial_system_at_round"],[130,2,1,"","print"],[130,2,1,"","print_as_python_dictionary"],[130,2,1,"","print_as_python_dictionary_to_file"],[130,2,1,"","print_component_analysis_as_radar_charts"],[130,2,1,"","print_evaluation_python_code"],[130,2,1,"","print_evaluation_python_code_to_file"],[130,2,1,"","print_input_information"],[130,3,1,"","reference_code"],[130,2,1,"","remove_key_schedule"],[130,2,1,"","remove_round_component"],[130,2,1,"","remove_round_component_from_id"],[130,2,1,"","round_function"],[130,3,1,"","rounds"],[130,3,1,"","rounds_as_list"],[130,2,1,"","run_autond_pipeline"],[130,2,1,"","set_file_name"],[130,2,1,"","set_id"],[130,2,1,"","set_inputs"],[130,2,1,"","sort_cipher"],[130,2,1,"","test_against_reference_code"],[130,2,1,"","test_vector_check"],[130,2,1,"","train_gohr_neural_distinguisher"],[130,2,1,"","train_neural_distinguisher"],[130,3,1,"","type"],[130,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_fsr_permutation":[[131,1,1,"","SpongentPiFSRPermutation"]],"ciphers.permutations.spongent_pi_fsr_permutation.SpongentPiFSRPermutation":[[131,2,1,"","add_AND_component"],[131,2,1,"","add_FSR_component"],[131,2,1,"","add_MODADD_component"],[131,2,1,"","add_MODSUB_component"],[131,2,1,"","add_NOT_component"],[131,2,1,"","add_OR_component"],[131,2,1,"","add_SBOX_component"],[131,2,1,"","add_SHIFT_component"],[131,2,1,"","add_XOR_component"],[131,2,1,"","add_cipher_output_component"],[131,2,1,"","add_concatenate_component"],[131,2,1,"","add_constant_component"],[131,2,1,"","add_intermediate_output_component"],[131,2,1,"","add_linear_layer_component"],[131,2,1,"","add_mix_column_component"],[131,2,1,"","add_permutation_component"],[131,2,1,"","add_reverse_component"],[131,2,1,"","add_rotate_component"],[131,2,1,"","add_round"],[131,2,1,"","add_round_key_output_component"],[131,2,1,"","add_round_output_component"],[131,2,1,"","add_shift_rows_component"],[131,2,1,"","add_sigma_component"],[131,2,1,"","add_suffix_to_components"],[131,2,1,"","add_theta_keccak_component"],[131,2,1,"","add_theta_xoodoo_component"],[131,2,1,"","add_variable_rotate_component"],[131,2,1,"","add_variable_shift_component"],[131,2,1,"","add_word_permutation_component"],[131,2,1,"","algebraic_tests"],[131,2,1,"","analyze_cipher"],[131,2,1,"","as_python_dictionary"],[131,2,1,"","avalanche_probability_vectors"],[131,2,1,"","cipher_inverse"],[131,2,1,"","cipher_partial_inverse"],[131,2,1,"","component_analysis_tests"],[131,2,1,"","component_from"],[131,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[131,2,1,"","continuous_avalanche_factor"],[131,2,1,"","continuous_diffusion_factor"],[131,2,1,"","continuous_diffusion_tests"],[131,2,1,"","continuous_neutrality_measure_for_bit_j"],[131,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[131,2,1,"","convert_to_compound_xor_cipher"],[131,3,1,"","current_round"],[131,3,1,"","current_round_number"],[131,3,1,"","current_round_number_of_components"],[131,2,1,"","delete_generated_evaluate_c_shared_library"],[131,2,1,"","diffusion_tests"],[131,2,1,"","evaluate"],[131,2,1,"","evaluate_using_c"],[131,2,1,"","evaluate_vectorized"],[131,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[131,3,1,"","family_name"],[131,3,1,"","file_name"],[131,2,1,"","find_good_input_difference_for_neural_distinguisher"],[131,2,1,"","find_impossible_property"],[131,2,1,"","generate_bit_based_c_code"],[131,2,1,"","generate_csv_report"],[131,2,1,"","generate_evaluate_c_code_shared_library"],[131,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[131,2,1,"","generate_word_based_c_code"],[131,2,1,"","get_all_components"],[131,2,1,"","get_all_components_ids"],[131,2,1,"","get_all_inputs_bit_positions"],[131,2,1,"","get_component_from_id"],[131,2,1,"","get_components_in_round"],[131,2,1,"","get_current_component_id"],[131,2,1,"","get_model"],[131,2,1,"","get_number_of_components_in_round"],[131,2,1,"","get_partial_cipher"],[131,2,1,"","get_round_from_component_id"],[131,2,1,"","get_sizes_of_components_by_type"],[131,2,1,"","icounter_update"],[131,3,1,"","id"],[131,2,1,"","impossible_differential_search"],[131,3,1,"","inputs"],[131,3,1,"","inputs_bit_size"],[131,2,1,"","inputs_size_to_dict"],[131,2,1,"","is_algebraically_secure"],[131,2,1,"","is_andrx"],[131,2,1,"","is_arx"],[131,2,1,"","is_power_of_2_word_based"],[131,2,1,"","is_shift_arx"],[131,2,1,"","is_spn"],[131,2,1,"","make_cipher_id"],[131,2,1,"","make_file_name"],[131,2,1,"","neural_network_blackbox_distinguisher_tests"],[131,2,1,"","neural_network_differential_distinguisher_tests"],[131,3,1,"","number_of_rounds"],[131,3,1,"","output_bit_size"],[131,2,1,"","polynomial_system"],[131,2,1,"","polynomial_system_at_round"],[131,2,1,"","print"],[131,2,1,"","print_as_python_dictionary"],[131,2,1,"","print_as_python_dictionary_to_file"],[131,2,1,"","print_component_analysis_as_radar_charts"],[131,2,1,"","print_evaluation_python_code"],[131,2,1,"","print_evaluation_python_code_to_file"],[131,2,1,"","print_input_information"],[131,3,1,"","reference_code"],[131,2,1,"","remove_key_schedule"],[131,2,1,"","remove_round_component"],[131,2,1,"","remove_round_component_from_id"],[131,2,1,"","round_function"],[131,3,1,"","rounds"],[131,3,1,"","rounds_as_list"],[131,2,1,"","run_autond_pipeline"],[131,2,1,"","set_file_name"],[131,2,1,"","set_id"],[131,2,1,"","set_inputs"],[131,2,1,"","sort_cipher"],[131,2,1,"","test_against_reference_code"],[131,2,1,"","test_vector_check"],[131,2,1,"","train_gohr_neural_distinguisher"],[131,2,1,"","train_neural_distinguisher"],[131,3,1,"","type"],[131,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_permutation":[[132,1,1,"","SpongentPiPermutation"]],"ciphers.permutations.spongent_pi_permutation.SpongentPiPermutation":[[132,2,1,"","add_AND_component"],[132,2,1,"","add_FSR_component"],[132,2,1,"","add_MODADD_component"],[132,2,1,"","add_MODSUB_component"],[132,2,1,"","add_NOT_component"],[132,2,1,"","add_OR_component"],[132,2,1,"","add_SBOX_component"],[132,2,1,"","add_SHIFT_component"],[132,2,1,"","add_XOR_component"],[132,2,1,"","add_cipher_output_component"],[132,2,1,"","add_concatenate_component"],[132,2,1,"","add_constant_component"],[132,2,1,"","add_intermediate_output_component"],[132,2,1,"","add_linear_layer_component"],[132,2,1,"","add_mix_column_component"],[132,2,1,"","add_permutation_component"],[132,2,1,"","add_reverse_component"],[132,2,1,"","add_rotate_component"],[132,2,1,"","add_round"],[132,2,1,"","add_round_key_output_component"],[132,2,1,"","add_round_output_component"],[132,2,1,"","add_shift_rows_component"],[132,2,1,"","add_sigma_component"],[132,2,1,"","add_suffix_to_components"],[132,2,1,"","add_theta_keccak_component"],[132,2,1,"","add_theta_xoodoo_component"],[132,2,1,"","add_variable_rotate_component"],[132,2,1,"","add_variable_shift_component"],[132,2,1,"","add_word_permutation_component"],[132,2,1,"","algebraic_tests"],[132,2,1,"","analyze_cipher"],[132,2,1,"","as_python_dictionary"],[132,2,1,"","avalanche_probability_vectors"],[132,2,1,"","cipher_inverse"],[132,2,1,"","cipher_partial_inverse"],[132,2,1,"","component_analysis_tests"],[132,2,1,"","component_from"],[132,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[132,2,1,"","continuous_avalanche_factor"],[132,2,1,"","continuous_diffusion_factor"],[132,2,1,"","continuous_diffusion_tests"],[132,2,1,"","continuous_neutrality_measure_for_bit_j"],[132,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[132,2,1,"","convert_to_compound_xor_cipher"],[132,3,1,"","current_round"],[132,3,1,"","current_round_number"],[132,3,1,"","current_round_number_of_components"],[132,2,1,"","delete_generated_evaluate_c_shared_library"],[132,2,1,"","diffusion_tests"],[132,2,1,"","evaluate"],[132,2,1,"","evaluate_using_c"],[132,2,1,"","evaluate_vectorized"],[132,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[132,3,1,"","family_name"],[132,3,1,"","file_name"],[132,2,1,"","find_good_input_difference_for_neural_distinguisher"],[132,2,1,"","find_impossible_property"],[132,2,1,"","generate_bit_based_c_code"],[132,2,1,"","generate_csv_report"],[132,2,1,"","generate_evaluate_c_code_shared_library"],[132,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[132,2,1,"","generate_word_based_c_code"],[132,2,1,"","get_all_components"],[132,2,1,"","get_all_components_ids"],[132,2,1,"","get_all_inputs_bit_positions"],[132,2,1,"","get_component_from_id"],[132,2,1,"","get_components_in_round"],[132,2,1,"","get_current_component_id"],[132,2,1,"","get_model"],[132,2,1,"","get_number_of_components_in_round"],[132,2,1,"","get_partial_cipher"],[132,2,1,"","get_round_from_component_id"],[132,2,1,"","get_sizes_of_components_by_type"],[132,2,1,"","icounter_update"],[132,3,1,"","id"],[132,2,1,"","impossible_differential_search"],[132,3,1,"","inputs"],[132,3,1,"","inputs_bit_size"],[132,2,1,"","inputs_size_to_dict"],[132,2,1,"","is_algebraically_secure"],[132,2,1,"","is_andrx"],[132,2,1,"","is_arx"],[132,2,1,"","is_power_of_2_word_based"],[132,2,1,"","is_shift_arx"],[132,2,1,"","is_spn"],[132,2,1,"","make_cipher_id"],[132,2,1,"","make_file_name"],[132,2,1,"","neural_network_blackbox_distinguisher_tests"],[132,2,1,"","neural_network_differential_distinguisher_tests"],[132,3,1,"","number_of_rounds"],[132,3,1,"","output_bit_size"],[132,2,1,"","polynomial_system"],[132,2,1,"","polynomial_system_at_round"],[132,2,1,"","print"],[132,2,1,"","print_as_python_dictionary"],[132,2,1,"","print_as_python_dictionary_to_file"],[132,2,1,"","print_component_analysis_as_radar_charts"],[132,2,1,"","print_evaluation_python_code"],[132,2,1,"","print_evaluation_python_code_to_file"],[132,2,1,"","print_input_information"],[132,3,1,"","reference_code"],[132,2,1,"","remove_key_schedule"],[132,2,1,"","remove_round_component"],[132,2,1,"","remove_round_component_from_id"],[132,2,1,"","round_function"],[132,3,1,"","rounds"],[132,3,1,"","rounds_as_list"],[132,2,1,"","run_autond_pipeline"],[132,2,1,"","set_file_name"],[132,2,1,"","set_id"],[132,2,1,"","set_inputs"],[132,2,1,"","sort_cipher"],[132,2,1,"","test_against_reference_code"],[132,2,1,"","test_vector_check"],[132,2,1,"","train_gohr_neural_distinguisher"],[132,2,1,"","train_neural_distinguisher"],[132,3,1,"","type"],[132,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_precomputation_permutation":[[133,1,1,"","SpongentPiPrecomputationPermutation"]],"ciphers.permutations.spongent_pi_precomputation_permutation.SpongentPiPrecomputationPermutation":[[133,2,1,"","add_AND_component"],[133,2,1,"","add_FSR_component"],[133,2,1,"","add_MODADD_component"],[133,2,1,"","add_MODSUB_component"],[133,2,1,"","add_NOT_component"],[133,2,1,"","add_OR_component"],[133,2,1,"","add_SBOX_component"],[133,2,1,"","add_SHIFT_component"],[133,2,1,"","add_XOR_component"],[133,2,1,"","add_cipher_output_component"],[133,2,1,"","add_concatenate_component"],[133,2,1,"","add_constant_component"],[133,2,1,"","add_intermediate_output_component"],[133,2,1,"","add_linear_layer_component"],[133,2,1,"","add_mix_column_component"],[133,2,1,"","add_permutation_component"],[133,2,1,"","add_reverse_component"],[133,2,1,"","add_rotate_component"],[133,2,1,"","add_round"],[133,2,1,"","add_round_key_output_component"],[133,2,1,"","add_round_output_component"],[133,2,1,"","add_shift_rows_component"],[133,2,1,"","add_sigma_component"],[133,2,1,"","add_suffix_to_components"],[133,2,1,"","add_theta_keccak_component"],[133,2,1,"","add_theta_xoodoo_component"],[133,2,1,"","add_variable_rotate_component"],[133,2,1,"","add_variable_shift_component"],[133,2,1,"","add_word_permutation_component"],[133,2,1,"","algebraic_tests"],[133,2,1,"","analyze_cipher"],[133,2,1,"","as_python_dictionary"],[133,2,1,"","avalanche_probability_vectors"],[133,2,1,"","cipher_inverse"],[133,2,1,"","cipher_partial_inverse"],[133,2,1,"","component_analysis_tests"],[133,2,1,"","component_from"],[133,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[133,2,1,"","continuous_avalanche_factor"],[133,2,1,"","continuous_diffusion_factor"],[133,2,1,"","continuous_diffusion_tests"],[133,2,1,"","continuous_neutrality_measure_for_bit_j"],[133,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[133,2,1,"","convert_to_compound_xor_cipher"],[133,3,1,"","current_round"],[133,3,1,"","current_round_number"],[133,3,1,"","current_round_number_of_components"],[133,2,1,"","delete_generated_evaluate_c_shared_library"],[133,2,1,"","diffusion_tests"],[133,2,1,"","evaluate"],[133,2,1,"","evaluate_using_c"],[133,2,1,"","evaluate_vectorized"],[133,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[133,3,1,"","family_name"],[133,3,1,"","file_name"],[133,2,1,"","find_good_input_difference_for_neural_distinguisher"],[133,2,1,"","find_impossible_property"],[133,2,1,"","generate_bit_based_c_code"],[133,2,1,"","generate_csv_report"],[133,2,1,"","generate_evaluate_c_code_shared_library"],[133,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[133,2,1,"","generate_word_based_c_code"],[133,2,1,"","get_all_components"],[133,2,1,"","get_all_components_ids"],[133,2,1,"","get_all_inputs_bit_positions"],[133,2,1,"","get_component_from_id"],[133,2,1,"","get_components_in_round"],[133,2,1,"","get_current_component_id"],[133,2,1,"","get_model"],[133,2,1,"","get_number_of_components_in_round"],[133,2,1,"","get_partial_cipher"],[133,2,1,"","get_round_from_component_id"],[133,2,1,"","get_sizes_of_components_by_type"],[133,3,1,"","id"],[133,2,1,"","impossible_differential_search"],[133,3,1,"","inputs"],[133,3,1,"","inputs_bit_size"],[133,2,1,"","inputs_size_to_dict"],[133,2,1,"","is_algebraically_secure"],[133,2,1,"","is_andrx"],[133,2,1,"","is_arx"],[133,2,1,"","is_power_of_2_word_based"],[133,2,1,"","is_shift_arx"],[133,2,1,"","is_spn"],[133,2,1,"","make_cipher_id"],[133,2,1,"","make_file_name"],[133,2,1,"","neural_network_blackbox_distinguisher_tests"],[133,2,1,"","neural_network_differential_distinguisher_tests"],[133,3,1,"","number_of_rounds"],[133,3,1,"","output_bit_size"],[133,2,1,"","polynomial_system"],[133,2,1,"","polynomial_system_at_round"],[133,2,1,"","print"],[133,2,1,"","print_as_python_dictionary"],[133,2,1,"","print_as_python_dictionary_to_file"],[133,2,1,"","print_component_analysis_as_radar_charts"],[133,2,1,"","print_evaluation_python_code"],[133,2,1,"","print_evaluation_python_code_to_file"],[133,2,1,"","print_input_information"],[133,3,1,"","reference_code"],[133,2,1,"","remove_key_schedule"],[133,2,1,"","remove_round_component"],[133,2,1,"","remove_round_component_from_id"],[133,2,1,"","round_function"],[133,3,1,"","rounds"],[133,3,1,"","rounds_as_list"],[133,2,1,"","run_autond_pipeline"],[133,2,1,"","set_file_name"],[133,2,1,"","set_id"],[133,2,1,"","set_inputs"],[133,2,1,"","sort_cipher"],[133,2,1,"","test_against_reference_code"],[133,2,1,"","test_vector_check"],[133,2,1,"","train_gohr_neural_distinguisher"],[133,2,1,"","train_neural_distinguisher"],[133,3,1,"","type"],[133,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_32bits_word_permutation":[[134,1,1,"","TinyJambuWordBasedPermutation"]],"ciphers.permutations.tinyjambu_32bits_word_permutation.TinyJambuWordBasedPermutation":[[134,2,1,"","add_AND_component"],[134,2,1,"","add_FSR_component"],[134,2,1,"","add_MODADD_component"],[134,2,1,"","add_MODSUB_component"],[134,2,1,"","add_NOT_component"],[134,2,1,"","add_OR_component"],[134,2,1,"","add_SBOX_component"],[134,2,1,"","add_SHIFT_component"],[134,2,1,"","add_XOR_component"],[134,2,1,"","add_cipher_output_component"],[134,2,1,"","add_concatenate_component"],[134,2,1,"","add_constant_component"],[134,2,1,"","add_intermediate_output_component"],[134,2,1,"","add_linear_layer_component"],[134,2,1,"","add_mix_column_component"],[134,2,1,"","add_permutation_component"],[134,2,1,"","add_reverse_component"],[134,2,1,"","add_rotate_component"],[134,2,1,"","add_round"],[134,2,1,"","add_round_key_output_component"],[134,2,1,"","add_round_output_component"],[134,2,1,"","add_shift_rows_component"],[134,2,1,"","add_sigma_component"],[134,2,1,"","add_suffix_to_components"],[134,2,1,"","add_theta_keccak_component"],[134,2,1,"","add_theta_xoodoo_component"],[134,2,1,"","add_variable_rotate_component"],[134,2,1,"","add_variable_shift_component"],[134,2,1,"","add_word_permutation_component"],[134,2,1,"","algebraic_tests"],[134,2,1,"","analyze_cipher"],[134,2,1,"","as_python_dictionary"],[134,2,1,"","avalanche_probability_vectors"],[134,2,1,"","cipher_inverse"],[134,2,1,"","cipher_partial_inverse"],[134,2,1,"","component_analysis_tests"],[134,2,1,"","component_from"],[134,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[134,2,1,"","continuous_avalanche_factor"],[134,2,1,"","continuous_diffusion_factor"],[134,2,1,"","continuous_diffusion_tests"],[134,2,1,"","continuous_neutrality_measure_for_bit_j"],[134,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[134,2,1,"","convert_to_compound_xor_cipher"],[134,3,1,"","current_round"],[134,3,1,"","current_round_number"],[134,3,1,"","current_round_number_of_components"],[134,2,1,"","delete_generated_evaluate_c_shared_library"],[134,2,1,"","diffusion_tests"],[134,2,1,"","evaluate"],[134,2,1,"","evaluate_using_c"],[134,2,1,"","evaluate_vectorized"],[134,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[134,3,1,"","family_name"],[134,3,1,"","file_name"],[134,2,1,"","find_good_input_difference_for_neural_distinguisher"],[134,2,1,"","find_impossible_property"],[134,2,1,"","generate_bit_based_c_code"],[134,2,1,"","generate_csv_report"],[134,2,1,"","generate_evaluate_c_code_shared_library"],[134,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[134,2,1,"","generate_word_based_c_code"],[134,2,1,"","get_all_components"],[134,2,1,"","get_all_components_ids"],[134,2,1,"","get_all_inputs_bit_positions"],[134,2,1,"","get_component_from_id"],[134,2,1,"","get_components_in_round"],[134,2,1,"","get_current_component_id"],[134,2,1,"","get_model"],[134,2,1,"","get_number_of_components_in_round"],[134,2,1,"","get_partial_cipher"],[134,2,1,"","get_round_from_component_id"],[134,2,1,"","get_sizes_of_components_by_type"],[134,3,1,"","id"],[134,2,1,"","impossible_differential_search"],[134,3,1,"","inputs"],[134,3,1,"","inputs_bit_size"],[134,2,1,"","inputs_size_to_dict"],[134,2,1,"","is_algebraically_secure"],[134,2,1,"","is_andrx"],[134,2,1,"","is_arx"],[134,2,1,"","is_power_of_2_word_based"],[134,2,1,"","is_shift_arx"],[134,2,1,"","is_spn"],[134,2,1,"","make_cipher_id"],[134,2,1,"","make_file_name"],[134,2,1,"","neural_network_blackbox_distinguisher_tests"],[134,2,1,"","neural_network_differential_distinguisher_tests"],[134,3,1,"","number_of_rounds"],[134,3,1,"","output_bit_size"],[134,2,1,"","polynomial_system"],[134,2,1,"","polynomial_system_at_round"],[134,2,1,"","print"],[134,2,1,"","print_as_python_dictionary"],[134,2,1,"","print_as_python_dictionary_to_file"],[134,2,1,"","print_component_analysis_as_radar_charts"],[134,2,1,"","print_evaluation_python_code"],[134,2,1,"","print_evaluation_python_code_to_file"],[134,2,1,"","print_input_information"],[134,3,1,"","reference_code"],[134,2,1,"","remove_key_schedule"],[134,2,1,"","remove_round_component"],[134,2,1,"","remove_round_component_from_id"],[134,2,1,"","round_function"],[134,3,1,"","rounds"],[134,3,1,"","rounds_as_list"],[134,2,1,"","run_autond_pipeline"],[134,2,1,"","set_file_name"],[134,2,1,"","set_id"],[134,2,1,"","set_inputs"],[134,2,1,"","sort_cipher"],[134,2,1,"","test_against_reference_code"],[134,2,1,"","test_vector_check"],[134,2,1,"","train_gohr_neural_distinguisher"],[134,2,1,"","train_neural_distinguisher"],[134,3,1,"","type"],[134,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation":[[135,1,1,"","TinyJambuFSRWordBasedPermutation"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation.TinyJambuFSRWordBasedPermutation":[[135,2,1,"","add_AND_component"],[135,2,1,"","add_FSR_component"],[135,2,1,"","add_MODADD_component"],[135,2,1,"","add_MODSUB_component"],[135,2,1,"","add_NOT_component"],[135,2,1,"","add_OR_component"],[135,2,1,"","add_SBOX_component"],[135,2,1,"","add_SHIFT_component"],[135,2,1,"","add_XOR_component"],[135,2,1,"","add_cipher_output_component"],[135,2,1,"","add_concatenate_component"],[135,2,1,"","add_constant_component"],[135,2,1,"","add_intermediate_output_component"],[135,2,1,"","add_linear_layer_component"],[135,2,1,"","add_mix_column_component"],[135,2,1,"","add_permutation_component"],[135,2,1,"","add_reverse_component"],[135,2,1,"","add_rotate_component"],[135,2,1,"","add_round"],[135,2,1,"","add_round_key_output_component"],[135,2,1,"","add_round_output_component"],[135,2,1,"","add_shift_rows_component"],[135,2,1,"","add_sigma_component"],[135,2,1,"","add_suffix_to_components"],[135,2,1,"","add_theta_keccak_component"],[135,2,1,"","add_theta_xoodoo_component"],[135,2,1,"","add_variable_rotate_component"],[135,2,1,"","add_variable_shift_component"],[135,2,1,"","add_word_permutation_component"],[135,2,1,"","algebraic_tests"],[135,2,1,"","analyze_cipher"],[135,2,1,"","as_python_dictionary"],[135,2,1,"","avalanche_probability_vectors"],[135,2,1,"","cipher_inverse"],[135,2,1,"","cipher_partial_inverse"],[135,2,1,"","component_analysis_tests"],[135,2,1,"","component_from"],[135,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[135,2,1,"","continuous_avalanche_factor"],[135,2,1,"","continuous_diffusion_factor"],[135,2,1,"","continuous_diffusion_tests"],[135,2,1,"","continuous_neutrality_measure_for_bit_j"],[135,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[135,2,1,"","convert_to_compound_xor_cipher"],[135,3,1,"","current_round"],[135,3,1,"","current_round_number"],[135,3,1,"","current_round_number_of_components"],[135,2,1,"","delete_generated_evaluate_c_shared_library"],[135,2,1,"","diffusion_tests"],[135,2,1,"","evaluate"],[135,2,1,"","evaluate_using_c"],[135,2,1,"","evaluate_vectorized"],[135,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[135,3,1,"","family_name"],[135,3,1,"","file_name"],[135,2,1,"","find_good_input_difference_for_neural_distinguisher"],[135,2,1,"","find_impossible_property"],[135,2,1,"","generate_bit_based_c_code"],[135,2,1,"","generate_csv_report"],[135,2,1,"","generate_evaluate_c_code_shared_library"],[135,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[135,2,1,"","generate_word_based_c_code"],[135,2,1,"","get_all_components"],[135,2,1,"","get_all_components_ids"],[135,2,1,"","get_all_inputs_bit_positions"],[135,2,1,"","get_component_from_id"],[135,2,1,"","get_components_in_round"],[135,2,1,"","get_current_component_id"],[135,2,1,"","get_model"],[135,2,1,"","get_number_of_components_in_round"],[135,2,1,"","get_partial_cipher"],[135,2,1,"","get_round_from_component_id"],[135,2,1,"","get_sizes_of_components_by_type"],[135,3,1,"","id"],[135,2,1,"","impossible_differential_search"],[135,3,1,"","inputs"],[135,3,1,"","inputs_bit_size"],[135,2,1,"","inputs_size_to_dict"],[135,2,1,"","is_algebraically_secure"],[135,2,1,"","is_andrx"],[135,2,1,"","is_arx"],[135,2,1,"","is_power_of_2_word_based"],[135,2,1,"","is_shift_arx"],[135,2,1,"","is_spn"],[135,2,1,"","make_cipher_id"],[135,2,1,"","make_file_name"],[135,2,1,"","neural_network_blackbox_distinguisher_tests"],[135,2,1,"","neural_network_differential_distinguisher_tests"],[135,3,1,"","number_of_rounds"],[135,3,1,"","output_bit_size"],[135,2,1,"","polynomial_system"],[135,2,1,"","polynomial_system_at_round"],[135,2,1,"","print"],[135,2,1,"","print_as_python_dictionary"],[135,2,1,"","print_as_python_dictionary_to_file"],[135,2,1,"","print_component_analysis_as_radar_charts"],[135,2,1,"","print_evaluation_python_code"],[135,2,1,"","print_evaluation_python_code_to_file"],[135,2,1,"","print_input_information"],[135,3,1,"","reference_code"],[135,2,1,"","remove_key_schedule"],[135,2,1,"","remove_round_component"],[135,2,1,"","remove_round_component_from_id"],[135,2,1,"","round_function"],[135,3,1,"","rounds"],[135,3,1,"","rounds_as_list"],[135,2,1,"","run_autond_pipeline"],[135,2,1,"","set_file_name"],[135,2,1,"","set_id"],[135,2,1,"","set_inputs"],[135,2,1,"","sort_cipher"],[135,2,1,"","test_against_reference_code"],[135,2,1,"","test_vector_check"],[135,2,1,"","train_gohr_neural_distinguisher"],[135,2,1,"","train_neural_distinguisher"],[135,3,1,"","type"],[135,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_permutation":[[136,1,1,"","TinyJambuPermutation"]],"ciphers.permutations.tinyjambu_permutation.TinyJambuPermutation":[[136,2,1,"","add_AND_component"],[136,2,1,"","add_FSR_component"],[136,2,1,"","add_MODADD_component"],[136,2,1,"","add_MODSUB_component"],[136,2,1,"","add_NOT_component"],[136,2,1,"","add_OR_component"],[136,2,1,"","add_SBOX_component"],[136,2,1,"","add_SHIFT_component"],[136,2,1,"","add_XOR_component"],[136,2,1,"","add_cipher_output_component"],[136,2,1,"","add_concatenate_component"],[136,2,1,"","add_constant_component"],[136,2,1,"","add_intermediate_output_component"],[136,2,1,"","add_linear_layer_component"],[136,2,1,"","add_mix_column_component"],[136,2,1,"","add_permutation_component"],[136,2,1,"","add_reverse_component"],[136,2,1,"","add_rotate_component"],[136,2,1,"","add_round"],[136,2,1,"","add_round_key_output_component"],[136,2,1,"","add_round_output_component"],[136,2,1,"","add_shift_rows_component"],[136,2,1,"","add_sigma_component"],[136,2,1,"","add_suffix_to_components"],[136,2,1,"","add_theta_keccak_component"],[136,2,1,"","add_theta_xoodoo_component"],[136,2,1,"","add_variable_rotate_component"],[136,2,1,"","add_variable_shift_component"],[136,2,1,"","add_word_permutation_component"],[136,2,1,"","algebraic_tests"],[136,2,1,"","analyze_cipher"],[136,2,1,"","as_python_dictionary"],[136,2,1,"","avalanche_probability_vectors"],[136,2,1,"","cipher_inverse"],[136,2,1,"","cipher_partial_inverse"],[136,2,1,"","component_analysis_tests"],[136,2,1,"","component_from"],[136,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[136,2,1,"","continuous_avalanche_factor"],[136,2,1,"","continuous_diffusion_factor"],[136,2,1,"","continuous_diffusion_tests"],[136,2,1,"","continuous_neutrality_measure_for_bit_j"],[136,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[136,2,1,"","convert_to_compound_xor_cipher"],[136,3,1,"","current_round"],[136,3,1,"","current_round_number"],[136,3,1,"","current_round_number_of_components"],[136,2,1,"","delete_generated_evaluate_c_shared_library"],[136,2,1,"","diffusion_tests"],[136,2,1,"","evaluate"],[136,2,1,"","evaluate_using_c"],[136,2,1,"","evaluate_vectorized"],[136,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[136,3,1,"","family_name"],[136,3,1,"","file_name"],[136,2,1,"","find_good_input_difference_for_neural_distinguisher"],[136,2,1,"","find_impossible_property"],[136,2,1,"","generate_bit_based_c_code"],[136,2,1,"","generate_csv_report"],[136,2,1,"","generate_evaluate_c_code_shared_library"],[136,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[136,2,1,"","generate_word_based_c_code"],[136,2,1,"","get_all_components"],[136,2,1,"","get_all_components_ids"],[136,2,1,"","get_all_inputs_bit_positions"],[136,2,1,"","get_component_from_id"],[136,2,1,"","get_components_in_round"],[136,2,1,"","get_current_component_id"],[136,2,1,"","get_model"],[136,2,1,"","get_number_of_components_in_round"],[136,2,1,"","get_partial_cipher"],[136,2,1,"","get_round_from_component_id"],[136,2,1,"","get_sizes_of_components_by_type"],[136,3,1,"","id"],[136,2,1,"","impossible_differential_search"],[136,3,1,"","inputs"],[136,3,1,"","inputs_bit_size"],[136,2,1,"","inputs_size_to_dict"],[136,2,1,"","is_algebraically_secure"],[136,2,1,"","is_andrx"],[136,2,1,"","is_arx"],[136,2,1,"","is_power_of_2_word_based"],[136,2,1,"","is_shift_arx"],[136,2,1,"","is_spn"],[136,2,1,"","make_cipher_id"],[136,2,1,"","make_file_name"],[136,2,1,"","neural_network_blackbox_distinguisher_tests"],[136,2,1,"","neural_network_differential_distinguisher_tests"],[136,3,1,"","number_of_rounds"],[136,3,1,"","output_bit_size"],[136,2,1,"","polynomial_system"],[136,2,1,"","polynomial_system_at_round"],[136,2,1,"","print"],[136,2,1,"","print_as_python_dictionary"],[136,2,1,"","print_as_python_dictionary_to_file"],[136,2,1,"","print_component_analysis_as_radar_charts"],[136,2,1,"","print_evaluation_python_code"],[136,2,1,"","print_evaluation_python_code_to_file"],[136,2,1,"","print_input_information"],[136,3,1,"","reference_code"],[136,2,1,"","remove_key_schedule"],[136,2,1,"","remove_round_component"],[136,2,1,"","remove_round_component_from_id"],[136,2,1,"","round_function"],[136,3,1,"","rounds"],[136,3,1,"","rounds_as_list"],[136,2,1,"","run_autond_pipeline"],[136,2,1,"","set_file_name"],[136,2,1,"","set_id"],[136,2,1,"","set_inputs"],[136,2,1,"","sort_cipher"],[136,2,1,"","test_against_reference_code"],[136,2,1,"","test_vector_check"],[136,2,1,"","train_gohr_neural_distinguisher"],[136,2,1,"","train_neural_distinguisher"],[136,3,1,"","type"],[136,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.util":[[137,4,1,"","add_intermediate_output_component_latin_dances_permutations"],[137,4,1,"","get_input_bit_positions_latin_dances"],[137,4,1,"","half_like_round_function_latin_dances"],[137,4,1,"","init_latin_dances_cipher"],[137,4,1,"","init_state_latin_dances"],[137,4,1,"","sub_quarter_round_latin_dances"]],"ciphers.permutations.xoodoo_invertible_permutation":[[138,1,1,"","XoodooInvertiblePermutation"]],"ciphers.permutations.xoodoo_invertible_permutation.XoodooInvertiblePermutation":[[138,2,1,"","add_AND_component"],[138,2,1,"","add_FSR_component"],[138,2,1,"","add_MODADD_component"],[138,2,1,"","add_MODSUB_component"],[138,2,1,"","add_NOT_component"],[138,2,1,"","add_OR_component"],[138,2,1,"","add_SBOX_component"],[138,2,1,"","add_SHIFT_component"],[138,2,1,"","add_XOR_component"],[138,2,1,"","add_cipher_output_component"],[138,2,1,"","add_concatenate_component"],[138,2,1,"","add_constant_component"],[138,2,1,"","add_intermediate_output_component"],[138,2,1,"","add_linear_layer_component"],[138,2,1,"","add_mix_column_component"],[138,2,1,"","add_output_component"],[138,2,1,"","add_permutation_component"],[138,2,1,"","add_reverse_component"],[138,2,1,"","add_rotate_component"],[138,2,1,"","add_round"],[138,2,1,"","add_round_key_output_component"],[138,2,1,"","add_round_output_component"],[138,2,1,"","add_shift_rows_component"],[138,2,1,"","add_sigma_component"],[138,2,1,"","add_suffix_to_components"],[138,2,1,"","add_theta_keccak_component"],[138,2,1,"","add_theta_xoodoo_component"],[138,2,1,"","add_variable_rotate_component"],[138,2,1,"","add_variable_shift_component"],[138,2,1,"","add_word_permutation_component"],[138,2,1,"","algebraic_tests"],[138,2,1,"","analyze_cipher"],[138,2,1,"","apply_sbox_to_each_3bit_column"],[138,2,1,"","as_python_dictionary"],[138,2,1,"","avalanche_probability_vectors"],[138,2,1,"","chi_definition"],[138,2,1,"","cipher_inverse"],[138,2,1,"","cipher_partial_inverse"],[138,2,1,"","component_analysis_tests"],[138,2,1,"","component_from"],[138,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[138,2,1,"","continuous_avalanche_factor"],[138,2,1,"","continuous_diffusion_factor"],[138,2,1,"","continuous_diffusion_tests"],[138,2,1,"","continuous_neutrality_measure_for_bit_j"],[138,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[138,2,1,"","convert_to_compound_xor_cipher"],[138,3,1,"","current_round"],[138,3,1,"","current_round_number"],[138,3,1,"","current_round_number_of_components"],[138,2,1,"","delete_generated_evaluate_c_shared_library"],[138,2,1,"","diffusion_tests"],[138,2,1,"","evaluate"],[138,2,1,"","evaluate_using_c"],[138,2,1,"","evaluate_vectorized"],[138,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[138,3,1,"","family_name"],[138,3,1,"","file_name"],[138,2,1,"","find_good_input_difference_for_neural_distinguisher"],[138,2,1,"","find_impossible_property"],[138,2,1,"","generate_bit_based_c_code"],[138,2,1,"","generate_csv_report"],[138,2,1,"","generate_evaluate_c_code_shared_library"],[138,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[138,2,1,"","generate_word_based_c_code"],[138,2,1,"","get_all_components"],[138,2,1,"","get_all_components_ids"],[138,2,1,"","get_all_inputs_bit_positions"],[138,2,1,"","get_component_from_id"],[138,2,1,"","get_components_in_round"],[138,2,1,"","get_current_component_id"],[138,2,1,"","get_model"],[138,2,1,"","get_number_of_components_in_round"],[138,2,1,"","get_partial_cipher"],[138,2,1,"","get_round_from_component_id"],[138,2,1,"","get_sizes_of_components_by_type"],[138,3,1,"","id"],[138,2,1,"","impossible_differential_search"],[138,3,1,"","inputs"],[138,3,1,"","inputs_bit_size"],[138,2,1,"","inputs_size_to_dict"],[138,2,1,"","iota_definition"],[138,2,1,"","is_algebraically_secure"],[138,2,1,"","is_andrx"],[138,2,1,"","is_arx"],[138,2,1,"","is_power_of_2_word_based"],[138,2,1,"","is_shift_arx"],[138,2,1,"","is_spn"],[138,2,1,"","make_cipher_id"],[138,2,1,"","make_file_name"],[138,2,1,"","neural_network_blackbox_distinguisher_tests"],[138,2,1,"","neural_network_differential_distinguisher_tests"],[138,3,1,"","number_of_rounds"],[138,3,1,"","output_bit_size"],[138,2,1,"","polynomial_system"],[138,2,1,"","polynomial_system_at_round"],[138,2,1,"","print"],[138,2,1,"","print_as_python_dictionary"],[138,2,1,"","print_as_python_dictionary_to_file"],[138,2,1,"","print_component_analysis_as_radar_charts"],[138,2,1,"","print_evaluation_python_code"],[138,2,1,"","print_evaluation_python_code_to_file"],[138,2,1,"","print_input_information"],[138,3,1,"","reference_code"],[138,2,1,"","remove_key_schedule"],[138,2,1,"","remove_round_component"],[138,2,1,"","remove_round_component_from_id"],[138,2,1,"","rhoeast_definition"],[138,2,1,"","rhowest_definition"],[138,2,1,"","rotate_x_z"],[138,2,1,"","round_function"],[138,3,1,"","rounds"],[138,3,1,"","rounds_as_list"],[138,2,1,"","run_autond_pipeline"],[138,2,1,"","set_file_name"],[138,2,1,"","set_id"],[138,2,1,"","set_inputs"],[138,2,1,"","sort_cipher"],[138,2,1,"","test_against_reference_code"],[138,2,1,"","test_vector_check"],[138,2,1,"","theta_definition"],[138,2,1,"","train_gohr_neural_distinguisher"],[138,2,1,"","train_neural_distinguisher"],[138,3,1,"","type"],[138,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_permutation":[[139,1,1,"","XoodooPermutation"]],"ciphers.permutations.xoodoo_permutation.XoodooPermutation":[[139,2,1,"","add_AND_component"],[139,2,1,"","add_FSR_component"],[139,2,1,"","add_MODADD_component"],[139,2,1,"","add_MODSUB_component"],[139,2,1,"","add_NOT_component"],[139,2,1,"","add_OR_component"],[139,2,1,"","add_SBOX_component"],[139,2,1,"","add_SHIFT_component"],[139,2,1,"","add_XOR_component"],[139,2,1,"","add_cipher_output_component"],[139,2,1,"","add_concatenate_component"],[139,2,1,"","add_constant_component"],[139,2,1,"","add_intermediate_output_component"],[139,2,1,"","add_linear_layer_component"],[139,2,1,"","add_mix_column_component"],[139,2,1,"","add_output_component"],[139,2,1,"","add_permutation_component"],[139,2,1,"","add_reverse_component"],[139,2,1,"","add_rotate_component"],[139,2,1,"","add_round"],[139,2,1,"","add_round_key_output_component"],[139,2,1,"","add_round_output_component"],[139,2,1,"","add_round_output_linear"],[139,2,1,"","add_round_output_nonlinear"],[139,2,1,"","add_shift_rows_component"],[139,2,1,"","add_sigma_component"],[139,2,1,"","add_suffix_to_components"],[139,2,1,"","add_theta_keccak_component"],[139,2,1,"","add_theta_xoodoo_component"],[139,2,1,"","add_variable_rotate_component"],[139,2,1,"","add_variable_shift_component"],[139,2,1,"","add_word_permutation_component"],[139,2,1,"","algebraic_tests"],[139,2,1,"","analyze_cipher"],[139,2,1,"","as_python_dictionary"],[139,2,1,"","avalanche_probability_vectors"],[139,2,1,"","chi_definition"],[139,2,1,"","cipher_inverse"],[139,2,1,"","cipher_partial_inverse"],[139,2,1,"","component_analysis_tests"],[139,2,1,"","component_from"],[139,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[139,2,1,"","continuous_avalanche_factor"],[139,2,1,"","continuous_diffusion_factor"],[139,2,1,"","continuous_diffusion_tests"],[139,2,1,"","continuous_neutrality_measure_for_bit_j"],[139,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[139,2,1,"","convert_to_compound_xor_cipher"],[139,3,1,"","current_round"],[139,3,1,"","current_round_number"],[139,3,1,"","current_round_number_of_components"],[139,2,1,"","delete_generated_evaluate_c_shared_library"],[139,2,1,"","diffusion_tests"],[139,2,1,"","evaluate"],[139,2,1,"","evaluate_using_c"],[139,2,1,"","evaluate_vectorized"],[139,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[139,3,1,"","family_name"],[139,3,1,"","file_name"],[139,2,1,"","find_good_input_difference_for_neural_distinguisher"],[139,2,1,"","find_impossible_property"],[139,2,1,"","generate_bit_based_c_code"],[139,2,1,"","generate_csv_report"],[139,2,1,"","generate_evaluate_c_code_shared_library"],[139,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[139,2,1,"","generate_word_based_c_code"],[139,2,1,"","get_all_components"],[139,2,1,"","get_all_components_ids"],[139,2,1,"","get_all_inputs_bit_positions"],[139,2,1,"","get_component_from_id"],[139,2,1,"","get_components_in_round"],[139,2,1,"","get_current_component_id"],[139,2,1,"","get_model"],[139,2,1,"","get_number_of_components_in_round"],[139,2,1,"","get_partial_cipher"],[139,2,1,"","get_round_from_component_id"],[139,2,1,"","get_sizes_of_components_by_type"],[139,3,1,"","id"],[139,2,1,"","impossible_differential_search"],[139,3,1,"","inputs"],[139,3,1,"","inputs_bit_size"],[139,2,1,"","inputs_size_to_dict"],[139,2,1,"","iota_definition"],[139,2,1,"","is_algebraically_secure"],[139,2,1,"","is_andrx"],[139,2,1,"","is_arx"],[139,2,1,"","is_power_of_2_word_based"],[139,2,1,"","is_shift_arx"],[139,2,1,"","is_spn"],[139,2,1,"","make_cipher_id"],[139,2,1,"","make_file_name"],[139,2,1,"","neural_network_blackbox_distinguisher_tests"],[139,2,1,"","neural_network_differential_distinguisher_tests"],[139,3,1,"","number_of_rounds"],[139,3,1,"","output_bit_size"],[139,2,1,"","polynomial_system"],[139,2,1,"","polynomial_system_at_round"],[139,2,1,"","print"],[139,2,1,"","print_as_python_dictionary"],[139,2,1,"","print_as_python_dictionary_to_file"],[139,2,1,"","print_component_analysis_as_radar_charts"],[139,2,1,"","print_evaluation_python_code"],[139,2,1,"","print_evaluation_python_code_to_file"],[139,2,1,"","print_input_information"],[139,3,1,"","reference_code"],[139,2,1,"","remove_key_schedule"],[139,2,1,"","remove_round_component"],[139,2,1,"","remove_round_component_from_id"],[139,2,1,"","rhoeast_definition"],[139,2,1,"","rhowest_definition"],[139,2,1,"","rotate_x_z"],[139,2,1,"","round_function"],[139,3,1,"","rounds"],[139,3,1,"","rounds_as_list"],[139,2,1,"","run_autond_pipeline"],[139,2,1,"","set_file_name"],[139,2,1,"","set_id"],[139,2,1,"","set_inputs"],[139,2,1,"","sort_cipher"],[139,2,1,"","test_against_reference_code"],[139,2,1,"","test_vector_check"],[139,2,1,"","theta_definition"],[139,2,1,"","train_gohr_neural_distinguisher"],[139,2,1,"","train_neural_distinguisher"],[139,3,1,"","type"],[139,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_sbox_permutation":[[140,1,1,"","XoodooSboxPermutation"]],"ciphers.permutations.xoodoo_sbox_permutation.XoodooSboxPermutation":[[140,2,1,"","add_AND_component"],[140,2,1,"","add_FSR_component"],[140,2,1,"","add_MODADD_component"],[140,2,1,"","add_MODSUB_component"],[140,2,1,"","add_NOT_component"],[140,2,1,"","add_OR_component"],[140,2,1,"","add_SBOX_component"],[140,2,1,"","add_SHIFT_component"],[140,2,1,"","add_XOR_component"],[140,2,1,"","add_cipher_output_component"],[140,2,1,"","add_concatenate_component"],[140,2,1,"","add_constant_component"],[140,2,1,"","add_intermediate_output_component"],[140,2,1,"","add_linear_layer_component"],[140,2,1,"","add_mix_column_component"],[140,2,1,"","add_output_component"],[140,2,1,"","add_permutation_component"],[140,2,1,"","add_reverse_component"],[140,2,1,"","add_rotate_component"],[140,2,1,"","add_round"],[140,2,1,"","add_round_key_output_component"],[140,2,1,"","add_round_output_component"],[140,2,1,"","add_shift_rows_component"],[140,2,1,"","add_sigma_component"],[140,2,1,"","add_suffix_to_components"],[140,2,1,"","add_theta_keccak_component"],[140,2,1,"","add_theta_xoodoo_component"],[140,2,1,"","add_variable_rotate_component"],[140,2,1,"","add_variable_shift_component"],[140,2,1,"","add_word_permutation_component"],[140,2,1,"","algebraic_tests"],[140,2,1,"","analyze_cipher"],[140,2,1,"","apply_sbox_to_each_3bit_column"],[140,2,1,"","as_python_dictionary"],[140,2,1,"","avalanche_probability_vectors"],[140,2,1,"","chi_definition"],[140,2,1,"","cipher_inverse"],[140,2,1,"","cipher_partial_inverse"],[140,2,1,"","component_analysis_tests"],[140,2,1,"","component_from"],[140,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[140,2,1,"","continuous_avalanche_factor"],[140,2,1,"","continuous_diffusion_factor"],[140,2,1,"","continuous_diffusion_tests"],[140,2,1,"","continuous_neutrality_measure_for_bit_j"],[140,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[140,2,1,"","convert_to_compound_xor_cipher"],[140,3,1,"","current_round"],[140,3,1,"","current_round_number"],[140,3,1,"","current_round_number_of_components"],[140,2,1,"","delete_generated_evaluate_c_shared_library"],[140,2,1,"","diffusion_tests"],[140,2,1,"","evaluate"],[140,2,1,"","evaluate_using_c"],[140,2,1,"","evaluate_vectorized"],[140,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[140,3,1,"","family_name"],[140,3,1,"","file_name"],[140,2,1,"","find_good_input_difference_for_neural_distinguisher"],[140,2,1,"","find_impossible_property"],[140,2,1,"","generate_bit_based_c_code"],[140,2,1,"","generate_csv_report"],[140,2,1,"","generate_evaluate_c_code_shared_library"],[140,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[140,2,1,"","generate_word_based_c_code"],[140,2,1,"","get_all_components"],[140,2,1,"","get_all_components_ids"],[140,2,1,"","get_all_inputs_bit_positions"],[140,2,1,"","get_component_from_id"],[140,2,1,"","get_components_in_round"],[140,2,1,"","get_current_component_id"],[140,2,1,"","get_model"],[140,2,1,"","get_number_of_components_in_round"],[140,2,1,"","get_partial_cipher"],[140,2,1,"","get_round_from_component_id"],[140,2,1,"","get_sizes_of_components_by_type"],[140,3,1,"","id"],[140,2,1,"","impossible_differential_search"],[140,3,1,"","inputs"],[140,3,1,"","inputs_bit_size"],[140,2,1,"","inputs_size_to_dict"],[140,2,1,"","iota_definition"],[140,2,1,"","is_algebraically_secure"],[140,2,1,"","is_andrx"],[140,2,1,"","is_arx"],[140,2,1,"","is_power_of_2_word_based"],[140,2,1,"","is_shift_arx"],[140,2,1,"","is_spn"],[140,2,1,"","make_cipher_id"],[140,2,1,"","make_file_name"],[140,2,1,"","neural_network_blackbox_distinguisher_tests"],[140,2,1,"","neural_network_differential_distinguisher_tests"],[140,3,1,"","number_of_rounds"],[140,3,1,"","output_bit_size"],[140,2,1,"","polynomial_system"],[140,2,1,"","polynomial_system_at_round"],[140,2,1,"","print"],[140,2,1,"","print_as_python_dictionary"],[140,2,1,"","print_as_python_dictionary_to_file"],[140,2,1,"","print_component_analysis_as_radar_charts"],[140,2,1,"","print_evaluation_python_code"],[140,2,1,"","print_evaluation_python_code_to_file"],[140,2,1,"","print_input_information"],[140,3,1,"","reference_code"],[140,2,1,"","remove_key_schedule"],[140,2,1,"","remove_round_component"],[140,2,1,"","remove_round_component_from_id"],[140,2,1,"","rhoeast_definition"],[140,2,1,"","rhowest_definition"],[140,2,1,"","rotate_x_z"],[140,2,1,"","round_function"],[140,3,1,"","rounds"],[140,3,1,"","rounds_as_list"],[140,2,1,"","run_autond_pipeline"],[140,2,1,"","set_file_name"],[140,2,1,"","set_id"],[140,2,1,"","set_inputs"],[140,2,1,"","sort_cipher"],[140,2,1,"","test_against_reference_code"],[140,2,1,"","test_vector_check"],[140,2,1,"","theta_definition"],[140,2,1,"","train_gohr_neural_distinguisher"],[140,2,1,"","train_neural_distinguisher"],[140,3,1,"","type"],[140,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers":[[141,0,0,"-","a5_1_stream_cipher"],[142,0,0,"-","bivium_stream_cipher"],[143,0,0,"-","bluetooth_stream_cipher_e0"],[144,0,0,"-","chacha_stream_cipher"],[145,0,0,"-","snow3g_stream_cipher"],[146,0,0,"-","trivium_stream_cipher"],[147,0,0,"-","zuc_stream_cipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher":[[141,1,1,"","A51StreamCipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher.A51StreamCipher":[[141,2,1,"","add_AND_component"],[141,2,1,"","add_FSR_component"],[141,2,1,"","add_MODADD_component"],[141,2,1,"","add_MODSUB_component"],[141,2,1,"","add_NOT_component"],[141,2,1,"","add_OR_component"],[141,2,1,"","add_SBOX_component"],[141,2,1,"","add_SHIFT_component"],[141,2,1,"","add_XOR_component"],[141,2,1,"","add_cipher_output_component"],[141,2,1,"","add_concatenate_component"],[141,2,1,"","add_constant_component"],[141,2,1,"","add_intermediate_output_component"],[141,2,1,"","add_linear_layer_component"],[141,2,1,"","add_mix_column_component"],[141,2,1,"","add_permutation_component"],[141,2,1,"","add_reverse_component"],[141,2,1,"","add_rotate_component"],[141,2,1,"","add_round"],[141,2,1,"","add_round_key_output_component"],[141,2,1,"","add_round_output_component"],[141,2,1,"","add_shift_rows_component"],[141,2,1,"","add_sigma_component"],[141,2,1,"","add_suffix_to_components"],[141,2,1,"","add_theta_keccak_component"],[141,2,1,"","add_theta_xoodoo_component"],[141,2,1,"","add_variable_rotate_component"],[141,2,1,"","add_variable_shift_component"],[141,2,1,"","add_word_permutation_component"],[141,2,1,"","algebraic_tests"],[141,2,1,"","analyze_cipher"],[141,2,1,"","as_python_dictionary"],[141,2,1,"","avalanche_probability_vectors"],[141,2,1,"","cipher_inverse"],[141,2,1,"","cipher_partial_inverse"],[141,2,1,"","component_analysis_tests"],[141,2,1,"","component_from"],[141,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[141,2,1,"","continuous_avalanche_factor"],[141,2,1,"","continuous_diffusion_factor"],[141,2,1,"","continuous_diffusion_tests"],[141,2,1,"","continuous_neutrality_measure_for_bit_j"],[141,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[141,2,1,"","convert_to_compound_xor_cipher"],[141,3,1,"","current_round"],[141,3,1,"","current_round_number"],[141,3,1,"","current_round_number_of_components"],[141,2,1,"","delete_generated_evaluate_c_shared_library"],[141,2,1,"","diffusion_tests"],[141,2,1,"","evaluate"],[141,2,1,"","evaluate_using_c"],[141,2,1,"","evaluate_vectorized"],[141,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[141,3,1,"","family_name"],[141,3,1,"","file_name"],[141,2,1,"","find_good_input_difference_for_neural_distinguisher"],[141,2,1,"","find_impossible_property"],[141,2,1,"","generate_bit_based_c_code"],[141,2,1,"","generate_csv_report"],[141,2,1,"","generate_evaluate_c_code_shared_library"],[141,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[141,2,1,"","generate_word_based_c_code"],[141,2,1,"","get_all_components"],[141,2,1,"","get_all_components_ids"],[141,2,1,"","get_all_inputs_bit_positions"],[141,2,1,"","get_component_from_id"],[141,2,1,"","get_components_in_round"],[141,2,1,"","get_current_component_id"],[141,2,1,"","get_model"],[141,2,1,"","get_number_of_components_in_round"],[141,2,1,"","get_partial_cipher"],[141,2,1,"","get_round_from_component_id"],[141,2,1,"","get_sizes_of_components_by_type"],[141,3,1,"","id"],[141,2,1,"","impossible_differential_search"],[141,3,1,"","inputs"],[141,3,1,"","inputs_bit_size"],[141,2,1,"","inputs_size_to_dict"],[141,2,1,"","is_algebraically_secure"],[141,2,1,"","is_andrx"],[141,2,1,"","is_arx"],[141,2,1,"","is_power_of_2_word_based"],[141,2,1,"","is_shift_arx"],[141,2,1,"","is_spn"],[141,2,1,"","make_cipher_id"],[141,2,1,"","make_file_name"],[141,2,1,"","neural_network_blackbox_distinguisher_tests"],[141,2,1,"","neural_network_differential_distinguisher_tests"],[141,3,1,"","number_of_rounds"],[141,3,1,"","output_bit_size"],[141,2,1,"","polynomial_system"],[141,2,1,"","polynomial_system_at_round"],[141,2,1,"","print"],[141,2,1,"","print_as_python_dictionary"],[141,2,1,"","print_as_python_dictionary_to_file"],[141,2,1,"","print_component_analysis_as_radar_charts"],[141,2,1,"","print_evaluation_python_code"],[141,2,1,"","print_evaluation_python_code_to_file"],[141,2,1,"","print_input_information"],[141,3,1,"","reference_code"],[141,2,1,"","regs_initialization"],[141,2,1,"","remove_key_schedule"],[141,2,1,"","remove_round_component"],[141,2,1,"","remove_round_component_from_id"],[141,2,1,"","round_function"],[141,3,1,"","rounds"],[141,3,1,"","rounds_as_list"],[141,2,1,"","run_autond_pipeline"],[141,2,1,"","set_file_name"],[141,2,1,"","set_id"],[141,2,1,"","set_inputs"],[141,2,1,"","sort_cipher"],[141,2,1,"","test_against_reference_code"],[141,2,1,"","test_vector_check"],[141,2,1,"","train_gohr_neural_distinguisher"],[141,2,1,"","train_neural_distinguisher"],[141,3,1,"","type"],[141,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bivium_stream_cipher":[[142,1,1,"","BiviumStreamCipher"]],"ciphers.stream_ciphers.bivium_stream_cipher.BiviumStreamCipher":[[142,2,1,"","add_AND_component"],[142,2,1,"","add_FSR_component"],[142,2,1,"","add_MODADD_component"],[142,2,1,"","add_MODSUB_component"],[142,2,1,"","add_NOT_component"],[142,2,1,"","add_OR_component"],[142,2,1,"","add_SBOX_component"],[142,2,1,"","add_SHIFT_component"],[142,2,1,"","add_XOR_component"],[142,2,1,"","add_cipher_output_component"],[142,2,1,"","add_concatenate_component"],[142,2,1,"","add_constant_component"],[142,2,1,"","add_intermediate_output_component"],[142,2,1,"","add_linear_layer_component"],[142,2,1,"","add_mix_column_component"],[142,2,1,"","add_permutation_component"],[142,2,1,"","add_reverse_component"],[142,2,1,"","add_rotate_component"],[142,2,1,"","add_round"],[142,2,1,"","add_round_key_output_component"],[142,2,1,"","add_round_output_component"],[142,2,1,"","add_shift_rows_component"],[142,2,1,"","add_sigma_component"],[142,2,1,"","add_suffix_to_components"],[142,2,1,"","add_theta_keccak_component"],[142,2,1,"","add_theta_xoodoo_component"],[142,2,1,"","add_variable_rotate_component"],[142,2,1,"","add_variable_shift_component"],[142,2,1,"","add_word_permutation_component"],[142,2,1,"","algebraic_tests"],[142,2,1,"","analyze_cipher"],[142,2,1,"","as_python_dictionary"],[142,2,1,"","avalanche_probability_vectors"],[142,2,1,"","bivium_key_stream"],[142,2,1,"","bivium_state_initialization"],[142,2,1,"","cipher_inverse"],[142,2,1,"","cipher_partial_inverse"],[142,2,1,"","component_analysis_tests"],[142,2,1,"","component_from"],[142,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[142,2,1,"","continuous_avalanche_factor"],[142,2,1,"","continuous_diffusion_factor"],[142,2,1,"","continuous_diffusion_tests"],[142,2,1,"","continuous_neutrality_measure_for_bit_j"],[142,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[142,2,1,"","convert_to_compound_xor_cipher"],[142,3,1,"","current_round"],[142,3,1,"","current_round_number"],[142,3,1,"","current_round_number_of_components"],[142,2,1,"","delete_generated_evaluate_c_shared_library"],[142,2,1,"","diffusion_tests"],[142,2,1,"","evaluate"],[142,2,1,"","evaluate_using_c"],[142,2,1,"","evaluate_vectorized"],[142,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[142,3,1,"","family_name"],[142,3,1,"","file_name"],[142,2,1,"","find_good_input_difference_for_neural_distinguisher"],[142,2,1,"","find_impossible_property"],[142,2,1,"","generate_bit_based_c_code"],[142,2,1,"","generate_csv_report"],[142,2,1,"","generate_evaluate_c_code_shared_library"],[142,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[142,2,1,"","generate_word_based_c_code"],[142,2,1,"","get_all_components"],[142,2,1,"","get_all_components_ids"],[142,2,1,"","get_all_inputs_bit_positions"],[142,2,1,"","get_component_from_id"],[142,2,1,"","get_components_in_round"],[142,2,1,"","get_current_component_id"],[142,2,1,"","get_model"],[142,2,1,"","get_number_of_components_in_round"],[142,2,1,"","get_partial_cipher"],[142,2,1,"","get_round_from_component_id"],[142,2,1,"","get_sizes_of_components_by_type"],[142,3,1,"","id"],[142,2,1,"","impossible_differential_search"],[142,3,1,"","inputs"],[142,3,1,"","inputs_bit_size"],[142,2,1,"","inputs_size_to_dict"],[142,2,1,"","is_algebraically_secure"],[142,2,1,"","is_andrx"],[142,2,1,"","is_arx"],[142,2,1,"","is_power_of_2_word_based"],[142,2,1,"","is_shift_arx"],[142,2,1,"","is_spn"],[142,2,1,"","make_cipher_id"],[142,2,1,"","make_file_name"],[142,2,1,"","neural_network_blackbox_distinguisher_tests"],[142,2,1,"","neural_network_differential_distinguisher_tests"],[142,3,1,"","number_of_rounds"],[142,3,1,"","output_bit_size"],[142,2,1,"","polynomial_system"],[142,2,1,"","polynomial_system_at_round"],[142,2,1,"","print"],[142,2,1,"","print_as_python_dictionary"],[142,2,1,"","print_as_python_dictionary_to_file"],[142,2,1,"","print_component_analysis_as_radar_charts"],[142,2,1,"","print_evaluation_python_code"],[142,2,1,"","print_evaluation_python_code_to_file"],[142,2,1,"","print_input_information"],[142,3,1,"","reference_code"],[142,2,1,"","remove_key_schedule"],[142,2,1,"","remove_round_component"],[142,2,1,"","remove_round_component_from_id"],[142,3,1,"","rounds"],[142,3,1,"","rounds_as_list"],[142,2,1,"","run_autond_pipeline"],[142,2,1,"","set_file_name"],[142,2,1,"","set_id"],[142,2,1,"","set_inputs"],[142,2,1,"","sort_cipher"],[142,2,1,"","test_against_reference_code"],[142,2,1,"","test_vector_check"],[142,2,1,"","train_gohr_neural_distinguisher"],[142,2,1,"","train_neural_distinguisher"],[142,3,1,"","type"],[142,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0":[[143,1,1,"","BluetoothStreamCipherE0"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0.BluetoothStreamCipherE0":[[143,2,1,"","add_AND_component"],[143,2,1,"","add_FSR_component"],[143,2,1,"","add_MODADD_component"],[143,2,1,"","add_MODSUB_component"],[143,2,1,"","add_NOT_component"],[143,2,1,"","add_OR_component"],[143,2,1,"","add_SBOX_component"],[143,2,1,"","add_SHIFT_component"],[143,2,1,"","add_XOR_component"],[143,2,1,"","add_cipher_output_component"],[143,2,1,"","add_concatenate_component"],[143,2,1,"","add_constant_component"],[143,2,1,"","add_intermediate_output_component"],[143,2,1,"","add_linear_layer_component"],[143,2,1,"","add_mix_column_component"],[143,2,1,"","add_permutation_component"],[143,2,1,"","add_reverse_component"],[143,2,1,"","add_rotate_component"],[143,2,1,"","add_round"],[143,2,1,"","add_round_key_output_component"],[143,2,1,"","add_round_output_component"],[143,2,1,"","add_shift_rows_component"],[143,2,1,"","add_sigma_component"],[143,2,1,"","add_suffix_to_components"],[143,2,1,"","add_theta_keccak_component"],[143,2,1,"","add_theta_xoodoo_component"],[143,2,1,"","add_variable_rotate_component"],[143,2,1,"","add_variable_shift_component"],[143,2,1,"","add_word_permutation_component"],[143,2,1,"","algebraic_tests"],[143,2,1,"","analyze_cipher"],[143,2,1,"","as_python_dictionary"],[143,2,1,"","avalanche_probability_vectors"],[143,2,1,"","cipher_inverse"],[143,2,1,"","cipher_partial_inverse"],[143,2,1,"","component_analysis_tests"],[143,2,1,"","component_from"],[143,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[143,2,1,"","continuous_avalanche_factor"],[143,2,1,"","continuous_diffusion_factor"],[143,2,1,"","continuous_diffusion_tests"],[143,2,1,"","continuous_neutrality_measure_for_bit_j"],[143,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[143,2,1,"","convert_to_compound_xor_cipher"],[143,3,1,"","current_round"],[143,3,1,"","current_round_number"],[143,3,1,"","current_round_number_of_components"],[143,2,1,"","delete_generated_evaluate_c_shared_library"],[143,2,1,"","diffusion_tests"],[143,2,1,"","e0_keystream"],[143,2,1,"","e0_nonlinear_function"],[143,2,1,"","evaluate"],[143,2,1,"","evaluate_using_c"],[143,2,1,"","evaluate_vectorized"],[143,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[143,3,1,"","family_name"],[143,3,1,"","file_name"],[143,2,1,"","find_good_input_difference_for_neural_distinguisher"],[143,2,1,"","find_impossible_property"],[143,2,1,"","generate_bit_based_c_code"],[143,2,1,"","generate_csv_report"],[143,2,1,"","generate_evaluate_c_code_shared_library"],[143,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[143,2,1,"","generate_word_based_c_code"],[143,2,1,"","get_all_components"],[143,2,1,"","get_all_components_ids"],[143,2,1,"","get_all_inputs_bit_positions"],[143,2,1,"","get_component_from_id"],[143,2,1,"","get_components_in_round"],[143,2,1,"","get_current_component_id"],[143,2,1,"","get_model"],[143,2,1,"","get_number_of_components_in_round"],[143,2,1,"","get_partial_cipher"],[143,2,1,"","get_round_from_component_id"],[143,2,1,"","get_sizes_of_components_by_type"],[143,3,1,"","id"],[143,2,1,"","impossible_differential_search"],[143,3,1,"","inputs"],[143,3,1,"","inputs_bit_size"],[143,2,1,"","inputs_size_to_dict"],[143,2,1,"","is_algebraically_secure"],[143,2,1,"","is_andrx"],[143,2,1,"","is_arx"],[143,2,1,"","is_power_of_2_word_based"],[143,2,1,"","is_shift_arx"],[143,2,1,"","is_spn"],[143,2,1,"","make_cipher_id"],[143,2,1,"","make_file_name"],[143,2,1,"","neural_network_blackbox_distinguisher_tests"],[143,2,1,"","neural_network_differential_distinguisher_tests"],[143,3,1,"","number_of_rounds"],[143,3,1,"","output_bit_size"],[143,2,1,"","polynomial_system"],[143,2,1,"","polynomial_system_at_round"],[143,2,1,"","print"],[143,2,1,"","print_as_python_dictionary"],[143,2,1,"","print_as_python_dictionary_to_file"],[143,2,1,"","print_component_analysis_as_radar_charts"],[143,2,1,"","print_evaluation_python_code"],[143,2,1,"","print_evaluation_python_code_to_file"],[143,2,1,"","print_input_information"],[143,3,1,"","reference_code"],[143,2,1,"","remove_key_schedule"],[143,2,1,"","remove_round_component"],[143,2,1,"","remove_round_component_from_id"],[143,3,1,"","rounds"],[143,3,1,"","rounds_as_list"],[143,2,1,"","run_autond_pipeline"],[143,2,1,"","set_file_name"],[143,2,1,"","set_id"],[143,2,1,"","set_inputs"],[143,2,1,"","sort_cipher"],[143,2,1,"","test_against_reference_code"],[143,2,1,"","test_vector_check"],[143,2,1,"","train_gohr_neural_distinguisher"],[143,2,1,"","train_neural_distinguisher"],[143,3,1,"","type"],[143,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.chacha_stream_cipher":[[144,1,1,"","ChachaStreamCipher"],[144,4,1,"","init_state_plaintext"]],"ciphers.stream_ciphers.chacha_stream_cipher.ChachaStreamCipher":[[144,2,1,"","add_AND_component"],[144,2,1,"","add_FSR_component"],[144,2,1,"","add_MODADD_component"],[144,2,1,"","add_MODSUB_component"],[144,2,1,"","add_NOT_component"],[144,2,1,"","add_OR_component"],[144,2,1,"","add_SBOX_component"],[144,2,1,"","add_SHIFT_component"],[144,2,1,"","add_XOR_component"],[144,2,1,"","add_cipher_output_component"],[144,2,1,"","add_concatenate_component"],[144,2,1,"","add_constant_component"],[144,2,1,"","add_intermediate_output_component"],[144,2,1,"","add_linear_layer_component"],[144,2,1,"","add_mix_column_component"],[144,2,1,"","add_permutation_component"],[144,2,1,"","add_reverse_component"],[144,2,1,"","add_rotate_component"],[144,2,1,"","add_round"],[144,2,1,"","add_round_key_output_component"],[144,2,1,"","add_round_output_component"],[144,2,1,"","add_shift_rows_component"],[144,2,1,"","add_sigma_component"],[144,2,1,"","add_suffix_to_components"],[144,2,1,"","add_theta_keccak_component"],[144,2,1,"","add_theta_xoodoo_component"],[144,2,1,"","add_variable_rotate_component"],[144,2,1,"","add_variable_shift_component"],[144,2,1,"","add_word_permutation_component"],[144,2,1,"","algebraic_tests"],[144,2,1,"","analyze_cipher"],[144,2,1,"","as_python_dictionary"],[144,2,1,"","avalanche_probability_vectors"],[144,2,1,"","bottom_half_quarter_round"],[144,2,1,"","cipher_inverse"],[144,2,1,"","cipher_partial_inverse"],[144,2,1,"","component_analysis_tests"],[144,2,1,"","component_from"],[144,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[144,2,1,"","continuous_avalanche_factor"],[144,2,1,"","continuous_diffusion_factor"],[144,2,1,"","continuous_diffusion_tests"],[144,2,1,"","continuous_neutrality_measure_for_bit_j"],[144,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[144,2,1,"","convert_to_compound_xor_cipher"],[144,3,1,"","current_round"],[144,3,1,"","current_round_number"],[144,3,1,"","current_round_number_of_components"],[144,2,1,"","delete_generated_evaluate_c_shared_library"],[144,2,1,"","diffusion_tests"],[144,2,1,"","evaluate"],[144,2,1,"","evaluate_using_c"],[144,2,1,"","evaluate_vectorized"],[144,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[144,3,1,"","family_name"],[144,3,1,"","file_name"],[144,2,1,"","find_good_input_difference_for_neural_distinguisher"],[144,2,1,"","find_impossible_property"],[144,2,1,"","generate_bit_based_c_code"],[144,2,1,"","generate_csv_report"],[144,2,1,"","generate_evaluate_c_code_shared_library"],[144,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[144,2,1,"","generate_word_based_c_code"],[144,2,1,"","get_all_components"],[144,2,1,"","get_all_components_ids"],[144,2,1,"","get_all_inputs_bit_positions"],[144,2,1,"","get_component_from_id"],[144,2,1,"","get_components_in_round"],[144,2,1,"","get_current_component_id"],[144,2,1,"","get_model"],[144,2,1,"","get_number_of_components_in_round"],[144,2,1,"","get_partial_cipher"],[144,2,1,"","get_round_from_component_id"],[144,2,1,"","get_sizes_of_components_by_type"],[144,3,1,"","id"],[144,2,1,"","impossible_differential_search"],[144,3,1,"","inputs"],[144,3,1,"","inputs_bit_size"],[144,2,1,"","inputs_size_to_dict"],[144,2,1,"","is_algebraically_secure"],[144,2,1,"","is_andrx"],[144,2,1,"","is_arx"],[144,2,1,"","is_power_of_2_word_based"],[144,2,1,"","is_shift_arx"],[144,2,1,"","is_spn"],[144,2,1,"","make_cipher_id"],[144,2,1,"","make_file_name"],[144,2,1,"","neural_network_blackbox_distinguisher_tests"],[144,2,1,"","neural_network_differential_distinguisher_tests"],[144,3,1,"","number_of_rounds"],[144,3,1,"","output_bit_size"],[144,2,1,"","polynomial_system"],[144,2,1,"","polynomial_system_at_round"],[144,2,1,"","print"],[144,2,1,"","print_as_python_dictionary"],[144,2,1,"","print_as_python_dictionary_to_file"],[144,2,1,"","print_component_analysis_as_radar_charts"],[144,2,1,"","print_evaluation_python_code"],[144,2,1,"","print_evaluation_python_code_to_file"],[144,2,1,"","print_input_information"],[144,3,1,"","reference_code"],[144,2,1,"","remove_key_schedule"],[144,2,1,"","remove_round_component"],[144,2,1,"","remove_round_component_from_id"],[144,3,1,"","rounds"],[144,3,1,"","rounds_as_list"],[144,2,1,"","run_autond_pipeline"],[144,2,1,"","set_file_name"],[144,2,1,"","set_id"],[144,2,1,"","set_inputs"],[144,2,1,"","sort_cipher"],[144,2,1,"","test_against_reference_code"],[144,2,1,"","test_vector_check"],[144,2,1,"","top_half_quarter_round"],[144,2,1,"","train_gohr_neural_distinguisher"],[144,2,1,"","train_neural_distinguisher"],[144,3,1,"","type"],[144,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.snow3g_stream_cipher":[[145,1,1,"","Snow3GStreamCipher"]],"ciphers.stream_ciphers.snow3g_stream_cipher.Snow3GStreamCipher":[[145,2,1,"","DIValpha"],[145,2,1,"","MULalpha"],[145,2,1,"","MULx"],[145,2,1,"","MULxPOW"],[145,2,1,"","S1"],[145,2,1,"","S2"],[145,2,1,"","add_AND_component"],[145,2,1,"","add_FSR_component"],[145,2,1,"","add_MODADD_component"],[145,2,1,"","add_MODSUB_component"],[145,2,1,"","add_NOT_component"],[145,2,1,"","add_OR_component"],[145,2,1,"","add_SBOX_component"],[145,2,1,"","add_SHIFT_component"],[145,2,1,"","add_XOR_component"],[145,2,1,"","add_cipher_output_component"],[145,2,1,"","add_concatenate_component"],[145,2,1,"","add_constant_component"],[145,2,1,"","add_intermediate_output_component"],[145,2,1,"","add_linear_layer_component"],[145,2,1,"","add_mix_column_component"],[145,2,1,"","add_permutation_component"],[145,2,1,"","add_reverse_component"],[145,2,1,"","add_rotate_component"],[145,2,1,"","add_round"],[145,2,1,"","add_round_key_output_component"],[145,2,1,"","add_round_output_component"],[145,2,1,"","add_shift_rows_component"],[145,2,1,"","add_sigma_component"],[145,2,1,"","add_suffix_to_components"],[145,2,1,"","add_theta_keccak_component"],[145,2,1,"","add_theta_xoodoo_component"],[145,2,1,"","add_variable_rotate_component"],[145,2,1,"","add_variable_shift_component"],[145,2,1,"","add_word_permutation_component"],[145,2,1,"","algebraic_tests"],[145,2,1,"","analyze_cipher"],[145,2,1,"","as_python_dictionary"],[145,2,1,"","avalanche_probability_vectors"],[145,2,1,"","cipher_inverse"],[145,2,1,"","cipher_partial_inverse"],[145,2,1,"","clock_fsm"],[145,2,1,"","clock_lfsr"],[145,2,1,"","clock_lfsr_initialization_mode"],[145,2,1,"","component_analysis_tests"],[145,2,1,"","component_from"],[145,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[145,2,1,"","continuous_avalanche_factor"],[145,2,1,"","continuous_diffusion_factor"],[145,2,1,"","continuous_diffusion_tests"],[145,2,1,"","continuous_neutrality_measure_for_bit_j"],[145,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[145,2,1,"","convert_to_compound_xor_cipher"],[145,2,1,"","create_alpha_state"],[145,3,1,"","current_round"],[145,3,1,"","current_round_number"],[145,3,1,"","current_round_number_of_components"],[145,2,1,"","delete_generated_evaluate_c_shared_library"],[145,2,1,"","diffusion_tests"],[145,2,1,"","evaluate"],[145,2,1,"","evaluate_using_c"],[145,2,1,"","evaluate_vectorized"],[145,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[145,3,1,"","family_name"],[145,3,1,"","file_name"],[145,2,1,"","find_good_input_difference_for_neural_distinguisher"],[145,2,1,"","find_impossible_property"],[145,2,1,"","generate_bit_based_c_code"],[145,2,1,"","generate_csv_report"],[145,2,1,"","generate_evaluate_c_code_shared_library"],[145,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[145,2,1,"","generate_word_based_c_code"],[145,2,1,"","get_all_components"],[145,2,1,"","get_all_components_ids"],[145,2,1,"","get_all_inputs_bit_positions"],[145,2,1,"","get_component_from_id"],[145,2,1,"","get_components_in_round"],[145,2,1,"","get_current_component_id"],[145,2,1,"","get_model"],[145,2,1,"","get_number_of_components_in_round"],[145,2,1,"","get_partial_cipher"],[145,2,1,"","get_round_from_component_id"],[145,2,1,"","get_sizes_of_components_by_type"],[145,3,1,"","id"],[145,2,1,"","impossible_differential_search"],[145,2,1,"","initial_filling_lfsr_fsm"],[145,3,1,"","inputs"],[145,3,1,"","inputs_bit_size"],[145,2,1,"","inputs_size_to_dict"],[145,2,1,"","is_algebraically_secure"],[145,2,1,"","is_andrx"],[145,2,1,"","is_arx"],[145,2,1,"","is_power_of_2_word_based"],[145,2,1,"","is_shift_arx"],[145,2,1,"","is_spn"],[145,2,1,"","make_cipher_id"],[145,2,1,"","make_file_name"],[145,2,1,"","neural_network_blackbox_distinguisher_tests"],[145,2,1,"","neural_network_differential_distinguisher_tests"],[145,3,1,"","number_of_rounds"],[145,3,1,"","output_bit_size"],[145,2,1,"","polynomial_system"],[145,2,1,"","polynomial_system_at_round"],[145,2,1,"","print"],[145,2,1,"","print_as_python_dictionary"],[145,2,1,"","print_as_python_dictionary_to_file"],[145,2,1,"","print_component_analysis_as_radar_charts"],[145,2,1,"","print_evaluation_python_code"],[145,2,1,"","print_evaluation_python_code_to_file"],[145,2,1,"","print_input_information"],[145,3,1,"","reference_code"],[145,2,1,"","remove_key_schedule"],[145,2,1,"","remove_round_component"],[145,2,1,"","remove_round_component_from_id"],[145,3,1,"","rounds"],[145,3,1,"","rounds_as_list"],[145,2,1,"","run_autond_pipeline"],[145,2,1,"","set_file_name"],[145,2,1,"","set_id"],[145,2,1,"","set_inputs"],[145,2,1,"","snow3g_key_stream"],[145,2,1,"","snow3g_state_initialization"],[145,2,1,"","sort_cipher"],[145,2,1,"","test_against_reference_code"],[145,2,1,"","test_vector_check"],[145,2,1,"","train_gohr_neural_distinguisher"],[145,2,1,"","train_neural_distinguisher"],[145,3,1,"","type"],[145,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.trivium_stream_cipher":[[146,1,1,"","TriviumStreamCipher"]],"ciphers.stream_ciphers.trivium_stream_cipher.TriviumStreamCipher":[[146,2,1,"","add_AND_component"],[146,2,1,"","add_FSR_component"],[146,2,1,"","add_MODADD_component"],[146,2,1,"","add_MODSUB_component"],[146,2,1,"","add_NOT_component"],[146,2,1,"","add_OR_component"],[146,2,1,"","add_SBOX_component"],[146,2,1,"","add_SHIFT_component"],[146,2,1,"","add_XOR_component"],[146,2,1,"","add_cipher_output_component"],[146,2,1,"","add_concatenate_component"],[146,2,1,"","add_constant_component"],[146,2,1,"","add_intermediate_output_component"],[146,2,1,"","add_linear_layer_component"],[146,2,1,"","add_mix_column_component"],[146,2,1,"","add_permutation_component"],[146,2,1,"","add_reverse_component"],[146,2,1,"","add_rotate_component"],[146,2,1,"","add_round"],[146,2,1,"","add_round_key_output_component"],[146,2,1,"","add_round_output_component"],[146,2,1,"","add_shift_rows_component"],[146,2,1,"","add_sigma_component"],[146,2,1,"","add_suffix_to_components"],[146,2,1,"","add_theta_keccak_component"],[146,2,1,"","add_theta_xoodoo_component"],[146,2,1,"","add_variable_rotate_component"],[146,2,1,"","add_variable_shift_component"],[146,2,1,"","add_word_permutation_component"],[146,2,1,"","algebraic_tests"],[146,2,1,"","analyze_cipher"],[146,2,1,"","as_python_dictionary"],[146,2,1,"","avalanche_probability_vectors"],[146,2,1,"","cipher_inverse"],[146,2,1,"","cipher_partial_inverse"],[146,2,1,"","component_analysis_tests"],[146,2,1,"","component_from"],[146,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[146,2,1,"","continuous_avalanche_factor"],[146,2,1,"","continuous_diffusion_factor"],[146,2,1,"","continuous_diffusion_tests"],[146,2,1,"","continuous_neutrality_measure_for_bit_j"],[146,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[146,2,1,"","convert_to_compound_xor_cipher"],[146,3,1,"","current_round"],[146,3,1,"","current_round_number"],[146,3,1,"","current_round_number_of_components"],[146,2,1,"","delete_generated_evaluate_c_shared_library"],[146,2,1,"","diffusion_tests"],[146,2,1,"","evaluate"],[146,2,1,"","evaluate_using_c"],[146,2,1,"","evaluate_vectorized"],[146,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[146,3,1,"","family_name"],[146,3,1,"","file_name"],[146,2,1,"","find_good_input_difference_for_neural_distinguisher"],[146,2,1,"","find_impossible_property"],[146,2,1,"","generate_bit_based_c_code"],[146,2,1,"","generate_csv_report"],[146,2,1,"","generate_evaluate_c_code_shared_library"],[146,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[146,2,1,"","generate_word_based_c_code"],[146,2,1,"","get_all_components"],[146,2,1,"","get_all_components_ids"],[146,2,1,"","get_all_inputs_bit_positions"],[146,2,1,"","get_component_from_id"],[146,2,1,"","get_components_in_round"],[146,2,1,"","get_current_component_id"],[146,2,1,"","get_keystream_bit_len"],[146,2,1,"","get_model"],[146,2,1,"","get_number_of_components_in_round"],[146,2,1,"","get_partial_cipher"],[146,2,1,"","get_round_from_component_id"],[146,2,1,"","get_sizes_of_components_by_type"],[146,3,1,"","id"],[146,2,1,"","impossible_differential_search"],[146,3,1,"","inputs"],[146,3,1,"","inputs_bit_size"],[146,2,1,"","inputs_size_to_dict"],[146,2,1,"","is_algebraically_secure"],[146,2,1,"","is_andrx"],[146,2,1,"","is_arx"],[146,2,1,"","is_power_of_2_word_based"],[146,2,1,"","is_shift_arx"],[146,2,1,"","is_spn"],[146,2,1,"","make_cipher_id"],[146,2,1,"","make_file_name"],[146,2,1,"","neural_network_blackbox_distinguisher_tests"],[146,2,1,"","neural_network_differential_distinguisher_tests"],[146,3,1,"","number_of_rounds"],[146,3,1,"","output_bit_size"],[146,2,1,"","polynomial_system"],[146,2,1,"","polynomial_system_at_round"],[146,2,1,"","print"],[146,2,1,"","print_as_python_dictionary"],[146,2,1,"","print_as_python_dictionary_to_file"],[146,2,1,"","print_component_analysis_as_radar_charts"],[146,2,1,"","print_evaluation_python_code"],[146,2,1,"","print_evaluation_python_code_to_file"],[146,2,1,"","print_input_information"],[146,3,1,"","reference_code"],[146,2,1,"","remove_key_schedule"],[146,2,1,"","remove_round_component"],[146,2,1,"","remove_round_component_from_id"],[146,3,1,"","rounds"],[146,3,1,"","rounds_as_list"],[146,2,1,"","run_autond_pipeline"],[146,2,1,"","set_file_name"],[146,2,1,"","set_id"],[146,2,1,"","set_inputs"],[146,2,1,"","sort_cipher"],[146,2,1,"","test_against_reference_code"],[146,2,1,"","test_vector_check"],[146,2,1,"","train_gohr_neural_distinguisher"],[146,2,1,"","train_neural_distinguisher"],[146,2,1,"","trivium_key_stream"],[146,2,1,"","trivium_state_initialization"],[146,3,1,"","type"],[146,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.zuc_stream_cipher":[[147,1,1,"","ZucStreamCipher"]],"ciphers.stream_ciphers.zuc_stream_cipher.ZucStreamCipher":[[147,2,1,"","add_AND_component"],[147,2,1,"","add_FSR_component"],[147,2,1,"","add_MODADD_component"],[147,2,1,"","add_MODSUB_component"],[147,2,1,"","add_NOT_component"],[147,2,1,"","add_OR_component"],[147,2,1,"","add_SBOX_component"],[147,2,1,"","add_SHIFT_component"],[147,2,1,"","add_XOR_component"],[147,2,1,"","add_cipher_output_component"],[147,2,1,"","add_concatenate_component"],[147,2,1,"","add_constant_component"],[147,2,1,"","add_intermediate_output_component"],[147,2,1,"","add_linear_layer_component"],[147,2,1,"","add_mix_column_component"],[147,2,1,"","add_permutation_component"],[147,2,1,"","add_reverse_component"],[147,2,1,"","add_rotate_component"],[147,2,1,"","add_round"],[147,2,1,"","add_round_key_output_component"],[147,2,1,"","add_round_output_component"],[147,2,1,"","add_shift_rows_component"],[147,2,1,"","add_sigma_component"],[147,2,1,"","add_suffix_to_components"],[147,2,1,"","add_theta_keccak_component"],[147,2,1,"","add_theta_xoodoo_component"],[147,2,1,"","add_variable_rotate_component"],[147,2,1,"","add_variable_shift_component"],[147,2,1,"","add_word_permutation_component"],[147,2,1,"","algebraic_tests"],[147,2,1,"","analyze_cipher"],[147,2,1,"","as_python_dictionary"],[147,2,1,"","avalanche_probability_vectors"],[147,2,1,"","cipher_inverse"],[147,2,1,"","cipher_partial_inverse"],[147,2,1,"","clocking_lfsr"],[147,2,1,"","component_analysis_tests"],[147,2,1,"","component_from"],[147,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[147,2,1,"","continuous_avalanche_factor"],[147,2,1,"","continuous_diffusion_factor"],[147,2,1,"","continuous_diffusion_tests"],[147,2,1,"","continuous_neutrality_measure_for_bit_j"],[147,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[147,2,1,"","convert_to_compound_xor_cipher"],[147,3,1,"","current_round"],[147,3,1,"","current_round_number"],[147,3,1,"","current_round_number_of_components"],[147,2,1,"","delete_generated_evaluate_c_shared_library"],[147,2,1,"","diffusion_tests"],[147,2,1,"","evaluate"],[147,2,1,"","evaluate_using_c"],[147,2,1,"","evaluate_vectorized"],[147,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[147,3,1,"","family_name"],[147,3,1,"","file_name"],[147,2,1,"","find_good_input_difference_for_neural_distinguisher"],[147,2,1,"","find_impossible_property"],[147,2,1,"","generate_bit_based_c_code"],[147,2,1,"","generate_csv_report"],[147,2,1,"","generate_evaluate_c_code_shared_library"],[147,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[147,2,1,"","generate_word_based_c_code"],[147,2,1,"","get_all_components"],[147,2,1,"","get_all_components_ids"],[147,2,1,"","get_all_inputs_bit_positions"],[147,2,1,"","get_component_from_id"],[147,2,1,"","get_components_in_round"],[147,2,1,"","get_current_component_id"],[147,2,1,"","get_model"],[147,2,1,"","get_number_of_components_in_round"],[147,2,1,"","get_partial_cipher"],[147,2,1,"","get_round_from_component_id"],[147,2,1,"","get_sizes_of_components_by_type"],[147,3,1,"","id"],[147,2,1,"","impossible_differential_search"],[147,3,1,"","inputs"],[147,3,1,"","inputs_bit_size"],[147,2,1,"","inputs_size_to_dict"],[147,2,1,"","is_algebraically_secure"],[147,2,1,"","is_andrx"],[147,2,1,"","is_arx"],[147,2,1,"","is_power_of_2_word_based"],[147,2,1,"","is_shift_arx"],[147,2,1,"","is_spn"],[147,2,1,"","key_loading_to_lfsr"],[147,2,1,"","key_stream"],[147,2,1,"","lfsr_S_high_16bits"],[147,2,1,"","lfsr_S_low_16bits"],[147,2,1,"","lfsr_with_initialization_mode"],[147,2,1,"","linear_layer_rotation"],[147,2,1,"","linear_transform_L1"],[147,2,1,"","linear_transform_L2"],[147,2,1,"","make_cipher_id"],[147,2,1,"","make_file_name"],[147,2,1,"","neural_network_blackbox_distinguisher_tests"],[147,2,1,"","neural_network_differential_distinguisher_tests"],[147,3,1,"","number_of_rounds"],[147,3,1,"","output_bit_size"],[147,2,1,"","polynomial_system"],[147,2,1,"","polynomial_system_at_round"],[147,2,1,"","print"],[147,2,1,"","print_as_python_dictionary"],[147,2,1,"","print_as_python_dictionary_to_file"],[147,2,1,"","print_component_analysis_as_radar_charts"],[147,2,1,"","print_evaluation_python_code"],[147,2,1,"","print_evaluation_python_code_to_file"],[147,2,1,"","print_input_information"],[147,3,1,"","reference_code"],[147,2,1,"","remove_key_schedule"],[147,2,1,"","remove_round_component"],[147,2,1,"","remove_round_component_from_id"],[147,3,1,"","rounds"],[147,3,1,"","rounds_as_list"],[147,2,1,"","run_autond_pipeline"],[147,2,1,"","s_box_layer"],[147,2,1,"","set_file_name"],[147,2,1,"","set_id"],[147,2,1,"","set_inputs"],[147,2,1,"","sort_cipher"],[147,2,1,"","state_initialization"],[147,2,1,"","test_against_reference_code"],[147,2,1,"","test_vector_check"],[147,2,1,"","train_gohr_neural_distinguisher"],[147,2,1,"","train_neural_distinguisher"],[147,3,1,"","type"],[147,2,1,"","zero_correlation_linear_search"],[147,2,1,"","zuc_nonlinear_F"]],"ciphers.toys":[[148,0,0,"-","toyspn1"],[149,0,0,"-","toyspn2"]],"ciphers.toys.toyspn1":[[148,1,1,"","ToySPN1"]],"ciphers.toys.toyspn1.ToySPN1":[[148,2,1,"","add_AND_component"],[148,2,1,"","add_FSR_component"],[148,2,1,"","add_MODADD_component"],[148,2,1,"","add_MODSUB_component"],[148,2,1,"","add_NOT_component"],[148,2,1,"","add_OR_component"],[148,2,1,"","add_SBOX_component"],[148,2,1,"","add_SHIFT_component"],[148,2,1,"","add_XOR_component"],[148,2,1,"","add_cipher_output_component"],[148,2,1,"","add_concatenate_component"],[148,2,1,"","add_constant_component"],[148,2,1,"","add_intermediate_output_component"],[148,2,1,"","add_linear_layer_component"],[148,2,1,"","add_mix_column_component"],[148,2,1,"","add_permutation_component"],[148,2,1,"","add_reverse_component"],[148,2,1,"","add_rotate_component"],[148,2,1,"","add_round"],[148,2,1,"","add_round_key_output_component"],[148,2,1,"","add_round_output_component"],[148,2,1,"","add_shift_rows_component"],[148,2,1,"","add_sigma_component"],[148,2,1,"","add_suffix_to_components"],[148,2,1,"","add_theta_keccak_component"],[148,2,1,"","add_theta_xoodoo_component"],[148,2,1,"","add_variable_rotate_component"],[148,2,1,"","add_variable_shift_component"],[148,2,1,"","add_word_permutation_component"],[148,2,1,"","algebraic_tests"],[148,2,1,"","analyze_cipher"],[148,2,1,"","as_python_dictionary"],[148,2,1,"","avalanche_probability_vectors"],[148,2,1,"","cipher_inverse"],[148,2,1,"","cipher_partial_inverse"],[148,2,1,"","component_analysis_tests"],[148,2,1,"","component_from"],[148,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[148,2,1,"","continuous_avalanche_factor"],[148,2,1,"","continuous_diffusion_factor"],[148,2,1,"","continuous_diffusion_tests"],[148,2,1,"","continuous_neutrality_measure_for_bit_j"],[148,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[148,2,1,"","convert_to_compound_xor_cipher"],[148,3,1,"","current_round"],[148,3,1,"","current_round_number"],[148,3,1,"","current_round_number_of_components"],[148,2,1,"","delete_generated_evaluate_c_shared_library"],[148,2,1,"","diffusion_tests"],[148,2,1,"","evaluate"],[148,2,1,"","evaluate_using_c"],[148,2,1,"","evaluate_vectorized"],[148,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[148,3,1,"","family_name"],[148,3,1,"","file_name"],[148,2,1,"","find_good_input_difference_for_neural_distinguisher"],[148,2,1,"","find_impossible_property"],[148,2,1,"","generate_bit_based_c_code"],[148,2,1,"","generate_csv_report"],[148,2,1,"","generate_evaluate_c_code_shared_library"],[148,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[148,2,1,"","generate_word_based_c_code"],[148,2,1,"","get_all_components"],[148,2,1,"","get_all_components_ids"],[148,2,1,"","get_all_inputs_bit_positions"],[148,2,1,"","get_component_from_id"],[148,2,1,"","get_components_in_round"],[148,2,1,"","get_current_component_id"],[148,2,1,"","get_model"],[148,2,1,"","get_number_of_components_in_round"],[148,2,1,"","get_partial_cipher"],[148,2,1,"","get_round_from_component_id"],[148,2,1,"","get_sizes_of_components_by_type"],[148,3,1,"","id"],[148,2,1,"","impossible_differential_search"],[148,3,1,"","inputs"],[148,3,1,"","inputs_bit_size"],[148,2,1,"","inputs_size_to_dict"],[148,2,1,"","is_algebraically_secure"],[148,2,1,"","is_andrx"],[148,2,1,"","is_arx"],[148,2,1,"","is_power_of_2_word_based"],[148,2,1,"","is_shift_arx"],[148,2,1,"","is_spn"],[148,2,1,"","make_cipher_id"],[148,2,1,"","make_file_name"],[148,2,1,"","neural_network_blackbox_distinguisher_tests"],[148,2,1,"","neural_network_differential_distinguisher_tests"],[148,3,1,"","number_of_rounds"],[148,3,1,"","output_bit_size"],[148,2,1,"","polynomial_system"],[148,2,1,"","polynomial_system_at_round"],[148,2,1,"","print"],[148,2,1,"","print_as_python_dictionary"],[148,2,1,"","print_as_python_dictionary_to_file"],[148,2,1,"","print_component_analysis_as_radar_charts"],[148,2,1,"","print_evaluation_python_code"],[148,2,1,"","print_evaluation_python_code_to_file"],[148,2,1,"","print_input_information"],[148,3,1,"","reference_code"],[148,2,1,"","remove_key_schedule"],[148,2,1,"","remove_round_component"],[148,2,1,"","remove_round_component_from_id"],[148,3,1,"","rounds"],[148,3,1,"","rounds_as_list"],[148,2,1,"","run_autond_pipeline"],[148,2,1,"","set_file_name"],[148,2,1,"","set_id"],[148,2,1,"","set_inputs"],[148,2,1,"","sort_cipher"],[148,2,1,"","test_against_reference_code"],[148,2,1,"","test_vector_check"],[148,2,1,"","train_gohr_neural_distinguisher"],[148,2,1,"","train_neural_distinguisher"],[148,3,1,"","type"],[148,2,1,"","zero_correlation_linear_search"]],"ciphers.toys.toyspn2":[[149,1,1,"","ToySPN2"]],"ciphers.toys.toyspn2.ToySPN2":[[149,2,1,"","add_AND_component"],[149,2,1,"","add_FSR_component"],[149,2,1,"","add_MODADD_component"],[149,2,1,"","add_MODSUB_component"],[149,2,1,"","add_NOT_component"],[149,2,1,"","add_OR_component"],[149,2,1,"","add_SBOX_component"],[149,2,1,"","add_SHIFT_component"],[149,2,1,"","add_XOR_component"],[149,2,1,"","add_cipher_output_component"],[149,2,1,"","add_concatenate_component"],[149,2,1,"","add_constant_component"],[149,2,1,"","add_intermediate_output_component"],[149,2,1,"","add_linear_layer_component"],[149,2,1,"","add_mix_column_component"],[149,2,1,"","add_permutation_component"],[149,2,1,"","add_reverse_component"],[149,2,1,"","add_rotate_component"],[149,2,1,"","add_round"],[149,2,1,"","add_round_key_output_component"],[149,2,1,"","add_round_output_component"],[149,2,1,"","add_shift_rows_component"],[149,2,1,"","add_sigma_component"],[149,2,1,"","add_suffix_to_components"],[149,2,1,"","add_theta_keccak_component"],[149,2,1,"","add_theta_xoodoo_component"],[149,2,1,"","add_variable_rotate_component"],[149,2,1,"","add_variable_shift_component"],[149,2,1,"","add_word_permutation_component"],[149,2,1,"","algebraic_tests"],[149,2,1,"","analyze_cipher"],[149,2,1,"","as_python_dictionary"],[149,2,1,"","avalanche_probability_vectors"],[149,2,1,"","cipher_inverse"],[149,2,1,"","cipher_partial_inverse"],[149,2,1,"","component_analysis_tests"],[149,2,1,"","component_from"],[149,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[149,2,1,"","continuous_avalanche_factor"],[149,2,1,"","continuous_diffusion_factor"],[149,2,1,"","continuous_diffusion_tests"],[149,2,1,"","continuous_neutrality_measure_for_bit_j"],[149,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[149,2,1,"","convert_to_compound_xor_cipher"],[149,3,1,"","current_round"],[149,3,1,"","current_round_number"],[149,3,1,"","current_round_number_of_components"],[149,2,1,"","delete_generated_evaluate_c_shared_library"],[149,2,1,"","diffusion_tests"],[149,2,1,"","evaluate"],[149,2,1,"","evaluate_using_c"],[149,2,1,"","evaluate_vectorized"],[149,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[149,3,1,"","family_name"],[149,3,1,"","file_name"],[149,2,1,"","find_good_input_difference_for_neural_distinguisher"],[149,2,1,"","find_impossible_property"],[149,2,1,"","generate_bit_based_c_code"],[149,2,1,"","generate_csv_report"],[149,2,1,"","generate_evaluate_c_code_shared_library"],[149,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[149,2,1,"","generate_word_based_c_code"],[149,2,1,"","get_all_components"],[149,2,1,"","get_all_components_ids"],[149,2,1,"","get_all_inputs_bit_positions"],[149,2,1,"","get_component_from_id"],[149,2,1,"","get_components_in_round"],[149,2,1,"","get_current_component_id"],[149,2,1,"","get_model"],[149,2,1,"","get_number_of_components_in_round"],[149,2,1,"","get_partial_cipher"],[149,2,1,"","get_round_from_component_id"],[149,2,1,"","get_sizes_of_components_by_type"],[149,3,1,"","id"],[149,2,1,"","impossible_differential_search"],[149,3,1,"","inputs"],[149,3,1,"","inputs_bit_size"],[149,2,1,"","inputs_size_to_dict"],[149,2,1,"","is_algebraically_secure"],[149,2,1,"","is_andrx"],[149,2,1,"","is_arx"],[149,2,1,"","is_power_of_2_word_based"],[149,2,1,"","is_shift_arx"],[149,2,1,"","is_spn"],[149,2,1,"","make_cipher_id"],[149,2,1,"","make_file_name"],[149,2,1,"","neural_network_blackbox_distinguisher_tests"],[149,2,1,"","neural_network_differential_distinguisher_tests"],[149,3,1,"","number_of_rounds"],[149,3,1,"","output_bit_size"],[149,2,1,"","polynomial_system"],[149,2,1,"","polynomial_system_at_round"],[149,2,1,"","print"],[149,2,1,"","print_as_python_dictionary"],[149,2,1,"","print_as_python_dictionary_to_file"],[149,2,1,"","print_component_analysis_as_radar_charts"],[149,2,1,"","print_evaluation_python_code"],[149,2,1,"","print_evaluation_python_code_to_file"],[149,2,1,"","print_input_information"],[149,3,1,"","reference_code"],[149,2,1,"","remove_key_schedule"],[149,2,1,"","remove_round_component"],[149,2,1,"","remove_round_component_from_id"],[149,3,1,"","rounds"],[149,3,1,"","rounds_as_list"],[149,2,1,"","run_autond_pipeline"],[149,2,1,"","set_file_name"],[149,2,1,"","set_id"],[149,2,1,"","set_inputs"],[149,2,1,"","sort_cipher"],[149,2,1,"","test_against_reference_code"],[149,2,1,"","test_vector_check"],[149,2,1,"","train_gohr_neural_distinguisher"],[149,2,1,"","train_neural_distinguisher"],[149,3,1,"","type"],[149,2,1,"","zero_correlation_linear_search"]],"component.Component":[[150,2,1,"","as_python_dictionary"],[150,2,1,"","check_output_size"],[150,3,1,"","description"],[150,2,1,"","get_graph_representation"],[150,3,1,"","id"],[150,3,1,"","input_bit_positions"],[150,3,1,"","input_bit_size"],[150,3,1,"","input_id_links"],[150,2,1,"","is_forbidden"],[150,2,1,"","is_id_equal_to"],[150,2,1,"","is_power_of_2_word_based"],[150,3,1,"","output_bit_size"],[150,2,1,"","output_size_for_concatenate"],[150,2,1,"","print"],[150,2,1,"","print_as_python_dictionary"],[150,2,1,"","print_values"],[150,2,1,"","print_word_values"],[150,2,1,"","select_bits"],[150,2,1,"","select_words"],[150,2,1,"","set_description"],[150,2,1,"","set_id"],[150,2,1,"","set_input_bit_positions"],[150,2,1,"","set_input_id_links"],[150,3,1,"","suffixes"],[150,3,1,"","type"]],"components.and_component":[[151,1,1,"","AND"],[151,4,1,"","cp_twoterms"],[151,4,1,"","cp_xor_differential_probability_ddt"],[151,4,1,"","cp_xor_linear_probability_lat"]],"components.and_component.AND":[[151,2,1,"","algebraic_polynomials"],[151,2,1,"","as_python_dictionary"],[151,2,1,"","check_output_size"],[151,2,1,"","cms_constraints"],[151,2,1,"","cms_xor_differential_propagation_constraints"],[151,2,1,"","cms_xor_linear_mask_propagation_constraints"],[151,2,1,"","cp_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[151,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_xor_differential_propagation_constraints"],[151,2,1,"","cp_xor_linear_mask_propagation_constraints"],[151,3,1,"","description"],[151,2,1,"","generic_sign_linear_constraints"],[151,2,1,"","get_bit_based_vectorized_python_code"],[151,2,1,"","get_byte_based_vectorized_python_code"],[151,2,1,"","get_graph_representation"],[151,2,1,"","get_word_operation_sign"],[151,3,1,"","id"],[151,3,1,"","input_bit_positions"],[151,3,1,"","input_bit_size"],[151,3,1,"","input_id_links"],[151,2,1,"","is_forbidden"],[151,2,1,"","is_id_equal_to"],[151,2,1,"","is_power_of_2_word_based"],[151,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[151,2,1,"","milp_xor_differential_propagation_constraints"],[151,2,1,"","milp_xor_linear_mask_propagation_constraints"],[151,3,1,"","output_bit_size"],[151,2,1,"","output_size_for_concatenate"],[151,2,1,"","print"],[151,2,1,"","print_as_python_dictionary"],[151,2,1,"","print_values"],[151,2,1,"","print_word_values"],[151,2,1,"","sat_constraints"],[151,2,1,"","sat_xor_differential_propagation_constraints"],[151,2,1,"","sat_xor_linear_mask_propagation_constraints"],[151,2,1,"","select_bits"],[151,2,1,"","select_words"],[151,2,1,"","set_description"],[151,2,1,"","set_id"],[151,2,1,"","set_input_bit_positions"],[151,2,1,"","set_input_id_links"],[151,2,1,"","smt_constraints"],[151,2,1,"","smt_xor_differential_propagation_constraints"],[151,2,1,"","smt_xor_linear_mask_propagation_constraints"],[151,3,1,"","suffixes"],[151,3,1,"","type"]],"components.cipher_output_component":[[152,1,1,"","CipherOutput"]],"components.cipher_output_component.CipherOutput":[[152,2,1,"","as_python_dictionary"],[152,2,1,"","check_output_size"],[152,2,1,"","cms_constraints"],[152,2,1,"","cms_xor_differential_propagation_constraints"],[152,2,1,"","cp_constraints"],[152,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","cp_xor_differential_propagation_constraints"],[152,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[152,2,1,"","cp_xor_linear_mask_propagation_constraints"],[152,3,1,"","description"],[152,2,1,"","get_bit_based_vectorized_python_code"],[152,2,1,"","get_byte_based_vectorized_python_code"],[152,2,1,"","get_graph_representation"],[152,3,1,"","id"],[152,3,1,"","input_bit_positions"],[152,3,1,"","input_bit_size"],[152,3,1,"","input_id_links"],[152,2,1,"","is_forbidden"],[152,2,1,"","is_id_equal_to"],[152,2,1,"","is_power_of_2_word_based"],[152,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_constraints"],[152,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_xor_differential_propagation_constraints"],[152,2,1,"","milp_xor_linear_mask_propagation_constraints"],[152,2,1,"","minizinc_constraints"],[152,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","minizinc_xor_differential_propagation_constraints"],[152,3,1,"","output_bit_size"],[152,2,1,"","output_size_for_concatenate"],[152,2,1,"","print"],[152,2,1,"","print_as_python_dictionary"],[152,2,1,"","print_values"],[152,2,1,"","print_word_values"],[152,2,1,"","sat_constraints"],[152,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","sat_xor_differential_propagation_constraints"],[152,2,1,"","sat_xor_linear_mask_propagation_constraints"],[152,2,1,"","select_bits"],[152,2,1,"","select_words"],[152,2,1,"","set_description"],[152,2,1,"","set_id"],[152,2,1,"","set_input_bit_positions"],[152,2,1,"","set_input_id_links"],[152,2,1,"","smt_constraints"],[152,2,1,"","smt_xor_differential_propagation_constraints"],[152,2,1,"","smt_xor_linear_mask_propagation_constraints"],[152,3,1,"","suffixes"],[152,3,1,"","type"]],"components.concatenate_component":[[153,1,1,"","Concatenate"]],"components.concatenate_component.Concatenate":[[153,2,1,"","as_python_dictionary"],[153,2,1,"","check_output_size"],[153,3,1,"","description"],[153,2,1,"","get_bit_based_c_code"],[153,2,1,"","get_bit_based_vectorized_python_code"],[153,2,1,"","get_byte_based_vectorized_python_code"],[153,2,1,"","get_graph_representation"],[153,2,1,"","get_word_based_c_code"],[153,3,1,"","id"],[153,3,1,"","input_bit_positions"],[153,3,1,"","input_bit_size"],[153,3,1,"","input_id_links"],[153,2,1,"","is_forbidden"],[153,2,1,"","is_id_equal_to"],[153,2,1,"","is_power_of_2_word_based"],[153,3,1,"","output_bit_size"],[153,2,1,"","output_size_for_concatenate"],[153,2,1,"","print"],[153,2,1,"","print_as_python_dictionary"],[153,2,1,"","print_values"],[153,2,1,"","print_word_values"],[153,2,1,"","select_bits"],[153,2,1,"","select_words"],[153,2,1,"","set_description"],[153,2,1,"","set_id"],[153,2,1,"","set_input_bit_positions"],[153,2,1,"","set_input_id_links"],[153,3,1,"","suffixes"],[153,3,1,"","type"]],"components.constant_component":[[154,1,1,"","Constant"],[154,4,1,"","constant_to_repr"]],"components.constant_component.Constant":[[154,2,1,"","algebraic_polynomials"],[154,2,1,"","as_python_dictionary"],[154,2,1,"","check_output_size"],[154,2,1,"","cms_constraints"],[154,2,1,"","cms_xor_differential_propagation_constraints"],[154,2,1,"","cms_xor_linear_mask_propagation_constraints"],[154,2,1,"","cp_constraints"],[154,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","cp_xor_differential_propagation_constraints"],[154,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[154,2,1,"","cp_xor_linear_mask_propagation_constraints"],[154,3,1,"","description"],[154,2,1,"","get_bit_based_c_code"],[154,2,1,"","get_bit_based_vectorized_python_code"],[154,2,1,"","get_byte_based_vectorized_python_code"],[154,2,1,"","get_graph_representation"],[154,2,1,"","get_word_based_c_code"],[154,3,1,"","id"],[154,3,1,"","input_bit_positions"],[154,3,1,"","input_bit_size"],[154,3,1,"","input_id_links"],[154,2,1,"","is_forbidden"],[154,2,1,"","is_id_equal_to"],[154,2,1,"","is_power_of_2_word_based"],[154,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_xor_differential_propagation_constraints"],[154,2,1,"","milp_xor_linear_mask_propagation_constraints"],[154,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","minizinc_xor_differential_propagation_constraints"],[154,3,1,"","output_bit_size"],[154,2,1,"","output_size_for_concatenate"],[154,2,1,"","print"],[154,2,1,"","print_as_python_dictionary"],[154,2,1,"","print_values"],[154,2,1,"","print_word_values"],[154,2,1,"","sat_constraints"],[154,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","sat_xor_differential_propagation_constraints"],[154,2,1,"","sat_xor_linear_mask_propagation_constraints"],[154,2,1,"","select_bits"],[154,2,1,"","select_words"],[154,2,1,"","set_description"],[154,2,1,"","set_id"],[154,2,1,"","set_input_bit_positions"],[154,2,1,"","set_input_id_links"],[154,2,1,"","smt_constraints"],[154,2,1,"","smt_xor_differential_propagation_constraints"],[154,2,1,"","smt_xor_linear_mask_propagation_constraints"],[154,3,1,"","suffixes"],[154,3,1,"","type"]],"components.fsr_component":[[155,1,1,"","FSR"]],"components.fsr_component.FSR":[[155,2,1,"","as_python_dictionary"],[155,2,1,"","check_output_size"],[155,3,1,"","description"],[155,2,1,"","get_graph_representation"],[155,3,1,"","id"],[155,3,1,"","input_bit_positions"],[155,3,1,"","input_bit_size"],[155,3,1,"","input_id_links"],[155,2,1,"","is_forbidden"],[155,2,1,"","is_id_equal_to"],[155,2,1,"","is_power_of_2_word_based"],[155,3,1,"","output_bit_size"],[155,2,1,"","output_size_for_concatenate"],[155,2,1,"","print"],[155,2,1,"","print_as_python_dictionary"],[155,2,1,"","print_values"],[155,2,1,"","print_word_values"],[155,2,1,"","select_bits"],[155,2,1,"","select_words"],[155,2,1,"","set_description"],[155,2,1,"","set_id"],[155,2,1,"","set_input_bit_positions"],[155,2,1,"","set_input_id_links"],[155,3,1,"","suffixes"],[155,3,1,"","type"]],"components.intermediate_output_component":[[156,1,1,"","IntermediateOutput"],[156,4,1,"","update_xor_linear_constraints_for_more_than_one_bit"]],"components.intermediate_output_component.IntermediateOutput":[[156,2,1,"","as_python_dictionary"],[156,2,1,"","check_output_size"],[156,2,1,"","cms_constraints"],[156,2,1,"","cms_xor_differential_propagation_constraints"],[156,2,1,"","cp_constraints"],[156,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","cp_xor_differential_propagation_constraints"],[156,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[156,2,1,"","cp_xor_linear_mask_propagation_constraints"],[156,3,1,"","description"],[156,2,1,"","get_bit_based_vectorized_python_code"],[156,2,1,"","get_byte_based_vectorized_python_code"],[156,2,1,"","get_graph_representation"],[156,3,1,"","id"],[156,3,1,"","input_bit_positions"],[156,3,1,"","input_bit_size"],[156,3,1,"","input_id_links"],[156,2,1,"","is_forbidden"],[156,2,1,"","is_id_equal_to"],[156,2,1,"","is_power_of_2_word_based"],[156,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_constraints"],[156,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_xor_differential_propagation_constraints"],[156,2,1,"","milp_xor_linear_mask_propagation_constraints"],[156,2,1,"","minizinc_constraints"],[156,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","minizinc_xor_differential_propagation_constraints"],[156,3,1,"","output_bit_size"],[156,2,1,"","output_size_for_concatenate"],[156,2,1,"","print"],[156,2,1,"","print_as_python_dictionary"],[156,2,1,"","print_values"],[156,2,1,"","print_word_values"],[156,2,1,"","sat_constraints"],[156,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","sat_xor_differential_propagation_constraints"],[156,2,1,"","sat_xor_linear_mask_propagation_constraints"],[156,2,1,"","select_bits"],[156,2,1,"","select_words"],[156,2,1,"","set_description"],[156,2,1,"","set_id"],[156,2,1,"","set_input_bit_positions"],[156,2,1,"","set_input_id_links"],[156,2,1,"","smt_constraints"],[156,2,1,"","smt_xor_differential_propagation_constraints"],[156,2,1,"","smt_xor_linear_mask_propagation_constraints"],[156,3,1,"","suffixes"],[156,3,1,"","type"]],"components.linear_layer_component":[[157,1,1,"","LinearLayer"],[157,4,1,"","update_constraints_for_more_than_one_bit"]],"components.linear_layer_component.LinearLayer":[[157,2,1,"","algebraic_polynomials"],[157,2,1,"","as_python_dictionary"],[157,2,1,"","check_output_size"],[157,2,1,"","cms_constraints"],[157,2,1,"","cms_xor_differential_propagation_constraints"],[157,2,1,"","cms_xor_linear_mask_propagation_constraints"],[157,2,1,"","cp_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[157,2,1,"","cp_xor_differential_propagation_constraints"],[157,2,1,"","cp_xor_linear_mask_propagation_constraints"],[157,3,1,"","description"],[157,2,1,"","get_bit_based_c_code"],[157,2,1,"","get_bit_based_vectorized_python_code"],[157,2,1,"","get_byte_based_vectorized_python_code"],[157,2,1,"","get_graph_representation"],[157,3,1,"","id"],[157,3,1,"","input_bit_positions"],[157,3,1,"","input_bit_size"],[157,3,1,"","input_id_links"],[157,2,1,"","is_forbidden"],[157,2,1,"","is_id_equal_to"],[157,2,1,"","is_power_of_2_word_based"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_constraints"],[157,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_xor_differential_propagation_constraints"],[157,2,1,"","milp_xor_linear_mask_propagation_constraints"],[157,3,1,"","output_bit_size"],[157,2,1,"","output_size_for_concatenate"],[157,2,1,"","print"],[157,2,1,"","print_as_python_dictionary"],[157,2,1,"","print_values"],[157,2,1,"","print_word_values"],[157,2,1,"","sat_constraints"],[157,2,1,"","sat_xor_differential_propagation_constraints"],[157,2,1,"","sat_xor_linear_mask_propagation_constraints"],[157,2,1,"","select_bits"],[157,2,1,"","select_words"],[157,2,1,"","set_description"],[157,2,1,"","set_id"],[157,2,1,"","set_input_bit_positions"],[157,2,1,"","set_input_id_links"],[157,2,1,"","smt_constraints"],[157,2,1,"","smt_xor_differential_propagation_constraints"],[157,2,1,"","smt_xor_linear_mask_propagation_constraints"],[157,3,1,"","suffixes"],[157,3,1,"","type"]],"components.mix_column_component":[[158,1,1,"","MixColumn"],[158,4,1,"","add_xor_components"],[158,4,1,"","calculate_input_bit_positions"],[158,4,1,"","cp_get_all_inputs"]],"components.mix_column_component.MixColumn":[[158,2,1,"","algebraic_polynomials"],[158,2,1,"","as_python_dictionary"],[158,2,1,"","check_output_size"],[158,2,1,"","cms_constraints"],[158,2,1,"","cms_xor_differential_propagation_constraints"],[158,2,1,"","cms_xor_linear_mask_propagation_constraints"],[158,2,1,"","cp_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[158,2,1,"","cp_xor_differential_propagation_constraints"],[158,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[158,2,1,"","cp_xor_linear_mask_propagation_constraints"],[158,3,1,"","description"],[158,2,1,"","get_bit_based_c_code"],[158,2,1,"","get_bit_based_vectorized_python_code"],[158,2,1,"","get_byte_based_vectorized_python_code"],[158,2,1,"","get_graph_representation"],[158,3,1,"","id"],[158,3,1,"","input_bit_positions"],[158,3,1,"","input_bit_size"],[158,3,1,"","input_id_links"],[158,2,1,"","is_forbidden"],[158,2,1,"","is_id_equal_to"],[158,2,1,"","is_power_of_2_word_based"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_constraints"],[158,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_xor_differential_propagation_constraints"],[158,2,1,"","milp_xor_linear_mask_propagation_constraints"],[158,3,1,"","output_bit_size"],[158,2,1,"","output_size_for_concatenate"],[158,2,1,"","print"],[158,2,1,"","print_as_python_dictionary"],[158,2,1,"","print_values"],[158,2,1,"","print_word_values"],[158,2,1,"","sat_constraints"],[158,2,1,"","sat_xor_differential_propagation_constraints"],[158,2,1,"","sat_xor_linear_mask_propagation_constraints"],[158,2,1,"","select_bits"],[158,2,1,"","select_words"],[158,2,1,"","set_description"],[158,2,1,"","set_id"],[158,2,1,"","set_input_bit_positions"],[158,2,1,"","set_input_id_links"],[158,2,1,"","smt_constraints"],[158,2,1,"","smt_xor_differential_propagation_constraints"],[158,2,1,"","smt_xor_linear_mask_propagation_constraints"],[158,3,1,"","suffixes"],[158,3,1,"","type"]],"components.modadd_component":[[159,1,1,"","MODADD"],[159,4,1,"","cms_modadd"],[159,4,1,"","cms_modadd_seq"],[159,4,1,"","cp_twoterms"],[159,4,1,"","sat_modadd"],[159,4,1,"","sat_modadd_seq"],[159,4,1,"","smt_modadd"],[159,4,1,"","smt_modadd_seq"]],"components.modadd_component.MODADD":[[159,2,1,"","algebraic_polynomials"],[159,2,1,"","as_python_dictionary"],[159,2,1,"","check_output_size"],[159,2,1,"","cms_constraints"],[159,2,1,"","cms_xor_differential_propagation_constraints"],[159,2,1,"","cms_xor_linear_mask_propagation_constraints"],[159,2,1,"","cp_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[159,2,1,"","cp_twoterms_xor_differential_probability"],[159,2,1,"","cp_xor_differential_propagation_constraints"],[159,2,1,"","cp_xor_linear_mask_propagation_constraints"],[159,3,1,"","description"],[159,2,1,"","get_bit_based_vectorized_python_code"],[159,2,1,"","get_byte_based_vectorized_python_code"],[159,2,1,"","get_graph_representation"],[159,2,1,"","get_word_operation_sign"],[159,3,1,"","id"],[159,3,1,"","input_bit_positions"],[159,3,1,"","input_bit_size"],[159,3,1,"","input_id_links"],[159,2,1,"","is_forbidden"],[159,2,1,"","is_id_equal_to"],[159,2,1,"","is_power_of_2_word_based"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","milp_xor_differential_propagation_constraints"],[159,2,1,"","milp_xor_linear_mask_propagation_constraints"],[159,2,1,"","minizinc_xor_differential_propagation_constraints"],[159,3,1,"","output_bit_size"],[159,2,1,"","output_size_for_concatenate"],[159,2,1,"","print"],[159,2,1,"","print_as_python_dictionary"],[159,2,1,"","print_values"],[159,2,1,"","print_word_values"],[159,2,1,"","sat_constraints"],[159,2,1,"","sat_xor_differential_propagation_constraints"],[159,2,1,"","sat_xor_linear_mask_propagation_constraints"],[159,2,1,"","select_bits"],[159,2,1,"","select_words"],[159,2,1,"","set_description"],[159,2,1,"","set_id"],[159,2,1,"","set_input_bit_positions"],[159,2,1,"","set_input_id_links"],[159,2,1,"","smt_constraints"],[159,2,1,"","smt_xor_differential_propagation_constraints"],[159,2,1,"","smt_xor_linear_mask_propagation_constraints"],[159,3,1,"","suffixes"],[159,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[159,3,1,"","type"]],"components.modsub_component":[[160,1,1,"","MODSUB"],[160,4,1,"","cp_twoterms"]],"components.modsub_component.MODSUB":[[160,2,1,"","as_python_dictionary"],[160,2,1,"","check_output_size"],[160,2,1,"","cms_constraints"],[160,2,1,"","cms_xor_differential_propagation_constraints"],[160,2,1,"","cms_xor_linear_mask_propagation_constraints"],[160,2,1,"","cp_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[160,2,1,"","cp_twoterms_xor_differential_probability"],[160,2,1,"","cp_xor_differential_propagation_constraints"],[160,2,1,"","cp_xor_linear_mask_propagation_constraints"],[160,3,1,"","description"],[160,2,1,"","get_bit_based_vectorized_python_code"],[160,2,1,"","get_byte_based_vectorized_python_code"],[160,2,1,"","get_graph_representation"],[160,2,1,"","get_word_operation_sign"],[160,3,1,"","id"],[160,3,1,"","input_bit_positions"],[160,3,1,"","input_bit_size"],[160,3,1,"","input_id_links"],[160,2,1,"","is_forbidden"],[160,2,1,"","is_id_equal_to"],[160,2,1,"","is_power_of_2_word_based"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","milp_xor_differential_propagation_constraints"],[160,2,1,"","milp_xor_linear_mask_propagation_constraints"],[160,2,1,"","minizinc_xor_differential_propagation_constraints"],[160,3,1,"","output_bit_size"],[160,2,1,"","output_size_for_concatenate"],[160,2,1,"","print"],[160,2,1,"","print_as_python_dictionary"],[160,2,1,"","print_values"],[160,2,1,"","print_word_values"],[160,2,1,"","sat_constraints"],[160,2,1,"","sat_xor_differential_propagation_constraints"],[160,2,1,"","sat_xor_linear_mask_propagation_constraints"],[160,2,1,"","select_bits"],[160,2,1,"","select_words"],[160,2,1,"","set_description"],[160,2,1,"","set_id"],[160,2,1,"","set_input_bit_positions"],[160,2,1,"","set_input_id_links"],[160,2,1,"","smt_constraints"],[160,2,1,"","smt_xor_differential_propagation_constraints"],[160,2,1,"","smt_xor_linear_mask_propagation_constraints"],[160,3,1,"","suffixes"],[160,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[160,3,1,"","type"]],"components.modular_component":[[161,1,1,"","Modular"],[161,4,1,"","generic_sign_linear_constraints"],[161,4,1,"","milp_n_window_heuristic"],[161,4,1,"","sat_n_window_heuristc_bit_level"]],"components.modular_component.Modular":[[161,2,1,"","as_python_dictionary"],[161,2,1,"","check_output_size"],[161,2,1,"","cms_xor_differential_propagation_constraints"],[161,2,1,"","cms_xor_linear_mask_propagation_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[161,2,1,"","cp_twoterms_xor_differential_probability"],[161,2,1,"","cp_xor_differential_propagation_constraints"],[161,2,1,"","cp_xor_linear_mask_propagation_constraints"],[161,3,1,"","description"],[161,2,1,"","get_graph_representation"],[161,2,1,"","get_word_operation_sign"],[161,3,1,"","id"],[161,3,1,"","input_bit_positions"],[161,3,1,"","input_bit_size"],[161,3,1,"","input_id_links"],[161,2,1,"","is_forbidden"],[161,2,1,"","is_id_equal_to"],[161,2,1,"","is_power_of_2_word_based"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","milp_xor_differential_propagation_constraints"],[161,2,1,"","milp_xor_linear_mask_propagation_constraints"],[161,2,1,"","minizinc_xor_differential_propagation_constraints"],[161,3,1,"","output_bit_size"],[161,2,1,"","output_size_for_concatenate"],[161,2,1,"","print"],[161,2,1,"","print_as_python_dictionary"],[161,2,1,"","print_values"],[161,2,1,"","print_word_values"],[161,2,1,"","sat_xor_differential_propagation_constraints"],[161,2,1,"","sat_xor_linear_mask_propagation_constraints"],[161,2,1,"","select_bits"],[161,2,1,"","select_words"],[161,2,1,"","set_description"],[161,2,1,"","set_id"],[161,2,1,"","set_input_bit_positions"],[161,2,1,"","set_input_id_links"],[161,2,1,"","smt_xor_differential_propagation_constraints"],[161,2,1,"","smt_xor_linear_mask_propagation_constraints"],[161,3,1,"","suffixes"],[161,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[161,3,1,"","type"]],"components.multi_input_non_linear_logical_operator_component":[[162,1,1,"","MultiInputNonlinearLogicalOperator"]],"components.multi_input_non_linear_logical_operator_component.MultiInputNonlinearLogicalOperator":[[162,2,1,"","as_python_dictionary"],[162,2,1,"","check_output_size"],[162,2,1,"","cms_constraints"],[162,2,1,"","cms_xor_differential_propagation_constraints"],[162,2,1,"","cms_xor_linear_mask_propagation_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[162,2,1,"","cp_xor_differential_propagation_constraints"],[162,3,1,"","description"],[162,2,1,"","generic_sign_linear_constraints"],[162,2,1,"","get_graph_representation"],[162,2,1,"","get_word_operation_sign"],[162,3,1,"","id"],[162,3,1,"","input_bit_positions"],[162,3,1,"","input_bit_size"],[162,3,1,"","input_id_links"],[162,2,1,"","is_forbidden"],[162,2,1,"","is_id_equal_to"],[162,2,1,"","is_power_of_2_word_based"],[162,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[162,2,1,"","milp_xor_differential_propagation_constraints"],[162,2,1,"","milp_xor_linear_mask_propagation_constraints"],[162,3,1,"","output_bit_size"],[162,2,1,"","output_size_for_concatenate"],[162,2,1,"","print"],[162,2,1,"","print_as_python_dictionary"],[162,2,1,"","print_values"],[162,2,1,"","print_word_values"],[162,2,1,"","sat_constraints"],[162,2,1,"","sat_xor_differential_propagation_constraints"],[162,2,1,"","sat_xor_linear_mask_propagation_constraints"],[162,2,1,"","select_bits"],[162,2,1,"","select_words"],[162,2,1,"","set_description"],[162,2,1,"","set_id"],[162,2,1,"","set_input_bit_positions"],[162,2,1,"","set_input_id_links"],[162,2,1,"","smt_xor_differential_propagation_constraints"],[162,2,1,"","smt_xor_linear_mask_propagation_constraints"],[162,3,1,"","suffixes"],[162,3,1,"","type"]],"components.not_component":[[163,1,1,"","NOT"]],"components.not_component.NOT":[[163,2,1,"","algebraic_polynomials"],[163,2,1,"","as_python_dictionary"],[163,2,1,"","check_output_size"],[163,2,1,"","cms_constraints"],[163,2,1,"","cms_xor_differential_propagation_constraints"],[163,2,1,"","cms_xor_linear_mask_propagation_constraints"],[163,2,1,"","cp_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[163,2,1,"","cp_xor_differential_first_step_constraints"],[163,2,1,"","cp_xor_differential_propagation_constraints"],[163,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[163,2,1,"","cp_xor_linear_mask_propagation_constraints"],[163,3,1,"","description"],[163,2,1,"","generic_sign_linear_constraints"],[163,2,1,"","get_bit_based_vectorized_python_code"],[163,2,1,"","get_byte_based_vectorized_python_code"],[163,2,1,"","get_graph_representation"],[163,2,1,"","get_word_operation_sign"],[163,3,1,"","id"],[163,3,1,"","input_bit_positions"],[163,3,1,"","input_bit_size"],[163,3,1,"","input_id_links"],[163,2,1,"","is_forbidden"],[163,2,1,"","is_id_equal_to"],[163,2,1,"","is_power_of_2_word_based"],[163,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","milp_constraints"],[163,2,1,"","milp_xor_differential_propagation_constraints"],[163,2,1,"","milp_xor_linear_mask_propagation_constraints"],[163,3,1,"","output_bit_size"],[163,2,1,"","output_size_for_concatenate"],[163,2,1,"","print"],[163,2,1,"","print_as_python_dictionary"],[163,2,1,"","print_values"],[163,2,1,"","print_word_values"],[163,2,1,"","sat_constraints"],[163,2,1,"","sat_xor_differential_propagation_constraints"],[163,2,1,"","sat_xor_linear_mask_propagation_constraints"],[163,2,1,"","select_bits"],[163,2,1,"","select_words"],[163,2,1,"","set_description"],[163,2,1,"","set_id"],[163,2,1,"","set_input_bit_positions"],[163,2,1,"","set_input_id_links"],[163,2,1,"","smt_constraints"],[163,2,1,"","smt_xor_differential_propagation_constraints"],[163,2,1,"","smt_xor_linear_mask_propagation_constraints"],[163,3,1,"","suffixes"],[163,3,1,"","type"]],"components.or_component":[[164,1,1,"","OR"]],"components.or_component.OR":[[164,2,1,"","algebraic_polynomials"],[164,2,1,"","as_python_dictionary"],[164,2,1,"","check_output_size"],[164,2,1,"","cms_constraints"],[164,2,1,"","cms_xor_differential_propagation_constraints"],[164,2,1,"","cms_xor_linear_mask_propagation_constraints"],[164,2,1,"","cp_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[164,2,1,"","cp_xor_differential_propagation_constraints"],[164,2,1,"","cp_xor_linear_mask_propagation_constraints"],[164,3,1,"","description"],[164,2,1,"","generic_sign_linear_constraints"],[164,2,1,"","get_bit_based_vectorized_python_code"],[164,2,1,"","get_byte_based_vectorized_python_code"],[164,2,1,"","get_graph_representation"],[164,2,1,"","get_word_operation_sign"],[164,3,1,"","id"],[164,3,1,"","input_bit_positions"],[164,3,1,"","input_bit_size"],[164,3,1,"","input_id_links"],[164,2,1,"","is_forbidden"],[164,2,1,"","is_id_equal_to"],[164,2,1,"","is_power_of_2_word_based"],[164,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[164,2,1,"","milp_xor_differential_propagation_constraints"],[164,2,1,"","milp_xor_linear_mask_propagation_constraints"],[164,3,1,"","output_bit_size"],[164,2,1,"","output_size_for_concatenate"],[164,2,1,"","print"],[164,2,1,"","print_as_python_dictionary"],[164,2,1,"","print_values"],[164,2,1,"","print_word_values"],[164,2,1,"","sat_constraints"],[164,2,1,"","sat_xor_differential_propagation_constraints"],[164,2,1,"","sat_xor_linear_mask_propagation_constraints"],[164,2,1,"","select_bits"],[164,2,1,"","select_words"],[164,2,1,"","set_description"],[164,2,1,"","set_id"],[164,2,1,"","set_input_bit_positions"],[164,2,1,"","set_input_id_links"],[164,2,1,"","smt_constraints"],[164,2,1,"","smt_xor_differential_propagation_constraints"],[164,2,1,"","smt_xor_linear_mask_propagation_constraints"],[164,3,1,"","suffixes"],[164,3,1,"","type"]],"components.permutation_component":[[165,1,1,"","Permutation"]],"components.permutation_component.Permutation":[[165,2,1,"","algebraic_polynomials"],[165,2,1,"","as_python_dictionary"],[165,2,1,"","check_output_size"],[165,2,1,"","cms_constraints"],[165,2,1,"","cms_xor_differential_propagation_constraints"],[165,2,1,"","cms_xor_linear_mask_propagation_constraints"],[165,2,1,"","cp_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[165,2,1,"","cp_xor_differential_propagation_constraints"],[165,2,1,"","cp_xor_linear_mask_propagation_constraints"],[165,3,1,"","description"],[165,2,1,"","get_bit_based_c_code"],[165,2,1,"","get_bit_based_vectorized_python_code"],[165,2,1,"","get_byte_based_vectorized_python_code"],[165,2,1,"","get_graph_representation"],[165,3,1,"","id"],[165,3,1,"","input_bit_positions"],[165,3,1,"","input_bit_size"],[165,3,1,"","input_id_links"],[165,2,1,"","is_forbidden"],[165,2,1,"","is_id_equal_to"],[165,2,1,"","is_power_of_2_word_based"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_constraints"],[165,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_xor_differential_propagation_constraints"],[165,2,1,"","milp_xor_linear_mask_propagation_constraints"],[165,3,1,"","output_bit_size"],[165,2,1,"","output_size_for_concatenate"],[165,2,1,"","print"],[165,2,1,"","print_as_python_dictionary"],[165,2,1,"","print_values"],[165,2,1,"","print_word_values"],[165,2,1,"","sat_constraints"],[165,2,1,"","sat_xor_differential_propagation_constraints"],[165,2,1,"","sat_xor_linear_mask_propagation_constraints"],[165,2,1,"","select_bits"],[165,2,1,"","select_words"],[165,2,1,"","set_description"],[165,2,1,"","set_id"],[165,2,1,"","set_input_bit_positions"],[165,2,1,"","set_input_id_links"],[165,2,1,"","smt_constraints"],[165,2,1,"","smt_xor_differential_propagation_constraints"],[165,2,1,"","smt_xor_linear_mask_propagation_constraints"],[165,3,1,"","suffixes"],[165,3,1,"","type"]],"components.reverse_component":[[166,1,1,"","Reverse"]],"components.reverse_component.Reverse":[[166,2,1,"","algebraic_polynomials"],[166,2,1,"","as_python_dictionary"],[166,2,1,"","check_output_size"],[166,2,1,"","cms_constraints"],[166,2,1,"","cms_xor_differential_propagation_constraints"],[166,2,1,"","cms_xor_linear_mask_propagation_constraints"],[166,2,1,"","cp_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[166,2,1,"","cp_xor_differential_propagation_constraints"],[166,2,1,"","cp_xor_linear_mask_propagation_constraints"],[166,3,1,"","description"],[166,2,1,"","get_bit_based_c_code"],[166,2,1,"","get_bit_based_vectorized_python_code"],[166,2,1,"","get_byte_based_vectorized_python_code"],[166,2,1,"","get_graph_representation"],[166,3,1,"","id"],[166,3,1,"","input_bit_positions"],[166,3,1,"","input_bit_size"],[166,3,1,"","input_id_links"],[166,2,1,"","is_forbidden"],[166,2,1,"","is_id_equal_to"],[166,2,1,"","is_power_of_2_word_based"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_constraints"],[166,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_xor_differential_propagation_constraints"],[166,2,1,"","milp_xor_linear_mask_propagation_constraints"],[166,3,1,"","output_bit_size"],[166,2,1,"","output_size_for_concatenate"],[166,2,1,"","print"],[166,2,1,"","print_as_python_dictionary"],[166,2,1,"","print_values"],[166,2,1,"","print_word_values"],[166,2,1,"","sat_constraints"],[166,2,1,"","sat_xor_differential_propagation_constraints"],[166,2,1,"","sat_xor_linear_mask_propagation_constraints"],[166,2,1,"","select_bits"],[166,2,1,"","select_words"],[166,2,1,"","set_description"],[166,2,1,"","set_id"],[166,2,1,"","set_input_bit_positions"],[166,2,1,"","set_input_id_links"],[166,2,1,"","smt_constraints"],[166,2,1,"","smt_xor_differential_propagation_constraints"],[166,2,1,"","smt_xor_linear_mask_propagation_constraints"],[166,3,1,"","suffixes"],[166,3,1,"","type"]],"components.rotate_component":[[167,1,1,"","Rotate"]],"components.rotate_component.Rotate":[[167,2,1,"","algebraic_polynomials"],[167,2,1,"","as_python_dictionary"],[167,2,1,"","check_output_size"],[167,2,1,"","cms_constraints"],[167,2,1,"","cms_xor_differential_propagation_constraints"],[167,2,1,"","cms_xor_linear_mask_propagation_constraints"],[167,2,1,"","cp_constraints"],[167,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","cp_inverse_constraints"],[167,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","cp_xor_differential_first_step_constraints"],[167,2,1,"","cp_xor_differential_propagation_constraints"],[167,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[167,2,1,"","cp_xor_linear_mask_propagation_constraints"],[167,3,1,"","description"],[167,2,1,"","get_bit_based_vectorized_python_code"],[167,2,1,"","get_byte_based_vectorized_python_code"],[167,2,1,"","get_graph_representation"],[167,2,1,"","get_word_based_c_code"],[167,2,1,"","get_word_operation_sign"],[167,3,1,"","id"],[167,3,1,"","input_bit_positions"],[167,3,1,"","input_bit_size"],[167,3,1,"","input_id_links"],[167,2,1,"","is_forbidden"],[167,2,1,"","is_id_equal_to"],[167,2,1,"","is_power_of_2_word_based"],[167,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_constraints"],[167,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_xor_differential_propagation_constraints"],[167,2,1,"","milp_xor_linear_mask_propagation_constraints"],[167,2,1,"","minizinc_constraints"],[167,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","minizinc_xor_differential_propagation_constraints"],[167,3,1,"","output_bit_size"],[167,2,1,"","output_size_for_concatenate"],[167,2,1,"","print"],[167,2,1,"","print_as_python_dictionary"],[167,2,1,"","print_values"],[167,2,1,"","print_word_values"],[167,2,1,"","sat_constraints"],[167,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","sat_xor_differential_propagation_constraints"],[167,2,1,"","sat_xor_linear_mask_propagation_constraints"],[167,2,1,"","select_bits"],[167,2,1,"","select_words"],[167,2,1,"","set_description"],[167,2,1,"","set_id"],[167,2,1,"","set_input_bit_positions"],[167,2,1,"","set_input_id_links"],[167,2,1,"","smt_constraints"],[167,2,1,"","smt_xor_differential_propagation_constraints"],[167,2,1,"","smt_xor_linear_mask_propagation_constraints"],[167,3,1,"","suffixes"],[167,3,1,"","type"]],"components.sbox_component":[[168,1,1,"","SBOX"],[168,4,1,"","check_table_feasibility"],[168,4,1,"","cp_update_ddt_valid_probabilities"],[168,4,1,"","cp_update_lat_valid_probabilities"],[168,4,1,"","milp_large_xor_probability_constraint_for_inequality"],[168,4,1,"","sat_build_table_template"],[168,4,1,"","smt_build_table_template"],[168,4,1,"","smt_get_sbox_probability_constraints"]],"components.sbox_component.SBOX":[[168,2,1,"","algebraic_polynomials"],[168,2,1,"","as_python_dictionary"],[168,2,1,"","check_output_size"],[168,2,1,"","cms_constraints"],[168,2,1,"","cms_xor_differential_propagation_constraints"],[168,2,1,"","cms_xor_linear_mask_propagation_constraints"],[168,2,1,"","cp_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[168,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_xor_differential_first_step_constraints"],[168,2,1,"","cp_xor_differential_propagation_constraints"],[168,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[168,2,1,"","cp_xor_linear_mask_propagation_constraints"],[168,3,1,"","description"],[168,2,1,"","generate_sbox_sign_lat"],[168,2,1,"","get_bit_based_c_code"],[168,2,1,"","get_bit_based_vectorized_python_code"],[168,2,1,"","get_byte_based_vectorized_python_code"],[168,2,1,"","get_ddt_with_undisturbed_transitions"],[168,2,1,"","get_graph_representation"],[168,2,1,"","get_word_based_c_code"],[168,3,1,"","id"],[168,3,1,"","input_bit_positions"],[168,3,1,"","input_bit_size"],[168,3,1,"","input_id_links"],[168,2,1,"","is_forbidden"],[168,2,1,"","is_id_equal_to"],[168,2,1,"","is_power_of_2_word_based"],[168,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_large_xor_differential_probability_constraints"],[168,2,1,"","milp_large_xor_linear_probability_constraints"],[168,2,1,"","milp_small_xor_differential_probability_constraints"],[168,2,1,"","milp_small_xor_linear_probability_constraints"],[168,2,1,"","milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[168,2,1,"","milp_xor_differential_propagation_constraints"],[168,2,1,"","milp_xor_linear_mask_propagation_constraints"],[168,3,1,"","output_bit_size"],[168,2,1,"","output_size_for_concatenate"],[168,2,1,"","print"],[168,2,1,"","print_as_python_dictionary"],[168,2,1,"","print_values"],[168,2,1,"","print_word_values"],[168,2,1,"","sat_constraints"],[168,2,1,"","sat_xor_differential_propagation_constraints"],[168,2,1,"","sat_xor_linear_mask_propagation_constraints"],[168,2,1,"","select_bits"],[168,2,1,"","select_words"],[168,2,1,"","set_description"],[168,2,1,"","set_id"],[168,2,1,"","set_input_bit_positions"],[168,2,1,"","set_input_id_links"],[168,2,1,"","smt_constraints"],[168,2,1,"","smt_xor_differential_propagation_constraints"],[168,2,1,"","smt_xor_linear_mask_propagation_constraints"],[168,3,1,"","suffixes"],[168,3,1,"","type"]],"components.shift_component":[[169,1,1,"","SHIFT"]],"components.shift_component.SHIFT":[[169,2,1,"","algebraic_polynomials"],[169,2,1,"","as_python_dictionary"],[169,2,1,"","check_output_size"],[169,2,1,"","cms_constraints"],[169,2,1,"","cms_xor_differential_propagation_constraints"],[169,2,1,"","cms_xor_linear_mask_propagation_constraints"],[169,2,1,"","cp_constraints"],[169,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","cp_inverse_constraints"],[169,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","cp_xor_differential_first_step_constraints"],[169,2,1,"","cp_xor_differential_propagation_constraints"],[169,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[169,2,1,"","cp_xor_linear_mask_propagation_constraints"],[169,3,1,"","description"],[169,2,1,"","get_bit_based_vectorized_python_code"],[169,2,1,"","get_byte_based_vectorized_python_code"],[169,2,1,"","get_graph_representation"],[169,2,1,"","get_word_based_c_code"],[169,2,1,"","get_word_operation_sign"],[169,3,1,"","id"],[169,3,1,"","input_bit_positions"],[169,3,1,"","input_bit_size"],[169,3,1,"","input_id_links"],[169,2,1,"","is_forbidden"],[169,2,1,"","is_id_equal_to"],[169,2,1,"","is_power_of_2_word_based"],[169,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_constraints"],[169,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_xor_differential_propagation_constraints"],[169,2,1,"","milp_xor_linear_mask_propagation_constraints"],[169,2,1,"","minizinc_constraints"],[169,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","minizinc_xor_differential_propagation_constraints"],[169,3,1,"","output_bit_size"],[169,2,1,"","output_size_for_concatenate"],[169,2,1,"","print"],[169,2,1,"","print_as_python_dictionary"],[169,2,1,"","print_values"],[169,2,1,"","print_word_values"],[169,2,1,"","sat_constraints"],[169,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","sat_xor_differential_propagation_constraints"],[169,2,1,"","sat_xor_linear_mask_propagation_constraints"],[169,2,1,"","select_bits"],[169,2,1,"","select_words"],[169,2,1,"","set_description"],[169,2,1,"","set_id"],[169,2,1,"","set_input_bit_positions"],[169,2,1,"","set_input_id_links"],[169,2,1,"","smt_constraints"],[169,2,1,"","smt_xor_differential_propagation_constraints"],[169,2,1,"","smt_xor_linear_mask_propagation_constraints"],[169,3,1,"","suffixes"],[169,3,1,"","type"]],"components.shift_rows_component":[[170,1,1,"","ShiftRows"]],"components.shift_rows_component.ShiftRows":[[170,2,1,"","algebraic_polynomials"],[170,2,1,"","as_python_dictionary"],[170,2,1,"","check_output_size"],[170,2,1,"","cms_constraints"],[170,2,1,"","cms_xor_differential_propagation_constraints"],[170,2,1,"","cms_xor_linear_mask_propagation_constraints"],[170,2,1,"","cp_constraints"],[170,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","cp_inverse_constraints"],[170,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","cp_xor_differential_first_step_constraints"],[170,2,1,"","cp_xor_differential_propagation_constraints"],[170,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[170,2,1,"","cp_xor_linear_mask_propagation_constraints"],[170,3,1,"","description"],[170,2,1,"","get_bit_based_vectorized_python_code"],[170,2,1,"","get_byte_based_vectorized_python_code"],[170,2,1,"","get_graph_representation"],[170,2,1,"","get_word_based_c_code"],[170,2,1,"","get_word_operation_sign"],[170,3,1,"","id"],[170,3,1,"","input_bit_positions"],[170,3,1,"","input_bit_size"],[170,3,1,"","input_id_links"],[170,2,1,"","is_forbidden"],[170,2,1,"","is_id_equal_to"],[170,2,1,"","is_power_of_2_word_based"],[170,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_constraints"],[170,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_xor_differential_propagation_constraints"],[170,2,1,"","milp_xor_linear_mask_propagation_constraints"],[170,2,1,"","minizinc_constraints"],[170,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","minizinc_xor_differential_propagation_constraints"],[170,3,1,"","output_bit_size"],[170,2,1,"","output_size_for_concatenate"],[170,2,1,"","print"],[170,2,1,"","print_as_python_dictionary"],[170,2,1,"","print_values"],[170,2,1,"","print_word_values"],[170,2,1,"","sat_constraints"],[170,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","sat_xor_differential_propagation_constraints"],[170,2,1,"","sat_xor_linear_mask_propagation_constraints"],[170,2,1,"","select_bits"],[170,2,1,"","select_words"],[170,2,1,"","set_description"],[170,2,1,"","set_id"],[170,2,1,"","set_input_bit_positions"],[170,2,1,"","set_input_id_links"],[170,2,1,"","smt_constraints"],[170,2,1,"","smt_xor_differential_propagation_constraints"],[170,2,1,"","smt_xor_linear_mask_propagation_constraints"],[170,3,1,"","suffixes"],[170,3,1,"","type"]],"components.sigma_component":[[171,1,1,"","Sigma"]],"components.sigma_component.Sigma":[[171,2,1,"","algebraic_polynomials"],[171,2,1,"","as_python_dictionary"],[171,2,1,"","check_output_size"],[171,2,1,"","cms_constraints"],[171,2,1,"","cms_xor_differential_propagation_constraints"],[171,2,1,"","cms_xor_linear_mask_propagation_constraints"],[171,2,1,"","cp_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[171,2,1,"","cp_xor_differential_propagation_constraints"],[171,2,1,"","cp_xor_linear_mask_propagation_constraints"],[171,3,1,"","description"],[171,2,1,"","get_bit_based_c_code"],[171,2,1,"","get_bit_based_vectorized_python_code"],[171,2,1,"","get_byte_based_vectorized_python_code"],[171,2,1,"","get_graph_representation"],[171,3,1,"","id"],[171,3,1,"","input_bit_positions"],[171,3,1,"","input_bit_size"],[171,3,1,"","input_id_links"],[171,2,1,"","is_forbidden"],[171,2,1,"","is_id_equal_to"],[171,2,1,"","is_power_of_2_word_based"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_constraints"],[171,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_xor_differential_propagation_constraints"],[171,2,1,"","milp_xor_linear_mask_propagation_constraints"],[171,3,1,"","output_bit_size"],[171,2,1,"","output_size_for_concatenate"],[171,2,1,"","print"],[171,2,1,"","print_as_python_dictionary"],[171,2,1,"","print_values"],[171,2,1,"","print_word_values"],[171,2,1,"","sat_constraints"],[171,2,1,"","sat_xor_differential_propagation_constraints"],[171,2,1,"","sat_xor_linear_mask_propagation_constraints"],[171,2,1,"","select_bits"],[171,2,1,"","select_words"],[171,2,1,"","set_description"],[171,2,1,"","set_id"],[171,2,1,"","set_input_bit_positions"],[171,2,1,"","set_input_id_links"],[171,2,1,"","smt_constraints"],[171,2,1,"","smt_xor_differential_propagation_constraints"],[171,2,1,"","smt_xor_linear_mask_propagation_constraints"],[171,3,1,"","suffixes"],[171,3,1,"","type"]],"components.theta_keccak_component":[[172,1,1,"","ThetaKeccak"]],"components.theta_keccak_component.ThetaKeccak":[[172,2,1,"","algebraic_polynomials"],[172,2,1,"","as_python_dictionary"],[172,2,1,"","check_output_size"],[172,2,1,"","cms_constraints"],[172,2,1,"","cms_xor_differential_propagation_constraints"],[172,2,1,"","cms_xor_linear_mask_propagation_constraints"],[172,2,1,"","cp_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[172,2,1,"","cp_xor_differential_propagation_constraints"],[172,2,1,"","cp_xor_linear_mask_propagation_constraints"],[172,3,1,"","description"],[172,2,1,"","get_bit_based_c_code"],[172,2,1,"","get_bit_based_vectorized_python_code"],[172,2,1,"","get_byte_based_vectorized_python_code"],[172,2,1,"","get_graph_representation"],[172,3,1,"","id"],[172,3,1,"","input_bit_positions"],[172,3,1,"","input_bit_size"],[172,3,1,"","input_id_links"],[172,2,1,"","is_forbidden"],[172,2,1,"","is_id_equal_to"],[172,2,1,"","is_power_of_2_word_based"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_constraints"],[172,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_xor_differential_propagation_constraints"],[172,2,1,"","milp_xor_linear_mask_propagation_constraints"],[172,3,1,"","output_bit_size"],[172,2,1,"","output_size_for_concatenate"],[172,2,1,"","print"],[172,2,1,"","print_as_python_dictionary"],[172,2,1,"","print_values"],[172,2,1,"","print_word_values"],[172,2,1,"","sat_constraints"],[172,2,1,"","sat_xor_differential_propagation_constraints"],[172,2,1,"","sat_xor_linear_mask_propagation_constraints"],[172,2,1,"","select_bits"],[172,2,1,"","select_words"],[172,2,1,"","set_description"],[172,2,1,"","set_id"],[172,2,1,"","set_input_bit_positions"],[172,2,1,"","set_input_id_links"],[172,2,1,"","smt_constraints"],[172,2,1,"","smt_xor_differential_propagation_constraints"],[172,2,1,"","smt_xor_linear_mask_propagation_constraints"],[172,3,1,"","suffixes"],[172,3,1,"","type"]],"components.theta_xoodoo_component":[[173,1,1,"","ThetaXoodoo"]],"components.theta_xoodoo_component.ThetaXoodoo":[[173,2,1,"","algebraic_polynomials"],[173,2,1,"","as_python_dictionary"],[173,2,1,"","check_output_size"],[173,2,1,"","cms_constraints"],[173,2,1,"","cms_xor_differential_propagation_constraints"],[173,2,1,"","cms_xor_linear_mask_propagation_constraints"],[173,2,1,"","cp_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[173,2,1,"","cp_xor_differential_propagation_constraints"],[173,2,1,"","cp_xor_linear_mask_propagation_constraints"],[173,3,1,"","description"],[173,2,1,"","get_bit_based_c_code"],[173,2,1,"","get_bit_based_vectorized_python_code"],[173,2,1,"","get_byte_based_vectorized_python_code"],[173,2,1,"","get_graph_representation"],[173,3,1,"","id"],[173,3,1,"","input_bit_positions"],[173,3,1,"","input_bit_size"],[173,3,1,"","input_id_links"],[173,2,1,"","is_forbidden"],[173,2,1,"","is_id_equal_to"],[173,2,1,"","is_power_of_2_word_based"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_constraints"],[173,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_xor_differential_propagation_constraints"],[173,2,1,"","milp_xor_linear_mask_propagation_constraints"],[173,3,1,"","output_bit_size"],[173,2,1,"","output_size_for_concatenate"],[173,2,1,"","print"],[173,2,1,"","print_as_python_dictionary"],[173,2,1,"","print_values"],[173,2,1,"","print_word_values"],[173,2,1,"","sat_constraints"],[173,2,1,"","sat_xor_differential_propagation_constraints"],[173,2,1,"","sat_xor_linear_mask_propagation_constraints"],[173,2,1,"","select_bits"],[173,2,1,"","select_words"],[173,2,1,"","set_description"],[173,2,1,"","set_id"],[173,2,1,"","set_input_bit_positions"],[173,2,1,"","set_input_id_links"],[173,2,1,"","smt_constraints"],[173,2,1,"","smt_xor_differential_propagation_constraints"],[173,2,1,"","smt_xor_linear_mask_propagation_constraints"],[173,3,1,"","suffixes"],[173,3,1,"","type"]],"components.variable_rotate_component":[[174,1,1,"","VariableRotate"]],"components.variable_rotate_component.VariableRotate":[[174,2,1,"","as_python_dictionary"],[174,2,1,"","check_output_size"],[174,3,1,"","description"],[174,2,1,"","get_graph_representation"],[174,2,1,"","get_word_based_c_code"],[174,2,1,"","get_word_operation_sign"],[174,3,1,"","id"],[174,3,1,"","input_bit_positions"],[174,3,1,"","input_bit_size"],[174,3,1,"","input_id_links"],[174,2,1,"","is_forbidden"],[174,2,1,"","is_id_equal_to"],[174,2,1,"","is_power_of_2_word_based"],[174,3,1,"","output_bit_size"],[174,2,1,"","output_size_for_concatenate"],[174,2,1,"","print"],[174,2,1,"","print_as_python_dictionary"],[174,2,1,"","print_values"],[174,2,1,"","print_word_values"],[174,2,1,"","select_bits"],[174,2,1,"","select_words"],[174,2,1,"","set_description"],[174,2,1,"","set_id"],[174,2,1,"","set_input_bit_positions"],[174,2,1,"","set_input_id_links"],[174,3,1,"","suffixes"],[174,3,1,"","type"]],"components.variable_shift_component":[[175,1,1,"","VariableShift"]],"components.variable_shift_component.VariableShift":[[175,2,1,"","as_python_dictionary"],[175,2,1,"","check_output_size"],[175,2,1,"","cms_constraints"],[175,2,1,"","cp_constraints"],[175,3,1,"","description"],[175,2,1,"","get_bit_based_vectorized_python_code"],[175,2,1,"","get_byte_based_vectorized_python_code"],[175,2,1,"","get_graph_representation"],[175,2,1,"","get_word_based_c_code"],[175,2,1,"","get_word_operation_sign"],[175,3,1,"","id"],[175,3,1,"","input_bit_positions"],[175,3,1,"","input_bit_size"],[175,3,1,"","input_id_links"],[175,2,1,"","is_forbidden"],[175,2,1,"","is_id_equal_to"],[175,2,1,"","is_power_of_2_word_based"],[175,2,1,"","minizinc_xor_differential_propagation_constraints"],[175,3,1,"","output_bit_size"],[175,2,1,"","output_size_for_concatenate"],[175,2,1,"","print"],[175,2,1,"","print_as_python_dictionary"],[175,2,1,"","print_values"],[175,2,1,"","print_word_values"],[175,2,1,"","sat_constraints"],[175,2,1,"","select_bits"],[175,2,1,"","select_words"],[175,2,1,"","set_description"],[175,2,1,"","set_id"],[175,2,1,"","set_input_bit_positions"],[175,2,1,"","set_input_id_links"],[175,2,1,"","smt_constraints"],[175,3,1,"","suffixes"],[175,3,1,"","type"]],"components.word_permutation_component":[[176,1,1,"","WordPermutation"]],"components.word_permutation_component.WordPermutation":[[176,2,1,"","algebraic_polynomials"],[176,2,1,"","as_python_dictionary"],[176,2,1,"","check_output_size"],[176,2,1,"","cms_constraints"],[176,2,1,"","cms_xor_differential_propagation_constraints"],[176,2,1,"","cms_xor_linear_mask_propagation_constraints"],[176,2,1,"","cp_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[176,2,1,"","cp_xor_differential_propagation_constraints"],[176,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[176,2,1,"","cp_xor_linear_mask_propagation_constraints"],[176,3,1,"","description"],[176,2,1,"","get_bit_based_c_code"],[176,2,1,"","get_bit_based_vectorized_python_code"],[176,2,1,"","get_byte_based_vectorized_python_code"],[176,2,1,"","get_graph_representation"],[176,3,1,"","id"],[176,3,1,"","input_bit_positions"],[176,3,1,"","input_bit_size"],[176,3,1,"","input_id_links"],[176,2,1,"","is_forbidden"],[176,2,1,"","is_id_equal_to"],[176,2,1,"","is_power_of_2_word_based"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_constraints"],[176,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_xor_differential_propagation_constraints"],[176,2,1,"","milp_xor_linear_mask_propagation_constraints"],[176,3,1,"","output_bit_size"],[176,2,1,"","output_size_for_concatenate"],[176,2,1,"","print"],[176,2,1,"","print_as_python_dictionary"],[176,2,1,"","print_values"],[176,2,1,"","print_word_values"],[176,2,1,"","sat_constraints"],[176,2,1,"","sat_xor_differential_propagation_constraints"],[176,2,1,"","sat_xor_linear_mask_propagation_constraints"],[176,2,1,"","select_bits"],[176,2,1,"","select_words"],[176,2,1,"","set_description"],[176,2,1,"","set_id"],[176,2,1,"","set_input_bit_positions"],[176,2,1,"","set_input_id_links"],[176,2,1,"","smt_constraints"],[176,2,1,"","smt_xor_differential_propagation_constraints"],[176,2,1,"","smt_xor_linear_mask_propagation_constraints"],[176,3,1,"","suffixes"],[176,3,1,"","type"]],"components.xor_component":[[177,1,1,"","XOR"],[177,4,1,"","cp_build_truncated_table"],[177,4,1,"","generic_with_constant_sign_linear_constraints"],[177,4,1,"","get_milp_constraints_from_inequalities"],[177,4,1,"","get_transformed_xor_input_links_and_positions"]],"components.xor_component.XOR":[[177,2,1,"","algebraic_polynomials"],[177,2,1,"","as_python_dictionary"],[177,2,1,"","check_output_size"],[177,2,1,"","cms_constraints"],[177,2,1,"","cms_xor_differential_propagation_constraints"],[177,2,1,"","cms_xor_linear_mask_propagation_constraints"],[177,2,1,"","cp_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[177,2,1,"","cp_transform_xor_components_for_first_step"],[177,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_xor_differential_propagation_constraints"],[177,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[177,2,1,"","cp_xor_linear_mask_propagation_constraints"],[177,3,1,"","description"],[177,2,1,"","get_bit_based_vectorized_python_code"],[177,2,1,"","get_byte_based_vectorized_python_code"],[177,2,1,"","get_graph_representation"],[177,2,1,"","get_word_operation_sign"],[177,3,1,"","id"],[177,3,1,"","input_bit_positions"],[177,3,1,"","input_bit_size"],[177,3,1,"","input_id_links"],[177,2,1,"","is_forbidden"],[177,2,1,"","is_id_equal_to"],[177,2,1,"","is_power_of_2_word_based"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_sequential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[177,2,1,"","milp_xor_differential_propagation_constraints"],[177,2,1,"","milp_xor_linear_constraints"],[177,2,1,"","milp_xor_linear_mask_propagation_constraints"],[177,2,1,"","minizinc_constraints"],[177,2,1,"","minizinc_xor_differential_propagation_constraints"],[177,3,1,"","output_bit_size"],[177,2,1,"","output_size_for_concatenate"],[177,2,1,"","print"],[177,2,1,"","print_as_python_dictionary"],[177,2,1,"","print_values"],[177,2,1,"","print_word_values"],[177,2,1,"","sat_constraints"],[177,2,1,"","sat_xor_differential_propagation_constraints"],[177,2,1,"","sat_xor_linear_mask_propagation_constraints"],[177,2,1,"","select_bits"],[177,2,1,"","select_words"],[177,2,1,"","set_description"],[177,2,1,"","set_id"],[177,2,1,"","set_input_bit_positions"],[177,2,1,"","set_input_id_links"],[177,2,1,"","smt_constraints"],[177,2,1,"","smt_xor_differential_propagation_constraints"],[177,2,1,"","smt_xor_linear_mask_propagation_constraints"],[177,3,1,"","suffixes"],[177,3,1,"","type"]],"input.Input":[[181,3,1,"","bit_positions"],[181,3,1,"","bit_size"],[181,3,1,"","id_links"],[181,2,1,"","set_input_bit_positions"],[181,2,1,"","set_input_id_links"]],"round.Round":[[183,2,1,"","add_component"],[183,2,1,"","are_there_forbidden_components"],[183,2,1,"","component_from"],[183,3,1,"","components"],[183,2,1,"","get_component_from_id"],[183,2,1,"","get_components_ids"],[183,2,1,"","get_number_of_components"],[183,2,1,"","get_round_from_component_id"],[183,3,1,"","id"],[183,2,1,"","is_component_input"],[183,2,1,"","is_power_of_2_word_based"],[183,3,1,"","number_of_components"],[183,2,1,"","print_round"],[183,2,1,"","print_round_as_python_dictionary"],[183,2,1,"","remove_component"],[183,2,1,"","remove_component_from_id"],[183,2,1,"","round_as_python_dictionary"],[183,2,1,"","swap_components"]],"rounds.Rounds":[[184,2,1,"","add_component"],[184,2,1,"","add_round"],[184,2,1,"","are_there_not_forbidden_components"],[184,2,1,"","component_from"],[184,2,1,"","components_in_round"],[184,3,1,"","current_round"],[184,3,1,"","current_round_number"],[184,3,1,"","current_round_number_of_components"],[184,2,1,"","get_all_components"],[184,2,1,"","get_all_components_ids"],[184,2,1,"","get_component_from_id"],[184,2,1,"","get_round_from_component_id"],[184,2,1,"","is_power_of_2_word_based"],[184,2,1,"","number_of_components"],[184,3,1,"","number_of_rounds"],[184,2,1,"","print_rounds"],[184,2,1,"","print_rounds_as_python_dictionary"],[184,2,1,"","remove_round_component"],[184,2,1,"","remove_round_component_from_id"],[184,2,1,"","round_at"],[184,3,1,"","rounds"],[184,2,1,"","rounds_as_python_dictionary"]],"utils.integer":[[185,4,1,"","generate_bitmask"],[185,4,1,"","to_binary"]],"utils.integer_functions":[[186,4,1,"","bytearray_to_int"],[186,4,1,"","bytearray_to_wordlist"],[186,4,1,"","int_to_bytearray"],[186,4,1,"","int_to_wordlist"],[186,4,1,"","lor"],[186,4,1,"","ror"],[186,4,1,"","wordlist_to_bytearray"],[186,4,1,"","wordlist_to_int"]],"utils.sage_scripts":[[187,4,1,"","create_scenario_string"],[187,4,1,"","get_cipher"],[187,4,1,"","get_cipher_type"],[187,4,1,"","get_ciphers"],[187,4,1,"","load_parameters"],[187,4,1,"","make_cipher_id"]],"utils.sequence_operations":[[188,4,1,"","rotate_left"],[188,4,1,"","rotate_right"],[188,4,1,"","shift_left"],[188,4,1,"","shift_right"]],"utils.templates":[[189,1,1,"","Body"],[189,1,1,"","Builder"],[189,1,1,"","CSVBuilder"],[189,1,1,"","Footer"],[189,1,1,"","Header"],[189,1,1,"","LatexBuilder"],[189,1,1,"","Template"],[189,1,1,"","TemplateManager"]],"utils.templates.Body":[[189,5,1,"","content"]],"utils.templates.Builder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.CSVBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Footer":[[189,5,1,"","content"]],"utils.templates.Header":[[189,5,1,"","content"],[189,5,1,"","logo"]],"utils.templates.LatexBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Template":[[189,2,1,"","render_template"],[189,2,1,"","set_body"],[189,2,1,"","set_footer"],[189,2,1,"","set_header"]],"utils.templates.TemplateManager":[[189,2,1,"","get_template"],[189,2,1,"","set_builder"]],"utils.utils":[[190,4,1,"","aggregate_list_of_dictionary"],[190,4,1,"","bytes_positions_to_little_endian_for_32_bits"],[190,4,1,"","bytes_positions_to_little_endian_for_multiple_of_32"],[190,4,1,"","calculate_inputs"],[190,4,1,"","convert_2d_index_to_1d_index"],[190,4,1,"","create_new_state_for_calculation"],[190,4,1,"","extract_inputs"],[190,4,1,"","generate_sample_from_gf_2_n"],[190,4,1,"","get_2d_array_element_from_1d_array_index"],[190,4,1,"","get_ci"],[190,4,1,"","get_inputs_parameter"],[190,4,1,"","get_ith_word"],[190,4,1,"","get_k_th_bit"],[190,4,1,"","get_number_of_rounds_from"],[190,4,1,"","group_list_by_key"],[190,4,1,"","int_to_poly"],[190,4,1,"","layer_and_lane_initialization"],[190,4,1,"","merging_list_of_lists"],[190,4,1,"","point_pair"],[190,4,1,"","poly_to_int"],[190,4,1,"","pprint_dictionary"],[190,4,1,"","pprint_dictionary_to_file"],[190,4,1,"","set_2d_array_element_from_1d_array_index"],[190,4,1,"","sgn_function"],[190,4,1,"","signed_distance"],[190,4,1,"","simplify_inputs"]],cipher:[[0,1,1,"","Cipher"]],cipher_modules:[[1,0,0,"-","algebraic_tests"],[2,0,0,"-","avalanche_tests"],[3,0,0,"-","code_generator"],[4,0,0,"-","component_analysis_tests"],[5,0,0,"-","continuous_tests"],[6,0,0,"-","evaluator"],[8,0,0,"-","generic_functions"],[9,0,0,"-","generic_functions_continuous_diffusion_analysis"],[10,0,0,"-","generic_functions_vectorized_bit"],[11,0,0,"-","generic_functions_vectorized_byte"],[13,0,0,"-","graph_generator"],[14,0,0,"-","inverse_cipher"],[83,0,0,"-","tester"]],component:[[150,1,1,"","Component"],[150,4,1,"","check_size"],[150,4,1,"","free_input"],[150,4,1,"","linear_layer_to_binary_matrix"]],components:[[151,0,0,"-","and_component"],[152,0,0,"-","cipher_output_component"],[153,0,0,"-","concatenate_component"],[154,0,0,"-","constant_component"],[155,0,0,"-","fsr_component"],[156,0,0,"-","intermediate_output_component"],[157,0,0,"-","linear_layer_component"],[158,0,0,"-","mix_column_component"],[159,0,0,"-","modadd_component"],[160,0,0,"-","modsub_component"],[161,0,0,"-","modular_component"],[162,0,0,"-","multi_input_non_linear_logical_operator_component"],[163,0,0,"-","not_component"],[164,0,0,"-","or_component"],[165,0,0,"-","permutation_component"],[166,0,0,"-","reverse_component"],[167,0,0,"-","rotate_component"],[168,0,0,"-","sbox_component"],[169,0,0,"-","shift_component"],[170,0,0,"-","shift_rows_component"],[171,0,0,"-","sigma_component"],[172,0,0,"-","theta_keccak_component"],[173,0,0,"-","theta_xoodoo_component"],[174,0,0,"-","variable_rotate_component"],[175,0,0,"-","variable_shift_component"],[176,0,0,"-","word_permutation_component"],[177,0,0,"-","xor_component"]],compound_xor_differential_cipher:[[178,4,1,"","convert_to_compound_xor_cipher"],[178,4,1,"","create_xor_component"],[178,4,1,"","create_xor_component_inputs"],[178,4,1,"","get_component_pair"],[178,4,1,"","update_cipher_inputs"],[178,4,1,"","update_input_id_links"]],editor:[[179,4,1,"","add_AND_component"],[179,4,1,"","add_FSR_component"],[179,4,1,"","add_MODADD_component"],[179,4,1,"","add_MODSUB_component"],[179,4,1,"","add_NOT_component"],[179,4,1,"","add_OR_component"],[179,4,1,"","add_SBOX_component"],[179,4,1,"","add_SHIFT_component"],[179,4,1,"","add_XOR_component"],[179,4,1,"","add_cipher_output_component"],[179,4,1,"","add_component"],[179,4,1,"","add_concatenate_component"],[179,4,1,"","add_constant_component"],[179,4,1,"","add_intermediate_output_component"],[179,4,1,"","add_linear_layer_component"],[179,4,1,"","add_mix_column_component"],[179,4,1,"","add_permutation_component"],[179,4,1,"","add_reverse_component"],[179,4,1,"","add_rotate_component"],[179,4,1,"","add_round"],[179,4,1,"","add_round_key_output_component"],[179,4,1,"","add_round_output_component"],[179,4,1,"","add_shift_rows_component"],[179,4,1,"","add_sigma_component"],[179,4,1,"","add_theta_keccak_component"],[179,4,1,"","add_theta_xoodoo_component"],[179,4,1,"","add_variable_rotate_component"],[179,4,1,"","add_variable_shift_component"],[179,4,1,"","add_word_permutation_component"],[179,4,1,"","generate_expanded_links"],[179,4,1,"","get_final_input_positions"],[179,4,1,"","get_output_bit_size_from_id"],[179,4,1,"","get_unique_links_information"],[179,4,1,"","is_linear_layer_permutation"],[179,4,1,"","make_cipher_id"],[179,4,1,"","make_file_name"],[179,4,1,"","next_component_index_from"],[179,4,1,"","propagate_equivalences"],[179,4,1,"","propagate_permutations"],[179,4,1,"","propagate_rotations"],[179,4,1,"","remove_cipher_input_keys"],[179,4,1,"","remove_forbidden_parents"],[179,4,1,"","remove_key_schedule"],[179,4,1,"","remove_orphan_components"],[179,4,1,"","remove_permutations"],[179,4,1,"","remove_rotations"],[179,4,1,"","remove_round_component"],[179,4,1,"","remove_round_component_from_id"],[179,4,1,"","sort_cipher"],[179,4,1,"","update_cipher_inputs"],[179,4,1,"","update_component_inputs"],[179,4,1,"","update_inputs"]],input:[[181,1,1,"","Input"]],round:[[183,1,1,"","Round"]],rounds:[[184,1,1,"","Rounds"]],utils:[[185,0,0,"-","integer"],[186,0,0,"-","integer_functions"],[187,0,0,"-","sage_scripts"],[188,0,0,"-","sequence_operations"],[189,0,0,"-","templates"],[190,0,0,"-","utils"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:function","5":"py:attribute"},terms:{"0":[0,2,3,4,5,8,9,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,185,188,190],"000000":48,"000000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0000000000000000":21,"0000000000000000000000000000000000000000000000000000000000000000":21,"000101":48,"001":[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"0010":[8,179],"001010":48,"0011":179,"001111":48,"0013153553009033203":22,"002":[21,190],"002946615219116211":74,"003168344497680664":75,"004":9,"004874706268310547":[61,66],"005683183670043945":25,"00607341":182,"007165431976318359":22,"007994651794433594":25,"009123563766479492":25,"00975656509399414":25,"01":[0,2,9,21,62,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0100":8,"0100000000000000011102230245":9,"010001":48,"010079622268676758":[62,67],"0101":179,"010100":48,"010101":48,"0101100100":8,"011":95,"011011":48,"0111":8,"011111":48,"016":143,"019":33,"019376516342163086":[59,64],"02":[9,21],"030":182,"031":[51,168],"05":[0,2,9,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"054n":182,"06":75,"06306815147399902":77,"0734":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0890":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"09":[61,66,71,72,73,74,75],"09b84e4804496b9b7c480dc87768f1f62d05e72fe2f21f92458886012b28ff3173b58f3426fb662b6be4933769b0bcec048dd2bab27894fc1828ed16c027fd4e394391ed0d27d6a4a4e06dadc6b12f5cfd95713beec720a9bf693e22c0a1d79f976aa412161fa3c35577e9c9ce973eba173df71edc75a0038f8853e756dc0031eed3ce4ffbccdea2eb5b40280cc1c84132116ae838d5a09b0653d8376bca9c988c89ff979aa0f7a600c47f91965fd8560e70b393d39eb4706d73c25c4baa7089f27479ce687673fb":8,"0_27":182,"0b000":[86,148],"0b000001":[148,149],"0b000101":148,"0b001":[86,148],"0b001011":148,"0b0010110010000000000000":141,"0b010":[86,148,149],"0b010000":149,"0b010110":148,"0b010111":149,"0b011":[148,149],"0b011100":148,"0b011101":149,"0b011111":149,"0b100":148,"0b100000":149,"0b100010":148,"0b101":148,"0b101011":149,"0b110":148,"0b111":149,"0b111010":149,"0b111011":149,"0b1111":185,"0b111110":148,"0mb":25,"0s":[8,10,11],"0x0":[9,33,77],"0x00":9,"0x0000":77,"0x0000000000000000":99,"0x00000000000000000000":146,"0x00010203":101,"0x00200000":33,"0x01":[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x012345":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x01234567":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x0123456789abcdef":[87,88],"0x0123456789abcdeffedcba9876543210":99,"0x02":9,"0x03":9,"0x03805224":33,"0x04":9,"0x04f0c8e0efe316e609390a3d98e97f5acc53c199":113,"0x05":9,"0x06":9,"0x07":9,"0x08":9,"0x09":9,"0x0a":9,"0x0b":9,"0x0c":9,"0x0d":9,"0x0d8d2647a12b0d544989a6b03603b8b3c27e2c4e0be08671745366d1a8bc4d95":114,"0x0e":9,"0x0f":9,"0x0x0001020304050607":101,"0x1":9,"0x10":9,"0x11":9,"0x11111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1111111111111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1198636720bac54986d1ab5a494866c9":143,"0x12":9,"0x1234":77,"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":8,"0x12695bc9b7b7f8":88,"0x13":9,"0x133457799bbcdff1":87,"0x14":9,"0x15":9,"0x16":9,"0x17":9,"0x173":148,"0x18":9,"0x19":9,"0x1918111009080100":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1a":9,"0x1b":9,"0x1c":9,"0x1d":[9,149],"0x1e":9,"0x1f":9,"0x1fe":148,"0x1ff":148,"0x2":9,"0x20":9,"0x21":9,"0x22":9,"0x23":9,"0x23a8d72":101,"0x24":9,"0x25":9,"0x25ac1ea08e1ec131e0a1780f7a2a42bb":143,"0x26":9,"0x27":9,"0x28":9,"0x29":9,"0x2a":9,"0x2b":9,"0x2b5f25d6":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x2b7e151628aed2a6abf7158809cf4f3c":84,"0x2bd6459f82c5b300952c49104881ff48":145,"0x2c":9,"0x2cc660354929f2ca":99,"0x2d":9,"0x2e":9,"0x2f":9,"0x3":9,"0x30":9,"0x30d0e5ede563dee67884718977510a4c22661cf128d8f75af4a2708276014d83":142,"0x31":9,"0x32":9,"0x33":9,"0x34":9,"0x35":9,"0x36":9,"0x37":9,"0x38":9,"0x39":9,"0x3956fba8c05053e5a27040b8ab9a7545":112,"0x3a":9,"0x3ad77bb40d7a3660a89ecaf32466ef97":84,"0x3b":9,"0x3c":9,"0x3d":9,"0x3e":[9,148],"0x3f":[9,148,149],"0x4":9,"0x40":9,"0x400000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x41":9,"0x42":9,"0x43":9,"0x43686961726180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030":[113,114],"0x439d5298656eccc67de":85,"0x44":9,"0x45":9,"0x46":9,"0x47":9,"0x47a57eff5d6475a68916":85,"0x48":9,"0x48c4a2e691d5b3f7":141,"0x49":9,"0x4a":9,"0x4b":9,"0x4c":9,"0x4d":9,"0x4e":9,"0x4e2448a4c6f486bb16b6562c73b4020bf3043e3a731bce721ae1b303d97e6d4c7181eebdb6c57e277d0e34957114cbd6c797fc9d95d8b582d225292076d4eef5":115,"0x4f":9,"0x5":9,"0x50":9,"0x51":9,"0x514896226caa4f20":92,"0x5175656c2066657a20736768656d626f20636f70726520646176616e74692e8000000000000000000000000000000000000000000000000000000000000000f8":112,"0x52":9,"0x53":9,"0x534eaa582fe8151ab6e1855a728c093f4d68d757ed949b4cbe41b7c6b":141,"0x54":9,"0x55":9,"0x56":9,"0x57":9,"0x58":9,"0x59":9,"0x5a":9,"0x5b":9,"0x5c":9,"0x5d":9,"0x5e":9,"0x5f":9,"0x6":9,"0x60":9,"0x61":9,"0x61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018":115,"0x617078653320646e79622d326b206574":144,"0x62":9,"0x63":9,"0x64":9,"0x65":9,"0x6574694c":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x6574694d":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x657cfa07096398b":147,"0x66":9,"0x67":9,"0x67452301":185,"0x68":9,"0x69":9,"0x6a":9,"0x6b":9,"0x6bc1bee22e409f96e93d7e117393172a":84,"0x6c":[9,148],"0x6cb4561c40bf0a9705931cb6d408e7fa":108,"0x6d":9,"0x6e":9,"0x6f":9,"0x7":9,"0x70":9,"0x71":9,"0x72":9,"0x73":9,"0x74":9,"0x75":9,"0x76":9,"0x77":9,"0x78":9,"0x79":9,"0x7a":9,"0x7b":9,"0x7c":9,"0x7d":9,"0x7e":9,"0x7e5c3a18f6d4b2901eb852fc9630da74":99,"0x7f":9,"0x8":[8,9],"0x80":9,"0x81":9,"0x82":9,"0x83":9,"0x84":9,"0x85":9,"0x85e813540f0ab405":[87,88],"0x86":9,"0x87":9,"0x88":9,"0x89":9,"0x89abcd":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x89abcdef":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x8a":9,"0x8b":9,"0x8be":148,"0x8c":9,"0x8cd29cc32668b90ee2312924376f1b4":143,"0x8cdd0f3459fb721e798655298d5c1":85,"0x8d":9,"0x8e":9,"0x8f":9,"0x9":9,"0x90":9,"0x90afe91bb288544f2c32dc239b2635e6":108,"0x91":9,"0x92":9,"0x93":9,"0x94":9,"0x95":9,"0x96":9,"0x97":9,"0x98":9,"0x99":9,"0x9900aabbccddeeff1122334455667788":92,"0x9a":9,"0x9b":9,"0x9c":9,"0x9d":9,"0x9e":9,"0x9f":9,"0xa":9,"0xa0":9,"0xa1":9,"0xa2":9,"0xa3":9,"0xa4":9,"0xa5":9,"0xa6":9,"0xa7":9,"0xa8":9,"0xa86842f2":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xa9":9,"0xaa":9,"0xab":9,"0xab01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,179],"0xab02":179,"0xabcd":77,"0xabcdef01abcdef01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xabee97047ac31373":145,"0xac":9,"0xad":9,"0xad0":149,"0xae":9,"0xaf":9,"0xaffec7":[59,64,72],"0xb":[9,143,148],"0xb0":9,"0xb1":9,"0xb2":9,"0xb3":9,"0xb4":9,"0xb5":9,"0xb6":9,"0xb7":9,"0xb8":9,"0xb9":9,"0xba":9,"0xbb":9,"0xbc":9,"0xbd":9,"0xbe":9,"0xbf":9,"0xc":9,"0xc0":9,"0xc1":9,"0xc2":9,"0xc3":9,"0xc4":9,"0xc5":9,"0xc6":9,"0xc7":9,"0xc8":9,"0xc9":9,"0xca":9,"0xcb":9,"0xcc":9,"0xcd":9,"0xce":9,"0xcf":9,"0xd":[9,143],"0xd0":9,"0xd1":9,"0xd2":9,"0xd3":9,"0xd4":9,"0xd43bb7556ea32e46f2a282b7d45b4e0d57ff739d4dc92c1bd7fc01700cc8216f":108,"0xd5":9,"0xd6":9,"0xd7":9,"0xd8":9,"0xd9":9,"0xda":9,"0xdb":9,"0xdc":9,"0xdd":9,"0xde":9,"0xdebe55784f853606399af3f6f4b8d0a706963a91f2ba4c687baea16da074f3c3":142,"0xdf":9,"0xdf07fd641a9aa0d88a5e7472c4f993fe6a4cc06898e0f3b4e7159ef0854d97b3":146,"0xe":9,"0xe0":9,"0xe1":9,"0xe2":9,"0xe22f92fff8c245c49d10359a02f1e555":143,"0xe3":9,"0xe4":9,"0xe5":9,"0xe6":9,"0xe7":9,"0xe8":9,"0xe9":9,"0xea":9,"0xea024714ad5c4d84df1f9b251c0bf45f":145,"0xeb":9,"0xec":9,"0xed":9,"0xee":9,"0xef":9,"0xf":[0,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xf0":9,"0xf1":9,"0xf1258f7940e1dde784d5ccf933c0478ad598261ea65aa9eebd1547306f80494d8b284e056253d057ff97a42d7f8e6fd490fee5a0a44647c48c5bda0cd6192e76ad30a6f71b19059c30935ab7d08ffc64eb5aa93f2317d635a9a6e6260d71210381a57c16dbcf555f43b831cd0347c82601f22f1a11a5569f05e5635a21d9ae6164befef28cc970f2613670957bc46611b87c5a554fd00ecb8c3ee88a1ccf32c8940c7922ae3a26141841f924a2c509e416f53526e70465c275f644e97f30a13beaf1ff7b5ceca249":8,"0xf2":9,"0xf3":9,"0xf4":9,"0xf5":9,"0xf6":9,"0xf7":9,"0xf8":9,"0xf9":9,"0xfa":9,"0xfb":9,"0xfc":9,"0xfd":9,"0xfe":[9,148],"0xfe0":149,"0xfedcba0987654321":92,"0xff":[9,148],"0xffe":148,"0xffff":25,"0xffffffff":[0,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],"0xffffffffff":142,"0xffffffffff0000000000":142,"0xffffffffffffffffffff":142,"0xffffffffffffffffffffffffffffffff":147,"1":[0,3,4,8,9,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],"10":[0,3,4,5,8,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,51,54,61,66,74,79,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,177,179,182,190],"100":[0,5,22,25,26,27,28,29,30,31,32,33,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,190],"1000":[8,19,20,21,22,23,24,25],"10000":[0,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000":[],"1000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"10000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000000000000":190,"100010":48,"100111":48,"1007":[51,168,182],"101011":48,"101111":48,"1018":33,"10187196731567383":77,"1024":[110,175],"10407660024169345926":145,"1048576":175,"1058":182,"106":182,"107":182,"1073741824":175,"109":182,"10970":182,"11":[0,3,4,28,50,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"110":95,"1100":[8,22,25],"110011":48,"1101":8,"110111":48,"111":182,"111011":48,"1111":[8,179],"111111":48,"11111111011111111111111111111111":21,"111111111111111":82,"1111111111111110":21,"1111111111111111":21,"1112":182,"112":[],"113":182,"114":[],"115":[],"1152":146,"116":[],"117":[],"118":79,"119":[],"12":[0,3,4,25,28,30,31,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,162,164,165,166,171,172,173,179,190],"120":15,"1200":[22,25],"1229782938247303441":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"123735":182,"123745":182,"124":[79,182],"125":143,"127":[21,24,28],"128":[0,4,21,23,24,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,175,176],"129519094746312487908866675886161683828":144,"12pt":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"12th":182,"13":[0,3,4,25,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,164,165,166,171,172,173,179,182,190],"1300":[22,25],"131072":175,"132":[143,182],"1321":112,"13295412063598633":77,"134217728":175,"136":182,"14":[0,3,4,25,27,28,33,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,159,164,165,166,171,172,173,179,190],"1400":[22,25],"1411":[59,64],"146m":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"15":[0,3,4,21,23,24,25,50,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,157,158,159,160,161,164,165,166,167,170,171,172,173,176,177,179,190],"1500":[22,25],"156":79,"16":[0,3,4,22,24,25,28,30,31,32,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,157,158,159,160,161,164,165,166,168,169,171,172,173,175,176,177,179,190],"160":[124,131,132,133],"1600":[25,159,160,161,179],"161":182,"163":79,"16384":175,"167":182,"16777216":175,"17":[0,3,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,182,190],"173":182,"175":77,"177":[142,182],"178":79,"18":[0,3,22,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,169,170,171,172,173,176,179,190],"186":182,"188":[23,24],"19":[0,3,24,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,190],"19088743":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"191":28,"192":[28,94,99],"193":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"1962":182,"197":182,"19837307929992676":24,"1988":182,"1991":182,"1999":182,"1e":[],"1s":[8,10,11],"2":[0,3,4,8,9,10,11,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,188,190],"20":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,164,165,166,168,171,172,173,179,182,190],"200":[0,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"200000000000000":190,"2001":182,"2002":182,"2003":182,"2004":182,"2007":182,"2008":182,"2009":182,"2010":182,"2011":182,"2012":182,"2013":[182,190],"2014":[28,33,151,162,164,168,182],"2015":182,"2016":[28,33,159,160,161,182],"2017":182,"2018":182,"2019":[33,182],"202":125,"2020":[151,162,164,182],"2021":[151,162,164,182],"2022":143,"2023":182,"203":182,"2040":101,"2048":175,"206":182,"2097152":175,"21":[0,3,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,157,158,164,165,166,171,172,173,176,179,182,190],"213":[151,162,164,182],"2147483648":175,"218":182,"2190":182,"22":[0,3,27,28,29,32,33,56,57,58,59,60,61,62,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,157,159,160,161,164,165,166,171,172,173,177,179,190],"2202":182,"221":79,"222":182,"2222222222222220":21,"22222222222222202222222222222222":21,"2222222222222221":21,"22222222222222212222222222222220":21,"224":[24,114],"2256000000000004e":9,"228":[141,182],"229":141,"23":[0,3,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"237":79,"238":182,"239":77,"239000000000000":77,"24":[0,3,15,28,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,190],"240":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"243":168,"25":[0,3,23,24,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"252":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"255":[21,101],"2550":182,"256":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,175],"2564":182,"26":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"262144":175,"26553":[51,168],"268":182,"268435456":175,"27":[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,169,176,179,190],"274":182,"277":182,"28":[0,3,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,169,179,190],"281":182,"282":182,"286331153":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"288":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],"2887":182,"289":182,"29":[0,3,25,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,169,179,190],"290":[151,162,164],"294":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2948":182,"2_3":[51,168],"2_31":182,"2f3":182,"2f978":182,"2x1":[151,162,164],"3":[0,3,4,8,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,188,190],"30":[0,3,24,25,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,168,169,179,190],"300":[22,25],"304":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"305":182,"306":182,"31":[0,3,20,22,23,24,25,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,158,159,160,161,163,164,169,175,176,177,179,182,190],"3174":113,"319":182,"32":[0,3,9,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,163,164,167,168,169,170,175,177,179,185,190],"320":28,"32768":175,"32bit":180,"33":[79,179],"33554432":175,"34":[168,179],"35":[152,156,179],"3502917":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"353":182,"36":[169,179],"367":182,"37":[79,168,179],"38":179,"38103010":25,"384":[4,15,103,114,179],"39":[164,179],"3949999999999999938937733645":9,"39555":182,"3a2f087e74cd0f2a10853c8a5d036d85":50,"3rd":182,"4":[0,3,4,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,177,179,182,184,185,188,190],"40":[0,4,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179],"400":[22,25],"407":[33,159,160,161,182],"4096":175,"41":179,"41009196":54,"4194304":175,"42":179,"4294967295":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"43":179,"430":[159,160,161],"432":15,"44":[168,179],"4411":182,"44658816949":9,"45":179,"450":182,"45473":182,"46":[179,182],"466":182,"46706":182,"468":[15,32],"47":[28,79,179],"4727":182,"48":[21,27,28,143,177,179],"49":[179,182],"490":28,"5":[0,2,3,4,9,19,20,21,22,23,24,25,28,32,47,50,55,56,57,58,61,66,71,72,73,74,75,77,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,163,164,168,169,176,177,179,182,188,190],"50":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],"500":[22,25],"500000000000":77,"5049":182,"51":179,"512":[111,114,144,146,175],"52":[179,182],"520":182,"524288":175,"53":179,"536":182,"536870912":175,"54":179,"540":182,"55":[179,182],"56":179,"57":179,"58":179,"59":[79,179],"595000000000000004996003611":9,"5_26":182,"5th":182,"6":[0,3,4,9,22,24,25,27,28,32,33,48,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,182,190],"60":[168,179],"600":[22,25],"6069":[],"61":179,"62":179,"6234":114,"6263":182,"63":[21,22,25,28,163,164,169,177,179],"631":182,"632":[151,162,164],"64":[0,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,61,66,74,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,170,175,177,179,182],"640":[134,135,136,141],"641582411206367315":93,"65":[75,179],"65536":175,"66":179,"662":182,"67":[75,179],"67108864":175,"68":[157,158,165,166,171,172,173,176,179],"688":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"69":179,"6dc5":[],"7":[0,3,4,9,19,20,21,22,23,24,25,28,32,50,58,59,60,61,62,63,64,65,66,67,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,160,163,164,165,166,168,169,171,172,173,176,177,179,190],"70":[179,182],"700":[22,25],"708":142,"71":179,"72":[28,79,107,179],"73":[179,182],"7359":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"73728":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"74":179,"743":182,"7457252":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"747":[33,168],"74735":182,"7489726543426514":24,"75":179,"753":[19,20,21,22,23,24,25],"759":[46,168],"76":179,"760":182,"761":28,"77":179,"78":179,"79":179,"7_8":182,"8":[0,3,4,9,11,17,19,20,21,22,23,24,25,32,33,47,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,182,190],"80":[27,28,79,98,113,131,132,133,142,146,168,179,182],"800":[0,22,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"802999073954890452142763024312444031238555908203125":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"805":[46,168],"81":[168,182],"8128":[80,82],"8192":[80,82,175],"8294":[30,31,47,48,158,168,176],"83":77,"8388608":175,"850a9520":22,"85400194":[151,162,164],"86":182,"8702":[30,31,47,48,158,168,176],"8876":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"8ca8d5de0906f08":[59,60,61,62,63,64,65,66,67],"9":[0,3,4,19,20,21,22,23,24,25,28,33,50,58,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,167,170,171,172,173,176,179,182,190],"90":[79,182,190],"900":[22,25],"90fe":72,"91":[54,175],"9101":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"9101160168647766":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"93":[19,20,21,22,23,24,25,74,158,176],"95":175,"96":15,"973":[33,151,162,164],"978":[51,168,182],"98":190,"9834215":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"99":190,"993147134780884":24,"abstract":63,"alg\u00e9briqu":182,"bas\u00e9":182,"bj\u00f6rklund":182,"boolean":[0,3,4,8,9,10,11,17,21,46,50,55,56,57,58,76,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177,180,182],"byte":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,190],"case":[0,10,11,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],"class":[0,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,183,184,189,190],"default":[0,3,8,10,11,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,190],"do":[45,50,59,60,61,62,70],"enum":79,"faug\u00e8r":182,"final":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"float":[0,9,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"function":[0,14,17,46,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182,184,190],"gr\u00f6bner":182,"import":[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],"int":[0,4,19,20,21,22,23,24,25,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,164,168,175,176,177,182],"k\u00f6lbl":182,"long":[0,15,22,24,25,32,33,50,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,168,171,172,173],"new":[23,24,59,60,61,62,70,179,182,188],"probl\u00e8m":182,"public":182,"return":[0,3,4,10,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,185,188,190],"s\u00e9curit\u00e9":182,"static":[58,80,82],"stehl\u00e9":182,"true":[0,2,3,4,5,8,9,10,11,15,16,17,28,31,32,58,61,62,66,67,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],"try":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"universit\u00e9":182,"var":[20,21,22,23,24,25,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],"while":24,A:[0,4,10,11,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,182],AND:[4,8,10,11,76,151,162,164,179],ANDed:[10,11],And:[55,70,76,180,190],BY:175,Be:[63,82],By:[8,33,62,67,75,124,179],FOR:[151,157,165,166,171,172,173],For:[8,48,59,60,61,62,63,79,80,82,143,158,176,177,179],If:[0,8,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],In:[22,24,25,59,60,61,62,63,64,65,66,67,71,74,75,82,95,111,112,143,179,182],It:[0,33,46,51,70,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],NOT:[8,10,11,23,24,163,179],No:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],Not:[70,180],OR:[8,10,11,76,162,164,179],ORed:[10,11],On:182,One:[80,82],Or:[70,76,180],That:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],The:[0,4,8,10,11,13,22,24,26,32,33,45,46,50,51,54,58,59,60,61,62,63,66,67,71,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,179,182,190],There:[22,24,25,61,62,66,67,74,75],These:13,To:[0,33,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],With:55,_:[4,26,27,28,54,77,80,82,154,159,160,161,167,169,170,175,177],_activ:[167,168,170],_backward:[28,31],_backward_ciph:[28,31],_binary_vari:54,_cipher:[28,31,77],_evalu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_forward_ciph:[28,31],_get_input_output_vari:[27,28],_get_input_output_variables_tupl:[27,28],_input:9,_integer_vari:54,_k:96,_model:[26,27,28,29,30,31,32,33,54],_model_constraint:[27,28,30,31,32,33],_non_linear_component_id:168,_r:96,_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_round:[],_round_:[80,82],_sage:[59,60,61,62,63,64,65,66,67],_valu:[167,170],_variables_list:177,a51:141,a51streamciph:141,a5:180,a5_1_stream_ciph:141,a_0:54,a_1:54,a_7:70,a_:54,a_and_b:54,a_eq_b:54,a_geq_b:54,a_greater_b:54,a_i:54,a_leq_b:54,a_less_b:54,a_n:54,a_neq_b:54,a_or_b:54,aadd_constraints_to_build_fully_automatic_model_in_sage_milp_class:28,ab:[77,182],abcd1234:77,abl:[19,20,21,22,23,24,25,63,71],about:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],absolut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],access:182,accord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],accordingli:[110,111],accuraci:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acm:182,activ:[19,20,21,22,25,180],active_sbox:24,actual:14,actual_inputs_bit:11,ad:[0,10,11,23,24,26,27,28,29,30,31,32,33,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],adapt:[95,96],add:[0,23,24,27,28,30,31,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_add_round_tweakei:103,add_additional_xor_constraint:[23,24],add_and_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_and_component_in_md5:112,add_and_component_in_sha1:113,add_and_component_sha2:114,add_and_component_to_even_round:89,add_arc:77,add_attributes_to_oper:4,add_beta_samples_to_final_result_from:5,add_bit_to_bit_list:14,add_cipher_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_com:[55,56,57,58],add_compon:[179,183,184],add_concatenate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constant_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constraint:54,add_constraint_from_str:[55,56,57,58],add_constraints_to_build_fully_automatic_model_in_sage_milp_class:[28,31],add_constraints_to_build_in_sage_milp_class:[26,27,28,29,30,31,32,33],add_constraints_to_build_in_sage_milp_class_with_fixed_compon:[28,31],add_fsr_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_component_latin_dances_permut:137,add_intermediate_output_components_id_to_dictionari:2,add_intermediate_output_rounds_id_to_dictionari:2,add_intermediate_output_values_to_dictionari:2,add_linear_layer_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_seri:103,add_modadd_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_modadd_component_in_md5:112,add_modadd_component_in_md5_for_x:112,add_modadd_component_in_sha1:113,add_modadd_component_sha2:114,add_modsub_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_multicolumns_to_graph:2,add_new_component_to_list:14,add_not_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_not_component_in_md5:112,add_or_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_or_component_in_md5:112,add_output_com:[55,56,57,58],add_output_compon:[95,103,105,125,126,127,138,139,140],add_pad:8,add_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_reverse_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_component_in_md5:112,add_rotate_component_in_sha1:113,add_rotate_component_sha2:114,add_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],add_round_const:95,add_round_kei:[84,95,98,115],add_round_key_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_component_in_md5:112,add_round_output_component_in_sha1:113,add_round_output_component_sha2:114,add_round_output_linear:[126,139],add_round_output_nonlinear:[126,139],add_sbox_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sbox_components_layer_in_even_round:89,add_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_shift_rows_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sigma_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_solution_to_components_valu:[19,20,21,22,23,24,25],add_solutions_from_components_valu:[19,20,21,22,23,24,25],add_subkei:107,add_suffix_to_compon:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],add_theta_keccak_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_theta_xoodoo_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_toy_compon:[],add_variable_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_variable_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_verbos:3,add_word_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_xor_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,179],add_xor_component_in_md5:112,add_xor_component_sha2:114,add_xor_component_to_even_round:89,addend:[23,24],addenda:[22,23,25,151,159,160,161,177],addendum:[70,76],addit:[9,10,17,23,24,59,60,61,62,63,64,65,66,67,70,76,154,159,160,161,182],addition:119,address:143,adher:[112,113,114],adp2018:182,advanc:182,advantag:[59,60,61,62],ae:[0,4,19,20,21,22,23,24,25,30,31,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177,180,182],aeb:182,aes_block_ciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],aes_block_cipher_k128_p128_o128_r2:24,aes_block_cipher_k128_p128_o128_r2_table_of_solut:24,aesblockciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],affec7:[59,64,72],africacrypt:182,after:[32,33],again:168,against:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],aggreg:190,aggregate_list_of_dictionari:190,agnost:182,ak2019:[168,182],albrecht:182,algebra:[0,16,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,182],algebraic_model:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_polynomi:[151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_test:[0,1,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],algebraicmodel:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algorithm:[0,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,182],algorithmtest:82,all:[0,4,9,11,22,24,25,32,33,54,55,56,57,58,61,62,63,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,189,190],all_apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],all_avalanche_probability_vector:2,all_equivalent_bit:14,all_input:[23,24,177],all_input_bits_avail:14,all_output_bits_avail:14,all_output_updated_bits_avail:14,all_output_vector:2,all_solutions_:[55,56,57,58],allow:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],allw2014:[151,162,164,182],almost:[61,62,66,67,74,75],alpha:[70,76],alpha_10:70,alpha_7:70,alpha_:70,alpha_i:70,alreadi:[46,51,168],also:[9,26,27,28,29,30,31,32,33,70,71,80,82,95,151,162,164,190],altern:76,alwai:[61,62,66,67,74,75,86,151,159,160,161,162,164,179],alzett:130,alzette_round:130,amount:[8,9,10,11,70,90,93,94,95,97,98,100,102,104,105,106,107,109,110,111,112,113,114,119,124,129,175],amsgrad:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],an:[0,8,9,10,11,16,23,24,50,54,70,71,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,163,164,168,177,179,182,185,188],analysi:[0,46,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],analyz:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],analyze_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],and2inputs_ddt:[151,162,164],and2inputs_lat:[151,164],and_0:70,and_0_0:[120,134,136,179],and_0_18_act:151,and_0_18_valu:151,and_0_4:[151,162,164],and_0_4_0:177,and_0_4_0_class_bit_0:177,and_0_4_0_class_bit_1:177,and_0_4_0_i:[151,162,164],and_0_4_14:[151,162,164],and_0_4_14_o:[151,162,164],and_0_4_15:[151,162,164],and_0_4_15_o:[151,162,164],and_0_4_1:177,and_0_4_1_i:[151,162,164],and_0_8:[4,151,162,164],and_0_8_0:[151,162,164],and_0_8_0_i:[151,162,164],and_0_8_0_o:[151,162,164],and_0_8_10:[151,162,164],and_0_8_10_i:[151,162,164],and_0_8_10_o:[151,162,164],and_0_8_11:[151,162,164],and_0_8_11_i:[151,162,164],and_0_8_11_o:[151,162,164],and_0_8_12_i:[151,162,164],and_0_8_13_i:[151,162,164],and_0_8_1:[151,162,164],and_0_8_1_i:[151,162,164],and_0_8_1_o:[151,162,164],and_0_8_22_i:[151,162,164],and_0_8_23_i:[151,162,164],and_0_8_2:[151,162,164],and_0_8_2_i:[151,162,164],and_0_8_i:151,and_0_8_o:151,and_0_8_x0:151,and_0_8_x10:151,and_0_8_x11:151,and_0_8_x12:151,and_0_8_x13:151,and_0_8_x14:151,and_0_8_x15:151,and_0_8_x16:151,and_0_8_x17:151,and_0_8_x18:151,and_0_8_x19:151,and_0_8_x1:151,and_0_8_x20:151,and_0_8_x21:151,and_0_8_x22:151,and_0_8_x23:151,and_0_8_x2:151,and_0_8_x3:151,and_0_8_x4:151,and_0_8_x5:151,and_0_8_x6:151,and_0_8_x7:151,and_0_8_x8:151,and_0_8_x9:151,and_0_8_y0:151,and_0_8_y10:151,and_0_8_y11:151,and_0_8_y1:151,and_0_8_y2:151,and_0_8_y3:151,and_0_8_y4:151,and_0_8_y5:151,and_0_8_y6:151,and_0_8_y7:151,and_0_8_y8:151,and_0_8_y9:151,and_1:70,and_already_ad:[22,25],and_as_boolean_funct:4,and_compon:[4,151,162,164],and_continuous_diffusion_analysi:9,and_ddt_2:[],and_inequ:45,and_lat:45,and_out:70,and_xor_differential_probability_ddt:22,and_xor_linear_probability_lat:25,andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ani:[0,21,22,24,25,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],ankel:182,annual:182,anteced:76,anver:182,anyth:77,append:[0,3,20,21,22,24,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],appendix:168,appl:[],appli:[54,95,177,182],applic:[70,123,151,162,164,182],apply_sbox_to_each_3bit_column:[138,140],approach:182,approxim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ar:[0,4,8,11,13,19,20,21,22,23,24,25,26,28,30,31,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,177,179,190],arbitrari:[159,160,161],arc:[77,179],archiv:[151,162,164,182],are_equal_compon:14,are_there_enough_available_inputs_to_evaluate_compon:14,are_there_enough_available_inputs_to_perform_invers:14,are_there_forbidden_compon:183,are_there_not_forbidden_compon:184,are_these_bits_avail:14,area:182,arg:96,argument:17,arr:10,arrai:[10,11,19,20,21,22,23,24,25,79,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],array1d:[154,159,160,161,167,169,170,175],array2d:[19,20,21,22,23,24,25,158,168,176,177],array_dim:190,articl:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],arx:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],arx_box:104,as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],ascii:82,ascon:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,163,165,166,168,171,172,173,176,179,180],ascon_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],ascon_sbox_sigma_no_matrix_permut:[117,168],ascon_sbox_sigma_permut:[28,118,157,158,165,166,171,172,173,176],asconpermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],asconsboxsigmanomatrixpermut:[117,168],asconsboxsigmapermut:[28,118,157,158,165,166,171,172,173,176],asiacrypt2020:182,ask:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],assembl:189,assert:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],assign:70,assign_functions_based_on:104,associ:[26,27,28,189],assum:14,attack:[0,15,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],attempt:24,attribut:4,august17:182,autom:182,automat:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],automata:182,autond:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],auxiliary_materi:[30,31],avail:[0,19,20,21,22,23,24,25,26,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],available_bit:14,available_output_compon:14,available_word_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],avalanch:[0,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],avalanche_depend:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_bia:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropy_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_entropy_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_result:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_test:2,avalanche_weight_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_weight_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],averag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avoid:77,awar:82,ax:4,b:[8,9,16,54,70,76,101,112,113,114,119,125,126,127,129,144,177,182],b_7:70,back:95,backward_ciph:[28,31],baena:182,ball:182,barbara:182,bardet:182,base:[0,3,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,181,182,183,184,189],base_compon:14,base_input:[],base_output:[],basi:[0,13,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],basic:70,bc2003:182,bc:[19,20,21,22,23,24,25],bcc:182,bcg:182,bdkllssss18:182,bea1:180,bea1_block_ciph:85,bea1blockciph:85,bea:85,beat:182,becaus:[45,50,70,112,113,114],becker:182,becom:95,been:[50,55,56,57,58,77,112,113,114],befor:[14,95,179],beforehand:26,begin:[55,56,57,58],behaviour:[45,50],being:70,bellini:182,below:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ber2010:182,berlin:182,berlinheidelberg:182,bernstein:182,best:70,beta:[0,5,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_10:70,beta_11:70,beta_1:[70,76],beta_7:70,beta_:70,beta_i:70,beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_sample_output:5,bettal:182,better:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],between:[48,50,54,70,76,108,177,180,190],bf:182,bfp2009:182,bfs2003:182,bfs2015:182,bghr2023:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],bh2012:182,bia:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bibliograph:180,big:[0,19,20,21,22,23,24,25,33,59,61,62,64,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,186],big_endian:50,big_m:54,big_swap:[122,123],bin:[8,82,185],binari:[4,8,9,10,27,28,54,77,82,96,177,179,182,185],binary_matrix_of_linear_compon:4,binary_valu:[20,58,72,74,75],binary_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],biryukov:182,bit:[0,3,4,8,11,14,26,27,28,30,31,32,33,50,54,58,63,70,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,180,185,190],bit_id:[71,72,73,74,75,168],bit_length:[8,79],bit_list:14,bit_nam:14,bit_posit:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],bit_positions_kei:[55,56,57,58],bit_positions_to_be_extract:190,bit_siz:[3,19,20,21,22,23,24,25,58,72,74,75,181],bit_stream:79,bit_stream_length:82,bit_transit:54,bit_valu:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],bit_vector_and:10,bit_vector_concat:10,bit_vector_linear_lay:10,bit_vector_mix_column:10,bit_vector_mix_column_poly0:10,bit_vector_modadd:10,bit_vector_modsub:10,bit_vector_not:10,bit_vector_or:10,bit_vector_print_as_hex_valu:10,bit_vector_rot:10,bit_vector_sbox:10,bit_vector_select_word:10,bit_vector_shift:10,bit_vector_shift_by_variable_amount:10,bit_vector_to_integ:10,bit_vector_xor:10,bitarrai:[0,3,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitarraytoint:175,bits_inside_word:8,bits_list:14,bits_of_an_output_compon:14,bitstr:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitvector:[70,76],bitwis:[11,30,31,151,152,156,163,167,169,170,180,185],biv:142,bivium:180,bivium_key_stream:142,bivium_state_initi:142,bivium_stream_ciph:142,biviumstreamciph:142,bjmm2012:182,bklpprsv2007:182,bkw2019:182,blackbox:[],blake2:180,blake2_hash_funct:110,blake2hashfunct:110,blake:180,blake_hash_funct:111,blakehashfunct:111,blanklin:179,blob:[30,31,95,96,159,160,161],block:[0,79,80,82,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],block_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,162,164,167,169,170,176,177,190],block_ciph:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,190],block_count:144,blocksiz:96,blp2008:182,blp2011:182,bluetooth:180,bluetooth_stream_cipher_e0:143,bluetoothstreamciphere0:143,bm2018:182,bo:182,bodi:189,bogdanov:182,boolean_polynomi:4,boolean_polynomial_r:[4,15,16],booleanpolynomialr:[16,17],boolpolyr:8,boomerang:182,boomerang_uniform:4,boot:182,both:[21,24,50,152,156,182],bottom:13,bottom_half_quarter_round:[119,129,144],bouillaguet:182,bound:[32,33,55,56,57,58,190],box:[19,20,21,22,23,24,25,45,50,123,148,149,151,162,164,168],branch:[4,25,33,62,67,70,75],branch_numb:4,branch_xor_linear_constraint:[25,33,62,67,75],bro:182,brouwer:182,brute:182,bs2011:182,build:[0,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,189],build_:55,build_all_xor_differential_trails_with_fixed_weight:58,build_bitwise_deterministic_truncated_xor_differential_trail_model:[27,28],build_bitwise_impossible_xor_differential_trail_model:28,build_cipher_model:[20,29,56,59,60,61,62,63,64,65,66,67,72],build_code_for_compon:3,build_code_for_continuous_diffusion_analysis_compon:3,build_continuous_diffusion_analysis_function_cal:3,build_deterministic_truncated_xor_differential_trail_model:[21,57,60,65],build_function_cal:3,build_inverse_deterministic_truncated_xor_differential_trail_model:21,build_lowest_weight_xor_differential_trail_model:58,build_lowest_xor_differential_trails_with_at_most_weight:58,build_mix_column_truncated_t:[19,20,21,22,23,24,25],build_tim:24,build_wordwise_deterministic_truncated_xor_differential_trail_model:[30,31],build_wordwise_impossible_xor_differential_trail_model:31,build_xor_differential_trail_and_checker_model_at_intermediate_output_level:[61,66],build_xor_differential_trail_first_step_model:[23,24],build_xor_differential_trail_model:[19,20,21,22,23,24,25,32,55,56,57,58,59,60,61,62,63,64,65,66,67,74],build_xor_differential_trail_model_templ:[22,24],build_xor_differential_trail_second_step_model:24,build_xor_linear_trail_model:[25,33,62,67,75],build_xor_truncated_t:23,builder:189,building_tim:[22,24,25],building_time_second:[22,24,25,59,61,62,64,66,67,74,75,77],byrn:182,byte_vector_and:11,byte_vector_is_consecut:11,byte_vector_linear_lay:11,byte_vector_mix_column:11,byte_vector_mix_column_poly0:11,byte_vector_modadd:11,byte_vector_modsub:11,byte_vector_not:11,byte_vector_or:11,byte_vector_print_as_hex_valu:11,byte_vector_rot:11,byte_vector_sbox:11,byte_vector_select_all_word:11,byte_vector_shift:11,byte_vector_shift_by_variable_amount:11,byte_vector_xor:11,bytearray_to_int:186,bytearray_to_wordlist:186,byteord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bytes_positions_to_little_endian_for_32_bit:190,bytes_positions_to_little_endian_for_multiple_of_32:190,bz:17,c0:17,c0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c1:17,c1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c2:17,c3:17,c4:17,c5:17,c6:17,c7:17,c:[0,16,17,54,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,177,180,182],c_2:[70,76],c_3:70,c_7:70,c_variabl:3,ca:182,cabarca:182,cadic:63,calcul:[8,168],calculate_average_differ:2,calculate_bit_posit:[19,20,21,22,23,24,25],calculate_bit_valu:[19,20,21,22,23,24,25],calculate_carry_for_three_block:4,calculate_carry_for_two_block:4,calculate_component_weight:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],calculate_input:190,calculate_input_bit_posit:[19,20,21,22,23,24,25,158],calculate_regular_differ:2,calculate_weights_for_linear_lay:4,calculate_weights_for_mix_column:4,calculate_worst_input_differ:2,call:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75],cambridg:182,can:[0,21,22,24,25,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,188],cancel:177,candidate_differ:[],cannier:182,cannot:29,care:[50,63],carri:[17,70,76],carries_id:159,carry_0_modadd_0_1_0:159,carry_0_modadd_0_1_1:159,carry_0_modadd_0_1_29:159,carry_0_modadd_0_1_2:159,carry_0_modadd_0_1_30:159,carry_id:159,carry_modadd_0_1:159,carry_modadd_0_1_0:159,carry_modadd_0_1_13:159,carry_modadd_0_1_14:159,carry_modadd_0_1_1:159,carry_modadd_0_1_29:[],carry_modadd_0_1_2:159,carry_modadd_0_1_30:[],carry_modsub_0_7_30:160,categori:[4,63],cbc:[26,79,80,82],cca:182,certain:[0,19,20,21,22,23,24,25,58,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],chacha:180,chacha_const:144,chacha_permut:[119,144],chacha_stream_ciph:144,chachapermut:[119,144],chachastreamciph:144,cham:182,chang:3,chapter:[51,168,182],chart:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],chaskei:[70,182],che:182,check:[61,66,151,162,164],check_output_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],check_siz:150,check_table_feas:168,chen:182,cheng:182,chi_definit:[125,126,127,138,139,140],chip:[],choco:24,choic:[26,71],choos:50,chosen:[59,60,61,62,63,64,65,66,67,71,110,111,112,113,114,190],chou:182,chpss18:182,chuf:[19,20,21,22,23,24,25],chunk:95,chunk_numb:[151,159,160,161,162,164],ci:[116,117,118,120,121,125,126,127,130,138,139,140],cid:182,cipher:[1,2,3,4,5,6,8,11,13,15,19,21,22,23,24,25,26,27,28,30,31,32,33,54,55,57,58,65,66,67,73,74,75,77,79,80,82,83,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,148,149,151,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,190],cipher_block_chaining_mod:79,cipher_code_str:3,cipher_famili:[119,129,137],cipher_family_nam:187,cipher_filenam:187,cipher_find_compon:14,cipher_id:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_id_solver_nam:77,cipher_input:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_input_size_:5,cipher_input_vari:[71,72,73,74,75],cipher_input_xor_linear_vari:75,cipher_inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_inv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_invers:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_list:[30,31,179],cipher_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_modul:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,187],cipher_nam:[0,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i12_o12_r1:179,cipher_name_i32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i4_o4_r1:179,cipher_name_k32_p32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_number_of_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_oper:4,cipher_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179,190],cipher_output_0_0:179,cipher_output_0_3:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_3_input:3,cipher_output_0_3_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_6:21,cipher_output_10_13:28,cipher_output_10_13_backward:28,cipher_output_11_12:28,cipher_output_1_12:[22,152],cipher_output_1_12_0_i:152,cipher_output_1_12_1_i:152,cipher_output_1_12_2_i:152,cipher_output_1_12_30_o:152,cipher_output_1_12_31_o:152,cipher_output_1_12_7_i:77,cipher_output_1_12_8_i:77,cipher_output_1_12_9_i:77,cipher_output_1_32:24,cipher_output_1_32_126:[30,31,152,156],cipher_output_1_32_127:[30,31,152,156],cipher_output_1_32_act:21,cipher_output_1_32_valu:21,cipher_output_1_6_input:148,cipher_output_1_6_output:148,cipher_output_1_7_input:149,cipher_output_1_7_output:149,cipher_output_1_8:[26,27,28,29,30,31,32,33,152,156],cipher_output_1_8_30:[152,156],cipher_output_1_8_31:[152,156],cipher_output_21_12:[59,64,72],cipher_output_21_12_i:152,cipher_output_21_12_o:152,cipher_output_2_12:[21,27,28,32,33,152,156],cipher_output_2_12_0:[152,156],cipher_output_2_12_0_i:152,cipher_output_2_12_0_o:152,cipher_output_2_12_1:[152,156],cipher_output_2_12_1_i:152,cipher_output_2_12_1_o:152,cipher_output_2_12_29_i:62,cipher_output_2_12_2:[152,156],cipher_output_2_12_2_i:152,cipher_output_2_12_30:[152,156],cipher_output_2_12_30_i:[62,67,75,152],cipher_output_2_12_30_o:152,cipher_output_2_12_31:[152,156],cipher_output_2_12_31_i:[62,67,75,152],cipher_output_2_12_31_o:152,cipher_output_2_1:86,cipher_output_31_16:[59,60,61,62,63,64,65,66,67],cipher_output_3_12:[20,22,25],cipher_output_3_12_i:25,cipher_output_3_12_o:25,cipher_output_4_12:22,cipher_output_4_71:28,cipher_output_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_output_compon:[152,156],cipher_partial_invers:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_python_dictionari:14,cipher_reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_rounds_without_permut:[],cipher_rounds_without_rot:[],cipher_st:85,cipher_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_without_key_schedul:179,cipheroutput:[152,156],ciphertext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext:[0,28,59,60,61,62,63,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext_0:[59,60,61,62,63,64,65,66,67],ciphertext_0_o:[62,67],ciphertext_1:[59,60,61,62,63,64,65,66,67],ciphertext_1_o:[62,67],ciphertext_2:[59,60,61,62,63,64,65,66,67],ciphertext_2_o:[62,67],ciphertext_3:[59,60,61,62,63,64,65,66,67],ciphertext_3_o:[62,67],ciphertext_backward:28,claasp:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,185,188,190],classic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],claus:[59,60,61,62,63,64,65,66,67,70,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],clock:[142,146,179],clock_fsm:145,clock_lfsr:145,clock_lfsr_initialization_mod:145,clock_numb:[142,143,145,146,147],clock_polynomi:[8,179],clocking_lfsr:147,close:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],closer:182,cm:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_add_clauses_to_solv:70,cms_cipher_model:59,cms_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_deterministic_truncated_xor_differential_model:[],cms_deterministic_truncated_xor_differential_trail_constraint:[],cms_modadd:159,cms_modadd_seq:159,cms_model:[59,61,62],cms_xor_differential_model:61,cms_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_mask_propagation_constraint:[151,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_model:62,cmssatciphermodel:59,cmssatdeterministictruncatedxordifferentialmodel:60,cmssatxordifferentialmodel:61,cmssatxorlinearmodel:62,cnf:[59,60,61,62,63,71,180],cnf_and:70,cnf_and_differenti:70,cnf_and_linear:70,cnf_and_seq:70,cnf_carri:70,cnf_carry_comp2:70,cnf_equival:70,cnf_hw_lipmaa:70,cnf_inequ:70,cnf_lipmaa:70,cnf_modadd_inequ:70,cnf_n_window_heuristic_on_w_var:70,cnf_or:70,cnf_or_seq:70,cnf_result_comp2:70,cnf_vshift_fals:70,cnf_vshift_id:70,cnf_xor:70,cnf_xor_seq:70,code:[0,2,50,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,182],code_gener:3,codeword:182,coeffici:179,coin:[19,20,21,22,23,24,25],cold:182,collect:190,collect_component_oper:4,collect_components_with_the_same_oper:4,collect_input_id_link:89,collis:182,colloquium:182,column:[0,9,10,11,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,176,179,180],column_step:[110,111],columns_m:96,com:[30,31,50,51,54,95,96,159,160,161,168,182],combin:177,combinator:182,command:55,comment:[28,55,56,57,58],compact:[59,60,61,62,63,64,65,66,67,86,90,93,94,95,97,98,100,102,103,104,105,106,107,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144],compar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],comparison:50,compil:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],complet:[22,24,25,59,60,61,62,63,64,65,66,67,82],complex:182,compliant:63,compoent:[],compon:[0,2,3,8,9,13,14,15,19,20,21,22,23,24,25,26,27,28,29,31,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179,183,184],component1:[14,23,24],component1_:178,component2:[14,23,24],component2_:178,component_0:[112,113,114],component_0_0:[179,184],component_1:[112,113,114],component_1_0:184,component_analysis_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_analysis_test:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],component_bit:14,component_from:[0,4,19,20,21,22,23,24,25,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,183,184],component_id:[0,3,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184],component_id_list:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_input:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,184],component_input_bit:14,component_invers:14,component_list:[14,27,28,30,31],component_nam:160,component_output_bit:14,component_output_id:[],component_rc:128,component_solut:[19,20,21,22,23,24,25],component_typ:[10,11,150],components_:128,components_in_round:184,components_io:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],components_valu:[19,20,21,22,23,24,25,71,72,73,74,75,77],components_vari:[],compos:77,compound:180,compris:143,comput:[0,4,9,10,11,15,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],compute_bsig0_bsig1:114,compute_ch:114,compute_criterion_from_avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_compon:14,compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_compon:14,compute_magic_const:101,compute_maj:114,compute_sbox_precomput:9,compute_ssig0_ssig1:114,compute_temp_and_s_30_b:113,comut:70,concaten:[10,179,180],concatenate_0_0:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],concatenate_0_0_input:3,concatenate_0_0_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_bool_func:8,concret:189,condit:76,confer:182,config:180,configur:[110,111],connect:[15,182],connect_round:58,connection_polynomi:15,connection_polynomials_at_round:15,consecut:11,consequ:76,consid:[0,23,24,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],const_0:[103,131,132,145],const_mask:177,constant:[0,9,54,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,180],constant_0_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_10:154,constant_0_10_y0:154,constant_0_10_y10:154,constant_0_10_y11:154,constant_0_10_y12:154,constant_0_10_y13:154,constant_0_10_y14:154,constant_0_10_y15:154,constant_0_10_y16:154,constant_0_10_y17:154,constant_0_10_y18:154,constant_0_10_y19:154,constant_0_10_y1:154,constant_0_10_y20:154,constant_0_10_y21:154,constant_0_10_y22:154,constant_0_10_y23:154,constant_0_10_y2:154,constant_0_10_y3:154,constant_0_10_y4:154,constant_0_10_y5:154,constant_0_10_y6:154,constant_0_10_y7:154,constant_0_10_y8:154,constant_0_10_y9:154,constant_0_18_act:154,constant_0_18_valu:154,constant_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_2_0:154,constant_0_2_0_o:154,constant_0_2_1:154,constant_0_2_1_o:154,constant_0_2_30:154,constant_0_2_30_o:154,constant_0_2_31:154,constant_0_2_31_o:154,constant_0_30:154,constant_0_30_word_0_class:154,constant_0_30_word_1_class:154,constant_0_30_word_2_class:154,constant_0_30_word_3_class:154,constant_1_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154],constant_1_0_0:154,constant_1_0_14:154,constant_1_0_15:154,constant_1_0_1:154,constant_2_0:[86,154],constant_2_0_0:154,constant_2_0_0_o:154,constant_2_0_13:154,constant_2_0_14:154,constant_2_0_14_o:154,constant_2_0_15:154,constant_2_0_15_o:154,constant_2_0_1:154,constant_2_0_1_o:154,constant_2_0_2:154,constant_2_0_2_o:154,constant_2_0_o:154,constant_block_ciph:86,constant_bool_func:8,constant_ci:130,constant_coeffici:17,constant_compon:154,constant_continuous_diffusion_analysi:9,constant_modsub_0_7:160,constant_o3_r3:86,constant_r:130,constant_to_bitstr:3,constant_to_repr:[3,154],constant_xor_differential_constraint:154,constantblockciph:86,constrain:[151,152,154,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],constraint_permutation_and_key_schedule_separately_by_input_s:58,constraint_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77],construct:[90,93,94,95,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,182,189],constructor:168,consum:[70,77],contain:[0,3,4,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,61,62,66,67,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],content:[182,189],continu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_avalanche_factor_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_test:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j_and_beta:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measures_:5,continuous_neutrality_measures_output_values_:5,control:189,conveni:[32,33],convers:13,convert:[4,10,77],convert_2d_index_to_1d_index:190,convert_output_to_byt:[3,151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],convert_polynomial_to_binary_matrix_given_polynomial_modulu:8,convert_solver_solution_to_dictionari:[32,33,77],convert_to_compound_xor_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,178],convert_x_to_binary_matrix_given_polynomial_modulu:8,convex:[45,50],convex_hul:[45,50],coordin:17,copi:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],core:180,cornerston:70,corr:182,correct:182,correl:[0,22,24,25,33,62,67,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],correspond:[0,4,11,26,30,31,33,62,63,67,71,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cost:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cou2001:182,could:[22,24,25,61,62,66,67,74,75,80,82],count:[21,182],counter:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,143,190],coupl:[19,20,21,22,23,24,25,177],courtoi:182,cp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_build_truncated_t:177,cp_cipher_model:20,cp_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_declar:[22,25,159,160,161,168],cp_deterministic_truncated_xor_differential_constraint:[151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],cp_deterministic_truncated_xor_differential_model:21,cp_deterministic_truncated_xor_differential_trail_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_get_all_input:158,cp_inverse_constraint:[167,169,170],cp_model:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cp_transform_xor_components_for_first_step:177,cp_twoterm:[151,159,160],cp_twoterms_xor_differential_prob:[159,160,161],cp_update_ddt_valid_prob:168,cp_update_lat_valid_prob:168,cp_wordwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,167,168,169,170,177],cp_xor_differential_first_step_constraint:[163,167,168,169,170],cp_xor_differential_model:24,cp_xor_differential_number_of_active_sboxes_model:[23,24],cp_xor_differential_probability_ddt:151,cp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_differential_propagation_first_step_constraint:[152,154,156,158,163,167,168,169,170,176,177],cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model:24,cp_xor_differential_trail_search_model:[19,20,21,22,23,24,25],cp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_linear_model:[25,156],cp_xor_linear_probability_lat:151,cpa:182,cpciphermodel:20,cpdeterministictruncatedxordifferentialmodel:21,cplex:26,cpmodel:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cpxordifferentialfixingnumberofactivesboxesmodel:24,cpxordifferentialmodel:[22,24],cpxordifferentialnumberofactivesboxesmodel:[23,24],cpxordifferentialtrailsearchfixingnumberofactivesboxesmodel:24,cpxordifferentialtrailsearchmodel:[19,20,21,22,23,24,25],cpxorlinearmodel:[25,156],creat:[9,13,21,22,23,24,25,59,60,61,62,63,64,65,66,67,72,74,75,77,86,89,96,179,189],create_alpha_st:145,create_constant_compon:84,create_directori:77,create_key_sbox_compon:84,create_lookup_table_by_matrix:9,create_lookup_table_for_finite_field_el:9,create_mix_column_compon:84,create_mix_row_compon:115,create_networkx_graph_from_input_id:13,create_new_state_for_calcul:190,create_numerical_cnf:70,create_rotate_compon:84,create_round:86,create_round_constant_compon:115,create_round_kei:84,create_round_output_compon:84,create_sbox_compon:[84,115],create_scenario_str:187,create_shift_column_compon:115,create_shift_row_compon:84,create_structur:[],create_sub_kei:90,create_xor_compon:[23,24,84,178],create_xor_component_input:178,creator:14,criteria:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion_nam:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],crossbr:182,cryptanalysi:[26,50,182],cryptanalyt:182,crypto:[50,168,182],cryptogr:182,cryptograph:182,cryptographi:182,cryptographiqu:182,cryptolog:182,cryptologyeprint:182,cryptominisat:[59,60,61,62,63,64,65,66,67,70,72,75],cryptominisat_sag:63,cryptominismt:74,cryptosystem:182,crystal:182,csrc:82,csv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],csvbuilder:189,curi:182,curr_input_bit_id:77,current:[0,14,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],current_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],current_round_numb:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],current_round_number_of_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],custom:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cut:[45,50],cutting_off_greedi:[45,50],cutting_off_milp:[45,50],cvxopt:26,cwi:182,cyclic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],d1:[],d2:[],d:[0,4,17,54,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],d_7:70,dagstuhl:182,dakrv18:182,dash:[59,60,61,62,63],dat:[95,96],data:[0,48,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,186,189],data_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],data_typ:[80,82],data_word_id:[110,111],data_word_rang:[110,111],dataset:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,190],dataset_gener:79,datasetgener:79,datasettyp:79,date:190,datetim:190,dbitnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ddt:[22,46,151],ddt_sbox_0_5:168,de:[180,182],debug:[10,11],decid:[50,70],decim:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],decis:[55,56,57,58],declar:[21,22,23,24,25,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],decod:182,decrypt:143,dedic:143,deep:182,deepcopi:[23,24],def:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],defaultdict:190,defend:182,defin:[0,3,8,13,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],define_const:111,define_number_of_round:[95,110,111],define_number_of_sbox:95,define_permut:[110,111],define_rotation_amount:[110,111],definit:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],degre:[4,9],deleg:189,delet:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_dictionary_that_contains_inequalities_for_large_sbox:[46,168],delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,delete_dictionary_that_contains_inequalities_for_small_sbox:50,delete_dictionary_that_contains_wordwise_truncated_input_inequ:48,delete_dictionary_that_contains_wordwise_truncated_mds_inequ:47,delete_dictionary_that_contains_wordwise_truncated_xor_inequ:48,delete_dictionary_that_contains_xor_inequ:49,delete_espresso_dictionari:54,delete_generated_evaluate_c_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_orphan_link:14,delta_const:94,delta_i:177,delta_in_1:48,delta_in_2:48,delta_x_0:177,delta_x_1:177,delta_x_2:177,densiti:[79,80,82],deo:182,depend:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],depth:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],deriv:13,derived_kei:92,des_block_ciph:87,des_ciph:88,des_exact_key_length_block_ciph:88,desblockciph:87,descend:[13,14],describ:[46,119,151,159,160,161,162,164],descript:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],desexactkeylengthblockciph:88,design:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],desir:77,detail:[143,188],determin:[0,4,54,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],determinist:[28,31,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],deterministic_truncated_xor_differenti:[19,20,21,22,23,24,25],deterministic_truncated_xor_differential_one_solut:[19,20,21,22,23,24,25],dey2023:119,diagon:[111,137],diagonal_step:[110,111],dict:[27,28,30,31,32,77,80,82,151,159,160,161,163,167,168,170],dict_criterion:2,dict_inequ:157,dict_intermediate_output_nam:2,dict_list:[80,82],dict_paramet:2,dict_polyhedron:50,dict_test_result:2,dictioanri:58,dictionari:[0,4,9,10,11,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,50,58,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],dictionary_exampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diehard:180,dieharder_:80,dieharder_random_toy_ciph:80,dieharder_random_toy_cipher_round_1:80,dieharder_report_dict:80,dieharder_report_folder_prefix:80,dieharder_statistical_test:80,dieharder_statistics_report:80,dieharder_test_output:80,diehardertest:80,diff:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diff_in_0:70,diff_in_1:70,diff_out:70,diff_str:[],differ:[0,26,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],difference_bit:[],difference_evaluation_funct:[],difference_posit:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],differenti:[0,4,26,45,46,50,51,54,63,70,71,72,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],differential_branch_numb:4,diffus:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],diffusion_factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diffusion_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],diffusion_tests_result:2,digit:[17,54,182],dilithium:182,dim:190,dimac:63,dimacs_input:70,dimens:47,dimension:8,din2021cri:182,din2021imp:182,din:182,dinur:182,dio2020:182,diogo:182,direct:[8,9,13,179,180],directli:70,directori:77,dirnam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],disabl:[55,56,57,58],discret:182,disctionari:58,discuss:51,displai:[10,11],dist:190,distanc:[182,190],distinct:[76,143,163],distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],divalpha:145,divid:63,dkllsss18:182,doc:188,docker:[46,51,82],doctest:[0,3,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],document:[82,180,182],documentclass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],doe:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],doi:182,done:29,draw:[80,82],ds:[],dto:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183],dtype:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],du2001:182,du2004:182,du2018:182,duart:182,duca:182,due:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],duke:80,dum1991:182,dumer:182,dummi:[33,54,70],dummy_0_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_0_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_0_mix_column_0_23_12_o:[158,176],dummy_0_mix_column_0_23_4_o:[158,176],dummy_0_mix_column_0_23_8_o:[158,176],dummy_10:70,dummy_10_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_10_mix_column_0_23_14_o:[158,176],dummy_11_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_11_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_11_mix_column_0_23_15_o:[158,176],dummy_12_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_13_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_15_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_16_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_17_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_1_mix_column_0_23_13_o:[158,176],dummy_1_mix_column_0_23_5_o:[158,176],dummy_1_mix_column_0_23_9_o:[158,176],dummy_20_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_21_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_2_mix_column_0_23_14_o:[158,176],dummy_3_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_3_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_3_mix_column_0_23_15_o:[158,176],dummy_4_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_4_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_6_mix_column_0_23_14_o:[158,176],dummy_7_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_7_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_7_mix_column_0_23_15_o:[158,176],dummy_8_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_8_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_8_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_9_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_hw_0_0_0:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_1:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_2:[59,60,61,62,63,64,65,66,67],dummy_hw_0_77_6:[59,60,61,62,63,64,65,66,67],dummy_hw_0_78_6:[59,60,61,62,63,64,65,66,67],dummy_i:70,dummy_modadd_1_9_0:[159,160,161],dunkelman:182,dure:[55,56,57,58],duursma:182,dx0:177,dx1:177,dx2:177,dx3:177,dx:168,dy:[168,177],e0:180,e0_bottom_id:13,e0_keystream:143,e0_nonlinear_funct:143,e1_top_id:13,e7c92d3f:[],e:[0,26,27,28,32,33,48,63,71,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,182],each:[0,3,4,8,10,11,14,15,17,26,32,33,46,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],ed:182,editor:[180,182],edu:80,effect:179,effici:182,eighth:182,either:[0,17,45,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],el:182,element:[4,8,9,14,190],elif:[54,177],eliminate_linear_vari:17,ell_funct:130,els:[21,54,76,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],else_constraint:54,elseif:[21,54],emb:182,embed:[59,60,61,62,63,64,65,66,67,182],empti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],encod:[54,177],encount:168,encrypt:[91,143,182],end:[32,33,48,59,60,61,62,63,64,65,66,67,77,80,82,179],end_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],endia:[77,186],endian:[59,64,72,77,185,190],endif:[21,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],enforc:168,engr:182,ensur:[32,33],entir:[58,77],entri:[4,46,179],entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],enumer:[79,182],env_vars_str:70,epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],eprint:[28,33,143,151,159,160,161,162,164,168,182],eq:[159,160,161],eq_modadd_0_1:[159,160,161],equal:[8,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,87,88,92,99,108,111,114,168,180,190],equality_polynomi:17,equat:[15,182],equival:[0,8,45,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],equivalent_bits_in_common:14,error:182,espresso:[46,51,54,168,177],espresso_inequ:54,espresso_pos_to_constraint:54,estim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],et:182,etc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],euclidean:190,euro:182,eurocrypt99:182,evalu:[0,3,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],evaluate_continuous_diffusion_analysi:3,evaluate_multiple_differ:[],evaluate_using_c:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vector:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vectorized_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_with_intermediate_outputs_continuous_diffusion_analysi:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluated_boolean_funct:9,evaluated_compon:14,evaluated_input:2,evaluated_y_list:9,evaluated_y_list_2:9,evaluated_y_list_3:9,everi:[0,59,60,61,62,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],evolutionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evolutionary_algorithm:[],exact:180,exampl:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],except:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,190],exchang:182,exclud:[80,82],exclude_variables_value_constraint:32,exclude_variables_value_xor_linear_constraint:33,execut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],exhaust:182,exist:[30,31,82],exmapl:79,expect:[0,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expected_output:190,experi:82,explain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expon:182,express:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],extend:[9,182],extended_and_bit:9,extended_left_rotation_by_variable_amount:9,extended_left_shift_by_variable_amount:9,extended_not_bit:9,extended_one_left_rotation_iter:9,extended_one_left_shift_iter:9,extended_one_right_rotation_iter:9,extended_one_right_shift_iter:9,extended_right_rotation_by_variable_amount:9,extended_right_shift_by_variable_amount:9,extended_two_bit_multiplex:9,extern:[26,27,28,29,30,31,32,33,50,59,60,61,62,63,64,65,66,67],external_solver_nam:[26,27,28,29,30,31,32,33],extract:[10,50,151,159,160,161,162,164,168],extract_input:190,f0:17,f0s_elim:17,f1:17,f2:182,f5:182,f:[0,9,17,55,56,57,58,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,182,190],fabio:182,fact:[151,159,160,161,162,164],factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fail:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fals:[0,3,4,6,8,10,11,14,15,16,17,21,23,24,28,31,32,50,51,55,56,57,58,59,60,61,62,63,64,65,66,67,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],famili:[114,148,149],family_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],fanci:[0,3,4,15,27,28,84,85,86,87,88,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177,180],fancy_block_ciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fancyblockciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fast:182,faster:[45,50,177],feedback:179,feistel_funct:102,ffff0000:22,ffffffffffffffffffffffffffffffff:24,fi_funct:92,field:[4,9,179,182],field_element_matrix_to_integer_matrix:4,fig:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file:[0,24,26,27,28,29,30,31,32,33,48,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_nam:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_path:[54,55,56,57,58,77,187],filenam:[79,80,82],fill_area:4,final_activ:[],final_constraint:20,final_deterministic_truncated_xor_differential_constraint:21,final_impossible_constraint:21,final_result:5,final_sign:77,final_transform:90,final_xor_differential_constraint:[22,24],final_xor_differential_first_step_constraint:[23,24],final_xor_linear_constraint:25,finalanalysisreport:82,finalanalysisreportexampl:82,find:[0,22,24,25,26,55,56,57,58,61,62,66,67,74,75,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,163,164,177,182],find_all_deterministic_truncated_xor_differential_trail:21,find_all_xor_differential_trails_with_fixed_weight:[22,24,32,58,61,66,74],find_all_xor_differential_trails_with_weight_at_most:[22,24,32,58,61,66,74],find_all_xor_linear_trails_with_fixed_weight:[25,33,62,67,75,77],find_all_xor_linear_trails_with_weight_at_most:[25,33,62,67,75],find_correct_ord:14,find_correct_order_for_invers:14,find_differential_weight:[22,24],find_good_input_difference_for_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_impossible_properti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_input_id_link_bits_equival:14,find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_lowest_weight_xor_differential_trail:[22,24,32,58,61,63,66,74],find_lowest_weight_xor_linear_trail:[25,33,62,67,75,77],find_min_of_max_xor_differential_between_permutation_and_key_schedul:58,find_missing_bit:[59,64,72],find_one_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_one_bitwise_impossible_xor_differential_trail:28,find_one_bitwise_impossible_xor_differential_trail_with_fixed_compon:28,find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model:28,find_one_deterministic_truncated_xor_differential_trail:21,find_one_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_one_wordwise_impossible_xor_differential_trail:31,find_one_wordwise_impossible_xor_differential_trail_with_fixed_compon:31,find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model:31,find_one_xor_differential_trail:[22,24,32,61,66,74],find_one_xor_differential_trail_with_fixed_weight:[22,24,32,61,66,74],find_one_xor_linear_trail:[25,33,62,67,75],find_one_xor_linear_trail_with_fixed_weight:[25,33,62,67,75],find_possible_number_of_active_sbox:[19,20,21,22,23,24,25],find_sign_for_one_xor_linear_trail:77,find_sign_for_xor_linear_trail:77,finish:[77,80,82],finit:[9,182],finite_state_machine_bit_s:143,fip:125,first:[0,11,21,22,23,24,25,46,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,179],first_add_round_kei:84,first_round:[101,117,118],first_step_solut:24,first_step_solver_nam:24,fix:[0,19,20,21,22,23,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraint:[27,28],fix_variables_value_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],fix_variables_value_deterministic_truncated_xor_differential_constraint:54,fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraint:[30,31],fix_variables_value_xor_linear_constraint:[25,33,62,67,75],fixed_bit:[30,31],fixed_index:183,fixed_valu:[21,22,24,25,27,28,32,33,58,59,61,62,64,66,67,72,74,75,77],fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],fixed_weight:[22,24,25,32,33,58,61,62,66,67,74,75],fixed_word:[30,31],fl_function:92,flag:[0,3,8,10,11,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],flag_chart:[80,82],flatten:[55,56,57,58],flip:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],float_and_lat_valu:[19,20,21,22,23,24,25],floor:[8,177],flow:[59,64,72],fo_funct:92,folder:[80,82],follow:[0,26,48,54,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,188],footer:189,foral:[159,160,161,168],forbidden_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forbidden_typ:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forc:182,form:[13,17,70,76,185],format:[0,3,4,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],format_component_valu:[19,20,21,22,23,24,25],format_differ:[],format_func:77,format_output:94,formula:[70,76],fot:58,found:[0,19,20,21,22,23,24,25,32,33,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],four:143,fr:182,frac:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],frame:141,frame_bit_s:141,free_input:150,free_search:[55,56,57,58],free_search_:[55,56,57,58],from:[0,3,4,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],from_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fse2014:[151,162,164],fsm:143,fsm_bit_siz:143,fsm_id:143,fsm_input_st:143,fsm_po:143,fsr:[8,179,180],fsr_0_0:179,fsr_1_0:141,fsr_binari:8,fsr_descript:141,fsr_word:8,fss2011:182,ft_b_c_d:113,fu2016:[159,160,161],fu:182,fuer:182,fukai6:[159,160,161],full:28,full_model:[19,20,21,22,23,24,25],fundament:182,further:[59,60,61,62,63],fwgsh2016:[159,160,161,182],g:[0,26,63,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],gaborit:182,gamma:[70,76],gamma_10:70,gamma_7:70,gamma_:70,gamma_i:70,gap:182,gc:124,gecod:[19,20,21,22,23,24,25],gen:96,gener:[0,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182],general_and:54,generalized_and:54,generat:96,generate_all_possible_points_with_n_bit:49,generate_avalanche_dataset:79,generate_avalanche_probability_vector:2,generate_beta_sample_output:5,generate_bit_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_bit_based_vectorized_python_code_str:3,generate_bitmask:185,generate_boolean_polynomial_ring_from_ciph:4,generate_byte_based_vectorized_python_code_str:3,generate_cbc_dataset:79,generate_chart_al:[80,82],generate_chart_for_all_round:82,generate_chart_round:[80,82],generate_correlation_dataset:79,generate_csv_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_dict_product_of_sum_from_espresso:51,generate_espresso_input:[46,54],generate_evaluate_c_code_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_expanded_link:179,generate_formatted_input:11,generate_graph_by_differences_posit:2,generate_heatmap_graphs_for_avalanche_test:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_high_density_dataset:79,generate_impossible_points_for_xor_between_n_input_bit:49,generate_inequalities_for_large_sbox:[50,168],generate_inputs_prim:2,generate_low_density_dataset:79,generate_matric:96,generate_product_of_sum_from_espresso:[46,54],generate_python_code_str:3,generate_python_code_string_for_continuous_diffusion_analysi:3,generate_random_dataset:79,generate_random_input:2,generate_round_kei:102,generate_sample_from_gf_2_n:190,generate_sbox_inequalities_for_trail_search:50,generate_sbox_sign_lat:168,generate_table_of_solut:24,generate_valid_points_for_truncated_mds_matrix:47,generate_valid_points_for_xor_between_n_input_word:48,generate_valid_points_input_word:48,generate_word_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_funct:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_functions_continuous_diffusion_analysi:9,generic_functions_vectorized_bit:3,generic_functions_vectorized_byt:[3,11],generic_sign_linear_constraint:[151,161,162,163,164],generic_with_constant_sign_linear_constraint:177,geometri:168,gerault:182,germani:182,get:[0,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_2d_array_element_from_1d_array_index:190,get_all_bit_nam:14,get_all_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_id:[0,28,31,59,64,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_with_the_same_input_id_link_and_input_bit_posit:14,get_all_equivalent_bit:14,get_all_inputs_bit_posit:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_all_oper:4,get_available_output_compon:14,get_average_criteria_by_round_input_output:2,get_average_criteria_list_by_output_tag:2,get_bit_based_c_cod:[153,154,157,158,165,166,168,171,172,173,176],get_bit_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_bit_bind:77,get_bodi:189,get_byte_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_ci:[125,126,127,190],get_ciph:187,get_cipher_compon:14,get_cipher_components_for_components_valu:[],get_cipher_input_for_components_valu:[],get_cipher_output_component_bit_based_c_cod:3,get_cipher_output_word_based_c_cod:3,get_cipher_outputs_for_cbc_dataset:79,get_cipher_outputs_for_correlation_dataset:79,get_cipher_outputs_for_density_dataset:79,get_cipher_typ:187,get_command_for_solver_process:[19,20,21,22,23,24,25],get_component_from_id:[0,4,14,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,169,170,171,172,173,176,177,183,184],get_component_hex_valu:76,get_component_pair:178,get_component_valu:[],get_component_value_weight:[],get_components_id:183,get_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_current_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_ddt_with_undisturbed_transit:168,get_dictionary_that_contains_inequalities_for_large_sbox:46,get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,get_dictionary_that_contains_inequalities_for_small_sbox:50,get_differential_dataset:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_equivalent_input_bit_from_output_bit:14,get_final_input_posit:179,get_final_output:[],get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most:32,get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most:33,get_foot:189,get_graph_represent:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],get_hamming_weight_funct:168,get_head:189,get_independent_input_output_vari:26,get_input_bit_positions_latin_d:137,get_input_output_vari:26,get_inputs_paramet:190,get_intermediate_output_component_bit_based_c_cod:3,get_intermediate_output_nam:2,get_intermediate_output_word_based_c_cod:3,get_inverse_matrix_in_integer_represent:4,get_ith_key128:94,get_ith_key192:94,get_ith_key256:94,get_ith_word:190,get_k_th_bit:190,get_key_schedule_component_id:14,get_keystream_bit_len:146,get_lat_valu:25,get_library_path:77,get_low_density_sequ:79,get_milp_constraints_from_inequ:177,get_mix_column_all_input:[19,20,21,22,23,24,25],get_mix_column_precomput:9,get_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_most_recent_intermediate_output:14,get_neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_new_xor_input_links_and_posit:[23,24],get_number_of_compon:183,get_number_of_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_number_of_input:3,get_number_of_rounds_from:190,get_number_of_steps_from:104,get_numbers_of_round:[90,94],get_operand:74,get_output_bit_size_from_id:179,get_output_compon:14,get_padding_component_bit_based_c_cod:3,get_partial_ciph:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_previous_output_bit_id:77,get_probability_vars_from_key_schedul:58,get_probability_vars_from_permut:58,get_related_key_scenario_format_for_fixed_valu:77,get_relative_posit:14,get_round_from_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,183,184],get_rounds_bit_based_c_cod:3,get_rounds_word_based_c_cod:3,get_sbox_precomput:9,get_single_key_scenario_format_for_fixed_valu:[27,28,30,31,32,77],get_sizes_of_components_by_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_solutions_dictionaries_with_build_tim:24,get_templ:189,get_total_weight:[19,20,21,22,23,24,25],get_transformed_xor_input_links_and_posit:177,get_transitions_for_single_output_bit:51,get_unique_links_inform:179,get_valid_points_for_wordwise_xor:48,get_word_based_c_cod:[153,154,167,168,169,170,174,175],get_word_oper:[53,68],get_word_operation_component_bit_based_c_cod:3,get_word_operation_final_xor_linear_constraint:25,get_word_operation_sign:[151,159,160,161,162,163,164,167,169,170,174,175,177],get_word_operation_word_based_c_cod:3,get_word_operation_xor_differential_constraint:[22,24],get_xor_all_input:[23,24],get_xor_probability_constraint:[71,72,73,74,75],getfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],gf2nmatrix:8,gf:[16,17,182],gf_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gift:[163,164,180],gift_permut:[120,163,164],gift_sbox_permut:121,giftpermut:[120,163,164],giftsboxpermut:121,gimli:180,gimli_permut:122,gimli_sbox_permut:123,gimlipermut:[122,123],gimlisboxpermut:123,gist:50,github:[30,31,50,95,96,159,160,161],give:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],given:[0,4,13,19,20,21,22,23,24,25,45,50,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],global:96,glpk:[26,27,28,29,30,31,32,33],glucos:[63,70],glucose_sag:63,go2019:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr_resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],good:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],goubin:182,gov:[82,125],gr:14,grain:[96,180],grain_cor:124,grain_core_permut:124,grain_ssg:96,graincorepermut:124,graph:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170,180,182],graph_represent:[14,104,108,114,124],graph_representation_of_the_ciph:77,graphrepresentationcr:14,greater:[32,33,58,99],greedi:50,grobner:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],group:190,group_by_kei:190,group_list_by_kei:190,grover:182,gtm:182,guess:[0,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],guidelin:180,guo:182,gurobi:26,h:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],h_function:108,ha:[50,55,56,57,58,77,112,113,114,148,149,179,189],haemer:182,hal:182,half:[0,28,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],half_like_round_funct:[],half_like_round_function_latin_d:137,ham:[0,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hambitz:182,handl:[59,60,61,62,63,70,112,113,114,115,143],happen:8,hardw:182,hardwar:182,has_maximal_branch_numb:4,hash_funct:[110,111,112,113,114,115],hashimoto:182,have:[0,22,24,25,32,33,61,62,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],he2002:182,he:58,header:189,heatmap:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],heavili:[151,159,160,161,162,164],hei:182,heidelberg:182,helper:180,henc:50,heurist:180,hex:[8,10,11,143,148,149,185],hex_str:8,hexadecim:77,hfe:182,hidden:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hidden_lay:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],high:[79,80,82,182,190],high_dens:79,higher:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],highest_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hight:180,hight_block_ciph:90,hightblockciph:90,him:189,homepag:182,homogen:182,host:70,how:[0,8,9,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],howard:182,howev:177,hp2003:182,hrepresent:168,html:[188,189],http:[0,28,30,31,33,46,47,48,50,51,54,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],hu:182,huang:182,huffman:182,hull:[45,50],hw:[70,76],hw_10:70,hw_6:70,hw_and_0_8_0:[151,162,164],hw_and_0_8_0_o:[151,162,164],hw_and_0_8_10:[151,162,164],hw_and_0_8_10_o:[151,162,164],hw_and_0_8_11:[151,162,164],hw_and_0_8_11_o:[151,162,164],hw_and_0_8_1:[151,162,164],hw_and_0_8_1_o:[151,162,164],hw_bit_id:70,hw_i:70,hw_modadd_0_1_0:[159,160,161],hw_modadd_0_1_0_o:[159,160,161],hw_modadd_0_1_14_o:[159,160,161],hw_modadd_0_1_15_o:[159,160,161],hw_modadd_0_1_1:[159,160,161],hw_modadd_0_1_1_o:[159,160,161],hw_modadd_0_1_29:[159,160,161],hw_modadd_0_1_2_o:[159,160,161],hw_modadd_0_1_30:[159,160,161],hw_modadd_0_1_30_o:[159,160,161],hw_modadd_0_1_31:[159,160,161],hw_modadd_0_1_31_o:[159,160,161],hw_modadd_2_7_14:[59,60,61,62,63,64,65,66,67],hw_modadd_2_7_15:[59,60,61,62,63,64,65,66,67],hw_sbox_0_2_0:168,hw_sbox_0_2_0_o:168,hw_sbox_0_2_1:168,hw_sbox_0_2_1_o:168,hw_sbox_0_2_2:168,hw_sbox_0_2_2_o:168,hw_sbox_0_2_3:168,hw_sbox_0_2_3_o:168,hw_sbox_0_5_0:168,hw_sbox_0_5_1:168,hw_sbox_0_5_2:168,hw_sbox_0_5_3:168,hybrid:182,i1:54,i2:54,i:[0,3,9,11,17,27,28,32,33,48,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,168,175,177,179,182,190],i_0:70,i_1:70,i_3:70,i_4:70,iacr:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182],icalp:182,icount:[131,132],icounter_upd:[131,132],id1:14,id2:14,id:[0,4,13,27,28,31,55,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184,190],id_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_link:181,id_str:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],id_tupl:[27,28],ident:[0,3,15,84,85,86,87,88,89,90,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],identifi:70,identity_block_ciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identity_block_cipher_cr:14,identity_block_cipher_p32_k32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],identityblockciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identityblockcipherencrypt:91,ieee:182,iff:54,ignor:[55,56,57,58],imag:82,impact:182,implement:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,177,189,190],implic:76,imposs:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],impossible_differential_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],impossible_xor_differenti:[19,20,21,22,23,24,25],improv:[55,56,57,58,182],in_0:70,in_1:70,in_id:70,in_shift:70,includ:[0,13,27,28,30,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incompat:[28,31],inconsist:[23,24],inconsistent_var:28,increas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],increment:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incrementing_count:5,inde:177,index:[0,2,3,10,11,14,15,30,31,46,47,48,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,179,180,183,190],index_occurr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],index_of_specific_input:2,indexes_of_values_in_col:157,indic:[0,8,9,20,21,22,23,24,25,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],indomain_min:[22,24,25],industri:182,ineq:168,inequ:[29,54,70,76,159,160,161,168,177,180],infeas:50,infer:177,inform:[59,60,61,62,63,77,168,179,182],informat:182,informatik:182,init_constraint:58,init_dictionary_test_result:2,init_final_result_structur:5,init_input:[90,94],init_input_bit:5,init_latin_dances_ciph:137,init_model_in_sage_milp_class:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],init_st:[],init_state_latin_d:137,init_state_plaintext:144,initi:[0,26,27,28,29,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_filling_lfsr_fsm:145,initial_popul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_round_elements_definit:103,initial_transform:90,initialise_model:[19,20,21,22,23,24,25],initialise_spider_plot:4,initialization_vector_bit_s:146,inject:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inp1:[151,159],inp2:[151,159],inplen:159,input0_id:159,input1_id:159,input:[0,2,3,4,6,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,180,182,184,185,187,188,190],input_1:[54,159,160,161],input_2:[54,159,160,161],input_bit:[0,5,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],input_bit_len:168,input_bit_posit:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_bit_positions_1:[19,20,21,22,23,24,25],input_bit_positions_list:190,input_bit_positions_lst:94,input_bit_s:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,181,184],input_bits_list:14,input_constraint:20,input_data_exampl:[80,82],input_deterministic_truncated_xor_differential_constraint:21,input_diff:2,input_differ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_fil:[80,82],input_file_format:82,input_file_nam:70,input_file_path:[19,20,21,22,23,24,25],input_id:[27,28,99,179],input_id_link:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_id_link_1:[19,20,21,22,23,24,25],input_id_tupl:[27,28],input_ids_list:190,input_index:[79,80,82],input_len:177,input_length:[8,19,20,21,22,23,24,25,159,160,161],input_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_lst:9,input_matrix:8,input_nam:2,input_name_1:[19,20,21,22,23,24,25,158],input_name_2:[19,20,21,22,23,24,25,158],input_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],input_plaintext:137,input_po:99,input_s:[0,8,9,10,11,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_state_of_compon:144,input_tag:2,input_tag_:5,input_var:[33,151,157,159,160,161,162,164,168,177],input_var_list:54,input_vector:8,input_wordwise_deterministic_truncated_xor_differential_constraint:[21,30,31],input_xor_differential_constraint:[22,24],input_xor_differential_first_step_constraint:[23,24],input_xor_linear_constraint:25,inputs0:[],inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],inputs_bit_size_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_dens:79,inputs_fix:79,inputs_id:[32,33,159,190],inputs_ids_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_list:190,inputs_po:190,inputs_size_to_dict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_tag:5,inria:182,insert:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],insid:[55,56,57,58,77,112,179],inspect:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],instal:[26,46,51,59,60,61,62,63,64,65,66,67,71,82],instanc:[3,4,16,26,27,28,29,30,31,32,33,55,56,57,58,86,90,93,94,95,96,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182],instanti:96,instantiate_matrix:96,instantiate_matrix_over_correct_field:4,instead:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],instruct:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],int_search:[22,24,25],int_to_byte_arrai:8,int_to_bytearrai:[179,186],int_to_poli:[4,190],int_to_wordlist:186,int_valu:[59,64,72,77],integ:[0,4,8,9,10,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,177,179,180,184,188,190],integer_to_bit_list:[19,20,21,22,23,24,25,27,28,30,31,33,59,61,62,64,66,67,71,72,73,74,75,77],integer_to_np:[],integer_valu:[4,8,190],integer_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],integr:26,intermedi:[0,3,21,55,56,57,58,61,66,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,177,179,180],intermediate_compon:156,intermediate_output:[0,2,3,6,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],intermediate_output_0_0:[102,179],intermediate_output_0_0_input:148,intermediate_output_0_0_output:148,intermediate_output_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_1_input:149,intermediate_output_0_1_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_35:[30,31,152,156],intermediate_output_0_35_act:[152,156],intermediate_output_0_35_valu:[152,156],intermediate_output_0_37:31,intermediate_output_0_5:21,intermediate_output_0_5_input:148,intermediate_output_0_5_invers:21,intermediate_output_0_5_output:148,intermediate_output_0_6:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156],intermediate_output_0_6_0_i:[77,156],intermediate_output_0_6_0_o:156,intermediate_output_0_6_10_i:77,intermediate_output_0_6_11_i:77,intermediate_output_0_6_1_i:156,intermediate_output_0_6_1_o:156,intermediate_output_0_6_29_i:156,intermediate_output_0_6_2_i:156,intermediate_output_0_6_2_o:156,intermediate_output_0_6_30_i:156,intermediate_output_0_6_31_i:156,intermediate_output_0_6_7_i:77,intermediate_output_0_6_8_i:77,intermediate_output_0_6_9_i:77,intermediate_output_0_6_i:156,intermediate_output_0_6_input:149,intermediate_output_0_6_o:156,intermediate_output_0_6_output:149,intermediate_output_0_71:28,intermediate_output_1_0_input:148,intermediate_output_1_0_output:148,intermediate_output_1_1:86,intermediate_output_1_1_input:149,intermediate_output_1_1_output:149,intermediate_output_1_5_input:148,intermediate_output_1_5_output:148,intermediate_output_1_6_input:149,intermediate_output_1_6_output:149,intermediate_output_1_71:28,intermediate_output_21_11:[59,64,72],intermediate_output_2_71:28,intermediate_output_31_15:[59,60,61,62,63,64,65,66,67],intermediate_output_5_12:28,intermediate_output_arc:77,intermediate_output_cod:3,intermediate_output_nam:[2,26,27,28,29,30,31,32,33],intermediate_solutions_:[55,56,57,58],intermediate_var:156,intermediateoutput:156,intern:[26,27,28,29,30,31,32,33,59,60,61,62,63,64,65,66,67,70,115,182],internal_st:[90,94],interrupt:[55,56,57,58],interv:[22,24,25,61,62,66,67,74,75],introduc:[59,60,61,62],introduct:182,invers:[0,4,21,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],inverse_compon:14,invert:[0,14,21,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,139,140,141,142,143,144,145,146,147,148,149,180],involv:[11,177],iota_definit:[125,126,127,138,139,140],ip:182,ipm:182,ir:182,irreduc:8,irreducible_polynomial_int_repr:9,is_addit:17,is_algebraically_secur:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_bit_adjacent_to_list_of_bit:14,is_bit_contained_in:14,is_boolean_polynomial_r:[15,16],is_component_input:183,is_continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_continuous_neutrality_measur:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_forbidden:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_id_equal_to:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_intermedi:152,is_intersection_of_input_id_links_nul:14,is_linear_layer_permut:179,is_md:4,is_output:2,is_output_bits_updated_equivalent_to_input_bit:14,is_possibly_invertible_compon:14,is_power_of_2_word_bas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],is_shift_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_single_kei:32,is_spn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],isfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],issu:182,ite:[76,175],iter:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],itertool:54,its:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],itself:[45,50,91],iv:[142,145,146,147],iv_bit_s:[142,145,146,147],j:[19,20,21,22,23,24,25,159,160,161,177,182],jacekpomyka:182,jerzi:182,join:[54,77],joint:182,josef:182,journal:182,joux:182,just:[112,113,114,115],jv2018:182,k0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k:[0,9,26,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177,182,190],k_4_128:104,k_4_64:104,k_7:70,k_8_256:104,kaczorowski:182,karmakar:182,kaski:182,kasumi:180,kasumi_block_ciph:92,kasumiblockciph:92,keccak:[8,179,180],keccak_invertible_permut:125,keccak_permut:126,keccak_sbox_permut:127,keccakinvertiblepermut:125,keccakpermut:126,keccaksboxpermut:127,keep:[50,179],keep_key_schedul:[0,14,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],kei:[0,4,11,19,20,21,22,23,24,25,27,28,30,31,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,175,177,179,180,182,190],kem:182,kept:[],kera:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_0:[159,175],key_0_2_0_o:77,key_0_2_10_o:77,key_0_2_11_o:77,key_12:[151,162,164],key_13:[151,162,164],key_1:[159,160,161,175],key_22:[151,162,164],key_23:[151,162,164],key_29:[159,160,161],key_2:[159,160,161,175],key_30:[159,160,161],key_31:[159,160,161],key_32:[167,170],key_33:[167,170],key_39:[167,170],key_40:[167,170],key_48:177,key_49:177,key_61:177,key_62:[71,72,73,74,75,177],key_62_o:75,key_63:[71,72,73,74,75,177],key_63_o:75,key_91:175,key_95:175,key_act:[21,177],key_add:97,key_backward:28,key_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,168,169,170,177,190],key_der:92,key_expans:101,key_id:[95,97],key_initi:[103,105],key_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_length:108,key_loading_to_lfsr:147,key_o:25,key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_rot:84,key_sboxes_compon:84,key_schedul:[103,120,121],key_schedule_compon:14,key_schedule_component_id:14,key_siz:101,key_st:147,key_stat:85,key_stream:[146,147],key_valu:[21,177],key_y0:[55,56,57,58],keyerror:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],keysiz:96,keystream:[141,143,145,146],keystream_bit_len:[142,143,146],keystream_word_s:145,ki_id:92,ki_posit:92,kiltz:182,kind:26,kipni:182,kissat:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],knudsen:182,kpg1999:182,ks2:145,ks:[142,143,146,147],ks_32:145,kt:114,kyber:182,l:[11,26,76,108,157,165,166,171,172,173,182,188],l_bit:108,la:182,label:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lafourcad:182,lambda:[0,17,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lambda_2:104,lambda_4:104,lambda_valu:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lane_num:190,lane_s:190,lang:182,languag:182,larg:[50,168,180],largest_round_criterion_not_satisfi:2,last:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,80,82,86,179],lat:[25,151],lat_sbox_0_5:168,lat_tabl:25,later:[45,50],latex:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],latexbuild:189,lattic:182,layer:[0,4,8,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,165,166,171,172,173,176,179,180],layer_and_lane_initi:190,lblock:180,lblock_block_ciph:93,lblockblockciph:93,lc:17,ldc_tutori:182,lea:180,lea_block_ciph:94,leablockciph:94,leander:182,learn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],least:[32,33,61,66,70,71,77],lectur:182,left:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],left_rotations_list:94,left_shift_amount:[100,106,109],left_var:70,leibniz:182,len:[0,4,8,9,10,17,22,23,24,25,32,33,61,62,66,67,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,168,188],len_keystream_word:147,length:[0,3,8,77,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],lepoint:182,less:[87,88,92,108,168,190],level:[55,56,57,58,61,66],lfsr:179,lfsr_input_st:143,lfsr_s_high_16bit:147,lfsr_s_low_16bit:147,lfsr_state:143,lfsr_state_bit_s:143,lfsr_state_s:143,lfsr_with_initialization_mod:147,lib:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],librari:[0,26,27,28,29,30,31,32,33,63,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],library_path:77,licens:26,lightweight:182,like:[70,77,112,113,114],limit:58,lin1999:182,line:[54,55,80,82],linear:[0,4,9,10,11,29,45,50,54,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],linear_lay:[4,8,9,95,130,179],linear_layer_0_0:[95,179],linear_layer_0_17_0_i:[157,165,166,171,172,173],linear_layer_0_17_1_i:[157,165,166,171,172,173],linear_layer_0_17_62:[157,158,165,166,171,172,173,176],linear_layer_0_17_62_o:[157,165,166,171,172,173],linear_layer_0_17_63:[157,158,165,166,171,172,173,176],linear_layer_0_17_63_o:[157,165,166,171,172,173],linear_layer_0_6:[157,165,166,171,172,173],linear_layer_0_6_0:[157,165,166,171,172,173],linear_layer_0_6_0_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_17_o:[157,165,166,171,172,173],linear_layer_0_6_18_o:[157,165,166,171,172,173],linear_layer_0_6_19_o:[157,165,166,171,172,173],linear_layer_0_6_1:[157,165,166,171,172,173],linear_layer_0_6_1_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_20_o:[157,165,166,171,172,173],linear_layer_0_6_21:[157,165,166,171,172,173],linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_22:[157,165,166,171,172,173],linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_23:[157,165,166,171,172,173],linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_2:[157,165,166,171,172,173],linear_layer_0_6_2_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_3_i:[157,165,166,171,172,173],linear_layer_0_6_4_i:[157,165,166,171,172,173],linear_layer_0_6_5_i:[157,165,166,171,172,173],linear_layer_0_6_6_i:[157,165,166,171,172,173],linear_layer_0_6_i:[157,165,166,171,172,173],linear_layer_0_6_o:[157,165,166,171,172,173],linear_layer_0_6_x12:[157,165,166,171,172,173],linear_layer_0_6_x14:[157,165,166,171,172,173],linear_layer_0_6_x15:[157,165,166,171,172,173],linear_layer_0_6_x16:[157,165,166,171,172,173],linear_layer_0_6_x18:[157,165,166,171,172,173],linear_layer_0_6_x19:[157,165,166,171,172,173],linear_layer_0_6_x23:[157,165,166,171,172,173],linear_layer_0_6_x3:[157,165,166,171,172,173],linear_layer_0_6_x6:[157,165,166,171,172,173],linear_layer_0_6_x8:[157,165,166,171,172,173],linear_layer_0_6_x9:[157,165,166,171,172,173],linear_layer_0_6_y0:[157,165,166,171,172,173],linear_layer_compon:[157,158,165,166,171,172,173,176],linear_layer_continuous_diffusion_analysi:9,linear_layer_funct:150,linear_layer_properti:4,linear_layer_rot:147,linear_layer_to_binary_matrix:150,linear_matrix:9,linear_transform_l1:147,linear_transform_l2:147,linearlay:[157,158,165,166,171,172,173],link:[27,28,51,58,168,179,182,188],link_binary_tuples_to_integer_vari:[27,28],linked_compon:156,lint:182,lipic:182,lipmaa:[70,76,182],list1:14,list2:14,list:[0,3,4,8,9,10,11,13,14,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,188,190],list_length:[59,64,72,77],list_of_bit_nam:14,list_of_test_vectors_input:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_test_vectors_output:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_xor_compon:[23,24,158],list_siz:3,list_specific_input:150,liter:[59,60,61,62,63],littl:[19,20,21,22,23,24,25,77,185,190],liu:182,lm2001:[159,160,161,182],lm:17,lnc:182,lo:147,load:95,load_const:95,load_paramet:187,local:82,log2:177,logarithm:[33,62,67,75],logic:[46,51,180],logo:189,lokshtanov:182,longer:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],longest:[61,62,66,67,74,75],look:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],lookup:[9,148,149],lookup_t:[8,9],lookup_table_2:9,lookup_table_3:9,loop:[8,24],lor:186,loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],low:[79,80,82,190],low_dens:79,lower:[32,33,58,61,62,66,67,74,75],lowest:[22,24,25,27,28,30,31,32,33,58,61,62,66,67,74,75],lowmc:180,lowmc_block_ciph:95,lowmc_constants_p:96,lowmc_generate_matric:95,lowmcblockciph:95,lp:[26,27,28,29,30,31,32,33],lp_sage:63,lpn:182,lpt:182,lrot:[167,170],lsb:77,lsfr:96,lshift:[169,175],lshift_by_variable_amount:175,lst:190,lst_by_id:190,lst_exampl:190,lst_x:190,lst_y:190,luck:182,lwe:182,lwr2016:[159,160,161,182],lwr:182,lx:17,ly:[17,22,24,25,61,62,66,67,74,75],lyubashevski:182,lz:17,m0:[110,111],m1:[110,111],m:[0,10,27,28,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],m_function:99,m_t:179,mai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],main:96,mainli:91,majority_funct:99,make:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],make_cipher_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],make_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],make_resnet:[],makedir:82,mani:[0,8,9,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],manner:177,manual:180,map:[11,95,180],mari:182,mask:[70,76,177],mask_in_0:70,mask_in_1:70,mask_out:70,master:[30,31,95,96,108,143,159,160,161],master_kei:90,mat:[48,49,96],match:77,materi:[30,31],math:182,mathemat:182,mathsat:[63,71],mathsat_pars:71,matplotlib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],matric:[10,11,95,99,158,176,180],matrix:[0,4,8,9,10,11,45,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],max_degree_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],max_number_of_carri:58,max_number_of_nonlinear_carri:58,max_pattern_valu:[47,48],max_weight:[22,24,25,32,33,58,61,62,66,67,74,75],maxim:96,maximum:[32,33],mb:77,mc_matrix:4,mceliec:182,md5:180,md5_hash_funct:112,md5_step:112,md5hashfunct:112,md:[4,158,176,180],mdla:[30,31],mean:[27,28,79,80,82],meant:89,measur:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],memori:[19,20,21,22,23,24,25,77],memory_keyword:[],memory_megabyt:[21,61,62,66,67,71,72,73,74,75,77],mention:168,merg:190,merge_bit:8,merging_list_of_list:190,messag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],method:[0,3,9,21,22,24,25,32,33,46,54,55,59,60,61,62,63,64,66,67,70,71,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,176,177,182],metric:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],meurer:182,mht2013:182,middle_round:[28,31],midori:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,180],midori_block_ciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],midoriblockciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],might:[45,50],milp:[0,45,50,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182],milp_and:54,milp_bitwise_deterministic_truncated_xor_differential_binary_constraint:[157,158,159,160,161,165,166,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_model:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_impossible_xor_differential_model:28,milp_cipher_model:29,milp_constraint:[152,156,157,158,163,165,166,167,169,170,171,172,173,176,177],milp_deterministic_truncated_xor_differential_model:[],milp_deterministic_truncated_xor_differential_trail_constraint:[],milp_els:54,milp_eq:54,milp_generalized_and:54,milp_generalized_xor:54,milp_geq:54,milp_great:54,milp_if_elif_els:54,milp_if_then:54,milp_if_then_els:54,milp_large_xor_differential_probability_constraint:168,milp_large_xor_linear_probability_constraint:168,milp_large_xor_probability_constraint_for_inequ:168,milp_leq:54,milp_less:54,milp_model:[26,27,28,29,30,31,32,33,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_n_window_heurist:161,milp_neq:54,milp_or:54,milp_small_xor_differential_probability_constraint:168,milp_small_xor_linear_probability_constraint:168,milp_speck:[159,160,161],milp_twoterms_xor_linear_probability_constraint:[151,162,164],milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraint:168,milp_wordwise_deterministic_truncated_xor_differential_constraint:[152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_model:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_sequential_constraint:177,milp_wordwise_deterministic_truncated_xor_differential_simple_constraint:[168,177],milp_wordwise_impossible_xor_differential_model:31,milp_xor:54,milp_xor_differential_model:[26,27,28,29,30,31,32,33],milp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_constraint:177,milp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_model:[33,77,156],milp_xor_trunc:54,milp_xor_truncated_wordwis:54,milpbitwisedeterministictruncatedxordifferentialmodel:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milpbitwiseimpossiblexordifferentialmodel:28,milpciphermodel:29,milpdeterministictruncatedxordifferentialmodel:[],milpmodel:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milpwordwisedeterministictruncatedxordifferentialmodel:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milpwordwiseimpossiblexordifferentialmodel:31,milpxordifferentialmodel:[26,27,28,29,30,31,32,33],milpxorlinearmodel:[33,77,156],min_all_prob:58,min_weight:[22,24,25,32,33,58,61,62,66,67,74,75],mind:182,minim:[22,23,24,25,45,46,50,51,180],minimum:[23,24,46,182],minisat:[63,70],minizinc:[24,152,154,156,159,160,161,167,169,170,175,177],minizinc_cipher_model:56,minizinc_constraint:[152,156,167,169,170,177],minizinc_deterministic_truncated_xor_differential_model:57,minizinc_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],minizinc_model:[55,56,57,58,154,159,160,161,167,169,170,175,177],minizinc_xor_differential_model:[55,56,57,58,154,159,160,161],minizinc_xor_differential_propagation_constraint:[152,154,156,159,160,161,167,169,170,175,177],minizincciphermodel:56,minizincdeterministictruncatedxordifferentialmodel:57,minizincmodel:[55,56,57,58,167,169,170,175,177],minizincxordifferentialmodel:[55,56,57,58,154,159,160,161],minor:4,minrank:182,minus1_power_x_:9,minus1_power_x_s_2:9,minus1_power_x_s_3:9,minus1_power_x_t:9,minus_pre_modsub_0_7_1:160,mip:[32,33,54,161],mipvari:[27,28,30,31,151,159,160,161,162,164,168],miura:182,mix:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,107,176,179,180],mix_column:[9,11,19,20,21,22,23,24,25,97,158,176,179],mix_column_0_0:179,mix_column_0_19:4,mix_column_0_1:4,mix_column_0_20:[4,158,176],mix_column_0_20_34:[158,176],mix_column_0_20_35:[158,176],mix_column_0_20_36:[158,176],mix_column_0_20_37:[158,176],mix_column_0_20_38:[158,176],mix_column_0_20_39:[158,176],mix_column_0_20_40:[158,176],mix_column_0_20_41:[158,176],mix_column_0_20_42:[158,176],mix_column_0_20_43:[158,176],mix_column_0_20_44:[158,176],mix_column_0_20_45:[158,176],mix_column_0_20_word_0_class_bit_0:[157,165,166,171,172,173],mix_column_0_20_word_0_class_bit_1:[157,165,166,171,172,173],mix_column_0_20_x0:[158,176],mix_column_0_20_x1:[158,176],mix_column_0_20_x2:[158,176],mix_column_0_20_y0:[158,176],mix_column_0_20_y1:[158,176],mix_column_0_20_y2:[158,176],mix_column_0_20_y61:[158,176],mix_column_0_20_y62:[158,176],mix_column_0_20_y63:[158,176],mix_column_0_21:[4,31,158,176],mix_column_0_21_14:[157,165,166,171,172,173],mix_column_0_21_15:[157,165,166,171,172,173],mix_column_0_21_30:[158,176],mix_column_0_21_31:[158,176],mix_column_0_21_i:[158,176],mix_column_0_21_o:[158,176],mix_column_0_21_word_3_class_bit_0:[158,176],mix_column_0_21_word_3_class_bit_1:[158,176],mix_column_0_23_0:[158,176],mix_column_0_23_0_i:[158,176],mix_column_0_23_14:[158,176],mix_column_0_23_14_o:[158,176],mix_column_0_23_15:[158,176],mix_column_0_23_15_o:[158,176],mix_column_0_23_1:[158,176],mix_column_0_23_1_i:[158,176],mix_column_0_23_2:[158,176],mix_column_0_23_2_i:[158,176],mix_column_0_31:4,mix_column_0_31_0_i:[158,176],mix_column_0_31_1_i:[158,176],mix_column_0_31_30_o:[158,176],mix_column_0_31_31_o:[158,176],mix_column_1_20:4,mix_column_compon:[4,9,84,158,176],mix_column_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],mix_column_gener:8,mix_column_generalized_bool_func:8,mix_column_generalized_continuous_diffusion_analysi:9,mix_column_matrix:9,mix_column_truncated_table_mix_column_0_21:[19,20,21,22,23,24,25,158,176],mixcolumn:[10,158,176],mmt2011:182,mo2015:182,mod:[17,157,158,159,160,161,163,165,166,171,172,173,176,177],mod_addition_polynomi:17,mod_binary_operation_polynomi:17,mod_subtraction_polynomi:17,modadd:[4,8,11,160,161,179,180],modadd_0_0:[90,100,110,179],modadd_0_1:[21,159,160,161,177,179],modadd_0_1_0:[159,160,161,177],modadd_0_1_0_i:[159,160,161],modadd_0_1_0_o:[159,160,161],modadd_0_1_13:[159,177],modadd_0_1_14:[159,160,161,177],modadd_0_1_14_o:[159,160,161],modadd_0_1_15:[159,160,161,177],modadd_0_1_15_class_bit_0:[159,160,161],modadd_0_1_15_class_bit_1:[159,160,161],modadd_0_1_15_o:[159,160,161],modadd_0_1_1:[159,160,161,177],modadd_0_1_1_i:[159,160,161],modadd_0_1_1_o:[159,160,161],modadd_0_1_29:[159,160,161],modadd_0_1_2:[159,160,161],modadd_0_1_2_i:[159,160,161],modadd_0_1_30:[159,160,161],modadd_0_1_30_i:[159,160,161],modadd_0_1_30_o:[159,160,161],modadd_0_1_31:[159,160,161],modadd_0_1_31_i:[159,160,161],modadd_0_1_31_o:[159,160,161],modadd_0_1_32_i:[159,160,161],modadd_0_1_33_i:[159,160,161],modadd_0_1_62_i:[159,160,161],modadd_0_1_63_i:[159,160,161],modadd_0_1_i:[159,160,161],modadd_0_1_o:[159,160,161],modadd_0_4:160,modadd_0_4_30:160,modadd_0_4_31:160,modadd_1_10:4,modadd_1_9:[4,159],modadd_1_9_c0_0:159,modadd_1_9_c1_4:159,modadd_1_9_c1_5:159,modadd_1_9_o0_0:159,modadd_1_9_o0_4:159,modadd_1_9_o0_5:159,modadd_1_9_x0:[159,160,161],modadd_1_9_x10:[159,160,161],modadd_1_9_x11:[159,160,161],modadd_1_9_x16:159,modadd_1_9_x17:159,modadd_1_9_x1:[159,160,161],modadd_1_9_x2:[159,160,161],modadd_1_9_x3:[159,160,161],modadd_1_9_x4:[159,160,161],modadd_1_9_x5:[159,160,161],modadd_1_9_x6:[159,160,161],modadd_1_9_x7:[159,160,161],modadd_1_9_x8:[159,160,161],modadd_1_9_x9:[159,160,161],modadd_1_9_y0_0:[159,160,161],modadd_1_9_y1_0:[159,160,161],modadd_1_9_y2_0:[159,160,161],modadd_1_9_y3_0:[159,160,161],modadd_1_9_y4_0:[159,160,161],modadd_1_9_y5:159,modadd_1_9_y5_0:[159,160,161],modadd_as_boolean_funct:4,modadd_compon:[4,159,160,161],modadd_continuous_diffusion_analysi:9,modadd_continuous_diffusion_analysis_two_word:9,modadd_linear:[159,160,161],model:[0,13,16,17,47,48,50,51,54,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],model_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],model_fil:77,model_to_writ:77,model_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],model_vari:[27,28,30,31,54],modifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],modsub:[8,11,159,161,179,180],modsub_0_0:179,modsub_0_7:160,modsub_0_7_30:160,modsub_0_7_31:160,modsub_compon:160,modsub_continuous_diffusion_analysi:9,modul:[26,46,50,51,63,70,112,113,114,182],modular:[9,10,70,76,159,160,180],modular_addition_word:[159,160,161],modular_compon:[159,160,161],modulo:2,modulu:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,179],monomi:[8,179],more:[0,9,22,24,25,33,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,188],moriai:[70,76,182],most:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],moving_index:183,mq:182,msb:[26,54,63,77,177],mul_tabl:[10,11],mulalpha:145,multi:180,multi_input_non_linear_logical_operator_compon:[151,164],multiinputnonlinearlogicaloper:[151,162,164],multipl:[0,4,8,10,11,14,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],multivari:182,mulx:145,mulxpow:145,mun:182,mur2020:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],murilo:182,must:[0,8,9,19,20,21,22,23,24,25,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],my_dataset:190,mzn:180,mzn_shift_by_variable_amount_constraint:175,n:[0,3,8,10,17,23,24,50,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,175,177,180,182,185,188,190],n_sbox:95,n_window_heurist:[26,27,28,29,30,31,32,33],name:[0,10,11,15,19,20,21,22,23,24,25,26,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],name_fil:190,narray1d:177,nb_occ:2,nb_sampl:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ndarrai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nearest:182,necessari:[45,50],necessarili:[32,33],need:[3,19,20,21,22,23,24,25,26,32,33,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,80,82,111,168,180,190],neg:[8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,61,62,66,67,74,75,179,188],negat:[11,59,60,61,62,63,76],neighbor:182,network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_blackbox_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_differential_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_staged_train:[],neuron:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neutral:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],new_constraint:[22,24,25],new_expanded_link:179,new_input_bit_positions_1:[19,20,21,22,23,24,25,158],new_input_bit_positions_2:[19,20,21,22,23,24,25,158],new_input_posit:179,new_link:179,new_numb_of_inp:[23,24],new_posit:179,next:[70,76],next_component_index_from:179,ngen:15,niederhagen:182,nist:[80,125,180],nist_:82,nist_random_toy_ciph:[],nist_random_toy_cipher_round_1:[],nist_statistical_test:82,nist_statistics_report:82,nist_sts_report_dict:82,nist_sts_report_folder_prefix:82,nistpub:125,nl:182,nlfsr:179,nmax:[23,24],node:[55,56,57,58],non:[4,19,20,21,22,23,24,25,29,32,58,61,66,74,75,77,180,188,190],non_linear_component_id:[26,27,28,29,30,31,32,33,168],nonc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],none:[0,2,5,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,186,189,190],nor:[59,60,61,62,63,64,65,66,67],normal:17,not_0_0:179,not_0_18:163,not_0_5:163,not_0_5_0:163,not_0_5_0_i:163,not_0_5_0_o:163,not_0_5_1:163,not_0_5_1_i:163,not_0_5_1_o:163,not_0_5_62:163,not_0_5_62_i:163,not_0_5_62_o:163,not_0_5_63:163,not_0_5_63_i:163,not_0_5_63_o:163,not_0_5_i:163,not_0_5_o:163,not_0_5_x0:163,not_0_5_x1:163,not_0_5_x2:163,not_0_5_x61:163,not_0_5_x62:163,not_0_5_x63:163,not_0_5_y0:163,not_0_5_y1:163,not_0_5_y2:163,not_0_5_y61:163,not_0_5_y62:163,not_0_5_y63:163,not_0_8:163,not_0_8_0:163,not_0_8_0_i:163,not_0_8_1:163,not_0_8_1_i:163,not_0_8_2:163,not_0_8_2_i:163,not_0_8_30:163,not_0_8_30_i:163,not_0_8_30_o:163,not_0_8_31:163,not_0_8_31_i:163,not_0_8_31_o:163,not_compon:163,not_const:135,not_continuous_diffusion_analysi:9,not_equ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],note:[14,32,33,59,60,61,62,70,71,182],notion:51,notwis:70,np:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],npolynomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr_solutions_:[55,56,57,58],nround_0:3,nsolut:[55,56,57,58],ntt:182,num_epoch:[],num_filt:[],num_output:[],numadd:[22,23,25,151,177],numb_of_inp:[158,177],numb_of_inp_1:[19,20,21,22,23,24,25],number:[0,4,9,10,11,15,19,20,21,22,25,27,28,30,31,45,50,54,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,177,179,180,182,184,190],number_of_1:157,number_of_active_sbox:[23,24],number_of_bit:49,number_of_bit_stream:82,number_of_block:[130,190],number_of_blocks_in_one_sampl:[79,80,82],number_of_clock:8,number_of_compon:[183,184],number_of_epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_ineq:[45,50],number_of_initialization_clock:[142,145,146,147],number_of_input:[4,8,9,10,11,33,48],number_of_input_bit:[49,177],number_of_lay:99,number_of_lin:[80,82],number_of_monomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_normal_clocks_at_initi:141,number_of_occurr:2,number_of_oper:94,number_of_output:9,number_of_round:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,184,190],number_of_row:8,number_of_sampl:[0,2,5,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],number_of_samples_in_one_lin:[80,82],number_of_sbox:[87,88,95],number_of_step:130,number_of_test:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_vari:[0,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_word:[48,90,94],numerical_cnf:70,numerical_cnf_to_dimac:70,numpi:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvar:15,nvariabl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvlpub:125,nx:17,ny:17,nz:17,o:[48,182],o_funct:99,object:[0,3,4,8,13,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,58,63,71,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,181,183,184,189,190],objective_gener:58,observ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],obtain:[0,19,20,21,22,23,24,25,54,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],occur:[28,31],occurr:4,odd:[119,129],off:[45,50],offer:70,offset:179,oil:182,old_cipher_inputs_:178,old_xor_compon:[23,24],onc:77,one:[0,10,11,22,24,25,26,27,28,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,190],onli:[0,4,29,46,48,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],oper:[0,4,8,9,10,11,22,25,55,56,57,58,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,161,163,164,167,170,176,177,180],operand:[70,76,151,152,156,160,162,164],optim:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimis:[55,56,57,58],optimisation_level_:[55,56,57,58],optimizer_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimizer_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],option:[0,8,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],or_0_0:179,or_0_4:164,or_0_4_0:164,or_0_4_1:164,or_0_4_30:164,or_0_4_31:164,or_0_4_y0:164,or_0_4_y1:164,or_0_4_y30:164,or_0_4_y31:164,or_0_9:164,or_39_6_i:164,or_39_6_o:164,or_compon:164,or_continuous_diffusion_analysi:9,order:[0,3,4,11,22,24,25,61,62,63,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185,190],order_input_id_links_for_modadd:14,order_of_linear_compon:4,ordin:24,org:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],orient:3,origin:[112,113,114],orphan:14,os:[0,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],other:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],otherwis:[0,8,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],out:[27,28,70,151,159,160,161,177],out_id:70,out_suffix:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,76],output:[0,3,4,8,9,10,11,14,17,19,20,21,22,23,24,25,26,32,33,48,54,55,56,57,58,61,66,70,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,162,164,168,177,179,180],output_absolute_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit:[0,5,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit_len:168,output_bit_s:[0,2,3,4,10,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,187],output_bits_updated_list:14,output_compon:[21,152,156],output_constraint:21,output_dictionary_that_contains_wordwise_truncated_input_inequ:48,output_dictionary_that_contains_wordwise_truncated_mds_inequ:47,output_dictionary_that_contains_wordwise_truncated_xor_inequ:48,output_dictionary_that_contains_xor_inequ:49,output_espresso_dictionari:54,output_file_nam:70,output_id:[27,28,159],output_id_link_1:158,output_id_link_2:158,output_id_tupl:[27,28],output_inverse_constraint:21,output_len:8,output_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_lst:[9,190],output_probability_per_round:[55,56,57,58],output_s:[3,46,154,158],output_size_for_concaten:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],output_tag:[0,2,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],output_tag_:5,output_to_pars:[19,20,21,22,23,24,25,71],output_values_dict:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],output_var:[33,151,157,159,160,161,162,164,168,177],output_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],outputs_id:159,outsid:[26,27,28,29,30,31,32,33],over:[63,182],overdetermin:182,overrid:[59,60,61,62,162],overridden:[59,60,61,62],overwritten:70,ozerov:182,p1:[28,105],p1_index:137,p2:[28,105],p2_index:137,p3:28,p3_index:137,p4:28,p5:28,p:[22,24,25,26,27,28,29,30,31,32,33,55,56,57,58,92,145,147,151,159,160,161,162,164,168,182],p_modadd_0_1_0:58,p_modadd_1_2_0:58,p_modadd_1_7_0:58,p_modadd_1_9_0:[159,160,161],p_modadd_2_2_0:58,p_modadd_2_7_0:58,p_or_39_6:164,paar:182,pad:[8,77],padto:[17,54],page:[33,180,182],pair:[61,66,168,190],paper:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],parallel:[123,151,162,164],param:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,167,169,170,174,175,179,182],parameters_configur:190,parent_link:179,pari:182,pariti:182,parkissat:70,pars:[11,80,82],parse_probability_var:58,parse_report:[80,82],parse_solver_inform:[19,20,21,22,23,24,25],part:[8,9,22,24,25,50,143,189],partial:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],partial_result:[],partial_speck:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],pass:[0,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],patarin:182,paterson:182,path:[0,55,56,57,58,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],pattern:[27,28,177,180],paturi:182,pb:46,pdf:[28,30,31,33,125,143,151,159,160,161,162,164,168,182],per:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],perat:[151,162,164],perform:[8,14,26,55,56,57,58,63,70,76,149,151,159,160,161,162,164,177,179,188],perlner:182,perm_0_0:179,permut:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,137,141,142,143,144,145,146,147,148,149,157,158,163,164,166,168,171,172,173,179],permutation_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,165,176,179],permutation_lay:98,perret:182,peter:182,peyrin:182,pfasant:50,phd:182,photon:180,photon_permut:128,photonpermut:128,php:[0,30,31,46,47,48,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],phy:80,pi:180,pick:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],picnic:95,picosat_sag:63,pieprzyk:182,pierr:182,pipe:70,pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],pkc:182,pla:48,plaintest:79,plaintext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,179],plaintext_0:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_0_o:[62,67,75],plaintext_10:[167,170],plaintext_13:26,plaintext_14:26,plaintext_15:26,plaintext_1:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_1_o:[62,67,75],plaintext_20:168,plaintext_29:159,plaintext_2:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_2_o:[62,67,75],plaintext_30:159,plaintext_31:[159,160,161],plaintext_33:160,plaintext_34:160,plaintext_36:169,plaintext_37:169,plaintext_3:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_3_o:[62,67,75],plaintext_63:169,plaintext_7:[167,170],plaintext_8:[167,169,170],plaintext_9:[167,169,170],plaintext_id:95,plaintext_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_list:90,plaintext_o:25,plaintext_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_y0:[15,55,56,57,58],plaintext_y1:[15,55,56,57,58],plaintext_y21:15,plaintext_y22:15,plaintext_y23:15,plaintext_y2:[15,55,56,57,58],plaintext_y3:[55,56,57,58],plane:[138,139,140,190],plane_num:190,planes_new:[138,140],pleas:80,pless:182,plot_first_line_of_data_fram:4,plot_numb:4,png:[80,82],po:11,point:[77,179],point_pair:190,poli:[11,168,179],poly_to_int:190,polyhedron:[45,50,168],polynom:190,polynomi:[0,4,8,10,15,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],polynomial_as_int:4,polynomial_system:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomial_system_at_round:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomialr:16,poor:26,portion:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],poschmann:182,posit:[0,4,8,9,10,11,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,184,185,190],position_list:150,possibl:[0,9,19,20,21,22,23,24,25,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],possible_sbox:[23,24],post:182,potential_unwanted_compon:14,pp:182,ppl:26,pprint_dictionari:190,pprint_dictionary_to_fil:190,pra1962:182,prang:182,pre:182,pre_minus_pre_modsub_0_7_1:160,pre_modadd_0_1_0:[159,160,161],pre_modadd_0_1_1:[159,160,161],pre_modsub_0_7_0:160,pre_modsub_0_7_1:160,pre_or_0_9_0:164,pre_or_0_9_1:164,pre_var_shift_0_2:175,precomput:[9,95,180],predecessor:13,predic:180,prefix:[55,56,57,58],prepare_input_bit_based_vectorized_python_code_str:3,prepare_input_byte_based_vectorized_python_code_str:3,prepend:[59,60,61,62,63],preprint:182,present:[0,8,27,28,33,84,85,86,87,88,89,90,91,92,93,94,95,97,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176,179,180,182],present_block_ciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],presentblockciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],press:182,pretti:190,previou:[70,76],previous_carri:[70,76],previous_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],previous_output_bit_id:77,previous_result:77,primit:182,print:[0,3,8,10,11,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,182,184,190],print_as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179],print_as_python_dictionary_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_cipher_structure_as_python_dictionary_to_fil:[104,108,114,124],print_component_analysis_as_radar_chart:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_component_info:[10,11],print_components_valu:77,print_evaluation_python_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_evaluation_python_code_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_input_inform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_round:[183,184],print_round_as_python_dictionari:183,print_rounds_as_python_dictionari:184,print_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],print_word_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],privaci:182,proba:168,probability_var:58,probability_vari:[],probability_weight_per_round:[55,56,57,58],probabl:[0,26,27,28,29,30,31,32,33,46,58,61,62,66,67,70,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168],probe:[55,56,57,58],problem:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],proc:182,procedur:[23,24],proceed:182,process:[55,56,57,58,189],processes_:[55,56,57,58],produc:143,product:[46,54],program:[26,27,28,29,30,31,32,33,54,182],progress:[80,82],project:82,propag:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],propagate_equival:179,propagate_permut:179,propagate_rot:179,properti:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,182,183,184],provid:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],publish:182,purpos:[10,11,50,89],py:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],python:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],q:[76,182],qarma:99,qarmav2:180,qarmav2_block_ciph:99,qarmav2blockciph:99,qi:190,qiao:182,quadrat:182,qualiti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],quantum:182,quantumcryptographi:182,quarter_round:[],quarter_round_index:137,question:54,quotient:8,quotientr:8,r:[0,15,16,17,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],r_3:70,r_7:70,radar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rafael:182,raiden:[55,56,57,58,160,175,180],raiden_block_ciph:[55,56,57,58,100,160,175],raidenblockciph:[55,56,57,58,100,160,175],rais:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],randint:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],random:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],random_el:17,random_seed_:[55,56,57,58],randomli:190,rang:[0,9,17,19,20,21,22,23,24,25,27,28,30,31,33,54,55,56,57,58,59,61,62,64,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188,190],rank:[96,182],rate:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],ratio:[79,80,82],rc5:180,rc5_block_ciph:101,rc5blockciph:101,rc:[122,123],rc_2:103,reach:[32,33],read:190,real:[9,190],real_bit:11,real_input:11,reason:177,recent:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],reduc:[0,23,24,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],reduct:182,ref:95,refer:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reg:141,reg_param:[],regist:[8,179],register_1_info:179,register_2_info:179,register_bit_length:8,register_len:179,register_n_info:179,register_polynomi:[8,179],register_word_length:179,registers_info:[8,179],regs_initi:141,regs_siz:141,regular:182,rel:[77,179],relat:[0,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reli:[151,159,160,161,162,164],remain:[0,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],remaining_xor:84,remark:[63,77],remov:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],remove_cipher_input_kei:179,remove_compon:183,remove_component_from_id:183,remove_components_from_round:14,remove_components_with_strings_as_valu:4,remove_forbidden_par:179,remove_key_schedul:[0,25,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],remove_orphan_compon:179,remove_permut:179,remove_rot:179,remove_round_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],remove_round_component_from_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],removed_compon:14,removed_key_speck:179,removed_permutations_pres:179,removed_rotations_speck:179,render_templ:189,reorder_input_and_output:94,repeat:[23,24,54],repetit:[23,24],replac:63,repo:96,report:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,189],report_dict:[80,82],report_dict_list:[80,82],report_filenam:[80,82],report_fold:82,repr_pretti:168,repres:[0,8,9,10,11,17,21,22,24,25,27,28,30,31,45,46,50,59,60,61,62,63,64,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,161,164,165,166,167,169,170,171,172,173,176,177,179,180,190],represent:[0,4,9,14,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170],reproduc:[0,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],request:[55,56,57,58],requir:[0,28,46,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],res_vector:8,research:182,reserv:11,resist:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respect:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respons:189,result:[0,4,11,48,54,55,56,57,58,61,62,66,67,70,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177],results_without_xor:4,retrain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],retriev:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],return_index:14,rev_0_0:179,revers:[11,95,179,180],revisit:182,rfc:[112,113,114],rgb:80,rho_and_pi_definit:[125,126,127],rhoeast_definit:[138,139,140],rhowest_definit:[138,139,140],right:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],right_shift_amount:[100,106,109],right_var:70,rijmen:182,ring:[4,8,15,180,182],rk_id:95,robshaw:182,roi:182,root:[55,56,57,58],ror:186,rossi:182,rot:147,rot_0_0:[21,26,105,122,123,159,160,161,167,170,179],rot_0_0_0:[26,159,160,161,167,170],rot_0_0_0_class_bit_0:[159,160,161],rot_0_0_0_class_bit_1:[159,160,161],rot_0_0_0_i:[62,67,75,167,170],rot_0_0_0_o:[167,170],rot_0_0_10_i:[167,170],rot_0_0_13:[26,159],rot_0_0_14:[26,159,167,170],rot_0_0_14_o:[167,170],rot_0_0_15:[26,159,160,161,167,170],rot_0_0_15_o:[167,170],rot_0_0_1:[26,159,160,161,167,170],rot_0_0_1_i:[62,67,75,167,170],rot_0_0_1_o:[167,170],rot_0_0_2:26,rot_0_0_2_i:62,rot_0_0_7_i:[167,170],rot_0_0_8_i:[167,170],rot_0_0_9_i:[167,170],rot_0_0_i:[25,167,170],rot_0_0_input:149,rot_0_0_invers:[167,170],rot_0_0_o:[167,170],rot_0_0_output:149,rot_0_0_x0:58,rot_0_17:[158,176],rot_0_17_0:[158,176],rot_0_17_1:[158,176],rot_0_17_word_0_class_bit_0:[158,176],rot_0_17_word_0_class_bit_1:[158,176],rot_0_18:[158,167,170,176,179],rot_0_18_30:[167,170],rot_0_18_31:[167,170],rot_0_19:[158,176],rot_0_1_0:[151,162,164],rot_0_1_1:[151,162,164],rot_0_20:[158,176],rot_0_3:21,rot_0_4_input:148,rot_0_4_output:148,rot_0_5_input:149,rot_0_5_output:149,rot_1_0_input:149,rot_1_0_output:149,rot_1_11:[4,167,170],rot_1_11_x0:[167,170],rot_1_11_x1:[167,170],rot_1_11_x2:[167,170],rot_1_11_x3:[167,170],rot_1_11_x4:[167,170],rot_1_11_x5:[167,170],rot_1_11_y0:[167,170],rot_1_11_y1:[167,170],rot_1_11_y2:[167,170],rot_1_11_y3:[167,170],rot_1_11_y4:[167,170],rot_1_11_y5:[167,170],rot_1_1:[167,170],rot_1_1_0:[167,170],rot_1_1_0_i:[167,170],rot_1_1_14:[167,170],rot_1_1_14_o:[167,170],rot_1_1_15:[167,170],rot_1_1_15_o:[167,170],rot_1_1_1:[167,170],rot_1_1_1_i:[167,170],rot_1_1_2:[167,170],rot_1_1_2_i:[167,170],rot_1_1_7_i:[167,170],rot_1_1_8_i:[167,170],rot_1_4:28,rot_1_4_input:148,rot_1_4_output:148,rot_1_5_input:149,rot_1_5_output:149,rot_1_6:179,rot_2_16:177,rot_amount:[110,111,137],rot_compon:4,rotat:[4,8,9,10,11,102,110,111,119,129,137,149,170,179,180,186,188],rotate_0_0:179,rotate_boolean_funct:8,rotate_by_variable_amount:[8,179],rotate_by_variable_amount_continuous_diffusion_analysi:9,rotate_compon:[4,167,170],rotate_continuous_diffusion_analysi:9,rotate_i:130,rotate_left:188,rotate_mzn_constraint:[167,170],rotate_right:188,rotate_x:130,rotate_x_z:[138,139,140],rotation_alpha:105,rotation_amount:[8,9,10,11,102],rotation_amount_lst:9,rotation_amounts_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,171,179],rotation_beta:105,rotation_direct:[8,9],rotation_lay:[148,149],rotation_stag:9,rotx:[138,139,140],rotz:[138,139,140],round:[0,3,14,15,21,28,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,182],round_0:[148,149],round_1:[148,149],round_as_python_dictionari:183,round_at:184,round_component_:178,round_const:[122,123],round_end:[80,82],round_funct:[90,93,94,101,103,105,114,116,117,118,120,121,122,123,125,126,127,128,130,131,132,133,134,135,136,138,139,140,141],round_i:[2,90,94,137],round_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,183],round_initi:[92,105],round_kei:[90,92,94,95,97,102],round_key_id:97,round_key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],round_key_rot:149,round_key_u:[120,121],round_key_v:[120,121],round_list:14,round_numb:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,178,184],round_object:178,round_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],round_start:[80,82],rounds_0_19:113,rounds_20_39:113,rounds_40_59:113,rounds_as_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rounds_as_python_dictionari:184,row:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],rows_n:96,rr:182,rule:[59,60,61,62,63],rule_data_:189,run:[0,22,24,25,32,33,61,62,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],run_autond_pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],run_avalanche_depend:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dependence_uniform:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dieharder_statistics_test:80,run_avalanche_entropi:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_nist_statistics_test:82,run_avalanche_weight:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_cbc_dieharder_statistics_test:80,run_cbc_nist_statistics_test:82,run_correlation_dieharder_statistics_test:80,run_correlation_nist_statistics_test:82,run_dieharder_statistical_tests_tool_interact:80,run_high_density_dieharder_statistics_test:80,run_high_density_nist_statistics_test:82,run_low_density_dieharder_statistics_test:80,run_low_density_nist_statistics_test:82,run_minisat:70,run_nist_statistical_tests_tool_interact:82,run_parkissat:70,run_random_dieharder_statistics_test:80,run_random_nist_statistics_test:82,run_sat_solv:70,run_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_yic:70,runtim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],s0:145,s11:145,s1:145,s2:145,s:[0,9,19,20,21,22,23,24,25,45,50,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],s_1:70,s_3:70,s_box_descript:168,s_box_lay:147,saber:182,sac:182,safei:182,sage:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],sagemath:[26,27,28,29,30,31,32,33,180],sai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],salsa:180,salsa_permut:129,salsapermut:129,salvi:182,same:[0,4,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sampl:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],santa:182,sasaki:182,sat:[0,27,28,55,56,57,58,59,60,61,62,71,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_build_table_templ:168,sat_cipher_model:[59,60,61,62,63,64,65,66,67],sat_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_deterministic_truncated_xor_differential_model:[60,65],sat_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],sat_modadd:159,sat_modadd_seq:159,sat_model:[59,60,61,62,63,64,65,66,67,156,159,160,161,168],sat_n_window_heuristc_bit_level:161,sat_or_milp:[55,56,57,58,159,160,161],sat_xor_differential_model:[59,60,61,62,63,64,65,66,67],sat_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_model:[62,67,156],satciphermodel:[59,60,61,62,63,64,65,66,67],satdeterministictruncatedxordifferentialmodel:[60,65],satisfact:[55,56,57,58],satisfi:[0,20,21,30,31,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],satisfy_gener:58,satmodel:[59,60,61,62,63,64,65,66,67,159,160,161,168],satxordifferentialmodel:[59,60,61,62,63,64,65,66,67],satxorlinearmodel:[62,67,156],save:[79,80,82,96],save_fil:79,sbox:[4,8,9,10,11,87,88,95,148,149,179,180],sbox_0_0:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,171,172,173,179],sbox_0_0_0:[157,165,166,171,172,173],sbox_0_0_1:[157,165,166,171,172,173],sbox_0_0_2:[157,165,166,171,172,173],sbox_0_0_3:[157,165,166,171,172,173],sbox_0_0_x0:[15,168],sbox_0_0_x1:[15,168],sbox_0_0_x2:[15,168],sbox_0_0_x3:168,sbox_0_0_y0:168,sbox_0_0_y1:168,sbox_0_0_y2:168,sbox_0_0_y3:168,sbox_0_10:[151,163,167,169,170],sbox_0_10_act:[167,170],sbox_0_14:[151,163,167,169,170],sbox_0_14_valu:[167,170],sbox_0_15:[],sbox_0_16:179,sbox_0_19:179,sbox_0_1:[4,157,165,166,168,171,172,173,179],sbox_0_1_0:[157,158,165,166,168,171,172,173,176],sbox_0_1_0_i:168,sbox_0_1_1:[157,158,165,166,168,171,172,173,176],sbox_0_1_1_i:168,sbox_0_1_2:[157,165,166,168,171,172,173],sbox_0_1_2_o:168,sbox_0_1_3:[157,165,166,168,171,172,173],sbox_0_1_3_class_bit_0:168,sbox_0_1_3_class_bit_1:168,sbox_0_1_3_o:168,sbox_0_1_6:168,sbox_0_1_6_o:168,sbox_0_1_7:168,sbox_0_1_7_o:168,sbox_0_1_act:168,sbox_0_1_word_0_class:168,sbox_0_1_word_0_class_bit_0:168,sbox_0_1_word_0_class_bit_1:168,sbox_0_2:[4,151,157,163,165,166,167,169,170,171,172,173],sbox_0_2_0:[157,165,166,168,171,172,173],sbox_0_2_0_i:168,sbox_0_2_0_o:168,sbox_0_2_1:[157,165,166,168,171,172,173],sbox_0_2_1_i:168,sbox_0_2_1_o:168,sbox_0_2_2:[157,165,166,168,171,172,173],sbox_0_2_2_i:168,sbox_0_2_3:[157,165,166,168,171,172,173],sbox_0_2_3_i:168,sbox_0_2_3_o:168,sbox_0_2_input:148,sbox_0_2_output:148,sbox_0_2_valu:[167,170],sbox_0_2_word_0_class:[167,169,170],sbox_0_3:[4,157,165,166,171,172,173],sbox_0_3_1:[157,165,166,171,172,173],sbox_0_3_2:[157,165,166,171,172,173],sbox_0_3_3:[157,165,166,171,172,173],sbox_0_3_input:[148,149],sbox_0_3_output:[148,149],sbox_0_4:[4,157,165,166,171,172,173],sbox_0_4_0:[157,165,166,171,172,173],sbox_0_4_1:[157,165,166,171,172,173],sbox_0_4_2:[157,165,166,171,172,173],sbox_0_4_3:[157,165,166,171,172,173],sbox_0_4_input:149,sbox_0_4_output:149,sbox_0_5:[4,157,165,166,168,171,172,173],sbox_0_5_0:[157,165,166,168,171,172,173],sbox_0_5_1:[157,165,166,168,171,172,173],sbox_0_5_2:[157,165,166,171,172,173],sbox_0_5_3:[157,165,166,168,171,172,173],sbox_0_5_i:168,sbox_0_5_o:168,sbox_0_5_x1:15,sbox_0_5_x2:15,sbox_0_5_x3:15,sbox_0_6:[151,163,167,169,170],sbox_0_6_act:[167,169,170],sbox_0_6_word_0_class:[167,169,170],sbox_1_0:4,sbox_1_1:4,sbox_1_2:4,sbox_1_2_input:148,sbox_1_2_output:148,sbox_1_3:4,sbox_1_3_input:[148,149],sbox_1_3_output:[148,149],sbox_1_4:4,sbox_1_4_input:149,sbox_1_4_output:149,sbox_1_5:4,sbox_3_56:28,sbox_bool_func:8,sbox_compon:[4,9,168],sbox_continuous_diffusion_analysi:9,sbox_dictionari:9,sbox_ineq:50,sbox_inequ:50,sbox_input_s:168,sbox_lay:[95,98],sbox_layer_picn:95,sbox_lookup_t:9,sbox_mant:168,sbox_precomput:[0,6,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_precomputations_mix_column:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_pres:50,sbox_properti:4,sbox_that_should_be_first:179,sbox_that_should_be_second:179,sboxes_compon:[84,115],sboxes_ddt_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],sboxes_lat_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],scenario:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scenario_dict:187,schanck:182,schedul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scheme:182,schloss:182,schwabe:182,sci:182,score:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],script:180,search:[0,21,22,23,25,26,27,28,30,31,32,33,55,56,57,58,60,61,62,63,65,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,169,180,182],second:[0,15,20,21,22,23,24,25,45,50,55,56,57,58,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],second_step_solver_nam:24,section:70,secur:[89,182],see:[27,28,30,31,33,63,70,71,80,82,151,162,164,168,179],seed:[55,56,57,58],seen:[46,54,112,113,114,151,162,164,177],seiler:182,select:182,select_bit:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],select_bits_continuous_diffusion_analysi:9,select_boolean_funct:4,select_properties_funct:4,select_word:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],self:[0,3,14,27,28,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],semi:182,separ:[46,59,60,61,62,63],sequenc:[0,15,17,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],sequence_oper:188,sequenti:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,177],set:[0,3,8,10,11,17,19,20,21,22,23,24,25,30,31,32,45,46,50,54,55,56,57,58,61,66,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,185],set_2d_array_element_from_1d_array_index:190,set_bodi:189,set_build:189,set_component_solut:77,set_component_solution_valu:[19,20,21,22,23,24,25],set_component_value_weight_sign:77,set_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77],set_foot:189,set_from_hex_str:8,set_head:189,set_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_input_bit_posit:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_input_id_link:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_max:54,set_max_number_of_carries_on_arx_ciph:58,set_max_number_of_nonlinear_carri:58,set_min:54,set_testing_data_amount:79,set_variables_nam:4,set_vector_depend:2,set_vector_dependence_uniform:2,set_vector_entropi:2,set_vector_weight:2,seurin:182,sever:89,sglytqh2017:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],sgn_function:190,sha1:180,sha1_hash_funct:113,sha1hashfunct:113,sha256:114,sha2:180,sha2_hash_funct:114,sha2hashfunct:114,sha:[113,114],shamir:182,shape:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],shi_modadd_0_1:[159,160,161],shi_pre_modadd_0_1_0:[159,160,161],shi_pre_modadd_0_1_1:[159,160,161],shift:[0,4,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,188],shift_0_0:[106,109,169,179],shift_0_0_0:[159,169],shift_0_0_0_i:169,shift_0_0_1:[159,160,161,169],shift_0_0_1_i:169,shift_0_0_26_o:169,shift_0_0_27:169,shift_0_0_27_o:169,shift_0_0_28:169,shift_0_0_29:[159,160,161,169],shift_0_0_2:[159,160,161,169],shift_0_0_2_i:169,shift_0_0_30:[159,160,161,169],shift_0_0_30_i:169,shift_0_0_30_o:169,shift_0_0_31:[159,160,161,169],shift_0_0_31_i:169,shift_0_0_31_o:169,shift_0_0_6:169,shift_0_0_6_o:169,shift_0_0_7:169,shift_0_0_7_o:169,shift_0_0_i:169,shift_0_0_invers:169,shift_0_0_o:169,shift_0_0_x0:169,shift_0_0_x10:169,shift_0_0_x11:169,shift_0_0_x12:169,shift_0_0_x13:169,shift_0_0_x14:169,shift_0_0_x15:169,shift_0_0_x16:169,shift_0_0_x17:169,shift_0_0_x18:169,shift_0_0_x19:169,shift_0_0_x1:169,shift_0_0_x20:169,shift_0_0_x21:169,shift_0_0_x22:169,shift_0_0_x23:169,shift_0_0_x24:169,shift_0_0_x25:169,shift_0_0_x26:169,shift_0_0_x27:169,shift_0_0_x28:169,shift_0_0_x29:169,shift_0_0_x2:169,shift_0_0_x30:169,shift_0_0_x31:169,shift_0_0_x3:169,shift_0_0_x4:169,shift_0_0_x5:169,shift_0_0_x6:169,shift_0_0_x7:169,shift_0_0_x8:169,shift_0_0_x9:169,shift_0_0_y0:169,shift_0_0_y10:169,shift_0_0_y11:169,shift_0_0_y12:169,shift_0_0_y13:169,shift_0_0_y14:169,shift_0_0_y15:169,shift_0_0_y16:169,shift_0_0_y17:169,shift_0_0_y18:169,shift_0_0_y19:169,shift_0_0_y1:169,shift_0_0_y20:169,shift_0_0_y21:169,shift_0_0_y22:169,shift_0_0_y23:169,shift_0_0_y24:169,shift_0_0_y25:169,shift_0_0_y26:169,shift_0_0_y27:169,shift_0_0_y28:169,shift_0_0_y29:169,shift_0_0_y2:169,shift_0_0_y30:169,shift_0_0_y31:169,shift_0_0_y3:169,shift_0_0_y4:169,shift_0_0_y5:169,shift_0_0_y6:169,shift_0_0_y7:169,shift_0_0_y8:169,shift_0_0_y9:169,shift_0_18:169,shift_0_18_30:169,shift_0_18_31:169,shift_0_18_act:169,shift_0_18_valu:169,shift_1_12:169,shift_1_12_x0:169,shift_1_12_x1:169,shift_1_12_x2:169,shift_1_12_y0:169,shift_1_12_y1:169,shift_1_12_y2:169,shift_1_12_y3:169,shift_1_12_y4:169,shift_1_12_y5:169,shift_amount:[8,9,10,11],shift_amount_lst:9,shift_amount_var_shift_0_2:175,shift_by_variable_amount:[8,179],shift_by_variable_amount_continuous_diffusion_analysi:9,shift_column_compon:115,shift_compon:169,shift_continuous_diffusion_analysi:9,shift_direct:[8,9,10,11],shift_id:70,shift_left:188,shift_mzn_constraint:169,shift_right:188,shift_row_0_0:179,shift_row_compon:84,shift_rows_0_0:179,shift_smount:11,shift_stag:9,shiftrow:170,shit:9,should:[0,8,10,32,33,45,50,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],show:[0,23,24,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],shrink:96,shuffle_cel:97,si:190,siam:182,side:70,sigma:[8,179,180],sigma_0_0:179,sigma_continuous_diffusion_analysi:9,sigmoid:[],sign:[59,60,61,62,63,64,65,66,67,77,151,159,160,161,162,163,164,167,169,170,174,175,177,190],signatur:182,signed_dist:190,signific:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],silicon:[],similar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],simon:[22,25,26,27,28,29,30,31,32,33,151,152,156,162,164,177,180,182],simon_block_ciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simonblockciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simplifi:[168,177],simplify_input:190,sinc:177,singl:[0,20,21,22,24,25,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],size:[0,8,9,10,11,14,32,33,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,168,179,186],skinni:[4,158,176,180,182],skinny_block_ciph:[4,103,158,176],skinnyblockciph:[4,103,158,176],skip:[0,3,17,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],slightli:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],small:[50,148,149,168,180,182],small_swap:[122,123],smaller:[182,189],smallest:[22,24,25,148,149],smith:182,smt2:71,smt:[0,63,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_and:76,smt_assert:76,smt_build_table_templ:168,smt_carri:76,smt_cipher_model:72,smt_constraint:[151,152,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_deterministic_truncated_xor_differential_model:[],smt_deterministic_truncated_xor_differential_trail_constraint:[],smt_distinct:76,smt_equival:76,smt_get_sbox_probability_constraint:168,smt_impli:76,smt_ite:76,smt_lipmaa:76,smt_modadd:159,smt_modadd_seq:159,smt_model:[71,72,73,74,75,156,168],smt_not:76,smt_or:76,smt_xor:76,smt_xor_differential_model:74,smt_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_model:[75,156],smtciphermodel:72,smtdeterministictruncatedxordifferentialmodel:73,smtmodel:[71,72,73,74,75,168],smtxordifferentialmodel:74,smtxorlinearmodel:[75,156],sneyd:182,snow3g:180,snow3g_key_stream:145,snow3g_state_initi:145,snow3g_stream_ciph:145,snow3gstreamciph:145,snow:145,so:[46,111,168],societi:182,soda:182,softwar:[82,182],solut:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,163,164,167,169,170,174,175,177,182],solution_numb:[19,20,21,22,23,24,25],solution_to_writ:77,solv:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,182],solve_full_two_steps_xor_differential_model:24,solve_model:24,solve_tim:[19,20,21,22,23,24,25,77],solver:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,180],solver_nam:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77],solver_output:[19,20,21,22,23,24,25],solver_spec:70,solver_typ:77,solving_time_second:[21,61,62,66,67,71,72,73,74,75,77],some:[0,4,26,30,31,45,50,63,70,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],sometim:3,song:182,sort:[14,179],sort_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],sort_cipher_graph:14,sort_input_id_links_and_input_bit_posit:14,sorted_ciph:14,sourc:50,sover:182,soviet:182,sp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sp_box:[122,123],space:[59,60,61,62,63],spaenlehau:182,sparkl:180,sparkle_permut:130,sparklepermut:130,sparx:180,sparx_block_ciph:104,sparxblockciph:104,special:[10,11],specif:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,74,75,77,111],specifi:[0,4,8,9,13,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],speck32:182,speck32_64_r22_cryptominisat:77,speck32_64_r22_sat:77,speck:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179,180,182],speck_block_ciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],speck_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],speck_diff_find:[159,160,161],speck_k64_p32_o32_r22:72,speck_p32_k64_o32_r1:21,speck_p32_k64_o32_r22:[59,64],speck_p32_k64_o32_r2:22,speck_p32_k64_o32_r3:21,speck_p32_k64_o32_r3_32_64_avalanche_index0_10lines_10240bit:[],speck_p32_k64_o32_r3_32_64_cbc_index0_2lines_524288bit:[],speck_p32_k64_o32_r3_32_64_correlation_index0_10lines_2600960bit:[],speck_p32_k64_o32_r3_32_64_high_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_low_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_random_index0_10lines_2600960bit:[],speck_p32_k64_o32_r4:[19,20,21,22,23,24,25,62,67,71,72,73,74,75,77],speck_p32_k64_o32_r5:[22,61,66,74],speck_without_key_schedul:[77,156],speckblockciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],spectra:182,split:[3,8,9,110,111,177],split_cipher_graph_into_top_bottom:13,spn:[0,23,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],spongent:180,spongent_pi_fsr_permut:131,spongent_pi_permut:132,spongent_pi_precomputation_permut:133,spongentpi:[131,132,133],spongentpifsrpermut:131,spongentpipermut:132,spongentpiprecomputationpermut:133,springer:[51,168,182],squar:4,st:[80,82],stackoverflow:54,stage:143,standard:[21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,72,73,74,75,76,77,110,111,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180],start:[22,24,25,32,33,61,62,66,67,74,75,80,82],start_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149],starting_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state:[70,84,95,99,101,103,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,142,143,144,146,179],state_0_var_shift_0_2_0:175,state_0_var_shift_0_2_1:175,state_3_var_shift_0_2_30:175,state_3_var_shift_0_2_31:175,state_bit_s:[110,111,131,132,133,142,146],state_i:130,state_initi:[103,125,126,127,147],state_of_compon:[119,129,137],state_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state_transform:[110,111],state_word_id:[110,111],state_word_rang:[110,111],state_x:130,statement:54,statist:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],statistical_test:[79,80,82],statistical_test_option_list:82,statisticaltest:82,statu:[30,31,59,60,61,62,63,64,65,66,67],stdin:70,stdtype:188,ste1988:182,step:[0,2,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,188],stern:182,stop:[22,24,25,61,62,66,67,74,75],store:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],store_intermediate_output:3,str:[17,27,28,30,31,54,55,56,57,58,76,82],str_constraint:[55,56,57,58],str_model_path:[55,56,57,58],str_solver:[55,56,57,58],strategi:58,stream:[80,82],stream_ciph:[141,142,143,144,145,146,147],strict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],strictli:[112,113,114],string:[0,3,4,8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,168,179,190],string_dictionari:3,string_python_cod:3,string_total_weight:[19,20,21,22,23,24,25],structur:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sts_report_dict:82,studi:4,sub:[13,17],sub_cel:97,sub_kei:92,sub_key_temp_list:90,sub_keys_zero:[90,93],sub_quarter_round_latin_d:137,sub_var:17,subgraph:13,subkei:107,subkey_schedul:107,submatric:4,subprocess:[59,60,61,62,63,64,65,66,67,71],substract:[9,159,160,161],substrat:[159,160,161],subtract:[10,11,17,160],suffix:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],suffix_dict:[],suggest:77,suit:82,sum:[22,23,24,25,28,46,55,56,57,58,159,160,161,164,177],sum_value_kei:190,summing_up:190,sun:182,super_class:137,superclass:[59,60,61,62],superdetermin:182,supplementari:[30,31],suppli:70,support:[55,56,57,58,151,152,156,162,164],sur:182,swap_compon:183,swedish:182,symbol:182,symmetr:[112,113,114,182],symposium:182,syrup:63,syrup_sag:63,syst:182,system:[0,15,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],systemsof:182,t:[0,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,188,190],tabl:[0,9,10,11,23,24,28,33,46,48,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,162,164,168,176,177,182],table_item:168,table_of_solution_length:[23,24],table_of_solutions_length:[23,24],table_sbox_0_5:168,table_typ:168,tag:179,tail:17,takagi:182,take:[0,13,27,28,30,31,32,33,50,59,60,61,62,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],taken:[79,80,82,177],tamaki:182,target:[26,59,60,61,62,63,71],target_bit_posit:14,target_link:14,td:[30,31],tea:[59,60,61,62,63,64,65,66,67,154,159,160,161,169,180],tea_block_ciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],tea_p64_k128_o64_r32:[59,60,61,62,63,64,65,66,67],teablockciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],techniqu:[0,26,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],temp_0_0_act:177,temp_0_0_valu:177,temp_0_15_act:177,temp_0_15_valu:177,temp_1_15_act:177,temp_1_15_valu:177,temp_carry_plaintext_32:160,temp_carry_plaintext_33:160,temp_carry_plaintext_34:160,temp_input_plaintext_62:160,temp_input_plaintext_63:160,temp_subkey_gener:90,templat:[71,72,73,74,75,168,180],templatemanag:189,tensorflow:[],term:13,termin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test:[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_against_reference_cod:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_json:190,test_pass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_report:82,test_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_typ:82,test_vector_check:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tester:180,testing_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tests_configur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],text:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],th:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],than:[0,22,24,25,32,33,58,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,190],thei:[25,59,60,61,62,63,64,65,66,67,70,74,75,168],them:[27,28,30,31,32,33,55,63,70,189,190],then_constraint:54,then_constraints_list:54,theorem:9,theoret:182,theori:182,therefor:[59,60,61,62,71],thesi:182,theta:[179,180],theta_definit:[125,126,127,138,139,140],theta_keccak:8,theta_keccak_0_0:[125,179],theta_xoodoo:8,theta_xoodoo_0_0:[138,179],thetakeccak:172,thetaxoodoo:173,thi:[0,3,8,9,10,11,14,26,32,33,45,46,50,51,54,55,59,60,61,62,63,70,71,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,168,169,176,177,179,180,184,189],third:179,thoma:182,thorkn:95,those:[26,59,60,61,62,63,64,65,66,67,96],three:70,threefish:180,threefish_block_ciph:107,threefishblockciph:107,threshold:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],threshold_for_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],through:26,tii:14,tii_dir_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tii_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tillich:182,time:[0,15,23,24,25,55,56,57,58,70,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],time_keyword:[],time_memory_extractor:[],timeout:[0,1,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],timeout_in_seconds_:[55,56,57,58],tinyjambu:180,tinyjambu_32bits_word_permut:134,tinyjambu_fsr_32bits_word_permut:135,tinyjambu_permut:136,tinyjambufsrwordbasedpermut:135,tinyjambupermut:136,tinyjambuwordbasedpermut:134,tmp_cipher_oper:4,to_bias_for_correlation_measur:77,to_bias_for_probability_measur:77,to_bias_for_xor_linear_trail:77,to_binari:185,to_bit:50,to_correlation_for_bias_measur:77,to_correlation_for_probability_measur:77,to_correlation_for_xor_linear_trail:77,to_pars:[],to_probability_for_bias_measur:77,to_probability_for_correlation_measur:77,to_probability_for_xor_linear_trail:77,tobyt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],todo:182,togeth:[10,55,56,57,58,77,189],toi:[119,148,149],tone:182,tool:[80,82,182],top:13,top_half_quarter_round:[119,129,144],topolog:14,topological_sort:14,tosc:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],total:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],total_weight:[19,20,21,22,23,24,25,27,28,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],toy_ciph:[80,82],toyspn1:180,toyspn2:180,traceback:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],trail:[19,20,21,22,23,25,26,27,28,30,31,32,33,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,169,180,182],trail_with_sign:77,trails_with_sign:77,train:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],train_gohr_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],train_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],training_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tran:182,transact:182,transform:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],transform_first_step_model:24,transform_gf2nmatrix_to_binmatrix:8,transformations_flag:[90,93],transit:[50,54,168],translat:63,transpar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],transpos:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],triv:146,trivium:180,trivium_key_stream:146,trivium_state_initi:146,trivium_stream_ciph:146,triviumstreamciph:146,trunc_binvar:[27,28],trunc_wordvar:[30,31],truncat:[19,20,22,23,24,25,28,31,51,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],truth:48,tupl:[17,27,28,54,70,168,177,188],tutori:182,tw2012:182,tweak:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tweak_bit_s:[99,107],twenti:182,twice:[55,56,57,58],two:[13,23,24,48,54,59,60,61,62,63,64,65,66,67,70,76,77,79,80,82,111,143,151,152,156,159,160,161,162,164,177,179,182],twofish:[4,180],twofish_block_ciph:[4,108],twofish_key256_r16:108,twofishblockciph:[4,108],twoterms_milp_probability_xor_linear_constraint:[159,160,161],txt:[77,80,82,189],type1_key_schedule_xor:89,type1_sbox:89,type2_key_schedule_and:89,type2_key_schedule_xor:89,type2_modadd1:89,type2_modadd2:89,type2_xor1:89,type2_xor2:89,type:[0,4,55,56,57,58,59,60,61,62,63,64,65,66,67,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,188],u:[48,70,182,190],uint8:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],uint:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ultra:182,unbalanc:182,uncertainti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],under:[0,4,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],underdefin:182,underdetermin:182,underli:4,undisturb:[168,180],unformatted_input:11,unfortun:70,uniform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],unique_length:179,univ:182,unknown:[27,28,30,31],unsign:10,unspecifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],until:[0,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],updat:[17,95],update_and_or_ddt_valid_prob:22,update_and_or_lat_valid_prob:25,update_available_bits_with_component_input_bit:14,update_available_bits_with_component_output_bit:14,update_blackbox_distinguisher_tests_d:[],update_cipher_input:[178,179],update_component_input:179,update_component_output_id:[],update_const:99,update_constraints_for_equal_typ:[71,72,73,74,75],update_constraints_for_more_than_one_bit:157,update_constraints_for_not_equal_typ:[71,72,73,74,75],update_dictionary_that_contains_inequalities_for_large_sbox:46,update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,update_dictionary_that_contains_inequalities_for_small_sbox:50,update_dictionary_that_contains_wordwise_truncated_input_inequ:48,update_dictionary_that_contains_wordwise_truncated_mds_inequ:47,update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_input:48,update_dictionary_that_contains_xor_inequalities_between_n_input_bit:49,update_dictionary_that_contains_xor_inequalities_for_specific_matrix:49,update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix:48,update_distinguisher_tests_d:[],update_input:179,update_input_id_link:178,update_input_links_from_round:14,update_intermediate_structur:3,update_kei:93,update_key_regist:[95,98],update_output_bit:14,update_partial_result:[],update_sbox_ddt_valid_prob:[22,24],update_sbox_lat_valid_prob:25,update_xor_linear_constraints_for_more_than_one_bit:156,update_xor_linear_constraints_for_more_than_two_bit:33,upper:[32,33,58],us:[0,3,4,9,10,11,13,21,22,24,25,26,27,28,29,30,31,32,33,45,46,47,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,159,160,161,162,164,168,177,179,180,182,184,190],usa:182,usefulfunct:180,user:26,usr:82,usual:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],util:[19,20,21,22,23,24,25,27,28,30,31,32,33,50,59,61,62,64,66,67,71,72,73,74,75,143,168,185,188,189],v0:[54,177],v1:[54,177],v2:99,v:[17,54,70,145,177,182],val:[3,11,54,154],val_acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],val_loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],valid:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177],valid_point:[45,51,54,168],valid_prob:[22,24,25,168],valid_transformations_matrix:46,valid_transit:168,valu:[0,4,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,177,179,186,190],value1:190,value2:190,valueerror:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],van:182,var_dict:[],var_if:54,var_if_list:54,var_list:54,var_nam:15,var_rot_0_0:179,var_rotate_0_0:179,var_shift_0_0:179,var_shift_0_2:175,var_shift_0_2_0:175,var_shift_0_2_1:175,var_shift_0_2_2:175,var_shift_0_2_30:175,var_shift_0_2_31:175,var_shift_0_2_x0:175,var_shift_0_2_x10:175,var_shift_0_2_x11:175,var_shift_0_2_x12:175,var_shift_0_2_x13:175,var_shift_0_2_x14:175,var_shift_0_2_x15:175,var_shift_0_2_x16:175,var_shift_0_2_x17:175,var_shift_0_2_x18:175,var_shift_0_2_x19:175,var_shift_0_2_x1:175,var_shift_0_2_x20:175,var_shift_0_2_x21:175,var_shift_0_2_x22:175,var_shift_0_2_x23:175,var_shift_0_2_x24:175,var_shift_0_2_x25:175,var_shift_0_2_x26:175,var_shift_0_2_x27:175,var_shift_0_2_x28:175,var_shift_0_2_x29:175,var_shift_0_2_x2:175,var_shift_0_2_x30:175,var_shift_0_2_x31:175,var_shift_0_2_x32:175,var_shift_0_2_x33:175,var_shift_0_2_x34:175,var_shift_0_2_x35:175,var_shift_0_2_x36:175,var_shift_0_2_x37:175,var_shift_0_2_x38:175,var_shift_0_2_x39:175,var_shift_0_2_x3:175,var_shift_0_2_x40:175,var_shift_0_2_x41:175,var_shift_0_2_x42:175,var_shift_0_2_x43:175,var_shift_0_2_x44:175,var_shift_0_2_x45:175,var_shift_0_2_x46:175,var_shift_0_2_x47:175,var_shift_0_2_x48:175,var_shift_0_2_x49:175,var_shift_0_2_x4:175,var_shift_0_2_x50:175,var_shift_0_2_x51:175,var_shift_0_2_x52:175,var_shift_0_2_x53:175,var_shift_0_2_x54:175,var_shift_0_2_x55:175,var_shift_0_2_x56:175,var_shift_0_2_x57:175,var_shift_0_2_x58:175,var_shift_0_2_x59:175,var_shift_0_2_x5:175,var_shift_0_2_x60:175,var_shift_0_2_x61:175,var_shift_0_2_x62:175,var_shift_0_2_x63:175,var_shift_0_2_x6:175,var_shift_0_2_x7:175,var_shift_0_2_x8:175,var_shift_0_2_x9:175,var_shift_0_2_y0:175,var_shift_0_2_y10:175,var_shift_0_2_y11:175,var_shift_0_2_y12:175,var_shift_0_2_y13:175,var_shift_0_2_y14:175,var_shift_0_2_y15:175,var_shift_0_2_y16:175,var_shift_0_2_y17:175,var_shift_0_2_y18:175,var_shift_0_2_y19:175,var_shift_0_2_y1:175,var_shift_0_2_y20:175,var_shift_0_2_y21:175,var_shift_0_2_y22:175,var_shift_0_2_y23:175,var_shift_0_2_y24:175,var_shift_0_2_y25:175,var_shift_0_2_y26:175,var_shift_0_2_y27:175,var_shift_0_2_y28:175,var_shift_0_2_y29:175,var_shift_0_2_y2:175,var_shift_0_2_y30:175,var_shift_0_2_y31:175,var_shift_0_2_y3:175,var_shift_0_2_y4:175,var_shift_0_2_y5:175,var_shift_0_2_y6:175,var_shift_0_2_y7:175,var_shift_0_2_y8:175,var_shift_0_2_y9:175,variabl:[0,4,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182,190],variable2valu:76,variable_0:[70,76],variable_1:[70,76],variable_2:70,variable_:70,variable_shift_compon:175,variablerot:174,variables_list:177,variables_n:70,variables_nam:4,variableshift:175,variant:[45,50],variou:189,vbc:182,vector:[0,2,3,50,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],vectorspac:17,veector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],verbel:182,verbos:[0,3,6,8,10,11,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,153,154,157,158,165,166,167,168,169,170,171,172,173,174,175,176],verbose_print:26,vercauteren:182,veri:168,verifi:33,verlag:182,version:[123,168],vertic:168,via:95,view:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],vikkelso:182,vinegar:182,visit:[59,60,61,62,63],vits:182,vol:182,volum:182,vs:182,vulner:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],vx:17,vy:17,w1:147,w2:147,w:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],w_id:145,w_po:145,wa:[54,89,177],wai:[14,33,177,179],wang:182,want:[0,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],wcc:182,we:[0,4,28,50,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,190],weak:89,webhom:80,weight:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],weight_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],weight_xor_linear_constraint:[25,33,62,67,75],well:63,wenzel:182,were:[59,60,61,62],when:[0,23,24,26,27,28,29,30,31,32,33,54,55,56,57,58,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],whenev:63,where:[0,8,10,11,17,28,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,185,190],whether:[0,16,17,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],which:[4,8,13,22,23,24,25,28,31,50,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,86,143,148,149,179],whirlpool:180,whirlpool_hash_funct:115,whirlpoolhashfunct:115,whitening_key_gener:90,whitening_key_list:90,whole:70,whose:[4,19,20,21,22,23,24,25,32,33,58,61,62,66,67,70,74,75,77,112,113,114],wich:177,william:182,window:180,window_s:161,window_size_0_cnf:69,window_size_1_cnf:69,window_size_2_cnf:69,window_size_3_cnf:69,window_size_4_cnf:69,window_size_5_cnf:69,window_size_by_round:[61,66],window_size_list:[55,56,57,58],window_size_weight_pr_var:[59,60,61,62,63,64,65,66,67],within:[55,56,57,58,179],wolf:182,word:[0,4,8,9,10,11,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],word_bas:179,word_based_c_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],word_index:[19,20,21,22,23,24,25,110,111,158],word_oper:179,word_operation_properti:4,word_permut:107,word_sbox_0_10:24,word_sbox_0_11:24,word_sbox_0_12:24,word_sbox_0_13:24,word_sbox_0_14:24,word_sbox_0_15:24,word_sbox_0_16:24,word_sbox_0_1:24,word_sbox_0_26:24,word_sbox_0_27:24,word_sbox_0_28:24,word_sbox_0_29:24,word_sbox_0_2:24,word_sbox_0_3:24,word_sbox_0_4:24,word_sbox_0_5:24,word_sbox_0_6:24,word_sbox_0_7:24,word_sbox_0_8:24,word_sbox_0_9:24,word_sbox_1_0:24,word_sbox_1_10:24,word_sbox_1_11:24,word_sbox_1_12:24,word_sbox_1_13:24,word_sbox_1_14:24,word_sbox_1_15:24,word_sbox_1_1:24,word_sbox_1_21:24,word_sbox_1_22:24,word_sbox_1_23:24,word_sbox_1_24:24,word_sbox_1_2:24,word_sbox_1_3:24,word_sbox_1_4:24,word_sbox_1_5:24,word_sbox_1_6:24,word_sbox_1_7:24,word_sbox_1_8:24,word_sbox_1_9:24,word_siz:[0,3,4,8,9,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,186,190],wordlist:186,wordlist_to_bytearrai:186,wordlist_to_int:186,wordpermut:176,words_per_input:11,wordsiz:[47,48],wordstring_vari:[3,153,154,167,168,169,170,174,175],wordwis:[151,152,154,156,168,169,177,180],work:[59,60,61,62,63,64,65,66,67],workshop:182,worst:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],would:[0,8,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],write:[26,27,28,29,30,31,32,33,55,56,57,58,77],write_minizinc_model_to_fil:[55,56,57,58],write_model_to_fil:77,write_solution_into_a_fil:77,write_solution_to_fil:77,www:[151,162,164,182],x0:[8,17,179],x0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x1:[8,17,177,179],x1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x2:[8,17,179],x3:[8,17,177,179],x4:[17,179],x5:[17,179],x6:[17,179],x7:[17,179],x8:179,x:[0,10,11,16,17,30,31,33,50,54,59,60,61,62,69,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182,185,188,190],x_0:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_10:[26,27,28,29,30,31,32,33,157,165,166,167,168,169,170,171,172,173],x_110:156,x_111:156,x_118:177,x_119:177,x_11:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176],x_126:[157,158,163,165,166,171,172,173,176],x_127:[157,158,163,165,166,171,172,173,176],x_12:[32,33,151,157,165,166,168,169,171,172,173],x_13:[27,28,32,33,157,158,165,166,168,169,171,172,173,176],x_142:[27,28],x_143:[27,28],x_14:[27,28,32,33,154,158,167,168,169,170,176],x_1571:[30,31],x_1572:[30,31],x_157:[159,160,161],x_158:[152,156],x_159:[152,156,159,160,161],x_15:[27,28,32,33,151,154,158,159,160,161,162,164,167,168,169,170,176],x_160:[159,160,161],x_16:[151,152,156,158,159,160,161,162,164,167,168,170,176,177],x_17:[151,152,156,159,160,161,162,164,167,168,170],x_18:[157,165,166,168,171,172,173],x_19:[157,165,166,168,171,172,173],x_1:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_20:168,x_21:168,x_22:168,x_23:[158,168,176],x_24:[158,168,176],x_25:[157,158,165,166,168,171,172,173,176],x_26:168,x_27:168,x_286:[152,156],x_287:[152,156],x_28:[168,182],x_2918:[30,31],x_2919:[30,31],x_29:168,x_2:[26,27,28,29,30,31,32,33,70,152,154,156,158,159,160,161,167,168,169,170,176,177],x_3060:[30,31],x_3061:[30,31],x_3070:[30,31],x_3071:[30,31],x_3078:[30,31],x_3079:[30,31],x_30:[159,160,161,163,167,168,170,177],x_316:33,x_317:33,x_318:33,x_319:33,x_31:[152,156,158,159,160,161,163,167,168,170,176,177],x_32:[151,152,156,158,159,160,161,162,163,164,168,176,177],x_33:[151,158,162,163,164,168,176,177],x_34:[151,162,164,177],x_35:[151,162,164],x_36:[151,162,164],x_37:[151,162,164],x_38:[151,162,164],x_39:[151,162,164,177],x_3:[26,27,28,29,30,31,32,33,70,76,154,158,159,160,161,168,169,176,177],x_40:[151,162,164,177],x_41:[151,162,164,177],x_42:[151,162,164,177],x_43:[151,162,164,177],x_44:[151,162,164,177],x_45:[151,162,164,177],x_46:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_47:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_48:[151,159,160,161,162,164,177],x_49:[151,159,160,161,162,164,177],x_4:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_50:[151,159,160,161,162,164],x_51:[151,159,160,161,162,164],x_52:[151,159,160,161,162,164],x_53:[151,159,160,161,162,164],x_54:[151,159,160,161,162,164],x_55:[151,159,160,161,162,164],x_56:[151,159,160,161,162,164],x_57:[151,159,160,161,162,164],x_58:[151,159,160,161,162,164],x_59:[151,157,158,159,160,161,162,164,165,166,171,172,173,176],x_5:[26,27,28,29,30,31,32,33,158,167,168,169,170,176,177],x_60:[151,159,160,161,162,164],x_61:[151,159,160,161,162,164],x_62:[151,152,156,158,159,160,161,162,163,164,176,177],x_63:[151,152,156,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_64:[151,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_65:[157,158,159,160,161,163,165,166,171,172,173,176,177],x_66:[159,160,161],x_6:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176,177],x_70:[167,169,170],x_71:[167,169,170],x_7:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_81:177,x_8:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_92:[27,28],x_93:[27,28],x_94:[27,28,159,160,161,177],x_95:[27,28,159,160,161,177],x_96:[27,28,159,160,161],x_97:[27,28,159,160,161],x_9:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_class:[151,152,154,156,157,158,163,165,166,167,168,169,170,171,172,173,176,177],xl:182,xoodoo:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,141,142,143,144,145,146,147,148,149,179,180],xoodoo_invertible_permut:138,xoodoo_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoo_permutation_sbox:140,xoodoo_sbox_permut:140,xoodooinvertiblepermut:138,xoodoopermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoosboxpermut:140,xoofff:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor1:84,xor:[4,8,9,10,11,19,20,26,51,54,55,56,59,63,70,71,72,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,180,184],xor_0_0:[24,97,98,104,124,126,127,139,140,168,179,184],xor_0_0_0:168,xor_0_0_0_class_bit_0:168,xor_0_0_0_class_bit_1:168,xor_0_0_1:168,xor_0_0_2:168,xor_0_0_3:168,xor_0_0_4:168,xor_0_0_5:168,xor_0_0_6:168,xor_0_0_7:168,xor_0_0_act:177,xor_0_0_valu:[168,177],xor_0_0_word_0_class:168,xor_0_0_word_0_class_bit_0:168,xor_0_0_word_0_class_bit_1:168,xor_0_1:[168,184],xor_0_1_0:164,xor_0_1_1:164,xor_0_1_30:164,xor_0_1_31:164,xor_0_1_input:148,xor_0_1_output:148,xor_0_2:[21,177,179],xor_0_2_0:[163,177],xor_0_2_0_i:177,xor_0_2_0_o:[77,177],xor_0_2_10_o:77,xor_0_2_11_o:77,xor_0_2_13:177,xor_0_2_14:177,xor_0_2_14_i:177,xor_0_2_14_o:177,xor_0_2_15:177,xor_0_2_15_i:177,xor_0_2_15_o:177,xor_0_2_16_i:[77,177],xor_0_2_17_i:177,xor_0_2_1:[163,177],xor_0_2_1_i:177,xor_0_2_1_o:177,xor_0_2_26_i:77,xor_0_2_27_i:77,xor_0_2_2:177,xor_0_2_2_i:177,xor_0_2_30_i:177,xor_0_2_31_i:177,xor_0_2_62:163,xor_0_2_63:163,xor_0_2_7_o:77,xor_0_2_8_o:77,xor_0_2_9_o:77,xor_0_2_i:177,xor_0_2_input:149,xor_0_2_o:177,xor_0_2_output:149,xor_0_2_x0:177,xor_0_2_x10:177,xor_0_2_x11:177,xor_0_2_x12:177,xor_0_2_x13:177,xor_0_2_x14:177,xor_0_2_x15:177,xor_0_2_x16:177,xor_0_2_x17:177,xor_0_2_x18:177,xor_0_2_x19:177,xor_0_2_x1:177,xor_0_2_x20:177,xor_0_2_x21:177,xor_0_2_x22:177,xor_0_2_x23:177,xor_0_2_x24:177,xor_0_2_x25:177,xor_0_2_x26:177,xor_0_2_x27:177,xor_0_2_x28:177,xor_0_2_x29:177,xor_0_2_x2:177,xor_0_2_x30:177,xor_0_2_x31:177,xor_0_2_x3:177,xor_0_2_x4:177,xor_0_2_x5:177,xor_0_2_x6:177,xor_0_2_x7:177,xor_0_2_x8:177,xor_0_2_x9:177,xor_0_2_y0:177,xor_0_2_y10:177,xor_0_2_y11:177,xor_0_2_y12:177,xor_0_2_y13:177,xor_0_2_y14:177,xor_0_2_y15:177,xor_0_2_y1:177,xor_0_2_y2:177,xor_0_2_y3:177,xor_0_2_y4:177,xor_0_2_y5:177,xor_0_2_y6:177,xor_0_2_y7:177,xor_0_2_y8:177,xor_0_2_y9:177,xor_0_31:[23,24,152,156,177],xor_0_31_valu:[152,156],xor_0_31_word_0_class_bit_0:177,xor_0_31_word_0_class_bit_1:177,xor_0_32:177,xor_0_32_30:177,xor_0_32_31:177,xor_0_34:[152,156],xor_0_34_act:[152,156],xor_0_36_11:[30,31],xor_0_36_12:[30,31],xor_0_3_0:164,xor_0_3_1:164,xor_0_3_30:164,xor_0_3_31:164,xor_0_4:[21,179],xor_0_4_0_i:77,xor_0_4_10_i:77,xor_0_4_11_i:77,xor_0_4_13_o:156,xor_0_4_14_o:156,xor_0_4_15_o:156,xor_0_4_7_i:77,xor_0_4_8_i:77,xor_0_4_9_i:77,xor_0_4_o:156,xor_0_5:177,xor_0_5_0_i:177,xor_0_5_14:177,xor_0_5_14_o:177,xor_0_5_15:177,xor_0_5_15_class_bit_0:177,xor_0_5_15_class_bit_1:177,xor_0_5_15_o:177,xor_0_5_1_i:177,xor_0_6:163,xor_0_6_0:163,xor_0_6_1:163,xor_0_6_30:163,xor_0_6_31:163,xor_0_7:[151,162,164,177],xor_0_7_0:[151,162,164],xor_0_7_10:[151,162,164],xor_0_7_11:[151,162,164],xor_0_7_1:[151,162,164],xor_0_7_x0:177,xor_0_7_x10:177,xor_0_7_x11:177,xor_0_7_x12:177,xor_0_7_x13:177,xor_0_7_x14:177,xor_0_7_x15:177,xor_0_7_x16:177,xor_0_7_x17:177,xor_0_7_x18:177,xor_0_7_x19:177,xor_0_7_x1:177,xor_0_7_x20:177,xor_0_7_x21:177,xor_0_7_x22:177,xor_0_7_x23:177,xor_0_7_x2:177,xor_0_7_x3:177,xor_0_7_x4:177,xor_0_7_x5:177,xor_0_7_x6:177,xor_0_7_x7:177,xor_0_7_x8:177,xor_0_7_x9:177,xor_0_7_y0:177,xor_0_7_y10:177,xor_0_7_y11:177,xor_0_7_y1:177,xor_0_7_y2:177,xor_0_7_y3:177,xor_0_7_y4:177,xor_0_7_y5:177,xor_0_7_y6:177,xor_0_7_y7:177,xor_0_7_y8:177,xor_0_7_y9:177,xor_1_0:184,xor_1_10:26,xor_1_10_0_i:26,xor_1_10_0_o:26,xor_1_10_14_o:26,xor_1_10_15_o:26,xor_1_10_1_i:26,xor_1_10_1_o:26,xor_1_10_30_i:26,xor_1_10_31_i:26,xor_1_10_7_i:77,xor_1_10_8_i:77,xor_1_10_9_i:77,xor_1_14:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_1_1:184,xor_1_1_input:148,xor_1_1_output:148,xor_1_2_input:149,xor_1_2_output:149,xor_1_31_word_0_class:[152,156],xor_1_31_word_1_class:[152,156],xor_1_6_0:[152,156],xor_1_6_1:[152,156],xor_1_8_7_o:77,xor_1_8_8_o:77,xor_1_8_9_o:77,xor_2_10:[152,156],xor_2_10_13_o:62,xor_2_10_14:[152,156],xor_2_10_14_o:[62,67,75],xor_2_10_15:[152,156],xor_2_10_15_o:[62,67,75],xor_2_26:177,xor_2_7:4,xor_2_8:[152,156],xor_2_8_0:[152,156],xor_2_8_1:[152,156],xor_3_10_o:25,xor_as_boolean_funct:4,xor_boolean_funct:8,xor_compon:[4,23,24,177],xor_component1:[23,24],xor_component2:[23,24],xor_continuous_diffusion_analysi:9,xor_continuous_diffusion_analysis_two_word:9,xor_differenti:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_differential_first_step:24,xor_differential_first_step_find_all_solut:24,xor_differential_one_solut:[19,20,21,22,23,24,25],xor_input1:[],xor_input2:[],xor_linear:[0,19,20,21,22,23,24,25,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_linear_one_solut:[19,20,21,22,23,24,25],xor_matrix_valu:96,xor_minizinc_constraint:177,xor_round_kei:85,xor_truncated_table_2:[23,24,177],xor_truncated_table_3:[23,177],xor_word:177,xor_wordwise_deterministic_truncated_xor_differential_constraint:177,xor_xor_differential_first_step_constraint:[23,24],xordiff:180,xore:[10,11],xtea:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],xtea_block_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xteablockciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],y0:17,y1:17,y2:17,y3:17,y4:17,y5:17,y6:17,y7:17,y:[0,9,16,17,33,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,190],y_3:[70,76],y_i:9,yang:182,yc2004:182,yice:[63,70,71],yices_pars:71,yield:177,you:[26,32,33,55,71,80,82,111,180],yu:182,z0:17,z1:17,z2:17,z3:[17,71,72,73,74,75,77],z3_parser:71,z4:17,z5:17,z6:17,z7:17,z:[16,17,33,48,70,112,114,182],zentrum:182,zero:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correlation_linear_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zeta:[177,182],zeta_in_1:48,zeta_in_2:48,zetax0:177,zetax1:177,zuc:180,zuc_nonlinear_f:147,zuc_stream_ciph:147,zucstreamciph:147,zz:[17,54]},titles:["Cipher","Algebraic tests","Avalanche tests","Code generator","Component analysis tests","Continuous tests","Evaluator","Generic bit based c functions","Generic functions","Generic functions continuous diffusion analysis","Generic functions vectorized bit","Generic functions vectorized byte","Generic word based c functions","Graph generator","Inverse cipher","Algebraic model","Boolean polynomial ring","Constraints","Usefulfunctions","Cp model","Cp cipher model","Cp deterministic truncated xor differential model","Cp xor differential model","Cp xor differential number of active sboxes model","Cp xor differential trail search fixing number of active sboxes model","Cp xor linear model","Milp model","Milp bitwise deterministic truncated xor differential model","Milp bitwise impossible xor differential model","Milp cipher model","Milp wordwise deterministic truncated xor differential model","Milp wordwise impossible xor differential model","Milp xor differential model","Milp xor linear model","Tea cipher xordiff model","Config","Dictionary containing truncated input pattern inequalities","Dictionary containing truncated mds inequalities","Dictionary containing truncated xor inequalities between n input bits","Dictionary containing xor inequalities between n input bits","Dictionary that contains inequalities for large sboxes","Dictionary that contains inequalities for large sboxes xor linear","Dictionary that contains inequalities for sboxes with undisturbed bits","Dictionary that contains inequalities for small sboxes","Dictionary that contains inequalities for small sboxes xor linear","Generate inequalities for and operation 2 input bits","Generate inequalities for large sboxes","Generate inequalities for wordwise truncated mds matrices","Generate inequalities for wordwise truncated xor with n input bits","Generate inequalities for xor with n input bits","Generate sbox inequalities for trail search","Generate undisturbed bits inequalities for sboxes","Milp name mappings","Mzn predicates","Utils","Minizinc model","Minizinc cipher model","Minizinc deterministic truncated xor differential model","Minizinc xor differential model","Cms cipher model","Cms deterministic truncated xor differential model","Cms xor differential model","Cms xor linear model","Sat model","Sat cipher model","Sat deterministic truncated xor differential model","Sat xor differential model","Sat xor linear model","Mzn predicates","N window heuristic helper","Utils","Smt model","Smt cipher model","Smt deterministic truncated xor differential model","Smt xor differential model","Smt xor linear model","Utils","Utils","Neural network tests","Dataset generator","Dieharder statistical tests","Input data example","Nist statistical tests","Tester","Aes block cipher","Bea1 block cipher","Constant block cipher","Des block cipher","Des exact key length block cipher","Fancy block cipher","Hight block cipher","Identity block cipher","Kasumi block cipher","Lblock block cipher","Lea block cipher","Lowmc block cipher","Lowmc generate matrices","Midori block cipher","Present block cipher","Qarmav2 block cipher","Raiden block cipher","Rc5 block cipher","Simon block cipher","Skinny block cipher","Sparx block cipher","Speck block cipher","Tea block cipher","Threefish block cipher","Twofish block cipher","Xtea block cipher","Blake2 hash function","Blake hash function","Md5 hash function","Sha1 hash function","Sha2 hash function","Whirlpool hash function","Ascon permutation","Ascon sbox sigma no matrix permutation","Ascon sbox sigma permutation","Chacha permutation","Gift permutation","Gift sbox permutation","Gimli permutation","Gimli sbox permutation","Grain core permutation","Keccak invertible permutation","Keccak permutation","Keccak sbox permutation","Photon permutation","Salsa permutation","Sparkle permutation","Spongent pi fsr permutation","Spongent pi permutation","Spongent pi precomputation permutation","Tinyjambu 32bits word permutation","Tinyjambu fsr 32bits word permutation","Tinyjambu permutation","Util","Xoodoo invertible permutation","Xoodoo permutation","Xoodoo sbox permutation","A5 1 stream cipher","Bivium stream cipher","Bluetooth stream cipher e0","Chacha stream cipher","Snow3g stream cipher","Trivium stream cipher","Zuc stream cipher","Toyspn1","Toyspn2","Component","And component","Cipher output component","Concatenate component","Constant component","Fsr component","Intermediate output component","Linear layer component","Mix column component","Modadd component","Modsub component","Modular component","Multi input non linear logical operator component","Not component","Or component","Permutation component","Reverse component","Rotate component","Sbox component","Shift component","Shift rows component","Sigma component","Theta keccak component","Theta xoodoo component","Variable rotate component","Variable shift component","Word permutation component","Xor component","Compound xor differential cipher","Editor","CLAASP: Cryptographic Library for Automated Analysis of Symmetric Primitives","Input","References","Round","Rounds","Integer","Integer functions","Sage scripts","Sequence operations","Templates","Utils"],titleterms:{"1":141,"2":45,"32bit":[134,135],"boolean":[16,70],"byte":11,"function":[7,8,9,10,11,12,110,111,112,113,114,115,180,186],And:151,Not:163,Or:164,a5:141,activ:[23,24],ae:84,algebra:[1,15,180],analysi:[4,9,180],ascon:[116,117,118],autom:180,avalanch:2,base:[7,12],bea1:85,between:[38,39],bit:[7,10,38,39,42,45,48,49,51],bitwis:[27,28],bivium:142,blake2:110,blake:111,block:[84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,180],bluetooth:143,build:70,c:[7,12],chacha:[119,144],cipher:[0,14,20,29,34,56,59,60,61,62,63,64,71,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,141,142,143,144,145,146,147,152,178,180],claasp:180,cm:[59,60,61,62,180],cnf:70,code:3,column:158,compon:[4,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],compound:178,concaten:153,config:35,constant:[86,154],constraint:17,contain:[36,37,38,39,40,41,42,43,44],continu:[5,9],core:124,cp:[19,20,21,22,23,24,25,180],cryptograph:180,data:81,dataset:79,de:[87,88],determinist:[21,27,30,57,60,65,73],dictionari:[36,37,38,39,40,41,42,43,44],diehard:80,differenti:[21,22,23,24,27,28,30,31,32,57,58,60,61,65,66,73,74,178],diffus:9,direct:70,e0:143,editor:179,equal:70,evalu:6,exact:88,exampl:81,fanci:89,fix:24,fsr:[131,135,155],gener:[3,7,8,9,10,11,12,13,45,46,47,48,49,50,51,70,79,96,180],gift:[120,121],gimli:[122,123],grain:124,graph:13,hash:[110,111,112,113,114,115,180],helper:69,heurist:69,hight:90,ident:91,imposs:[28,31],indic:180,inequ:[36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inform:180,input:[36,38,39,45,48,49,81,162,181],integ:[185,186],intermedi:156,invers:14,invert:[125,138],kasumi:92,keccak:[125,126,127,172],kei:88,larg:[40,41,46],layer:157,lblock:93,lea:94,length:88,librari:180,linear:[25,33,41,44,62,67,75,157,162],logic:162,lowmc:[95,96],map:52,matric:[47,96],matrix:117,md5:112,md:[37,47],midori:97,milp:[26,27,28,29,30,31,32,33,52,180],minizinc:[55,56,57,58,180],mix:158,modadd:159,model:[15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,180],modsub:160,modul:180,modular:161,multi:162,mzn:[53,68],n:[38,39,48,49,69],name:52,network:78,neural:78,nist:82,non:162,number:[23,24],oper:[45,162,188],output:[152,156],pattern:36,permut:[116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,165,176,180],photon:128,pi:[131,132,133],polynomi:16,precomput:133,predic:[53,68],present:98,primit:180,qarmav2:99,raiden:100,rc5:101,refer:182,repres:70,revers:166,ring:16,rotat:[167,174],round:[183,184],row:170,run:70,sage:187,salsa:129,sat:[63,64,65,66,67,70,180],sbox:[23,24,40,41,42,43,44,46,50,51,117,118,121,123,127,140,168],script:187,search:[24,50],sequenc:188,sha1:113,sha2:114,shift:[169,170,175],sigma:[117,118,171],simon:102,skinni:103,small:[43,44],smt:[71,72,73,74,75,180],snow3g:145,solver:[63,70],sparkl:130,sparx:104,speck:105,spongent:[131,132,133],standard:[63,71],statist:[80,82,180],stream:[141,142,143,144,145,146,147,180],symmetr:180,tabl:180,tea:[34,106],templat:189,test:[1,2,4,5,78,80,82,180],tester:83,theta:[172,173],threefish:107,tinyjambu:[134,135,136],tmp:180,toi:180,toyspn1:148,toyspn2:149,trail:[24,50],trivium:146,truncat:[21,27,30,36,37,38,47,48,57,60,65,73],twofish:108,undisturb:[42,51],usefulfunct:18,util:[54,70,76,77,137,180,190],variabl:[174,175],vector:[10,11],whirlpool:115,window:69,word:[12,134,135,176],wordwis:[30,31,47,48],xoodoo:[138,139,140,173],xor:[21,22,23,24,25,27,28,30,31,32,33,38,39,41,44,48,49,57,58,60,61,62,65,66,67,73,74,75,177,178],xordiff:34,xtea:109,zuc:147}}) \ No newline at end of file +Search.setIndex({docnames:["cipher","cipher_modules/algebraic_tests","cipher_modules/avalanche_tests","cipher_modules/code_generator","cipher_modules/component_analysis_tests","cipher_modules/continuous_tests","cipher_modules/evaluator","cipher_modules/generic_bit_based_c_functions","cipher_modules/generic_functions","cipher_modules/generic_functions_continuous_diffusion_analysis","cipher_modules/generic_functions_vectorized_bit","cipher_modules/generic_functions_vectorized_byte","cipher_modules/generic_word_based_c_functions","cipher_modules/graph_generator","cipher_modules/inverse_cipher","cipher_modules/models/algebraic/algebraic_model","cipher_modules/models/algebraic/boolean_polynomial_ring","cipher_modules/models/algebraic/constraints","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions","cipher_modules/models/cp/cp_model","cipher_modules/models/cp/cp_models/cp_cipher_model","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_linear_model","cipher_modules/models/milp/milp_model","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_cipher_model","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_linear_model","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model","cipher_modules/models/milp/utils/config","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes","cipher_modules/models/milp/utils/milp_name_mappings","cipher_modules/models/milp/utils/mzn_predicates","cipher_modules/models/milp/utils/utils","cipher_modules/models/minizinc/minizinc_model","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model","cipher_modules/models/sat/cms_models/cms_cipher_model","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_linear_model","cipher_modules/models/sat/sat_model","cipher_modules/models/sat/sat_models/sat_cipher_model","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_linear_model","cipher_modules/models/sat/utils/mzn_predicates","cipher_modules/models/sat/utils/n_window_heuristic_helper","cipher_modules/models/sat/utils/utils","cipher_modules/models/smt/smt_model","cipher_modules/models/smt/smt_models/smt_cipher_model","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_linear_model","cipher_modules/models/smt/utils/utils","cipher_modules/models/utils","cipher_modules/neural_network_tests","cipher_modules/statistical_tests/dataset_generator","cipher_modules/statistical_tests/dieharder_statistical_tests","cipher_modules/statistical_tests/input_data_example","cipher_modules/statistical_tests/nist_statistical_tests","cipher_modules/tester","ciphers/block_ciphers/aes_block_cipher","ciphers/block_ciphers/bea1_block_cipher","ciphers/block_ciphers/constant_block_cipher","ciphers/block_ciphers/des_block_cipher","ciphers/block_ciphers/des_exact_key_length_block_cipher","ciphers/block_ciphers/fancy_block_cipher","ciphers/block_ciphers/hight_block_cipher","ciphers/block_ciphers/identity_block_cipher","ciphers/block_ciphers/kasumi_block_cipher","ciphers/block_ciphers/lblock_block_cipher","ciphers/block_ciphers/lea_block_cipher","ciphers/block_ciphers/lowmc_block_cipher","ciphers/block_ciphers/lowmc_generate_matrices","ciphers/block_ciphers/midori_block_cipher","ciphers/block_ciphers/present_block_cipher","ciphers/block_ciphers/qarmav2_block_cipher","ciphers/block_ciphers/raiden_block_cipher","ciphers/block_ciphers/rc5_block_cipher","ciphers/block_ciphers/simon_block_cipher","ciphers/block_ciphers/skinny_block_cipher","ciphers/block_ciphers/sparx_block_cipher","ciphers/block_ciphers/speck_block_cipher","ciphers/block_ciphers/tea_block_cipher","ciphers/block_ciphers/threefish_block_cipher","ciphers/block_ciphers/twofish_block_cipher","ciphers/block_ciphers/xtea_block_cipher","ciphers/hash_functions/blake2_hash_function","ciphers/hash_functions/blake_hash_function","ciphers/hash_functions/md5_hash_function","ciphers/hash_functions/sha1_hash_function","ciphers/hash_functions/sha2_hash_function","ciphers/hash_functions/whirlpool_hash_function","ciphers/permutations/ascon_permutation","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation","ciphers/permutations/ascon_sbox_sigma_permutation","ciphers/permutations/chacha_permutation","ciphers/permutations/gift_permutation","ciphers/permutations/gift_sbox_permutation","ciphers/permutations/gimli_permutation","ciphers/permutations/gimli_sbox_permutation","ciphers/permutations/grain_core_permutation","ciphers/permutations/keccak_invertible_permutation","ciphers/permutations/keccak_permutation","ciphers/permutations/keccak_sbox_permutation","ciphers/permutations/photon_permutation","ciphers/permutations/salsa_permutation","ciphers/permutations/sparkle_permutation","ciphers/permutations/spongent_pi_fsr_permutation","ciphers/permutations/spongent_pi_permutation","ciphers/permutations/spongent_pi_precomputation_permutation","ciphers/permutations/tinyjambu_32bits_word_permutation","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation","ciphers/permutations/tinyjambu_permutation","ciphers/permutations/util","ciphers/permutations/xoodoo_invertible_permutation","ciphers/permutations/xoodoo_permutation","ciphers/permutations/xoodoo_sbox_permutation","ciphers/stream_ciphers/a5_1_stream_cipher","ciphers/stream_ciphers/bivium_stream_cipher","ciphers/stream_ciphers/bluetooth_stream_cipher_e0","ciphers/stream_ciphers/chacha_stream_cipher","ciphers/stream_ciphers/snow3g_stream_cipher","ciphers/stream_ciphers/trivium_stream_cipher","ciphers/stream_ciphers/zuc_stream_cipher","ciphers/toys/toyspn1","ciphers/toys/toyspn2","component","components/and_component","components/cipher_output_component","components/concatenate_component","components/constant_component","components/fsr_component","components/intermediate_output_component","components/linear_layer_component","components/mix_column_component","components/modadd_component","components/modsub_component","components/modular_component","components/multi_input_non_linear_logical_operator_component","components/not_component","components/or_component","components/permutation_component","components/reverse_component","components/rotate_component","components/sbox_component","components/shift_component","components/shift_rows_component","components/sigma_component","components/theta_keccak_component","components/theta_xoodoo_component","components/variable_rotate_component","components/variable_shift_component","components/word_permutation_component","components/xor_component","compound_xor_differential_cipher","editor","index","input","references","round","rounds","utils/integer","utils/integer_functions","utils/sage_scripts","utils/sequence_operations","utils/templates","utils/utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":9,sphinx:56},filenames:["cipher.rst","cipher_modules/algebraic_tests.rst","cipher_modules/avalanche_tests.rst","cipher_modules/code_generator.rst","cipher_modules/component_analysis_tests.rst","cipher_modules/continuous_tests.rst","cipher_modules/evaluator.rst","cipher_modules/generic_bit_based_c_functions.rst","cipher_modules/generic_functions.rst","cipher_modules/generic_functions_continuous_diffusion_analysis.rst","cipher_modules/generic_functions_vectorized_bit.rst","cipher_modules/generic_functions_vectorized_byte.rst","cipher_modules/generic_word_based_c_functions.rst","cipher_modules/graph_generator.rst","cipher_modules/inverse_cipher.rst","cipher_modules/models/algebraic/algebraic_model.rst","cipher_modules/models/algebraic/boolean_polynomial_ring.rst","cipher_modules/models/algebraic/constraints.rst","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions.rst","cipher_modules/models/cp/cp_model.rst","cipher_modules/models/cp/cp_models/cp_cipher_model.rst","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_linear_model.rst","cipher_modules/models/milp/milp_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_cipher_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_linear_model.rst","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model.rst","cipher_modules/models/milp/utils/config.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.rst","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.rst","cipher_modules/models/milp/utils/milp_name_mappings.rst","cipher_modules/models/milp/utils/mzn_predicates.rst","cipher_modules/models/milp/utils/utils.rst","cipher_modules/models/minizinc/minizinc_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_cipher_model.rst","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_linear_model.rst","cipher_modules/models/sat/sat_model.rst","cipher_modules/models/sat/sat_models/sat_cipher_model.rst","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_linear_model.rst","cipher_modules/models/sat/utils/mzn_predicates.rst","cipher_modules/models/sat/utils/n_window_heuristic_helper.rst","cipher_modules/models/sat/utils/utils.rst","cipher_modules/models/smt/smt_model.rst","cipher_modules/models/smt/smt_models/smt_cipher_model.rst","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_linear_model.rst","cipher_modules/models/smt/utils/utils.rst","cipher_modules/models/utils.rst","cipher_modules/neural_network_tests.rst","cipher_modules/statistical_tests/dataset_generator.rst","cipher_modules/statistical_tests/dieharder_statistical_tests.rst","cipher_modules/statistical_tests/input_data_example.rst","cipher_modules/statistical_tests/nist_statistical_tests.rst","cipher_modules/tester.rst","ciphers/block_ciphers/aes_block_cipher.rst","ciphers/block_ciphers/bea1_block_cipher.rst","ciphers/block_ciphers/constant_block_cipher.rst","ciphers/block_ciphers/des_block_cipher.rst","ciphers/block_ciphers/des_exact_key_length_block_cipher.rst","ciphers/block_ciphers/fancy_block_cipher.rst","ciphers/block_ciphers/hight_block_cipher.rst","ciphers/block_ciphers/identity_block_cipher.rst","ciphers/block_ciphers/kasumi_block_cipher.rst","ciphers/block_ciphers/lblock_block_cipher.rst","ciphers/block_ciphers/lea_block_cipher.rst","ciphers/block_ciphers/lowmc_block_cipher.rst","ciphers/block_ciphers/lowmc_generate_matrices.rst","ciphers/block_ciphers/midori_block_cipher.rst","ciphers/block_ciphers/present_block_cipher.rst","ciphers/block_ciphers/qarmav2_block_cipher.rst","ciphers/block_ciphers/raiden_block_cipher.rst","ciphers/block_ciphers/rc5_block_cipher.rst","ciphers/block_ciphers/simon_block_cipher.rst","ciphers/block_ciphers/skinny_block_cipher.rst","ciphers/block_ciphers/sparx_block_cipher.rst","ciphers/block_ciphers/speck_block_cipher.rst","ciphers/block_ciphers/tea_block_cipher.rst","ciphers/block_ciphers/threefish_block_cipher.rst","ciphers/block_ciphers/twofish_block_cipher.rst","ciphers/block_ciphers/xtea_block_cipher.rst","ciphers/hash_functions/blake2_hash_function.rst","ciphers/hash_functions/blake_hash_function.rst","ciphers/hash_functions/md5_hash_function.rst","ciphers/hash_functions/sha1_hash_function.rst","ciphers/hash_functions/sha2_hash_function.rst","ciphers/hash_functions/whirlpool_hash_function.rst","ciphers/permutations/ascon_permutation.rst","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation.rst","ciphers/permutations/ascon_sbox_sigma_permutation.rst","ciphers/permutations/chacha_permutation.rst","ciphers/permutations/gift_permutation.rst","ciphers/permutations/gift_sbox_permutation.rst","ciphers/permutations/gimli_permutation.rst","ciphers/permutations/gimli_sbox_permutation.rst","ciphers/permutations/grain_core_permutation.rst","ciphers/permutations/keccak_invertible_permutation.rst","ciphers/permutations/keccak_permutation.rst","ciphers/permutations/keccak_sbox_permutation.rst","ciphers/permutations/photon_permutation.rst","ciphers/permutations/salsa_permutation.rst","ciphers/permutations/sparkle_permutation.rst","ciphers/permutations/spongent_pi_fsr_permutation.rst","ciphers/permutations/spongent_pi_permutation.rst","ciphers/permutations/spongent_pi_precomputation_permutation.rst","ciphers/permutations/tinyjambu_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_permutation.rst","ciphers/permutations/util.rst","ciphers/permutations/xoodoo_invertible_permutation.rst","ciphers/permutations/xoodoo_permutation.rst","ciphers/permutations/xoodoo_sbox_permutation.rst","ciphers/stream_ciphers/a5_1_stream_cipher.rst","ciphers/stream_ciphers/bivium_stream_cipher.rst","ciphers/stream_ciphers/bluetooth_stream_cipher_e0.rst","ciphers/stream_ciphers/chacha_stream_cipher.rst","ciphers/stream_ciphers/snow3g_stream_cipher.rst","ciphers/stream_ciphers/trivium_stream_cipher.rst","ciphers/stream_ciphers/zuc_stream_cipher.rst","ciphers/toys/toyspn1.rst","ciphers/toys/toyspn2.rst","component.rst","components/and_component.rst","components/cipher_output_component.rst","components/concatenate_component.rst","components/constant_component.rst","components/fsr_component.rst","components/intermediate_output_component.rst","components/linear_layer_component.rst","components/mix_column_component.rst","components/modadd_component.rst","components/modsub_component.rst","components/modular_component.rst","components/multi_input_non_linear_logical_operator_component.rst","components/not_component.rst","components/or_component.rst","components/permutation_component.rst","components/reverse_component.rst","components/rotate_component.rst","components/sbox_component.rst","components/shift_component.rst","components/shift_rows_component.rst","components/sigma_component.rst","components/theta_keccak_component.rst","components/theta_xoodoo_component.rst","components/variable_rotate_component.rst","components/variable_shift_component.rst","components/word_permutation_component.rst","components/xor_component.rst","compound_xor_differential_cipher.rst","editor.rst","index.rst","input.rst","references.rst","round.rst","rounds.rst","utils/integer.rst","utils/integer_functions.rst","utils/sage_scripts.rst","utils/sequence_operations.rst","utils/templates.rst","utils/utils.rst"],objects:{"":[[0,0,0,"-","cipher"],[150,0,0,"-","component"],[178,0,0,"-","compound_xor_differential_cipher"],[179,0,0,"-","editor"],[181,0,0,"-","input"],[183,0,0,"-","round"],[184,0,0,"-","rounds"]],"cipher.Cipher":[[0,2,1,"","add_AND_component"],[0,2,1,"","add_FSR_component"],[0,2,1,"","add_MODADD_component"],[0,2,1,"","add_MODSUB_component"],[0,2,1,"","add_NOT_component"],[0,2,1,"","add_OR_component"],[0,2,1,"","add_SBOX_component"],[0,2,1,"","add_SHIFT_component"],[0,2,1,"","add_XOR_component"],[0,2,1,"","add_cipher_output_component"],[0,2,1,"","add_concatenate_component"],[0,2,1,"","add_constant_component"],[0,2,1,"","add_intermediate_output_component"],[0,2,1,"","add_linear_layer_component"],[0,2,1,"","add_mix_column_component"],[0,2,1,"","add_permutation_component"],[0,2,1,"","add_reverse_component"],[0,2,1,"","add_rotate_component"],[0,2,1,"","add_round"],[0,2,1,"","add_round_key_output_component"],[0,2,1,"","add_round_output_component"],[0,2,1,"","add_shift_rows_component"],[0,2,1,"","add_sigma_component"],[0,2,1,"","add_suffix_to_components"],[0,2,1,"","add_theta_keccak_component"],[0,2,1,"","add_theta_xoodoo_component"],[0,2,1,"","add_variable_rotate_component"],[0,2,1,"","add_variable_shift_component"],[0,2,1,"","add_word_permutation_component"],[0,2,1,"","algebraic_tests"],[0,2,1,"","analyze_cipher"],[0,2,1,"","as_python_dictionary"],[0,2,1,"","avalanche_probability_vectors"],[0,2,1,"","cipher_inverse"],[0,2,1,"","cipher_partial_inverse"],[0,2,1,"","component_analysis_tests"],[0,2,1,"","component_from"],[0,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[0,2,1,"","continuous_avalanche_factor"],[0,2,1,"","continuous_diffusion_factor"],[0,2,1,"","continuous_diffusion_tests"],[0,2,1,"","continuous_neutrality_measure_for_bit_j"],[0,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[0,2,1,"","convert_to_compound_xor_cipher"],[0,3,1,"","current_round"],[0,3,1,"","current_round_number"],[0,3,1,"","current_round_number_of_components"],[0,2,1,"","delete_generated_evaluate_c_shared_library"],[0,2,1,"","diffusion_tests"],[0,2,1,"","evaluate"],[0,2,1,"","evaluate_using_c"],[0,2,1,"","evaluate_vectorized"],[0,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[0,3,1,"","family_name"],[0,3,1,"","file_name"],[0,2,1,"","find_good_input_difference_for_neural_distinguisher"],[0,2,1,"","find_impossible_property"],[0,2,1,"","generate_bit_based_c_code"],[0,2,1,"","generate_csv_report"],[0,2,1,"","generate_evaluate_c_code_shared_library"],[0,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[0,2,1,"","generate_word_based_c_code"],[0,2,1,"","get_all_components"],[0,2,1,"","get_all_components_ids"],[0,2,1,"","get_all_inputs_bit_positions"],[0,2,1,"","get_component_from_id"],[0,2,1,"","get_components_in_round"],[0,2,1,"","get_current_component_id"],[0,2,1,"","get_model"],[0,2,1,"","get_number_of_components_in_round"],[0,2,1,"","get_partial_cipher"],[0,2,1,"","get_round_from_component_id"],[0,2,1,"","get_sizes_of_components_by_type"],[0,3,1,"","id"],[0,2,1,"","impossible_differential_search"],[0,3,1,"","inputs"],[0,3,1,"","inputs_bit_size"],[0,2,1,"","inputs_size_to_dict"],[0,2,1,"","is_algebraically_secure"],[0,2,1,"","is_andrx"],[0,2,1,"","is_arx"],[0,2,1,"","is_power_of_2_word_based"],[0,2,1,"","is_shift_arx"],[0,2,1,"","is_spn"],[0,2,1,"","make_cipher_id"],[0,2,1,"","make_file_name"],[0,2,1,"","neural_network_blackbox_distinguisher_tests"],[0,2,1,"","neural_network_differential_distinguisher_tests"],[0,3,1,"","number_of_rounds"],[0,3,1,"","output_bit_size"],[0,2,1,"","polynomial_system"],[0,2,1,"","polynomial_system_at_round"],[0,2,1,"","print"],[0,2,1,"","print_as_python_dictionary"],[0,2,1,"","print_as_python_dictionary_to_file"],[0,2,1,"","print_component_analysis_as_radar_charts"],[0,2,1,"","print_evaluation_python_code"],[0,2,1,"","print_evaluation_python_code_to_file"],[0,2,1,"","print_input_information"],[0,3,1,"","reference_code"],[0,2,1,"","remove_key_schedule"],[0,2,1,"","remove_round_component"],[0,2,1,"","remove_round_component_from_id"],[0,3,1,"","rounds"],[0,3,1,"","rounds_as_list"],[0,2,1,"","run_autond_pipeline"],[0,2,1,"","set_file_name"],[0,2,1,"","set_id"],[0,2,1,"","set_inputs"],[0,2,1,"","sort_cipher"],[0,2,1,"","test_against_reference_code"],[0,2,1,"","test_vector_check"],[0,2,1,"","train_gohr_neural_distinguisher"],[0,2,1,"","train_neural_distinguisher"],[0,3,1,"","type"],[0,2,1,"","zero_correlation_linear_search"]],"cipher_modules.algebraic_tests":[[1,4,1,"","algebraic_tests"]],"cipher_modules.avalanche_tests":[[2,4,1,"","add_intermediate_output_components_id_to_dictionary"],[2,4,1,"","add_intermediate_output_rounds_id_to_dictionary"],[2,4,1,"","add_intermediate_output_values_to_dictionary"],[2,4,1,"","add_multicolumns_to_graph"],[2,4,1,"","avalanche_probability_vectors"],[2,4,1,"","avalanche_tests"],[2,4,1,"","calculate_average_difference"],[2,4,1,"","calculate_regular_difference"],[2,4,1,"","calculate_worst_input_differences"],[2,4,1,"","compute_criterion_from_avalanche_probability_vectors"],[2,4,1,"","generate_avalanche_probability_vectors"],[2,4,1,"","generate_graph_by_differences_positions"],[2,4,1,"","generate_heatmap_graphs_for_avalanche_tests"],[2,4,1,"","generate_inputs_prime"],[2,4,1,"","generate_random_inputs"],[2,4,1,"","get_average_criteria_by_round_input_output"],[2,4,1,"","get_average_criteria_list_by_output_tag"],[2,4,1,"","get_intermediate_output_names"],[2,4,1,"","init_dictionary_test_results"],[2,4,1,"","is_output"],[2,4,1,"","set_vector_dependence"],[2,4,1,"","set_vector_dependence_uniform"],[2,4,1,"","set_vector_entropy"],[2,4,1,"","set_vector_weight"]],"cipher_modules.code_generator":[[3,4,1,"","build_code_for_components"],[3,4,1,"","build_code_for_continuous_diffusion_analysis_components"],[3,4,1,"","build_continuous_diffusion_analysis_function_call"],[3,4,1,"","build_function_call"],[3,4,1,"","constant_to_bitstring"],[3,4,1,"","constant_to_repr"],[3,4,1,"","delete_generated_evaluate_c_shared_library"],[3,4,1,"","generate_bit_based_c_code"],[3,4,1,"","generate_bit_based_vectorized_python_code_string"],[3,4,1,"","generate_byte_based_vectorized_python_code_string"],[3,4,1,"","generate_evaluate_c_code_shared_library"],[3,4,1,"","generate_python_code_string"],[3,4,1,"","generate_python_code_string_for_continuous_diffusion_analysis"],[3,4,1,"","generate_word_based_c_code"],[3,4,1,"","get_cipher_output_component_bit_based_c_code"],[3,4,1,"","get_cipher_output_word_based_c_code"],[3,4,1,"","get_intermediate_output_component_bit_based_c_code"],[3,4,1,"","get_intermediate_output_word_based_c_code"],[3,4,1,"","get_number_of_inputs"],[3,4,1,"","get_padding_component_bit_based_c_code"],[3,4,1,"","get_rounds_bit_based_c_code"],[3,4,1,"","get_rounds_word_based_c_code"],[3,4,1,"","get_word_operation_component_bit_based_c_code"],[3,4,1,"","get_word_operation_word_based_c_code"],[3,4,1,"","prepare_input_bit_based_vectorized_python_code_string"],[3,4,1,"","prepare_input_byte_based_vectorized_python_code_string"],[3,4,1,"","update_intermediate_structure"]],"cipher_modules.component_analysis_tests":[[4,4,1,"","AND_as_boolean_function"],[4,4,1,"","MODADD_as_boolean_function"],[4,4,1,"","XOR_as_boolean_function"],[4,4,1,"","add_attributes_to_operation"],[4,4,1,"","binary_matrix_of_linear_component"],[4,4,1,"","branch_number"],[4,4,1,"","calculate_carry_for_three_blocks"],[4,4,1,"","calculate_carry_for_two_blocks"],[4,4,1,"","calculate_weights_for_linear_layer"],[4,4,1,"","calculate_weights_for_mix_column"],[4,4,1,"","collect_component_operations"],[4,4,1,"","collect_components_with_the_same_operation"],[4,4,1,"","component_analysis_tests"],[4,4,1,""," + field_element_matrix_to_integer_matrix"],[4,4,1,"","fill_area"],[4,4,1,"","generate_boolean_polynomial_ring_from_cipher"],[4,4,1,"","get_all_operations"],[4,4,1,"","get_inverse_matrix_in_integer_representation"],[4,4,1,"","has_maximal_branch_number"],[4,4,1,"","initialise_spider_plot"],[4,4,1,"","instantiate_matrix_over_correct_field"],[4,4,1,"","int_to_poly"],[4,4,1,"","is_mds"],[4,4,1,"","linear_layer_properties"],[4,4,1,"","order_of_linear_component"],[4,4,1,"","plot_first_line_of_data_frame"],[4,4,1,"","print_component_analysis_as_radar_charts"],[4,4,1,"","remove_components_with_strings_as_values"],[4,4,1,"","sbox_properties"],[4,4,1,"","select_boolean_function"],[4,4,1,"","select_properties_function"],[4,4,1,"","set_variables_names"],[4,4,1,"","word_operation_properties"]],"cipher_modules.continuous_tests":[[5,4,1,"","add_beta_samples_to_final_result_from"],[5,4,1,"","continuous_avalanche_factor"],[5,4,1,"","continuous_diffusion_factor"],[5,4,1,"","continuous_diffusion_tests"],[5,4,1,"","continuous_neutrality_measure_for_bit_j"],[5,4,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[5,4,1,"","generate_beta_sample_output"],[5,4,1,"","incrementing_counters"],[5,4,1,"","init_final_result_structure"],[5,4,1,"","init_input_bits"]],"cipher_modules.evaluator":[[6,4,1,"","evaluate"],[6,4,1,"","evaluate_using_c"],[6,4,1,"","evaluate_vectorized"],[6,4,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"]],"cipher_modules.generic_functions":[[8,4,1,"","AND"],[8,4,1,"","MODADD"],[8,4,1,"","MODSUB"],[8,4,1,"","NOT"],[8,4,1,"","OR"],[8,4,1,"","ROTATE"],[8,4,1,"","ROTATE_BY_VARIABLE_AMOUNT"],[8,4,1,"","ROTATE_boolean_function"],[8,4,1,"","SHIFT"],[8,4,1,"","SHIFT_BY_VARIABLE_AMOUNT"],[8,4,1,"","SIGMA"],[8,4,1,"","THETA_KECCAK"],[8,4,1,"","THETA_XOODOO"],[8,4,1,"","XOR"],[8,4,1,"","XOR_boolean_function"],[8,4,1,"","add_padding"],[8,4,1,"","concatenate_bool_func"],[8,4,1,"","constant_bool_func"],[8,4,1,"","convert_polynomial_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","convert_x_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","fsr_binary"],[8,4,1,"","fsr_word"],[8,4,1,"","int_to_byte_array"],[8,4,1,"","linear_layer"],[8,4,1,"","merge_bits"],[8,4,1,"","mix_column_generalized"],[8,4,1,"","mix_column_generalized_bool_func"],[8,4,1,"","padding"],[8,4,1,"","sbox"],[8,4,1,"","sbox_bool_func"],[8,4,1,"","select_bits"],[8,4,1,"","set_from_hex_string"],[8,4,1,"","transform_GF2NMatrix_to_BinMatrix"]],"cipher_modules.generic_functions_continuous_diffusion_analysis":[[9,4,1,"","AND_continuous_diffusion_analysis"],[9,4,1,"","CONSTANT_continuous_diffusion_analysis"],[9,4,1,"","LINEAR_LAYER_continuous_diffusion_analysis"],[9,4,1,"","MIX_COLUMN_generalized_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis_two_words"],[9,4,1,"","MODSUB_continuous_diffusion_analysis"],[9,4,1,"","NOT_continuous_diffusion_analysis"],[9,4,1,"","OR_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_continuous_diffusion_analysis"],[9,4,1,"","SBOX_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_continuous_diffusion_analysis"],[9,4,1,"","SIGMA_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis_two_words"],[9,4,1,"","compute_sbox_precomputations"],[9,4,1,"","create_lookup_table_by_matrix"],[9,4,1,"","create_lookup_table_for_finite_field_element"],[9,4,1,"","extended_and_bit"],[9,4,1,"","extended_left_rotation_by_variable_amount"],[9,4,1,"","extended_left_shift_by_variable_amount"],[9,4,1,"","extended_not_bit"],[9,4,1,"","extended_one_left_rotation_iteration"],[9,4,1,"","extended_one_left_shift_iteration"],[9,4,1,"","extended_one_right_rotation_iteration"],[9,4,1,"","extended_one_right_shift_iteration"],[9,4,1,"","extended_right_rotation_by_variable_amount"],[9,4,1,"","extended_right_shift_by_variable_amount"],[9,4,1,"","extended_two_bit_multiplexer"],[9,4,1,"","get_mix_column_precomputations"],[9,4,1,"","get_sbox_precomputations"],[9,4,1,"","select_bits_continuous_diffusion_analysis"]],"cipher_modules.generic_functions_vectorized_bit":[[10,4,1,"","bit_vector_AND"],[10,4,1,"","bit_vector_CONCAT"],[10,4,1,"","bit_vector_MODADD"],[10,4,1,"","bit_vector_MODSUB"],[10,4,1,"","bit_vector_NOT"],[10,4,1,"","bit_vector_OR"],[10,4,1,"","bit_vector_ROTATE"],[10,4,1,"","bit_vector_SBOX"],[10,4,1,"","bit_vector_SHIFT"],[10,4,1,"","bit_vector_SHIFT_BY_VARIABLE_AMOUNT"],[10,4,1,"","bit_vector_XOR"],[10,4,1,"","bit_vector_linear_layer"],[10,4,1,"","bit_vector_mix_column"],[10,4,1,"","bit_vector_mix_column_poly0"],[10,4,1,"","bit_vector_print_as_hex_values"],[10,4,1,"","bit_vector_select_word"],[10,4,1,"","bit_vector_to_integer"],[10,4,1,"","print_component_info"]],"cipher_modules.generic_functions_vectorized_byte":[[11,4,1,"","byte_vector_AND"],[11,4,1,"","byte_vector_MODADD"],[11,4,1,"","byte_vector_MODSUB"],[11,4,1,"","byte_vector_NOT"],[11,4,1,"","byte_vector_OR"],[11,4,1,"","byte_vector_ROTATE"],[11,4,1,"","byte_vector_SBOX"],[11,4,1,"","byte_vector_SHIFT"],[11,4,1,"","byte_vector_SHIFT_BY_VARIABLE_AMOUNT"],[11,4,1,"","byte_vector_XOR"],[11,4,1,"","byte_vector_is_consecutive"],[11,4,1,"","byte_vector_linear_layer"],[11,4,1,"","byte_vector_mix_column"],[11,4,1,"","byte_vector_mix_column_poly0"],[11,4,1,"","byte_vector_print_as_hex_values"],[11,4,1,"","byte_vector_select_all_words"],[11,4,1,"","generate_formatted_inputs"],[11,4,1,"","print_component_info"]],"cipher_modules.graph_generator":[[13,4,1,"","create_networkx_graph_from_input_ids"],[13,4,1,"","split_cipher_graph_into_top_bottom"]],"cipher_modules.inverse_cipher":[[14,4,1,"","add_bit_to_bit_list"],[14,4,1,"","add_new_component_to_list"],[14,4,1,"","all_input_bits_available"],[14,4,1,"","all_output_bits_available"],[14,4,1,"","all_output_updated_bits_available"],[14,4,1,"","are_equal_components"],[14,4,1,"","are_there_enough_available_inputs_to_evaluate_component"],[14,4,1,"","are_there_enough_available_inputs_to_perform_inversion"],[14,4,1,"","are_these_bits_available"],[14,4,1,"","cipher_find_component"],[14,4,1,"","component_input_bits"],[14,4,1,"","component_inverse"],[14,4,1,"","component_output_bits"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_components"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_components"],[14,4,1,"","delete_orphan_links"],[14,4,1,"","equivalent_bits_in_common"],[14,4,1,"","evaluated_component"],[14,4,1,"","find_correct_order"],[14,4,1,"","find_correct_order_for_inversion"],[14,4,1,"","find_input_id_link_bits_equivalent"],[14,4,1,"","get_all_bit_names"],[14,4,1,"","get_all_components_with_the_same_input_id_link_and_input_bit_positions"],[14,4,1,"","get_all_equivalent_bits"],[14,4,1,"","get_available_output_components"],[14,4,1,"","get_cipher_components"],[14,4,1,"","get_component_from_id"],[14,4,1,"","get_equivalent_input_bit_from_output_bit"],[14,4,1,"","get_key_schedule_component_ids"],[14,4,1,"","get_most_recent_intermediate_output"],[14,4,1,"","get_output_components"],[14,4,1,"","get_relative_position"],[14,4,1,"","is_bit_adjacent_to_list_of_bits"],[14,4,1,"","is_bit_contained_in"],[14,4,1,"","is_intersection_of_input_id_links_null"],[14,4,1,"","is_output_bits_updated_equivalent_to_input_bits"],[14,4,1,"","is_possibly_invertible_component"],[14,4,1,"","order_input_id_links_for_modadd"],[14,4,1,"","remove_components_from_rounds"],[14,4,1,"","sort_cipher_graph"],[14,4,1,"","sort_input_id_links_and_input_bit_positions"],[14,4,1,"","topological_sort"],[14,4,1,"","update_available_bits_with_component_input_bits"],[14,4,1,"","update_available_bits_with_component_output_bits"],[14,4,1,"","update_input_links_from_rounds"],[14,4,1,"","update_output_bits"]],"cipher_modules.models":[[77,0,0,"-","utils"]],"cipher_modules.models.algebraic":[[15,0,0,"-","algebraic_model"],[16,0,0,"-","boolean_polynomial_ring"],[17,0,0,"-","constraints"]],"cipher_modules.models.algebraic.algebraic_model":[[15,1,1,"","AlgebraicModel"]],"cipher_modules.models.algebraic.algebraic_model.AlgebraicModel":[[15,2,1,"","connection_polynomials"],[15,2,1,"","connection_polynomials_at_round"],[15,2,1,"","is_algebraically_secure"],[15,2,1,"","nvars"],[15,2,1,"","polynomial_system"],[15,2,1,"","polynomial_system_at_round"],[15,2,1,"","ring"],[15,2,1,"","var_names"]],"cipher_modules.models.algebraic.boolean_polynomial_ring":[[16,4,1,"","is_boolean_polynomial_ring"]],"cipher_modules.models.algebraic.constraints":[[17,4,1,"","equality_polynomials"],[17,4,1,"","mod_addition_polynomials"],[17,4,1,"","mod_binary_operation_polynomials"],[17,4,1,"","mod_subtraction_polynomials"]],"cipher_modules.models.cp":[[19,0,0,"-","cp_model"]],"cipher_modules.models.cp.cp_model":[[19,1,1,"","CpModel"]],"cipher_modules.models.cp.cp_model.CpModel":[[19,2,1,"","add_solution_to_components_values"],[19,2,1,"","add_solutions_from_components_values"],[19,2,1,"","build_mix_column_truncated_table"],[19,2,1,"","calculate_bit_positions"],[19,2,1,"","calculate_bit_values"],[19,2,1,"","calculate_input_bit_positions"],[19,3,1,"","cipher"],[19,3,1,"","cipher_id"],[19,2,1,"","find_possible_number_of_active_sboxes"],[19,2,1,"","fix_variables_value_constraints"],[19,3,1,"","float_and_lat_values"],[19,2,1,"","format_component_value"],[19,2,1,"","get_command_for_solver_process"],[19,2,1,"","get_mix_column_all_inputs"],[19,2,1,"","get_total_weight"],[19,2,1,"","initialise_model"],[19,3,1,"","model_constraints"],[19,2,1,"","parse_solver_information"],[19,2,1,"","set_component_solution_value"],[19,2,1,"","solve"],[19,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models":[[20,0,0,"-","cp_cipher_model"],[21,0,0,"-","cp_deterministic_truncated_xor_differential_model"],[22,0,0,"-","cp_xor_differential_model"],[23,0,0,"-","cp_xor_differential_number_of_active_sboxes_model"],[24,0,0,"-","cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model"],[25,0,0,"-","cp_xor_linear_model"]],"cipher_modules.models.cp.cp_models.cp_cipher_model":[[20,1,1,"","CpCipherModel"]],"cipher_modules.models.cp.cp_models.cp_cipher_model.CpCipherModel":[[20,2,1,"","add_solution_to_components_values"],[20,2,1,"","add_solutions_from_components_values"],[20,2,1,"","build_cipher_model"],[20,2,1,"","build_mix_column_truncated_table"],[20,2,1,"","calculate_bit_positions"],[20,2,1,"","calculate_bit_values"],[20,2,1,"","calculate_input_bit_positions"],[20,3,1,"","cipher"],[20,3,1,"","cipher_id"],[20,2,1,"","final_constraints"],[20,2,1,"","find_possible_number_of_active_sboxes"],[20,2,1,"","fix_variables_value_constraints"],[20,3,1,"","float_and_lat_values"],[20,2,1,"","format_component_value"],[20,2,1,"","get_command_for_solver_process"],[20,2,1,"","get_mix_column_all_inputs"],[20,2,1,"","get_total_weight"],[20,2,1,"","initialise_model"],[20,2,1,"","input_constraints"],[20,3,1,"","model_constraints"],[20,2,1,"","parse_solver_information"],[20,2,1,"","set_component_solution_value"],[20,2,1,"","solve"],[20,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model":[[21,1,1,"","CpDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model.CpDeterministicTruncatedXorDifferentialModel":[[21,2,1,"","add_solution_to_components_values"],[21,2,1,"","add_solutions_from_components_values"],[21,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_inverse_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_mix_column_truncated_table"],[21,2,1,"","calculate_bit_positions"],[21,2,1,"","calculate_bit_values"],[21,2,1,"","calculate_input_bit_positions"],[21,3,1,"","cipher"],[21,3,1,"","cipher_id"],[21,2,1,"","final_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","final_impossible_constraints"],[21,2,1,"","find_all_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_one_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_possible_number_of_active_sboxes"],[21,2,1,"","fix_variables_value_constraints"],[21,3,1,"","float_and_lat_values"],[21,2,1,"","format_component_value"],[21,2,1,"","get_command_for_solver_process"],[21,2,1,"","get_mix_column_all_inputs"],[21,2,1,"","get_total_weight"],[21,2,1,"","initialise_model"],[21,2,1,"","input_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[21,3,1,"","model_constraints"],[21,2,1,"","output_constraints"],[21,2,1,"","output_inverse_constraints"],[21,2,1,"","parse_solver_information"],[21,2,1,"","set_component_solution_value"],[21,2,1,"","solve"],[21,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model":[[22,1,1,"","CpXorDifferentialModel"],[22,4,1,"","and_xor_differential_probability_ddt"],[22,4,1,"","update_and_or_ddt_valid_probabilities"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model.CpXorDifferentialModel":[[22,2,1,"","add_solution_to_components_values"],[22,2,1,"","add_solutions_from_components_values"],[22,2,1,"","build_mix_column_truncated_table"],[22,2,1,"","build_xor_differential_trail_model"],[22,2,1,"","build_xor_differential_trail_model_template"],[22,2,1,"","calculate_bit_positions"],[22,2,1,"","calculate_bit_values"],[22,2,1,"","calculate_input_bit_positions"],[22,3,1,"","cipher"],[22,3,1,"","cipher_id"],[22,2,1,"","final_xor_differential_constraints"],[22,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[22,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[22,2,1,"","find_differential_weight"],[22,2,1,"","find_lowest_weight_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[22,2,1,"","find_possible_number_of_active_sboxes"],[22,2,1,"","fix_variables_value_constraints"],[22,3,1,"","float_and_lat_values"],[22,2,1,"","format_component_value"],[22,2,1,"","get_command_for_solver_process"],[22,2,1,"","get_mix_column_all_inputs"],[22,2,1,"","get_total_weight"],[22,2,1,"","get_word_operation_xor_differential_constraints"],[22,2,1,"","initialise_model"],[22,2,1,"","input_xor_differential_constraints"],[22,3,1,"","model_constraints"],[22,2,1,"","parse_solver_information"],[22,2,1,"","set_component_solution_value"],[22,2,1,"","solve"],[22,2,1,"","update_sbox_ddt_valid_probabilities"],[22,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model":[[23,1,1,"","CpXorDifferentialNumberOfActiveSboxesModel"],[23,4,1,"","build_xor_truncated_table"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model.CpXorDifferentialNumberOfActiveSboxesModel":[[23,2,1,"","add_additional_xor_constraints"],[23,2,1,"","add_solution_to_components_values"],[23,2,1,"","add_solutions_from_components_values"],[23,2,1,"","build_mix_column_truncated_table"],[23,2,1,"","build_xor_differential_trail_first_step_model"],[23,2,1,"","calculate_bit_positions"],[23,2,1,"","calculate_bit_values"],[23,2,1,"","calculate_input_bit_positions"],[23,3,1,"","cipher"],[23,3,1,"","cipher_id"],[23,2,1,"","create_xor_component"],[23,2,1,"","final_xor_differential_first_step_constraints"],[23,2,1,"","find_possible_number_of_active_sboxes"],[23,2,1,"","fix_variables_value_constraints"],[23,3,1,"","float_and_lat_values"],[23,2,1,"","format_component_value"],[23,2,1,"","get_command_for_solver_process"],[23,2,1,"","get_mix_column_all_inputs"],[23,2,1,"","get_new_xor_input_links_and_positions"],[23,2,1,"","get_total_weight"],[23,2,1,"","get_xor_all_inputs"],[23,2,1,"","initialise_model"],[23,2,1,"","input_xor_differential_first_step_constraints"],[23,3,1,"","model_constraints"],[23,2,1,"","parse_solver_information"],[23,2,1,"","set_component_solution_value"],[23,2,1,"","solve"],[23,2,1,"","weight_constraints"],[23,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model":[[24,1,1,"","CpXorDifferentialFixingNumberOfActiveSboxesModel"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.CpXorDifferentialFixingNumberOfActiveSboxesModel":[[24,2,1,"","add_additional_xor_constraints"],[24,2,1,"","add_solution_to_components_values"],[24,2,1,"","add_solutions_from_components_values"],[24,2,1,"","build_mix_column_truncated_table"],[24,2,1,"","build_xor_differential_trail_first_step_model"],[24,2,1,"","build_xor_differential_trail_model"],[24,2,1,"","build_xor_differential_trail_model_template"],[24,2,1,"","build_xor_differential_trail_second_step_model"],[24,2,1,"","calculate_bit_positions"],[24,2,1,"","calculate_bit_values"],[24,2,1,"","calculate_input_bit_positions"],[24,3,1,"","cipher"],[24,3,1,"","cipher_id"],[24,2,1,"","create_xor_component"],[24,2,1,"","final_xor_differential_constraints"],[24,2,1,"","final_xor_differential_first_step_constraints"],[24,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[24,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[24,2,1,"","find_differential_weight"],[24,2,1,"","find_lowest_weight_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[24,2,1,"","find_possible_number_of_active_sboxes"],[24,2,1,"","fix_variables_value_constraints"],[24,3,1,"","float_and_lat_values"],[24,2,1,"","format_component_value"],[24,2,1,"","generate_table_of_solutions"],[24,2,1,"","get_command_for_solver_process"],[24,2,1,"","get_mix_column_all_inputs"],[24,2,1,"","get_new_xor_input_links_and_positions"],[24,2,1,"","get_solutions_dictionaries_with_build_time"],[24,2,1,"","get_total_weight"],[24,2,1,"","get_word_operation_xor_differential_constraints"],[24,2,1,"","get_xor_all_inputs"],[24,2,1,"","initialise_model"],[24,2,1,"","input_xor_differential_constraints"],[24,2,1,"","input_xor_differential_first_step_constraints"],[24,3,1,"","model_constraints"],[24,2,1,"","parse_solver_information"],[24,2,1,"","set_component_solution_value"],[24,2,1,"","solve"],[24,2,1,"","solve_full_two_steps_xor_differential_model"],[24,2,1,"","solve_model"],[24,2,1,"","transform_first_step_model"],[24,2,1,"","update_sbox_ddt_valid_probabilities"],[24,2,1,"","weight_constraints"],[24,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model":[[25,1,1,"","CpXorLinearModel"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model.CpXorLinearModel":[[25,2,1,"","add_solution_to_components_values"],[25,2,1,"","add_solutions_from_components_values"],[25,2,1,"","and_xor_linear_probability_lat"],[25,2,1,"","branch_xor_linear_constraints"],[25,2,1,"","build_mix_column_truncated_table"],[25,2,1,"","build_xor_linear_trail_model"],[25,2,1,"","calculate_bit_positions"],[25,2,1,"","calculate_bit_values"],[25,2,1,"","calculate_input_bit_positions"],[25,3,1,"","cipher"],[25,3,1,"","cipher_id"],[25,2,1,"","final_xor_linear_constraints"],[25,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[25,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[25,2,1,"","find_lowest_weight_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[25,2,1,"","find_possible_number_of_active_sboxes"],[25,2,1,"","fix_variables_value_constraints"],[25,2,1,"","fix_variables_value_xor_linear_constraints"],[25,3,1,"","float_and_lat_values"],[25,2,1,"","format_component_value"],[25,2,1,"","get_command_for_solver_process"],[25,2,1,"","get_lat_values"],[25,2,1,"","get_mix_column_all_inputs"],[25,2,1,"","get_total_weight"],[25,2,1,"","get_word_operation_final_xor_linear_constraints"],[25,2,1,"","initialise_model"],[25,2,1,"","input_xor_linear_constraints"],[25,3,1,"","model_constraints"],[25,2,1,"","parse_solver_information"],[25,2,1,"","set_component_solution_value"],[25,2,1,"","solve"],[25,2,1,"","update_and_or_lat_valid_probabilities"],[25,2,1,"","update_sbox_lat_valid_probabilities"],[25,2,1,"","weight_constraints"],[25,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp":[[26,0,0,"-","milp_model"]],"cipher_modules.models.milp.milp_model":[[26,1,1,"","MilpModel"],[26,4,1,"","get_independent_input_output_variables"],[26,4,1,"","get_input_output_variables"],[26,4,1,"","verbose_print"]],"cipher_modules.models.milp.milp_model.MilpModel":[[26,3,1,"","binary_variable"],[26,3,1,"","cipher"],[26,3,1,"","cipher_id"],[26,2,1,"","fix_variables_value_constraints"],[26,2,1,"","init_model_in_sage_milp_class"],[26,3,1,"","integer_variable"],[26,3,1,"","intermediate_output_names"],[26,3,1,"","model"],[26,3,1,"","model_constraints"],[26,3,1,"","non_linear_component_id"],[26,2,1,"","solve"],[26,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models":[[27,0,0,"-","milp_bitwise_deterministic_truncated_xor_differential_model"],[28,0,0,"-","milp_bitwise_impossible_xor_differential_model"],[29,0,0,"-","milp_cipher_model"],[30,0,0,"-","milp_wordwise_deterministic_truncated_xor_differential_model"],[31,0,0,"-","milp_wordwise_impossible_xor_differential_model"],[32,0,0,"-","milp_xor_differential_model"],[33,0,0,"-","milp_xor_linear_model"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model":[[27,1,1,"","MilpBitwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model.MilpBitwiseDeterministicTruncatedXorDifferentialModel":[[27,2,1,"","add_constraints_to_build_in_sage_milp_class"],[27,3,1,"","binary_variable"],[27,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[27,3,1,"","cipher"],[27,3,1,"","cipher_id"],[27,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[27,2,1,"","fix_variables_value_constraints"],[27,2,1,"","init_model_in_sage_milp_class"],[27,3,1,"","integer_variable"],[27,3,1,"","intermediate_output_names"],[27,2,1,"","link_binary_tuples_to_integer_variables"],[27,3,1,"","model"],[27,3,1,"","model_constraints"],[27,3,1,"","non_linear_component_id"],[27,2,1,"","solve"],[27,3,1,"","trunc_binvar"],[27,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model":[[28,1,1,"","MilpBitwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model.MilpBitwiseImpossibleXorDifferentialModel":[[28,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[28,3,1,"","binary_variable"],[28,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[28,2,1,"","build_bitwise_impossible_xor_differential_trail_model"],[28,3,1,"","cipher"],[28,3,1,"","cipher_id"],[28,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fixed_component"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model"],[28,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[28,2,1,"","fix_variables_value_constraints"],[28,2,1,"","init_model_in_sage_milp_class"],[28,3,1,"","integer_variable"],[28,3,1,"","intermediate_output_names"],[28,2,1,"","link_binary_tuples_to_integer_variables"],[28,3,1,"","model"],[28,3,1,"","model_constraints"],[28,3,1,"","non_linear_component_id"],[28,2,1,"","solve"],[28,3,1,"","trunc_binvar"],[28,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_cipher_model":[[29,1,1,"","MilpCipherModel"]],"cipher_modules.models.milp.milp_models.milp_cipher_model.MilpCipherModel":[[29,3,1,"","binary_variable"],[29,2,1,"","build_cipher_model"],[29,3,1,"","cipher"],[29,3,1,"","cipher_id"],[29,2,1,"","fix_variables_value_constraints"],[29,2,1,"","init_model_in_sage_milp_class"],[29,3,1,"","integer_variable"],[29,3,1,"","intermediate_output_names"],[29,3,1,"","model"],[29,3,1,"","model_constraints"],[29,3,1,"","non_linear_component_id"],[29,2,1,"","solve"],[29,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model":[[30,1,1,"","MilpWordwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model.MilpWordwiseDeterministicTruncatedXorDifferentialModel":[[30,2,1,"","add_constraints_to_build_in_sage_milp_class"],[30,3,1,"","binary_variable"],[30,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[30,3,1,"","cipher"],[30,3,1,"","cipher_id"],[30,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","fix_variables_value_constraints"],[30,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[30,2,1,"","init_model_in_sage_milp_class"],[30,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[30,3,1,"","integer_variable"],[30,3,1,"","intermediate_output_names"],[30,3,1,"","model"],[30,3,1,"","model_constraints"],[30,3,1,"","non_linear_component_id"],[30,2,1,"","solve"],[30,3,1,"","trunc_wordvar"],[30,2,1,"","weight_constraints"],[30,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model":[[31,1,1,"","MilpWordwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model.MilpWordwiseImpossibleXorDifferentialModel":[[31,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[31,3,1,"","binary_variable"],[31,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[31,2,1,"","build_wordwise_impossible_xor_differential_trail_model"],[31,3,1,"","cipher"],[31,3,1,"","cipher_id"],[31,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fixed_component"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model"],[31,2,1,"","fix_variables_value_constraints"],[31,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[31,2,1,"","init_model_in_sage_milp_class"],[31,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[31,3,1,"","integer_variable"],[31,3,1,"","intermediate_output_names"],[31,3,1,"","model"],[31,3,1,"","model_constraints"],[31,3,1,"","non_linear_component_id"],[31,2,1,"","solve"],[31,3,1,"","trunc_wordvar"],[31,2,1,"","weight_constraints"],[31,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model":[[32,1,1,"","MilpXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model.MilpXorDifferentialModel":[[32,2,1,"","add_constraints_to_build_in_sage_milp_class"],[32,3,1,"","binary_variable"],[32,2,1,"","build_xor_differential_trail_model"],[32,3,1,"","cipher"],[32,3,1,"","cipher_id"],[32,2,1,"","exclude_variables_value_constraints"],[32,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[32,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","find_lowest_weight_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[32,2,1,"","fix_variables_value_constraints"],[32,2,1,"","get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","init_model_in_sage_milp_class"],[32,3,1,"","integer_variable"],[32,3,1,"","intermediate_output_names"],[32,2,1,"","is_single_key"],[32,3,1,"","model"],[32,3,1,"","model_constraints"],[32,3,1,"","non_linear_component_id"],[32,2,1,"","solve"],[32,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model":[[33,1,1,"","MilpXorLinearModel"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model.MilpXorLinearModel":[[33,2,1,"","add_constraints_to_build_in_sage_milp_class"],[33,3,1,"","binary_variable"],[33,2,1,"","branch_xor_linear_constraints"],[33,2,1,"","build_xor_linear_trail_model"],[33,3,1,"","cipher"],[33,3,1,"","cipher_id"],[33,2,1,"","exclude_variables_value_xor_linear_constraints"],[33,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[33,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","find_lowest_weight_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[33,2,1,"","fix_variables_value_constraints"],[33,2,1,"","fix_variables_value_xor_linear_constraints"],[33,2,1,"","get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","init_model_in_sage_milp_class"],[33,3,1,"","integer_variable"],[33,3,1,"","intermediate_output_names"],[33,3,1,"","model"],[33,3,1,"","model_constraints"],[33,3,1,"","non_linear_component_id"],[33,2,1,"","solve"],[33,2,1,"","update_xor_linear_constraints_for_more_than_two_bits"],[33,2,1,"","weight_constraints"],[33,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp.utils":[[35,0,0,"-","config"],[45,0,0,"-","generate_inequalities_for_and_operation_2_input_bits"],[46,0,0,"-","generate_inequalities_for_large_sboxes"],[47,0,0,"-","generate_inequalities_for_wordwise_truncated_mds_matrices"],[48,0,0,"-","generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits"],[49,0,0,"-","generate_inequalities_for_xor_with_n_input_bits"],[50,0,0,"-","generate_sbox_inequalities_for_trail_search"],[51,0,0,"-","generate_undisturbed_bits_inequalities_for_sboxes"],[52,0,0,"-","milp_name_mappings"],[53,0,0,"-","mzn_predicates"],[54,0,0,"-","utils"]],"cipher_modules.models.milp.utils.generate_inequalities_for_and_operation_2_input_bits":[[45,4,1,"","and_LAT"],[45,4,1,"","and_inequalities"],[45,4,1,"","convex_hull"],[45,4,1,"","cutting_off_greedy"],[45,4,1,"","cutting_off_milp"]],"cipher_modules.models.milp.utils.generate_inequalities_for_large_sboxes":[[46,4,1,"","delete_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","generate_espresso_input"],[46,4,1,"","generate_product_of_sum_from_espresso"],[46,4,1,"","get_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","update_dictionary_that_contains_inequalities_for_large_sboxes"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_mds_matrices":[[47,4,1,"","delete_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","generate_valid_points_for_truncated_mds_matrix"],[47,4,1,"","output_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","update_dictionary_that_contains_wordwise_truncated_mds_inequalities"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits":[[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","generate_valid_points_for_xor_between_n_input_words"],[48,4,1,"","generate_valid_points_input_words"],[48,4,1,"","get_valid_points_for_wordwise_xor"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_inputs"],[48,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix"]],"cipher_modules.models.milp.utils.generate_inequalities_for_xor_with_n_input_bits":[[49,4,1,"","delete_dictionary_that_contains_xor_inequalities"],[49,4,1,"","generate_all_possible_points_with_n_bits"],[49,4,1,"","generate_impossible_points_for_xor_between_n_input_bits"],[49,4,1,"","output_dictionary_that_contains_xor_inequalities"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_between_n_input_bits"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_matrix"]],"cipher_modules.models.milp.utils.generate_sbox_inequalities_for_trail_search":[[50,4,1,"","convex_hull"],[50,4,1,"","cutting_off_greedy"],[50,4,1,"","cutting_off_milp"],[50,4,1,"","delete_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","get_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","sbox_inequalities"],[50,4,1,"","to_bits"],[50,4,1,"","update_dictionary_that_contains_inequalities_for_small_sboxes"]],"cipher_modules.models.milp.utils.generate_undisturbed_bits_inequalities_for_sboxes":[[51,4,1,"","delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","generate_dict_product_of_sum_from_espresso"],[51,4,1,"","get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","get_transitions_for_single_output_bit"],[51,4,1,"","update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"]],"cipher_modules.models.milp.utils.mzn_predicates":[[53,4,1,"","get_word_operations"]],"cipher_modules.models.milp.utils.utils":[[54,4,1,"","delete_espresso_dictionary"],[54,4,1,"","espresso_pos_to_constraints"],[54,4,1,"","fix_variables_value_deterministic_truncated_xor_differential_constraints"],[54,4,1,"","generate_espresso_input"],[54,4,1,"","generate_product_of_sum_from_espresso"],[54,4,1,"","milp_and"],[54,4,1,"","milp_else"],[54,4,1,"","milp_eq"],[54,4,1,"","milp_generalized_and"],[54,4,1,"","milp_generalized_xor"],[54,4,1,"","milp_geq"],[54,4,1,"","milp_greater"],[54,4,1,"","milp_if_elif_else"],[54,4,1,"","milp_if_then"],[54,4,1,"","milp_if_then_else"],[54,4,1,"","milp_leq"],[54,4,1,"","milp_less"],[54,4,1,"","milp_neq"],[54,4,1,"","milp_or"],[54,4,1,"","milp_xor"],[54,4,1,"","milp_xor_truncated"],[54,4,1,"","milp_xor_truncated_wordwise"],[54,4,1,"","output_espresso_dictionary"]],"cipher_modules.models.minizinc":[[55,0,0,"-","minizinc_model"]],"cipher_modules.models.minizinc.minizinc_model":[[55,1,1,"","MinizincModel"]],"cipher_modules.models.minizinc.minizinc_model.MinizincModel":[[55,2,1,"","add_comment"],[55,2,1,"","add_constraint_from_str"],[55,2,1,"","add_output_comment"],[55,3,1,"","cipher"],[55,3,1,"","cipher_id"],[55,2,1,"","fix_variables_value_constraints"],[55,3,1,"","model_constraints"],[55,2,1,"","output_probability_per_round"],[55,2,1,"","solve"],[55,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models":[[56,0,0,"-","minizinc_cipher_model"],[57,0,0,"-","minizinc_deterministic_truncated_xor_differential_model"],[58,0,0,"-","minizinc_xor_differential_model"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model":[[56,1,1,"","MinizincCipherModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model.MinizincCipherModel":[[56,2,1,"","add_comment"],[56,2,1,"","add_constraint_from_str"],[56,2,1,"","add_output_comment"],[56,2,1,"","build_cipher_model"],[56,3,1,"","cipher"],[56,3,1,"","cipher_id"],[56,2,1,"","fix_variables_value_constraints"],[56,3,1,"","model_constraints"],[56,2,1,"","output_probability_per_round"],[56,2,1,"","solve"],[56,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model":[[57,1,1,"","MinizincDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model.MinizincDeterministicTruncatedXorDifferentialModel":[[57,2,1,"","add_comment"],[57,2,1,"","add_constraint_from_str"],[57,2,1,"","add_output_comment"],[57,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[57,3,1,"","cipher"],[57,3,1,"","cipher_id"],[57,2,1,"","fix_variables_value_constraints"],[57,3,1,"","model_constraints"],[57,2,1,"","output_probability_per_round"],[57,2,1,"","solve"],[57,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model":[[58,1,1,"","MinizincXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model.MinizincXorDifferentialModel":[[58,2,1,"","add_comment"],[58,2,1,"","add_constraint_from_str"],[58,2,1,"","add_output_comment"],[58,2,1,"","build_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","build_lowest_weight_xor_differential_trail_model"],[58,2,1,"","build_lowest_xor_differential_trails_with_at_most_weight"],[58,2,1,"","build_xor_differential_trail_model"],[58,3,1,"","cipher"],[58,3,1,"","cipher_id"],[58,2,1,"","connect_rounds"],[58,2,1,"","constraint_permutation_and_key_schedule_separately_by_input_sizes"],[58,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[58,2,1,"","find_lowest_weight_xor_differential_trail"],[58,2,1,"","find_min_of_max_xor_differential_between_permutation_and_key_schedule"],[58,2,1,"","fix_variables_value_constraints"],[58,2,1,"","get_probability_vars_from_key_schedule"],[58,2,1,"","get_probability_vars_from_permutation"],[58,2,1,"","init_constraints"],[58,3,1,"","model_constraints"],[58,2,1,"","objective_generator"],[58,2,1,"","output_probability_per_round"],[58,2,1,"","parse_probability_vars"],[58,2,1,"","satisfy_generator"],[58,2,1,"","set_max_number_of_carries_on_arx_cipher"],[58,2,1,"","set_max_number_of_nonlinear_carries"],[58,2,1,"","solve"],[58,2,1,"","weight_constraints"],[58,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.sat":[[63,0,0,"-","sat_model"]],"cipher_modules.models.sat.cms_models":[[59,0,0,"-","cms_cipher_model"],[60,0,0,"-","cms_deterministic_truncated_xor_differential_model"],[61,0,0,"-","cms_xor_differential_model"],[62,0,0,"-","cms_xor_linear_model"]],"cipher_modules.models.sat.cms_models.cms_cipher_model":[[59,1,1,"","CmsSatCipherModel"]],"cipher_modules.models.sat.cms_models.cms_cipher_model.CmsSatCipherModel":[[59,2,1,"","build_cipher_model"],[59,2,1,"","calculate_component_weight"],[59,3,1,"","cipher_id"],[59,2,1,"","find_missing_bits"],[59,2,1,"","fix_variables_value_constraints"],[59,3,1,"","model_constraints"],[59,3,1,"","sboxes_ddt_templates"],[59,3,1,"","sboxes_lat_templates"],[59,2,1,"","solve"],[59,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model":[[60,1,1,"","CmsSatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model.CmsSatDeterministicTruncatedXorDifferentialModel":[[60,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[60,2,1,"","calculate_component_weight"],[60,3,1,"","cipher_id"],[60,2,1,"","fix_variables_value_constraints"],[60,3,1,"","model_constraints"],[60,3,1,"","sboxes_ddt_templates"],[60,3,1,"","sboxes_lat_templates"],[60,2,1,"","solve"],[60,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model":[[61,1,1,"","CmsSatXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model.CmsSatXorDifferentialModel":[[61,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[61,2,1,"","build_xor_differential_trail_model"],[61,2,1,"","calculate_component_weight"],[61,3,1,"","cipher_id"],[61,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[61,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[61,2,1,"","find_lowest_weight_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[61,2,1,"","fix_variables_value_constraints"],[61,3,1,"","model_constraints"],[61,3,1,"","sboxes_ddt_templates"],[61,3,1,"","sboxes_lat_templates"],[61,2,1,"","solve"],[61,2,1,"","weight_constraints"],[61,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model":[[62,1,1,"","CmsSatXorLinearModel"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model.CmsSatXorLinearModel":[[62,2,1,"","branch_xor_linear_constraints"],[62,2,1,"","build_xor_linear_trail_model"],[62,2,1,"","calculate_component_weight"],[62,3,1,"","cipher_id"],[62,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[62,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[62,2,1,"","find_lowest_weight_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[62,2,1,"","fix_variables_value_constraints"],[62,2,1,"","fix_variables_value_xor_linear_constraints"],[62,3,1,"","model_constraints"],[62,3,1,"","sboxes_ddt_templates"],[62,3,1,"","sboxes_lat_templates"],[62,2,1,"","solve"],[62,2,1,"","weight_constraints"],[62,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.sat_model":[[63,1,1,"","SatModel"]],"cipher_modules.models.sat.sat_model.SatModel":[[63,2,1,"","calculate_component_weight"],[63,3,1,"","cipher_id"],[63,2,1,"","fix_variables_value_constraints"],[63,3,1,"","model_constraints"],[63,3,1,"","sboxes_ddt_templates"],[63,3,1,"","sboxes_lat_templates"],[63,2,1,"","solve"],[63,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models":[[64,0,0,"-","sat_cipher_model"],[65,0,0,"-","sat_deterministic_truncated_xor_differential_model"],[66,0,0,"-","sat_xor_differential_model"],[67,0,0,"-","sat_xor_linear_model"]],"cipher_modules.models.sat.sat_models.sat_cipher_model":[[64,1,1,"","SatCipherModel"]],"cipher_modules.models.sat.sat_models.sat_cipher_model.SatCipherModel":[[64,2,1,"","build_cipher_model"],[64,2,1,"","calculate_component_weight"],[64,3,1,"","cipher_id"],[64,2,1,"","find_missing_bits"],[64,2,1,"","fix_variables_value_constraints"],[64,3,1,"","model_constraints"],[64,3,1,"","sboxes_ddt_templates"],[64,3,1,"","sboxes_lat_templates"],[64,2,1,"","solve"],[64,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model":[[65,1,1,"","SatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model.SatDeterministicTruncatedXorDifferentialModel":[[65,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[65,2,1,"","calculate_component_weight"],[65,3,1,"","cipher_id"],[65,2,1,"","fix_variables_value_constraints"],[65,3,1,"","model_constraints"],[65,3,1,"","sboxes_ddt_templates"],[65,3,1,"","sboxes_lat_templates"],[65,2,1,"","solve"],[65,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model":[[66,1,1,"","SatXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model.SatXorDifferentialModel":[[66,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[66,2,1,"","build_xor_differential_trail_model"],[66,2,1,"","calculate_component_weight"],[66,3,1,"","cipher_id"],[66,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[66,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[66,2,1,"","find_lowest_weight_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[66,2,1,"","fix_variables_value_constraints"],[66,3,1,"","model_constraints"],[66,3,1,"","sboxes_ddt_templates"],[66,3,1,"","sboxes_lat_templates"],[66,2,1,"","solve"],[66,2,1,"","weight_constraints"],[66,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model":[[67,1,1,"","SatXorLinearModel"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model.SatXorLinearModel":[[67,2,1,"","branch_xor_linear_constraints"],[67,2,1,"","build_xor_linear_trail_model"],[67,2,1,"","calculate_component_weight"],[67,3,1,"","cipher_id"],[67,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[67,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[67,2,1,"","find_lowest_weight_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[67,2,1,"","fix_variables_value_constraints"],[67,2,1,"","fix_variables_value_xor_linear_constraints"],[67,3,1,"","model_constraints"],[67,3,1,"","sboxes_ddt_templates"],[67,3,1,"","sboxes_lat_templates"],[67,2,1,"","solve"],[67,2,1,"","weight_constraints"],[67,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.utils":[[68,0,0,"-","mzn_predicates"],[69,0,0,"-","n_window_heuristic_helper"],[70,0,0,"-","utils"]],"cipher_modules.models.sat.utils.mzn_predicates":[[68,4,1,"","get_word_operations"]],"cipher_modules.models.sat.utils.n_window_heuristic_helper":[[69,4,1,"","window_size_0_cnf"],[69,4,1,"","window_size_1_cnf"],[69,4,1,"","window_size_2_cnf"],[69,4,1,"","window_size_3_cnf"],[69,4,1,"","window_size_4_cnf"],[69,4,1,"","window_size_5_cnf"]],"cipher_modules.models.sat.utils.utils":[[70,4,1,"","cms_add_clauses_to_solver"],[70,4,1,"","cnf_and"],[70,4,1,"","cnf_and_differential"],[70,4,1,"","cnf_and_linear"],[70,4,1,"","cnf_and_seq"],[70,4,1,"","cnf_carry"],[70,4,1,"","cnf_carry_comp2"],[70,4,1,"","cnf_equivalent"],[70,4,1,"","cnf_hw_lipmaa"],[70,4,1,"","cnf_inequality"],[70,4,1,"","cnf_lipmaa"],[70,4,1,"","cnf_modadd_inequality"],[70,4,1,"","cnf_n_window_heuristic_on_w_vars"],[70,4,1,"","cnf_or"],[70,4,1,"","cnf_or_seq"],[70,4,1,"","cnf_result_comp2"],[70,4,1,"","cnf_vshift_false"],[70,4,1,"","cnf_vshift_id"],[70,4,1,"","cnf_xor"],[70,4,1,"","cnf_xor_seq"],[70,4,1,"","create_numerical_cnf"],[70,4,1,"","numerical_cnf_to_dimacs"],[70,4,1,"","run_minisat"],[70,4,1,"","run_parkissat"],[70,4,1,"","run_sat_solver"],[70,4,1,"","run_yices"]],"cipher_modules.models.smt":[[71,0,0,"-","smt_model"]],"cipher_modules.models.smt.smt_model":[[71,1,1,"","SmtModel"],[71,4,1,"","mathsat_parser"],[71,4,1,"","yices_parser"],[71,4,1,"","z3_parser"]],"cipher_modules.models.smt.smt_model.SmtModel":[[71,2,1,"","calculate_component_weight"],[71,3,1,"","cipher_id"],[71,2,1,"","cipher_input_variables"],[71,2,1,"","fix_variables_value_constraints"],[71,2,1,"","get_xor_probability_constraints"],[71,3,1,"","model_constraints"],[71,3,1,"","sboxes_ddt_templates"],[71,3,1,"","sboxes_lat_templates"],[71,2,1,"","solve"],[71,2,1,"","update_constraints_for_equal_type"],[71,2,1,"","update_constraints_for_not_equal_type"],[71,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models":[[72,0,0,"-","smt_cipher_model"],[73,0,0,"-","smt_deterministic_truncated_xor_differential_model"],[74,0,0,"-","smt_xor_differential_model"],[75,0,0,"-","smt_xor_linear_model"]],"cipher_modules.models.smt.smt_models.smt_cipher_model":[[72,1,1,"","SmtCipherModel"]],"cipher_modules.models.smt.smt_models.smt_cipher_model.SmtCipherModel":[[72,2,1,"","build_cipher_model"],[72,2,1,"","calculate_component_weight"],[72,3,1,"","cipher_id"],[72,2,1,"","cipher_input_variables"],[72,2,1,"","find_missing_bits"],[72,2,1,"","fix_variables_value_constraints"],[72,2,1,"","get_xor_probability_constraints"],[72,3,1,"","model_constraints"],[72,3,1,"","sboxes_ddt_templates"],[72,3,1,"","sboxes_lat_templates"],[72,2,1,"","solve"],[72,2,1,"","update_constraints_for_equal_type"],[72,2,1,"","update_constraints_for_not_equal_type"],[72,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model":[[73,1,1,"","SmtDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model.SmtDeterministicTruncatedXorDifferentialModel":[[73,2,1,"","calculate_component_weight"],[73,3,1,"","cipher_id"],[73,2,1,"","cipher_input_variables"],[73,2,1,"","fix_variables_value_constraints"],[73,2,1,"","get_xor_probability_constraints"],[73,3,1,"","model_constraints"],[73,3,1,"","sboxes_ddt_templates"],[73,3,1,"","sboxes_lat_templates"],[73,2,1,"","solve"],[73,2,1,"","update_constraints_for_equal_type"],[73,2,1,"","update_constraints_for_not_equal_type"],[73,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model":[[74,1,1,"","SmtXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model.SmtXorDifferentialModel":[[74,2,1,"","build_xor_differential_trail_model"],[74,2,1,"","calculate_component_weight"],[74,3,1,"","cipher_id"],[74,2,1,"","cipher_input_variables"],[74,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[74,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[74,2,1,"","find_lowest_weight_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[74,2,1,"","fix_variables_value_constraints"],[74,2,1,"","get_operands"],[74,2,1,"","get_xor_probability_constraints"],[74,3,1,"","model_constraints"],[74,3,1,"","sboxes_ddt_templates"],[74,3,1,"","sboxes_lat_templates"],[74,2,1,"","solve"],[74,2,1,"","update_constraints_for_equal_type"],[74,2,1,"","update_constraints_for_not_equal_type"],[74,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model":[[75,1,1,"","SmtXorLinearModel"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model.SmtXorLinearModel":[[75,2,1,"","branch_xor_linear_constraints"],[75,2,1,"","build_xor_linear_trail_model"],[75,2,1,"","calculate_component_weight"],[75,3,1,"","cipher_id"],[75,2,1,"","cipher_input_variables"],[75,2,1,"","cipher_input_xor_linear_variables"],[75,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[75,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[75,2,1,"","find_lowest_weight_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[75,2,1,"","fix_variables_value_constraints"],[75,2,1,"","fix_variables_value_xor_linear_constraints"],[75,2,1,"","get_xor_probability_constraints"],[75,3,1,"","model_constraints"],[75,3,1,"","sboxes_ddt_templates"],[75,3,1,"","sboxes_lat_templates"],[75,2,1,"","solve"],[75,2,1,"","update_constraints_for_equal_type"],[75,2,1,"","update_constraints_for_not_equal_type"],[75,2,1,"","weight_constraints"],[75,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.smt.utils":[[76,0,0,"-","utils"]],"cipher_modules.models.smt.utils.utils":[[76,4,1,"","get_component_hex_value"],[76,4,1,"","smt_and"],[76,4,1,"","smt_assert"],[76,4,1,"","smt_carry"],[76,4,1,"","smt_distinct"],[76,4,1,"","smt_equivalent"],[76,4,1,"","smt_implies"],[76,4,1,"","smt_ite"],[76,4,1,"","smt_lipmaa"],[76,4,1,"","smt_not"],[76,4,1,"","smt_or"],[76,4,1,"","smt_xor"]],"cipher_modules.models.utils":[[77,4,1,"","add_arcs"],[77,4,1,"","convert_solver_solution_to_dictionary"],[77,4,1,"","create_directory"],[77,4,1,"","find_sign_for_one_xor_linear_trail"],[77,4,1,"","find_sign_for_xor_linear_trails"],[77,4,1,"","get_bit_bindings"],[77,4,1,"","get_library_path"],[77,4,1,"","get_previous_output_bit_ids"],[77,4,1,"","get_related_key_scenario_format_for_fixed_values"],[77,4,1,"","get_single_key_scenario_format_for_fixed_values"],[77,4,1,"","integer_to_bit_list"],[77,4,1,"","print_components_values"],[77,4,1,"","set_component_solution"],[77,4,1,"","set_component_value_weight_sign"],[77,4,1,"","set_fixed_variables"],[77,4,1,"","to_bias_for_correlation_measure"],[77,4,1,"","to_bias_for_probability_measure"],[77,4,1,"","to_bias_for_xor_linear_trail"],[77,4,1,"","to_correlation_for_bias_measure"],[77,4,1,"","to_correlation_for_probability_measure"],[77,4,1,"","to_correlation_for_xor_linear_trail"],[77,4,1,"","to_probability_for_bias_measure"],[77,4,1,"","to_probability_for_correlation_measure"],[77,4,1,"","to_probability_for_xor_linear_trail"],[77,4,1,"","write_model_to_file"],[77,4,1,"","write_solution_into_a_file"],[77,4,1,"","write_solution_to_file"]],"cipher_modules.statistical_tests":[[79,0,0,"-","dataset_generator"],[80,0,0,"-","dieharder_statistical_tests"],[82,0,0,"-","nist_statistical_tests"]],"cipher_modules.statistical_tests.dataset_generator":[[79,1,1,"","DatasetGenerator"],[79,1,1,"","DatasetType"],[79,4,1,"","get_low_density_sequences"],[79,4,1,"","set_testing_data_amount"]],"cipher_modules.statistical_tests.dataset_generator.DatasetGenerator":[[79,2,1,"","generate_avalanche_dataset"],[79,2,1,"","generate_cbc_dataset"],[79,2,1,"","generate_correlation_dataset"],[79,2,1,"","generate_high_density_dataset"],[79,2,1,"","generate_low_density_dataset"],[79,2,1,"","generate_random_dataset"],[79,2,1,"","get_cipher_outputs_for_cbc_dataset"],[79,2,1,"","get_cipher_outputs_for_correlation_dataset"],[79,2,1,"","get_cipher_outputs_for_density_dataset"]],"cipher_modules.statistical_tests.dataset_generator.DatasetType":[[79,5,1,"","avalanche"],[79,5,1,"","cbc"],[79,5,1,"","correlation"],[79,5,1,"","high_density"],[79,5,1,"","low_density"],[79,5,1,"","random"]],"cipher_modules.statistical_tests.dieharder_statistical_tests":[[80,1,1,"","DieharderTests"]],"cipher_modules.statistical_tests.dieharder_statistical_tests.DieharderTests":[[80,2,1,"","generate_chart_all"],[80,2,1,"","generate_chart_round"],[80,2,1,"","parse_report"],[80,2,1,"","run_CBC_dieharder_statistics_test"],[80,2,1,"","run_avalanche_dieharder_statistics_test"],[80,2,1,"","run_correlation_dieharder_statistics_test"],[80,2,1,"","run_dieharder_statistical_tests_tool_interactively"],[80,2,1,"","run_high_density_dieharder_statistics_test"],[80,2,1,"","run_low_density_dieharder_statistics_test"],[80,2,1,"","run_random_dieharder_statistics_test"]],"cipher_modules.statistical_tests.nist_statistical_tests":[[82,1,1,"","StatisticalTests"]],"cipher_modules.statistical_tests.nist_statistical_tests.StatisticalTests":[[82,2,1,"","generate_chart_all"],[82,2,1,"","generate_chart_for_all_rounds"],[82,2,1,"","generate_chart_round"],[82,2,1,"","parse_report"],[82,2,1,"","run_CBC_nist_statistics_test"],[82,2,1,"","run_avalanche_nist_statistics_test"],[82,2,1,"","run_correlation_nist_statistics_test"],[82,2,1,"","run_high_density_nist_statistics_test"],[82,2,1,"","run_low_density_nist_statistics_test"],[82,2,1,"","run_nist_statistical_tests_tool_interactively"],[82,2,1,"","run_random_nist_statistics_test"]],"cipher_modules.tester":[[83,4,1,"","test_against_reference_code"],[83,4,1,"","test_vector_check"]],"ciphers.block_ciphers":[[84,0,0,"-","aes_block_cipher"],[85,0,0,"-","bea1_block_cipher"],[86,0,0,"-","constant_block_cipher"],[87,0,0,"-","des_block_cipher"],[88,0,0,"-","des_exact_key_length_block_cipher"],[89,0,0,"-","fancy_block_cipher"],[90,0,0,"-","hight_block_cipher"],[91,0,0,"-","identity_block_cipher"],[92,0,0,"-","kasumi_block_cipher"],[93,0,0,"-","lblock_block_cipher"],[94,0,0,"-","lea_block_cipher"],[95,0,0,"-","lowmc_block_cipher"],[96,0,0,"-","lowmc_generate_matrices"],[97,0,0,"-","midori_block_cipher"],[98,0,0,"-","present_block_cipher"],[99,0,0,"-","qarmav2_block_cipher"],[100,0,0,"-","raiden_block_cipher"],[101,0,0,"-","rc5_block_cipher"],[102,0,0,"-","simon_block_cipher"],[103,0,0,"-","skinny_block_cipher"],[104,0,0,"-","sparx_block_cipher"],[105,0,0,"-","speck_block_cipher"],[106,0,0,"-","tea_block_cipher"],[107,0,0,"-","threefish_block_cipher"],[108,0,0,"-","twofish_block_cipher"],[109,0,0,"-","xtea_block_cipher"]],"ciphers.block_ciphers.aes_block_cipher":[[84,1,1,"","AESBlockCipher"]],"ciphers.block_ciphers.aes_block_cipher.AESBlockCipher":[[84,2,1,"","add_AND_component"],[84,2,1,"","add_FSR_component"],[84,2,1,"","add_MODADD_component"],[84,2,1,"","add_MODSUB_component"],[84,2,1,"","add_NOT_component"],[84,2,1,"","add_OR_component"],[84,2,1,"","add_SBOX_component"],[84,2,1,"","add_SHIFT_component"],[84,2,1,"","add_XOR_component"],[84,2,1,"","add_cipher_output_component"],[84,2,1,"","add_concatenate_component"],[84,2,1,"","add_constant_component"],[84,2,1,"","add_intermediate_output_component"],[84,2,1,"","add_linear_layer_component"],[84,2,1,"","add_mix_column_component"],[84,2,1,"","add_permutation_component"],[84,2,1,"","add_reverse_component"],[84,2,1,"","add_rotate_component"],[84,2,1,"","add_round"],[84,2,1,"","add_round_key_output_component"],[84,2,1,"","add_round_output_component"],[84,2,1,"","add_shift_rows_component"],[84,2,1,"","add_sigma_component"],[84,2,1,"","add_suffix_to_components"],[84,2,1,"","add_theta_keccak_component"],[84,2,1,"","add_theta_xoodoo_component"],[84,2,1,"","add_variable_rotate_component"],[84,2,1,"","add_variable_shift_component"],[84,2,1,"","add_word_permutation_component"],[84,2,1,"","algebraic_tests"],[84,2,1,"","analyze_cipher"],[84,2,1,"","as_python_dictionary"],[84,2,1,"","avalanche_probability_vectors"],[84,2,1,"","cipher_inverse"],[84,2,1,"","cipher_partial_inverse"],[84,2,1,"","component_analysis_tests"],[84,2,1,"","component_from"],[84,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[84,2,1,"","continuous_avalanche_factor"],[84,2,1,"","continuous_diffusion_factor"],[84,2,1,"","continuous_diffusion_tests"],[84,2,1,"","continuous_neutrality_measure_for_bit_j"],[84,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[84,2,1,"","convert_to_compound_xor_cipher"],[84,2,1,"","create_constant_component"],[84,2,1,"","create_key_sbox_components"],[84,2,1,"","create_mix_column_components"],[84,2,1,"","create_rotate_component"],[84,2,1,"","create_round_key"],[84,2,1,"","create_round_output_component"],[84,2,1,"","create_sbox_components"],[84,2,1,"","create_shift_row_components"],[84,2,1,"","create_xor_components"],[84,3,1,"","current_round"],[84,3,1,"","current_round_number"],[84,3,1,"","current_round_number_of_components"],[84,2,1,"","delete_generated_evaluate_c_shared_library"],[84,2,1,"","diffusion_tests"],[84,2,1,"","evaluate"],[84,2,1,"","evaluate_using_c"],[84,2,1,"","evaluate_vectorized"],[84,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[84,3,1,"","family_name"],[84,3,1,"","file_name"],[84,2,1,"","find_good_input_difference_for_neural_distinguisher"],[84,2,1,"","find_impossible_property"],[84,2,1,"","generate_bit_based_c_code"],[84,2,1,"","generate_csv_report"],[84,2,1,"","generate_evaluate_c_code_shared_library"],[84,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[84,2,1,"","generate_word_based_c_code"],[84,2,1,"","get_all_components"],[84,2,1,"","get_all_components_ids"],[84,2,1,"","get_all_inputs_bit_positions"],[84,2,1,"","get_component_from_id"],[84,2,1,"","get_components_in_round"],[84,2,1,"","get_current_component_id"],[84,2,1,"","get_model"],[84,2,1,"","get_number_of_components_in_round"],[84,2,1,"","get_partial_cipher"],[84,2,1,"","get_round_from_component_id"],[84,2,1,"","get_sizes_of_components_by_type"],[84,3,1,"","id"],[84,2,1,"","impossible_differential_search"],[84,3,1,"","inputs"],[84,3,1,"","inputs_bit_size"],[84,2,1,"","inputs_size_to_dict"],[84,2,1,"","is_algebraically_secure"],[84,2,1,"","is_andrx"],[84,2,1,"","is_arx"],[84,2,1,"","is_power_of_2_word_based"],[84,2,1,"","is_shift_arx"],[84,2,1,"","is_spn"],[84,2,1,"","make_cipher_id"],[84,2,1,"","make_file_name"],[84,2,1,"","neural_network_blackbox_distinguisher_tests"],[84,2,1,"","neural_network_differential_distinguisher_tests"],[84,3,1,"","number_of_rounds"],[84,3,1,"","output_bit_size"],[84,2,1,"","polynomial_system"],[84,2,1,"","polynomial_system_at_round"],[84,2,1,"","print"],[84,2,1,"","print_as_python_dictionary"],[84,2,1,"","print_as_python_dictionary_to_file"],[84,2,1,"","print_component_analysis_as_radar_charts"],[84,2,1,"","print_evaluation_python_code"],[84,2,1,"","print_evaluation_python_code_to_file"],[84,2,1,"","print_input_information"],[84,3,1,"","reference_code"],[84,2,1,"","remove_key_schedule"],[84,2,1,"","remove_round_component"],[84,2,1,"","remove_round_component_from_id"],[84,3,1,"","rounds"],[84,3,1,"","rounds_as_list"],[84,2,1,"","run_autond_pipeline"],[84,2,1,"","set_file_name"],[84,2,1,"","set_id"],[84,2,1,"","set_inputs"],[84,2,1,"","sort_cipher"],[84,2,1,"","test_against_reference_code"],[84,2,1,"","test_vector_check"],[84,2,1,"","train_gohr_neural_distinguisher"],[84,2,1,"","train_neural_distinguisher"],[84,3,1,"","type"],[84,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.bea1_block_cipher":[[85,1,1,"","BEA1BlockCipher"]],"ciphers.block_ciphers.bea1_block_cipher.BEA1BlockCipher":[[85,2,1,"","add_AND_component"],[85,2,1,"","add_FSR_component"],[85,2,1,"","add_MODADD_component"],[85,2,1,"","add_MODSUB_component"],[85,2,1,"","add_NOT_component"],[85,2,1,"","add_OR_component"],[85,2,1,"","add_SBOX_component"],[85,2,1,"","add_SHIFT_component"],[85,2,1,"","add_XOR_component"],[85,2,1,"","add_cipher_output_component"],[85,2,1,"","add_concatenate_component"],[85,2,1,"","add_constant_component"],[85,2,1,"","add_intermediate_output_component"],[85,2,1,"","add_linear_layer_component"],[85,2,1,"","add_mix_column_component"],[85,2,1,"","add_permutation_component"],[85,2,1,"","add_reverse_component"],[85,2,1,"","add_rotate_component"],[85,2,1,"","add_round"],[85,2,1,"","add_round_key_output_component"],[85,2,1,"","add_round_output_component"],[85,2,1,"","add_shift_rows_component"],[85,2,1,"","add_sigma_component"],[85,2,1,"","add_suffix_to_components"],[85,2,1,"","add_theta_keccak_component"],[85,2,1,"","add_theta_xoodoo_component"],[85,2,1,"","add_variable_rotate_component"],[85,2,1,"","add_variable_shift_component"],[85,2,1,"","add_word_permutation_component"],[85,2,1,"","algebraic_tests"],[85,2,1,"","analyze_cipher"],[85,2,1,"","as_python_dictionary"],[85,2,1,"","avalanche_probability_vectors"],[85,2,1,"","cipher_inverse"],[85,2,1,"","cipher_partial_inverse"],[85,2,1,"","component_analysis_tests"],[85,2,1,"","component_from"],[85,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[85,2,1,"","continuous_avalanche_factor"],[85,2,1,"","continuous_diffusion_factor"],[85,2,1,"","continuous_diffusion_tests"],[85,2,1,"","continuous_neutrality_measure_for_bit_j"],[85,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[85,2,1,"","convert_to_compound_xor_cipher"],[85,3,1,"","current_round"],[85,3,1,"","current_round_number"],[85,3,1,"","current_round_number_of_components"],[85,2,1,"","delete_generated_evaluate_c_shared_library"],[85,2,1,"","diffusion_tests"],[85,2,1,"","evaluate"],[85,2,1,"","evaluate_using_c"],[85,2,1,"","evaluate_vectorized"],[85,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[85,3,1,"","family_name"],[85,3,1,"","file_name"],[85,2,1,"","find_good_input_difference_for_neural_distinguisher"],[85,2,1,"","find_impossible_property"],[85,2,1,"","generate_bit_based_c_code"],[85,2,1,"","generate_csv_report"],[85,2,1,"","generate_evaluate_c_code_shared_library"],[85,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[85,2,1,"","generate_word_based_c_code"],[85,2,1,"","get_all_components"],[85,2,1,"","get_all_components_ids"],[85,2,1,"","get_all_inputs_bit_positions"],[85,2,1,"","get_component_from_id"],[85,2,1,"","get_components_in_round"],[85,2,1,"","get_current_component_id"],[85,2,1,"","get_model"],[85,2,1,"","get_number_of_components_in_round"],[85,2,1,"","get_partial_cipher"],[85,2,1,"","get_round_from_component_id"],[85,2,1,"","get_sizes_of_components_by_type"],[85,3,1,"","id"],[85,2,1,"","impossible_differential_search"],[85,3,1,"","inputs"],[85,3,1,"","inputs_bit_size"],[85,2,1,"","inputs_size_to_dict"],[85,2,1,"","is_algebraically_secure"],[85,2,1,"","is_andrx"],[85,2,1,"","is_arx"],[85,2,1,"","is_power_of_2_word_based"],[85,2,1,"","is_shift_arx"],[85,2,1,"","is_spn"],[85,2,1,"","make_cipher_id"],[85,2,1,"","make_file_name"],[85,2,1,"","neural_network_blackbox_distinguisher_tests"],[85,2,1,"","neural_network_differential_distinguisher_tests"],[85,3,1,"","number_of_rounds"],[85,3,1,"","output_bit_size"],[85,2,1,"","polynomial_system"],[85,2,1,"","polynomial_system_at_round"],[85,2,1,"","print"],[85,2,1,"","print_as_python_dictionary"],[85,2,1,"","print_as_python_dictionary_to_file"],[85,2,1,"","print_component_analysis_as_radar_charts"],[85,2,1,"","print_evaluation_python_code"],[85,2,1,"","print_evaluation_python_code_to_file"],[85,2,1,"","print_input_information"],[85,3,1,"","reference_code"],[85,2,1,"","remove_key_schedule"],[85,2,1,"","remove_round_component"],[85,2,1,"","remove_round_component_from_id"],[85,3,1,"","rounds"],[85,3,1,"","rounds_as_list"],[85,2,1,"","run_autond_pipeline"],[85,2,1,"","set_file_name"],[85,2,1,"","set_id"],[85,2,1,"","set_inputs"],[85,2,1,"","sort_cipher"],[85,2,1,"","test_against_reference_code"],[85,2,1,"","test_vector_check"],[85,2,1,"","train_gohr_neural_distinguisher"],[85,2,1,"","train_neural_distinguisher"],[85,3,1,"","type"],[85,2,1,"","xor_round_key"],[85,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.constant_block_cipher":[[86,1,1,"","ConstantBlockCipher"]],"ciphers.block_ciphers.constant_block_cipher.ConstantBlockCipher":[[86,2,1,"","add_AND_component"],[86,2,1,"","add_FSR_component"],[86,2,1,"","add_MODADD_component"],[86,2,1,"","add_MODSUB_component"],[86,2,1,"","add_NOT_component"],[86,2,1,"","add_OR_component"],[86,2,1,"","add_SBOX_component"],[86,2,1,"","add_SHIFT_component"],[86,2,1,"","add_XOR_component"],[86,2,1,"","add_cipher_output_component"],[86,2,1,"","add_concatenate_component"],[86,2,1,"","add_constant_component"],[86,2,1,"","add_intermediate_output_component"],[86,2,1,"","add_linear_layer_component"],[86,2,1,"","add_mix_column_component"],[86,2,1,"","add_permutation_component"],[86,2,1,"","add_reverse_component"],[86,2,1,"","add_rotate_component"],[86,2,1,"","add_round"],[86,2,1,"","add_round_key_output_component"],[86,2,1,"","add_round_output_component"],[86,2,1,"","add_shift_rows_component"],[86,2,1,"","add_sigma_component"],[86,2,1,"","add_suffix_to_components"],[86,2,1,"","add_theta_keccak_component"],[86,2,1,"","add_theta_xoodoo_component"],[86,2,1,"","add_variable_rotate_component"],[86,2,1,"","add_variable_shift_component"],[86,2,1,"","add_word_permutation_component"],[86,2,1,"","algebraic_tests"],[86,2,1,"","analyze_cipher"],[86,2,1,"","as_python_dictionary"],[86,2,1,"","avalanche_probability_vectors"],[86,2,1,"","cipher_inverse"],[86,2,1,"","cipher_partial_inverse"],[86,2,1,"","component_analysis_tests"],[86,2,1,"","component_from"],[86,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[86,2,1,"","continuous_avalanche_factor"],[86,2,1,"","continuous_diffusion_factor"],[86,2,1,"","continuous_diffusion_tests"],[86,2,1,"","continuous_neutrality_measure_for_bit_j"],[86,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[86,2,1,"","convert_to_compound_xor_cipher"],[86,2,1,"","create_rounds"],[86,3,1,"","current_round"],[86,3,1,"","current_round_number"],[86,3,1,"","current_round_number_of_components"],[86,2,1,"","delete_generated_evaluate_c_shared_library"],[86,2,1,"","diffusion_tests"],[86,2,1,"","evaluate"],[86,2,1,"","evaluate_using_c"],[86,2,1,"","evaluate_vectorized"],[86,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[86,3,1,"","family_name"],[86,3,1,"","file_name"],[86,2,1,"","find_good_input_difference_for_neural_distinguisher"],[86,2,1,"","find_impossible_property"],[86,2,1,"","generate_bit_based_c_code"],[86,2,1,"","generate_csv_report"],[86,2,1,"","generate_evaluate_c_code_shared_library"],[86,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[86,2,1,"","generate_word_based_c_code"],[86,2,1,"","get_all_components"],[86,2,1,"","get_all_components_ids"],[86,2,1,"","get_all_inputs_bit_positions"],[86,2,1,"","get_component_from_id"],[86,2,1,"","get_components_in_round"],[86,2,1,"","get_current_component_id"],[86,2,1,"","get_model"],[86,2,1,"","get_number_of_components_in_round"],[86,2,1,"","get_partial_cipher"],[86,2,1,"","get_round_from_component_id"],[86,2,1,"","get_sizes_of_components_by_type"],[86,3,1,"","id"],[86,2,1,"","impossible_differential_search"],[86,3,1,"","inputs"],[86,3,1,"","inputs_bit_size"],[86,2,1,"","inputs_size_to_dict"],[86,2,1,"","is_algebraically_secure"],[86,2,1,"","is_andrx"],[86,2,1,"","is_arx"],[86,2,1,"","is_power_of_2_word_based"],[86,2,1,"","is_shift_arx"],[86,2,1,"","is_spn"],[86,2,1,"","make_cipher_id"],[86,2,1,"","make_file_name"],[86,2,1,"","neural_network_blackbox_distinguisher_tests"],[86,2,1,"","neural_network_differential_distinguisher_tests"],[86,3,1,"","number_of_rounds"],[86,3,1,"","output_bit_size"],[86,2,1,"","polynomial_system"],[86,2,1,"","polynomial_system_at_round"],[86,2,1,"","print"],[86,2,1,"","print_as_python_dictionary"],[86,2,1,"","print_as_python_dictionary_to_file"],[86,2,1,"","print_component_analysis_as_radar_charts"],[86,2,1,"","print_evaluation_python_code"],[86,2,1,"","print_evaluation_python_code_to_file"],[86,2,1,"","print_input_information"],[86,3,1,"","reference_code"],[86,2,1,"","remove_key_schedule"],[86,2,1,"","remove_round_component"],[86,2,1,"","remove_round_component_from_id"],[86,3,1,"","rounds"],[86,3,1,"","rounds_as_list"],[86,2,1,"","run_autond_pipeline"],[86,2,1,"","set_file_name"],[86,2,1,"","set_id"],[86,2,1,"","set_inputs"],[86,2,1,"","sort_cipher"],[86,2,1,"","test_against_reference_code"],[86,2,1,"","test_vector_check"],[86,2,1,"","train_gohr_neural_distinguisher"],[86,2,1,"","train_neural_distinguisher"],[86,3,1,"","type"],[86,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_block_cipher":[[87,1,1,"","DESBlockCipher"]],"ciphers.block_ciphers.des_block_cipher.DESBlockCipher":[[87,2,1,"","add_AND_component"],[87,2,1,"","add_FSR_component"],[87,2,1,"","add_MODADD_component"],[87,2,1,"","add_MODSUB_component"],[87,2,1,"","add_NOT_component"],[87,2,1,"","add_OR_component"],[87,2,1,"","add_SBOX_component"],[87,2,1,"","add_SHIFT_component"],[87,2,1,"","add_XOR_component"],[87,2,1,"","add_cipher_output_component"],[87,2,1,"","add_concatenate_component"],[87,2,1,"","add_constant_component"],[87,2,1,"","add_intermediate_output_component"],[87,2,1,"","add_linear_layer_component"],[87,2,1,"","add_mix_column_component"],[87,2,1,"","add_permutation_component"],[87,2,1,"","add_reverse_component"],[87,2,1,"","add_rotate_component"],[87,2,1,"","add_round"],[87,2,1,"","add_round_key_output_component"],[87,2,1,"","add_round_output_component"],[87,2,1,"","add_shift_rows_component"],[87,2,1,"","add_sigma_component"],[87,2,1,"","add_suffix_to_components"],[87,2,1,"","add_theta_keccak_component"],[87,2,1,"","add_theta_xoodoo_component"],[87,2,1,"","add_variable_rotate_component"],[87,2,1,"","add_variable_shift_component"],[87,2,1,"","add_word_permutation_component"],[87,2,1,"","algebraic_tests"],[87,2,1,"","analyze_cipher"],[87,2,1,"","as_python_dictionary"],[87,2,1,"","avalanche_probability_vectors"],[87,2,1,"","cipher_inverse"],[87,2,1,"","cipher_partial_inverse"],[87,2,1,"","component_analysis_tests"],[87,2,1,"","component_from"],[87,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[87,2,1,"","continuous_avalanche_factor"],[87,2,1,"","continuous_diffusion_factor"],[87,2,1,"","continuous_diffusion_tests"],[87,2,1,"","continuous_neutrality_measure_for_bit_j"],[87,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[87,2,1,"","convert_to_compound_xor_cipher"],[87,3,1,"","current_round"],[87,3,1,"","current_round_number"],[87,3,1,"","current_round_number_of_components"],[87,2,1,"","delete_generated_evaluate_c_shared_library"],[87,2,1,"","diffusion_tests"],[87,2,1,"","evaluate"],[87,2,1,"","evaluate_using_c"],[87,2,1,"","evaluate_vectorized"],[87,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[87,3,1,"","family_name"],[87,3,1,"","file_name"],[87,2,1,"","find_good_input_difference_for_neural_distinguisher"],[87,2,1,"","find_impossible_property"],[87,2,1,"","generate_bit_based_c_code"],[87,2,1,"","generate_csv_report"],[87,2,1,"","generate_evaluate_c_code_shared_library"],[87,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[87,2,1,"","generate_word_based_c_code"],[87,2,1,"","get_all_components"],[87,2,1,"","get_all_components_ids"],[87,2,1,"","get_all_inputs_bit_positions"],[87,2,1,"","get_component_from_id"],[87,2,1,"","get_components_in_round"],[87,2,1,"","get_current_component_id"],[87,2,1,"","get_model"],[87,2,1,"","get_number_of_components_in_round"],[87,2,1,"","get_partial_cipher"],[87,2,1,"","get_round_from_component_id"],[87,2,1,"","get_sizes_of_components_by_type"],[87,3,1,"","id"],[87,2,1,"","impossible_differential_search"],[87,3,1,"","inputs"],[87,3,1,"","inputs_bit_size"],[87,2,1,"","inputs_size_to_dict"],[87,2,1,"","is_algebraically_secure"],[87,2,1,"","is_andrx"],[87,2,1,"","is_arx"],[87,2,1,"","is_power_of_2_word_based"],[87,2,1,"","is_shift_arx"],[87,2,1,"","is_spn"],[87,2,1,"","make_cipher_id"],[87,2,1,"","make_file_name"],[87,2,1,"","neural_network_blackbox_distinguisher_tests"],[87,2,1,"","neural_network_differential_distinguisher_tests"],[87,3,1,"","number_of_rounds"],[87,3,1,"","output_bit_size"],[87,2,1,"","polynomial_system"],[87,2,1,"","polynomial_system_at_round"],[87,2,1,"","print"],[87,2,1,"","print_as_python_dictionary"],[87,2,1,"","print_as_python_dictionary_to_file"],[87,2,1,"","print_component_analysis_as_radar_charts"],[87,2,1,"","print_evaluation_python_code"],[87,2,1,"","print_evaluation_python_code_to_file"],[87,2,1,"","print_input_information"],[87,3,1,"","reference_code"],[87,2,1,"","remove_key_schedule"],[87,2,1,"","remove_round_component"],[87,2,1,"","remove_round_component_from_id"],[87,3,1,"","rounds"],[87,3,1,"","rounds_as_list"],[87,2,1,"","run_autond_pipeline"],[87,2,1,"","set_file_name"],[87,2,1,"","set_id"],[87,2,1,"","set_inputs"],[87,2,1,"","sort_cipher"],[87,2,1,"","test_against_reference_code"],[87,2,1,"","test_vector_check"],[87,2,1,"","train_gohr_neural_distinguisher"],[87,2,1,"","train_neural_distinguisher"],[87,3,1,"","type"],[87,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher":[[88,1,1,"","DESExactKeyLengthBlockCipher"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher.DESExactKeyLengthBlockCipher":[[88,2,1,"","add_AND_component"],[88,2,1,"","add_FSR_component"],[88,2,1,"","add_MODADD_component"],[88,2,1,"","add_MODSUB_component"],[88,2,1,"","add_NOT_component"],[88,2,1,"","add_OR_component"],[88,2,1,"","add_SBOX_component"],[88,2,1,"","add_SHIFT_component"],[88,2,1,"","add_XOR_component"],[88,2,1,"","add_cipher_output_component"],[88,2,1,"","add_concatenate_component"],[88,2,1,"","add_constant_component"],[88,2,1,"","add_intermediate_output_component"],[88,2,1,"","add_linear_layer_component"],[88,2,1,"","add_mix_column_component"],[88,2,1,"","add_permutation_component"],[88,2,1,"","add_reverse_component"],[88,2,1,"","add_rotate_component"],[88,2,1,"","add_round"],[88,2,1,"","add_round_key_output_component"],[88,2,1,"","add_round_output_component"],[88,2,1,"","add_shift_rows_component"],[88,2,1,"","add_sigma_component"],[88,2,1,"","add_suffix_to_components"],[88,2,1,"","add_theta_keccak_component"],[88,2,1,"","add_theta_xoodoo_component"],[88,2,1,"","add_variable_rotate_component"],[88,2,1,"","add_variable_shift_component"],[88,2,1,"","add_word_permutation_component"],[88,2,1,"","algebraic_tests"],[88,2,1,"","analyze_cipher"],[88,2,1,"","as_python_dictionary"],[88,2,1,"","avalanche_probability_vectors"],[88,2,1,"","cipher_inverse"],[88,2,1,"","cipher_partial_inverse"],[88,2,1,"","component_analysis_tests"],[88,2,1,"","component_from"],[88,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[88,2,1,"","continuous_avalanche_factor"],[88,2,1,"","continuous_diffusion_factor"],[88,2,1,"","continuous_diffusion_tests"],[88,2,1,"","continuous_neutrality_measure_for_bit_j"],[88,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[88,2,1,"","convert_to_compound_xor_cipher"],[88,3,1,"","current_round"],[88,3,1,"","current_round_number"],[88,3,1,"","current_round_number_of_components"],[88,2,1,"","delete_generated_evaluate_c_shared_library"],[88,2,1,"","diffusion_tests"],[88,2,1,"","evaluate"],[88,2,1,"","evaluate_using_c"],[88,2,1,"","evaluate_vectorized"],[88,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[88,3,1,"","family_name"],[88,3,1,"","file_name"],[88,2,1,"","find_good_input_difference_for_neural_distinguisher"],[88,2,1,"","find_impossible_property"],[88,2,1,"","generate_bit_based_c_code"],[88,2,1,"","generate_csv_report"],[88,2,1,"","generate_evaluate_c_code_shared_library"],[88,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[88,2,1,"","generate_word_based_c_code"],[88,2,1,"","get_all_components"],[88,2,1,"","get_all_components_ids"],[88,2,1,"","get_all_inputs_bit_positions"],[88,2,1,"","get_component_from_id"],[88,2,1,"","get_components_in_round"],[88,2,1,"","get_current_component_id"],[88,2,1,"","get_model"],[88,2,1,"","get_number_of_components_in_round"],[88,2,1,"","get_partial_cipher"],[88,2,1,"","get_round_from_component_id"],[88,2,1,"","get_sizes_of_components_by_type"],[88,3,1,"","id"],[88,2,1,"","impossible_differential_search"],[88,3,1,"","inputs"],[88,3,1,"","inputs_bit_size"],[88,2,1,"","inputs_size_to_dict"],[88,2,1,"","is_algebraically_secure"],[88,2,1,"","is_andrx"],[88,2,1,"","is_arx"],[88,2,1,"","is_power_of_2_word_based"],[88,2,1,"","is_shift_arx"],[88,2,1,"","is_spn"],[88,2,1,"","make_cipher_id"],[88,2,1,"","make_file_name"],[88,2,1,"","neural_network_blackbox_distinguisher_tests"],[88,2,1,"","neural_network_differential_distinguisher_tests"],[88,3,1,"","number_of_rounds"],[88,3,1,"","output_bit_size"],[88,2,1,"","polynomial_system"],[88,2,1,"","polynomial_system_at_round"],[88,2,1,"","print"],[88,2,1,"","print_as_python_dictionary"],[88,2,1,"","print_as_python_dictionary_to_file"],[88,2,1,"","print_component_analysis_as_radar_charts"],[88,2,1,"","print_evaluation_python_code"],[88,2,1,"","print_evaluation_python_code_to_file"],[88,2,1,"","print_input_information"],[88,3,1,"","reference_code"],[88,2,1,"","remove_key_schedule"],[88,2,1,"","remove_round_component"],[88,2,1,"","remove_round_component_from_id"],[88,3,1,"","rounds"],[88,3,1,"","rounds_as_list"],[88,2,1,"","run_autond_pipeline"],[88,2,1,"","set_file_name"],[88,2,1,"","set_id"],[88,2,1,"","set_inputs"],[88,2,1,"","sort_cipher"],[88,2,1,"","test_against_reference_code"],[88,2,1,"","test_vector_check"],[88,2,1,"","train_gohr_neural_distinguisher"],[88,2,1,"","train_neural_distinguisher"],[88,3,1,"","type"],[88,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.fancy_block_cipher":[[89,1,1,"","FancyBlockCipher"]],"ciphers.block_ciphers.fancy_block_cipher.FancyBlockCipher":[[89,2,1,"","add_AND_component"],[89,2,1,"","add_FSR_component"],[89,2,1,"","add_MODADD_component"],[89,2,1,"","add_MODSUB_component"],[89,2,1,"","add_NOT_component"],[89,2,1,"","add_OR_component"],[89,2,1,"","add_SBOX_component"],[89,2,1,"","add_SHIFT_component"],[89,2,1,"","add_XOR_component"],[89,2,1,"","add_and_component_to_even_round"],[89,2,1,"","add_cipher_output_component"],[89,2,1,"","add_concatenate_component"],[89,2,1,"","add_constant_component"],[89,2,1,"","add_intermediate_output_component"],[89,2,1,"","add_linear_layer_component"],[89,2,1,"","add_mix_column_component"],[89,2,1,"","add_permutation_component"],[89,2,1,"","add_reverse_component"],[89,2,1,"","add_rotate_component"],[89,2,1,"","add_round"],[89,2,1,"","add_round_key_output_component"],[89,2,1,"","add_round_output_component"],[89,2,1,"","add_sbox_components_layer_in_even_rounds"],[89,2,1,"","add_shift_rows_component"],[89,2,1,"","add_sigma_component"],[89,2,1,"","add_suffix_to_components"],[89,2,1,"","add_theta_keccak_component"],[89,2,1,"","add_theta_xoodoo_component"],[89,2,1,"","add_variable_rotate_component"],[89,2,1,"","add_variable_shift_component"],[89,2,1,"","add_word_permutation_component"],[89,2,1,"","add_xor_component_to_even_round"],[89,2,1,"","algebraic_tests"],[89,2,1,"","analyze_cipher"],[89,2,1,"","as_python_dictionary"],[89,2,1,"","avalanche_probability_vectors"],[89,2,1,"","cipher_inverse"],[89,2,1,"","cipher_partial_inverse"],[89,2,1,"","collect_input_id_links"],[89,2,1,"","component_analysis_tests"],[89,2,1,"","component_from"],[89,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[89,2,1,"","continuous_avalanche_factor"],[89,2,1,"","continuous_diffusion_factor"],[89,2,1,"","continuous_diffusion_tests"],[89,2,1,"","continuous_neutrality_measure_for_bit_j"],[89,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[89,2,1,"","convert_to_compound_xor_cipher"],[89,3,1,"","current_round"],[89,3,1,"","current_round_number"],[89,3,1,"","current_round_number_of_components"],[89,2,1,"","delete_generated_evaluate_c_shared_library"],[89,2,1,"","diffusion_tests"],[89,2,1,"","evaluate"],[89,2,1,"","evaluate_using_c"],[89,2,1,"","evaluate_vectorized"],[89,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[89,3,1,"","family_name"],[89,3,1,"","file_name"],[89,2,1,"","find_good_input_difference_for_neural_distinguisher"],[89,2,1,"","find_impossible_property"],[89,2,1,"","generate_bit_based_c_code"],[89,2,1,"","generate_csv_report"],[89,2,1,"","generate_evaluate_c_code_shared_library"],[89,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[89,2,1,"","generate_word_based_c_code"],[89,2,1,"","get_all_components"],[89,2,1,"","get_all_components_ids"],[89,2,1,"","get_all_inputs_bit_positions"],[89,2,1,"","get_component_from_id"],[89,2,1,"","get_components_in_round"],[89,2,1,"","get_current_component_id"],[89,2,1,"","get_model"],[89,2,1,"","get_number_of_components_in_round"],[89,2,1,"","get_partial_cipher"],[89,2,1,"","get_round_from_component_id"],[89,2,1,"","get_sizes_of_components_by_type"],[89,3,1,"","id"],[89,2,1,"","impossible_differential_search"],[89,3,1,"","inputs"],[89,3,1,"","inputs_bit_size"],[89,2,1,"","inputs_size_to_dict"],[89,2,1,"","is_algebraically_secure"],[89,2,1,"","is_andrx"],[89,2,1,"","is_arx"],[89,2,1,"","is_power_of_2_word_based"],[89,2,1,"","is_shift_arx"],[89,2,1,"","is_spn"],[89,2,1,"","make_cipher_id"],[89,2,1,"","make_file_name"],[89,2,1,"","neural_network_blackbox_distinguisher_tests"],[89,2,1,"","neural_network_differential_distinguisher_tests"],[89,3,1,"","number_of_rounds"],[89,3,1,"","output_bit_size"],[89,2,1,"","polynomial_system"],[89,2,1,"","polynomial_system_at_round"],[89,2,1,"","print"],[89,2,1,"","print_as_python_dictionary"],[89,2,1,"","print_as_python_dictionary_to_file"],[89,2,1,"","print_component_analysis_as_radar_charts"],[89,2,1,"","print_evaluation_python_code"],[89,2,1,"","print_evaluation_python_code_to_file"],[89,2,1,"","print_input_information"],[89,3,1,"","reference_code"],[89,2,1,"","remove_key_schedule"],[89,2,1,"","remove_round_component"],[89,2,1,"","remove_round_component_from_id"],[89,3,1,"","rounds"],[89,3,1,"","rounds_as_list"],[89,2,1,"","run_autond_pipeline"],[89,2,1,"","set_file_name"],[89,2,1,"","set_id"],[89,2,1,"","set_inputs"],[89,2,1,"","sort_cipher"],[89,2,1,"","test_against_reference_code"],[89,2,1,"","test_vector_check"],[89,2,1,"","train_gohr_neural_distinguisher"],[89,2,1,"","train_neural_distinguisher"],[89,3,1,"","type"],[89,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.hight_block_cipher":[[90,1,1,"","HightBlockCipher"],[90,4,1,"","init_input"],[90,4,1,"","temp_subkey_generation"],[90,4,1,"","whitening_key_generation"]],"ciphers.block_ciphers.hight_block_cipher.HightBlockCipher":[[90,2,1,"","add_AND_component"],[90,2,1,"","add_FSR_component"],[90,2,1,"","add_MODADD_component"],[90,2,1,"","add_MODSUB_component"],[90,2,1,"","add_NOT_component"],[90,2,1,"","add_OR_component"],[90,2,1,"","add_SBOX_component"],[90,2,1,"","add_SHIFT_component"],[90,2,1,"","add_XOR_component"],[90,2,1,"","add_cipher_output_component"],[90,2,1,"","add_concatenate_component"],[90,2,1,"","add_constant_component"],[90,2,1,"","add_intermediate_output_component"],[90,2,1,"","add_intermediate_output_components"],[90,2,1,"","add_linear_layer_component"],[90,2,1,"","add_mix_column_component"],[90,2,1,"","add_permutation_component"],[90,2,1,"","add_reverse_component"],[90,2,1,"","add_rotate_component"],[90,2,1,"","add_round"],[90,2,1,"","add_round_key_output_component"],[90,2,1,"","add_round_output_component"],[90,2,1,"","add_shift_rows_component"],[90,2,1,"","add_sigma_component"],[90,2,1,"","add_suffix_to_components"],[90,2,1,"","add_theta_keccak_component"],[90,2,1,"","add_theta_xoodoo_component"],[90,2,1,"","add_variable_rotate_component"],[90,2,1,"","add_variable_shift_component"],[90,2,1,"","add_word_permutation_component"],[90,2,1,"","algebraic_tests"],[90,2,1,"","analyze_cipher"],[90,2,1,"","as_python_dictionary"],[90,2,1,"","avalanche_probability_vectors"],[90,2,1,"","cipher_inverse"],[90,2,1,"","cipher_partial_inverse"],[90,2,1,"","component_analysis_tests"],[90,2,1,"","component_from"],[90,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[90,2,1,"","continuous_avalanche_factor"],[90,2,1,"","continuous_diffusion_factor"],[90,2,1,"","continuous_diffusion_tests"],[90,2,1,"","continuous_neutrality_measure_for_bit_j"],[90,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[90,2,1,"","convert_to_compound_xor_cipher"],[90,2,1,"","create_sub_key"],[90,3,1,"","current_round"],[90,3,1,"","current_round_number"],[90,3,1,"","current_round_number_of_components"],[90,2,1,"","delete_generated_evaluate_c_shared_library"],[90,2,1,"","diffusion_tests"],[90,2,1,"","evaluate"],[90,2,1,"","evaluate_using_c"],[90,2,1,"","evaluate_vectorized"],[90,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[90,3,1,"","family_name"],[90,3,1,"","file_name"],[90,2,1,"","final_transformation"],[90,2,1,"","find_good_input_difference_for_neural_distinguisher"],[90,2,1,"","find_impossible_property"],[90,2,1,"","generate_bit_based_c_code"],[90,2,1,"","generate_csv_report"],[90,2,1,"","generate_evaluate_c_code_shared_library"],[90,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[90,2,1,"","generate_word_based_c_code"],[90,2,1,"","get_all_components"],[90,2,1,"","get_all_components_ids"],[90,2,1,"","get_all_inputs_bit_positions"],[90,2,1,"","get_component_from_id"],[90,2,1,"","get_components_in_round"],[90,2,1,"","get_current_component_id"],[90,2,1,"","get_model"],[90,2,1,"","get_number_of_components_in_round"],[90,2,1,"","get_numbers_of_rounds"],[90,2,1,"","get_partial_cipher"],[90,2,1,"","get_round_from_component_id"],[90,2,1,"","get_sizes_of_components_by_type"],[90,3,1,"","id"],[90,2,1,"","impossible_differential_search"],[90,2,1,"","initial_transformation"],[90,3,1,"","inputs"],[90,3,1,"","inputs_bit_size"],[90,2,1,"","inputs_size_to_dict"],[90,2,1,"","is_algebraically_secure"],[90,2,1,"","is_andrx"],[90,2,1,"","is_arx"],[90,2,1,"","is_power_of_2_word_based"],[90,2,1,"","is_shift_arx"],[90,2,1,"","is_spn"],[90,2,1,"","make_cipher_id"],[90,2,1,"","make_file_name"],[90,2,1,"","neural_network_blackbox_distinguisher_tests"],[90,2,1,"","neural_network_differential_distinguisher_tests"],[90,3,1,"","number_of_rounds"],[90,3,1,"","output_bit_size"],[90,2,1,"","polynomial_system"],[90,2,1,"","polynomial_system_at_round"],[90,2,1,"","print"],[90,2,1,"","print_as_python_dictionary"],[90,2,1,"","print_as_python_dictionary_to_file"],[90,2,1,"","print_component_analysis_as_radar_charts"],[90,2,1,"","print_evaluation_python_code"],[90,2,1,"","print_evaluation_python_code_to_file"],[90,2,1,"","print_input_information"],[90,3,1,"","reference_code"],[90,2,1,"","remove_key_schedule"],[90,2,1,"","remove_round_component"],[90,2,1,"","remove_round_component_from_id"],[90,2,1,"","round_function"],[90,3,1,"","rounds"],[90,3,1,"","rounds_as_list"],[90,2,1,"","run_autond_pipeline"],[90,2,1,"","set_file_name"],[90,2,1,"","set_id"],[90,2,1,"","set_inputs"],[90,2,1,"","sort_cipher"],[90,2,1,"","test_against_reference_code"],[90,2,1,"","test_vector_check"],[90,2,1,"","train_gohr_neural_distinguisher"],[90,2,1,"","train_neural_distinguisher"],[90,3,1,"","type"],[90,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.identity_block_cipher":[[91,1,1,"","IdentityBlockCipher"]],"ciphers.block_ciphers.identity_block_cipher.IdentityBlockCipher":[[91,2,1,"","add_AND_component"],[91,2,1,"","add_FSR_component"],[91,2,1,"","add_MODADD_component"],[91,2,1,"","add_MODSUB_component"],[91,2,1,"","add_NOT_component"],[91,2,1,"","add_OR_component"],[91,2,1,"","add_SBOX_component"],[91,2,1,"","add_SHIFT_component"],[91,2,1,"","add_XOR_component"],[91,2,1,"","add_cipher_output_component"],[91,2,1,"","add_concatenate_component"],[91,2,1,"","add_constant_component"],[91,2,1,"","add_intermediate_output_component"],[91,2,1,"","add_linear_layer_component"],[91,2,1,"","add_mix_column_component"],[91,2,1,"","add_permutation_component"],[91,2,1,"","add_reverse_component"],[91,2,1,"","add_rotate_component"],[91,2,1,"","add_round"],[91,2,1,"","add_round_key_output_component"],[91,2,1,"","add_round_output_component"],[91,2,1,"","add_shift_rows_component"],[91,2,1,"","add_sigma_component"],[91,2,1,"","add_suffix_to_components"],[91,2,1,"","add_theta_keccak_component"],[91,2,1,"","add_theta_xoodoo_component"],[91,2,1,"","add_variable_rotate_component"],[91,2,1,"","add_variable_shift_component"],[91,2,1,"","add_word_permutation_component"],[91,2,1,"","algebraic_tests"],[91,2,1,"","analyze_cipher"],[91,2,1,"","as_python_dictionary"],[91,2,1,"","avalanche_probability_vectors"],[91,2,1,"","cipher_inverse"],[91,2,1,"","cipher_partial_inverse"],[91,2,1,"","component_analysis_tests"],[91,2,1,"","component_from"],[91,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[91,2,1,"","continuous_avalanche_factor"],[91,2,1,"","continuous_diffusion_factor"],[91,2,1,"","continuous_diffusion_tests"],[91,2,1,"","continuous_neutrality_measure_for_bit_j"],[91,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[91,2,1,"","convert_to_compound_xor_cipher"],[91,3,1,"","current_round"],[91,3,1,"","current_round_number"],[91,3,1,"","current_round_number_of_components"],[91,2,1,"","delete_generated_evaluate_c_shared_library"],[91,2,1,"","diffusion_tests"],[91,2,1,"","evaluate"],[91,2,1,"","evaluate_using_c"],[91,2,1,"","evaluate_vectorized"],[91,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[91,3,1,"","family_name"],[91,3,1,"","file_name"],[91,2,1,"","find_good_input_difference_for_neural_distinguisher"],[91,2,1,"","find_impossible_property"],[91,2,1,"","generate_bit_based_c_code"],[91,2,1,"","generate_csv_report"],[91,2,1,"","generate_evaluate_c_code_shared_library"],[91,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[91,2,1,"","generate_word_based_c_code"],[91,2,1,"","get_all_components"],[91,2,1,"","get_all_components_ids"],[91,2,1,"","get_all_inputs_bit_positions"],[91,2,1,"","get_component_from_id"],[91,2,1,"","get_components_in_round"],[91,2,1,"","get_current_component_id"],[91,2,1,"","get_model"],[91,2,1,"","get_number_of_components_in_round"],[91,2,1,"","get_partial_cipher"],[91,2,1,"","get_round_from_component_id"],[91,2,1,"","get_sizes_of_components_by_type"],[91,3,1,"","id"],[91,2,1,"","impossible_differential_search"],[91,3,1,"","inputs"],[91,3,1,"","inputs_bit_size"],[91,2,1,"","inputs_size_to_dict"],[91,2,1,"","is_algebraically_secure"],[91,2,1,"","is_andrx"],[91,2,1,"","is_arx"],[91,2,1,"","is_power_of_2_word_based"],[91,2,1,"","is_shift_arx"],[91,2,1,"","is_spn"],[91,2,1,"","make_cipher_id"],[91,2,1,"","make_file_name"],[91,2,1,"","neural_network_blackbox_distinguisher_tests"],[91,2,1,"","neural_network_differential_distinguisher_tests"],[91,3,1,"","number_of_rounds"],[91,3,1,"","output_bit_size"],[91,2,1,"","polynomial_system"],[91,2,1,"","polynomial_system_at_round"],[91,2,1,"","print"],[91,2,1,"","print_as_python_dictionary"],[91,2,1,"","print_as_python_dictionary_to_file"],[91,2,1,"","print_component_analysis_as_radar_charts"],[91,2,1,"","print_evaluation_python_code"],[91,2,1,"","print_evaluation_python_code_to_file"],[91,2,1,"","print_input_information"],[91,3,1,"","reference_code"],[91,2,1,"","remove_key_schedule"],[91,2,1,"","remove_round_component"],[91,2,1,"","remove_round_component_from_id"],[91,3,1,"","rounds"],[91,3,1,"","rounds_as_list"],[91,2,1,"","run_autond_pipeline"],[91,2,1,"","set_file_name"],[91,2,1,"","set_id"],[91,2,1,"","set_inputs"],[91,2,1,"","sort_cipher"],[91,2,1,"","test_against_reference_code"],[91,2,1,"","test_vector_check"],[91,2,1,"","train_gohr_neural_distinguisher"],[91,2,1,"","train_neural_distinguisher"],[91,3,1,"","type"],[91,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.kasumi_block_cipher":[[92,1,1,"","KasumiBlockCipher"]],"ciphers.block_ciphers.kasumi_block_cipher.KasumiBlockCipher":[[92,2,1,"","add_AND_component"],[92,2,1,"","add_FSR_component"],[92,2,1,"","add_MODADD_component"],[92,2,1,"","add_MODSUB_component"],[92,2,1,"","add_NOT_component"],[92,2,1,"","add_OR_component"],[92,2,1,"","add_SBOX_component"],[92,2,1,"","add_SHIFT_component"],[92,2,1,"","add_XOR_component"],[92,2,1,"","add_cipher_output_component"],[92,2,1,"","add_concatenate_component"],[92,2,1,"","add_constant_component"],[92,2,1,"","add_intermediate_output_component"],[92,2,1,"","add_linear_layer_component"],[92,2,1,"","add_mix_column_component"],[92,2,1,"","add_permutation_component"],[92,2,1,"","add_reverse_component"],[92,2,1,"","add_rotate_component"],[92,2,1,"","add_round"],[92,2,1,"","add_round_key_output_component"],[92,2,1,"","add_round_output_component"],[92,2,1,"","add_shift_rows_component"],[92,2,1,"","add_sigma_component"],[92,2,1,"","add_suffix_to_components"],[92,2,1,"","add_theta_keccak_component"],[92,2,1,"","add_theta_xoodoo_component"],[92,2,1,"","add_variable_rotate_component"],[92,2,1,"","add_variable_shift_component"],[92,2,1,"","add_word_permutation_component"],[92,2,1,"","algebraic_tests"],[92,2,1,"","analyze_cipher"],[92,2,1,"","as_python_dictionary"],[92,2,1,"","avalanche_probability_vectors"],[92,2,1,"","cipher_inverse"],[92,2,1,"","cipher_partial_inverse"],[92,2,1,"","component_analysis_tests"],[92,2,1,"","component_from"],[92,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[92,2,1,"","continuous_avalanche_factor"],[92,2,1,"","continuous_diffusion_factor"],[92,2,1,"","continuous_diffusion_tests"],[92,2,1,"","continuous_neutrality_measure_for_bit_j"],[92,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[92,2,1,"","convert_to_compound_xor_cipher"],[92,3,1,"","current_round"],[92,3,1,"","current_round_number"],[92,3,1,"","current_round_number_of_components"],[92,2,1,"","delete_generated_evaluate_c_shared_library"],[92,2,1,"","derived_key"],[92,2,1,"","diffusion_tests"],[92,2,1,"","evaluate"],[92,2,1,"","evaluate_using_c"],[92,2,1,"","evaluate_vectorized"],[92,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[92,3,1,"","family_name"],[92,2,1,"","fi_function"],[92,3,1,"","file_name"],[92,2,1,"","find_good_input_difference_for_neural_distinguisher"],[92,2,1,"","find_impossible_property"],[92,2,1,"","fl_function"],[92,2,1,"","fo_function"],[92,2,1,"","generate_bit_based_c_code"],[92,2,1,"","generate_csv_report"],[92,2,1,"","generate_evaluate_c_code_shared_library"],[92,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[92,2,1,"","generate_word_based_c_code"],[92,2,1,"","get_all_components"],[92,2,1,"","get_all_components_ids"],[92,2,1,"","get_all_inputs_bit_positions"],[92,2,1,"","get_component_from_id"],[92,2,1,"","get_components_in_round"],[92,2,1,"","get_current_component_id"],[92,2,1,"","get_model"],[92,2,1,"","get_number_of_components_in_round"],[92,2,1,"","get_partial_cipher"],[92,2,1,"","get_round_from_component_id"],[92,2,1,"","get_sizes_of_components_by_type"],[92,3,1,"","id"],[92,2,1,"","impossible_differential_search"],[92,3,1,"","inputs"],[92,3,1,"","inputs_bit_size"],[92,2,1,"","inputs_size_to_dict"],[92,2,1,"","is_algebraically_secure"],[92,2,1,"","is_andrx"],[92,2,1,"","is_arx"],[92,2,1,"","is_power_of_2_word_based"],[92,2,1,"","is_shift_arx"],[92,2,1,"","is_spn"],[92,2,1,"","make_cipher_id"],[92,2,1,"","make_file_name"],[92,2,1,"","neural_network_blackbox_distinguisher_tests"],[92,2,1,"","neural_network_differential_distinguisher_tests"],[92,3,1,"","number_of_rounds"],[92,3,1,"","output_bit_size"],[92,2,1,"","polynomial_system"],[92,2,1,"","polynomial_system_at_round"],[92,2,1,"","print"],[92,2,1,"","print_as_python_dictionary"],[92,2,1,"","print_as_python_dictionary_to_file"],[92,2,1,"","print_component_analysis_as_radar_charts"],[92,2,1,"","print_evaluation_python_code"],[92,2,1,"","print_evaluation_python_code_to_file"],[92,2,1,"","print_input_information"],[92,3,1,"","reference_code"],[92,2,1,"","remove_key_schedule"],[92,2,1,"","remove_round_component"],[92,2,1,"","remove_round_component_from_id"],[92,2,1,"","round_initialization"],[92,2,1,"","round_key"],[92,3,1,"","rounds"],[92,3,1,"","rounds_as_list"],[92,2,1,"","run_autond_pipeline"],[92,2,1,"","set_file_name"],[92,2,1,"","set_id"],[92,2,1,"","set_inputs"],[92,2,1,"","sort_cipher"],[92,2,1,"","test_against_reference_code"],[92,2,1,"","test_vector_check"],[92,2,1,"","train_gohr_neural_distinguisher"],[92,2,1,"","train_neural_distinguisher"],[92,3,1,"","type"],[92,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lblock_block_cipher":[[93,1,1,"","LBlockBlockCipher"]],"ciphers.block_ciphers.lblock_block_cipher.LBlockBlockCipher":[[93,2,1,"","add_AND_component"],[93,2,1,"","add_FSR_component"],[93,2,1,"","add_MODADD_component"],[93,2,1,"","add_MODSUB_component"],[93,2,1,"","add_NOT_component"],[93,2,1,"","add_OR_component"],[93,2,1,"","add_SBOX_component"],[93,2,1,"","add_SHIFT_component"],[93,2,1,"","add_XOR_component"],[93,2,1,"","add_cipher_output_component"],[93,2,1,"","add_concatenate_component"],[93,2,1,"","add_constant_component"],[93,2,1,"","add_intermediate_output_component"],[93,2,1,"","add_linear_layer_component"],[93,2,1,"","add_mix_column_component"],[93,2,1,"","add_permutation_component"],[93,2,1,"","add_reverse_component"],[93,2,1,"","add_rotate_component"],[93,2,1,"","add_round"],[93,2,1,"","add_round_key_output_component"],[93,2,1,"","add_round_output_component"],[93,2,1,"","add_shift_rows_component"],[93,2,1,"","add_sigma_component"],[93,2,1,"","add_suffix_to_components"],[93,2,1,"","add_theta_keccak_component"],[93,2,1,"","add_theta_xoodoo_component"],[93,2,1,"","add_variable_rotate_component"],[93,2,1,"","add_variable_shift_component"],[93,2,1,"","add_word_permutation_component"],[93,2,1,"","algebraic_tests"],[93,2,1,"","analyze_cipher"],[93,2,1,"","as_python_dictionary"],[93,2,1,"","avalanche_probability_vectors"],[93,2,1,"","cipher_inverse"],[93,2,1,"","cipher_partial_inverse"],[93,2,1,"","component_analysis_tests"],[93,2,1,"","component_from"],[93,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[93,2,1,"","continuous_avalanche_factor"],[93,2,1,"","continuous_diffusion_factor"],[93,2,1,"","continuous_diffusion_tests"],[93,2,1,"","continuous_neutrality_measure_for_bit_j"],[93,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[93,2,1,"","convert_to_compound_xor_cipher"],[93,3,1,"","current_round"],[93,3,1,"","current_round_number"],[93,3,1,"","current_round_number_of_components"],[93,2,1,"","delete_generated_evaluate_c_shared_library"],[93,2,1,"","diffusion_tests"],[93,2,1,"","evaluate"],[93,2,1,"","evaluate_using_c"],[93,2,1,"","evaluate_vectorized"],[93,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[93,3,1,"","family_name"],[93,3,1,"","file_name"],[93,2,1,"","find_good_input_difference_for_neural_distinguisher"],[93,2,1,"","find_impossible_property"],[93,2,1,"","generate_bit_based_c_code"],[93,2,1,"","generate_csv_report"],[93,2,1,"","generate_evaluate_c_code_shared_library"],[93,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[93,2,1,"","generate_word_based_c_code"],[93,2,1,"","get_all_components"],[93,2,1,"","get_all_components_ids"],[93,2,1,"","get_all_inputs_bit_positions"],[93,2,1,"","get_component_from_id"],[93,2,1,"","get_components_in_round"],[93,2,1,"","get_current_component_id"],[93,2,1,"","get_model"],[93,2,1,"","get_number_of_components_in_round"],[93,2,1,"","get_partial_cipher"],[93,2,1,"","get_round_from_component_id"],[93,2,1,"","get_sizes_of_components_by_type"],[93,3,1,"","id"],[93,2,1,"","impossible_differential_search"],[93,3,1,"","inputs"],[93,3,1,"","inputs_bit_size"],[93,2,1,"","inputs_size_to_dict"],[93,2,1,"","is_algebraically_secure"],[93,2,1,"","is_andrx"],[93,2,1,"","is_arx"],[93,2,1,"","is_power_of_2_word_based"],[93,2,1,"","is_shift_arx"],[93,2,1,"","is_spn"],[93,2,1,"","make_cipher_id"],[93,2,1,"","make_file_name"],[93,2,1,"","neural_network_blackbox_distinguisher_tests"],[93,2,1,"","neural_network_differential_distinguisher_tests"],[93,3,1,"","number_of_rounds"],[93,3,1,"","output_bit_size"],[93,2,1,"","polynomial_system"],[93,2,1,"","polynomial_system_at_round"],[93,2,1,"","print"],[93,2,1,"","print_as_python_dictionary"],[93,2,1,"","print_as_python_dictionary_to_file"],[93,2,1,"","print_component_analysis_as_radar_charts"],[93,2,1,"","print_evaluation_python_code"],[93,2,1,"","print_evaluation_python_code_to_file"],[93,2,1,"","print_input_information"],[93,3,1,"","reference_code"],[93,2,1,"","remove_key_schedule"],[93,2,1,"","remove_round_component"],[93,2,1,"","remove_round_component_from_id"],[93,2,1,"","round_function"],[93,3,1,"","rounds"],[93,3,1,"","rounds_as_list"],[93,2,1,"","run_autond_pipeline"],[93,2,1,"","set_file_name"],[93,2,1,"","set_id"],[93,2,1,"","set_inputs"],[93,2,1,"","sort_cipher"],[93,2,1,"","test_against_reference_code"],[93,2,1,"","test_vector_check"],[93,2,1,"","train_gohr_neural_distinguisher"],[93,2,1,"","train_neural_distinguisher"],[93,3,1,"","type"],[93,2,1,"","update_key"],[93,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lea_block_cipher":[[94,1,1,"","LeaBlockCipher"],[94,4,1,"","format_output"],[94,4,1,"","init_input"]],"ciphers.block_ciphers.lea_block_cipher.LeaBlockCipher":[[94,2,1,"","add_AND_component"],[94,2,1,"","add_FSR_component"],[94,2,1,"","add_MODADD_component"],[94,2,1,"","add_MODSUB_component"],[94,2,1,"","add_NOT_component"],[94,2,1,"","add_OR_component"],[94,2,1,"","add_SBOX_component"],[94,2,1,"","add_SHIFT_component"],[94,2,1,"","add_XOR_component"],[94,2,1,"","add_cipher_output_component"],[94,2,1,"","add_concatenate_component"],[94,2,1,"","add_constant_component"],[94,2,1,"","add_intermediate_output_component"],[94,2,1,"","add_intermediate_output_components"],[94,2,1,"","add_linear_layer_component"],[94,2,1,"","add_mix_column_component"],[94,2,1,"","add_permutation_component"],[94,2,1,"","add_reverse_component"],[94,2,1,"","add_rotate_component"],[94,2,1,"","add_round"],[94,2,1,"","add_round_key_output_component"],[94,2,1,"","add_round_output_component"],[94,2,1,"","add_shift_rows_component"],[94,2,1,"","add_sigma_component"],[94,2,1,"","add_suffix_to_components"],[94,2,1,"","add_theta_keccak_component"],[94,2,1,"","add_theta_xoodoo_component"],[94,2,1,"","add_variable_rotate_component"],[94,2,1,"","add_variable_shift_component"],[94,2,1,"","add_word_permutation_component"],[94,2,1,"","algebraic_tests"],[94,2,1,"","analyze_cipher"],[94,2,1,"","as_python_dictionary"],[94,2,1,"","avalanche_probability_vectors"],[94,2,1,"","cipher_inverse"],[94,2,1,"","cipher_partial_inverse"],[94,2,1,"","component_analysis_tests"],[94,2,1,"","component_from"],[94,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[94,2,1,"","continuous_avalanche_factor"],[94,2,1,"","continuous_diffusion_factor"],[94,2,1,"","continuous_diffusion_tests"],[94,2,1,"","continuous_neutrality_measure_for_bit_j"],[94,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[94,2,1,"","convert_to_compound_xor_cipher"],[94,3,1,"","current_round"],[94,3,1,"","current_round_number"],[94,3,1,"","current_round_number_of_components"],[94,2,1,"","delete_generated_evaluate_c_shared_library"],[94,2,1,"","diffusion_tests"],[94,2,1,"","evaluate"],[94,2,1,"","evaluate_using_c"],[94,2,1,"","evaluate_vectorized"],[94,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[94,3,1,"","family_name"],[94,3,1,"","file_name"],[94,2,1,"","find_good_input_difference_for_neural_distinguisher"],[94,2,1,"","find_impossible_property"],[94,2,1,"","generate_bit_based_c_code"],[94,2,1,"","generate_csv_report"],[94,2,1,"","generate_evaluate_c_code_shared_library"],[94,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[94,2,1,"","generate_word_based_c_code"],[94,2,1,"","get_all_components"],[94,2,1,"","get_all_components_ids"],[94,2,1,"","get_all_inputs_bit_positions"],[94,2,1,"","get_component_from_id"],[94,2,1,"","get_components_in_round"],[94,2,1,"","get_current_component_id"],[94,2,1,"","get_ith_key128"],[94,2,1,"","get_ith_key192"],[94,2,1,"","get_ith_key256"],[94,2,1,"","get_model"],[94,2,1,"","get_number_of_components_in_round"],[94,2,1,"","get_numbers_of_rounds"],[94,2,1,"","get_partial_cipher"],[94,2,1,"","get_round_from_component_id"],[94,2,1,"","get_sizes_of_components_by_type"],[94,3,1,"","id"],[94,2,1,"","impossible_differential_search"],[94,3,1,"","inputs"],[94,3,1,"","inputs_bit_size"],[94,2,1,"","inputs_size_to_dict"],[94,2,1,"","is_algebraically_secure"],[94,2,1,"","is_andrx"],[94,2,1,"","is_arx"],[94,2,1,"","is_power_of_2_word_based"],[94,2,1,"","is_shift_arx"],[94,2,1,"","is_spn"],[94,2,1,"","make_cipher_id"],[94,2,1,"","make_file_name"],[94,2,1,"","neural_network_blackbox_distinguisher_tests"],[94,2,1,"","neural_network_differential_distinguisher_tests"],[94,3,1,"","number_of_rounds"],[94,3,1,"","output_bit_size"],[94,2,1,"","polynomial_system"],[94,2,1,"","polynomial_system_at_round"],[94,2,1,"","print"],[94,2,1,"","print_as_python_dictionary"],[94,2,1,"","print_as_python_dictionary_to_file"],[94,2,1,"","print_component_analysis_as_radar_charts"],[94,2,1,"","print_evaluation_python_code"],[94,2,1,"","print_evaluation_python_code_to_file"],[94,2,1,"","print_input_information"],[94,3,1,"","reference_code"],[94,2,1,"","remove_key_schedule"],[94,2,1,"","remove_round_component"],[94,2,1,"","remove_round_component_from_id"],[94,2,1,"","round_function"],[94,3,1,"","rounds"],[94,3,1,"","rounds_as_list"],[94,2,1,"","run_autond_pipeline"],[94,2,1,"","set_file_name"],[94,2,1,"","set_id"],[94,2,1,"","set_inputs"],[94,2,1,"","sort_cipher"],[94,2,1,"","test_against_reference_code"],[94,2,1,"","test_vector_check"],[94,2,1,"","train_gohr_neural_distinguisher"],[94,2,1,"","train_neural_distinguisher"],[94,3,1,"","type"],[94,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_block_cipher":[[95,1,1,"","LowMCBlockCipher"]],"ciphers.block_ciphers.lowmc_block_cipher.LowMCBlockCipher":[[95,2,1,"","add_AND_component"],[95,2,1,"","add_FSR_component"],[95,2,1,"","add_MODADD_component"],[95,2,1,"","add_MODSUB_component"],[95,2,1,"","add_NOT_component"],[95,2,1,"","add_OR_component"],[95,2,1,"","add_SBOX_component"],[95,2,1,"","add_SHIFT_component"],[95,2,1,"","add_XOR_component"],[95,2,1,"","add_cipher_output_component"],[95,2,1,"","add_concatenate_component"],[95,2,1,"","add_constant_component"],[95,2,1,"","add_intermediate_output_component"],[95,2,1,"","add_linear_layer_component"],[95,2,1,"","add_mix_column_component"],[95,2,1,"","add_output_component"],[95,2,1,"","add_permutation_component"],[95,2,1,"","add_reverse_component"],[95,2,1,"","add_rotate_component"],[95,2,1,"","add_round"],[95,2,1,"","add_round_constant"],[95,2,1,"","add_round_key"],[95,2,1,"","add_round_key_output_component"],[95,2,1,"","add_round_output_component"],[95,2,1,"","add_shift_rows_component"],[95,2,1,"","add_sigma_component"],[95,2,1,"","add_suffix_to_components"],[95,2,1,"","add_theta_keccak_component"],[95,2,1,"","add_theta_xoodoo_component"],[95,2,1,"","add_variable_rotate_component"],[95,2,1,"","add_variable_shift_component"],[95,2,1,"","add_word_permutation_component"],[95,2,1,"","algebraic_tests"],[95,2,1,"","analyze_cipher"],[95,2,1,"","as_python_dictionary"],[95,2,1,"","avalanche_probability_vectors"],[95,2,1,"","cipher_inverse"],[95,2,1,"","cipher_partial_inverse"],[95,2,1,"","component_analysis_tests"],[95,2,1,"","component_from"],[95,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[95,2,1,"","continuous_avalanche_factor"],[95,2,1,"","continuous_diffusion_factor"],[95,2,1,"","continuous_diffusion_tests"],[95,2,1,"","continuous_neutrality_measure_for_bit_j"],[95,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[95,2,1,"","convert_to_compound_xor_cipher"],[95,3,1,"","current_round"],[95,3,1,"","current_round_number"],[95,3,1,"","current_round_number_of_components"],[95,2,1,"","define_number_of_rounds"],[95,2,1,"","define_number_of_sboxes"],[95,2,1,"","delete_generated_evaluate_c_shared_library"],[95,2,1,"","diffusion_tests"],[95,2,1,"","evaluate"],[95,2,1,"","evaluate_using_c"],[95,2,1,"","evaluate_vectorized"],[95,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[95,3,1,"","family_name"],[95,3,1,"","file_name"],[95,2,1,"","find_good_input_difference_for_neural_distinguisher"],[95,2,1,"","find_impossible_property"],[95,2,1,"","generate_bit_based_c_code"],[95,2,1,"","generate_csv_report"],[95,2,1,"","generate_evaluate_c_code_shared_library"],[95,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[95,2,1,"","generate_word_based_c_code"],[95,2,1,"","get_all_components"],[95,2,1,"","get_all_components_ids"],[95,2,1,"","get_all_inputs_bit_positions"],[95,2,1,"","get_component_from_id"],[95,2,1,"","get_components_in_round"],[95,2,1,"","get_current_component_id"],[95,2,1,"","get_model"],[95,2,1,"","get_number_of_components_in_round"],[95,2,1,"","get_partial_cipher"],[95,2,1,"","get_round_from_component_id"],[95,2,1,"","get_sizes_of_components_by_type"],[95,3,1,"","id"],[95,2,1,"","impossible_differential_search"],[95,3,1,"","inputs"],[95,3,1,"","inputs_bit_size"],[95,2,1,"","inputs_size_to_dict"],[95,2,1,"","is_algebraically_secure"],[95,2,1,"","is_andrx"],[95,2,1,"","is_arx"],[95,2,1,"","is_power_of_2_word_based"],[95,2,1,"","is_shift_arx"],[95,2,1,"","is_spn"],[95,2,1,"","linear_layer"],[95,2,1,"","load_constants"],[95,2,1,"","make_cipher_id"],[95,2,1,"","make_file_name"],[95,2,1,"","neural_network_blackbox_distinguisher_tests"],[95,2,1,"","neural_network_differential_distinguisher_tests"],[95,3,1,"","number_of_rounds"],[95,3,1,"","output_bit_size"],[95,2,1,"","polynomial_system"],[95,2,1,"","polynomial_system_at_round"],[95,2,1,"","print"],[95,2,1,"","print_as_python_dictionary"],[95,2,1,"","print_as_python_dictionary_to_file"],[95,2,1,"","print_component_analysis_as_radar_charts"],[95,2,1,"","print_evaluation_python_code"],[95,2,1,"","print_evaluation_python_code_to_file"],[95,2,1,"","print_input_information"],[95,3,1,"","reference_code"],[95,2,1,"","remove_key_schedule"],[95,2,1,"","remove_round_component"],[95,2,1,"","remove_round_component_from_id"],[95,3,1,"","rounds"],[95,3,1,"","rounds_as_list"],[95,2,1,"","run_autond_pipeline"],[95,2,1,"","sbox_layer"],[95,2,1,"","sbox_layer_picnic"],[95,2,1,"","set_file_name"],[95,2,1,"","set_id"],[95,2,1,"","set_inputs"],[95,2,1,"","sort_cipher"],[95,2,1,"","test_against_reference_code"],[95,2,1,"","test_vector_check"],[95,2,1,"","train_gohr_neural_distinguisher"],[95,2,1,"","train_neural_distinguisher"],[95,3,1,"","type"],[95,2,1,"","update_key_register"],[95,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_generate_matrices":[[96,4,1,"","grain_ssg"],[96,4,1,"","instantiate_matrix"],[96,4,1,"","main"],[96,4,1,"","rank"],[96,4,1,"","xor_matrix_values"]],"ciphers.block_ciphers.midori_block_cipher":[[97,1,1,"","MidoriBlockCipher"]],"ciphers.block_ciphers.midori_block_cipher.MidoriBlockCipher":[[97,2,1,"","add_AND_component"],[97,2,1,"","add_FSR_component"],[97,2,1,"","add_MODADD_component"],[97,2,1,"","add_MODSUB_component"],[97,2,1,"","add_NOT_component"],[97,2,1,"","add_OR_component"],[97,2,1,"","add_SBOX_component"],[97,2,1,"","add_SHIFT_component"],[97,2,1,"","add_XOR_component"],[97,2,1,"","add_cipher_output_component"],[97,2,1,"","add_concatenate_component"],[97,2,1,"","add_constant_component"],[97,2,1,"","add_intermediate_output_component"],[97,2,1,"","add_linear_layer_component"],[97,2,1,"","add_mix_column_component"],[97,2,1,"","add_permutation_component"],[97,2,1,"","add_reverse_component"],[97,2,1,"","add_rotate_component"],[97,2,1,"","add_round"],[97,2,1,"","add_round_key_output_component"],[97,2,1,"","add_round_output_component"],[97,2,1,"","add_shift_rows_component"],[97,2,1,"","add_sigma_component"],[97,2,1,"","add_suffix_to_components"],[97,2,1,"","add_theta_keccak_component"],[97,2,1,"","add_theta_xoodoo_component"],[97,2,1,"","add_variable_rotate_component"],[97,2,1,"","add_variable_shift_component"],[97,2,1,"","add_word_permutation_component"],[97,2,1,"","algebraic_tests"],[97,2,1,"","analyze_cipher"],[97,2,1,"","as_python_dictionary"],[97,2,1,"","avalanche_probability_vectors"],[97,2,1,"","cipher_inverse"],[97,2,1,"","cipher_partial_inverse"],[97,2,1,"","component_analysis_tests"],[97,2,1,"","component_from"],[97,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[97,2,1,"","continuous_avalanche_factor"],[97,2,1,"","continuous_diffusion_factor"],[97,2,1,"","continuous_diffusion_tests"],[97,2,1,"","continuous_neutrality_measure_for_bit_j"],[97,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[97,2,1,"","convert_to_compound_xor_cipher"],[97,3,1,"","current_round"],[97,3,1,"","current_round_number"],[97,3,1,"","current_round_number_of_components"],[97,2,1,"","delete_generated_evaluate_c_shared_library"],[97,2,1,"","diffusion_tests"],[97,2,1,"","evaluate"],[97,2,1,"","evaluate_using_c"],[97,2,1,"","evaluate_vectorized"],[97,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[97,3,1,"","family_name"],[97,3,1,"","file_name"],[97,2,1,"","find_good_input_difference_for_neural_distinguisher"],[97,2,1,"","find_impossible_property"],[97,2,1,"","generate_bit_based_c_code"],[97,2,1,"","generate_csv_report"],[97,2,1,"","generate_evaluate_c_code_shared_library"],[97,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[97,2,1,"","generate_word_based_c_code"],[97,2,1,"","get_all_components"],[97,2,1,"","get_all_components_ids"],[97,2,1,"","get_all_inputs_bit_positions"],[97,2,1,"","get_component_from_id"],[97,2,1,"","get_components_in_round"],[97,2,1,"","get_current_component_id"],[97,2,1,"","get_model"],[97,2,1,"","get_number_of_components_in_round"],[97,2,1,"","get_partial_cipher"],[97,2,1,"","get_round_from_component_id"],[97,2,1,"","get_sizes_of_components_by_type"],[97,3,1,"","id"],[97,2,1,"","impossible_differential_search"],[97,3,1,"","inputs"],[97,3,1,"","inputs_bit_size"],[97,2,1,"","inputs_size_to_dict"],[97,2,1,"","is_algebraically_secure"],[97,2,1,"","is_andrx"],[97,2,1,"","is_arx"],[97,2,1,"","is_power_of_2_word_based"],[97,2,1,"","is_shift_arx"],[97,2,1,"","is_spn"],[97,2,1,"","key_add"],[97,2,1,"","make_cipher_id"],[97,2,1,"","make_file_name"],[97,2,1,"","mix_column"],[97,2,1,"","neural_network_blackbox_distinguisher_tests"],[97,2,1,"","neural_network_differential_distinguisher_tests"],[97,3,1,"","number_of_rounds"],[97,3,1,"","output_bit_size"],[97,2,1,"","polynomial_system"],[97,2,1,"","polynomial_system_at_round"],[97,2,1,"","print"],[97,2,1,"","print_as_python_dictionary"],[97,2,1,"","print_as_python_dictionary_to_file"],[97,2,1,"","print_component_analysis_as_radar_charts"],[97,2,1,"","print_evaluation_python_code"],[97,2,1,"","print_evaluation_python_code_to_file"],[97,2,1,"","print_input_information"],[97,3,1,"","reference_code"],[97,2,1,"","remove_key_schedule"],[97,2,1,"","remove_round_component"],[97,2,1,"","remove_round_component_from_id"],[97,2,1,"","round_key"],[97,3,1,"","rounds"],[97,3,1,"","rounds_as_list"],[97,2,1,"","run_autond_pipeline"],[97,2,1,"","set_file_name"],[97,2,1,"","set_id"],[97,2,1,"","set_inputs"],[97,2,1,"","shuffle_cell"],[97,2,1,"","sort_cipher"],[97,2,1,"","sub_cell"],[97,2,1,"","test_against_reference_code"],[97,2,1,"","test_vector_check"],[97,2,1,"","train_gohr_neural_distinguisher"],[97,2,1,"","train_neural_distinguisher"],[97,3,1,"","type"],[97,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.present_block_cipher":[[98,1,1,"","PresentBlockCipher"]],"ciphers.block_ciphers.present_block_cipher.PresentBlockCipher":[[98,2,1,"","add_AND_component"],[98,2,1,"","add_FSR_component"],[98,2,1,"","add_MODADD_component"],[98,2,1,"","add_MODSUB_component"],[98,2,1,"","add_NOT_component"],[98,2,1,"","add_OR_component"],[98,2,1,"","add_SBOX_component"],[98,2,1,"","add_SHIFT_component"],[98,2,1,"","add_XOR_component"],[98,2,1,"","add_cipher_output_component"],[98,2,1,"","add_concatenate_component"],[98,2,1,"","add_constant_component"],[98,2,1,"","add_intermediate_output_component"],[98,2,1,"","add_linear_layer_component"],[98,2,1,"","add_mix_column_component"],[98,2,1,"","add_permutation_component"],[98,2,1,"","add_reverse_component"],[98,2,1,"","add_rotate_component"],[98,2,1,"","add_round"],[98,2,1,"","add_round_key"],[98,2,1,"","add_round_key_output_component"],[98,2,1,"","add_round_output_component"],[98,2,1,"","add_shift_rows_component"],[98,2,1,"","add_sigma_component"],[98,2,1,"","add_suffix_to_components"],[98,2,1,"","add_theta_keccak_component"],[98,2,1,"","add_theta_xoodoo_component"],[98,2,1,"","add_variable_rotate_component"],[98,2,1,"","add_variable_shift_component"],[98,2,1,"","add_word_permutation_component"],[98,2,1,"","algebraic_tests"],[98,2,1,"","analyze_cipher"],[98,2,1,"","as_python_dictionary"],[98,2,1,"","avalanche_probability_vectors"],[98,2,1,"","cipher_inverse"],[98,2,1,"","cipher_partial_inverse"],[98,2,1,"","component_analysis_tests"],[98,2,1,"","component_from"],[98,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[98,2,1,"","continuous_avalanche_factor"],[98,2,1,"","continuous_diffusion_factor"],[98,2,1,"","continuous_diffusion_tests"],[98,2,1,"","continuous_neutrality_measure_for_bit_j"],[98,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[98,2,1,"","convert_to_compound_xor_cipher"],[98,3,1,"","current_round"],[98,3,1,"","current_round_number"],[98,3,1,"","current_round_number_of_components"],[98,2,1,"","delete_generated_evaluate_c_shared_library"],[98,2,1,"","diffusion_tests"],[98,2,1,"","evaluate"],[98,2,1,"","evaluate_using_c"],[98,2,1,"","evaluate_vectorized"],[98,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[98,3,1,"","family_name"],[98,3,1,"","file_name"],[98,2,1,"","find_good_input_difference_for_neural_distinguisher"],[98,2,1,"","find_impossible_property"],[98,2,1,"","generate_bit_based_c_code"],[98,2,1,"","generate_csv_report"],[98,2,1,"","generate_evaluate_c_code_shared_library"],[98,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[98,2,1,"","generate_word_based_c_code"],[98,2,1,"","get_all_components"],[98,2,1,"","get_all_components_ids"],[98,2,1,"","get_all_inputs_bit_positions"],[98,2,1,"","get_component_from_id"],[98,2,1,"","get_components_in_round"],[98,2,1,"","get_current_component_id"],[98,2,1,"","get_model"],[98,2,1,"","get_number_of_components_in_round"],[98,2,1,"","get_partial_cipher"],[98,2,1,"","get_round_from_component_id"],[98,2,1,"","get_sizes_of_components_by_type"],[98,3,1,"","id"],[98,2,1,"","impossible_differential_search"],[98,3,1,"","inputs"],[98,3,1,"","inputs_bit_size"],[98,2,1,"","inputs_size_to_dict"],[98,2,1,"","is_algebraically_secure"],[98,2,1,"","is_andrx"],[98,2,1,"","is_arx"],[98,2,1,"","is_power_of_2_word_based"],[98,2,1,"","is_shift_arx"],[98,2,1,"","is_spn"],[98,2,1,"","make_cipher_id"],[98,2,1,"","make_file_name"],[98,2,1,"","neural_network_blackbox_distinguisher_tests"],[98,2,1,"","neural_network_differential_distinguisher_tests"],[98,3,1,"","number_of_rounds"],[98,3,1,"","output_bit_size"],[98,2,1,"","permutation_layer"],[98,2,1,"","polynomial_system"],[98,2,1,"","polynomial_system_at_round"],[98,2,1,"","print"],[98,2,1,"","print_as_python_dictionary"],[98,2,1,"","print_as_python_dictionary_to_file"],[98,2,1,"","print_component_analysis_as_radar_charts"],[98,2,1,"","print_evaluation_python_code"],[98,2,1,"","print_evaluation_python_code_to_file"],[98,2,1,"","print_input_information"],[98,3,1,"","reference_code"],[98,2,1,"","remove_key_schedule"],[98,2,1,"","remove_round_component"],[98,2,1,"","remove_round_component_from_id"],[98,3,1,"","rounds"],[98,3,1,"","rounds_as_list"],[98,2,1,"","run_autond_pipeline"],[98,2,1,"","sbox_layer"],[98,2,1,"","set_file_name"],[98,2,1,"","set_id"],[98,2,1,"","set_inputs"],[98,2,1,"","sort_cipher"],[98,2,1,"","test_against_reference_code"],[98,2,1,"","test_vector_check"],[98,2,1,"","train_gohr_neural_distinguisher"],[98,2,1,"","train_neural_distinguisher"],[98,3,1,"","type"],[98,2,1,"","update_key_register"],[98,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.qarmav2_block_cipher":[[99,1,1,"","QARMAv2BlockCipher"]],"ciphers.block_ciphers.qarmav2_block_cipher.QARMAv2BlockCipher":[[99,2,1,"","M_function"],[99,2,1,"","add_AND_component"],[99,2,1,"","add_FSR_component"],[99,2,1,"","add_MODADD_component"],[99,2,1,"","add_MODSUB_component"],[99,2,1,"","add_NOT_component"],[99,2,1,"","add_OR_component"],[99,2,1,"","add_SBOX_component"],[99,2,1,"","add_SHIFT_component"],[99,2,1,"","add_XOR_component"],[99,2,1,"","add_cipher_output_component"],[99,2,1,"","add_concatenate_component"],[99,2,1,"","add_constant_component"],[99,2,1,"","add_intermediate_output_component"],[99,2,1,"","add_linear_layer_component"],[99,2,1,"","add_mix_column_component"],[99,2,1,"","add_permutation_component"],[99,2,1,"","add_reverse_component"],[99,2,1,"","add_rotate_component"],[99,2,1,"","add_round"],[99,2,1,"","add_round_key_output_component"],[99,2,1,"","add_round_output_component"],[99,2,1,"","add_shift_rows_component"],[99,2,1,"","add_sigma_component"],[99,2,1,"","add_suffix_to_components"],[99,2,1,"","add_theta_keccak_component"],[99,2,1,"","add_theta_xoodoo_component"],[99,2,1,"","add_variable_rotate_component"],[99,2,1,"","add_variable_shift_component"],[99,2,1,"","add_word_permutation_component"],[99,2,1,"","algebraic_tests"],[99,2,1,"","analyze_cipher"],[99,2,1,"","as_python_dictionary"],[99,2,1,"","avalanche_probability_vectors"],[99,2,1,"","cipher_inverse"],[99,2,1,"","cipher_partial_inverse"],[99,2,1,"","component_analysis_tests"],[99,2,1,"","component_from"],[99,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[99,2,1,"","continuous_avalanche_factor"],[99,2,1,"","continuous_diffusion_factor"],[99,2,1,"","continuous_diffusion_tests"],[99,2,1,"","continuous_neutrality_measure_for_bit_j"],[99,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[99,2,1,"","convert_to_compound_xor_cipher"],[99,3,1,"","current_round"],[99,3,1,"","current_round_number"],[99,3,1,"","current_round_number_of_components"],[99,2,1,"","delete_generated_evaluate_c_shared_library"],[99,2,1,"","diffusion_tests"],[99,2,1,"","evaluate"],[99,2,1,"","evaluate_using_c"],[99,2,1,"","evaluate_vectorized"],[99,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[99,3,1,"","family_name"],[99,3,1,"","file_name"],[99,2,1,"","find_good_input_difference_for_neural_distinguisher"],[99,2,1,"","find_impossible_property"],[99,2,1,"","generate_bit_based_c_code"],[99,2,1,"","generate_csv_report"],[99,2,1,"","generate_evaluate_c_code_shared_library"],[99,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[99,2,1,"","generate_word_based_c_code"],[99,2,1,"","get_all_components"],[99,2,1,"","get_all_components_ids"],[99,2,1,"","get_all_inputs_bit_positions"],[99,2,1,"","get_component_from_id"],[99,2,1,"","get_components_in_round"],[99,2,1,"","get_current_component_id"],[99,2,1,"","get_model"],[99,2,1,"","get_number_of_components_in_round"],[99,2,1,"","get_partial_cipher"],[99,2,1,"","get_round_from_component_id"],[99,2,1,"","get_sizes_of_components_by_type"],[99,3,1,"","id"],[99,2,1,"","impossible_differential_search"],[99,3,1,"","inputs"],[99,3,1,"","inputs_bit_size"],[99,2,1,"","inputs_size_to_dict"],[99,2,1,"","is_algebraically_secure"],[99,2,1,"","is_andrx"],[99,2,1,"","is_arx"],[99,2,1,"","is_power_of_2_word_based"],[99,2,1,"","is_shift_arx"],[99,2,1,"","is_spn"],[99,2,1,"","majority_function"],[99,2,1,"","make_cipher_id"],[99,2,1,"","make_file_name"],[99,2,1,"","neural_network_blackbox_distinguisher_tests"],[99,2,1,"","neural_network_differential_distinguisher_tests"],[99,3,1,"","number_of_rounds"],[99,2,1,"","o_function"],[99,3,1,"","output_bit_size"],[99,2,1,"","polynomial_system"],[99,2,1,"","polynomial_system_at_round"],[99,2,1,"","print"],[99,2,1,"","print_as_python_dictionary"],[99,2,1,"","print_as_python_dictionary_to_file"],[99,2,1,"","print_component_analysis_as_radar_charts"],[99,2,1,"","print_evaluation_python_code"],[99,2,1,"","print_evaluation_python_code_to_file"],[99,2,1,"","print_input_information"],[99,3,1,"","reference_code"],[99,2,1,"","remove_key_schedule"],[99,2,1,"","remove_round_component"],[99,2,1,"","remove_round_component_from_id"],[99,3,1,"","rounds"],[99,3,1,"","rounds_as_list"],[99,2,1,"","run_autond_pipeline"],[99,2,1,"","set_file_name"],[99,2,1,"","set_id"],[99,2,1,"","set_inputs"],[99,2,1,"","sort_cipher"],[99,2,1,"","test_against_reference_code"],[99,2,1,"","test_vector_check"],[99,2,1,"","train_gohr_neural_distinguisher"],[99,2,1,"","train_neural_distinguisher"],[99,3,1,"","type"],[99,2,1,"","update_constants"],[99,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.raiden_block_cipher":[[100,1,1,"","RaidenBlockCipher"]],"ciphers.block_ciphers.raiden_block_cipher.RaidenBlockCipher":[[100,2,1,"","add_AND_component"],[100,2,1,"","add_FSR_component"],[100,2,1,"","add_MODADD_component"],[100,2,1,"","add_MODSUB_component"],[100,2,1,"","add_NOT_component"],[100,2,1,"","add_OR_component"],[100,2,1,"","add_SBOX_component"],[100,2,1,"","add_SHIFT_component"],[100,2,1,"","add_XOR_component"],[100,2,1,"","add_cipher_output_component"],[100,2,1,"","add_concatenate_component"],[100,2,1,"","add_constant_component"],[100,2,1,"","add_intermediate_output_component"],[100,2,1,"","add_linear_layer_component"],[100,2,1,"","add_mix_column_component"],[100,2,1,"","add_permutation_component"],[100,2,1,"","add_reverse_component"],[100,2,1,"","add_rotate_component"],[100,2,1,"","add_round"],[100,2,1,"","add_round_key_output_component"],[100,2,1,"","add_round_output_component"],[100,2,1,"","add_shift_rows_component"],[100,2,1,"","add_sigma_component"],[100,2,1,"","add_suffix_to_components"],[100,2,1,"","add_theta_keccak_component"],[100,2,1,"","add_theta_xoodoo_component"],[100,2,1,"","add_variable_rotate_component"],[100,2,1,"","add_variable_shift_component"],[100,2,1,"","add_word_permutation_component"],[100,2,1,"","algebraic_tests"],[100,2,1,"","analyze_cipher"],[100,2,1,"","as_python_dictionary"],[100,2,1,"","avalanche_probability_vectors"],[100,2,1,"","cipher_inverse"],[100,2,1,"","cipher_partial_inverse"],[100,2,1,"","component_analysis_tests"],[100,2,1,"","component_from"],[100,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[100,2,1,"","continuous_avalanche_factor"],[100,2,1,"","continuous_diffusion_factor"],[100,2,1,"","continuous_diffusion_tests"],[100,2,1,"","continuous_neutrality_measure_for_bit_j"],[100,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[100,2,1,"","convert_to_compound_xor_cipher"],[100,3,1,"","current_round"],[100,3,1,"","current_round_number"],[100,3,1,"","current_round_number_of_components"],[100,2,1,"","delete_generated_evaluate_c_shared_library"],[100,2,1,"","diffusion_tests"],[100,2,1,"","evaluate"],[100,2,1,"","evaluate_using_c"],[100,2,1,"","evaluate_vectorized"],[100,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[100,3,1,"","family_name"],[100,3,1,"","file_name"],[100,2,1,"","find_good_input_difference_for_neural_distinguisher"],[100,2,1,"","find_impossible_property"],[100,2,1,"","generate_bit_based_c_code"],[100,2,1,"","generate_csv_report"],[100,2,1,"","generate_evaluate_c_code_shared_library"],[100,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[100,2,1,"","generate_word_based_c_code"],[100,2,1,"","get_all_components"],[100,2,1,"","get_all_components_ids"],[100,2,1,"","get_all_inputs_bit_positions"],[100,2,1,"","get_component_from_id"],[100,2,1,"","get_components_in_round"],[100,2,1,"","get_current_component_id"],[100,2,1,"","get_model"],[100,2,1,"","get_number_of_components_in_round"],[100,2,1,"","get_partial_cipher"],[100,2,1,"","get_round_from_component_id"],[100,2,1,"","get_sizes_of_components_by_type"],[100,3,1,"","id"],[100,2,1,"","impossible_differential_search"],[100,3,1,"","inputs"],[100,3,1,"","inputs_bit_size"],[100,2,1,"","inputs_size_to_dict"],[100,2,1,"","is_algebraically_secure"],[100,2,1,"","is_andrx"],[100,2,1,"","is_arx"],[100,2,1,"","is_power_of_2_word_based"],[100,2,1,"","is_shift_arx"],[100,2,1,"","is_spn"],[100,2,1,"","make_cipher_id"],[100,2,1,"","make_file_name"],[100,2,1,"","neural_network_blackbox_distinguisher_tests"],[100,2,1,"","neural_network_differential_distinguisher_tests"],[100,3,1,"","number_of_rounds"],[100,3,1,"","output_bit_size"],[100,2,1,"","polynomial_system"],[100,2,1,"","polynomial_system_at_round"],[100,2,1,"","print"],[100,2,1,"","print_as_python_dictionary"],[100,2,1,"","print_as_python_dictionary_to_file"],[100,2,1,"","print_component_analysis_as_radar_charts"],[100,2,1,"","print_evaluation_python_code"],[100,2,1,"","print_evaluation_python_code_to_file"],[100,2,1,"","print_input_information"],[100,3,1,"","reference_code"],[100,2,1,"","remove_key_schedule"],[100,2,1,"","remove_round_component"],[100,2,1,"","remove_round_component_from_id"],[100,3,1,"","rounds"],[100,3,1,"","rounds_as_list"],[100,2,1,"","run_autond_pipeline"],[100,2,1,"","set_file_name"],[100,2,1,"","set_id"],[100,2,1,"","set_inputs"],[100,2,1,"","sort_cipher"],[100,2,1,"","test_against_reference_code"],[100,2,1,"","test_vector_check"],[100,2,1,"","train_gohr_neural_distinguisher"],[100,2,1,"","train_neural_distinguisher"],[100,3,1,"","type"],[100,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.rc5_block_cipher":[[101,1,1,"","RC5BlockCipher"]],"ciphers.block_ciphers.rc5_block_cipher.RC5BlockCipher":[[101,2,1,"","add_AND_component"],[101,2,1,"","add_FSR_component"],[101,2,1,"","add_MODADD_component"],[101,2,1,"","add_MODSUB_component"],[101,2,1,"","add_NOT_component"],[101,2,1,"","add_OR_component"],[101,2,1,"","add_SBOX_component"],[101,2,1,"","add_SHIFT_component"],[101,2,1,"","add_XOR_component"],[101,2,1,"","add_cipher_output_component"],[101,2,1,"","add_concatenate_component"],[101,2,1,"","add_constant_component"],[101,2,1,"","add_intermediate_output_component"],[101,2,1,"","add_linear_layer_component"],[101,2,1,"","add_mix_column_component"],[101,2,1,"","add_permutation_component"],[101,2,1,"","add_reverse_component"],[101,2,1,"","add_rotate_component"],[101,2,1,"","add_round"],[101,2,1,"","add_round_key_output_component"],[101,2,1,"","add_round_output_component"],[101,2,1,"","add_shift_rows_component"],[101,2,1,"","add_sigma_component"],[101,2,1,"","add_suffix_to_components"],[101,2,1,"","add_theta_keccak_component"],[101,2,1,"","add_theta_xoodoo_component"],[101,2,1,"","add_variable_rotate_component"],[101,2,1,"","add_variable_shift_component"],[101,2,1,"","add_word_permutation_component"],[101,2,1,"","algebraic_tests"],[101,2,1,"","analyze_cipher"],[101,2,1,"","as_python_dictionary"],[101,2,1,"","avalanche_probability_vectors"],[101,2,1,"","cipher_inverse"],[101,2,1,"","cipher_partial_inverse"],[101,2,1,"","component_analysis_tests"],[101,2,1,"","component_from"],[101,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[101,2,1,"","compute_magic_constants"],[101,2,1,"","continuous_avalanche_factor"],[101,2,1,"","continuous_diffusion_factor"],[101,2,1,"","continuous_diffusion_tests"],[101,2,1,"","continuous_neutrality_measure_for_bit_j"],[101,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[101,2,1,"","convert_to_compound_xor_cipher"],[101,3,1,"","current_round"],[101,3,1,"","current_round_number"],[101,3,1,"","current_round_number_of_components"],[101,2,1,"","delete_generated_evaluate_c_shared_library"],[101,2,1,"","diffusion_tests"],[101,2,1,"","evaluate"],[101,2,1,"","evaluate_using_c"],[101,2,1,"","evaluate_vectorized"],[101,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[101,3,1,"","family_name"],[101,3,1,"","file_name"],[101,2,1,"","find_good_input_difference_for_neural_distinguisher"],[101,2,1,"","find_impossible_property"],[101,2,1,"","first_round"],[101,2,1,"","generate_bit_based_c_code"],[101,2,1,"","generate_csv_report"],[101,2,1,"","generate_evaluate_c_code_shared_library"],[101,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[101,2,1,"","generate_word_based_c_code"],[101,2,1,"","get_all_components"],[101,2,1,"","get_all_components_ids"],[101,2,1,"","get_all_inputs_bit_positions"],[101,2,1,"","get_component_from_id"],[101,2,1,"","get_components_in_round"],[101,2,1,"","get_current_component_id"],[101,2,1,"","get_model"],[101,2,1,"","get_number_of_components_in_round"],[101,2,1,"","get_partial_cipher"],[101,2,1,"","get_round_from_component_id"],[101,2,1,"","get_sizes_of_components_by_type"],[101,3,1,"","id"],[101,2,1,"","impossible_differential_search"],[101,3,1,"","inputs"],[101,3,1,"","inputs_bit_size"],[101,2,1,"","inputs_size_to_dict"],[101,2,1,"","is_algebraically_secure"],[101,2,1,"","is_andrx"],[101,2,1,"","is_arx"],[101,2,1,"","is_power_of_2_word_based"],[101,2,1,"","is_shift_arx"],[101,2,1,"","is_spn"],[101,2,1,"","key_expansion"],[101,2,1,"","make_cipher_id"],[101,2,1,"","make_file_name"],[101,2,1,"","neural_network_blackbox_distinguisher_tests"],[101,2,1,"","neural_network_differential_distinguisher_tests"],[101,3,1,"","number_of_rounds"],[101,3,1,"","output_bit_size"],[101,2,1,"","polynomial_system"],[101,2,1,"","polynomial_system_at_round"],[101,2,1,"","print"],[101,2,1,"","print_as_python_dictionary"],[101,2,1,"","print_as_python_dictionary_to_file"],[101,2,1,"","print_component_analysis_as_radar_charts"],[101,2,1,"","print_evaluation_python_code"],[101,2,1,"","print_evaluation_python_code_to_file"],[101,2,1,"","print_input_information"],[101,3,1,"","reference_code"],[101,2,1,"","remove_key_schedule"],[101,2,1,"","remove_round_component"],[101,2,1,"","remove_round_component_from_id"],[101,2,1,"","round_function"],[101,3,1,"","rounds"],[101,3,1,"","rounds_as_list"],[101,2,1,"","run_autond_pipeline"],[101,2,1,"","set_file_name"],[101,2,1,"","set_id"],[101,2,1,"","set_inputs"],[101,2,1,"","sort_cipher"],[101,2,1,"","test_against_reference_code"],[101,2,1,"","test_vector_check"],[101,2,1,"","train_gohr_neural_distinguisher"],[101,2,1,"","train_neural_distinguisher"],[101,3,1,"","type"],[101,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.simon_block_cipher":[[102,1,1,"","SimonBlockCipher"]],"ciphers.block_ciphers.simon_block_cipher.SimonBlockCipher":[[102,2,1,"","add_AND_component"],[102,2,1,"","add_FSR_component"],[102,2,1,"","add_MODADD_component"],[102,2,1,"","add_MODSUB_component"],[102,2,1,"","add_NOT_component"],[102,2,1,"","add_OR_component"],[102,2,1,"","add_SBOX_component"],[102,2,1,"","add_SHIFT_component"],[102,2,1,"","add_XOR_component"],[102,2,1,"","add_cipher_output_component"],[102,2,1,"","add_concatenate_component"],[102,2,1,"","add_constant_component"],[102,2,1,"","add_intermediate_output_component"],[102,2,1,"","add_linear_layer_component"],[102,2,1,"","add_mix_column_component"],[102,2,1,"","add_permutation_component"],[102,2,1,"","add_reverse_component"],[102,2,1,"","add_rotate_component"],[102,2,1,"","add_round"],[102,2,1,"","add_round_key_output_component"],[102,2,1,"","add_round_output_component"],[102,2,1,"","add_shift_rows_component"],[102,2,1,"","add_sigma_component"],[102,2,1,"","add_suffix_to_components"],[102,2,1,"","add_theta_keccak_component"],[102,2,1,"","add_theta_xoodoo_component"],[102,2,1,"","add_variable_rotate_component"],[102,2,1,"","add_variable_shift_component"],[102,2,1,"","add_word_permutation_component"],[102,2,1,"","algebraic_tests"],[102,2,1,"","analyze_cipher"],[102,2,1,"","as_python_dictionary"],[102,2,1,"","avalanche_probability_vectors"],[102,2,1,"","cipher_inverse"],[102,2,1,"","cipher_partial_inverse"],[102,2,1,"","component_analysis_tests"],[102,2,1,"","component_from"],[102,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[102,2,1,"","continuous_avalanche_factor"],[102,2,1,"","continuous_diffusion_factor"],[102,2,1,"","continuous_diffusion_tests"],[102,2,1,"","continuous_neutrality_measure_for_bit_j"],[102,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[102,2,1,"","convert_to_compound_xor_cipher"],[102,3,1,"","current_round"],[102,3,1,"","current_round_number"],[102,3,1,"","current_round_number_of_components"],[102,2,1,"","delete_generated_evaluate_c_shared_library"],[102,2,1,"","diffusion_tests"],[102,2,1,"","evaluate"],[102,2,1,"","evaluate_using_c"],[102,2,1,"","evaluate_vectorized"],[102,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[102,2,1,"","f"],[102,3,1,"","family_name"],[102,2,1,"","feistel_function"],[102,3,1,"","file_name"],[102,2,1,"","find_good_input_difference_for_neural_distinguisher"],[102,2,1,"","find_impossible_property"],[102,2,1,"","generate_bit_based_c_code"],[102,2,1,"","generate_csv_report"],[102,2,1,"","generate_evaluate_c_code_shared_library"],[102,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[102,2,1,"","generate_round_key"],[102,2,1,"","generate_word_based_c_code"],[102,2,1,"","get_all_components"],[102,2,1,"","get_all_components_ids"],[102,2,1,"","get_all_inputs_bit_positions"],[102,2,1,"","get_component_from_id"],[102,2,1,"","get_components_in_round"],[102,2,1,"","get_current_component_id"],[102,2,1,"","get_model"],[102,2,1,"","get_number_of_components_in_round"],[102,2,1,"","get_partial_cipher"],[102,2,1,"","get_round_from_component_id"],[102,2,1,"","get_sizes_of_components_by_type"],[102,3,1,"","id"],[102,2,1,"","impossible_differential_search"],[102,3,1,"","inputs"],[102,3,1,"","inputs_bit_size"],[102,2,1,"","inputs_size_to_dict"],[102,2,1,"","is_algebraically_secure"],[102,2,1,"","is_andrx"],[102,2,1,"","is_arx"],[102,2,1,"","is_power_of_2_word_based"],[102,2,1,"","is_shift_arx"],[102,2,1,"","is_spn"],[102,2,1,"","make_cipher_id"],[102,2,1,"","make_file_name"],[102,2,1,"","neural_network_blackbox_distinguisher_tests"],[102,2,1,"","neural_network_differential_distinguisher_tests"],[102,3,1,"","number_of_rounds"],[102,3,1,"","output_bit_size"],[102,2,1,"","polynomial_system"],[102,2,1,"","polynomial_system_at_round"],[102,2,1,"","print"],[102,2,1,"","print_as_python_dictionary"],[102,2,1,"","print_as_python_dictionary_to_file"],[102,2,1,"","print_component_analysis_as_radar_charts"],[102,2,1,"","print_evaluation_python_code"],[102,2,1,"","print_evaluation_python_code_to_file"],[102,2,1,"","print_input_information"],[102,3,1,"","reference_code"],[102,2,1,"","remove_key_schedule"],[102,2,1,"","remove_round_component"],[102,2,1,"","remove_round_component_from_id"],[102,3,1,"","rounds"],[102,3,1,"","rounds_as_list"],[102,2,1,"","run_autond_pipeline"],[102,2,1,"","set_file_name"],[102,2,1,"","set_id"],[102,2,1,"","set_inputs"],[102,2,1,"","sort_cipher"],[102,2,1,"","test_against_reference_code"],[102,2,1,"","test_vector_check"],[102,2,1,"","train_gohr_neural_distinguisher"],[102,2,1,"","train_neural_distinguisher"],[102,3,1,"","type"],[102,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.skinny_block_cipher":[[103,1,1,"","SkinnyBlockCipher"],[103,4,1,"","add_shift_rows_components"],[103,4,1,"","key_initialization"],[103,4,1,"","state_initialization"]],"ciphers.block_ciphers.skinny_block_cipher.SkinnyBlockCipher":[[103,2,1,"","add_AND_component"],[103,2,1,"","add_FSR_component"],[103,2,1,"","add_MODADD_component"],[103,2,1,"","add_MODSUB_component"],[103,2,1,"","add_NOT_component"],[103,2,1,"","add_OR_component"],[103,2,1,"","add_SBOX_component"],[103,2,1,"","add_SHIFT_component"],[103,2,1,"","add_XOR_component"],[103,2,1,"","add_add_round_tweakey"],[103,2,1,"","add_cipher_output_component"],[103,2,1,"","add_concatenate_component"],[103,2,1,"","add_constant_component"],[103,2,1,"","add_intermediate_output_component"],[103,2,1,"","add_linear_layer_component"],[103,2,1,"","add_mix_column_component"],[103,2,1,"","add_mix_column_serials"],[103,2,1,"","add_output_component"],[103,2,1,"","add_permutation_component"],[103,2,1,"","add_reverse_component"],[103,2,1,"","add_rotate_component"],[103,2,1,"","add_round"],[103,2,1,"","add_round_key_output_component"],[103,2,1,"","add_round_output_component"],[103,2,1,"","add_shift_rows_component"],[103,2,1,"","add_sigma_component"],[103,2,1,"","add_suffix_to_components"],[103,2,1,"","add_theta_keccak_component"],[103,2,1,"","add_theta_xoodoo_component"],[103,2,1,"","add_variable_rotate_component"],[103,2,1,"","add_variable_shift_component"],[103,2,1,"","add_word_permutation_component"],[103,2,1,"","algebraic_tests"],[103,2,1,"","analyze_cipher"],[103,2,1,"","as_python_dictionary"],[103,2,1,"","avalanche_probability_vectors"],[103,2,1,"","cipher_inverse"],[103,2,1,"","cipher_partial_inverse"],[103,2,1,"","component_analysis_tests"],[103,2,1,"","component_from"],[103,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[103,2,1,"","continuous_avalanche_factor"],[103,2,1,"","continuous_diffusion_factor"],[103,2,1,"","continuous_diffusion_tests"],[103,2,1,"","continuous_neutrality_measure_for_bit_j"],[103,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[103,2,1,"","convert_to_compound_xor_cipher"],[103,3,1,"","current_round"],[103,3,1,"","current_round_number"],[103,3,1,"","current_round_number_of_components"],[103,2,1,"","delete_generated_evaluate_c_shared_library"],[103,2,1,"","diffusion_tests"],[103,2,1,"","evaluate"],[103,2,1,"","evaluate_using_c"],[103,2,1,"","evaluate_vectorized"],[103,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[103,3,1,"","family_name"],[103,3,1,"","file_name"],[103,2,1,"","find_good_input_difference_for_neural_distinguisher"],[103,2,1,"","find_impossible_property"],[103,2,1,"","generate_bit_based_c_code"],[103,2,1,"","generate_csv_report"],[103,2,1,"","generate_evaluate_c_code_shared_library"],[103,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[103,2,1,"","generate_word_based_c_code"],[103,2,1,"","get_all_components"],[103,2,1,"","get_all_components_ids"],[103,2,1,"","get_all_inputs_bit_positions"],[103,2,1,"","get_component_from_id"],[103,2,1,"","get_components_in_round"],[103,2,1,"","get_current_component_id"],[103,2,1,"","get_model"],[103,2,1,"","get_number_of_components_in_round"],[103,2,1,"","get_partial_cipher"],[103,2,1,"","get_round_from_component_id"],[103,2,1,"","get_sizes_of_components_by_type"],[103,3,1,"","id"],[103,2,1,"","impossible_differential_search"],[103,2,1,"","initial_round_elements_definition"],[103,3,1,"","inputs"],[103,3,1,"","inputs_bit_size"],[103,2,1,"","inputs_size_to_dict"],[103,2,1,"","is_algebraically_secure"],[103,2,1,"","is_andrx"],[103,2,1,"","is_arx"],[103,2,1,"","is_power_of_2_word_based"],[103,2,1,"","is_shift_arx"],[103,2,1,"","is_spn"],[103,2,1,"","key_schedule"],[103,2,1,"","make_cipher_id"],[103,2,1,"","make_file_name"],[103,2,1,"","neural_network_blackbox_distinguisher_tests"],[103,2,1,"","neural_network_differential_distinguisher_tests"],[103,3,1,"","number_of_rounds"],[103,3,1,"","output_bit_size"],[103,2,1,"","polynomial_system"],[103,2,1,"","polynomial_system_at_round"],[103,2,1,"","print"],[103,2,1,"","print_as_python_dictionary"],[103,2,1,"","print_as_python_dictionary_to_file"],[103,2,1,"","print_component_analysis_as_radar_charts"],[103,2,1,"","print_evaluation_python_code"],[103,2,1,"","print_evaluation_python_code_to_file"],[103,2,1,"","print_input_information"],[103,3,1,"","reference_code"],[103,2,1,"","remove_key_schedule"],[103,2,1,"","remove_round_component"],[103,2,1,"","remove_round_component_from_id"],[103,2,1,"","round_function"],[103,3,1,"","rounds"],[103,3,1,"","rounds_as_list"],[103,2,1,"","run_autond_pipeline"],[103,2,1,"","set_file_name"],[103,2,1,"","set_id"],[103,2,1,"","set_inputs"],[103,2,1,"","sort_cipher"],[103,2,1,"","test_against_reference_code"],[103,2,1,"","test_vector_check"],[103,2,1,"","train_gohr_neural_distinguisher"],[103,2,1,"","train_neural_distinguisher"],[103,3,1,"","type"],[103,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.sparx_block_cipher":[[104,1,1,"","SparxBlockCipher"],[104,4,1,"","get_number_of_steps_from"]],"ciphers.block_ciphers.sparx_block_cipher.SparxBlockCipher":[[104,2,1,"","K_4_128"],[104,2,1,"","K_4_64"],[104,2,1,"","K_8_256"],[104,2,1,"","add_AND_component"],[104,2,1,"","add_FSR_component"],[104,2,1,"","add_MODADD_component"],[104,2,1,"","add_MODSUB_component"],[104,2,1,"","add_NOT_component"],[104,2,1,"","add_OR_component"],[104,2,1,"","add_SBOX_component"],[104,2,1,"","add_SHIFT_component"],[104,2,1,"","add_XOR_component"],[104,2,1,"","add_cipher_output_component"],[104,2,1,"","add_concatenate_component"],[104,2,1,"","add_constant_component"],[104,2,1,"","add_intermediate_output_component"],[104,2,1,"","add_linear_layer_component"],[104,2,1,"","add_mix_column_component"],[104,2,1,"","add_permutation_component"],[104,2,1,"","add_reverse_component"],[104,2,1,"","add_rotate_component"],[104,2,1,"","add_round"],[104,2,1,"","add_round_key_output_component"],[104,2,1,"","add_round_output_component"],[104,2,1,"","add_shift_rows_component"],[104,2,1,"","add_sigma_component"],[104,2,1,"","add_suffix_to_components"],[104,2,1,"","add_theta_keccak_component"],[104,2,1,"","add_theta_xoodoo_component"],[104,2,1,"","add_variable_rotate_component"],[104,2,1,"","add_variable_shift_component"],[104,2,1,"","add_word_permutation_component"],[104,2,1,"","algebraic_tests"],[104,2,1,"","analyze_cipher"],[104,2,1,"","arx_box"],[104,2,1,"","as_python_dictionary"],[104,2,1,"","assign_functions_based_on"],[104,2,1,"","avalanche_probability_vectors"],[104,2,1,"","cipher_inverse"],[104,2,1,"","cipher_partial_inverse"],[104,2,1,"","component_analysis_tests"],[104,2,1,"","component_from"],[104,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[104,2,1,"","continuous_avalanche_factor"],[104,2,1,"","continuous_diffusion_factor"],[104,2,1,"","continuous_diffusion_tests"],[104,2,1,"","continuous_neutrality_measure_for_bit_j"],[104,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[104,2,1,"","convert_to_compound_xor_cipher"],[104,3,1,"","current_round"],[104,3,1,"","current_round_number"],[104,3,1,"","current_round_number_of_components"],[104,2,1,"","delete_generated_evaluate_c_shared_library"],[104,2,1,"","diffusion_tests"],[104,2,1,"","evaluate"],[104,2,1,"","evaluate_using_c"],[104,2,1,"","evaluate_vectorized"],[104,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[104,3,1,"","family_name"],[104,3,1,"","file_name"],[104,2,1,"","find_good_input_difference_for_neural_distinguisher"],[104,2,1,"","find_impossible_property"],[104,2,1,"","generate_bit_based_c_code"],[104,2,1,"","generate_csv_report"],[104,2,1,"","generate_evaluate_c_code_shared_library"],[104,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[104,2,1,"","generate_word_based_c_code"],[104,2,1,"","get_all_components"],[104,2,1,"","get_all_components_ids"],[104,2,1,"","get_all_inputs_bit_positions"],[104,2,1,"","get_component_from_id"],[104,2,1,"","get_components_in_round"],[104,2,1,"","get_current_component_id"],[104,2,1,"","get_model"],[104,2,1,"","get_number_of_components_in_round"],[104,2,1,"","get_partial_cipher"],[104,2,1,"","get_round_from_component_id"],[104,2,1,"","get_sizes_of_components_by_type"],[104,3,1,"","id"],[104,2,1,"","impossible_differential_search"],[104,3,1,"","inputs"],[104,3,1,"","inputs_bit_size"],[104,2,1,"","inputs_size_to_dict"],[104,2,1,"","is_algebraically_secure"],[104,2,1,"","is_andrx"],[104,2,1,"","is_arx"],[104,2,1,"","is_power_of_2_word_based"],[104,2,1,"","is_shift_arx"],[104,2,1,"","is_spn"],[104,2,1,"","lambda_2"],[104,2,1,"","lambda_4"],[104,2,1,"","make_cipher_id"],[104,2,1,"","make_file_name"],[104,2,1,"","neural_network_blackbox_distinguisher_tests"],[104,2,1,"","neural_network_differential_distinguisher_tests"],[104,3,1,"","number_of_rounds"],[104,3,1,"","output_bit_size"],[104,2,1,"","polynomial_system"],[104,2,1,"","polynomial_system_at_round"],[104,2,1,"","print"],[104,2,1,"","print_as_python_dictionary"],[104,2,1,"","print_as_python_dictionary_to_file"],[104,2,1,"","print_component_analysis_as_radar_charts"],[104,2,1,"","print_evaluation_python_code"],[104,2,1,"","print_evaluation_python_code_to_file"],[104,2,1,"","print_input_information"],[104,3,1,"","reference_code"],[104,2,1,"","remove_key_schedule"],[104,2,1,"","remove_round_component"],[104,2,1,"","remove_round_component_from_id"],[104,3,1,"","rounds"],[104,3,1,"","rounds_as_list"],[104,2,1,"","run_autond_pipeline"],[104,2,1,"","set_file_name"],[104,2,1,"","set_id"],[104,2,1,"","set_inputs"],[104,2,1,"","sort_cipher"],[104,2,1,"","test_against_reference_code"],[104,2,1,"","test_vector_check"],[104,2,1,"","train_gohr_neural_distinguisher"],[104,2,1,"","train_neural_distinguisher"],[104,3,1,"","type"],[104,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.speck_block_cipher":[[105,1,1,"","SpeckBlockCipher"]],"ciphers.block_ciphers.speck_block_cipher.SpeckBlockCipher":[[105,2,1,"","add_AND_component"],[105,2,1,"","add_FSR_component"],[105,2,1,"","add_MODADD_component"],[105,2,1,"","add_MODSUB_component"],[105,2,1,"","add_NOT_component"],[105,2,1,"","add_OR_component"],[105,2,1,"","add_SBOX_component"],[105,2,1,"","add_SHIFT_component"],[105,2,1,"","add_XOR_component"],[105,2,1,"","add_cipher_output_component"],[105,2,1,"","add_concatenate_component"],[105,2,1,"","add_constant_component"],[105,2,1,"","add_intermediate_output_component"],[105,2,1,"","add_linear_layer_component"],[105,2,1,"","add_mix_column_component"],[105,2,1,"","add_output_component"],[105,2,1,"","add_permutation_component"],[105,2,1,"","add_reverse_component"],[105,2,1,"","add_rotate_component"],[105,2,1,"","add_round"],[105,2,1,"","add_round_key_output_component"],[105,2,1,"","add_round_output_component"],[105,2,1,"","add_shift_rows_component"],[105,2,1,"","add_sigma_component"],[105,2,1,"","add_suffix_to_components"],[105,2,1,"","add_theta_keccak_component"],[105,2,1,"","add_theta_xoodoo_component"],[105,2,1,"","add_variable_rotate_component"],[105,2,1,"","add_variable_shift_component"],[105,2,1,"","add_word_permutation_component"],[105,2,1,"","algebraic_tests"],[105,2,1,"","analyze_cipher"],[105,2,1,"","as_python_dictionary"],[105,2,1,"","avalanche_probability_vectors"],[105,2,1,"","cipher_inverse"],[105,2,1,"","cipher_partial_inverse"],[105,2,1,"","component_analysis_tests"],[105,2,1,"","component_from"],[105,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[105,2,1,"","continuous_avalanche_factor"],[105,2,1,"","continuous_diffusion_factor"],[105,2,1,"","continuous_diffusion_tests"],[105,2,1,"","continuous_neutrality_measure_for_bit_j"],[105,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[105,2,1,"","convert_to_compound_xor_cipher"],[105,3,1,"","current_round"],[105,3,1,"","current_round_number"],[105,3,1,"","current_round_number_of_components"],[105,2,1,"","delete_generated_evaluate_c_shared_library"],[105,2,1,"","diffusion_tests"],[105,2,1,"","evaluate"],[105,2,1,"","evaluate_using_c"],[105,2,1,"","evaluate_vectorized"],[105,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[105,3,1,"","family_name"],[105,3,1,"","file_name"],[105,2,1,"","find_good_input_difference_for_neural_distinguisher"],[105,2,1,"","find_impossible_property"],[105,2,1,"","generate_bit_based_c_code"],[105,2,1,"","generate_csv_report"],[105,2,1,"","generate_evaluate_c_code_shared_library"],[105,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[105,2,1,"","generate_word_based_c_code"],[105,2,1,"","get_all_components"],[105,2,1,"","get_all_components_ids"],[105,2,1,"","get_all_inputs_bit_positions"],[105,2,1,"","get_component_from_id"],[105,2,1,"","get_components_in_round"],[105,2,1,"","get_current_component_id"],[105,2,1,"","get_model"],[105,2,1,"","get_number_of_components_in_round"],[105,2,1,"","get_partial_cipher"],[105,2,1,"","get_round_from_component_id"],[105,2,1,"","get_sizes_of_components_by_type"],[105,3,1,"","id"],[105,2,1,"","impossible_differential_search"],[105,3,1,"","inputs"],[105,3,1,"","inputs_bit_size"],[105,2,1,"","inputs_size_to_dict"],[105,2,1,"","is_algebraically_secure"],[105,2,1,"","is_andrx"],[105,2,1,"","is_arx"],[105,2,1,"","is_power_of_2_word_based"],[105,2,1,"","is_shift_arx"],[105,2,1,"","is_spn"],[105,2,1,"","key_initialization"],[105,2,1,"","make_cipher_id"],[105,2,1,"","make_file_name"],[105,2,1,"","neural_network_blackbox_distinguisher_tests"],[105,2,1,"","neural_network_differential_distinguisher_tests"],[105,3,1,"","number_of_rounds"],[105,3,1,"","output_bit_size"],[105,2,1,"","polynomial_system"],[105,2,1,"","polynomial_system_at_round"],[105,2,1,"","print"],[105,2,1,"","print_as_python_dictionary"],[105,2,1,"","print_as_python_dictionary_to_file"],[105,2,1,"","print_component_analysis_as_radar_charts"],[105,2,1,"","print_evaluation_python_code"],[105,2,1,"","print_evaluation_python_code_to_file"],[105,2,1,"","print_input_information"],[105,3,1,"","reference_code"],[105,2,1,"","remove_key_schedule"],[105,2,1,"","remove_round_component"],[105,2,1,"","remove_round_component_from_id"],[105,2,1,"","round_function"],[105,2,1,"","round_initialization"],[105,3,1,"","rounds"],[105,3,1,"","rounds_as_list"],[105,2,1,"","run_autond_pipeline"],[105,2,1,"","set_file_name"],[105,2,1,"","set_id"],[105,2,1,"","set_inputs"],[105,2,1,"","sort_cipher"],[105,2,1,"","test_against_reference_code"],[105,2,1,"","test_vector_check"],[105,2,1,"","train_gohr_neural_distinguisher"],[105,2,1,"","train_neural_distinguisher"],[105,3,1,"","type"],[105,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.tea_block_cipher":[[106,1,1,"","TeaBlockCipher"]],"ciphers.block_ciphers.tea_block_cipher.TeaBlockCipher":[[106,2,1,"","add_AND_component"],[106,2,1,"","add_FSR_component"],[106,2,1,"","add_MODADD_component"],[106,2,1,"","add_MODSUB_component"],[106,2,1,"","add_NOT_component"],[106,2,1,"","add_OR_component"],[106,2,1,"","add_SBOX_component"],[106,2,1,"","add_SHIFT_component"],[106,2,1,"","add_XOR_component"],[106,2,1,"","add_cipher_output_component"],[106,2,1,"","add_concatenate_component"],[106,2,1,"","add_constant_component"],[106,2,1,"","add_intermediate_output_component"],[106,2,1,"","add_linear_layer_component"],[106,2,1,"","add_mix_column_component"],[106,2,1,"","add_permutation_component"],[106,2,1,"","add_reverse_component"],[106,2,1,"","add_rotate_component"],[106,2,1,"","add_round"],[106,2,1,"","add_round_key_output_component"],[106,2,1,"","add_round_output_component"],[106,2,1,"","add_shift_rows_component"],[106,2,1,"","add_sigma_component"],[106,2,1,"","add_suffix_to_components"],[106,2,1,"","add_theta_keccak_component"],[106,2,1,"","add_theta_xoodoo_component"],[106,2,1,"","add_variable_rotate_component"],[106,2,1,"","add_variable_shift_component"],[106,2,1,"","add_word_permutation_component"],[106,2,1,"","algebraic_tests"],[106,2,1,"","analyze_cipher"],[106,2,1,"","as_python_dictionary"],[106,2,1,"","avalanche_probability_vectors"],[106,2,1,"","cipher_inverse"],[106,2,1,"","cipher_partial_inverse"],[106,2,1,"","component_analysis_tests"],[106,2,1,"","component_from"],[106,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[106,2,1,"","continuous_avalanche_factor"],[106,2,1,"","continuous_diffusion_factor"],[106,2,1,"","continuous_diffusion_tests"],[106,2,1,"","continuous_neutrality_measure_for_bit_j"],[106,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[106,2,1,"","convert_to_compound_xor_cipher"],[106,3,1,"","current_round"],[106,3,1,"","current_round_number"],[106,3,1,"","current_round_number_of_components"],[106,2,1,"","delete_generated_evaluate_c_shared_library"],[106,2,1,"","diffusion_tests"],[106,2,1,"","evaluate"],[106,2,1,"","evaluate_using_c"],[106,2,1,"","evaluate_vectorized"],[106,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[106,3,1,"","family_name"],[106,3,1,"","file_name"],[106,2,1,"","find_good_input_difference_for_neural_distinguisher"],[106,2,1,"","find_impossible_property"],[106,2,1,"","generate_bit_based_c_code"],[106,2,1,"","generate_csv_report"],[106,2,1,"","generate_evaluate_c_code_shared_library"],[106,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[106,2,1,"","generate_word_based_c_code"],[106,2,1,"","get_all_components"],[106,2,1,"","get_all_components_ids"],[106,2,1,"","get_all_inputs_bit_positions"],[106,2,1,"","get_component_from_id"],[106,2,1,"","get_components_in_round"],[106,2,1,"","get_current_component_id"],[106,2,1,"","get_model"],[106,2,1,"","get_number_of_components_in_round"],[106,2,1,"","get_partial_cipher"],[106,2,1,"","get_round_from_component_id"],[106,2,1,"","get_sizes_of_components_by_type"],[106,3,1,"","id"],[106,2,1,"","impossible_differential_search"],[106,3,1,"","inputs"],[106,3,1,"","inputs_bit_size"],[106,2,1,"","inputs_size_to_dict"],[106,2,1,"","is_algebraically_secure"],[106,2,1,"","is_andrx"],[106,2,1,"","is_arx"],[106,2,1,"","is_power_of_2_word_based"],[106,2,1,"","is_shift_arx"],[106,2,1,"","is_spn"],[106,2,1,"","make_cipher_id"],[106,2,1,"","make_file_name"],[106,2,1,"","neural_network_blackbox_distinguisher_tests"],[106,2,1,"","neural_network_differential_distinguisher_tests"],[106,3,1,"","number_of_rounds"],[106,3,1,"","output_bit_size"],[106,2,1,"","polynomial_system"],[106,2,1,"","polynomial_system_at_round"],[106,2,1,"","print"],[106,2,1,"","print_as_python_dictionary"],[106,2,1,"","print_as_python_dictionary_to_file"],[106,2,1,"","print_component_analysis_as_radar_charts"],[106,2,1,"","print_evaluation_python_code"],[106,2,1,"","print_evaluation_python_code_to_file"],[106,2,1,"","print_input_information"],[106,3,1,"","reference_code"],[106,2,1,"","remove_key_schedule"],[106,2,1,"","remove_round_component"],[106,2,1,"","remove_round_component_from_id"],[106,3,1,"","rounds"],[106,3,1,"","rounds_as_list"],[106,2,1,"","run_autond_pipeline"],[106,2,1,"","set_file_name"],[106,2,1,"","set_id"],[106,2,1,"","set_inputs"],[106,2,1,"","sort_cipher"],[106,2,1,"","test_against_reference_code"],[106,2,1,"","test_vector_check"],[106,2,1,"","train_gohr_neural_distinguisher"],[106,2,1,"","train_neural_distinguisher"],[106,3,1,"","type"],[106,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.threefish_block_cipher":[[107,1,1,"","ThreefishBlockCipher"]],"ciphers.block_ciphers.threefish_block_cipher.ThreefishBlockCipher":[[107,2,1,"","add_AND_component"],[107,2,1,"","add_FSR_component"],[107,2,1,"","add_MODADD_component"],[107,2,1,"","add_MODSUB_component"],[107,2,1,"","add_NOT_component"],[107,2,1,"","add_OR_component"],[107,2,1,"","add_SBOX_component"],[107,2,1,"","add_SHIFT_component"],[107,2,1,"","add_XOR_component"],[107,2,1,"","add_cipher_output_component"],[107,2,1,"","add_concatenate_component"],[107,2,1,"","add_constant_component"],[107,2,1,"","add_intermediate_output_component"],[107,2,1,"","add_linear_layer_component"],[107,2,1,"","add_mix_column_component"],[107,2,1,"","add_permutation_component"],[107,2,1,"","add_reverse_component"],[107,2,1,"","add_rotate_component"],[107,2,1,"","add_round"],[107,2,1,"","add_round_key_output_component"],[107,2,1,"","add_round_output_component"],[107,2,1,"","add_shift_rows_component"],[107,2,1,"","add_sigma_component"],[107,2,1,"","add_subkey"],[107,2,1,"","add_suffix_to_components"],[107,2,1,"","add_theta_keccak_component"],[107,2,1,"","add_theta_xoodoo_component"],[107,2,1,"","add_variable_rotate_component"],[107,2,1,"","add_variable_shift_component"],[107,2,1,"","add_word_permutation_component"],[107,2,1,"","algebraic_tests"],[107,2,1,"","analyze_cipher"],[107,2,1,"","as_python_dictionary"],[107,2,1,"","avalanche_probability_vectors"],[107,2,1,"","cipher_inverse"],[107,2,1,"","cipher_partial_inverse"],[107,2,1,"","component_analysis_tests"],[107,2,1,"","component_from"],[107,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[107,2,1,"","continuous_avalanche_factor"],[107,2,1,"","continuous_diffusion_factor"],[107,2,1,"","continuous_diffusion_tests"],[107,2,1,"","continuous_neutrality_measure_for_bit_j"],[107,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[107,2,1,"","convert_to_compound_xor_cipher"],[107,3,1,"","current_round"],[107,3,1,"","current_round_number"],[107,3,1,"","current_round_number_of_components"],[107,2,1,"","delete_generated_evaluate_c_shared_library"],[107,2,1,"","diffusion_tests"],[107,2,1,"","evaluate"],[107,2,1,"","evaluate_using_c"],[107,2,1,"","evaluate_vectorized"],[107,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[107,3,1,"","family_name"],[107,3,1,"","file_name"],[107,2,1,"","find_good_input_difference_for_neural_distinguisher"],[107,2,1,"","find_impossible_property"],[107,2,1,"","generate_bit_based_c_code"],[107,2,1,"","generate_csv_report"],[107,2,1,"","generate_evaluate_c_code_shared_library"],[107,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[107,2,1,"","generate_word_based_c_code"],[107,2,1,"","get_all_components"],[107,2,1,"","get_all_components_ids"],[107,2,1,"","get_all_inputs_bit_positions"],[107,2,1,"","get_component_from_id"],[107,2,1,"","get_components_in_round"],[107,2,1,"","get_current_component_id"],[107,2,1,"","get_model"],[107,2,1,"","get_number_of_components_in_round"],[107,2,1,"","get_partial_cipher"],[107,2,1,"","get_round_from_component_id"],[107,2,1,"","get_sizes_of_components_by_type"],[107,3,1,"","id"],[107,2,1,"","impossible_differential_search"],[107,3,1,"","inputs"],[107,3,1,"","inputs_bit_size"],[107,2,1,"","inputs_size_to_dict"],[107,2,1,"","is_algebraically_secure"],[107,2,1,"","is_andrx"],[107,2,1,"","is_arx"],[107,2,1,"","is_power_of_2_word_based"],[107,2,1,"","is_shift_arx"],[107,2,1,"","is_spn"],[107,2,1,"","make_cipher_id"],[107,2,1,"","make_file_name"],[107,2,1,"","mix"],[107,2,1,"","neural_network_blackbox_distinguisher_tests"],[107,2,1,"","neural_network_differential_distinguisher_tests"],[107,3,1,"","number_of_rounds"],[107,3,1,"","output_bit_size"],[107,2,1,"","polynomial_system"],[107,2,1,"","polynomial_system_at_round"],[107,2,1,"","print"],[107,2,1,"","print_as_python_dictionary"],[107,2,1,"","print_as_python_dictionary_to_file"],[107,2,1,"","print_component_analysis_as_radar_charts"],[107,2,1,"","print_evaluation_python_code"],[107,2,1,"","print_evaluation_python_code_to_file"],[107,2,1,"","print_input_information"],[107,3,1,"","reference_code"],[107,2,1,"","remove_key_schedule"],[107,2,1,"","remove_round_component"],[107,2,1,"","remove_round_component_from_id"],[107,3,1,"","rounds"],[107,3,1,"","rounds_as_list"],[107,2,1,"","run_autond_pipeline"],[107,2,1,"","set_file_name"],[107,2,1,"","set_id"],[107,2,1,"","set_inputs"],[107,2,1,"","sort_cipher"],[107,2,1,"","subkey_schedule"],[107,2,1,"","test_against_reference_code"],[107,2,1,"","test_vector_check"],[107,2,1,"","train_gohr_neural_distinguisher"],[107,2,1,"","train_neural_distinguisher"],[107,3,1,"","type"],[107,2,1,"","word_permutation"],[107,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.twofish_block_cipher":[[108,1,1,"","TwofishBlockCipher"]],"ciphers.block_ciphers.twofish_block_cipher.TwofishBlockCipher":[[108,2,1,"","add_AND_component"],[108,2,1,"","add_FSR_component"],[108,2,1,"","add_MODADD_component"],[108,2,1,"","add_MODSUB_component"],[108,2,1,"","add_NOT_component"],[108,2,1,"","add_OR_component"],[108,2,1,"","add_SBOX_component"],[108,2,1,"","add_SHIFT_component"],[108,2,1,"","add_XOR_component"],[108,2,1,"","add_cipher_output_component"],[108,2,1,"","add_concatenate_component"],[108,2,1,"","add_constant_component"],[108,2,1,"","add_intermediate_output_component"],[108,2,1,"","add_linear_layer_component"],[108,2,1,"","add_mix_column_component"],[108,2,1,"","add_permutation_component"],[108,2,1,"","add_reverse_component"],[108,2,1,"","add_rotate_component"],[108,2,1,"","add_round"],[108,2,1,"","add_round_key_output_component"],[108,2,1,"","add_round_output_component"],[108,2,1,"","add_shift_rows_component"],[108,2,1,"","add_sigma_component"],[108,2,1,"","add_suffix_to_components"],[108,2,1,"","add_theta_keccak_component"],[108,2,1,"","add_theta_xoodoo_component"],[108,2,1,"","add_variable_rotate_component"],[108,2,1,"","add_variable_shift_component"],[108,2,1,"","add_word_permutation_component"],[108,2,1,"","algebraic_tests"],[108,2,1,"","analyze_cipher"],[108,2,1,"","as_python_dictionary"],[108,2,1,"","avalanche_probability_vectors"],[108,2,1,"","cipher_inverse"],[108,2,1,"","cipher_partial_inverse"],[108,2,1,"","component_analysis_tests"],[108,2,1,"","component_from"],[108,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[108,2,1,"","continuous_avalanche_factor"],[108,2,1,"","continuous_diffusion_factor"],[108,2,1,"","continuous_diffusion_tests"],[108,2,1,"","continuous_neutrality_measure_for_bit_j"],[108,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[108,2,1,"","convert_to_compound_xor_cipher"],[108,3,1,"","current_round"],[108,3,1,"","current_round_number"],[108,3,1,"","current_round_number_of_components"],[108,2,1,"","delete_generated_evaluate_c_shared_library"],[108,2,1,"","diffusion_tests"],[108,2,1,"","evaluate"],[108,2,1,"","evaluate_using_c"],[108,2,1,"","evaluate_vectorized"],[108,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[108,3,1,"","family_name"],[108,3,1,"","file_name"],[108,2,1,"","find_good_input_difference_for_neural_distinguisher"],[108,2,1,"","find_impossible_property"],[108,2,1,"","generate_bit_based_c_code"],[108,2,1,"","generate_csv_report"],[108,2,1,"","generate_evaluate_c_code_shared_library"],[108,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[108,2,1,"","generate_word_based_c_code"],[108,2,1,"","get_all_components"],[108,2,1,"","get_all_components_ids"],[108,2,1,"","get_all_inputs_bit_positions"],[108,2,1,"","get_component_from_id"],[108,2,1,"","get_components_in_round"],[108,2,1,"","get_current_component_id"],[108,2,1,"","get_model"],[108,2,1,"","get_number_of_components_in_round"],[108,2,1,"","get_partial_cipher"],[108,2,1,"","get_round_from_component_id"],[108,2,1,"","get_sizes_of_components_by_type"],[108,2,1,"","h_function"],[108,3,1,"","id"],[108,2,1,"","impossible_differential_search"],[108,3,1,"","inputs"],[108,3,1,"","inputs_bit_size"],[108,2,1,"","inputs_size_to_dict"],[108,2,1,"","is_algebraically_secure"],[108,2,1,"","is_andrx"],[108,2,1,"","is_arx"],[108,2,1,"","is_power_of_2_word_based"],[108,2,1,"","is_shift_arx"],[108,2,1,"","is_spn"],[108,2,1,"","make_cipher_id"],[108,2,1,"","make_file_name"],[108,2,1,"","neural_network_blackbox_distinguisher_tests"],[108,2,1,"","neural_network_differential_distinguisher_tests"],[108,3,1,"","number_of_rounds"],[108,3,1,"","output_bit_size"],[108,2,1,"","polynomial_system"],[108,2,1,"","polynomial_system_at_round"],[108,2,1,"","print"],[108,2,1,"","print_as_python_dictionary"],[108,2,1,"","print_as_python_dictionary_to_file"],[108,2,1,"","print_component_analysis_as_radar_charts"],[108,2,1,"","print_evaluation_python_code"],[108,2,1,"","print_evaluation_python_code_to_file"],[108,2,1,"","print_input_information"],[108,3,1,"","reference_code"],[108,2,1,"","remove_key_schedule"],[108,2,1,"","remove_round_component"],[108,2,1,"","remove_round_component_from_id"],[108,3,1,"","rounds"],[108,3,1,"","rounds_as_list"],[108,2,1,"","run_autond_pipeline"],[108,2,1,"","set_file_name"],[108,2,1,"","set_id"],[108,2,1,"","set_inputs"],[108,2,1,"","sort_cipher"],[108,2,1,"","test_against_reference_code"],[108,2,1,"","test_vector_check"],[108,2,1,"","train_gohr_neural_distinguisher"],[108,2,1,"","train_neural_distinguisher"],[108,3,1,"","type"],[108,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.xtea_block_cipher":[[109,1,1,"","XTeaBlockCipher"]],"ciphers.block_ciphers.xtea_block_cipher.XTeaBlockCipher":[[109,2,1,"","add_AND_component"],[109,2,1,"","add_FSR_component"],[109,2,1,"","add_MODADD_component"],[109,2,1,"","add_MODSUB_component"],[109,2,1,"","add_NOT_component"],[109,2,1,"","add_OR_component"],[109,2,1,"","add_SBOX_component"],[109,2,1,"","add_SHIFT_component"],[109,2,1,"","add_XOR_component"],[109,2,1,"","add_cipher_output_component"],[109,2,1,"","add_concatenate_component"],[109,2,1,"","add_constant_component"],[109,2,1,"","add_intermediate_output_component"],[109,2,1,"","add_linear_layer_component"],[109,2,1,"","add_mix_column_component"],[109,2,1,"","add_permutation_component"],[109,2,1,"","add_reverse_component"],[109,2,1,"","add_rotate_component"],[109,2,1,"","add_round"],[109,2,1,"","add_round_key_output_component"],[109,2,1,"","add_round_output_component"],[109,2,1,"","add_shift_rows_component"],[109,2,1,"","add_sigma_component"],[109,2,1,"","add_suffix_to_components"],[109,2,1,"","add_theta_keccak_component"],[109,2,1,"","add_theta_xoodoo_component"],[109,2,1,"","add_variable_rotate_component"],[109,2,1,"","add_variable_shift_component"],[109,2,1,"","add_word_permutation_component"],[109,2,1,"","algebraic_tests"],[109,2,1,"","analyze_cipher"],[109,2,1,"","as_python_dictionary"],[109,2,1,"","avalanche_probability_vectors"],[109,2,1,"","cipher_inverse"],[109,2,1,"","cipher_partial_inverse"],[109,2,1,"","component_analysis_tests"],[109,2,1,"","component_from"],[109,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[109,2,1,"","continuous_avalanche_factor"],[109,2,1,"","continuous_diffusion_factor"],[109,2,1,"","continuous_diffusion_tests"],[109,2,1,"","continuous_neutrality_measure_for_bit_j"],[109,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[109,2,1,"","convert_to_compound_xor_cipher"],[109,3,1,"","current_round"],[109,3,1,"","current_round_number"],[109,3,1,"","current_round_number_of_components"],[109,2,1,"","delete_generated_evaluate_c_shared_library"],[109,2,1,"","diffusion_tests"],[109,2,1,"","evaluate"],[109,2,1,"","evaluate_using_c"],[109,2,1,"","evaluate_vectorized"],[109,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[109,3,1,"","family_name"],[109,3,1,"","file_name"],[109,2,1,"","find_good_input_difference_for_neural_distinguisher"],[109,2,1,"","find_impossible_property"],[109,2,1,"","generate_bit_based_c_code"],[109,2,1,"","generate_csv_report"],[109,2,1,"","generate_evaluate_c_code_shared_library"],[109,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[109,2,1,"","generate_word_based_c_code"],[109,2,1,"","get_all_components"],[109,2,1,"","get_all_components_ids"],[109,2,1,"","get_all_inputs_bit_positions"],[109,2,1,"","get_component_from_id"],[109,2,1,"","get_components_in_round"],[109,2,1,"","get_current_component_id"],[109,2,1,"","get_model"],[109,2,1,"","get_number_of_components_in_round"],[109,2,1,"","get_partial_cipher"],[109,2,1,"","get_round_from_component_id"],[109,2,1,"","get_sizes_of_components_by_type"],[109,3,1,"","id"],[109,2,1,"","impossible_differential_search"],[109,3,1,"","inputs"],[109,3,1,"","inputs_bit_size"],[109,2,1,"","inputs_size_to_dict"],[109,2,1,"","is_algebraically_secure"],[109,2,1,"","is_andrx"],[109,2,1,"","is_arx"],[109,2,1,"","is_power_of_2_word_based"],[109,2,1,"","is_shift_arx"],[109,2,1,"","is_spn"],[109,2,1,"","make_cipher_id"],[109,2,1,"","make_file_name"],[109,2,1,"","neural_network_blackbox_distinguisher_tests"],[109,2,1,"","neural_network_differential_distinguisher_tests"],[109,3,1,"","number_of_rounds"],[109,3,1,"","output_bit_size"],[109,2,1,"","polynomial_system"],[109,2,1,"","polynomial_system_at_round"],[109,2,1,"","print"],[109,2,1,"","print_as_python_dictionary"],[109,2,1,"","print_as_python_dictionary_to_file"],[109,2,1,"","print_component_analysis_as_radar_charts"],[109,2,1,"","print_evaluation_python_code"],[109,2,1,"","print_evaluation_python_code_to_file"],[109,2,1,"","print_input_information"],[109,3,1,"","reference_code"],[109,2,1,"","remove_key_schedule"],[109,2,1,"","remove_round_component"],[109,2,1,"","remove_round_component_from_id"],[109,3,1,"","rounds"],[109,3,1,"","rounds_as_list"],[109,2,1,"","run_autond_pipeline"],[109,2,1,"","set_file_name"],[109,2,1,"","set_id"],[109,2,1,"","set_inputs"],[109,2,1,"","sort_cipher"],[109,2,1,"","test_against_reference_code"],[109,2,1,"","test_vector_check"],[109,2,1,"","train_gohr_neural_distinguisher"],[109,2,1,"","train_neural_distinguisher"],[109,3,1,"","type"],[109,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions":[[110,0,0,"-","blake2_hash_function"],[111,0,0,"-","blake_hash_function"],[112,0,0,"-","md5_hash_function"],[113,0,0,"-","sha1_hash_function"],[114,0,0,"-","sha2_hash_function"],[115,0,0,"-","whirlpool_hash_function"]],"ciphers.hash_functions.blake2_hash_function":[[110,1,1,"","Blake2HashFunction"]],"ciphers.hash_functions.blake2_hash_function.Blake2HashFunction":[[110,2,1,"","add_AND_component"],[110,2,1,"","add_FSR_component"],[110,2,1,"","add_MODADD_component"],[110,2,1,"","add_MODSUB_component"],[110,2,1,"","add_NOT_component"],[110,2,1,"","add_OR_component"],[110,2,1,"","add_SBOX_component"],[110,2,1,"","add_SHIFT_component"],[110,2,1,"","add_XOR_component"],[110,2,1,"","add_cipher_output_component"],[110,2,1,"","add_concatenate_component"],[110,2,1,"","add_constant_component"],[110,2,1,"","add_intermediate_output_component"],[110,2,1,"","add_linear_layer_component"],[110,2,1,"","add_mix_column_component"],[110,2,1,"","add_permutation_component"],[110,2,1,"","add_reverse_component"],[110,2,1,"","add_rotate_component"],[110,2,1,"","add_round"],[110,2,1,"","add_round_key_output_component"],[110,2,1,"","add_round_output_component"],[110,2,1,"","add_shift_rows_component"],[110,2,1,"","add_sigma_component"],[110,2,1,"","add_suffix_to_components"],[110,2,1,"","add_theta_keccak_component"],[110,2,1,"","add_theta_xoodoo_component"],[110,2,1,"","add_variable_rotate_component"],[110,2,1,"","add_variable_shift_component"],[110,2,1,"","add_word_permutation_component"],[110,2,1,"","algebraic_tests"],[110,2,1,"","analyze_cipher"],[110,2,1,"","as_python_dictionary"],[110,2,1,"","avalanche_probability_vectors"],[110,2,1,"","cipher_inverse"],[110,2,1,"","cipher_partial_inverse"],[110,2,1,"","column_step"],[110,2,1,"","component_analysis_tests"],[110,2,1,"","component_from"],[110,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[110,2,1,"","continuous_avalanche_factor"],[110,2,1,"","continuous_diffusion_factor"],[110,2,1,"","continuous_diffusion_tests"],[110,2,1,"","continuous_neutrality_measure_for_bit_j"],[110,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[110,2,1,"","convert_to_compound_xor_cipher"],[110,3,1,"","current_round"],[110,3,1,"","current_round_number"],[110,3,1,"","current_round_number_of_components"],[110,2,1,"","define_number_of_rounds"],[110,2,1,"","define_permutations"],[110,2,1,"","define_rotation_amounts"],[110,2,1,"","delete_generated_evaluate_c_shared_library"],[110,2,1,"","diagonal_step"],[110,2,1,"","diffusion_tests"],[110,2,1,"","evaluate"],[110,2,1,"","evaluate_using_c"],[110,2,1,"","evaluate_vectorized"],[110,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[110,3,1,"","family_name"],[110,3,1,"","file_name"],[110,2,1,"","find_good_input_difference_for_neural_distinguisher"],[110,2,1,"","find_impossible_property"],[110,2,1,"","generate_bit_based_c_code"],[110,2,1,"","generate_csv_report"],[110,2,1,"","generate_evaluate_c_code_shared_library"],[110,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[110,2,1,"","generate_word_based_c_code"],[110,2,1,"","get_all_components"],[110,2,1,"","get_all_components_ids"],[110,2,1,"","get_all_inputs_bit_positions"],[110,2,1,"","get_component_from_id"],[110,2,1,"","get_components_in_round"],[110,2,1,"","get_current_component_id"],[110,2,1,"","get_model"],[110,2,1,"","get_number_of_components_in_round"],[110,2,1,"","get_partial_cipher"],[110,2,1,"","get_round_from_component_id"],[110,2,1,"","get_sizes_of_components_by_type"],[110,3,1,"","id"],[110,2,1,"","impossible_differential_search"],[110,3,1,"","inputs"],[110,3,1,"","inputs_bit_size"],[110,2,1,"","inputs_size_to_dict"],[110,2,1,"","is_algebraically_secure"],[110,2,1,"","is_andrx"],[110,2,1,"","is_arx"],[110,2,1,"","is_power_of_2_word_based"],[110,2,1,"","is_shift_arx"],[110,2,1,"","is_spn"],[110,2,1,"","make_cipher_id"],[110,2,1,"","make_file_name"],[110,2,1,"","neural_network_blackbox_distinguisher_tests"],[110,2,1,"","neural_network_differential_distinguisher_tests"],[110,3,1,"","number_of_rounds"],[110,3,1,"","output_bit_size"],[110,2,1,"","polynomial_system"],[110,2,1,"","polynomial_system_at_round"],[110,2,1,"","print"],[110,2,1,"","print_as_python_dictionary"],[110,2,1,"","print_as_python_dictionary_to_file"],[110,2,1,"","print_component_analysis_as_radar_charts"],[110,2,1,"","print_evaluation_python_code"],[110,2,1,"","print_evaluation_python_code_to_file"],[110,2,1,"","print_input_information"],[110,3,1,"","reference_code"],[110,2,1,"","remove_key_schedule"],[110,2,1,"","remove_round_component"],[110,2,1,"","remove_round_component_from_id"],[110,3,1,"","rounds"],[110,3,1,"","rounds_as_list"],[110,2,1,"","run_autond_pipeline"],[110,2,1,"","set_file_name"],[110,2,1,"","set_id"],[110,2,1,"","set_inputs"],[110,2,1,"","sort_cipher"],[110,2,1,"","state_transformation"],[110,2,1,"","test_against_reference_code"],[110,2,1,"","test_vector_check"],[110,2,1,"","train_gohr_neural_distinguisher"],[110,2,1,"","train_neural_distinguisher"],[110,3,1,"","type"],[110,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.blake_hash_function":[[111,1,1,"","BlakeHashFunction"]],"ciphers.hash_functions.blake_hash_function.BlakeHashFunction":[[111,2,1,"","add_AND_component"],[111,2,1,"","add_FSR_component"],[111,2,1,"","add_MODADD_component"],[111,2,1,"","add_MODSUB_component"],[111,2,1,"","add_NOT_component"],[111,2,1,"","add_OR_component"],[111,2,1,"","add_SBOX_component"],[111,2,1,"","add_SHIFT_component"],[111,2,1,"","add_XOR_component"],[111,2,1,"","add_cipher_output_component"],[111,2,1,"","add_concatenate_component"],[111,2,1,"","add_constant_component"],[111,2,1,"","add_intermediate_output_component"],[111,2,1,"","add_linear_layer_component"],[111,2,1,"","add_mix_column_component"],[111,2,1,"","add_permutation_component"],[111,2,1,"","add_reverse_component"],[111,2,1,"","add_rotate_component"],[111,2,1,"","add_round"],[111,2,1,"","add_round_key_output_component"],[111,2,1,"","add_round_output_component"],[111,2,1,"","add_shift_rows_component"],[111,2,1,"","add_sigma_component"],[111,2,1,"","add_suffix_to_components"],[111,2,1,"","add_theta_keccak_component"],[111,2,1,"","add_theta_xoodoo_component"],[111,2,1,"","add_variable_rotate_component"],[111,2,1,"","add_variable_shift_component"],[111,2,1,"","add_word_permutation_component"],[111,2,1,"","algebraic_tests"],[111,2,1,"","analyze_cipher"],[111,2,1,"","as_python_dictionary"],[111,2,1,"","avalanche_probability_vectors"],[111,2,1,"","cipher_inverse"],[111,2,1,"","cipher_partial_inverse"],[111,2,1,"","column_step"],[111,2,1,"","component_analysis_tests"],[111,2,1,"","component_from"],[111,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[111,2,1,"","continuous_avalanche_factor"],[111,2,1,"","continuous_diffusion_factor"],[111,2,1,"","continuous_diffusion_tests"],[111,2,1,"","continuous_neutrality_measure_for_bit_j"],[111,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[111,2,1,"","convert_to_compound_xor_cipher"],[111,3,1,"","current_round"],[111,3,1,"","current_round_number"],[111,3,1,"","current_round_number_of_components"],[111,2,1,"","define_constants"],[111,2,1,"","define_number_of_rounds"],[111,2,1,"","define_permutations"],[111,2,1,"","define_rotation_amounts"],[111,2,1,"","delete_generated_evaluate_c_shared_library"],[111,2,1,"","diagonal_step"],[111,2,1,"","diffusion_tests"],[111,2,1,"","evaluate"],[111,2,1,"","evaluate_using_c"],[111,2,1,"","evaluate_vectorized"],[111,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[111,3,1,"","family_name"],[111,3,1,"","file_name"],[111,2,1,"","find_good_input_difference_for_neural_distinguisher"],[111,2,1,"","find_impossible_property"],[111,2,1,"","generate_bit_based_c_code"],[111,2,1,"","generate_csv_report"],[111,2,1,"","generate_evaluate_c_code_shared_library"],[111,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[111,2,1,"","generate_word_based_c_code"],[111,2,1,"","get_all_components"],[111,2,1,"","get_all_components_ids"],[111,2,1,"","get_all_inputs_bit_positions"],[111,2,1,"","get_component_from_id"],[111,2,1,"","get_components_in_round"],[111,2,1,"","get_current_component_id"],[111,2,1,"","get_model"],[111,2,1,"","get_number_of_components_in_round"],[111,2,1,"","get_partial_cipher"],[111,2,1,"","get_round_from_component_id"],[111,2,1,"","get_sizes_of_components_by_type"],[111,3,1,"","id"],[111,2,1,"","impossible_differential_search"],[111,3,1,"","inputs"],[111,3,1,"","inputs_bit_size"],[111,2,1,"","inputs_size_to_dict"],[111,2,1,"","is_algebraically_secure"],[111,2,1,"","is_andrx"],[111,2,1,"","is_arx"],[111,2,1,"","is_power_of_2_word_based"],[111,2,1,"","is_shift_arx"],[111,2,1,"","is_spn"],[111,2,1,"","make_cipher_id"],[111,2,1,"","make_file_name"],[111,2,1,"","neural_network_blackbox_distinguisher_tests"],[111,2,1,"","neural_network_differential_distinguisher_tests"],[111,3,1,"","number_of_rounds"],[111,3,1,"","output_bit_size"],[111,2,1,"","polynomial_system"],[111,2,1,"","polynomial_system_at_round"],[111,2,1,"","print"],[111,2,1,"","print_as_python_dictionary"],[111,2,1,"","print_as_python_dictionary_to_file"],[111,2,1,"","print_component_analysis_as_radar_charts"],[111,2,1,"","print_evaluation_python_code"],[111,2,1,"","print_evaluation_python_code_to_file"],[111,2,1,"","print_input_information"],[111,3,1,"","reference_code"],[111,2,1,"","remove_key_schedule"],[111,2,1,"","remove_round_component"],[111,2,1,"","remove_round_component_from_id"],[111,3,1,"","rounds"],[111,3,1,"","rounds_as_list"],[111,2,1,"","run_autond_pipeline"],[111,2,1,"","set_file_name"],[111,2,1,"","set_id"],[111,2,1,"","set_inputs"],[111,2,1,"","sort_cipher"],[111,2,1,"","state_transformation"],[111,2,1,"","test_against_reference_code"],[111,2,1,"","test_vector_check"],[111,2,1,"","train_gohr_neural_distinguisher"],[111,2,1,"","train_neural_distinguisher"],[111,3,1,"","type"],[111,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.md5_hash_function":[[112,1,1,"","MD5HashFunction"]],"ciphers.hash_functions.md5_hash_function.MD5HashFunction":[[112,2,1,"","F"],[112,2,1,"","G"],[112,2,1,"","H"],[112,2,1,"","I"],[112,2,1,"","add_AND_component"],[112,2,1,"","add_FSR_component"],[112,2,1,"","add_MODADD_component"],[112,2,1,"","add_MODSUB_component"],[112,2,1,"","add_NOT_component"],[112,2,1,"","add_OR_component"],[112,2,1,"","add_SBOX_component"],[112,2,1,"","add_SHIFT_component"],[112,2,1,"","add_XOR_component"],[112,2,1,"","add_and_component_in_md5"],[112,2,1,"","add_cipher_output_component"],[112,2,1,"","add_concatenate_component"],[112,2,1,"","add_constant_component"],[112,2,1,"","add_intermediate_output_component"],[112,2,1,"","add_linear_layer_component"],[112,2,1,"","add_mix_column_component"],[112,2,1,"","add_modadd_component_in_md5"],[112,2,1,"","add_modadd_component_in_md5_for_x"],[112,2,1,"","add_not_component_in_md5"],[112,2,1,"","add_or_component_in_md5"],[112,2,1,"","add_permutation_component"],[112,2,1,"","add_reverse_component"],[112,2,1,"","add_rotate_component"],[112,2,1,"","add_rotate_component_in_md5"],[112,2,1,"","add_round"],[112,2,1,"","add_round_key_output_component"],[112,2,1,"","add_round_output_component"],[112,2,1,"","add_round_output_component_in_md5"],[112,2,1,"","add_shift_rows_component"],[112,2,1,"","add_sigma_component"],[112,2,1,"","add_suffix_to_components"],[112,2,1,"","add_theta_keccak_component"],[112,2,1,"","add_theta_xoodoo_component"],[112,2,1,"","add_variable_rotate_component"],[112,2,1,"","add_variable_shift_component"],[112,2,1,"","add_word_permutation_component"],[112,2,1,"","add_xor_component_in_md5"],[112,2,1,"","algebraic_tests"],[112,2,1,"","analyze_cipher"],[112,2,1,"","as_python_dictionary"],[112,2,1,"","avalanche_probability_vectors"],[112,2,1,"","cipher_inverse"],[112,2,1,"","cipher_partial_inverse"],[112,2,1,"","component_analysis_tests"],[112,2,1,"","component_from"],[112,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[112,2,1,"","continuous_avalanche_factor"],[112,2,1,"","continuous_diffusion_factor"],[112,2,1,"","continuous_diffusion_tests"],[112,2,1,"","continuous_neutrality_measure_for_bit_j"],[112,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[112,2,1,"","convert_to_compound_xor_cipher"],[112,3,1,"","current_round"],[112,3,1,"","current_round_number"],[112,3,1,"","current_round_number_of_components"],[112,2,1,"","delete_generated_evaluate_c_shared_library"],[112,2,1,"","diffusion_tests"],[112,2,1,"","evaluate"],[112,2,1,"","evaluate_using_c"],[112,2,1,"","evaluate_vectorized"],[112,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[112,3,1,"","family_name"],[112,3,1,"","file_name"],[112,2,1,"","find_good_input_difference_for_neural_distinguisher"],[112,2,1,"","find_impossible_property"],[112,2,1,"","generate_bit_based_c_code"],[112,2,1,"","generate_csv_report"],[112,2,1,"","generate_evaluate_c_code_shared_library"],[112,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[112,2,1,"","generate_word_based_c_code"],[112,2,1,"","get_all_components"],[112,2,1,"","get_all_components_ids"],[112,2,1,"","get_all_inputs_bit_positions"],[112,2,1,"","get_component_from_id"],[112,2,1,"","get_components_in_round"],[112,2,1,"","get_current_component_id"],[112,2,1,"","get_model"],[112,2,1,"","get_number_of_components_in_round"],[112,2,1,"","get_partial_cipher"],[112,2,1,"","get_round_from_component_id"],[112,2,1,"","get_sizes_of_components_by_type"],[112,3,1,"","id"],[112,2,1,"","impossible_differential_search"],[112,3,1,"","inputs"],[112,3,1,"","inputs_bit_size"],[112,2,1,"","inputs_size_to_dict"],[112,2,1,"","is_algebraically_secure"],[112,2,1,"","is_andrx"],[112,2,1,"","is_arx"],[112,2,1,"","is_power_of_2_word_based"],[112,2,1,"","is_shift_arx"],[112,2,1,"","is_spn"],[112,2,1,"","make_cipher_id"],[112,2,1,"","make_file_name"],[112,2,1,"","md5_step"],[112,2,1,"","neural_network_blackbox_distinguisher_tests"],[112,2,1,"","neural_network_differential_distinguisher_tests"],[112,3,1,"","number_of_rounds"],[112,3,1,"","output_bit_size"],[112,2,1,"","polynomial_system"],[112,2,1,"","polynomial_system_at_round"],[112,2,1,"","print"],[112,2,1,"","print_as_python_dictionary"],[112,2,1,"","print_as_python_dictionary_to_file"],[112,2,1,"","print_component_analysis_as_radar_charts"],[112,2,1,"","print_evaluation_python_code"],[112,2,1,"","print_evaluation_python_code_to_file"],[112,2,1,"","print_input_information"],[112,3,1,"","reference_code"],[112,2,1,"","remove_key_schedule"],[112,2,1,"","remove_round_component"],[112,2,1,"","remove_round_component_from_id"],[112,3,1,"","rounds"],[112,3,1,"","rounds_as_list"],[112,2,1,"","run_autond_pipeline"],[112,2,1,"","set_file_name"],[112,2,1,"","set_id"],[112,2,1,"","set_inputs"],[112,2,1,"","sort_cipher"],[112,2,1,"","test_against_reference_code"],[112,2,1,"","test_vector_check"],[112,2,1,"","train_gohr_neural_distinguisher"],[112,2,1,"","train_neural_distinguisher"],[112,3,1,"","type"],[112,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha1_hash_function":[[113,1,1,"","SHA1HashFunction"]],"ciphers.hash_functions.sha1_hash_function.SHA1HashFunction":[[113,2,1,"","add_AND_component"],[113,2,1,"","add_FSR_component"],[113,2,1,"","add_MODADD_component"],[113,2,1,"","add_MODSUB_component"],[113,2,1,"","add_NOT_component"],[113,2,1,"","add_OR_component"],[113,2,1,"","add_SBOX_component"],[113,2,1,"","add_SHIFT_component"],[113,2,1,"","add_XOR_component"],[113,2,1,"","add_and_component_in_sha1"],[113,2,1,"","add_cipher_output_component"],[113,2,1,"","add_concatenate_component"],[113,2,1,"","add_constant_component"],[113,2,1,"","add_intermediate_output_component"],[113,2,1,"","add_linear_layer_component"],[113,2,1,"","add_mix_column_component"],[113,2,1,"","add_modadd_component_in_sha1"],[113,2,1,"","add_permutation_component"],[113,2,1,"","add_reverse_component"],[113,2,1,"","add_rotate_component"],[113,2,1,"","add_rotate_component_in_sha1"],[113,2,1,"","add_round"],[113,2,1,"","add_round_key_output_component"],[113,2,1,"","add_round_output_component"],[113,2,1,"","add_round_output_component_in_sha1"],[113,2,1,"","add_shift_rows_component"],[113,2,1,"","add_sigma_component"],[113,2,1,"","add_suffix_to_components"],[113,2,1,"","add_theta_keccak_component"],[113,2,1,"","add_theta_xoodoo_component"],[113,2,1,"","add_variable_rotate_component"],[113,2,1,"","add_variable_shift_component"],[113,2,1,"","add_word_permutation_component"],[113,2,1,"","algebraic_tests"],[113,2,1,"","analyze_cipher"],[113,2,1,"","as_python_dictionary"],[113,2,1,"","avalanche_probability_vectors"],[113,2,1,"","cipher_inverse"],[113,2,1,"","cipher_partial_inverse"],[113,2,1,"","component_analysis_tests"],[113,2,1,"","component_from"],[113,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[113,2,1,"","compute_temp_and_s_30_b"],[113,2,1,"","continuous_avalanche_factor"],[113,2,1,"","continuous_diffusion_factor"],[113,2,1,"","continuous_diffusion_tests"],[113,2,1,"","continuous_neutrality_measure_for_bit_j"],[113,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[113,2,1,"","convert_to_compound_xor_cipher"],[113,3,1,"","current_round"],[113,3,1,"","current_round_number"],[113,3,1,"","current_round_number_of_components"],[113,2,1,"","delete_generated_evaluate_c_shared_library"],[113,2,1,"","diffusion_tests"],[113,2,1,"","evaluate"],[113,2,1,"","evaluate_using_c"],[113,2,1,"","evaluate_vectorized"],[113,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[113,3,1,"","family_name"],[113,3,1,"","file_name"],[113,2,1,"","find_good_input_difference_for_neural_distinguisher"],[113,2,1,"","find_impossible_property"],[113,2,1,"","generate_bit_based_c_code"],[113,2,1,"","generate_csv_report"],[113,2,1,"","generate_evaluate_c_code_shared_library"],[113,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[113,2,1,"","generate_word_based_c_code"],[113,2,1,"","get_all_components"],[113,2,1,"","get_all_components_ids"],[113,2,1,"","get_all_inputs_bit_positions"],[113,2,1,"","get_component_from_id"],[113,2,1,"","get_components_in_round"],[113,2,1,"","get_current_component_id"],[113,2,1,"","get_model"],[113,2,1,"","get_number_of_components_in_round"],[113,2,1,"","get_partial_cipher"],[113,2,1,"","get_round_from_component_id"],[113,2,1,"","get_sizes_of_components_by_type"],[113,3,1,"","id"],[113,2,1,"","impossible_differential_search"],[113,3,1,"","inputs"],[113,3,1,"","inputs_bit_size"],[113,2,1,"","inputs_size_to_dict"],[113,2,1,"","is_algebraically_secure"],[113,2,1,"","is_andrx"],[113,2,1,"","is_arx"],[113,2,1,"","is_power_of_2_word_based"],[113,2,1,"","is_shift_arx"],[113,2,1,"","is_spn"],[113,2,1,"","make_cipher_id"],[113,2,1,"","make_file_name"],[113,2,1,"","neural_network_blackbox_distinguisher_tests"],[113,2,1,"","neural_network_differential_distinguisher_tests"],[113,3,1,"","number_of_rounds"],[113,3,1,"","output_bit_size"],[113,2,1,"","polynomial_system"],[113,2,1,"","polynomial_system_at_round"],[113,2,1,"","print"],[113,2,1,"","print_as_python_dictionary"],[113,2,1,"","print_as_python_dictionary_to_file"],[113,2,1,"","print_component_analysis_as_radar_charts"],[113,2,1,"","print_evaluation_python_code"],[113,2,1,"","print_evaluation_python_code_to_file"],[113,2,1,"","print_input_information"],[113,3,1,"","reference_code"],[113,2,1,"","remove_key_schedule"],[113,2,1,"","remove_round_component"],[113,2,1,"","remove_round_component_from_id"],[113,3,1,"","rounds"],[113,2,1,"","rounds_0_19"],[113,2,1,"","rounds_20_39"],[113,2,1,"","rounds_40_59"],[113,3,1,"","rounds_as_list"],[113,2,1,"","run_autond_pipeline"],[113,2,1,"","schedule"],[113,2,1,"","set_file_name"],[113,2,1,"","set_id"],[113,2,1,"","set_inputs"],[113,2,1,"","sort_cipher"],[113,2,1,"","test_against_reference_code"],[113,2,1,"","test_vector_check"],[113,2,1,"","train_gohr_neural_distinguisher"],[113,2,1,"","train_neural_distinguisher"],[113,3,1,"","type"],[113,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha2_hash_function":[[114,1,1,"","SHA2HashFunction"]],"ciphers.hash_functions.sha2_hash_function.SHA2HashFunction":[[114,2,1,"","add_AND_component"],[114,2,1,"","add_FSR_component"],[114,2,1,"","add_MODADD_component"],[114,2,1,"","add_MODSUB_component"],[114,2,1,"","add_NOT_component"],[114,2,1,"","add_OR_component"],[114,2,1,"","add_SBOX_component"],[114,2,1,"","add_SHIFT_component"],[114,2,1,"","add_XOR_component"],[114,2,1,"","add_and_component_sha2"],[114,2,1,"","add_cipher_output_component"],[114,2,1,"","add_concatenate_component"],[114,2,1,"","add_constant_component"],[114,2,1,"","add_intermediate_output_component"],[114,2,1,"","add_linear_layer_component"],[114,2,1,"","add_mix_column_component"],[114,2,1,"","add_modadd_component_sha2"],[114,2,1,"","add_permutation_component"],[114,2,1,"","add_reverse_component"],[114,2,1,"","add_rotate_component"],[114,2,1,"","add_rotate_component_sha2"],[114,2,1,"","add_round"],[114,2,1,"","add_round_key_output_component"],[114,2,1,"","add_round_output_component"],[114,2,1,"","add_round_output_component_sha2"],[114,2,1,"","add_shift_rows_component"],[114,2,1,"","add_sigma_component"],[114,2,1,"","add_suffix_to_components"],[114,2,1,"","add_theta_keccak_component"],[114,2,1,"","add_theta_xoodoo_component"],[114,2,1,"","add_variable_rotate_component"],[114,2,1,"","add_variable_shift_component"],[114,2,1,"","add_word_permutation_component"],[114,2,1,"","add_xor_component_sha2"],[114,2,1,"","algebraic_tests"],[114,2,1,"","analyze_cipher"],[114,2,1,"","as_python_dictionary"],[114,2,1,"","avalanche_probability_vectors"],[114,2,1,"","cipher_inverse"],[114,2,1,"","cipher_partial_inverse"],[114,2,1,"","component_analysis_tests"],[114,2,1,"","component_from"],[114,2,1,"","compute_bsig0_bsig1"],[114,2,1,"","compute_ch"],[114,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[114,2,1,"","compute_maj"],[114,2,1,"","compute_ssig0_ssig1"],[114,2,1,"","continuous_avalanche_factor"],[114,2,1,"","continuous_diffusion_factor"],[114,2,1,"","continuous_diffusion_tests"],[114,2,1,"","continuous_neutrality_measure_for_bit_j"],[114,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[114,2,1,"","convert_to_compound_xor_cipher"],[114,3,1,"","current_round"],[114,3,1,"","current_round_number"],[114,3,1,"","current_round_number_of_components"],[114,2,1,"","delete_generated_evaluate_c_shared_library"],[114,2,1,"","diffusion_tests"],[114,2,1,"","evaluate"],[114,2,1,"","evaluate_using_c"],[114,2,1,"","evaluate_vectorized"],[114,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[114,3,1,"","family_name"],[114,3,1,"","file_name"],[114,2,1,"","find_good_input_difference_for_neural_distinguisher"],[114,2,1,"","find_impossible_property"],[114,2,1,"","generate_bit_based_c_code"],[114,2,1,"","generate_csv_report"],[114,2,1,"","generate_evaluate_c_code_shared_library"],[114,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[114,2,1,"","generate_word_based_c_code"],[114,2,1,"","get_all_components"],[114,2,1,"","get_all_components_ids"],[114,2,1,"","get_all_inputs_bit_positions"],[114,2,1,"","get_component_from_id"],[114,2,1,"","get_components_in_round"],[114,2,1,"","get_current_component_id"],[114,2,1,"","get_model"],[114,2,1,"","get_number_of_components_in_round"],[114,2,1,"","get_partial_cipher"],[114,2,1,"","get_round_from_component_id"],[114,2,1,"","get_sizes_of_components_by_type"],[114,3,1,"","id"],[114,2,1,"","impossible_differential_search"],[114,3,1,"","inputs"],[114,3,1,"","inputs_bit_size"],[114,2,1,"","inputs_size_to_dict"],[114,2,1,"","is_algebraically_secure"],[114,2,1,"","is_andrx"],[114,2,1,"","is_arx"],[114,2,1,"","is_power_of_2_word_based"],[114,2,1,"","is_shift_arx"],[114,2,1,"","is_spn"],[114,2,1,"","make_cipher_id"],[114,2,1,"","make_file_name"],[114,2,1,"","neural_network_blackbox_distinguisher_tests"],[114,2,1,"","neural_network_differential_distinguisher_tests"],[114,3,1,"","number_of_rounds"],[114,3,1,"","output_bit_size"],[114,2,1,"","polynomial_system"],[114,2,1,"","polynomial_system_at_round"],[114,2,1,"","print"],[114,2,1,"","print_as_python_dictionary"],[114,2,1,"","print_as_python_dictionary_to_file"],[114,2,1,"","print_component_analysis_as_radar_charts"],[114,2,1,"","print_evaluation_python_code"],[114,2,1,"","print_evaluation_python_code_to_file"],[114,2,1,"","print_input_information"],[114,3,1,"","reference_code"],[114,2,1,"","remove_key_schedule"],[114,2,1,"","remove_round_component"],[114,2,1,"","remove_round_component_from_id"],[114,2,1,"","round_function"],[114,3,1,"","rounds"],[114,3,1,"","rounds_as_list"],[114,2,1,"","run_autond_pipeline"],[114,2,1,"","schedule"],[114,2,1,"","set_file_name"],[114,2,1,"","set_id"],[114,2,1,"","set_inputs"],[114,2,1,"","sort_cipher"],[114,2,1,"","test_against_reference_code"],[114,2,1,"","test_vector_check"],[114,2,1,"","train_gohr_neural_distinguisher"],[114,2,1,"","train_neural_distinguisher"],[114,3,1,"","type"],[114,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.whirlpool_hash_function":[[115,1,1,"","WhirlpoolHashFunction"]],"ciphers.hash_functions.whirlpool_hash_function.WhirlpoolHashFunction":[[115,2,1,"","add_AND_component"],[115,2,1,"","add_FSR_component"],[115,2,1,"","add_MODADD_component"],[115,2,1,"","add_MODSUB_component"],[115,2,1,"","add_NOT_component"],[115,2,1,"","add_OR_component"],[115,2,1,"","add_SBOX_component"],[115,2,1,"","add_SHIFT_component"],[115,2,1,"","add_XOR_component"],[115,2,1,"","add_cipher_output_component"],[115,2,1,"","add_concatenate_component"],[115,2,1,"","add_constant_component"],[115,2,1,"","add_intermediate_output_component"],[115,2,1,"","add_linear_layer_component"],[115,2,1,"","add_mix_column_component"],[115,2,1,"","add_permutation_component"],[115,2,1,"","add_reverse_component"],[115,2,1,"","add_rotate_component"],[115,2,1,"","add_round"],[115,2,1,"","add_round_key_output_component"],[115,2,1,"","add_round_output_component"],[115,2,1,"","add_shift_rows_component"],[115,2,1,"","add_sigma_component"],[115,2,1,"","add_suffix_to_components"],[115,2,1,"","add_theta_keccak_component"],[115,2,1,"","add_theta_xoodoo_component"],[115,2,1,"","add_variable_rotate_component"],[115,2,1,"","add_variable_shift_component"],[115,2,1,"","add_word_permutation_component"],[115,2,1,"","algebraic_tests"],[115,2,1,"","analyze_cipher"],[115,2,1,"","as_python_dictionary"],[115,2,1,"","avalanche_probability_vectors"],[115,2,1,"","cipher_inverse"],[115,2,1,"","cipher_partial_inverse"],[115,2,1,"","component_analysis_tests"],[115,2,1,"","component_from"],[115,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[115,2,1,"","continuous_avalanche_factor"],[115,2,1,"","continuous_diffusion_factor"],[115,2,1,"","continuous_diffusion_tests"],[115,2,1,"","continuous_neutrality_measure_for_bit_j"],[115,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[115,2,1,"","convert_to_compound_xor_cipher"],[115,2,1,"","create_SBOX_component"],[115,2,1,"","create_mix_row_components"],[115,2,1,"","create_round_constant_component"],[115,2,1,"","create_shift_column_components"],[115,3,1,"","current_round"],[115,3,1,"","current_round_number"],[115,3,1,"","current_round_number_of_components"],[115,2,1,"","delete_generated_evaluate_c_shared_library"],[115,2,1,"","diffusion_tests"],[115,2,1,"","evaluate"],[115,2,1,"","evaluate_using_c"],[115,2,1,"","evaluate_vectorized"],[115,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[115,3,1,"","family_name"],[115,3,1,"","file_name"],[115,2,1,"","find_good_input_difference_for_neural_distinguisher"],[115,2,1,"","find_impossible_property"],[115,2,1,"","generate_bit_based_c_code"],[115,2,1,"","generate_csv_report"],[115,2,1,"","generate_evaluate_c_code_shared_library"],[115,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[115,2,1,"","generate_word_based_c_code"],[115,2,1,"","get_all_components"],[115,2,1,"","get_all_components_ids"],[115,2,1,"","get_all_inputs_bit_positions"],[115,2,1,"","get_component_from_id"],[115,2,1,"","get_components_in_round"],[115,2,1,"","get_current_component_id"],[115,2,1,"","get_model"],[115,2,1,"","get_number_of_components_in_round"],[115,2,1,"","get_partial_cipher"],[115,2,1,"","get_round_from_component_id"],[115,2,1,"","get_sizes_of_components_by_type"],[115,3,1,"","id"],[115,2,1,"","impossible_differential_search"],[115,3,1,"","inputs"],[115,3,1,"","inputs_bit_size"],[115,2,1,"","inputs_size_to_dict"],[115,2,1,"","is_algebraically_secure"],[115,2,1,"","is_andrx"],[115,2,1,"","is_arx"],[115,2,1,"","is_power_of_2_word_based"],[115,2,1,"","is_shift_arx"],[115,2,1,"","is_spn"],[115,2,1,"","make_cipher_id"],[115,2,1,"","make_file_name"],[115,2,1,"","neural_network_blackbox_distinguisher_tests"],[115,2,1,"","neural_network_differential_distinguisher_tests"],[115,3,1,"","number_of_rounds"],[115,3,1,"","output_bit_size"],[115,2,1,"","polynomial_system"],[115,2,1,"","polynomial_system_at_round"],[115,2,1,"","print"],[115,2,1,"","print_as_python_dictionary"],[115,2,1,"","print_as_python_dictionary_to_file"],[115,2,1,"","print_component_analysis_as_radar_charts"],[115,2,1,"","print_evaluation_python_code"],[115,2,1,"","print_evaluation_python_code_to_file"],[115,2,1,"","print_input_information"],[115,3,1,"","reference_code"],[115,2,1,"","remove_key_schedule"],[115,2,1,"","remove_round_component"],[115,2,1,"","remove_round_component_from_id"],[115,3,1,"","rounds"],[115,3,1,"","rounds_as_list"],[115,2,1,"","run_autond_pipeline"],[115,2,1,"","set_file_name"],[115,2,1,"","set_id"],[115,2,1,"","set_inputs"],[115,2,1,"","sort_cipher"],[115,2,1,"","test_against_reference_code"],[115,2,1,"","test_vector_check"],[115,2,1,"","train_gohr_neural_distinguisher"],[115,2,1,"","train_neural_distinguisher"],[115,3,1,"","type"],[115,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations":[[116,0,0,"-","ascon_permutation"],[117,0,0,"-","ascon_sbox_sigma_no_matrix_permutation"],[118,0,0,"-","ascon_sbox_sigma_permutation"],[119,0,0,"-","chacha_permutation"],[120,0,0,"-","gift_permutation"],[121,0,0,"-","gift_sbox_permutation"],[122,0,0,"-","gimli_permutation"],[123,0,0,"-","gimli_sbox_permutation"],[124,0,0,"-","grain_core_permutation"],[125,0,0,"-","keccak_invertible_permutation"],[126,0,0,"-","keccak_permutation"],[127,0,0,"-","keccak_sbox_permutation"],[128,0,0,"-","photon_permutation"],[129,0,0,"-","salsa_permutation"],[130,0,0,"-","sparkle_permutation"],[131,0,0,"-","spongent_pi_fsr_permutation"],[132,0,0,"-","spongent_pi_permutation"],[133,0,0,"-","spongent_pi_precomputation_permutation"],[134,0,0,"-","tinyjambu_32bits_word_permutation"],[135,0,0,"-","tinyjambu_fsr_32bits_word_permutation"],[136,0,0,"-","tinyjambu_permutation"],[137,0,0,"-","util"],[138,0,0,"-","xoodoo_invertible_permutation"],[139,0,0,"-","xoodoo_permutation"],[140,0,0,"-","xoodoo_sbox_permutation"]],"ciphers.permutations.ascon_permutation":[[116,1,1,"","AsconPermutation"]],"ciphers.permutations.ascon_permutation.AsconPermutation":[[116,2,1,"","add_AND_component"],[116,2,1,"","add_FSR_component"],[116,2,1,"","add_MODADD_component"],[116,2,1,"","add_MODSUB_component"],[116,2,1,"","add_NOT_component"],[116,2,1,"","add_OR_component"],[116,2,1,"","add_SBOX_component"],[116,2,1,"","add_SHIFT_component"],[116,2,1,"","add_XOR_component"],[116,2,1,"","add_cipher_output_component"],[116,2,1,"","add_concatenate_component"],[116,2,1,"","add_constant_component"],[116,2,1,"","add_intermediate_output_component"],[116,2,1,"","add_linear_layer_component"],[116,2,1,"","add_mix_column_component"],[116,2,1,"","add_permutation_component"],[116,2,1,"","add_reverse_component"],[116,2,1,"","add_rotate_component"],[116,2,1,"","add_round"],[116,2,1,"","add_round_key_output_component"],[116,2,1,"","add_round_output_component"],[116,2,1,"","add_shift_rows_component"],[116,2,1,"","add_sigma_component"],[116,2,1,"","add_suffix_to_components"],[116,2,1,"","add_theta_keccak_component"],[116,2,1,"","add_theta_xoodoo_component"],[116,2,1,"","add_variable_rotate_component"],[116,2,1,"","add_variable_shift_component"],[116,2,1,"","add_word_permutation_component"],[116,2,1,"","algebraic_tests"],[116,2,1,"","analyze_cipher"],[116,2,1,"","as_python_dictionary"],[116,2,1,"","avalanche_probability_vectors"],[116,2,1,"","cipher_inverse"],[116,2,1,"","cipher_partial_inverse"],[116,2,1,"","component_analysis_tests"],[116,2,1,"","component_from"],[116,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[116,2,1,"","continuous_avalanche_factor"],[116,2,1,"","continuous_diffusion_factor"],[116,2,1,"","continuous_diffusion_tests"],[116,2,1,"","continuous_neutrality_measure_for_bit_j"],[116,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[116,2,1,"","convert_to_compound_xor_cipher"],[116,3,1,"","current_round"],[116,3,1,"","current_round_number"],[116,3,1,"","current_round_number_of_components"],[116,2,1,"","delete_generated_evaluate_c_shared_library"],[116,2,1,"","diffusion_tests"],[116,2,1,"","evaluate"],[116,2,1,"","evaluate_using_c"],[116,2,1,"","evaluate_vectorized"],[116,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[116,3,1,"","family_name"],[116,3,1,"","file_name"],[116,2,1,"","find_good_input_difference_for_neural_distinguisher"],[116,2,1,"","find_impossible_property"],[116,2,1,"","generate_bit_based_c_code"],[116,2,1,"","generate_csv_report"],[116,2,1,"","generate_evaluate_c_code_shared_library"],[116,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[116,2,1,"","generate_word_based_c_code"],[116,2,1,"","get_all_components"],[116,2,1,"","get_all_components_ids"],[116,2,1,"","get_all_inputs_bit_positions"],[116,2,1,"","get_component_from_id"],[116,2,1,"","get_components_in_round"],[116,2,1,"","get_current_component_id"],[116,2,1,"","get_model"],[116,2,1,"","get_number_of_components_in_round"],[116,2,1,"","get_partial_cipher"],[116,2,1,"","get_round_from_component_id"],[116,2,1,"","get_sizes_of_components_by_type"],[116,3,1,"","id"],[116,2,1,"","impossible_differential_search"],[116,3,1,"","inputs"],[116,3,1,"","inputs_bit_size"],[116,2,1,"","inputs_size_to_dict"],[116,2,1,"","is_algebraically_secure"],[116,2,1,"","is_andrx"],[116,2,1,"","is_arx"],[116,2,1,"","is_power_of_2_word_based"],[116,2,1,"","is_shift_arx"],[116,2,1,"","is_spn"],[116,2,1,"","make_cipher_id"],[116,2,1,"","make_file_name"],[116,2,1,"","neural_network_blackbox_distinguisher_tests"],[116,2,1,"","neural_network_differential_distinguisher_tests"],[116,3,1,"","number_of_rounds"],[116,3,1,"","output_bit_size"],[116,2,1,"","polynomial_system"],[116,2,1,"","polynomial_system_at_round"],[116,2,1,"","print"],[116,2,1,"","print_as_python_dictionary"],[116,2,1,"","print_as_python_dictionary_to_file"],[116,2,1,"","print_component_analysis_as_radar_charts"],[116,2,1,"","print_evaluation_python_code"],[116,2,1,"","print_evaluation_python_code_to_file"],[116,2,1,"","print_input_information"],[116,3,1,"","reference_code"],[116,2,1,"","remove_key_schedule"],[116,2,1,"","remove_round_component"],[116,2,1,"","remove_round_component_from_id"],[116,2,1,"","round_function"],[116,3,1,"","rounds"],[116,3,1,"","rounds_as_list"],[116,2,1,"","run_autond_pipeline"],[116,2,1,"","set_file_name"],[116,2,1,"","set_id"],[116,2,1,"","set_inputs"],[116,2,1,"","sort_cipher"],[116,2,1,"","test_against_reference_code"],[116,2,1,"","test_vector_check"],[116,2,1,"","train_gohr_neural_distinguisher"],[116,2,1,"","train_neural_distinguisher"],[116,3,1,"","type"],[116,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation":[[117,1,1,"","AsconSboxSigmaNoMatrixPermutation"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation.AsconSboxSigmaNoMatrixPermutation":[[117,2,1,"","add_AND_component"],[117,2,1,"","add_FSR_component"],[117,2,1,"","add_MODADD_component"],[117,2,1,"","add_MODSUB_component"],[117,2,1,"","add_NOT_component"],[117,2,1,"","add_OR_component"],[117,2,1,"","add_SBOX_component"],[117,2,1,"","add_SHIFT_component"],[117,2,1,"","add_XOR_component"],[117,2,1,"","add_cipher_output_component"],[117,2,1,"","add_concatenate_component"],[117,2,1,"","add_constant_component"],[117,2,1,"","add_intermediate_output_component"],[117,2,1,"","add_linear_layer_component"],[117,2,1,"","add_mix_column_component"],[117,2,1,"","add_permutation_component"],[117,2,1,"","add_reverse_component"],[117,2,1,"","add_rotate_component"],[117,2,1,"","add_round"],[117,2,1,"","add_round_key_output_component"],[117,2,1,"","add_round_output_component"],[117,2,1,"","add_shift_rows_component"],[117,2,1,"","add_sigma_component"],[117,2,1,"","add_suffix_to_components"],[117,2,1,"","add_theta_keccak_component"],[117,2,1,"","add_theta_xoodoo_component"],[117,2,1,"","add_variable_rotate_component"],[117,2,1,"","add_variable_shift_component"],[117,2,1,"","add_word_permutation_component"],[117,2,1,"","algebraic_tests"],[117,2,1,"","analyze_cipher"],[117,2,1,"","as_python_dictionary"],[117,2,1,"","avalanche_probability_vectors"],[117,2,1,"","cipher_inverse"],[117,2,1,"","cipher_partial_inverse"],[117,2,1,"","component_analysis_tests"],[117,2,1,"","component_from"],[117,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[117,2,1,"","continuous_avalanche_factor"],[117,2,1,"","continuous_diffusion_factor"],[117,2,1,"","continuous_diffusion_tests"],[117,2,1,"","continuous_neutrality_measure_for_bit_j"],[117,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[117,2,1,"","convert_to_compound_xor_cipher"],[117,3,1,"","current_round"],[117,3,1,"","current_round_number"],[117,3,1,"","current_round_number_of_components"],[117,2,1,"","delete_generated_evaluate_c_shared_library"],[117,2,1,"","diffusion_tests"],[117,2,1,"","evaluate"],[117,2,1,"","evaluate_using_c"],[117,2,1,"","evaluate_vectorized"],[117,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[117,3,1,"","family_name"],[117,3,1,"","file_name"],[117,2,1,"","find_good_input_difference_for_neural_distinguisher"],[117,2,1,"","find_impossible_property"],[117,2,1,"","generate_bit_based_c_code"],[117,2,1,"","generate_csv_report"],[117,2,1,"","generate_evaluate_c_code_shared_library"],[117,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[117,2,1,"","generate_word_based_c_code"],[117,2,1,"","get_all_components"],[117,2,1,"","get_all_components_ids"],[117,2,1,"","get_all_inputs_bit_positions"],[117,2,1,"","get_component_from_id"],[117,2,1,"","get_components_in_round"],[117,2,1,"","get_current_component_id"],[117,2,1,"","get_model"],[117,2,1,"","get_number_of_components_in_round"],[117,2,1,"","get_partial_cipher"],[117,2,1,"","get_round_from_component_id"],[117,2,1,"","get_sizes_of_components_by_type"],[117,3,1,"","id"],[117,2,1,"","impossible_differential_search"],[117,3,1,"","inputs"],[117,3,1,"","inputs_bit_size"],[117,2,1,"","inputs_size_to_dict"],[117,2,1,"","is_algebraically_secure"],[117,2,1,"","is_andrx"],[117,2,1,"","is_arx"],[117,2,1,"","is_power_of_2_word_based"],[117,2,1,"","is_shift_arx"],[117,2,1,"","is_spn"],[117,2,1,"","make_cipher_id"],[117,2,1,"","make_file_name"],[117,2,1,"","neural_network_blackbox_distinguisher_tests"],[117,2,1,"","neural_network_differential_distinguisher_tests"],[117,3,1,"","number_of_rounds"],[117,3,1,"","output_bit_size"],[117,2,1,"","polynomial_system"],[117,2,1,"","polynomial_system_at_round"],[117,2,1,"","print"],[117,2,1,"","print_as_python_dictionary"],[117,2,1,"","print_as_python_dictionary_to_file"],[117,2,1,"","print_component_analysis_as_radar_charts"],[117,2,1,"","print_evaluation_python_code"],[117,2,1,"","print_evaluation_python_code_to_file"],[117,2,1,"","print_input_information"],[117,3,1,"","reference_code"],[117,2,1,"","remove_key_schedule"],[117,2,1,"","remove_round_component"],[117,2,1,"","remove_round_component_from_id"],[117,2,1,"","round_function"],[117,3,1,"","rounds"],[117,3,1,"","rounds_as_list"],[117,2,1,"","run_autond_pipeline"],[117,2,1,"","set_file_name"],[117,2,1,"","set_id"],[117,2,1,"","set_inputs"],[117,2,1,"","sort_cipher"],[117,2,1,"","test_against_reference_code"],[117,2,1,"","test_vector_check"],[117,2,1,"","train_gohr_neural_distinguisher"],[117,2,1,"","train_neural_distinguisher"],[117,3,1,"","type"],[117,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_permutation":[[118,1,1,"","AsconSboxSigmaPermutation"]],"ciphers.permutations.ascon_sbox_sigma_permutation.AsconSboxSigmaPermutation":[[118,2,1,"","add_AND_component"],[118,2,1,"","add_FSR_component"],[118,2,1,"","add_MODADD_component"],[118,2,1,"","add_MODSUB_component"],[118,2,1,"","add_NOT_component"],[118,2,1,"","add_OR_component"],[118,2,1,"","add_SBOX_component"],[118,2,1,"","add_SHIFT_component"],[118,2,1,"","add_XOR_component"],[118,2,1,"","add_cipher_output_component"],[118,2,1,"","add_concatenate_component"],[118,2,1,"","add_constant_component"],[118,2,1,"","add_intermediate_output_component"],[118,2,1,"","add_linear_layer_component"],[118,2,1,"","add_mix_column_component"],[118,2,1,"","add_permutation_component"],[118,2,1,"","add_reverse_component"],[118,2,1,"","add_rotate_component"],[118,2,1,"","add_round"],[118,2,1,"","add_round_key_output_component"],[118,2,1,"","add_round_output_component"],[118,2,1,"","add_shift_rows_component"],[118,2,1,"","add_sigma_component"],[118,2,1,"","add_suffix_to_components"],[118,2,1,"","add_theta_keccak_component"],[118,2,1,"","add_theta_xoodoo_component"],[118,2,1,"","add_variable_rotate_component"],[118,2,1,"","add_variable_shift_component"],[118,2,1,"","add_word_permutation_component"],[118,2,1,"","algebraic_tests"],[118,2,1,"","analyze_cipher"],[118,2,1,"","as_python_dictionary"],[118,2,1,"","avalanche_probability_vectors"],[118,2,1,"","cipher_inverse"],[118,2,1,"","cipher_partial_inverse"],[118,2,1,"","component_analysis_tests"],[118,2,1,"","component_from"],[118,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[118,2,1,"","continuous_avalanche_factor"],[118,2,1,"","continuous_diffusion_factor"],[118,2,1,"","continuous_diffusion_tests"],[118,2,1,"","continuous_neutrality_measure_for_bit_j"],[118,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[118,2,1,"","convert_to_compound_xor_cipher"],[118,3,1,"","current_round"],[118,3,1,"","current_round_number"],[118,3,1,"","current_round_number_of_components"],[118,2,1,"","delete_generated_evaluate_c_shared_library"],[118,2,1,"","diffusion_tests"],[118,2,1,"","evaluate"],[118,2,1,"","evaluate_using_c"],[118,2,1,"","evaluate_vectorized"],[118,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[118,3,1,"","family_name"],[118,3,1,"","file_name"],[118,2,1,"","find_good_input_difference_for_neural_distinguisher"],[118,2,1,"","find_impossible_property"],[118,2,1,"","generate_bit_based_c_code"],[118,2,1,"","generate_csv_report"],[118,2,1,"","generate_evaluate_c_code_shared_library"],[118,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[118,2,1,"","generate_word_based_c_code"],[118,2,1,"","get_all_components"],[118,2,1,"","get_all_components_ids"],[118,2,1,"","get_all_inputs_bit_positions"],[118,2,1,"","get_component_from_id"],[118,2,1,"","get_components_in_round"],[118,2,1,"","get_current_component_id"],[118,2,1,"","get_model"],[118,2,1,"","get_number_of_components_in_round"],[118,2,1,"","get_partial_cipher"],[118,2,1,"","get_round_from_component_id"],[118,2,1,"","get_sizes_of_components_by_type"],[118,3,1,"","id"],[118,2,1,"","impossible_differential_search"],[118,3,1,"","inputs"],[118,3,1,"","inputs_bit_size"],[118,2,1,"","inputs_size_to_dict"],[118,2,1,"","is_algebraically_secure"],[118,2,1,"","is_andrx"],[118,2,1,"","is_arx"],[118,2,1,"","is_power_of_2_word_based"],[118,2,1,"","is_shift_arx"],[118,2,1,"","is_spn"],[118,2,1,"","make_cipher_id"],[118,2,1,"","make_file_name"],[118,2,1,"","neural_network_blackbox_distinguisher_tests"],[118,2,1,"","neural_network_differential_distinguisher_tests"],[118,3,1,"","number_of_rounds"],[118,3,1,"","output_bit_size"],[118,2,1,"","polynomial_system"],[118,2,1,"","polynomial_system_at_round"],[118,2,1,"","print"],[118,2,1,"","print_as_python_dictionary"],[118,2,1,"","print_as_python_dictionary_to_file"],[118,2,1,"","print_component_analysis_as_radar_charts"],[118,2,1,"","print_evaluation_python_code"],[118,2,1,"","print_evaluation_python_code_to_file"],[118,2,1,"","print_input_information"],[118,3,1,"","reference_code"],[118,2,1,"","remove_key_schedule"],[118,2,1,"","remove_round_component"],[118,2,1,"","remove_round_component_from_id"],[118,2,1,"","round_function"],[118,3,1,"","rounds"],[118,3,1,"","rounds_as_list"],[118,2,1,"","run_autond_pipeline"],[118,2,1,"","set_file_name"],[118,2,1,"","set_id"],[118,2,1,"","set_inputs"],[118,2,1,"","sort_cipher"],[118,2,1,"","test_against_reference_code"],[118,2,1,"","test_vector_check"],[118,2,1,"","train_gohr_neural_distinguisher"],[118,2,1,"","train_neural_distinguisher"],[118,3,1,"","type"],[118,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.chacha_permutation":[[119,1,1,"","ChachaPermutation"]],"ciphers.permutations.chacha_permutation.ChachaPermutation":[[119,2,1,"","add_AND_component"],[119,2,1,"","add_FSR_component"],[119,2,1,"","add_MODADD_component"],[119,2,1,"","add_MODSUB_component"],[119,2,1,"","add_NOT_component"],[119,2,1,"","add_OR_component"],[119,2,1,"","add_SBOX_component"],[119,2,1,"","add_SHIFT_component"],[119,2,1,"","add_XOR_component"],[119,2,1,"","add_cipher_output_component"],[119,2,1,"","add_concatenate_component"],[119,2,1,"","add_constant_component"],[119,2,1,"","add_intermediate_output_component"],[119,2,1,"","add_linear_layer_component"],[119,2,1,"","add_mix_column_component"],[119,2,1,"","add_permutation_component"],[119,2,1,"","add_reverse_component"],[119,2,1,"","add_rotate_component"],[119,2,1,"","add_round"],[119,2,1,"","add_round_key_output_component"],[119,2,1,"","add_round_output_component"],[119,2,1,"","add_shift_rows_component"],[119,2,1,"","add_sigma_component"],[119,2,1,"","add_suffix_to_components"],[119,2,1,"","add_theta_keccak_component"],[119,2,1,"","add_theta_xoodoo_component"],[119,2,1,"","add_variable_rotate_component"],[119,2,1,"","add_variable_shift_component"],[119,2,1,"","add_word_permutation_component"],[119,2,1,"","algebraic_tests"],[119,2,1,"","analyze_cipher"],[119,2,1,"","as_python_dictionary"],[119,2,1,"","avalanche_probability_vectors"],[119,2,1,"","bottom_half_quarter_round"],[119,2,1,"","cipher_inverse"],[119,2,1,"","cipher_partial_inverse"],[119,2,1,"","component_analysis_tests"],[119,2,1,"","component_from"],[119,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[119,2,1,"","continuous_avalanche_factor"],[119,2,1,"","continuous_diffusion_factor"],[119,2,1,"","continuous_diffusion_tests"],[119,2,1,"","continuous_neutrality_measure_for_bit_j"],[119,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[119,2,1,"","convert_to_compound_xor_cipher"],[119,3,1,"","current_round"],[119,3,1,"","current_round_number"],[119,3,1,"","current_round_number_of_components"],[119,2,1,"","delete_generated_evaluate_c_shared_library"],[119,2,1,"","diffusion_tests"],[119,2,1,"","evaluate"],[119,2,1,"","evaluate_using_c"],[119,2,1,"","evaluate_vectorized"],[119,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[119,3,1,"","family_name"],[119,3,1,"","file_name"],[119,2,1,"","find_good_input_difference_for_neural_distinguisher"],[119,2,1,"","find_impossible_property"],[119,2,1,"","generate_bit_based_c_code"],[119,2,1,"","generate_csv_report"],[119,2,1,"","generate_evaluate_c_code_shared_library"],[119,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[119,2,1,"","generate_word_based_c_code"],[119,2,1,"","get_all_components"],[119,2,1,"","get_all_components_ids"],[119,2,1,"","get_all_inputs_bit_positions"],[119,2,1,"","get_component_from_id"],[119,2,1,"","get_components_in_round"],[119,2,1,"","get_current_component_id"],[119,2,1,"","get_model"],[119,2,1,"","get_number_of_components_in_round"],[119,2,1,"","get_partial_cipher"],[119,2,1,"","get_round_from_component_id"],[119,2,1,"","get_sizes_of_components_by_type"],[119,3,1,"","id"],[119,2,1,"","impossible_differential_search"],[119,3,1,"","inputs"],[119,3,1,"","inputs_bit_size"],[119,2,1,"","inputs_size_to_dict"],[119,2,1,"","is_algebraically_secure"],[119,2,1,"","is_andrx"],[119,2,1,"","is_arx"],[119,2,1,"","is_power_of_2_word_based"],[119,2,1,"","is_shift_arx"],[119,2,1,"","is_spn"],[119,2,1,"","make_cipher_id"],[119,2,1,"","make_file_name"],[119,2,1,"","neural_network_blackbox_distinguisher_tests"],[119,2,1,"","neural_network_differential_distinguisher_tests"],[119,3,1,"","number_of_rounds"],[119,3,1,"","output_bit_size"],[119,2,1,"","polynomial_system"],[119,2,1,"","polynomial_system_at_round"],[119,2,1,"","print"],[119,2,1,"","print_as_python_dictionary"],[119,2,1,"","print_as_python_dictionary_to_file"],[119,2,1,"","print_component_analysis_as_radar_charts"],[119,2,1,"","print_evaluation_python_code"],[119,2,1,"","print_evaluation_python_code_to_file"],[119,2,1,"","print_input_information"],[119,3,1,"","reference_code"],[119,2,1,"","remove_key_schedule"],[119,2,1,"","remove_round_component"],[119,2,1,"","remove_round_component_from_id"],[119,3,1,"","rounds"],[119,3,1,"","rounds_as_list"],[119,2,1,"","run_autond_pipeline"],[119,2,1,"","set_file_name"],[119,2,1,"","set_id"],[119,2,1,"","set_inputs"],[119,2,1,"","sort_cipher"],[119,2,1,"","test_against_reference_code"],[119,2,1,"","test_vector_check"],[119,2,1,"","top_half_quarter_round"],[119,2,1,"","train_gohr_neural_distinguisher"],[119,2,1,"","train_neural_distinguisher"],[119,3,1,"","type"],[119,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_permutation":[[120,1,1,"","GiftPermutation"]],"ciphers.permutations.gift_permutation.GiftPermutation":[[120,2,1,"","add_AND_component"],[120,2,1,"","add_FSR_component"],[120,2,1,"","add_MODADD_component"],[120,2,1,"","add_MODSUB_component"],[120,2,1,"","add_NOT_component"],[120,2,1,"","add_OR_component"],[120,2,1,"","add_SBOX_component"],[120,2,1,"","add_SHIFT_component"],[120,2,1,"","add_XOR_component"],[120,2,1,"","add_cipher_output_component"],[120,2,1,"","add_concatenate_component"],[120,2,1,"","add_constant_component"],[120,2,1,"","add_intermediate_output_component"],[120,2,1,"","add_linear_layer_component"],[120,2,1,"","add_mix_column_component"],[120,2,1,"","add_permutation_component"],[120,2,1,"","add_reverse_component"],[120,2,1,"","add_rotate_component"],[120,2,1,"","add_round"],[120,2,1,"","add_round_key_output_component"],[120,2,1,"","add_round_output_component"],[120,2,1,"","add_shift_rows_component"],[120,2,1,"","add_sigma_component"],[120,2,1,"","add_suffix_to_components"],[120,2,1,"","add_theta_keccak_component"],[120,2,1,"","add_theta_xoodoo_component"],[120,2,1,"","add_variable_rotate_component"],[120,2,1,"","add_variable_shift_component"],[120,2,1,"","add_word_permutation_component"],[120,2,1,"","algebraic_tests"],[120,2,1,"","analyze_cipher"],[120,2,1,"","as_python_dictionary"],[120,2,1,"","avalanche_probability_vectors"],[120,2,1,"","cipher_inverse"],[120,2,1,"","cipher_partial_inverse"],[120,2,1,"","component_analysis_tests"],[120,2,1,"","component_from"],[120,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[120,2,1,"","continuous_avalanche_factor"],[120,2,1,"","continuous_diffusion_factor"],[120,2,1,"","continuous_diffusion_tests"],[120,2,1,"","continuous_neutrality_measure_for_bit_j"],[120,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[120,2,1,"","convert_to_compound_xor_cipher"],[120,3,1,"","current_round"],[120,3,1,"","current_round_number"],[120,3,1,"","current_round_number_of_components"],[120,2,1,"","delete_generated_evaluate_c_shared_library"],[120,2,1,"","diffusion_tests"],[120,2,1,"","evaluate"],[120,2,1,"","evaluate_using_c"],[120,2,1,"","evaluate_vectorized"],[120,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[120,3,1,"","family_name"],[120,3,1,"","file_name"],[120,2,1,"","find_good_input_difference_for_neural_distinguisher"],[120,2,1,"","find_impossible_property"],[120,2,1,"","generate_bit_based_c_code"],[120,2,1,"","generate_csv_report"],[120,2,1,"","generate_evaluate_c_code_shared_library"],[120,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[120,2,1,"","generate_word_based_c_code"],[120,2,1,"","get_all_components"],[120,2,1,"","get_all_components_ids"],[120,2,1,"","get_all_inputs_bit_positions"],[120,2,1,"","get_component_from_id"],[120,2,1,"","get_components_in_round"],[120,2,1,"","get_current_component_id"],[120,2,1,"","get_model"],[120,2,1,"","get_number_of_components_in_round"],[120,2,1,"","get_partial_cipher"],[120,2,1,"","get_round_from_component_id"],[120,2,1,"","get_sizes_of_components_by_type"],[120,3,1,"","id"],[120,2,1,"","impossible_differential_search"],[120,3,1,"","inputs"],[120,3,1,"","inputs_bit_size"],[120,2,1,"","inputs_size_to_dict"],[120,2,1,"","is_algebraically_secure"],[120,2,1,"","is_andrx"],[120,2,1,"","is_arx"],[120,2,1,"","is_power_of_2_word_based"],[120,2,1,"","is_shift_arx"],[120,2,1,"","is_spn"],[120,2,1,"","key_schedule"],[120,2,1,"","make_cipher_id"],[120,2,1,"","make_file_name"],[120,2,1,"","neural_network_blackbox_distinguisher_tests"],[120,2,1,"","neural_network_differential_distinguisher_tests"],[120,3,1,"","number_of_rounds"],[120,3,1,"","output_bit_size"],[120,2,1,"","polynomial_system"],[120,2,1,"","polynomial_system_at_round"],[120,2,1,"","print"],[120,2,1,"","print_as_python_dictionary"],[120,2,1,"","print_as_python_dictionary_to_file"],[120,2,1,"","print_component_analysis_as_radar_charts"],[120,2,1,"","print_evaluation_python_code"],[120,2,1,"","print_evaluation_python_code_to_file"],[120,2,1,"","print_input_information"],[120,3,1,"","reference_code"],[120,2,1,"","remove_key_schedule"],[120,2,1,"","remove_round_component"],[120,2,1,"","remove_round_component_from_id"],[120,2,1,"","round_function"],[120,3,1,"","rounds"],[120,3,1,"","rounds_as_list"],[120,2,1,"","run_autond_pipeline"],[120,2,1,"","set_file_name"],[120,2,1,"","set_id"],[120,2,1,"","set_inputs"],[120,2,1,"","sort_cipher"],[120,2,1,"","test_against_reference_code"],[120,2,1,"","test_vector_check"],[120,2,1,"","train_gohr_neural_distinguisher"],[120,2,1,"","train_neural_distinguisher"],[120,3,1,"","type"],[120,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_sbox_permutation":[[121,1,1,"","GiftSboxPermutation"]],"ciphers.permutations.gift_sbox_permutation.GiftSboxPermutation":[[121,2,1,"","add_AND_component"],[121,2,1,"","add_FSR_component"],[121,2,1,"","add_MODADD_component"],[121,2,1,"","add_MODSUB_component"],[121,2,1,"","add_NOT_component"],[121,2,1,"","add_OR_component"],[121,2,1,"","add_SBOX_component"],[121,2,1,"","add_SHIFT_component"],[121,2,1,"","add_XOR_component"],[121,2,1,"","add_cipher_output_component"],[121,2,1,"","add_concatenate_component"],[121,2,1,"","add_constant_component"],[121,2,1,"","add_intermediate_output_component"],[121,2,1,"","add_linear_layer_component"],[121,2,1,"","add_mix_column_component"],[121,2,1,"","add_permutation_component"],[121,2,1,"","add_reverse_component"],[121,2,1,"","add_rotate_component"],[121,2,1,"","add_round"],[121,2,1,"","add_round_key_output_component"],[121,2,1,"","add_round_output_component"],[121,2,1,"","add_shift_rows_component"],[121,2,1,"","add_sigma_component"],[121,2,1,"","add_suffix_to_components"],[121,2,1,"","add_theta_keccak_component"],[121,2,1,"","add_theta_xoodoo_component"],[121,2,1,"","add_variable_rotate_component"],[121,2,1,"","add_variable_shift_component"],[121,2,1,"","add_word_permutation_component"],[121,2,1,"","algebraic_tests"],[121,2,1,"","analyze_cipher"],[121,2,1,"","as_python_dictionary"],[121,2,1,"","avalanche_probability_vectors"],[121,2,1,"","cipher_inverse"],[121,2,1,"","cipher_partial_inverse"],[121,2,1,"","component_analysis_tests"],[121,2,1,"","component_from"],[121,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[121,2,1,"","continuous_avalanche_factor"],[121,2,1,"","continuous_diffusion_factor"],[121,2,1,"","continuous_diffusion_tests"],[121,2,1,"","continuous_neutrality_measure_for_bit_j"],[121,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[121,2,1,"","convert_to_compound_xor_cipher"],[121,3,1,"","current_round"],[121,3,1,"","current_round_number"],[121,3,1,"","current_round_number_of_components"],[121,2,1,"","delete_generated_evaluate_c_shared_library"],[121,2,1,"","diffusion_tests"],[121,2,1,"","evaluate"],[121,2,1,"","evaluate_using_c"],[121,2,1,"","evaluate_vectorized"],[121,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[121,3,1,"","family_name"],[121,3,1,"","file_name"],[121,2,1,"","find_good_input_difference_for_neural_distinguisher"],[121,2,1,"","find_impossible_property"],[121,2,1,"","generate_bit_based_c_code"],[121,2,1,"","generate_csv_report"],[121,2,1,"","generate_evaluate_c_code_shared_library"],[121,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[121,2,1,"","generate_word_based_c_code"],[121,2,1,"","get_all_components"],[121,2,1,"","get_all_components_ids"],[121,2,1,"","get_all_inputs_bit_positions"],[121,2,1,"","get_component_from_id"],[121,2,1,"","get_components_in_round"],[121,2,1,"","get_current_component_id"],[121,2,1,"","get_model"],[121,2,1,"","get_number_of_components_in_round"],[121,2,1,"","get_partial_cipher"],[121,2,1,"","get_round_from_component_id"],[121,2,1,"","get_sizes_of_components_by_type"],[121,3,1,"","id"],[121,2,1,"","impossible_differential_search"],[121,3,1,"","inputs"],[121,3,1,"","inputs_bit_size"],[121,2,1,"","inputs_size_to_dict"],[121,2,1,"","is_algebraically_secure"],[121,2,1,"","is_andrx"],[121,2,1,"","is_arx"],[121,2,1,"","is_power_of_2_word_based"],[121,2,1,"","is_shift_arx"],[121,2,1,"","is_spn"],[121,2,1,"","key_schedule"],[121,2,1,"","make_cipher_id"],[121,2,1,"","make_file_name"],[121,2,1,"","neural_network_blackbox_distinguisher_tests"],[121,2,1,"","neural_network_differential_distinguisher_tests"],[121,3,1,"","number_of_rounds"],[121,3,1,"","output_bit_size"],[121,2,1,"","polynomial_system"],[121,2,1,"","polynomial_system_at_round"],[121,2,1,"","print"],[121,2,1,"","print_as_python_dictionary"],[121,2,1,"","print_as_python_dictionary_to_file"],[121,2,1,"","print_component_analysis_as_radar_charts"],[121,2,1,"","print_evaluation_python_code"],[121,2,1,"","print_evaluation_python_code_to_file"],[121,2,1,"","print_input_information"],[121,3,1,"","reference_code"],[121,2,1,"","remove_key_schedule"],[121,2,1,"","remove_round_component"],[121,2,1,"","remove_round_component_from_id"],[121,2,1,"","round_function"],[121,3,1,"","rounds"],[121,3,1,"","rounds_as_list"],[121,2,1,"","run_autond_pipeline"],[121,2,1,"","set_file_name"],[121,2,1,"","set_id"],[121,2,1,"","set_inputs"],[121,2,1,"","sort_cipher"],[121,2,1,"","test_against_reference_code"],[121,2,1,"","test_vector_check"],[121,2,1,"","train_gohr_neural_distinguisher"],[121,2,1,"","train_neural_distinguisher"],[121,3,1,"","type"],[121,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_permutation":[[122,1,1,"","GimliPermutation"],[122,4,1,"","big_swap"],[122,4,1,"","small_swap"]],"ciphers.permutations.gimli_permutation.GimliPermutation":[[122,2,1,"","add_AND_component"],[122,2,1,"","add_FSR_component"],[122,2,1,"","add_MODADD_component"],[122,2,1,"","add_MODSUB_component"],[122,2,1,"","add_NOT_component"],[122,2,1,"","add_OR_component"],[122,2,1,"","add_SBOX_component"],[122,2,1,"","add_SHIFT_component"],[122,2,1,"","add_XOR_component"],[122,2,1,"","add_cipher_output_component"],[122,2,1,"","add_concatenate_component"],[122,2,1,"","add_constant_component"],[122,2,1,"","add_intermediate_output_component"],[122,2,1,"","add_linear_layer_component"],[122,2,1,"","add_mix_column_component"],[122,2,1,"","add_permutation_component"],[122,2,1,"","add_reverse_component"],[122,2,1,"","add_rotate_component"],[122,2,1,"","add_round"],[122,2,1,"","add_round_key_output_component"],[122,2,1,"","add_round_output_component"],[122,2,1,"","add_shift_rows_component"],[122,2,1,"","add_sigma_component"],[122,2,1,"","add_suffix_to_components"],[122,2,1,"","add_theta_keccak_component"],[122,2,1,"","add_theta_xoodoo_component"],[122,2,1,"","add_variable_rotate_component"],[122,2,1,"","add_variable_shift_component"],[122,2,1,"","add_word_permutation_component"],[122,2,1,"","algebraic_tests"],[122,2,1,"","analyze_cipher"],[122,2,1,"","as_python_dictionary"],[122,2,1,"","avalanche_probability_vectors"],[122,2,1,"","cipher_inverse"],[122,2,1,"","cipher_partial_inverse"],[122,2,1,"","component_analysis_tests"],[122,2,1,"","component_from"],[122,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[122,2,1,"","continuous_avalanche_factor"],[122,2,1,"","continuous_diffusion_factor"],[122,2,1,"","continuous_diffusion_tests"],[122,2,1,"","continuous_neutrality_measure_for_bit_j"],[122,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[122,2,1,"","convert_to_compound_xor_cipher"],[122,3,1,"","current_round"],[122,3,1,"","current_round_number"],[122,3,1,"","current_round_number_of_components"],[122,2,1,"","delete_generated_evaluate_c_shared_library"],[122,2,1,"","diffusion_tests"],[122,2,1,"","evaluate"],[122,2,1,"","evaluate_using_c"],[122,2,1,"","evaluate_vectorized"],[122,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[122,3,1,"","family_name"],[122,3,1,"","file_name"],[122,2,1,"","find_good_input_difference_for_neural_distinguisher"],[122,2,1,"","find_impossible_property"],[122,2,1,"","generate_bit_based_c_code"],[122,2,1,"","generate_csv_report"],[122,2,1,"","generate_evaluate_c_code_shared_library"],[122,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[122,2,1,"","generate_word_based_c_code"],[122,2,1,"","get_all_components"],[122,2,1,"","get_all_components_ids"],[122,2,1,"","get_all_inputs_bit_positions"],[122,2,1,"","get_component_from_id"],[122,2,1,"","get_components_in_round"],[122,2,1,"","get_current_component_id"],[122,2,1,"","get_model"],[122,2,1,"","get_number_of_components_in_round"],[122,2,1,"","get_partial_cipher"],[122,2,1,"","get_round_from_component_id"],[122,2,1,"","get_sizes_of_components_by_type"],[122,3,1,"","id"],[122,2,1,"","impossible_differential_search"],[122,3,1,"","inputs"],[122,3,1,"","inputs_bit_size"],[122,2,1,"","inputs_size_to_dict"],[122,2,1,"","is_algebraically_secure"],[122,2,1,"","is_andrx"],[122,2,1,"","is_arx"],[122,2,1,"","is_power_of_2_word_based"],[122,2,1,"","is_shift_arx"],[122,2,1,"","is_spn"],[122,2,1,"","make_cipher_id"],[122,2,1,"","make_file_name"],[122,2,1,"","neural_network_blackbox_distinguisher_tests"],[122,2,1,"","neural_network_differential_distinguisher_tests"],[122,3,1,"","number_of_rounds"],[122,3,1,"","output_bit_size"],[122,2,1,"","polynomial_system"],[122,2,1,"","polynomial_system_at_round"],[122,2,1,"","print"],[122,2,1,"","print_as_python_dictionary"],[122,2,1,"","print_as_python_dictionary_to_file"],[122,2,1,"","print_component_analysis_as_radar_charts"],[122,2,1,"","print_evaluation_python_code"],[122,2,1,"","print_evaluation_python_code_to_file"],[122,2,1,"","print_input_information"],[122,3,1,"","reference_code"],[122,2,1,"","remove_key_schedule"],[122,2,1,"","remove_round_component"],[122,2,1,"","remove_round_component_from_id"],[122,2,1,"","round_constant"],[122,2,1,"","round_function"],[122,3,1,"","rounds"],[122,3,1,"","rounds_as_list"],[122,2,1,"","run_autond_pipeline"],[122,2,1,"","set_file_name"],[122,2,1,"","set_id"],[122,2,1,"","set_inputs"],[122,2,1,"","sort_cipher"],[122,2,1,"","sp_box"],[122,2,1,"","test_against_reference_code"],[122,2,1,"","test_vector_check"],[122,2,1,"","train_gohr_neural_distinguisher"],[122,2,1,"","train_neural_distinguisher"],[122,3,1,"","type"],[122,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_sbox_permutation":[[123,1,1,"","GimliSboxPermutation"],[123,4,1,"","big_swap"],[123,4,1,"","small_swap"]],"ciphers.permutations.gimli_sbox_permutation.GimliSboxPermutation":[[123,2,1,"","add_AND_component"],[123,2,1,"","add_FSR_component"],[123,2,1,"","add_MODADD_component"],[123,2,1,"","add_MODSUB_component"],[123,2,1,"","add_NOT_component"],[123,2,1,"","add_OR_component"],[123,2,1,"","add_SBOX_component"],[123,2,1,"","add_SHIFT_component"],[123,2,1,"","add_XOR_component"],[123,2,1,"","add_cipher_output_component"],[123,2,1,"","add_concatenate_component"],[123,2,1,"","add_constant_component"],[123,2,1,"","add_intermediate_output_component"],[123,2,1,"","add_linear_layer_component"],[123,2,1,"","add_mix_column_component"],[123,2,1,"","add_permutation_component"],[123,2,1,"","add_reverse_component"],[123,2,1,"","add_rotate_component"],[123,2,1,"","add_round"],[123,2,1,"","add_round_key_output_component"],[123,2,1,"","add_round_output_component"],[123,2,1,"","add_shift_rows_component"],[123,2,1,"","add_sigma_component"],[123,2,1,"","add_suffix_to_components"],[123,2,1,"","add_theta_keccak_component"],[123,2,1,"","add_theta_xoodoo_component"],[123,2,1,"","add_variable_rotate_component"],[123,2,1,"","add_variable_shift_component"],[123,2,1,"","add_word_permutation_component"],[123,2,1,"","algebraic_tests"],[123,2,1,"","analyze_cipher"],[123,2,1,"","as_python_dictionary"],[123,2,1,"","avalanche_probability_vectors"],[123,2,1,"","cipher_inverse"],[123,2,1,"","cipher_partial_inverse"],[123,2,1,"","component_analysis_tests"],[123,2,1,"","component_from"],[123,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[123,2,1,"","continuous_avalanche_factor"],[123,2,1,"","continuous_diffusion_factor"],[123,2,1,"","continuous_diffusion_tests"],[123,2,1,"","continuous_neutrality_measure_for_bit_j"],[123,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[123,2,1,"","convert_to_compound_xor_cipher"],[123,3,1,"","current_round"],[123,3,1,"","current_round_number"],[123,3,1,"","current_round_number_of_components"],[123,2,1,"","delete_generated_evaluate_c_shared_library"],[123,2,1,"","diffusion_tests"],[123,2,1,"","evaluate"],[123,2,1,"","evaluate_using_c"],[123,2,1,"","evaluate_vectorized"],[123,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[123,3,1,"","family_name"],[123,3,1,"","file_name"],[123,2,1,"","find_good_input_difference_for_neural_distinguisher"],[123,2,1,"","find_impossible_property"],[123,2,1,"","generate_bit_based_c_code"],[123,2,1,"","generate_csv_report"],[123,2,1,"","generate_evaluate_c_code_shared_library"],[123,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[123,2,1,"","generate_word_based_c_code"],[123,2,1,"","get_all_components"],[123,2,1,"","get_all_components_ids"],[123,2,1,"","get_all_inputs_bit_positions"],[123,2,1,"","get_component_from_id"],[123,2,1,"","get_components_in_round"],[123,2,1,"","get_current_component_id"],[123,2,1,"","get_model"],[123,2,1,"","get_number_of_components_in_round"],[123,2,1,"","get_partial_cipher"],[123,2,1,"","get_round_from_component_id"],[123,2,1,"","get_sizes_of_components_by_type"],[123,3,1,"","id"],[123,2,1,"","impossible_differential_search"],[123,3,1,"","inputs"],[123,3,1,"","inputs_bit_size"],[123,2,1,"","inputs_size_to_dict"],[123,2,1,"","is_algebraically_secure"],[123,2,1,"","is_andrx"],[123,2,1,"","is_arx"],[123,2,1,"","is_power_of_2_word_based"],[123,2,1,"","is_shift_arx"],[123,2,1,"","is_spn"],[123,2,1,"","make_cipher_id"],[123,2,1,"","make_file_name"],[123,2,1,"","neural_network_blackbox_distinguisher_tests"],[123,2,1,"","neural_network_differential_distinguisher_tests"],[123,3,1,"","number_of_rounds"],[123,3,1,"","output_bit_size"],[123,2,1,"","polynomial_system"],[123,2,1,"","polynomial_system_at_round"],[123,2,1,"","print"],[123,2,1,"","print_as_python_dictionary"],[123,2,1,"","print_as_python_dictionary_to_file"],[123,2,1,"","print_component_analysis_as_radar_charts"],[123,2,1,"","print_evaluation_python_code"],[123,2,1,"","print_evaluation_python_code_to_file"],[123,2,1,"","print_input_information"],[123,3,1,"","reference_code"],[123,2,1,"","remove_key_schedule"],[123,2,1,"","remove_round_component"],[123,2,1,"","remove_round_component_from_id"],[123,2,1,"","round_constant"],[123,2,1,"","round_function"],[123,3,1,"","rounds"],[123,3,1,"","rounds_as_list"],[123,2,1,"","run_autond_pipeline"],[123,2,1,"","set_file_name"],[123,2,1,"","set_id"],[123,2,1,"","set_inputs"],[123,2,1,"","sort_cipher"],[123,2,1,"","sp_box"],[123,2,1,"","test_against_reference_code"],[123,2,1,"","test_vector_check"],[123,2,1,"","train_gohr_neural_distinguisher"],[123,2,1,"","train_neural_distinguisher"],[123,3,1,"","type"],[123,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.grain_core_permutation":[[124,1,1,"","GrainCorePermutation"]],"ciphers.permutations.grain_core_permutation.GrainCorePermutation":[[124,2,1,"","add_AND_component"],[124,2,1,"","add_FSR_component"],[124,2,1,"","add_MODADD_component"],[124,2,1,"","add_MODSUB_component"],[124,2,1,"","add_NOT_component"],[124,2,1,"","add_OR_component"],[124,2,1,"","add_SBOX_component"],[124,2,1,"","add_SHIFT_component"],[124,2,1,"","add_XOR_component"],[124,2,1,"","add_cipher_output_component"],[124,2,1,"","add_concatenate_component"],[124,2,1,"","add_constant_component"],[124,2,1,"","add_intermediate_output_component"],[124,2,1,"","add_linear_layer_component"],[124,2,1,"","add_mix_column_component"],[124,2,1,"","add_permutation_component"],[124,2,1,"","add_reverse_component"],[124,2,1,"","add_rotate_component"],[124,2,1,"","add_round"],[124,2,1,"","add_round_key_output_component"],[124,2,1,"","add_round_output_component"],[124,2,1,"","add_shift_rows_component"],[124,2,1,"","add_sigma_component"],[124,2,1,"","add_suffix_to_components"],[124,2,1,"","add_theta_keccak_component"],[124,2,1,"","add_theta_xoodoo_component"],[124,2,1,"","add_variable_rotate_component"],[124,2,1,"","add_variable_shift_component"],[124,2,1,"","add_word_permutation_component"],[124,2,1,"","algebraic_tests"],[124,2,1,"","analyze_cipher"],[124,2,1,"","as_python_dictionary"],[124,2,1,"","avalanche_probability_vectors"],[124,2,1,"","cipher_inverse"],[124,2,1,"","cipher_partial_inverse"],[124,2,1,"","component_analysis_tests"],[124,2,1,"","component_from"],[124,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[124,2,1,"","continuous_avalanche_factor"],[124,2,1,"","continuous_diffusion_factor"],[124,2,1,"","continuous_diffusion_tests"],[124,2,1,"","continuous_neutrality_measure_for_bit_j"],[124,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[124,2,1,"","convert_to_compound_xor_cipher"],[124,3,1,"","current_round"],[124,3,1,"","current_round_number"],[124,3,1,"","current_round_number_of_components"],[124,2,1,"","delete_generated_evaluate_c_shared_library"],[124,2,1,"","diffusion_tests"],[124,2,1,"","evaluate"],[124,2,1,"","evaluate_using_c"],[124,2,1,"","evaluate_vectorized"],[124,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[124,3,1,"","family_name"],[124,3,1,"","file_name"],[124,2,1,"","find_good_input_difference_for_neural_distinguisher"],[124,2,1,"","find_impossible_property"],[124,2,1,"","generate_bit_based_c_code"],[124,2,1,"","generate_csv_report"],[124,2,1,"","generate_evaluate_c_code_shared_library"],[124,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[124,2,1,"","generate_word_based_c_code"],[124,2,1,"","get_all_components"],[124,2,1,"","get_all_components_ids"],[124,2,1,"","get_all_inputs_bit_positions"],[124,2,1,"","get_component_from_id"],[124,2,1,"","get_components_in_round"],[124,2,1,"","get_current_component_id"],[124,2,1,"","get_model"],[124,2,1,"","get_number_of_components_in_round"],[124,2,1,"","get_partial_cipher"],[124,2,1,"","get_round_from_component_id"],[124,2,1,"","get_sizes_of_components_by_type"],[124,3,1,"","id"],[124,2,1,"","impossible_differential_search"],[124,3,1,"","inputs"],[124,3,1,"","inputs_bit_size"],[124,2,1,"","inputs_size_to_dict"],[124,2,1,"","is_algebraically_secure"],[124,2,1,"","is_andrx"],[124,2,1,"","is_arx"],[124,2,1,"","is_power_of_2_word_based"],[124,2,1,"","is_shift_arx"],[124,2,1,"","is_spn"],[124,2,1,"","make_cipher_id"],[124,2,1,"","make_file_name"],[124,2,1,"","neural_network_blackbox_distinguisher_tests"],[124,2,1,"","neural_network_differential_distinguisher_tests"],[124,3,1,"","number_of_rounds"],[124,3,1,"","output_bit_size"],[124,2,1,"","polynomial_system"],[124,2,1,"","polynomial_system_at_round"],[124,2,1,"","print"],[124,2,1,"","print_as_python_dictionary"],[124,2,1,"","print_as_python_dictionary_to_file"],[124,2,1,"","print_component_analysis_as_radar_charts"],[124,2,1,"","print_evaluation_python_code"],[124,2,1,"","print_evaluation_python_code_to_file"],[124,2,1,"","print_input_information"],[124,3,1,"","reference_code"],[124,2,1,"","remove_key_schedule"],[124,2,1,"","remove_round_component"],[124,2,1,"","remove_round_component_from_id"],[124,3,1,"","rounds"],[124,3,1,"","rounds_as_list"],[124,2,1,"","run_autond_pipeline"],[124,2,1,"","set_file_name"],[124,2,1,"","set_id"],[124,2,1,"","set_inputs"],[124,2,1,"","sort_cipher"],[124,2,1,"","test_against_reference_code"],[124,2,1,"","test_vector_check"],[124,2,1,"","train_gohr_neural_distinguisher"],[124,2,1,"","train_neural_distinguisher"],[124,3,1,"","type"],[124,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_invertible_permutation":[[125,1,1,"","KeccakInvertiblePermutation"]],"ciphers.permutations.keccak_invertible_permutation.KeccakInvertiblePermutation":[[125,2,1,"","add_AND_component"],[125,2,1,"","add_FSR_component"],[125,2,1,"","add_MODADD_component"],[125,2,1,"","add_MODSUB_component"],[125,2,1,"","add_NOT_component"],[125,2,1,"","add_OR_component"],[125,2,1,"","add_SBOX_component"],[125,2,1,"","add_SHIFT_component"],[125,2,1,"","add_XOR_component"],[125,2,1,"","add_cipher_output_component"],[125,2,1,"","add_concatenate_component"],[125,2,1,"","add_constant_component"],[125,2,1,"","add_intermediate_output_component"],[125,2,1,"","add_linear_layer_component"],[125,2,1,"","add_mix_column_component"],[125,2,1,"","add_output_component"],[125,2,1,"","add_permutation_component"],[125,2,1,"","add_reverse_component"],[125,2,1,"","add_rotate_component"],[125,2,1,"","add_round"],[125,2,1,"","add_round_key_output_component"],[125,2,1,"","add_round_output_component"],[125,2,1,"","add_shift_rows_component"],[125,2,1,"","add_sigma_component"],[125,2,1,"","add_suffix_to_components"],[125,2,1,"","add_theta_keccak_component"],[125,2,1,"","add_theta_xoodoo_component"],[125,2,1,"","add_variable_rotate_component"],[125,2,1,"","add_variable_shift_component"],[125,2,1,"","add_word_permutation_component"],[125,2,1,"","algebraic_tests"],[125,2,1,"","analyze_cipher"],[125,2,1,"","as_python_dictionary"],[125,2,1,"","avalanche_probability_vectors"],[125,2,1,"","chi_definition"],[125,2,1,"","cipher_inverse"],[125,2,1,"","cipher_partial_inverse"],[125,2,1,"","component_analysis_tests"],[125,2,1,"","component_from"],[125,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[125,2,1,"","continuous_avalanche_factor"],[125,2,1,"","continuous_diffusion_factor"],[125,2,1,"","continuous_diffusion_tests"],[125,2,1,"","continuous_neutrality_measure_for_bit_j"],[125,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[125,2,1,"","convert_to_compound_xor_cipher"],[125,3,1,"","current_round"],[125,3,1,"","current_round_number"],[125,3,1,"","current_round_number_of_components"],[125,2,1,"","delete_generated_evaluate_c_shared_library"],[125,2,1,"","diffusion_tests"],[125,2,1,"","evaluate"],[125,2,1,"","evaluate_using_c"],[125,2,1,"","evaluate_vectorized"],[125,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[125,3,1,"","family_name"],[125,3,1,"","file_name"],[125,2,1,"","find_good_input_difference_for_neural_distinguisher"],[125,2,1,"","find_impossible_property"],[125,2,1,"","generate_bit_based_c_code"],[125,2,1,"","generate_csv_report"],[125,2,1,"","generate_evaluate_c_code_shared_library"],[125,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[125,2,1,"","generate_word_based_c_code"],[125,2,1,"","get_all_components"],[125,2,1,"","get_all_components_ids"],[125,2,1,"","get_all_inputs_bit_positions"],[125,2,1,"","get_ci"],[125,2,1,"","get_component_from_id"],[125,2,1,"","get_components_in_round"],[125,2,1,"","get_current_component_id"],[125,2,1,"","get_model"],[125,2,1,"","get_number_of_components_in_round"],[125,2,1,"","get_partial_cipher"],[125,2,1,"","get_round_from_component_id"],[125,2,1,"","get_sizes_of_components_by_type"],[125,3,1,"","id"],[125,2,1,"","impossible_differential_search"],[125,3,1,"","inputs"],[125,3,1,"","inputs_bit_size"],[125,2,1,"","inputs_size_to_dict"],[125,2,1,"","iota_definition"],[125,2,1,"","is_algebraically_secure"],[125,2,1,"","is_andrx"],[125,2,1,"","is_arx"],[125,2,1,"","is_power_of_2_word_based"],[125,2,1,"","is_shift_arx"],[125,2,1,"","is_spn"],[125,2,1,"","make_cipher_id"],[125,2,1,"","make_file_name"],[125,2,1,"","neural_network_blackbox_distinguisher_tests"],[125,2,1,"","neural_network_differential_distinguisher_tests"],[125,3,1,"","number_of_rounds"],[125,3,1,"","output_bit_size"],[125,2,1,"","polynomial_system"],[125,2,1,"","polynomial_system_at_round"],[125,2,1,"","print"],[125,2,1,"","print_as_python_dictionary"],[125,2,1,"","print_as_python_dictionary_to_file"],[125,2,1,"","print_component_analysis_as_radar_charts"],[125,2,1,"","print_evaluation_python_code"],[125,2,1,"","print_evaluation_python_code_to_file"],[125,2,1,"","print_input_information"],[125,3,1,"","reference_code"],[125,2,1,"","remove_key_schedule"],[125,2,1,"","remove_round_component"],[125,2,1,"","remove_round_component_from_id"],[125,2,1,"","rho_and_pi_definition"],[125,2,1,"","round_function"],[125,3,1,"","rounds"],[125,3,1,"","rounds_as_list"],[125,2,1,"","run_autond_pipeline"],[125,2,1,"","set_file_name"],[125,2,1,"","set_id"],[125,2,1,"","set_inputs"],[125,2,1,"","sort_cipher"],[125,2,1,"","state_initialization"],[125,2,1,"","test_against_reference_code"],[125,2,1,"","test_vector_check"],[125,2,1,"","theta_definition"],[125,2,1,"","train_gohr_neural_distinguisher"],[125,2,1,"","train_neural_distinguisher"],[125,3,1,"","type"],[125,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_permutation":[[126,1,1,"","KeccakPermutation"]],"ciphers.permutations.keccak_permutation.KeccakPermutation":[[126,2,1,"","add_AND_component"],[126,2,1,"","add_FSR_component"],[126,2,1,"","add_MODADD_component"],[126,2,1,"","add_MODSUB_component"],[126,2,1,"","add_NOT_component"],[126,2,1,"","add_OR_component"],[126,2,1,"","add_SBOX_component"],[126,2,1,"","add_SHIFT_component"],[126,2,1,"","add_XOR_component"],[126,2,1,"","add_cipher_output_component"],[126,2,1,"","add_concatenate_component"],[126,2,1,"","add_constant_component"],[126,2,1,"","add_intermediate_output_component"],[126,2,1,"","add_linear_layer_component"],[126,2,1,"","add_mix_column_component"],[126,2,1,"","add_output_component"],[126,2,1,"","add_permutation_component"],[126,2,1,"","add_reverse_component"],[126,2,1,"","add_rotate_component"],[126,2,1,"","add_round"],[126,2,1,"","add_round_key_output_component"],[126,2,1,"","add_round_output_component"],[126,2,1,"","add_round_output_linear"],[126,2,1,"","add_round_output_nonlinear"],[126,2,1,"","add_shift_rows_component"],[126,2,1,"","add_sigma_component"],[126,2,1,"","add_suffix_to_components"],[126,2,1,"","add_theta_keccak_component"],[126,2,1,"","add_theta_xoodoo_component"],[126,2,1,"","add_variable_rotate_component"],[126,2,1,"","add_variable_shift_component"],[126,2,1,"","add_word_permutation_component"],[126,2,1,"","algebraic_tests"],[126,2,1,"","analyze_cipher"],[126,2,1,"","as_python_dictionary"],[126,2,1,"","avalanche_probability_vectors"],[126,2,1,"","chi_definition"],[126,2,1,"","cipher_inverse"],[126,2,1,"","cipher_partial_inverse"],[126,2,1,"","component_analysis_tests"],[126,2,1,"","component_from"],[126,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[126,2,1,"","continuous_avalanche_factor"],[126,2,1,"","continuous_diffusion_factor"],[126,2,1,"","continuous_diffusion_tests"],[126,2,1,"","continuous_neutrality_measure_for_bit_j"],[126,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[126,2,1,"","convert_to_compound_xor_cipher"],[126,3,1,"","current_round"],[126,3,1,"","current_round_number"],[126,3,1,"","current_round_number_of_components"],[126,2,1,"","delete_generated_evaluate_c_shared_library"],[126,2,1,"","diffusion_tests"],[126,2,1,"","evaluate"],[126,2,1,"","evaluate_using_c"],[126,2,1,"","evaluate_vectorized"],[126,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[126,3,1,"","family_name"],[126,3,1,"","file_name"],[126,2,1,"","find_good_input_difference_for_neural_distinguisher"],[126,2,1,"","find_impossible_property"],[126,2,1,"","generate_bit_based_c_code"],[126,2,1,"","generate_csv_report"],[126,2,1,"","generate_evaluate_c_code_shared_library"],[126,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[126,2,1,"","generate_word_based_c_code"],[126,2,1,"","get_all_components"],[126,2,1,"","get_all_components_ids"],[126,2,1,"","get_all_inputs_bit_positions"],[126,2,1,"","get_ci"],[126,2,1,"","get_component_from_id"],[126,2,1,"","get_components_in_round"],[126,2,1,"","get_current_component_id"],[126,2,1,"","get_model"],[126,2,1,"","get_number_of_components_in_round"],[126,2,1,"","get_partial_cipher"],[126,2,1,"","get_round_from_component_id"],[126,2,1,"","get_sizes_of_components_by_type"],[126,3,1,"","id"],[126,2,1,"","impossible_differential_search"],[126,3,1,"","inputs"],[126,3,1,"","inputs_bit_size"],[126,2,1,"","inputs_size_to_dict"],[126,2,1,"","iota_definition"],[126,2,1,"","is_algebraically_secure"],[126,2,1,"","is_andrx"],[126,2,1,"","is_arx"],[126,2,1,"","is_power_of_2_word_based"],[126,2,1,"","is_shift_arx"],[126,2,1,"","is_spn"],[126,2,1,"","make_cipher_id"],[126,2,1,"","make_file_name"],[126,2,1,"","neural_network_blackbox_distinguisher_tests"],[126,2,1,"","neural_network_differential_distinguisher_tests"],[126,3,1,"","number_of_rounds"],[126,3,1,"","output_bit_size"],[126,2,1,"","polynomial_system"],[126,2,1,"","polynomial_system_at_round"],[126,2,1,"","print"],[126,2,1,"","print_as_python_dictionary"],[126,2,1,"","print_as_python_dictionary_to_file"],[126,2,1,"","print_component_analysis_as_radar_charts"],[126,2,1,"","print_evaluation_python_code"],[126,2,1,"","print_evaluation_python_code_to_file"],[126,2,1,"","print_input_information"],[126,3,1,"","reference_code"],[126,2,1,"","remove_key_schedule"],[126,2,1,"","remove_round_component"],[126,2,1,"","remove_round_component_from_id"],[126,2,1,"","rho_and_pi_definition"],[126,2,1,"","round_function"],[126,3,1,"","rounds"],[126,3,1,"","rounds_as_list"],[126,2,1,"","run_autond_pipeline"],[126,2,1,"","set_file_name"],[126,2,1,"","set_id"],[126,2,1,"","set_inputs"],[126,2,1,"","sort_cipher"],[126,2,1,"","state_initialization"],[126,2,1,"","test_against_reference_code"],[126,2,1,"","test_vector_check"],[126,2,1,"","theta_definition"],[126,2,1,"","train_gohr_neural_distinguisher"],[126,2,1,"","train_neural_distinguisher"],[126,3,1,"","type"],[126,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_sbox_permutation":[[127,1,1,"","KeccakSboxPermutation"]],"ciphers.permutations.keccak_sbox_permutation.KeccakSboxPermutation":[[127,2,1,"","add_AND_component"],[127,2,1,"","add_FSR_component"],[127,2,1,"","add_MODADD_component"],[127,2,1,"","add_MODSUB_component"],[127,2,1,"","add_NOT_component"],[127,2,1,"","add_OR_component"],[127,2,1,"","add_SBOX_component"],[127,2,1,"","add_SHIFT_component"],[127,2,1,"","add_XOR_component"],[127,2,1,"","add_cipher_output_component"],[127,2,1,"","add_concatenate_component"],[127,2,1,"","add_constant_component"],[127,2,1,"","add_intermediate_output_component"],[127,2,1,"","add_linear_layer_component"],[127,2,1,"","add_mix_column_component"],[127,2,1,"","add_output_component"],[127,2,1,"","add_permutation_component"],[127,2,1,"","add_reverse_component"],[127,2,1,"","add_rotate_component"],[127,2,1,"","add_round"],[127,2,1,"","add_round_key_output_component"],[127,2,1,"","add_round_output_component"],[127,2,1,"","add_shift_rows_component"],[127,2,1,"","add_sigma_component"],[127,2,1,"","add_suffix_to_components"],[127,2,1,"","add_theta_keccak_component"],[127,2,1,"","add_theta_xoodoo_component"],[127,2,1,"","add_variable_rotate_component"],[127,2,1,"","add_variable_shift_component"],[127,2,1,"","add_word_permutation_component"],[127,2,1,"","algebraic_tests"],[127,2,1,"","analyze_cipher"],[127,2,1,"","as_python_dictionary"],[127,2,1,"","avalanche_probability_vectors"],[127,2,1,"","chi_definition"],[127,2,1,"","cipher_inverse"],[127,2,1,"","cipher_partial_inverse"],[127,2,1,"","component_analysis_tests"],[127,2,1,"","component_from"],[127,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[127,2,1,"","continuous_avalanche_factor"],[127,2,1,"","continuous_diffusion_factor"],[127,2,1,"","continuous_diffusion_tests"],[127,2,1,"","continuous_neutrality_measure_for_bit_j"],[127,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[127,2,1,"","convert_to_compound_xor_cipher"],[127,3,1,"","current_round"],[127,3,1,"","current_round_number"],[127,3,1,"","current_round_number_of_components"],[127,2,1,"","delete_generated_evaluate_c_shared_library"],[127,2,1,"","diffusion_tests"],[127,2,1,"","evaluate"],[127,2,1,"","evaluate_using_c"],[127,2,1,"","evaluate_vectorized"],[127,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[127,3,1,"","family_name"],[127,3,1,"","file_name"],[127,2,1,"","find_good_input_difference_for_neural_distinguisher"],[127,2,1,"","find_impossible_property"],[127,2,1,"","generate_bit_based_c_code"],[127,2,1,"","generate_csv_report"],[127,2,1,"","generate_evaluate_c_code_shared_library"],[127,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[127,2,1,"","generate_word_based_c_code"],[127,2,1,"","get_all_components"],[127,2,1,"","get_all_components_ids"],[127,2,1,"","get_all_inputs_bit_positions"],[127,2,1,"","get_ci"],[127,2,1,"","get_component_from_id"],[127,2,1,"","get_components_in_round"],[127,2,1,"","get_current_component_id"],[127,2,1,"","get_model"],[127,2,1,"","get_number_of_components_in_round"],[127,2,1,"","get_partial_cipher"],[127,2,1,"","get_round_from_component_id"],[127,2,1,"","get_sizes_of_components_by_type"],[127,3,1,"","id"],[127,2,1,"","impossible_differential_search"],[127,3,1,"","inputs"],[127,3,1,"","inputs_bit_size"],[127,2,1,"","inputs_size_to_dict"],[127,2,1,"","iota_definition"],[127,2,1,"","is_algebraically_secure"],[127,2,1,"","is_andrx"],[127,2,1,"","is_arx"],[127,2,1,"","is_power_of_2_word_based"],[127,2,1,"","is_shift_arx"],[127,2,1,"","is_spn"],[127,2,1,"","make_cipher_id"],[127,2,1,"","make_file_name"],[127,2,1,"","neural_network_blackbox_distinguisher_tests"],[127,2,1,"","neural_network_differential_distinguisher_tests"],[127,3,1,"","number_of_rounds"],[127,3,1,"","output_bit_size"],[127,2,1,"","polynomial_system"],[127,2,1,"","polynomial_system_at_round"],[127,2,1,"","print"],[127,2,1,"","print_as_python_dictionary"],[127,2,1,"","print_as_python_dictionary_to_file"],[127,2,1,"","print_component_analysis_as_radar_charts"],[127,2,1,"","print_evaluation_python_code"],[127,2,1,"","print_evaluation_python_code_to_file"],[127,2,1,"","print_input_information"],[127,3,1,"","reference_code"],[127,2,1,"","remove_key_schedule"],[127,2,1,"","remove_round_component"],[127,2,1,"","remove_round_component_from_id"],[127,2,1,"","rho_and_pi_definition"],[127,2,1,"","round_function"],[127,3,1,"","rounds"],[127,3,1,"","rounds_as_list"],[127,2,1,"","run_autond_pipeline"],[127,2,1,"","set_file_name"],[127,2,1,"","set_id"],[127,2,1,"","set_inputs"],[127,2,1,"","sort_cipher"],[127,2,1,"","state_initialization"],[127,2,1,"","test_against_reference_code"],[127,2,1,"","test_vector_check"],[127,2,1,"","theta_definition"],[127,2,1,"","train_gohr_neural_distinguisher"],[127,2,1,"","train_neural_distinguisher"],[127,3,1,"","type"],[127,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.photon_permutation":[[128,1,1,"","PhotonPermutation"]],"ciphers.permutations.photon_permutation.PhotonPermutation":[[128,2,1,"","add_AND_component"],[128,2,1,"","add_FSR_component"],[128,2,1,"","add_MODADD_component"],[128,2,1,"","add_MODSUB_component"],[128,2,1,"","add_NOT_component"],[128,2,1,"","add_OR_component"],[128,2,1,"","add_SBOX_component"],[128,2,1,"","add_SHIFT_component"],[128,2,1,"","add_XOR_component"],[128,2,1,"","add_cipher_output_component"],[128,2,1,"","add_concatenate_component"],[128,2,1,"","add_constant_component"],[128,2,1,"","add_intermediate_output_component"],[128,2,1,"","add_linear_layer_component"],[128,2,1,"","add_mix_column_component"],[128,2,1,"","add_permutation_component"],[128,2,1,"","add_reverse_component"],[128,2,1,"","add_rotate_component"],[128,2,1,"","add_round"],[128,2,1,"","add_round_key_output_component"],[128,2,1,"","add_round_output_component"],[128,2,1,"","add_shift_rows_component"],[128,2,1,"","add_sigma_component"],[128,2,1,"","add_suffix_to_components"],[128,2,1,"","add_theta_keccak_component"],[128,2,1,"","add_theta_xoodoo_component"],[128,2,1,"","add_variable_rotate_component"],[128,2,1,"","add_variable_shift_component"],[128,2,1,"","add_word_permutation_component"],[128,2,1,"","algebraic_tests"],[128,2,1,"","analyze_cipher"],[128,2,1,"","as_python_dictionary"],[128,2,1,"","avalanche_probability_vectors"],[128,2,1,"","cipher_inverse"],[128,2,1,"","cipher_partial_inverse"],[128,2,1,"","component_analysis_tests"],[128,2,1,"","component_from"],[128,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[128,2,1,"","continuous_avalanche_factor"],[128,2,1,"","continuous_diffusion_factor"],[128,2,1,"","continuous_diffusion_tests"],[128,2,1,"","continuous_neutrality_measure_for_bit_j"],[128,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[128,2,1,"","convert_to_compound_xor_cipher"],[128,3,1,"","current_round"],[128,3,1,"","current_round_number"],[128,3,1,"","current_round_number_of_components"],[128,2,1,"","delete_generated_evaluate_c_shared_library"],[128,2,1,"","diffusion_tests"],[128,2,1,"","evaluate"],[128,2,1,"","evaluate_using_c"],[128,2,1,"","evaluate_vectorized"],[128,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[128,3,1,"","family_name"],[128,3,1,"","file_name"],[128,2,1,"","find_good_input_difference_for_neural_distinguisher"],[128,2,1,"","find_impossible_property"],[128,2,1,"","generate_bit_based_c_code"],[128,2,1,"","generate_csv_report"],[128,2,1,"","generate_evaluate_c_code_shared_library"],[128,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[128,2,1,"","generate_word_based_c_code"],[128,2,1,"","get_all_components"],[128,2,1,"","get_all_components_ids"],[128,2,1,"","get_all_inputs_bit_positions"],[128,2,1,"","get_component_from_id"],[128,2,1,"","get_components_in_round"],[128,2,1,"","get_current_component_id"],[128,2,1,"","get_model"],[128,2,1,"","get_number_of_components_in_round"],[128,2,1,"","get_partial_cipher"],[128,2,1,"","get_round_from_component_id"],[128,2,1,"","get_sizes_of_components_by_type"],[128,3,1,"","id"],[128,2,1,"","impossible_differential_search"],[128,3,1,"","inputs"],[128,3,1,"","inputs_bit_size"],[128,2,1,"","inputs_size_to_dict"],[128,2,1,"","is_algebraically_secure"],[128,2,1,"","is_andrx"],[128,2,1,"","is_arx"],[128,2,1,"","is_power_of_2_word_based"],[128,2,1,"","is_shift_arx"],[128,2,1,"","is_spn"],[128,2,1,"","make_cipher_id"],[128,2,1,"","make_file_name"],[128,2,1,"","neural_network_blackbox_distinguisher_tests"],[128,2,1,"","neural_network_differential_distinguisher_tests"],[128,3,1,"","number_of_rounds"],[128,3,1,"","output_bit_size"],[128,2,1,"","polynomial_system"],[128,2,1,"","polynomial_system_at_round"],[128,2,1,"","print"],[128,2,1,"","print_as_python_dictionary"],[128,2,1,"","print_as_python_dictionary_to_file"],[128,2,1,"","print_component_analysis_as_radar_charts"],[128,2,1,"","print_evaluation_python_code"],[128,2,1,"","print_evaluation_python_code_to_file"],[128,2,1,"","print_input_information"],[128,3,1,"","reference_code"],[128,2,1,"","remove_key_schedule"],[128,2,1,"","remove_round_component"],[128,2,1,"","remove_round_component_from_id"],[128,2,1,"","round_function"],[128,3,1,"","rounds"],[128,3,1,"","rounds_as_list"],[128,2,1,"","run_autond_pipeline"],[128,2,1,"","set_file_name"],[128,2,1,"","set_id"],[128,2,1,"","set_inputs"],[128,2,1,"","sort_cipher"],[128,2,1,"","test_against_reference_code"],[128,2,1,"","test_vector_check"],[128,2,1,"","train_gohr_neural_distinguisher"],[128,2,1,"","train_neural_distinguisher"],[128,3,1,"","type"],[128,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.salsa_permutation":[[129,1,1,"","SalsaPermutation"]],"ciphers.permutations.salsa_permutation.SalsaPermutation":[[129,2,1,"","add_AND_component"],[129,2,1,"","add_FSR_component"],[129,2,1,"","add_MODADD_component"],[129,2,1,"","add_MODSUB_component"],[129,2,1,"","add_NOT_component"],[129,2,1,"","add_OR_component"],[129,2,1,"","add_SBOX_component"],[129,2,1,"","add_SHIFT_component"],[129,2,1,"","add_XOR_component"],[129,2,1,"","add_cipher_output_component"],[129,2,1,"","add_concatenate_component"],[129,2,1,"","add_constant_component"],[129,2,1,"","add_intermediate_output_component"],[129,2,1,"","add_linear_layer_component"],[129,2,1,"","add_mix_column_component"],[129,2,1,"","add_permutation_component"],[129,2,1,"","add_reverse_component"],[129,2,1,"","add_rotate_component"],[129,2,1,"","add_round"],[129,2,1,"","add_round_key_output_component"],[129,2,1,"","add_round_output_component"],[129,2,1,"","add_shift_rows_component"],[129,2,1,"","add_sigma_component"],[129,2,1,"","add_suffix_to_components"],[129,2,1,"","add_theta_keccak_component"],[129,2,1,"","add_theta_xoodoo_component"],[129,2,1,"","add_variable_rotate_component"],[129,2,1,"","add_variable_shift_component"],[129,2,1,"","add_word_permutation_component"],[129,2,1,"","algebraic_tests"],[129,2,1,"","analyze_cipher"],[129,2,1,"","as_python_dictionary"],[129,2,1,"","avalanche_probability_vectors"],[129,2,1,"","bottom_half_quarter_round"],[129,2,1,"","cipher_inverse"],[129,2,1,"","cipher_partial_inverse"],[129,2,1,"","component_analysis_tests"],[129,2,1,"","component_from"],[129,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[129,2,1,"","continuous_avalanche_factor"],[129,2,1,"","continuous_diffusion_factor"],[129,2,1,"","continuous_diffusion_tests"],[129,2,1,"","continuous_neutrality_measure_for_bit_j"],[129,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[129,2,1,"","convert_to_compound_xor_cipher"],[129,3,1,"","current_round"],[129,3,1,"","current_round_number"],[129,3,1,"","current_round_number_of_components"],[129,2,1,"","delete_generated_evaluate_c_shared_library"],[129,2,1,"","diffusion_tests"],[129,2,1,"","evaluate"],[129,2,1,"","evaluate_using_c"],[129,2,1,"","evaluate_vectorized"],[129,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[129,3,1,"","family_name"],[129,3,1,"","file_name"],[129,2,1,"","find_good_input_difference_for_neural_distinguisher"],[129,2,1,"","find_impossible_property"],[129,2,1,"","generate_bit_based_c_code"],[129,2,1,"","generate_csv_report"],[129,2,1,"","generate_evaluate_c_code_shared_library"],[129,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[129,2,1,"","generate_word_based_c_code"],[129,2,1,"","get_all_components"],[129,2,1,"","get_all_components_ids"],[129,2,1,"","get_all_inputs_bit_positions"],[129,2,1,"","get_component_from_id"],[129,2,1,"","get_components_in_round"],[129,2,1,"","get_current_component_id"],[129,2,1,"","get_model"],[129,2,1,"","get_number_of_components_in_round"],[129,2,1,"","get_partial_cipher"],[129,2,1,"","get_round_from_component_id"],[129,2,1,"","get_sizes_of_components_by_type"],[129,3,1,"","id"],[129,2,1,"","impossible_differential_search"],[129,3,1,"","inputs"],[129,3,1,"","inputs_bit_size"],[129,2,1,"","inputs_size_to_dict"],[129,2,1,"","is_algebraically_secure"],[129,2,1,"","is_andrx"],[129,2,1,"","is_arx"],[129,2,1,"","is_power_of_2_word_based"],[129,2,1,"","is_shift_arx"],[129,2,1,"","is_spn"],[129,2,1,"","make_cipher_id"],[129,2,1,"","make_file_name"],[129,2,1,"","neural_network_blackbox_distinguisher_tests"],[129,2,1,"","neural_network_differential_distinguisher_tests"],[129,3,1,"","number_of_rounds"],[129,3,1,"","output_bit_size"],[129,2,1,"","polynomial_system"],[129,2,1,"","polynomial_system_at_round"],[129,2,1,"","print"],[129,2,1,"","print_as_python_dictionary"],[129,2,1,"","print_as_python_dictionary_to_file"],[129,2,1,"","print_component_analysis_as_radar_charts"],[129,2,1,"","print_evaluation_python_code"],[129,2,1,"","print_evaluation_python_code_to_file"],[129,2,1,"","print_input_information"],[129,3,1,"","reference_code"],[129,2,1,"","remove_key_schedule"],[129,2,1,"","remove_round_component"],[129,2,1,"","remove_round_component_from_id"],[129,3,1,"","rounds"],[129,3,1,"","rounds_as_list"],[129,2,1,"","run_autond_pipeline"],[129,2,1,"","set_file_name"],[129,2,1,"","set_id"],[129,2,1,"","set_inputs"],[129,2,1,"","sort_cipher"],[129,2,1,"","test_against_reference_code"],[129,2,1,"","test_vector_check"],[129,2,1,"","top_half_quarter_round"],[129,2,1,"","train_gohr_neural_distinguisher"],[129,2,1,"","train_neural_distinguisher"],[129,3,1,"","type"],[129,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.sparkle_permutation":[[130,1,1,"","SparklePermutation"]],"ciphers.permutations.sparkle_permutation.SparklePermutation":[[130,2,1,"","add_AND_component"],[130,2,1,"","add_FSR_component"],[130,2,1,"","add_MODADD_component"],[130,2,1,"","add_MODSUB_component"],[130,2,1,"","add_NOT_component"],[130,2,1,"","add_OR_component"],[130,2,1,"","add_SBOX_component"],[130,2,1,"","add_SHIFT_component"],[130,2,1,"","add_XOR_component"],[130,2,1,"","add_cipher_output_component"],[130,2,1,"","add_concatenate_component"],[130,2,1,"","add_constant_component"],[130,2,1,"","add_intermediate_output_component"],[130,2,1,"","add_linear_layer_component"],[130,2,1,"","add_mix_column_component"],[130,2,1,"","add_permutation_component"],[130,2,1,"","add_reverse_component"],[130,2,1,"","add_rotate_component"],[130,2,1,"","add_round"],[130,2,1,"","add_round_key_output_component"],[130,2,1,"","add_round_output_component"],[130,2,1,"","add_shift_rows_component"],[130,2,1,"","add_sigma_component"],[130,2,1,"","add_suffix_to_components"],[130,2,1,"","add_theta_keccak_component"],[130,2,1,"","add_theta_xoodoo_component"],[130,2,1,"","add_variable_rotate_component"],[130,2,1,"","add_variable_shift_component"],[130,2,1,"","add_word_permutation_component"],[130,2,1,"","algebraic_tests"],[130,2,1,"","alzette"],[130,2,1,"","alzette_round"],[130,2,1,"","analyze_cipher"],[130,2,1,"","as_python_dictionary"],[130,2,1,"","avalanche_probability_vectors"],[130,2,1,"","cipher_inverse"],[130,2,1,"","cipher_partial_inverse"],[130,2,1,"","component_analysis_tests"],[130,2,1,"","component_from"],[130,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[130,2,1,"","continuous_avalanche_factor"],[130,2,1,"","continuous_diffusion_factor"],[130,2,1,"","continuous_diffusion_tests"],[130,2,1,"","continuous_neutrality_measure_for_bit_j"],[130,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[130,2,1,"","convert_to_compound_xor_cipher"],[130,3,1,"","current_round"],[130,3,1,"","current_round_number"],[130,3,1,"","current_round_number_of_components"],[130,2,1,"","delete_generated_evaluate_c_shared_library"],[130,2,1,"","diffusion_tests"],[130,2,1,"","ell_function"],[130,2,1,"","evaluate"],[130,2,1,"","evaluate_using_c"],[130,2,1,"","evaluate_vectorized"],[130,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[130,3,1,"","family_name"],[130,3,1,"","file_name"],[130,2,1,"","find_good_input_difference_for_neural_distinguisher"],[130,2,1,"","find_impossible_property"],[130,2,1,"","generate_bit_based_c_code"],[130,2,1,"","generate_csv_report"],[130,2,1,"","generate_evaluate_c_code_shared_library"],[130,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[130,2,1,"","generate_word_based_c_code"],[130,2,1,"","get_all_components"],[130,2,1,"","get_all_components_ids"],[130,2,1,"","get_all_inputs_bit_positions"],[130,2,1,"","get_component_from_id"],[130,2,1,"","get_components_in_round"],[130,2,1,"","get_current_component_id"],[130,2,1,"","get_model"],[130,2,1,"","get_number_of_components_in_round"],[130,2,1,"","get_partial_cipher"],[130,2,1,"","get_round_from_component_id"],[130,2,1,"","get_sizes_of_components_by_type"],[130,3,1,"","id"],[130,2,1,"","impossible_differential_search"],[130,3,1,"","inputs"],[130,3,1,"","inputs_bit_size"],[130,2,1,"","inputs_size_to_dict"],[130,2,1,"","is_algebraically_secure"],[130,2,1,"","is_andrx"],[130,2,1,"","is_arx"],[130,2,1,"","is_power_of_2_word_based"],[130,2,1,"","is_shift_arx"],[130,2,1,"","is_spn"],[130,2,1,"","linear_layer"],[130,2,1,"","make_cipher_id"],[130,2,1,"","make_file_name"],[130,2,1,"","neural_network_blackbox_distinguisher_tests"],[130,2,1,"","neural_network_differential_distinguisher_tests"],[130,3,1,"","number_of_rounds"],[130,3,1,"","output_bit_size"],[130,2,1,"","polynomial_system"],[130,2,1,"","polynomial_system_at_round"],[130,2,1,"","print"],[130,2,1,"","print_as_python_dictionary"],[130,2,1,"","print_as_python_dictionary_to_file"],[130,2,1,"","print_component_analysis_as_radar_charts"],[130,2,1,"","print_evaluation_python_code"],[130,2,1,"","print_evaluation_python_code_to_file"],[130,2,1,"","print_input_information"],[130,3,1,"","reference_code"],[130,2,1,"","remove_key_schedule"],[130,2,1,"","remove_round_component"],[130,2,1,"","remove_round_component_from_id"],[130,2,1,"","round_function"],[130,3,1,"","rounds"],[130,3,1,"","rounds_as_list"],[130,2,1,"","run_autond_pipeline"],[130,2,1,"","set_file_name"],[130,2,1,"","set_id"],[130,2,1,"","set_inputs"],[130,2,1,"","sort_cipher"],[130,2,1,"","test_against_reference_code"],[130,2,1,"","test_vector_check"],[130,2,1,"","train_gohr_neural_distinguisher"],[130,2,1,"","train_neural_distinguisher"],[130,3,1,"","type"],[130,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_fsr_permutation":[[131,1,1,"","SpongentPiFSRPermutation"]],"ciphers.permutations.spongent_pi_fsr_permutation.SpongentPiFSRPermutation":[[131,2,1,"","add_AND_component"],[131,2,1,"","add_FSR_component"],[131,2,1,"","add_MODADD_component"],[131,2,1,"","add_MODSUB_component"],[131,2,1,"","add_NOT_component"],[131,2,1,"","add_OR_component"],[131,2,1,"","add_SBOX_component"],[131,2,1,"","add_SHIFT_component"],[131,2,1,"","add_XOR_component"],[131,2,1,"","add_cipher_output_component"],[131,2,1,"","add_concatenate_component"],[131,2,1,"","add_constant_component"],[131,2,1,"","add_intermediate_output_component"],[131,2,1,"","add_linear_layer_component"],[131,2,1,"","add_mix_column_component"],[131,2,1,"","add_permutation_component"],[131,2,1,"","add_reverse_component"],[131,2,1,"","add_rotate_component"],[131,2,1,"","add_round"],[131,2,1,"","add_round_key_output_component"],[131,2,1,"","add_round_output_component"],[131,2,1,"","add_shift_rows_component"],[131,2,1,"","add_sigma_component"],[131,2,1,"","add_suffix_to_components"],[131,2,1,"","add_theta_keccak_component"],[131,2,1,"","add_theta_xoodoo_component"],[131,2,1,"","add_variable_rotate_component"],[131,2,1,"","add_variable_shift_component"],[131,2,1,"","add_word_permutation_component"],[131,2,1,"","algebraic_tests"],[131,2,1,"","analyze_cipher"],[131,2,1,"","as_python_dictionary"],[131,2,1,"","avalanche_probability_vectors"],[131,2,1,"","cipher_inverse"],[131,2,1,"","cipher_partial_inverse"],[131,2,1,"","component_analysis_tests"],[131,2,1,"","component_from"],[131,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[131,2,1,"","continuous_avalanche_factor"],[131,2,1,"","continuous_diffusion_factor"],[131,2,1,"","continuous_diffusion_tests"],[131,2,1,"","continuous_neutrality_measure_for_bit_j"],[131,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[131,2,1,"","convert_to_compound_xor_cipher"],[131,3,1,"","current_round"],[131,3,1,"","current_round_number"],[131,3,1,"","current_round_number_of_components"],[131,2,1,"","delete_generated_evaluate_c_shared_library"],[131,2,1,"","diffusion_tests"],[131,2,1,"","evaluate"],[131,2,1,"","evaluate_using_c"],[131,2,1,"","evaluate_vectorized"],[131,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[131,3,1,"","family_name"],[131,3,1,"","file_name"],[131,2,1,"","find_good_input_difference_for_neural_distinguisher"],[131,2,1,"","find_impossible_property"],[131,2,1,"","generate_bit_based_c_code"],[131,2,1,"","generate_csv_report"],[131,2,1,"","generate_evaluate_c_code_shared_library"],[131,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[131,2,1,"","generate_word_based_c_code"],[131,2,1,"","get_all_components"],[131,2,1,"","get_all_components_ids"],[131,2,1,"","get_all_inputs_bit_positions"],[131,2,1,"","get_component_from_id"],[131,2,1,"","get_components_in_round"],[131,2,1,"","get_current_component_id"],[131,2,1,"","get_model"],[131,2,1,"","get_number_of_components_in_round"],[131,2,1,"","get_partial_cipher"],[131,2,1,"","get_round_from_component_id"],[131,2,1,"","get_sizes_of_components_by_type"],[131,2,1,"","icounter_update"],[131,3,1,"","id"],[131,2,1,"","impossible_differential_search"],[131,3,1,"","inputs"],[131,3,1,"","inputs_bit_size"],[131,2,1,"","inputs_size_to_dict"],[131,2,1,"","is_algebraically_secure"],[131,2,1,"","is_andrx"],[131,2,1,"","is_arx"],[131,2,1,"","is_power_of_2_word_based"],[131,2,1,"","is_shift_arx"],[131,2,1,"","is_spn"],[131,2,1,"","make_cipher_id"],[131,2,1,"","make_file_name"],[131,2,1,"","neural_network_blackbox_distinguisher_tests"],[131,2,1,"","neural_network_differential_distinguisher_tests"],[131,3,1,"","number_of_rounds"],[131,3,1,"","output_bit_size"],[131,2,1,"","polynomial_system"],[131,2,1,"","polynomial_system_at_round"],[131,2,1,"","print"],[131,2,1,"","print_as_python_dictionary"],[131,2,1,"","print_as_python_dictionary_to_file"],[131,2,1,"","print_component_analysis_as_radar_charts"],[131,2,1,"","print_evaluation_python_code"],[131,2,1,"","print_evaluation_python_code_to_file"],[131,2,1,"","print_input_information"],[131,3,1,"","reference_code"],[131,2,1,"","remove_key_schedule"],[131,2,1,"","remove_round_component"],[131,2,1,"","remove_round_component_from_id"],[131,2,1,"","round_function"],[131,3,1,"","rounds"],[131,3,1,"","rounds_as_list"],[131,2,1,"","run_autond_pipeline"],[131,2,1,"","set_file_name"],[131,2,1,"","set_id"],[131,2,1,"","set_inputs"],[131,2,1,"","sort_cipher"],[131,2,1,"","test_against_reference_code"],[131,2,1,"","test_vector_check"],[131,2,1,"","train_gohr_neural_distinguisher"],[131,2,1,"","train_neural_distinguisher"],[131,3,1,"","type"],[131,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_permutation":[[132,1,1,"","SpongentPiPermutation"]],"ciphers.permutations.spongent_pi_permutation.SpongentPiPermutation":[[132,2,1,"","add_AND_component"],[132,2,1,"","add_FSR_component"],[132,2,1,"","add_MODADD_component"],[132,2,1,"","add_MODSUB_component"],[132,2,1,"","add_NOT_component"],[132,2,1,"","add_OR_component"],[132,2,1,"","add_SBOX_component"],[132,2,1,"","add_SHIFT_component"],[132,2,1,"","add_XOR_component"],[132,2,1,"","add_cipher_output_component"],[132,2,1,"","add_concatenate_component"],[132,2,1,"","add_constant_component"],[132,2,1,"","add_intermediate_output_component"],[132,2,1,"","add_linear_layer_component"],[132,2,1,"","add_mix_column_component"],[132,2,1,"","add_permutation_component"],[132,2,1,"","add_reverse_component"],[132,2,1,"","add_rotate_component"],[132,2,1,"","add_round"],[132,2,1,"","add_round_key_output_component"],[132,2,1,"","add_round_output_component"],[132,2,1,"","add_shift_rows_component"],[132,2,1,"","add_sigma_component"],[132,2,1,"","add_suffix_to_components"],[132,2,1,"","add_theta_keccak_component"],[132,2,1,"","add_theta_xoodoo_component"],[132,2,1,"","add_variable_rotate_component"],[132,2,1,"","add_variable_shift_component"],[132,2,1,"","add_word_permutation_component"],[132,2,1,"","algebraic_tests"],[132,2,1,"","analyze_cipher"],[132,2,1,"","as_python_dictionary"],[132,2,1,"","avalanche_probability_vectors"],[132,2,1,"","cipher_inverse"],[132,2,1,"","cipher_partial_inverse"],[132,2,1,"","component_analysis_tests"],[132,2,1,"","component_from"],[132,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[132,2,1,"","continuous_avalanche_factor"],[132,2,1,"","continuous_diffusion_factor"],[132,2,1,"","continuous_diffusion_tests"],[132,2,1,"","continuous_neutrality_measure_for_bit_j"],[132,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[132,2,1,"","convert_to_compound_xor_cipher"],[132,3,1,"","current_round"],[132,3,1,"","current_round_number"],[132,3,1,"","current_round_number_of_components"],[132,2,1,"","delete_generated_evaluate_c_shared_library"],[132,2,1,"","diffusion_tests"],[132,2,1,"","evaluate"],[132,2,1,"","evaluate_using_c"],[132,2,1,"","evaluate_vectorized"],[132,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[132,3,1,"","family_name"],[132,3,1,"","file_name"],[132,2,1,"","find_good_input_difference_for_neural_distinguisher"],[132,2,1,"","find_impossible_property"],[132,2,1,"","generate_bit_based_c_code"],[132,2,1,"","generate_csv_report"],[132,2,1,"","generate_evaluate_c_code_shared_library"],[132,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[132,2,1,"","generate_word_based_c_code"],[132,2,1,"","get_all_components"],[132,2,1,"","get_all_components_ids"],[132,2,1,"","get_all_inputs_bit_positions"],[132,2,1,"","get_component_from_id"],[132,2,1,"","get_components_in_round"],[132,2,1,"","get_current_component_id"],[132,2,1,"","get_model"],[132,2,1,"","get_number_of_components_in_round"],[132,2,1,"","get_partial_cipher"],[132,2,1,"","get_round_from_component_id"],[132,2,1,"","get_sizes_of_components_by_type"],[132,2,1,"","icounter_update"],[132,3,1,"","id"],[132,2,1,"","impossible_differential_search"],[132,3,1,"","inputs"],[132,3,1,"","inputs_bit_size"],[132,2,1,"","inputs_size_to_dict"],[132,2,1,"","is_algebraically_secure"],[132,2,1,"","is_andrx"],[132,2,1,"","is_arx"],[132,2,1,"","is_power_of_2_word_based"],[132,2,1,"","is_shift_arx"],[132,2,1,"","is_spn"],[132,2,1,"","make_cipher_id"],[132,2,1,"","make_file_name"],[132,2,1,"","neural_network_blackbox_distinguisher_tests"],[132,2,1,"","neural_network_differential_distinguisher_tests"],[132,3,1,"","number_of_rounds"],[132,3,1,"","output_bit_size"],[132,2,1,"","polynomial_system"],[132,2,1,"","polynomial_system_at_round"],[132,2,1,"","print"],[132,2,1,"","print_as_python_dictionary"],[132,2,1,"","print_as_python_dictionary_to_file"],[132,2,1,"","print_component_analysis_as_radar_charts"],[132,2,1,"","print_evaluation_python_code"],[132,2,1,"","print_evaluation_python_code_to_file"],[132,2,1,"","print_input_information"],[132,3,1,"","reference_code"],[132,2,1,"","remove_key_schedule"],[132,2,1,"","remove_round_component"],[132,2,1,"","remove_round_component_from_id"],[132,2,1,"","round_function"],[132,3,1,"","rounds"],[132,3,1,"","rounds_as_list"],[132,2,1,"","run_autond_pipeline"],[132,2,1,"","set_file_name"],[132,2,1,"","set_id"],[132,2,1,"","set_inputs"],[132,2,1,"","sort_cipher"],[132,2,1,"","test_against_reference_code"],[132,2,1,"","test_vector_check"],[132,2,1,"","train_gohr_neural_distinguisher"],[132,2,1,"","train_neural_distinguisher"],[132,3,1,"","type"],[132,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_precomputation_permutation":[[133,1,1,"","SpongentPiPrecomputationPermutation"]],"ciphers.permutations.spongent_pi_precomputation_permutation.SpongentPiPrecomputationPermutation":[[133,2,1,"","add_AND_component"],[133,2,1,"","add_FSR_component"],[133,2,1,"","add_MODADD_component"],[133,2,1,"","add_MODSUB_component"],[133,2,1,"","add_NOT_component"],[133,2,1,"","add_OR_component"],[133,2,1,"","add_SBOX_component"],[133,2,1,"","add_SHIFT_component"],[133,2,1,"","add_XOR_component"],[133,2,1,"","add_cipher_output_component"],[133,2,1,"","add_concatenate_component"],[133,2,1,"","add_constant_component"],[133,2,1,"","add_intermediate_output_component"],[133,2,1,"","add_linear_layer_component"],[133,2,1,"","add_mix_column_component"],[133,2,1,"","add_permutation_component"],[133,2,1,"","add_reverse_component"],[133,2,1,"","add_rotate_component"],[133,2,1,"","add_round"],[133,2,1,"","add_round_key_output_component"],[133,2,1,"","add_round_output_component"],[133,2,1,"","add_shift_rows_component"],[133,2,1,"","add_sigma_component"],[133,2,1,"","add_suffix_to_components"],[133,2,1,"","add_theta_keccak_component"],[133,2,1,"","add_theta_xoodoo_component"],[133,2,1,"","add_variable_rotate_component"],[133,2,1,"","add_variable_shift_component"],[133,2,1,"","add_word_permutation_component"],[133,2,1,"","algebraic_tests"],[133,2,1,"","analyze_cipher"],[133,2,1,"","as_python_dictionary"],[133,2,1,"","avalanche_probability_vectors"],[133,2,1,"","cipher_inverse"],[133,2,1,"","cipher_partial_inverse"],[133,2,1,"","component_analysis_tests"],[133,2,1,"","component_from"],[133,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[133,2,1,"","continuous_avalanche_factor"],[133,2,1,"","continuous_diffusion_factor"],[133,2,1,"","continuous_diffusion_tests"],[133,2,1,"","continuous_neutrality_measure_for_bit_j"],[133,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[133,2,1,"","convert_to_compound_xor_cipher"],[133,3,1,"","current_round"],[133,3,1,"","current_round_number"],[133,3,1,"","current_round_number_of_components"],[133,2,1,"","delete_generated_evaluate_c_shared_library"],[133,2,1,"","diffusion_tests"],[133,2,1,"","evaluate"],[133,2,1,"","evaluate_using_c"],[133,2,1,"","evaluate_vectorized"],[133,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[133,3,1,"","family_name"],[133,3,1,"","file_name"],[133,2,1,"","find_good_input_difference_for_neural_distinguisher"],[133,2,1,"","find_impossible_property"],[133,2,1,"","generate_bit_based_c_code"],[133,2,1,"","generate_csv_report"],[133,2,1,"","generate_evaluate_c_code_shared_library"],[133,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[133,2,1,"","generate_word_based_c_code"],[133,2,1,"","get_all_components"],[133,2,1,"","get_all_components_ids"],[133,2,1,"","get_all_inputs_bit_positions"],[133,2,1,"","get_component_from_id"],[133,2,1,"","get_components_in_round"],[133,2,1,"","get_current_component_id"],[133,2,1,"","get_model"],[133,2,1,"","get_number_of_components_in_round"],[133,2,1,"","get_partial_cipher"],[133,2,1,"","get_round_from_component_id"],[133,2,1,"","get_sizes_of_components_by_type"],[133,3,1,"","id"],[133,2,1,"","impossible_differential_search"],[133,3,1,"","inputs"],[133,3,1,"","inputs_bit_size"],[133,2,1,"","inputs_size_to_dict"],[133,2,1,"","is_algebraically_secure"],[133,2,1,"","is_andrx"],[133,2,1,"","is_arx"],[133,2,1,"","is_power_of_2_word_based"],[133,2,1,"","is_shift_arx"],[133,2,1,"","is_spn"],[133,2,1,"","make_cipher_id"],[133,2,1,"","make_file_name"],[133,2,1,"","neural_network_blackbox_distinguisher_tests"],[133,2,1,"","neural_network_differential_distinguisher_tests"],[133,3,1,"","number_of_rounds"],[133,3,1,"","output_bit_size"],[133,2,1,"","polynomial_system"],[133,2,1,"","polynomial_system_at_round"],[133,2,1,"","print"],[133,2,1,"","print_as_python_dictionary"],[133,2,1,"","print_as_python_dictionary_to_file"],[133,2,1,"","print_component_analysis_as_radar_charts"],[133,2,1,"","print_evaluation_python_code"],[133,2,1,"","print_evaluation_python_code_to_file"],[133,2,1,"","print_input_information"],[133,3,1,"","reference_code"],[133,2,1,"","remove_key_schedule"],[133,2,1,"","remove_round_component"],[133,2,1,"","remove_round_component_from_id"],[133,2,1,"","round_function"],[133,3,1,"","rounds"],[133,3,1,"","rounds_as_list"],[133,2,1,"","run_autond_pipeline"],[133,2,1,"","set_file_name"],[133,2,1,"","set_id"],[133,2,1,"","set_inputs"],[133,2,1,"","sort_cipher"],[133,2,1,"","test_against_reference_code"],[133,2,1,"","test_vector_check"],[133,2,1,"","train_gohr_neural_distinguisher"],[133,2,1,"","train_neural_distinguisher"],[133,3,1,"","type"],[133,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_32bits_word_permutation":[[134,1,1,"","TinyJambuWordBasedPermutation"]],"ciphers.permutations.tinyjambu_32bits_word_permutation.TinyJambuWordBasedPermutation":[[134,2,1,"","add_AND_component"],[134,2,1,"","add_FSR_component"],[134,2,1,"","add_MODADD_component"],[134,2,1,"","add_MODSUB_component"],[134,2,1,"","add_NOT_component"],[134,2,1,"","add_OR_component"],[134,2,1,"","add_SBOX_component"],[134,2,1,"","add_SHIFT_component"],[134,2,1,"","add_XOR_component"],[134,2,1,"","add_cipher_output_component"],[134,2,1,"","add_concatenate_component"],[134,2,1,"","add_constant_component"],[134,2,1,"","add_intermediate_output_component"],[134,2,1,"","add_linear_layer_component"],[134,2,1,"","add_mix_column_component"],[134,2,1,"","add_permutation_component"],[134,2,1,"","add_reverse_component"],[134,2,1,"","add_rotate_component"],[134,2,1,"","add_round"],[134,2,1,"","add_round_key_output_component"],[134,2,1,"","add_round_output_component"],[134,2,1,"","add_shift_rows_component"],[134,2,1,"","add_sigma_component"],[134,2,1,"","add_suffix_to_components"],[134,2,1,"","add_theta_keccak_component"],[134,2,1,"","add_theta_xoodoo_component"],[134,2,1,"","add_variable_rotate_component"],[134,2,1,"","add_variable_shift_component"],[134,2,1,"","add_word_permutation_component"],[134,2,1,"","algebraic_tests"],[134,2,1,"","analyze_cipher"],[134,2,1,"","as_python_dictionary"],[134,2,1,"","avalanche_probability_vectors"],[134,2,1,"","cipher_inverse"],[134,2,1,"","cipher_partial_inverse"],[134,2,1,"","component_analysis_tests"],[134,2,1,"","component_from"],[134,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[134,2,1,"","continuous_avalanche_factor"],[134,2,1,"","continuous_diffusion_factor"],[134,2,1,"","continuous_diffusion_tests"],[134,2,1,"","continuous_neutrality_measure_for_bit_j"],[134,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[134,2,1,"","convert_to_compound_xor_cipher"],[134,3,1,"","current_round"],[134,3,1,"","current_round_number"],[134,3,1,"","current_round_number_of_components"],[134,2,1,"","delete_generated_evaluate_c_shared_library"],[134,2,1,"","diffusion_tests"],[134,2,1,"","evaluate"],[134,2,1,"","evaluate_using_c"],[134,2,1,"","evaluate_vectorized"],[134,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[134,3,1,"","family_name"],[134,3,1,"","file_name"],[134,2,1,"","find_good_input_difference_for_neural_distinguisher"],[134,2,1,"","find_impossible_property"],[134,2,1,"","generate_bit_based_c_code"],[134,2,1,"","generate_csv_report"],[134,2,1,"","generate_evaluate_c_code_shared_library"],[134,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[134,2,1,"","generate_word_based_c_code"],[134,2,1,"","get_all_components"],[134,2,1,"","get_all_components_ids"],[134,2,1,"","get_all_inputs_bit_positions"],[134,2,1,"","get_component_from_id"],[134,2,1,"","get_components_in_round"],[134,2,1,"","get_current_component_id"],[134,2,1,"","get_model"],[134,2,1,"","get_number_of_components_in_round"],[134,2,1,"","get_partial_cipher"],[134,2,1,"","get_round_from_component_id"],[134,2,1,"","get_sizes_of_components_by_type"],[134,3,1,"","id"],[134,2,1,"","impossible_differential_search"],[134,3,1,"","inputs"],[134,3,1,"","inputs_bit_size"],[134,2,1,"","inputs_size_to_dict"],[134,2,1,"","is_algebraically_secure"],[134,2,1,"","is_andrx"],[134,2,1,"","is_arx"],[134,2,1,"","is_power_of_2_word_based"],[134,2,1,"","is_shift_arx"],[134,2,1,"","is_spn"],[134,2,1,"","make_cipher_id"],[134,2,1,"","make_file_name"],[134,2,1,"","neural_network_blackbox_distinguisher_tests"],[134,2,1,"","neural_network_differential_distinguisher_tests"],[134,3,1,"","number_of_rounds"],[134,3,1,"","output_bit_size"],[134,2,1,"","polynomial_system"],[134,2,1,"","polynomial_system_at_round"],[134,2,1,"","print"],[134,2,1,"","print_as_python_dictionary"],[134,2,1,"","print_as_python_dictionary_to_file"],[134,2,1,"","print_component_analysis_as_radar_charts"],[134,2,1,"","print_evaluation_python_code"],[134,2,1,"","print_evaluation_python_code_to_file"],[134,2,1,"","print_input_information"],[134,3,1,"","reference_code"],[134,2,1,"","remove_key_schedule"],[134,2,1,"","remove_round_component"],[134,2,1,"","remove_round_component_from_id"],[134,2,1,"","round_function"],[134,3,1,"","rounds"],[134,3,1,"","rounds_as_list"],[134,2,1,"","run_autond_pipeline"],[134,2,1,"","set_file_name"],[134,2,1,"","set_id"],[134,2,1,"","set_inputs"],[134,2,1,"","sort_cipher"],[134,2,1,"","test_against_reference_code"],[134,2,1,"","test_vector_check"],[134,2,1,"","train_gohr_neural_distinguisher"],[134,2,1,"","train_neural_distinguisher"],[134,3,1,"","type"],[134,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation":[[135,1,1,"","TinyJambuFSRWordBasedPermutation"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation.TinyJambuFSRWordBasedPermutation":[[135,2,1,"","add_AND_component"],[135,2,1,"","add_FSR_component"],[135,2,1,"","add_MODADD_component"],[135,2,1,"","add_MODSUB_component"],[135,2,1,"","add_NOT_component"],[135,2,1,"","add_OR_component"],[135,2,1,"","add_SBOX_component"],[135,2,1,"","add_SHIFT_component"],[135,2,1,"","add_XOR_component"],[135,2,1,"","add_cipher_output_component"],[135,2,1,"","add_concatenate_component"],[135,2,1,"","add_constant_component"],[135,2,1,"","add_intermediate_output_component"],[135,2,1,"","add_linear_layer_component"],[135,2,1,"","add_mix_column_component"],[135,2,1,"","add_permutation_component"],[135,2,1,"","add_reverse_component"],[135,2,1,"","add_rotate_component"],[135,2,1,"","add_round"],[135,2,1,"","add_round_key_output_component"],[135,2,1,"","add_round_output_component"],[135,2,1,"","add_shift_rows_component"],[135,2,1,"","add_sigma_component"],[135,2,1,"","add_suffix_to_components"],[135,2,1,"","add_theta_keccak_component"],[135,2,1,"","add_theta_xoodoo_component"],[135,2,1,"","add_variable_rotate_component"],[135,2,1,"","add_variable_shift_component"],[135,2,1,"","add_word_permutation_component"],[135,2,1,"","algebraic_tests"],[135,2,1,"","analyze_cipher"],[135,2,1,"","as_python_dictionary"],[135,2,1,"","avalanche_probability_vectors"],[135,2,1,"","cipher_inverse"],[135,2,1,"","cipher_partial_inverse"],[135,2,1,"","component_analysis_tests"],[135,2,1,"","component_from"],[135,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[135,2,1,"","continuous_avalanche_factor"],[135,2,1,"","continuous_diffusion_factor"],[135,2,1,"","continuous_diffusion_tests"],[135,2,1,"","continuous_neutrality_measure_for_bit_j"],[135,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[135,2,1,"","convert_to_compound_xor_cipher"],[135,3,1,"","current_round"],[135,3,1,"","current_round_number"],[135,3,1,"","current_round_number_of_components"],[135,2,1,"","delete_generated_evaluate_c_shared_library"],[135,2,1,"","diffusion_tests"],[135,2,1,"","evaluate"],[135,2,1,"","evaluate_using_c"],[135,2,1,"","evaluate_vectorized"],[135,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[135,3,1,"","family_name"],[135,3,1,"","file_name"],[135,2,1,"","find_good_input_difference_for_neural_distinguisher"],[135,2,1,"","find_impossible_property"],[135,2,1,"","generate_bit_based_c_code"],[135,2,1,"","generate_csv_report"],[135,2,1,"","generate_evaluate_c_code_shared_library"],[135,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[135,2,1,"","generate_word_based_c_code"],[135,2,1,"","get_all_components"],[135,2,1,"","get_all_components_ids"],[135,2,1,"","get_all_inputs_bit_positions"],[135,2,1,"","get_component_from_id"],[135,2,1,"","get_components_in_round"],[135,2,1,"","get_current_component_id"],[135,2,1,"","get_model"],[135,2,1,"","get_number_of_components_in_round"],[135,2,1,"","get_partial_cipher"],[135,2,1,"","get_round_from_component_id"],[135,2,1,"","get_sizes_of_components_by_type"],[135,3,1,"","id"],[135,2,1,"","impossible_differential_search"],[135,3,1,"","inputs"],[135,3,1,"","inputs_bit_size"],[135,2,1,"","inputs_size_to_dict"],[135,2,1,"","is_algebraically_secure"],[135,2,1,"","is_andrx"],[135,2,1,"","is_arx"],[135,2,1,"","is_power_of_2_word_based"],[135,2,1,"","is_shift_arx"],[135,2,1,"","is_spn"],[135,2,1,"","make_cipher_id"],[135,2,1,"","make_file_name"],[135,2,1,"","neural_network_blackbox_distinguisher_tests"],[135,2,1,"","neural_network_differential_distinguisher_tests"],[135,3,1,"","number_of_rounds"],[135,3,1,"","output_bit_size"],[135,2,1,"","polynomial_system"],[135,2,1,"","polynomial_system_at_round"],[135,2,1,"","print"],[135,2,1,"","print_as_python_dictionary"],[135,2,1,"","print_as_python_dictionary_to_file"],[135,2,1,"","print_component_analysis_as_radar_charts"],[135,2,1,"","print_evaluation_python_code"],[135,2,1,"","print_evaluation_python_code_to_file"],[135,2,1,"","print_input_information"],[135,3,1,"","reference_code"],[135,2,1,"","remove_key_schedule"],[135,2,1,"","remove_round_component"],[135,2,1,"","remove_round_component_from_id"],[135,2,1,"","round_function"],[135,3,1,"","rounds"],[135,3,1,"","rounds_as_list"],[135,2,1,"","run_autond_pipeline"],[135,2,1,"","set_file_name"],[135,2,1,"","set_id"],[135,2,1,"","set_inputs"],[135,2,1,"","sort_cipher"],[135,2,1,"","test_against_reference_code"],[135,2,1,"","test_vector_check"],[135,2,1,"","train_gohr_neural_distinguisher"],[135,2,1,"","train_neural_distinguisher"],[135,3,1,"","type"],[135,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_permutation":[[136,1,1,"","TinyJambuPermutation"]],"ciphers.permutations.tinyjambu_permutation.TinyJambuPermutation":[[136,2,1,"","add_AND_component"],[136,2,1,"","add_FSR_component"],[136,2,1,"","add_MODADD_component"],[136,2,1,"","add_MODSUB_component"],[136,2,1,"","add_NOT_component"],[136,2,1,"","add_OR_component"],[136,2,1,"","add_SBOX_component"],[136,2,1,"","add_SHIFT_component"],[136,2,1,"","add_XOR_component"],[136,2,1,"","add_cipher_output_component"],[136,2,1,"","add_concatenate_component"],[136,2,1,"","add_constant_component"],[136,2,1,"","add_intermediate_output_component"],[136,2,1,"","add_linear_layer_component"],[136,2,1,"","add_mix_column_component"],[136,2,1,"","add_permutation_component"],[136,2,1,"","add_reverse_component"],[136,2,1,"","add_rotate_component"],[136,2,1,"","add_round"],[136,2,1,"","add_round_key_output_component"],[136,2,1,"","add_round_output_component"],[136,2,1,"","add_shift_rows_component"],[136,2,1,"","add_sigma_component"],[136,2,1,"","add_suffix_to_components"],[136,2,1,"","add_theta_keccak_component"],[136,2,1,"","add_theta_xoodoo_component"],[136,2,1,"","add_variable_rotate_component"],[136,2,1,"","add_variable_shift_component"],[136,2,1,"","add_word_permutation_component"],[136,2,1,"","algebraic_tests"],[136,2,1,"","analyze_cipher"],[136,2,1,"","as_python_dictionary"],[136,2,1,"","avalanche_probability_vectors"],[136,2,1,"","cipher_inverse"],[136,2,1,"","cipher_partial_inverse"],[136,2,1,"","component_analysis_tests"],[136,2,1,"","component_from"],[136,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[136,2,1,"","continuous_avalanche_factor"],[136,2,1,"","continuous_diffusion_factor"],[136,2,1,"","continuous_diffusion_tests"],[136,2,1,"","continuous_neutrality_measure_for_bit_j"],[136,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[136,2,1,"","convert_to_compound_xor_cipher"],[136,3,1,"","current_round"],[136,3,1,"","current_round_number"],[136,3,1,"","current_round_number_of_components"],[136,2,1,"","delete_generated_evaluate_c_shared_library"],[136,2,1,"","diffusion_tests"],[136,2,1,"","evaluate"],[136,2,1,"","evaluate_using_c"],[136,2,1,"","evaluate_vectorized"],[136,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[136,3,1,"","family_name"],[136,3,1,"","file_name"],[136,2,1,"","find_good_input_difference_for_neural_distinguisher"],[136,2,1,"","find_impossible_property"],[136,2,1,"","generate_bit_based_c_code"],[136,2,1,"","generate_csv_report"],[136,2,1,"","generate_evaluate_c_code_shared_library"],[136,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[136,2,1,"","generate_word_based_c_code"],[136,2,1,"","get_all_components"],[136,2,1,"","get_all_components_ids"],[136,2,1,"","get_all_inputs_bit_positions"],[136,2,1,"","get_component_from_id"],[136,2,1,"","get_components_in_round"],[136,2,1,"","get_current_component_id"],[136,2,1,"","get_model"],[136,2,1,"","get_number_of_components_in_round"],[136,2,1,"","get_partial_cipher"],[136,2,1,"","get_round_from_component_id"],[136,2,1,"","get_sizes_of_components_by_type"],[136,3,1,"","id"],[136,2,1,"","impossible_differential_search"],[136,3,1,"","inputs"],[136,3,1,"","inputs_bit_size"],[136,2,1,"","inputs_size_to_dict"],[136,2,1,"","is_algebraically_secure"],[136,2,1,"","is_andrx"],[136,2,1,"","is_arx"],[136,2,1,"","is_power_of_2_word_based"],[136,2,1,"","is_shift_arx"],[136,2,1,"","is_spn"],[136,2,1,"","make_cipher_id"],[136,2,1,"","make_file_name"],[136,2,1,"","neural_network_blackbox_distinguisher_tests"],[136,2,1,"","neural_network_differential_distinguisher_tests"],[136,3,1,"","number_of_rounds"],[136,3,1,"","output_bit_size"],[136,2,1,"","polynomial_system"],[136,2,1,"","polynomial_system_at_round"],[136,2,1,"","print"],[136,2,1,"","print_as_python_dictionary"],[136,2,1,"","print_as_python_dictionary_to_file"],[136,2,1,"","print_component_analysis_as_radar_charts"],[136,2,1,"","print_evaluation_python_code"],[136,2,1,"","print_evaluation_python_code_to_file"],[136,2,1,"","print_input_information"],[136,3,1,"","reference_code"],[136,2,1,"","remove_key_schedule"],[136,2,1,"","remove_round_component"],[136,2,1,"","remove_round_component_from_id"],[136,2,1,"","round_function"],[136,3,1,"","rounds"],[136,3,1,"","rounds_as_list"],[136,2,1,"","run_autond_pipeline"],[136,2,1,"","set_file_name"],[136,2,1,"","set_id"],[136,2,1,"","set_inputs"],[136,2,1,"","sort_cipher"],[136,2,1,"","test_against_reference_code"],[136,2,1,"","test_vector_check"],[136,2,1,"","train_gohr_neural_distinguisher"],[136,2,1,"","train_neural_distinguisher"],[136,3,1,"","type"],[136,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.util":[[137,4,1,"","add_intermediate_output_component_latin_dances_permutations"],[137,4,1,"","get_input_bit_positions_latin_dances"],[137,4,1,"","half_like_round_function_latin_dances"],[137,4,1,"","init_latin_dances_cipher"],[137,4,1,"","init_state_latin_dances"],[137,4,1,"","sub_quarter_round_latin_dances"]],"ciphers.permutations.xoodoo_invertible_permutation":[[138,1,1,"","XoodooInvertiblePermutation"]],"ciphers.permutations.xoodoo_invertible_permutation.XoodooInvertiblePermutation":[[138,2,1,"","add_AND_component"],[138,2,1,"","add_FSR_component"],[138,2,1,"","add_MODADD_component"],[138,2,1,"","add_MODSUB_component"],[138,2,1,"","add_NOT_component"],[138,2,1,"","add_OR_component"],[138,2,1,"","add_SBOX_component"],[138,2,1,"","add_SHIFT_component"],[138,2,1,"","add_XOR_component"],[138,2,1,"","add_cipher_output_component"],[138,2,1,"","add_concatenate_component"],[138,2,1,"","add_constant_component"],[138,2,1,"","add_intermediate_output_component"],[138,2,1,"","add_linear_layer_component"],[138,2,1,"","add_mix_column_component"],[138,2,1,"","add_output_component"],[138,2,1,"","add_permutation_component"],[138,2,1,"","add_reverse_component"],[138,2,1,"","add_rotate_component"],[138,2,1,"","add_round"],[138,2,1,"","add_round_key_output_component"],[138,2,1,"","add_round_output_component"],[138,2,1,"","add_shift_rows_component"],[138,2,1,"","add_sigma_component"],[138,2,1,"","add_suffix_to_components"],[138,2,1,"","add_theta_keccak_component"],[138,2,1,"","add_theta_xoodoo_component"],[138,2,1,"","add_variable_rotate_component"],[138,2,1,"","add_variable_shift_component"],[138,2,1,"","add_word_permutation_component"],[138,2,1,"","algebraic_tests"],[138,2,1,"","analyze_cipher"],[138,2,1,"","apply_sbox_to_each_3bit_column"],[138,2,1,"","as_python_dictionary"],[138,2,1,"","avalanche_probability_vectors"],[138,2,1,"","chi_definition"],[138,2,1,"","cipher_inverse"],[138,2,1,"","cipher_partial_inverse"],[138,2,1,"","component_analysis_tests"],[138,2,1,"","component_from"],[138,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[138,2,1,"","continuous_avalanche_factor"],[138,2,1,"","continuous_diffusion_factor"],[138,2,1,"","continuous_diffusion_tests"],[138,2,1,"","continuous_neutrality_measure_for_bit_j"],[138,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[138,2,1,"","convert_to_compound_xor_cipher"],[138,3,1,"","current_round"],[138,3,1,"","current_round_number"],[138,3,1,"","current_round_number_of_components"],[138,2,1,"","delete_generated_evaluate_c_shared_library"],[138,2,1,"","diffusion_tests"],[138,2,1,"","evaluate"],[138,2,1,"","evaluate_using_c"],[138,2,1,"","evaluate_vectorized"],[138,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[138,3,1,"","family_name"],[138,3,1,"","file_name"],[138,2,1,"","find_good_input_difference_for_neural_distinguisher"],[138,2,1,"","find_impossible_property"],[138,2,1,"","generate_bit_based_c_code"],[138,2,1,"","generate_csv_report"],[138,2,1,"","generate_evaluate_c_code_shared_library"],[138,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[138,2,1,"","generate_word_based_c_code"],[138,2,1,"","get_all_components"],[138,2,1,"","get_all_components_ids"],[138,2,1,"","get_all_inputs_bit_positions"],[138,2,1,"","get_component_from_id"],[138,2,1,"","get_components_in_round"],[138,2,1,"","get_current_component_id"],[138,2,1,"","get_model"],[138,2,1,"","get_number_of_components_in_round"],[138,2,1,"","get_partial_cipher"],[138,2,1,"","get_round_from_component_id"],[138,2,1,"","get_sizes_of_components_by_type"],[138,3,1,"","id"],[138,2,1,"","impossible_differential_search"],[138,3,1,"","inputs"],[138,3,1,"","inputs_bit_size"],[138,2,1,"","inputs_size_to_dict"],[138,2,1,"","iota_definition"],[138,2,1,"","is_algebraically_secure"],[138,2,1,"","is_andrx"],[138,2,1,"","is_arx"],[138,2,1,"","is_power_of_2_word_based"],[138,2,1,"","is_shift_arx"],[138,2,1,"","is_spn"],[138,2,1,"","make_cipher_id"],[138,2,1,"","make_file_name"],[138,2,1,"","neural_network_blackbox_distinguisher_tests"],[138,2,1,"","neural_network_differential_distinguisher_tests"],[138,3,1,"","number_of_rounds"],[138,3,1,"","output_bit_size"],[138,2,1,"","polynomial_system"],[138,2,1,"","polynomial_system_at_round"],[138,2,1,"","print"],[138,2,1,"","print_as_python_dictionary"],[138,2,1,"","print_as_python_dictionary_to_file"],[138,2,1,"","print_component_analysis_as_radar_charts"],[138,2,1,"","print_evaluation_python_code"],[138,2,1,"","print_evaluation_python_code_to_file"],[138,2,1,"","print_input_information"],[138,3,1,"","reference_code"],[138,2,1,"","remove_key_schedule"],[138,2,1,"","remove_round_component"],[138,2,1,"","remove_round_component_from_id"],[138,2,1,"","rhoeast_definition"],[138,2,1,"","rhowest_definition"],[138,2,1,"","rotate_x_z"],[138,2,1,"","round_function"],[138,3,1,"","rounds"],[138,3,1,"","rounds_as_list"],[138,2,1,"","run_autond_pipeline"],[138,2,1,"","set_file_name"],[138,2,1,"","set_id"],[138,2,1,"","set_inputs"],[138,2,1,"","sort_cipher"],[138,2,1,"","test_against_reference_code"],[138,2,1,"","test_vector_check"],[138,2,1,"","theta_definition"],[138,2,1,"","train_gohr_neural_distinguisher"],[138,2,1,"","train_neural_distinguisher"],[138,3,1,"","type"],[138,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_permutation":[[139,1,1,"","XoodooPermutation"]],"ciphers.permutations.xoodoo_permutation.XoodooPermutation":[[139,2,1,"","add_AND_component"],[139,2,1,"","add_FSR_component"],[139,2,1,"","add_MODADD_component"],[139,2,1,"","add_MODSUB_component"],[139,2,1,"","add_NOT_component"],[139,2,1,"","add_OR_component"],[139,2,1,"","add_SBOX_component"],[139,2,1,"","add_SHIFT_component"],[139,2,1,"","add_XOR_component"],[139,2,1,"","add_cipher_output_component"],[139,2,1,"","add_concatenate_component"],[139,2,1,"","add_constant_component"],[139,2,1,"","add_intermediate_output_component"],[139,2,1,"","add_linear_layer_component"],[139,2,1,"","add_mix_column_component"],[139,2,1,"","add_output_component"],[139,2,1,"","add_permutation_component"],[139,2,1,"","add_reverse_component"],[139,2,1,"","add_rotate_component"],[139,2,1,"","add_round"],[139,2,1,"","add_round_key_output_component"],[139,2,1,"","add_round_output_component"],[139,2,1,"","add_round_output_linear"],[139,2,1,"","add_round_output_nonlinear"],[139,2,1,"","add_shift_rows_component"],[139,2,1,"","add_sigma_component"],[139,2,1,"","add_suffix_to_components"],[139,2,1,"","add_theta_keccak_component"],[139,2,1,"","add_theta_xoodoo_component"],[139,2,1,"","add_variable_rotate_component"],[139,2,1,"","add_variable_shift_component"],[139,2,1,"","add_word_permutation_component"],[139,2,1,"","algebraic_tests"],[139,2,1,"","analyze_cipher"],[139,2,1,"","as_python_dictionary"],[139,2,1,"","avalanche_probability_vectors"],[139,2,1,"","chi_definition"],[139,2,1,"","cipher_inverse"],[139,2,1,"","cipher_partial_inverse"],[139,2,1,"","component_analysis_tests"],[139,2,1,"","component_from"],[139,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[139,2,1,"","continuous_avalanche_factor"],[139,2,1,"","continuous_diffusion_factor"],[139,2,1,"","continuous_diffusion_tests"],[139,2,1,"","continuous_neutrality_measure_for_bit_j"],[139,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[139,2,1,"","convert_to_compound_xor_cipher"],[139,3,1,"","current_round"],[139,3,1,"","current_round_number"],[139,3,1,"","current_round_number_of_components"],[139,2,1,"","delete_generated_evaluate_c_shared_library"],[139,2,1,"","diffusion_tests"],[139,2,1,"","evaluate"],[139,2,1,"","evaluate_using_c"],[139,2,1,"","evaluate_vectorized"],[139,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[139,3,1,"","family_name"],[139,3,1,"","file_name"],[139,2,1,"","find_good_input_difference_for_neural_distinguisher"],[139,2,1,"","find_impossible_property"],[139,2,1,"","generate_bit_based_c_code"],[139,2,1,"","generate_csv_report"],[139,2,1,"","generate_evaluate_c_code_shared_library"],[139,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[139,2,1,"","generate_word_based_c_code"],[139,2,1,"","get_all_components"],[139,2,1,"","get_all_components_ids"],[139,2,1,"","get_all_inputs_bit_positions"],[139,2,1,"","get_component_from_id"],[139,2,1,"","get_components_in_round"],[139,2,1,"","get_current_component_id"],[139,2,1,"","get_model"],[139,2,1,"","get_number_of_components_in_round"],[139,2,1,"","get_partial_cipher"],[139,2,1,"","get_round_from_component_id"],[139,2,1,"","get_sizes_of_components_by_type"],[139,3,1,"","id"],[139,2,1,"","impossible_differential_search"],[139,3,1,"","inputs"],[139,3,1,"","inputs_bit_size"],[139,2,1,"","inputs_size_to_dict"],[139,2,1,"","iota_definition"],[139,2,1,"","is_algebraically_secure"],[139,2,1,"","is_andrx"],[139,2,1,"","is_arx"],[139,2,1,"","is_power_of_2_word_based"],[139,2,1,"","is_shift_arx"],[139,2,1,"","is_spn"],[139,2,1,"","make_cipher_id"],[139,2,1,"","make_file_name"],[139,2,1,"","neural_network_blackbox_distinguisher_tests"],[139,2,1,"","neural_network_differential_distinguisher_tests"],[139,3,1,"","number_of_rounds"],[139,3,1,"","output_bit_size"],[139,2,1,"","polynomial_system"],[139,2,1,"","polynomial_system_at_round"],[139,2,1,"","print"],[139,2,1,"","print_as_python_dictionary"],[139,2,1,"","print_as_python_dictionary_to_file"],[139,2,1,"","print_component_analysis_as_radar_charts"],[139,2,1,"","print_evaluation_python_code"],[139,2,1,"","print_evaluation_python_code_to_file"],[139,2,1,"","print_input_information"],[139,3,1,"","reference_code"],[139,2,1,"","remove_key_schedule"],[139,2,1,"","remove_round_component"],[139,2,1,"","remove_round_component_from_id"],[139,2,1,"","rhoeast_definition"],[139,2,1,"","rhowest_definition"],[139,2,1,"","rotate_x_z"],[139,2,1,"","round_function"],[139,3,1,"","rounds"],[139,3,1,"","rounds_as_list"],[139,2,1,"","run_autond_pipeline"],[139,2,1,"","set_file_name"],[139,2,1,"","set_id"],[139,2,1,"","set_inputs"],[139,2,1,"","sort_cipher"],[139,2,1,"","test_against_reference_code"],[139,2,1,"","test_vector_check"],[139,2,1,"","theta_definition"],[139,2,1,"","train_gohr_neural_distinguisher"],[139,2,1,"","train_neural_distinguisher"],[139,3,1,"","type"],[139,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_sbox_permutation":[[140,1,1,"","XoodooSboxPermutation"]],"ciphers.permutations.xoodoo_sbox_permutation.XoodooSboxPermutation":[[140,2,1,"","add_AND_component"],[140,2,1,"","add_FSR_component"],[140,2,1,"","add_MODADD_component"],[140,2,1,"","add_MODSUB_component"],[140,2,1,"","add_NOT_component"],[140,2,1,"","add_OR_component"],[140,2,1,"","add_SBOX_component"],[140,2,1,"","add_SHIFT_component"],[140,2,1,"","add_XOR_component"],[140,2,1,"","add_cipher_output_component"],[140,2,1,"","add_concatenate_component"],[140,2,1,"","add_constant_component"],[140,2,1,"","add_intermediate_output_component"],[140,2,1,"","add_linear_layer_component"],[140,2,1,"","add_mix_column_component"],[140,2,1,"","add_output_component"],[140,2,1,"","add_permutation_component"],[140,2,1,"","add_reverse_component"],[140,2,1,"","add_rotate_component"],[140,2,1,"","add_round"],[140,2,1,"","add_round_key_output_component"],[140,2,1,"","add_round_output_component"],[140,2,1,"","add_shift_rows_component"],[140,2,1,"","add_sigma_component"],[140,2,1,"","add_suffix_to_components"],[140,2,1,"","add_theta_keccak_component"],[140,2,1,"","add_theta_xoodoo_component"],[140,2,1,"","add_variable_rotate_component"],[140,2,1,"","add_variable_shift_component"],[140,2,1,"","add_word_permutation_component"],[140,2,1,"","algebraic_tests"],[140,2,1,"","analyze_cipher"],[140,2,1,"","apply_sbox_to_each_3bit_column"],[140,2,1,"","as_python_dictionary"],[140,2,1,"","avalanche_probability_vectors"],[140,2,1,"","chi_definition"],[140,2,1,"","cipher_inverse"],[140,2,1,"","cipher_partial_inverse"],[140,2,1,"","component_analysis_tests"],[140,2,1,"","component_from"],[140,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[140,2,1,"","continuous_avalanche_factor"],[140,2,1,"","continuous_diffusion_factor"],[140,2,1,"","continuous_diffusion_tests"],[140,2,1,"","continuous_neutrality_measure_for_bit_j"],[140,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[140,2,1,"","convert_to_compound_xor_cipher"],[140,3,1,"","current_round"],[140,3,1,"","current_round_number"],[140,3,1,"","current_round_number_of_components"],[140,2,1,"","delete_generated_evaluate_c_shared_library"],[140,2,1,"","diffusion_tests"],[140,2,1,"","evaluate"],[140,2,1,"","evaluate_using_c"],[140,2,1,"","evaluate_vectorized"],[140,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[140,3,1,"","family_name"],[140,3,1,"","file_name"],[140,2,1,"","find_good_input_difference_for_neural_distinguisher"],[140,2,1,"","find_impossible_property"],[140,2,1,"","generate_bit_based_c_code"],[140,2,1,"","generate_csv_report"],[140,2,1,"","generate_evaluate_c_code_shared_library"],[140,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[140,2,1,"","generate_word_based_c_code"],[140,2,1,"","get_all_components"],[140,2,1,"","get_all_components_ids"],[140,2,1,"","get_all_inputs_bit_positions"],[140,2,1,"","get_component_from_id"],[140,2,1,"","get_components_in_round"],[140,2,1,"","get_current_component_id"],[140,2,1,"","get_model"],[140,2,1,"","get_number_of_components_in_round"],[140,2,1,"","get_partial_cipher"],[140,2,1,"","get_round_from_component_id"],[140,2,1,"","get_sizes_of_components_by_type"],[140,3,1,"","id"],[140,2,1,"","impossible_differential_search"],[140,3,1,"","inputs"],[140,3,1,"","inputs_bit_size"],[140,2,1,"","inputs_size_to_dict"],[140,2,1,"","iota_definition"],[140,2,1,"","is_algebraically_secure"],[140,2,1,"","is_andrx"],[140,2,1,"","is_arx"],[140,2,1,"","is_power_of_2_word_based"],[140,2,1,"","is_shift_arx"],[140,2,1,"","is_spn"],[140,2,1,"","make_cipher_id"],[140,2,1,"","make_file_name"],[140,2,1,"","neural_network_blackbox_distinguisher_tests"],[140,2,1,"","neural_network_differential_distinguisher_tests"],[140,3,1,"","number_of_rounds"],[140,3,1,"","output_bit_size"],[140,2,1,"","polynomial_system"],[140,2,1,"","polynomial_system_at_round"],[140,2,1,"","print"],[140,2,1,"","print_as_python_dictionary"],[140,2,1,"","print_as_python_dictionary_to_file"],[140,2,1,"","print_component_analysis_as_radar_charts"],[140,2,1,"","print_evaluation_python_code"],[140,2,1,"","print_evaluation_python_code_to_file"],[140,2,1,"","print_input_information"],[140,3,1,"","reference_code"],[140,2,1,"","remove_key_schedule"],[140,2,1,"","remove_round_component"],[140,2,1,"","remove_round_component_from_id"],[140,2,1,"","rhoeast_definition"],[140,2,1,"","rhowest_definition"],[140,2,1,"","rotate_x_z"],[140,2,1,"","round_function"],[140,3,1,"","rounds"],[140,3,1,"","rounds_as_list"],[140,2,1,"","run_autond_pipeline"],[140,2,1,"","set_file_name"],[140,2,1,"","set_id"],[140,2,1,"","set_inputs"],[140,2,1,"","sort_cipher"],[140,2,1,"","test_against_reference_code"],[140,2,1,"","test_vector_check"],[140,2,1,"","theta_definition"],[140,2,1,"","train_gohr_neural_distinguisher"],[140,2,1,"","train_neural_distinguisher"],[140,3,1,"","type"],[140,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers":[[141,0,0,"-","a5_1_stream_cipher"],[142,0,0,"-","bivium_stream_cipher"],[143,0,0,"-","bluetooth_stream_cipher_e0"],[144,0,0,"-","chacha_stream_cipher"],[145,0,0,"-","snow3g_stream_cipher"],[146,0,0,"-","trivium_stream_cipher"],[147,0,0,"-","zuc_stream_cipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher":[[141,1,1,"","A51StreamCipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher.A51StreamCipher":[[141,2,1,"","add_AND_component"],[141,2,1,"","add_FSR_component"],[141,2,1,"","add_MODADD_component"],[141,2,1,"","add_MODSUB_component"],[141,2,1,"","add_NOT_component"],[141,2,1,"","add_OR_component"],[141,2,1,"","add_SBOX_component"],[141,2,1,"","add_SHIFT_component"],[141,2,1,"","add_XOR_component"],[141,2,1,"","add_cipher_output_component"],[141,2,1,"","add_concatenate_component"],[141,2,1,"","add_constant_component"],[141,2,1,"","add_intermediate_output_component"],[141,2,1,"","add_linear_layer_component"],[141,2,1,"","add_mix_column_component"],[141,2,1,"","add_permutation_component"],[141,2,1,"","add_reverse_component"],[141,2,1,"","add_rotate_component"],[141,2,1,"","add_round"],[141,2,1,"","add_round_key_output_component"],[141,2,1,"","add_round_output_component"],[141,2,1,"","add_shift_rows_component"],[141,2,1,"","add_sigma_component"],[141,2,1,"","add_suffix_to_components"],[141,2,1,"","add_theta_keccak_component"],[141,2,1,"","add_theta_xoodoo_component"],[141,2,1,"","add_variable_rotate_component"],[141,2,1,"","add_variable_shift_component"],[141,2,1,"","add_word_permutation_component"],[141,2,1,"","algebraic_tests"],[141,2,1,"","analyze_cipher"],[141,2,1,"","as_python_dictionary"],[141,2,1,"","avalanche_probability_vectors"],[141,2,1,"","cipher_inverse"],[141,2,1,"","cipher_partial_inverse"],[141,2,1,"","component_analysis_tests"],[141,2,1,"","component_from"],[141,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[141,2,1,"","continuous_avalanche_factor"],[141,2,1,"","continuous_diffusion_factor"],[141,2,1,"","continuous_diffusion_tests"],[141,2,1,"","continuous_neutrality_measure_for_bit_j"],[141,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[141,2,1,"","convert_to_compound_xor_cipher"],[141,3,1,"","current_round"],[141,3,1,"","current_round_number"],[141,3,1,"","current_round_number_of_components"],[141,2,1,"","delete_generated_evaluate_c_shared_library"],[141,2,1,"","diffusion_tests"],[141,2,1,"","evaluate"],[141,2,1,"","evaluate_using_c"],[141,2,1,"","evaluate_vectorized"],[141,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[141,3,1,"","family_name"],[141,3,1,"","file_name"],[141,2,1,"","find_good_input_difference_for_neural_distinguisher"],[141,2,1,"","find_impossible_property"],[141,2,1,"","generate_bit_based_c_code"],[141,2,1,"","generate_csv_report"],[141,2,1,"","generate_evaluate_c_code_shared_library"],[141,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[141,2,1,"","generate_word_based_c_code"],[141,2,1,"","get_all_components"],[141,2,1,"","get_all_components_ids"],[141,2,1,"","get_all_inputs_bit_positions"],[141,2,1,"","get_component_from_id"],[141,2,1,"","get_components_in_round"],[141,2,1,"","get_current_component_id"],[141,2,1,"","get_model"],[141,2,1,"","get_number_of_components_in_round"],[141,2,1,"","get_partial_cipher"],[141,2,1,"","get_round_from_component_id"],[141,2,1,"","get_sizes_of_components_by_type"],[141,3,1,"","id"],[141,2,1,"","impossible_differential_search"],[141,3,1,"","inputs"],[141,3,1,"","inputs_bit_size"],[141,2,1,"","inputs_size_to_dict"],[141,2,1,"","is_algebraically_secure"],[141,2,1,"","is_andrx"],[141,2,1,"","is_arx"],[141,2,1,"","is_power_of_2_word_based"],[141,2,1,"","is_shift_arx"],[141,2,1,"","is_spn"],[141,2,1,"","make_cipher_id"],[141,2,1,"","make_file_name"],[141,2,1,"","neural_network_blackbox_distinguisher_tests"],[141,2,1,"","neural_network_differential_distinguisher_tests"],[141,3,1,"","number_of_rounds"],[141,3,1,"","output_bit_size"],[141,2,1,"","polynomial_system"],[141,2,1,"","polynomial_system_at_round"],[141,2,1,"","print"],[141,2,1,"","print_as_python_dictionary"],[141,2,1,"","print_as_python_dictionary_to_file"],[141,2,1,"","print_component_analysis_as_radar_charts"],[141,2,1,"","print_evaluation_python_code"],[141,2,1,"","print_evaluation_python_code_to_file"],[141,2,1,"","print_input_information"],[141,3,1,"","reference_code"],[141,2,1,"","regs_initialization"],[141,2,1,"","remove_key_schedule"],[141,2,1,"","remove_round_component"],[141,2,1,"","remove_round_component_from_id"],[141,2,1,"","round_function"],[141,3,1,"","rounds"],[141,3,1,"","rounds_as_list"],[141,2,1,"","run_autond_pipeline"],[141,2,1,"","set_file_name"],[141,2,1,"","set_id"],[141,2,1,"","set_inputs"],[141,2,1,"","sort_cipher"],[141,2,1,"","test_against_reference_code"],[141,2,1,"","test_vector_check"],[141,2,1,"","train_gohr_neural_distinguisher"],[141,2,1,"","train_neural_distinguisher"],[141,3,1,"","type"],[141,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bivium_stream_cipher":[[142,1,1,"","BiviumStreamCipher"]],"ciphers.stream_ciphers.bivium_stream_cipher.BiviumStreamCipher":[[142,2,1,"","add_AND_component"],[142,2,1,"","add_FSR_component"],[142,2,1,"","add_MODADD_component"],[142,2,1,"","add_MODSUB_component"],[142,2,1,"","add_NOT_component"],[142,2,1,"","add_OR_component"],[142,2,1,"","add_SBOX_component"],[142,2,1,"","add_SHIFT_component"],[142,2,1,"","add_XOR_component"],[142,2,1,"","add_cipher_output_component"],[142,2,1,"","add_concatenate_component"],[142,2,1,"","add_constant_component"],[142,2,1,"","add_intermediate_output_component"],[142,2,1,"","add_linear_layer_component"],[142,2,1,"","add_mix_column_component"],[142,2,1,"","add_permutation_component"],[142,2,1,"","add_reverse_component"],[142,2,1,"","add_rotate_component"],[142,2,1,"","add_round"],[142,2,1,"","add_round_key_output_component"],[142,2,1,"","add_round_output_component"],[142,2,1,"","add_shift_rows_component"],[142,2,1,"","add_sigma_component"],[142,2,1,"","add_suffix_to_components"],[142,2,1,"","add_theta_keccak_component"],[142,2,1,"","add_theta_xoodoo_component"],[142,2,1,"","add_variable_rotate_component"],[142,2,1,"","add_variable_shift_component"],[142,2,1,"","add_word_permutation_component"],[142,2,1,"","algebraic_tests"],[142,2,1,"","analyze_cipher"],[142,2,1,"","as_python_dictionary"],[142,2,1,"","avalanche_probability_vectors"],[142,2,1,"","bivium_key_stream"],[142,2,1,"","bivium_state_initialization"],[142,2,1,"","cipher_inverse"],[142,2,1,"","cipher_partial_inverse"],[142,2,1,"","component_analysis_tests"],[142,2,1,"","component_from"],[142,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[142,2,1,"","continuous_avalanche_factor"],[142,2,1,"","continuous_diffusion_factor"],[142,2,1,"","continuous_diffusion_tests"],[142,2,1,"","continuous_neutrality_measure_for_bit_j"],[142,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[142,2,1,"","convert_to_compound_xor_cipher"],[142,3,1,"","current_round"],[142,3,1,"","current_round_number"],[142,3,1,"","current_round_number_of_components"],[142,2,1,"","delete_generated_evaluate_c_shared_library"],[142,2,1,"","diffusion_tests"],[142,2,1,"","evaluate"],[142,2,1,"","evaluate_using_c"],[142,2,1,"","evaluate_vectorized"],[142,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[142,3,1,"","family_name"],[142,3,1,"","file_name"],[142,2,1,"","find_good_input_difference_for_neural_distinguisher"],[142,2,1,"","find_impossible_property"],[142,2,1,"","generate_bit_based_c_code"],[142,2,1,"","generate_csv_report"],[142,2,1,"","generate_evaluate_c_code_shared_library"],[142,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[142,2,1,"","generate_word_based_c_code"],[142,2,1,"","get_all_components"],[142,2,1,"","get_all_components_ids"],[142,2,1,"","get_all_inputs_bit_positions"],[142,2,1,"","get_component_from_id"],[142,2,1,"","get_components_in_round"],[142,2,1,"","get_current_component_id"],[142,2,1,"","get_model"],[142,2,1,"","get_number_of_components_in_round"],[142,2,1,"","get_partial_cipher"],[142,2,1,"","get_round_from_component_id"],[142,2,1,"","get_sizes_of_components_by_type"],[142,3,1,"","id"],[142,2,1,"","impossible_differential_search"],[142,3,1,"","inputs"],[142,3,1,"","inputs_bit_size"],[142,2,1,"","inputs_size_to_dict"],[142,2,1,"","is_algebraically_secure"],[142,2,1,"","is_andrx"],[142,2,1,"","is_arx"],[142,2,1,"","is_power_of_2_word_based"],[142,2,1,"","is_shift_arx"],[142,2,1,"","is_spn"],[142,2,1,"","make_cipher_id"],[142,2,1,"","make_file_name"],[142,2,1,"","neural_network_blackbox_distinguisher_tests"],[142,2,1,"","neural_network_differential_distinguisher_tests"],[142,3,1,"","number_of_rounds"],[142,3,1,"","output_bit_size"],[142,2,1,"","polynomial_system"],[142,2,1,"","polynomial_system_at_round"],[142,2,1,"","print"],[142,2,1,"","print_as_python_dictionary"],[142,2,1,"","print_as_python_dictionary_to_file"],[142,2,1,"","print_component_analysis_as_radar_charts"],[142,2,1,"","print_evaluation_python_code"],[142,2,1,"","print_evaluation_python_code_to_file"],[142,2,1,"","print_input_information"],[142,3,1,"","reference_code"],[142,2,1,"","remove_key_schedule"],[142,2,1,"","remove_round_component"],[142,2,1,"","remove_round_component_from_id"],[142,3,1,"","rounds"],[142,3,1,"","rounds_as_list"],[142,2,1,"","run_autond_pipeline"],[142,2,1,"","set_file_name"],[142,2,1,"","set_id"],[142,2,1,"","set_inputs"],[142,2,1,"","sort_cipher"],[142,2,1,"","test_against_reference_code"],[142,2,1,"","test_vector_check"],[142,2,1,"","train_gohr_neural_distinguisher"],[142,2,1,"","train_neural_distinguisher"],[142,3,1,"","type"],[142,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0":[[143,1,1,"","BluetoothStreamCipherE0"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0.BluetoothStreamCipherE0":[[143,2,1,"","add_AND_component"],[143,2,1,"","add_FSR_component"],[143,2,1,"","add_MODADD_component"],[143,2,1,"","add_MODSUB_component"],[143,2,1,"","add_NOT_component"],[143,2,1,"","add_OR_component"],[143,2,1,"","add_SBOX_component"],[143,2,1,"","add_SHIFT_component"],[143,2,1,"","add_XOR_component"],[143,2,1,"","add_cipher_output_component"],[143,2,1,"","add_concatenate_component"],[143,2,1,"","add_constant_component"],[143,2,1,"","add_intermediate_output_component"],[143,2,1,"","add_linear_layer_component"],[143,2,1,"","add_mix_column_component"],[143,2,1,"","add_permutation_component"],[143,2,1,"","add_reverse_component"],[143,2,1,"","add_rotate_component"],[143,2,1,"","add_round"],[143,2,1,"","add_round_key_output_component"],[143,2,1,"","add_round_output_component"],[143,2,1,"","add_shift_rows_component"],[143,2,1,"","add_sigma_component"],[143,2,1,"","add_suffix_to_components"],[143,2,1,"","add_theta_keccak_component"],[143,2,1,"","add_theta_xoodoo_component"],[143,2,1,"","add_variable_rotate_component"],[143,2,1,"","add_variable_shift_component"],[143,2,1,"","add_word_permutation_component"],[143,2,1,"","algebraic_tests"],[143,2,1,"","analyze_cipher"],[143,2,1,"","as_python_dictionary"],[143,2,1,"","avalanche_probability_vectors"],[143,2,1,"","cipher_inverse"],[143,2,1,"","cipher_partial_inverse"],[143,2,1,"","component_analysis_tests"],[143,2,1,"","component_from"],[143,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[143,2,1,"","continuous_avalanche_factor"],[143,2,1,"","continuous_diffusion_factor"],[143,2,1,"","continuous_diffusion_tests"],[143,2,1,"","continuous_neutrality_measure_for_bit_j"],[143,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[143,2,1,"","convert_to_compound_xor_cipher"],[143,3,1,"","current_round"],[143,3,1,"","current_round_number"],[143,3,1,"","current_round_number_of_components"],[143,2,1,"","delete_generated_evaluate_c_shared_library"],[143,2,1,"","diffusion_tests"],[143,2,1,"","e0_keystream"],[143,2,1,"","e0_nonlinear_function"],[143,2,1,"","evaluate"],[143,2,1,"","evaluate_using_c"],[143,2,1,"","evaluate_vectorized"],[143,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[143,3,1,"","family_name"],[143,3,1,"","file_name"],[143,2,1,"","find_good_input_difference_for_neural_distinguisher"],[143,2,1,"","find_impossible_property"],[143,2,1,"","generate_bit_based_c_code"],[143,2,1,"","generate_csv_report"],[143,2,1,"","generate_evaluate_c_code_shared_library"],[143,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[143,2,1,"","generate_word_based_c_code"],[143,2,1,"","get_all_components"],[143,2,1,"","get_all_components_ids"],[143,2,1,"","get_all_inputs_bit_positions"],[143,2,1,"","get_component_from_id"],[143,2,1,"","get_components_in_round"],[143,2,1,"","get_current_component_id"],[143,2,1,"","get_model"],[143,2,1,"","get_number_of_components_in_round"],[143,2,1,"","get_partial_cipher"],[143,2,1,"","get_round_from_component_id"],[143,2,1,"","get_sizes_of_components_by_type"],[143,3,1,"","id"],[143,2,1,"","impossible_differential_search"],[143,3,1,"","inputs"],[143,3,1,"","inputs_bit_size"],[143,2,1,"","inputs_size_to_dict"],[143,2,1,"","is_algebraically_secure"],[143,2,1,"","is_andrx"],[143,2,1,"","is_arx"],[143,2,1,"","is_power_of_2_word_based"],[143,2,1,"","is_shift_arx"],[143,2,1,"","is_spn"],[143,2,1,"","make_cipher_id"],[143,2,1,"","make_file_name"],[143,2,1,"","neural_network_blackbox_distinguisher_tests"],[143,2,1,"","neural_network_differential_distinguisher_tests"],[143,3,1,"","number_of_rounds"],[143,3,1,"","output_bit_size"],[143,2,1,"","polynomial_system"],[143,2,1,"","polynomial_system_at_round"],[143,2,1,"","print"],[143,2,1,"","print_as_python_dictionary"],[143,2,1,"","print_as_python_dictionary_to_file"],[143,2,1,"","print_component_analysis_as_radar_charts"],[143,2,1,"","print_evaluation_python_code"],[143,2,1,"","print_evaluation_python_code_to_file"],[143,2,1,"","print_input_information"],[143,3,1,"","reference_code"],[143,2,1,"","remove_key_schedule"],[143,2,1,"","remove_round_component"],[143,2,1,"","remove_round_component_from_id"],[143,3,1,"","rounds"],[143,3,1,"","rounds_as_list"],[143,2,1,"","run_autond_pipeline"],[143,2,1,"","set_file_name"],[143,2,1,"","set_id"],[143,2,1,"","set_inputs"],[143,2,1,"","sort_cipher"],[143,2,1,"","test_against_reference_code"],[143,2,1,"","test_vector_check"],[143,2,1,"","train_gohr_neural_distinguisher"],[143,2,1,"","train_neural_distinguisher"],[143,3,1,"","type"],[143,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.chacha_stream_cipher":[[144,1,1,"","ChachaStreamCipher"],[144,4,1,"","init_state_plaintext"]],"ciphers.stream_ciphers.chacha_stream_cipher.ChachaStreamCipher":[[144,2,1,"","add_AND_component"],[144,2,1,"","add_FSR_component"],[144,2,1,"","add_MODADD_component"],[144,2,1,"","add_MODSUB_component"],[144,2,1,"","add_NOT_component"],[144,2,1,"","add_OR_component"],[144,2,1,"","add_SBOX_component"],[144,2,1,"","add_SHIFT_component"],[144,2,1,"","add_XOR_component"],[144,2,1,"","add_cipher_output_component"],[144,2,1,"","add_concatenate_component"],[144,2,1,"","add_constant_component"],[144,2,1,"","add_intermediate_output_component"],[144,2,1,"","add_linear_layer_component"],[144,2,1,"","add_mix_column_component"],[144,2,1,"","add_permutation_component"],[144,2,1,"","add_reverse_component"],[144,2,1,"","add_rotate_component"],[144,2,1,"","add_round"],[144,2,1,"","add_round_key_output_component"],[144,2,1,"","add_round_output_component"],[144,2,1,"","add_shift_rows_component"],[144,2,1,"","add_sigma_component"],[144,2,1,"","add_suffix_to_components"],[144,2,1,"","add_theta_keccak_component"],[144,2,1,"","add_theta_xoodoo_component"],[144,2,1,"","add_variable_rotate_component"],[144,2,1,"","add_variable_shift_component"],[144,2,1,"","add_word_permutation_component"],[144,2,1,"","algebraic_tests"],[144,2,1,"","analyze_cipher"],[144,2,1,"","as_python_dictionary"],[144,2,1,"","avalanche_probability_vectors"],[144,2,1,"","bottom_half_quarter_round"],[144,2,1,"","cipher_inverse"],[144,2,1,"","cipher_partial_inverse"],[144,2,1,"","component_analysis_tests"],[144,2,1,"","component_from"],[144,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[144,2,1,"","continuous_avalanche_factor"],[144,2,1,"","continuous_diffusion_factor"],[144,2,1,"","continuous_diffusion_tests"],[144,2,1,"","continuous_neutrality_measure_for_bit_j"],[144,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[144,2,1,"","convert_to_compound_xor_cipher"],[144,3,1,"","current_round"],[144,3,1,"","current_round_number"],[144,3,1,"","current_round_number_of_components"],[144,2,1,"","delete_generated_evaluate_c_shared_library"],[144,2,1,"","diffusion_tests"],[144,2,1,"","evaluate"],[144,2,1,"","evaluate_using_c"],[144,2,1,"","evaluate_vectorized"],[144,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[144,3,1,"","family_name"],[144,3,1,"","file_name"],[144,2,1,"","find_good_input_difference_for_neural_distinguisher"],[144,2,1,"","find_impossible_property"],[144,2,1,"","generate_bit_based_c_code"],[144,2,1,"","generate_csv_report"],[144,2,1,"","generate_evaluate_c_code_shared_library"],[144,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[144,2,1,"","generate_word_based_c_code"],[144,2,1,"","get_all_components"],[144,2,1,"","get_all_components_ids"],[144,2,1,"","get_all_inputs_bit_positions"],[144,2,1,"","get_component_from_id"],[144,2,1,"","get_components_in_round"],[144,2,1,"","get_current_component_id"],[144,2,1,"","get_model"],[144,2,1,"","get_number_of_components_in_round"],[144,2,1,"","get_partial_cipher"],[144,2,1,"","get_round_from_component_id"],[144,2,1,"","get_sizes_of_components_by_type"],[144,3,1,"","id"],[144,2,1,"","impossible_differential_search"],[144,3,1,"","inputs"],[144,3,1,"","inputs_bit_size"],[144,2,1,"","inputs_size_to_dict"],[144,2,1,"","is_algebraically_secure"],[144,2,1,"","is_andrx"],[144,2,1,"","is_arx"],[144,2,1,"","is_power_of_2_word_based"],[144,2,1,"","is_shift_arx"],[144,2,1,"","is_spn"],[144,2,1,"","make_cipher_id"],[144,2,1,"","make_file_name"],[144,2,1,"","neural_network_blackbox_distinguisher_tests"],[144,2,1,"","neural_network_differential_distinguisher_tests"],[144,3,1,"","number_of_rounds"],[144,3,1,"","output_bit_size"],[144,2,1,"","polynomial_system"],[144,2,1,"","polynomial_system_at_round"],[144,2,1,"","print"],[144,2,1,"","print_as_python_dictionary"],[144,2,1,"","print_as_python_dictionary_to_file"],[144,2,1,"","print_component_analysis_as_radar_charts"],[144,2,1,"","print_evaluation_python_code"],[144,2,1,"","print_evaluation_python_code_to_file"],[144,2,1,"","print_input_information"],[144,3,1,"","reference_code"],[144,2,1,"","remove_key_schedule"],[144,2,1,"","remove_round_component"],[144,2,1,"","remove_round_component_from_id"],[144,3,1,"","rounds"],[144,3,1,"","rounds_as_list"],[144,2,1,"","run_autond_pipeline"],[144,2,1,"","set_file_name"],[144,2,1,"","set_id"],[144,2,1,"","set_inputs"],[144,2,1,"","sort_cipher"],[144,2,1,"","test_against_reference_code"],[144,2,1,"","test_vector_check"],[144,2,1,"","top_half_quarter_round"],[144,2,1,"","train_gohr_neural_distinguisher"],[144,2,1,"","train_neural_distinguisher"],[144,3,1,"","type"],[144,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.snow3g_stream_cipher":[[145,1,1,"","Snow3GStreamCipher"]],"ciphers.stream_ciphers.snow3g_stream_cipher.Snow3GStreamCipher":[[145,2,1,"","DIValpha"],[145,2,1,"","MULalpha"],[145,2,1,"","MULx"],[145,2,1,"","MULxPOW"],[145,2,1,"","S1"],[145,2,1,"","S2"],[145,2,1,"","add_AND_component"],[145,2,1,"","add_FSR_component"],[145,2,1,"","add_MODADD_component"],[145,2,1,"","add_MODSUB_component"],[145,2,1,"","add_NOT_component"],[145,2,1,"","add_OR_component"],[145,2,1,"","add_SBOX_component"],[145,2,1,"","add_SHIFT_component"],[145,2,1,"","add_XOR_component"],[145,2,1,"","add_cipher_output_component"],[145,2,1,"","add_concatenate_component"],[145,2,1,"","add_constant_component"],[145,2,1,"","add_intermediate_output_component"],[145,2,1,"","add_linear_layer_component"],[145,2,1,"","add_mix_column_component"],[145,2,1,"","add_permutation_component"],[145,2,1,"","add_reverse_component"],[145,2,1,"","add_rotate_component"],[145,2,1,"","add_round"],[145,2,1,"","add_round_key_output_component"],[145,2,1,"","add_round_output_component"],[145,2,1,"","add_shift_rows_component"],[145,2,1,"","add_sigma_component"],[145,2,1,"","add_suffix_to_components"],[145,2,1,"","add_theta_keccak_component"],[145,2,1,"","add_theta_xoodoo_component"],[145,2,1,"","add_variable_rotate_component"],[145,2,1,"","add_variable_shift_component"],[145,2,1,"","add_word_permutation_component"],[145,2,1,"","algebraic_tests"],[145,2,1,"","analyze_cipher"],[145,2,1,"","as_python_dictionary"],[145,2,1,"","avalanche_probability_vectors"],[145,2,1,"","cipher_inverse"],[145,2,1,"","cipher_partial_inverse"],[145,2,1,"","clock_fsm"],[145,2,1,"","clock_lfsr"],[145,2,1,"","clock_lfsr_initialization_mode"],[145,2,1,"","component_analysis_tests"],[145,2,1,"","component_from"],[145,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[145,2,1,"","continuous_avalanche_factor"],[145,2,1,"","continuous_diffusion_factor"],[145,2,1,"","continuous_diffusion_tests"],[145,2,1,"","continuous_neutrality_measure_for_bit_j"],[145,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[145,2,1,"","convert_to_compound_xor_cipher"],[145,2,1,"","create_alpha_state"],[145,3,1,"","current_round"],[145,3,1,"","current_round_number"],[145,3,1,"","current_round_number_of_components"],[145,2,1,"","delete_generated_evaluate_c_shared_library"],[145,2,1,"","diffusion_tests"],[145,2,1,"","evaluate"],[145,2,1,"","evaluate_using_c"],[145,2,1,"","evaluate_vectorized"],[145,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[145,3,1,"","family_name"],[145,3,1,"","file_name"],[145,2,1,"","find_good_input_difference_for_neural_distinguisher"],[145,2,1,"","find_impossible_property"],[145,2,1,"","generate_bit_based_c_code"],[145,2,1,"","generate_csv_report"],[145,2,1,"","generate_evaluate_c_code_shared_library"],[145,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[145,2,1,"","generate_word_based_c_code"],[145,2,1,"","get_all_components"],[145,2,1,"","get_all_components_ids"],[145,2,1,"","get_all_inputs_bit_positions"],[145,2,1,"","get_component_from_id"],[145,2,1,"","get_components_in_round"],[145,2,1,"","get_current_component_id"],[145,2,1,"","get_model"],[145,2,1,"","get_number_of_components_in_round"],[145,2,1,"","get_partial_cipher"],[145,2,1,"","get_round_from_component_id"],[145,2,1,"","get_sizes_of_components_by_type"],[145,3,1,"","id"],[145,2,1,"","impossible_differential_search"],[145,2,1,"","initial_filling_lfsr_fsm"],[145,3,1,"","inputs"],[145,3,1,"","inputs_bit_size"],[145,2,1,"","inputs_size_to_dict"],[145,2,1,"","is_algebraically_secure"],[145,2,1,"","is_andrx"],[145,2,1,"","is_arx"],[145,2,1,"","is_power_of_2_word_based"],[145,2,1,"","is_shift_arx"],[145,2,1,"","is_spn"],[145,2,1,"","make_cipher_id"],[145,2,1,"","make_file_name"],[145,2,1,"","neural_network_blackbox_distinguisher_tests"],[145,2,1,"","neural_network_differential_distinguisher_tests"],[145,3,1,"","number_of_rounds"],[145,3,1,"","output_bit_size"],[145,2,1,"","polynomial_system"],[145,2,1,"","polynomial_system_at_round"],[145,2,1,"","print"],[145,2,1,"","print_as_python_dictionary"],[145,2,1,"","print_as_python_dictionary_to_file"],[145,2,1,"","print_component_analysis_as_radar_charts"],[145,2,1,"","print_evaluation_python_code"],[145,2,1,"","print_evaluation_python_code_to_file"],[145,2,1,"","print_input_information"],[145,3,1,"","reference_code"],[145,2,1,"","remove_key_schedule"],[145,2,1,"","remove_round_component"],[145,2,1,"","remove_round_component_from_id"],[145,3,1,"","rounds"],[145,3,1,"","rounds_as_list"],[145,2,1,"","run_autond_pipeline"],[145,2,1,"","set_file_name"],[145,2,1,"","set_id"],[145,2,1,"","set_inputs"],[145,2,1,"","snow3g_key_stream"],[145,2,1,"","snow3g_state_initialization"],[145,2,1,"","sort_cipher"],[145,2,1,"","test_against_reference_code"],[145,2,1,"","test_vector_check"],[145,2,1,"","train_gohr_neural_distinguisher"],[145,2,1,"","train_neural_distinguisher"],[145,3,1,"","type"],[145,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.trivium_stream_cipher":[[146,1,1,"","TriviumStreamCipher"]],"ciphers.stream_ciphers.trivium_stream_cipher.TriviumStreamCipher":[[146,2,1,"","add_AND_component"],[146,2,1,"","add_FSR_component"],[146,2,1,"","add_MODADD_component"],[146,2,1,"","add_MODSUB_component"],[146,2,1,"","add_NOT_component"],[146,2,1,"","add_OR_component"],[146,2,1,"","add_SBOX_component"],[146,2,1,"","add_SHIFT_component"],[146,2,1,"","add_XOR_component"],[146,2,1,"","add_cipher_output_component"],[146,2,1,"","add_concatenate_component"],[146,2,1,"","add_constant_component"],[146,2,1,"","add_intermediate_output_component"],[146,2,1,"","add_linear_layer_component"],[146,2,1,"","add_mix_column_component"],[146,2,1,"","add_permutation_component"],[146,2,1,"","add_reverse_component"],[146,2,1,"","add_rotate_component"],[146,2,1,"","add_round"],[146,2,1,"","add_round_key_output_component"],[146,2,1,"","add_round_output_component"],[146,2,1,"","add_shift_rows_component"],[146,2,1,"","add_sigma_component"],[146,2,1,"","add_suffix_to_components"],[146,2,1,"","add_theta_keccak_component"],[146,2,1,"","add_theta_xoodoo_component"],[146,2,1,"","add_variable_rotate_component"],[146,2,1,"","add_variable_shift_component"],[146,2,1,"","add_word_permutation_component"],[146,2,1,"","algebraic_tests"],[146,2,1,"","analyze_cipher"],[146,2,1,"","as_python_dictionary"],[146,2,1,"","avalanche_probability_vectors"],[146,2,1,"","cipher_inverse"],[146,2,1,"","cipher_partial_inverse"],[146,2,1,"","component_analysis_tests"],[146,2,1,"","component_from"],[146,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[146,2,1,"","continuous_avalanche_factor"],[146,2,1,"","continuous_diffusion_factor"],[146,2,1,"","continuous_diffusion_tests"],[146,2,1,"","continuous_neutrality_measure_for_bit_j"],[146,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[146,2,1,"","convert_to_compound_xor_cipher"],[146,3,1,"","current_round"],[146,3,1,"","current_round_number"],[146,3,1,"","current_round_number_of_components"],[146,2,1,"","delete_generated_evaluate_c_shared_library"],[146,2,1,"","diffusion_tests"],[146,2,1,"","evaluate"],[146,2,1,"","evaluate_using_c"],[146,2,1,"","evaluate_vectorized"],[146,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[146,3,1,"","family_name"],[146,3,1,"","file_name"],[146,2,1,"","find_good_input_difference_for_neural_distinguisher"],[146,2,1,"","find_impossible_property"],[146,2,1,"","generate_bit_based_c_code"],[146,2,1,"","generate_csv_report"],[146,2,1,"","generate_evaluate_c_code_shared_library"],[146,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[146,2,1,"","generate_word_based_c_code"],[146,2,1,"","get_all_components"],[146,2,1,"","get_all_components_ids"],[146,2,1,"","get_all_inputs_bit_positions"],[146,2,1,"","get_component_from_id"],[146,2,1,"","get_components_in_round"],[146,2,1,"","get_current_component_id"],[146,2,1,"","get_keystream_bit_len"],[146,2,1,"","get_model"],[146,2,1,"","get_number_of_components_in_round"],[146,2,1,"","get_partial_cipher"],[146,2,1,"","get_round_from_component_id"],[146,2,1,"","get_sizes_of_components_by_type"],[146,3,1,"","id"],[146,2,1,"","impossible_differential_search"],[146,3,1,"","inputs"],[146,3,1,"","inputs_bit_size"],[146,2,1,"","inputs_size_to_dict"],[146,2,1,"","is_algebraically_secure"],[146,2,1,"","is_andrx"],[146,2,1,"","is_arx"],[146,2,1,"","is_power_of_2_word_based"],[146,2,1,"","is_shift_arx"],[146,2,1,"","is_spn"],[146,2,1,"","make_cipher_id"],[146,2,1,"","make_file_name"],[146,2,1,"","neural_network_blackbox_distinguisher_tests"],[146,2,1,"","neural_network_differential_distinguisher_tests"],[146,3,1,"","number_of_rounds"],[146,3,1,"","output_bit_size"],[146,2,1,"","polynomial_system"],[146,2,1,"","polynomial_system_at_round"],[146,2,1,"","print"],[146,2,1,"","print_as_python_dictionary"],[146,2,1,"","print_as_python_dictionary_to_file"],[146,2,1,"","print_component_analysis_as_radar_charts"],[146,2,1,"","print_evaluation_python_code"],[146,2,1,"","print_evaluation_python_code_to_file"],[146,2,1,"","print_input_information"],[146,3,1,"","reference_code"],[146,2,1,"","remove_key_schedule"],[146,2,1,"","remove_round_component"],[146,2,1,"","remove_round_component_from_id"],[146,3,1,"","rounds"],[146,3,1,"","rounds_as_list"],[146,2,1,"","run_autond_pipeline"],[146,2,1,"","set_file_name"],[146,2,1,"","set_id"],[146,2,1,"","set_inputs"],[146,2,1,"","sort_cipher"],[146,2,1,"","test_against_reference_code"],[146,2,1,"","test_vector_check"],[146,2,1,"","train_gohr_neural_distinguisher"],[146,2,1,"","train_neural_distinguisher"],[146,2,1,"","trivium_key_stream"],[146,2,1,"","trivium_state_initialization"],[146,3,1,"","type"],[146,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.zuc_stream_cipher":[[147,1,1,"","ZucStreamCipher"]],"ciphers.stream_ciphers.zuc_stream_cipher.ZucStreamCipher":[[147,2,1,"","add_AND_component"],[147,2,1,"","add_FSR_component"],[147,2,1,"","add_MODADD_component"],[147,2,1,"","add_MODSUB_component"],[147,2,1,"","add_NOT_component"],[147,2,1,"","add_OR_component"],[147,2,1,"","add_SBOX_component"],[147,2,1,"","add_SHIFT_component"],[147,2,1,"","add_XOR_component"],[147,2,1,"","add_cipher_output_component"],[147,2,1,"","add_concatenate_component"],[147,2,1,"","add_constant_component"],[147,2,1,"","add_intermediate_output_component"],[147,2,1,"","add_linear_layer_component"],[147,2,1,"","add_mix_column_component"],[147,2,1,"","add_permutation_component"],[147,2,1,"","add_reverse_component"],[147,2,1,"","add_rotate_component"],[147,2,1,"","add_round"],[147,2,1,"","add_round_key_output_component"],[147,2,1,"","add_round_output_component"],[147,2,1,"","add_shift_rows_component"],[147,2,1,"","add_sigma_component"],[147,2,1,"","add_suffix_to_components"],[147,2,1,"","add_theta_keccak_component"],[147,2,1,"","add_theta_xoodoo_component"],[147,2,1,"","add_variable_rotate_component"],[147,2,1,"","add_variable_shift_component"],[147,2,1,"","add_word_permutation_component"],[147,2,1,"","algebraic_tests"],[147,2,1,"","analyze_cipher"],[147,2,1,"","as_python_dictionary"],[147,2,1,"","avalanche_probability_vectors"],[147,2,1,"","cipher_inverse"],[147,2,1,"","cipher_partial_inverse"],[147,2,1,"","clocking_lfsr"],[147,2,1,"","component_analysis_tests"],[147,2,1,"","component_from"],[147,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[147,2,1,"","continuous_avalanche_factor"],[147,2,1,"","continuous_diffusion_factor"],[147,2,1,"","continuous_diffusion_tests"],[147,2,1,"","continuous_neutrality_measure_for_bit_j"],[147,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[147,2,1,"","convert_to_compound_xor_cipher"],[147,3,1,"","current_round"],[147,3,1,"","current_round_number"],[147,3,1,"","current_round_number_of_components"],[147,2,1,"","delete_generated_evaluate_c_shared_library"],[147,2,1,"","diffusion_tests"],[147,2,1,"","evaluate"],[147,2,1,"","evaluate_using_c"],[147,2,1,"","evaluate_vectorized"],[147,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[147,3,1,"","family_name"],[147,3,1,"","file_name"],[147,2,1,"","find_good_input_difference_for_neural_distinguisher"],[147,2,1,"","find_impossible_property"],[147,2,1,"","generate_bit_based_c_code"],[147,2,1,"","generate_csv_report"],[147,2,1,"","generate_evaluate_c_code_shared_library"],[147,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[147,2,1,"","generate_word_based_c_code"],[147,2,1,"","get_all_components"],[147,2,1,"","get_all_components_ids"],[147,2,1,"","get_all_inputs_bit_positions"],[147,2,1,"","get_component_from_id"],[147,2,1,"","get_components_in_round"],[147,2,1,"","get_current_component_id"],[147,2,1,"","get_model"],[147,2,1,"","get_number_of_components_in_round"],[147,2,1,"","get_partial_cipher"],[147,2,1,"","get_round_from_component_id"],[147,2,1,"","get_sizes_of_components_by_type"],[147,3,1,"","id"],[147,2,1,"","impossible_differential_search"],[147,3,1,"","inputs"],[147,3,1,"","inputs_bit_size"],[147,2,1,"","inputs_size_to_dict"],[147,2,1,"","is_algebraically_secure"],[147,2,1,"","is_andrx"],[147,2,1,"","is_arx"],[147,2,1,"","is_power_of_2_word_based"],[147,2,1,"","is_shift_arx"],[147,2,1,"","is_spn"],[147,2,1,"","key_loading_to_lfsr"],[147,2,1,"","key_stream"],[147,2,1,"","lfsr_S_high_16bits"],[147,2,1,"","lfsr_S_low_16bits"],[147,2,1,"","lfsr_with_initialization_mode"],[147,2,1,"","linear_layer_rotation"],[147,2,1,"","linear_transform_L1"],[147,2,1,"","linear_transform_L2"],[147,2,1,"","make_cipher_id"],[147,2,1,"","make_file_name"],[147,2,1,"","neural_network_blackbox_distinguisher_tests"],[147,2,1,"","neural_network_differential_distinguisher_tests"],[147,3,1,"","number_of_rounds"],[147,3,1,"","output_bit_size"],[147,2,1,"","polynomial_system"],[147,2,1,"","polynomial_system_at_round"],[147,2,1,"","print"],[147,2,1,"","print_as_python_dictionary"],[147,2,1,"","print_as_python_dictionary_to_file"],[147,2,1,"","print_component_analysis_as_radar_charts"],[147,2,1,"","print_evaluation_python_code"],[147,2,1,"","print_evaluation_python_code_to_file"],[147,2,1,"","print_input_information"],[147,3,1,"","reference_code"],[147,2,1,"","remove_key_schedule"],[147,2,1,"","remove_round_component"],[147,2,1,"","remove_round_component_from_id"],[147,3,1,"","rounds"],[147,3,1,"","rounds_as_list"],[147,2,1,"","run_autond_pipeline"],[147,2,1,"","s_box_layer"],[147,2,1,"","set_file_name"],[147,2,1,"","set_id"],[147,2,1,"","set_inputs"],[147,2,1,"","sort_cipher"],[147,2,1,"","state_initialization"],[147,2,1,"","test_against_reference_code"],[147,2,1,"","test_vector_check"],[147,2,1,"","train_gohr_neural_distinguisher"],[147,2,1,"","train_neural_distinguisher"],[147,3,1,"","type"],[147,2,1,"","zero_correlation_linear_search"],[147,2,1,"","zuc_nonlinear_F"]],"ciphers.toys":[[148,0,0,"-","toyspn1"],[149,0,0,"-","toyspn2"]],"ciphers.toys.toyspn1":[[148,1,1,"","ToySPN1"]],"ciphers.toys.toyspn1.ToySPN1":[[148,2,1,"","add_AND_component"],[148,2,1,"","add_FSR_component"],[148,2,1,"","add_MODADD_component"],[148,2,1,"","add_MODSUB_component"],[148,2,1,"","add_NOT_component"],[148,2,1,"","add_OR_component"],[148,2,1,"","add_SBOX_component"],[148,2,1,"","add_SHIFT_component"],[148,2,1,"","add_XOR_component"],[148,2,1,"","add_cipher_output_component"],[148,2,1,"","add_concatenate_component"],[148,2,1,"","add_constant_component"],[148,2,1,"","add_intermediate_output_component"],[148,2,1,"","add_linear_layer_component"],[148,2,1,"","add_mix_column_component"],[148,2,1,"","add_permutation_component"],[148,2,1,"","add_reverse_component"],[148,2,1,"","add_rotate_component"],[148,2,1,"","add_round"],[148,2,1,"","add_round_key_output_component"],[148,2,1,"","add_round_output_component"],[148,2,1,"","add_shift_rows_component"],[148,2,1,"","add_sigma_component"],[148,2,1,"","add_suffix_to_components"],[148,2,1,"","add_theta_keccak_component"],[148,2,1,"","add_theta_xoodoo_component"],[148,2,1,"","add_variable_rotate_component"],[148,2,1,"","add_variable_shift_component"],[148,2,1,"","add_word_permutation_component"],[148,2,1,"","algebraic_tests"],[148,2,1,"","analyze_cipher"],[148,2,1,"","as_python_dictionary"],[148,2,1,"","avalanche_probability_vectors"],[148,2,1,"","cipher_inverse"],[148,2,1,"","cipher_partial_inverse"],[148,2,1,"","component_analysis_tests"],[148,2,1,"","component_from"],[148,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[148,2,1,"","continuous_avalanche_factor"],[148,2,1,"","continuous_diffusion_factor"],[148,2,1,"","continuous_diffusion_tests"],[148,2,1,"","continuous_neutrality_measure_for_bit_j"],[148,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[148,2,1,"","convert_to_compound_xor_cipher"],[148,3,1,"","current_round"],[148,3,1,"","current_round_number"],[148,3,1,"","current_round_number_of_components"],[148,2,1,"","delete_generated_evaluate_c_shared_library"],[148,2,1,"","diffusion_tests"],[148,2,1,"","evaluate"],[148,2,1,"","evaluate_using_c"],[148,2,1,"","evaluate_vectorized"],[148,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[148,3,1,"","family_name"],[148,3,1,"","file_name"],[148,2,1,"","find_good_input_difference_for_neural_distinguisher"],[148,2,1,"","find_impossible_property"],[148,2,1,"","generate_bit_based_c_code"],[148,2,1,"","generate_csv_report"],[148,2,1,"","generate_evaluate_c_code_shared_library"],[148,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[148,2,1,"","generate_word_based_c_code"],[148,2,1,"","get_all_components"],[148,2,1,"","get_all_components_ids"],[148,2,1,"","get_all_inputs_bit_positions"],[148,2,1,"","get_component_from_id"],[148,2,1,"","get_components_in_round"],[148,2,1,"","get_current_component_id"],[148,2,1,"","get_model"],[148,2,1,"","get_number_of_components_in_round"],[148,2,1,"","get_partial_cipher"],[148,2,1,"","get_round_from_component_id"],[148,2,1,"","get_sizes_of_components_by_type"],[148,3,1,"","id"],[148,2,1,"","impossible_differential_search"],[148,3,1,"","inputs"],[148,3,1,"","inputs_bit_size"],[148,2,1,"","inputs_size_to_dict"],[148,2,1,"","is_algebraically_secure"],[148,2,1,"","is_andrx"],[148,2,1,"","is_arx"],[148,2,1,"","is_power_of_2_word_based"],[148,2,1,"","is_shift_arx"],[148,2,1,"","is_spn"],[148,2,1,"","make_cipher_id"],[148,2,1,"","make_file_name"],[148,2,1,"","neural_network_blackbox_distinguisher_tests"],[148,2,1,"","neural_network_differential_distinguisher_tests"],[148,3,1,"","number_of_rounds"],[148,3,1,"","output_bit_size"],[148,2,1,"","polynomial_system"],[148,2,1,"","polynomial_system_at_round"],[148,2,1,"","print"],[148,2,1,"","print_as_python_dictionary"],[148,2,1,"","print_as_python_dictionary_to_file"],[148,2,1,"","print_component_analysis_as_radar_charts"],[148,2,1,"","print_evaluation_python_code"],[148,2,1,"","print_evaluation_python_code_to_file"],[148,2,1,"","print_input_information"],[148,3,1,"","reference_code"],[148,2,1,"","remove_key_schedule"],[148,2,1,"","remove_round_component"],[148,2,1,"","remove_round_component_from_id"],[148,3,1,"","rounds"],[148,3,1,"","rounds_as_list"],[148,2,1,"","run_autond_pipeline"],[148,2,1,"","set_file_name"],[148,2,1,"","set_id"],[148,2,1,"","set_inputs"],[148,2,1,"","sort_cipher"],[148,2,1,"","test_against_reference_code"],[148,2,1,"","test_vector_check"],[148,2,1,"","train_gohr_neural_distinguisher"],[148,2,1,"","train_neural_distinguisher"],[148,3,1,"","type"],[148,2,1,"","zero_correlation_linear_search"]],"ciphers.toys.toyspn2":[[149,1,1,"","ToySPN2"]],"ciphers.toys.toyspn2.ToySPN2":[[149,2,1,"","add_AND_component"],[149,2,1,"","add_FSR_component"],[149,2,1,"","add_MODADD_component"],[149,2,1,"","add_MODSUB_component"],[149,2,1,"","add_NOT_component"],[149,2,1,"","add_OR_component"],[149,2,1,"","add_SBOX_component"],[149,2,1,"","add_SHIFT_component"],[149,2,1,"","add_XOR_component"],[149,2,1,"","add_cipher_output_component"],[149,2,1,"","add_concatenate_component"],[149,2,1,"","add_constant_component"],[149,2,1,"","add_intermediate_output_component"],[149,2,1,"","add_linear_layer_component"],[149,2,1,"","add_mix_column_component"],[149,2,1,"","add_permutation_component"],[149,2,1,"","add_reverse_component"],[149,2,1,"","add_rotate_component"],[149,2,1,"","add_round"],[149,2,1,"","add_round_key_output_component"],[149,2,1,"","add_round_output_component"],[149,2,1,"","add_shift_rows_component"],[149,2,1,"","add_sigma_component"],[149,2,1,"","add_suffix_to_components"],[149,2,1,"","add_theta_keccak_component"],[149,2,1,"","add_theta_xoodoo_component"],[149,2,1,"","add_variable_rotate_component"],[149,2,1,"","add_variable_shift_component"],[149,2,1,"","add_word_permutation_component"],[149,2,1,"","algebraic_tests"],[149,2,1,"","analyze_cipher"],[149,2,1,"","as_python_dictionary"],[149,2,1,"","avalanche_probability_vectors"],[149,2,1,"","cipher_inverse"],[149,2,1,"","cipher_partial_inverse"],[149,2,1,"","component_analysis_tests"],[149,2,1,"","component_from"],[149,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[149,2,1,"","continuous_avalanche_factor"],[149,2,1,"","continuous_diffusion_factor"],[149,2,1,"","continuous_diffusion_tests"],[149,2,1,"","continuous_neutrality_measure_for_bit_j"],[149,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[149,2,1,"","convert_to_compound_xor_cipher"],[149,3,1,"","current_round"],[149,3,1,"","current_round_number"],[149,3,1,"","current_round_number_of_components"],[149,2,1,"","delete_generated_evaluate_c_shared_library"],[149,2,1,"","diffusion_tests"],[149,2,1,"","evaluate"],[149,2,1,"","evaluate_using_c"],[149,2,1,"","evaluate_vectorized"],[149,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[149,3,1,"","family_name"],[149,3,1,"","file_name"],[149,2,1,"","find_good_input_difference_for_neural_distinguisher"],[149,2,1,"","find_impossible_property"],[149,2,1,"","generate_bit_based_c_code"],[149,2,1,"","generate_csv_report"],[149,2,1,"","generate_evaluate_c_code_shared_library"],[149,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[149,2,1,"","generate_word_based_c_code"],[149,2,1,"","get_all_components"],[149,2,1,"","get_all_components_ids"],[149,2,1,"","get_all_inputs_bit_positions"],[149,2,1,"","get_component_from_id"],[149,2,1,"","get_components_in_round"],[149,2,1,"","get_current_component_id"],[149,2,1,"","get_model"],[149,2,1,"","get_number_of_components_in_round"],[149,2,1,"","get_partial_cipher"],[149,2,1,"","get_round_from_component_id"],[149,2,1,"","get_sizes_of_components_by_type"],[149,3,1,"","id"],[149,2,1,"","impossible_differential_search"],[149,3,1,"","inputs"],[149,3,1,"","inputs_bit_size"],[149,2,1,"","inputs_size_to_dict"],[149,2,1,"","is_algebraically_secure"],[149,2,1,"","is_andrx"],[149,2,1,"","is_arx"],[149,2,1,"","is_power_of_2_word_based"],[149,2,1,"","is_shift_arx"],[149,2,1,"","is_spn"],[149,2,1,"","make_cipher_id"],[149,2,1,"","make_file_name"],[149,2,1,"","neural_network_blackbox_distinguisher_tests"],[149,2,1,"","neural_network_differential_distinguisher_tests"],[149,3,1,"","number_of_rounds"],[149,3,1,"","output_bit_size"],[149,2,1,"","polynomial_system"],[149,2,1,"","polynomial_system_at_round"],[149,2,1,"","print"],[149,2,1,"","print_as_python_dictionary"],[149,2,1,"","print_as_python_dictionary_to_file"],[149,2,1,"","print_component_analysis_as_radar_charts"],[149,2,1,"","print_evaluation_python_code"],[149,2,1,"","print_evaluation_python_code_to_file"],[149,2,1,"","print_input_information"],[149,3,1,"","reference_code"],[149,2,1,"","remove_key_schedule"],[149,2,1,"","remove_round_component"],[149,2,1,"","remove_round_component_from_id"],[149,3,1,"","rounds"],[149,3,1,"","rounds_as_list"],[149,2,1,"","run_autond_pipeline"],[149,2,1,"","set_file_name"],[149,2,1,"","set_id"],[149,2,1,"","set_inputs"],[149,2,1,"","sort_cipher"],[149,2,1,"","test_against_reference_code"],[149,2,1,"","test_vector_check"],[149,2,1,"","train_gohr_neural_distinguisher"],[149,2,1,"","train_neural_distinguisher"],[149,3,1,"","type"],[149,2,1,"","zero_correlation_linear_search"]],"component.Component":[[150,2,1,"","as_python_dictionary"],[150,2,1,"","check_output_size"],[150,3,1,"","description"],[150,2,1,"","get_graph_representation"],[150,3,1,"","id"],[150,3,1,"","input_bit_positions"],[150,3,1,"","input_bit_size"],[150,3,1,"","input_id_links"],[150,2,1,"","is_forbidden"],[150,2,1,"","is_id_equal_to"],[150,2,1,"","is_power_of_2_word_based"],[150,3,1,"","output_bit_size"],[150,2,1,"","output_size_for_concatenate"],[150,2,1,"","print"],[150,2,1,"","print_as_python_dictionary"],[150,2,1,"","print_values"],[150,2,1,"","print_word_values"],[150,2,1,"","select_bits"],[150,2,1,"","select_words"],[150,2,1,"","set_description"],[150,2,1,"","set_id"],[150,2,1,"","set_input_bit_positions"],[150,2,1,"","set_input_id_links"],[150,3,1,"","suffixes"],[150,3,1,"","type"]],"components.and_component":[[151,1,1,"","AND"],[151,4,1,"","cp_twoterms"],[151,4,1,"","cp_xor_differential_probability_ddt"],[151,4,1,"","cp_xor_linear_probability_lat"]],"components.and_component.AND":[[151,2,1,"","algebraic_polynomials"],[151,2,1,"","as_python_dictionary"],[151,2,1,"","check_output_size"],[151,2,1,"","cms_constraints"],[151,2,1,"","cms_xor_differential_propagation_constraints"],[151,2,1,"","cms_xor_linear_mask_propagation_constraints"],[151,2,1,"","cp_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[151,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_xor_differential_propagation_constraints"],[151,2,1,"","cp_xor_linear_mask_propagation_constraints"],[151,3,1,"","description"],[151,2,1,"","generic_sign_linear_constraints"],[151,2,1,"","get_bit_based_vectorized_python_code"],[151,2,1,"","get_byte_based_vectorized_python_code"],[151,2,1,"","get_graph_representation"],[151,2,1,"","get_word_operation_sign"],[151,3,1,"","id"],[151,3,1,"","input_bit_positions"],[151,3,1,"","input_bit_size"],[151,3,1,"","input_id_links"],[151,2,1,"","is_forbidden"],[151,2,1,"","is_id_equal_to"],[151,2,1,"","is_power_of_2_word_based"],[151,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[151,2,1,"","milp_xor_differential_propagation_constraints"],[151,2,1,"","milp_xor_linear_mask_propagation_constraints"],[151,3,1,"","output_bit_size"],[151,2,1,"","output_size_for_concatenate"],[151,2,1,"","print"],[151,2,1,"","print_as_python_dictionary"],[151,2,1,"","print_values"],[151,2,1,"","print_word_values"],[151,2,1,"","sat_constraints"],[151,2,1,"","sat_xor_differential_propagation_constraints"],[151,2,1,"","sat_xor_linear_mask_propagation_constraints"],[151,2,1,"","select_bits"],[151,2,1,"","select_words"],[151,2,1,"","set_description"],[151,2,1,"","set_id"],[151,2,1,"","set_input_bit_positions"],[151,2,1,"","set_input_id_links"],[151,2,1,"","smt_constraints"],[151,2,1,"","smt_xor_differential_propagation_constraints"],[151,2,1,"","smt_xor_linear_mask_propagation_constraints"],[151,3,1,"","suffixes"],[151,3,1,"","type"]],"components.cipher_output_component":[[152,1,1,"","CipherOutput"]],"components.cipher_output_component.CipherOutput":[[152,2,1,"","as_python_dictionary"],[152,2,1,"","check_output_size"],[152,2,1,"","cms_constraints"],[152,2,1,"","cms_xor_differential_propagation_constraints"],[152,2,1,"","cp_constraints"],[152,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","cp_xor_differential_propagation_constraints"],[152,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[152,2,1,"","cp_xor_linear_mask_propagation_constraints"],[152,3,1,"","description"],[152,2,1,"","get_bit_based_vectorized_python_code"],[152,2,1,"","get_byte_based_vectorized_python_code"],[152,2,1,"","get_graph_representation"],[152,3,1,"","id"],[152,3,1,"","input_bit_positions"],[152,3,1,"","input_bit_size"],[152,3,1,"","input_id_links"],[152,2,1,"","is_forbidden"],[152,2,1,"","is_id_equal_to"],[152,2,1,"","is_power_of_2_word_based"],[152,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_constraints"],[152,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_xor_differential_propagation_constraints"],[152,2,1,"","milp_xor_linear_mask_propagation_constraints"],[152,2,1,"","minizinc_constraints"],[152,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","minizinc_xor_differential_propagation_constraints"],[152,3,1,"","output_bit_size"],[152,2,1,"","output_size_for_concatenate"],[152,2,1,"","print"],[152,2,1,"","print_as_python_dictionary"],[152,2,1,"","print_values"],[152,2,1,"","print_word_values"],[152,2,1,"","sat_constraints"],[152,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","sat_xor_differential_propagation_constraints"],[152,2,1,"","sat_xor_linear_mask_propagation_constraints"],[152,2,1,"","select_bits"],[152,2,1,"","select_words"],[152,2,1,"","set_description"],[152,2,1,"","set_id"],[152,2,1,"","set_input_bit_positions"],[152,2,1,"","set_input_id_links"],[152,2,1,"","smt_constraints"],[152,2,1,"","smt_xor_differential_propagation_constraints"],[152,2,1,"","smt_xor_linear_mask_propagation_constraints"],[152,3,1,"","suffixes"],[152,3,1,"","type"]],"components.concatenate_component":[[153,1,1,"","Concatenate"]],"components.concatenate_component.Concatenate":[[153,2,1,"","as_python_dictionary"],[153,2,1,"","check_output_size"],[153,3,1,"","description"],[153,2,1,"","get_bit_based_c_code"],[153,2,1,"","get_bit_based_vectorized_python_code"],[153,2,1,"","get_byte_based_vectorized_python_code"],[153,2,1,"","get_graph_representation"],[153,2,1,"","get_word_based_c_code"],[153,3,1,"","id"],[153,3,1,"","input_bit_positions"],[153,3,1,"","input_bit_size"],[153,3,1,"","input_id_links"],[153,2,1,"","is_forbidden"],[153,2,1,"","is_id_equal_to"],[153,2,1,"","is_power_of_2_word_based"],[153,3,1,"","output_bit_size"],[153,2,1,"","output_size_for_concatenate"],[153,2,1,"","print"],[153,2,1,"","print_as_python_dictionary"],[153,2,1,"","print_values"],[153,2,1,"","print_word_values"],[153,2,1,"","select_bits"],[153,2,1,"","select_words"],[153,2,1,"","set_description"],[153,2,1,"","set_id"],[153,2,1,"","set_input_bit_positions"],[153,2,1,"","set_input_id_links"],[153,3,1,"","suffixes"],[153,3,1,"","type"]],"components.constant_component":[[154,1,1,"","Constant"],[154,4,1,"","constant_to_repr"]],"components.constant_component.Constant":[[154,2,1,"","algebraic_polynomials"],[154,2,1,"","as_python_dictionary"],[154,2,1,"","check_output_size"],[154,2,1,"","cms_constraints"],[154,2,1,"","cms_xor_differential_propagation_constraints"],[154,2,1,"","cms_xor_linear_mask_propagation_constraints"],[154,2,1,"","cp_constraints"],[154,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","cp_xor_differential_propagation_constraints"],[154,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[154,2,1,"","cp_xor_linear_mask_propagation_constraints"],[154,3,1,"","description"],[154,2,1,"","get_bit_based_c_code"],[154,2,1,"","get_bit_based_vectorized_python_code"],[154,2,1,"","get_byte_based_vectorized_python_code"],[154,2,1,"","get_graph_representation"],[154,2,1,"","get_word_based_c_code"],[154,3,1,"","id"],[154,3,1,"","input_bit_positions"],[154,3,1,"","input_bit_size"],[154,3,1,"","input_id_links"],[154,2,1,"","is_forbidden"],[154,2,1,"","is_id_equal_to"],[154,2,1,"","is_power_of_2_word_based"],[154,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_xor_differential_propagation_constraints"],[154,2,1,"","milp_xor_linear_mask_propagation_constraints"],[154,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","minizinc_xor_differential_propagation_constraints"],[154,3,1,"","output_bit_size"],[154,2,1,"","output_size_for_concatenate"],[154,2,1,"","print"],[154,2,1,"","print_as_python_dictionary"],[154,2,1,"","print_values"],[154,2,1,"","print_word_values"],[154,2,1,"","sat_constraints"],[154,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","sat_xor_differential_propagation_constraints"],[154,2,1,"","sat_xor_linear_mask_propagation_constraints"],[154,2,1,"","select_bits"],[154,2,1,"","select_words"],[154,2,1,"","set_description"],[154,2,1,"","set_id"],[154,2,1,"","set_input_bit_positions"],[154,2,1,"","set_input_id_links"],[154,2,1,"","smt_constraints"],[154,2,1,"","smt_xor_differential_propagation_constraints"],[154,2,1,"","smt_xor_linear_mask_propagation_constraints"],[154,3,1,"","suffixes"],[154,3,1,"","type"]],"components.fsr_component":[[155,1,1,"","FSR"]],"components.fsr_component.FSR":[[155,2,1,"","as_python_dictionary"],[155,2,1,"","check_output_size"],[155,3,1,"","description"],[155,2,1,"","get_graph_representation"],[155,3,1,"","id"],[155,3,1,"","input_bit_positions"],[155,3,1,"","input_bit_size"],[155,3,1,"","input_id_links"],[155,2,1,"","is_forbidden"],[155,2,1,"","is_id_equal_to"],[155,2,1,"","is_power_of_2_word_based"],[155,3,1,"","output_bit_size"],[155,2,1,"","output_size_for_concatenate"],[155,2,1,"","print"],[155,2,1,"","print_as_python_dictionary"],[155,2,1,"","print_values"],[155,2,1,"","print_word_values"],[155,2,1,"","select_bits"],[155,2,1,"","select_words"],[155,2,1,"","set_description"],[155,2,1,"","set_id"],[155,2,1,"","set_input_bit_positions"],[155,2,1,"","set_input_id_links"],[155,3,1,"","suffixes"],[155,3,1,"","type"]],"components.intermediate_output_component":[[156,1,1,"","IntermediateOutput"],[156,4,1,"","update_xor_linear_constraints_for_more_than_one_bit"]],"components.intermediate_output_component.IntermediateOutput":[[156,2,1,"","as_python_dictionary"],[156,2,1,"","check_output_size"],[156,2,1,"","cms_constraints"],[156,2,1,"","cms_xor_differential_propagation_constraints"],[156,2,1,"","cp_constraints"],[156,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","cp_xor_differential_propagation_constraints"],[156,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[156,2,1,"","cp_xor_linear_mask_propagation_constraints"],[156,3,1,"","description"],[156,2,1,"","get_bit_based_vectorized_python_code"],[156,2,1,"","get_byte_based_vectorized_python_code"],[156,2,1,"","get_graph_representation"],[156,3,1,"","id"],[156,3,1,"","input_bit_positions"],[156,3,1,"","input_bit_size"],[156,3,1,"","input_id_links"],[156,2,1,"","is_forbidden"],[156,2,1,"","is_id_equal_to"],[156,2,1,"","is_power_of_2_word_based"],[156,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_constraints"],[156,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_xor_differential_propagation_constraints"],[156,2,1,"","milp_xor_linear_mask_propagation_constraints"],[156,2,1,"","minizinc_constraints"],[156,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","minizinc_xor_differential_propagation_constraints"],[156,3,1,"","output_bit_size"],[156,2,1,"","output_size_for_concatenate"],[156,2,1,"","print"],[156,2,1,"","print_as_python_dictionary"],[156,2,1,"","print_values"],[156,2,1,"","print_word_values"],[156,2,1,"","sat_constraints"],[156,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","sat_xor_differential_propagation_constraints"],[156,2,1,"","sat_xor_linear_mask_propagation_constraints"],[156,2,1,"","select_bits"],[156,2,1,"","select_words"],[156,2,1,"","set_description"],[156,2,1,"","set_id"],[156,2,1,"","set_input_bit_positions"],[156,2,1,"","set_input_id_links"],[156,2,1,"","smt_constraints"],[156,2,1,"","smt_xor_differential_propagation_constraints"],[156,2,1,"","smt_xor_linear_mask_propagation_constraints"],[156,3,1,"","suffixes"],[156,3,1,"","type"]],"components.linear_layer_component":[[157,1,1,"","LinearLayer"],[157,4,1,"","update_constraints_for_more_than_one_bit"]],"components.linear_layer_component.LinearLayer":[[157,2,1,"","algebraic_polynomials"],[157,2,1,"","as_python_dictionary"],[157,2,1,"","check_output_size"],[157,2,1,"","cms_constraints"],[157,2,1,"","cms_xor_differential_propagation_constraints"],[157,2,1,"","cms_xor_linear_mask_propagation_constraints"],[157,2,1,"","cp_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[157,2,1,"","cp_xor_differential_propagation_constraints"],[157,2,1,"","cp_xor_linear_mask_propagation_constraints"],[157,3,1,"","description"],[157,2,1,"","get_bit_based_c_code"],[157,2,1,"","get_bit_based_vectorized_python_code"],[157,2,1,"","get_byte_based_vectorized_python_code"],[157,2,1,"","get_graph_representation"],[157,3,1,"","id"],[157,3,1,"","input_bit_positions"],[157,3,1,"","input_bit_size"],[157,3,1,"","input_id_links"],[157,2,1,"","is_forbidden"],[157,2,1,"","is_id_equal_to"],[157,2,1,"","is_power_of_2_word_based"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_constraints"],[157,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_xor_differential_propagation_constraints"],[157,2,1,"","milp_xor_linear_mask_propagation_constraints"],[157,3,1,"","output_bit_size"],[157,2,1,"","output_size_for_concatenate"],[157,2,1,"","print"],[157,2,1,"","print_as_python_dictionary"],[157,2,1,"","print_values"],[157,2,1,"","print_word_values"],[157,2,1,"","sat_constraints"],[157,2,1,"","sat_xor_differential_propagation_constraints"],[157,2,1,"","sat_xor_linear_mask_propagation_constraints"],[157,2,1,"","select_bits"],[157,2,1,"","select_words"],[157,2,1,"","set_description"],[157,2,1,"","set_id"],[157,2,1,"","set_input_bit_positions"],[157,2,1,"","set_input_id_links"],[157,2,1,"","smt_constraints"],[157,2,1,"","smt_xor_differential_propagation_constraints"],[157,2,1,"","smt_xor_linear_mask_propagation_constraints"],[157,3,1,"","suffixes"],[157,3,1,"","type"]],"components.mix_column_component":[[158,1,1,"","MixColumn"],[158,4,1,"","add_xor_components"],[158,4,1,"","calculate_input_bit_positions"],[158,4,1,"","cp_get_all_inputs"]],"components.mix_column_component.MixColumn":[[158,2,1,"","algebraic_polynomials"],[158,2,1,"","as_python_dictionary"],[158,2,1,"","check_output_size"],[158,2,1,"","cms_constraints"],[158,2,1,"","cms_xor_differential_propagation_constraints"],[158,2,1,"","cms_xor_linear_mask_propagation_constraints"],[158,2,1,"","cp_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[158,2,1,"","cp_xor_differential_propagation_constraints"],[158,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[158,2,1,"","cp_xor_linear_mask_propagation_constraints"],[158,3,1,"","description"],[158,2,1,"","get_bit_based_c_code"],[158,2,1,"","get_bit_based_vectorized_python_code"],[158,2,1,"","get_byte_based_vectorized_python_code"],[158,2,1,"","get_graph_representation"],[158,3,1,"","id"],[158,3,1,"","input_bit_positions"],[158,3,1,"","input_bit_size"],[158,3,1,"","input_id_links"],[158,2,1,"","is_forbidden"],[158,2,1,"","is_id_equal_to"],[158,2,1,"","is_power_of_2_word_based"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_constraints"],[158,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_xor_differential_propagation_constraints"],[158,2,1,"","milp_xor_linear_mask_propagation_constraints"],[158,3,1,"","output_bit_size"],[158,2,1,"","output_size_for_concatenate"],[158,2,1,"","print"],[158,2,1,"","print_as_python_dictionary"],[158,2,1,"","print_values"],[158,2,1,"","print_word_values"],[158,2,1,"","sat_constraints"],[158,2,1,"","sat_xor_differential_propagation_constraints"],[158,2,1,"","sat_xor_linear_mask_propagation_constraints"],[158,2,1,"","select_bits"],[158,2,1,"","select_words"],[158,2,1,"","set_description"],[158,2,1,"","set_id"],[158,2,1,"","set_input_bit_positions"],[158,2,1,"","set_input_id_links"],[158,2,1,"","smt_constraints"],[158,2,1,"","smt_xor_differential_propagation_constraints"],[158,2,1,"","smt_xor_linear_mask_propagation_constraints"],[158,3,1,"","suffixes"],[158,3,1,"","type"]],"components.modadd_component":[[159,1,1,"","MODADD"],[159,4,1,"","cms_modadd"],[159,4,1,"","cms_modadd_seq"],[159,4,1,"","cp_twoterms"],[159,4,1,"","sat_modadd"],[159,4,1,"","sat_modadd_seq"],[159,4,1,"","smt_modadd"],[159,4,1,"","smt_modadd_seq"]],"components.modadd_component.MODADD":[[159,2,1,"","algebraic_polynomials"],[159,2,1,"","as_python_dictionary"],[159,2,1,"","check_output_size"],[159,2,1,"","cms_constraints"],[159,2,1,"","cms_xor_differential_propagation_constraints"],[159,2,1,"","cms_xor_linear_mask_propagation_constraints"],[159,2,1,"","cp_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[159,2,1,"","cp_twoterms_xor_differential_probability"],[159,2,1,"","cp_xor_differential_propagation_constraints"],[159,2,1,"","cp_xor_linear_mask_propagation_constraints"],[159,3,1,"","description"],[159,2,1,"","get_bit_based_vectorized_python_code"],[159,2,1,"","get_byte_based_vectorized_python_code"],[159,2,1,"","get_graph_representation"],[159,2,1,"","get_word_operation_sign"],[159,3,1,"","id"],[159,3,1,"","input_bit_positions"],[159,3,1,"","input_bit_size"],[159,3,1,"","input_id_links"],[159,2,1,"","is_forbidden"],[159,2,1,"","is_id_equal_to"],[159,2,1,"","is_power_of_2_word_based"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","milp_xor_differential_propagation_constraints"],[159,2,1,"","milp_xor_linear_mask_propagation_constraints"],[159,2,1,"","minizinc_xor_differential_propagation_constraints"],[159,3,1,"","output_bit_size"],[159,2,1,"","output_size_for_concatenate"],[159,2,1,"","print"],[159,2,1,"","print_as_python_dictionary"],[159,2,1,"","print_values"],[159,2,1,"","print_word_values"],[159,2,1,"","sat_constraints"],[159,2,1,"","sat_xor_differential_propagation_constraints"],[159,2,1,"","sat_xor_linear_mask_propagation_constraints"],[159,2,1,"","select_bits"],[159,2,1,"","select_words"],[159,2,1,"","set_description"],[159,2,1,"","set_id"],[159,2,1,"","set_input_bit_positions"],[159,2,1,"","set_input_id_links"],[159,2,1,"","smt_constraints"],[159,2,1,"","smt_xor_differential_propagation_constraints"],[159,2,1,"","smt_xor_linear_mask_propagation_constraints"],[159,3,1,"","suffixes"],[159,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[159,3,1,"","type"]],"components.modsub_component":[[160,1,1,"","MODSUB"],[160,4,1,"","cp_twoterms"]],"components.modsub_component.MODSUB":[[160,2,1,"","as_python_dictionary"],[160,2,1,"","check_output_size"],[160,2,1,"","cms_constraints"],[160,2,1,"","cms_xor_differential_propagation_constraints"],[160,2,1,"","cms_xor_linear_mask_propagation_constraints"],[160,2,1,"","cp_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[160,2,1,"","cp_twoterms_xor_differential_probability"],[160,2,1,"","cp_xor_differential_propagation_constraints"],[160,2,1,"","cp_xor_linear_mask_propagation_constraints"],[160,3,1,"","description"],[160,2,1,"","get_bit_based_vectorized_python_code"],[160,2,1,"","get_byte_based_vectorized_python_code"],[160,2,1,"","get_graph_representation"],[160,2,1,"","get_word_operation_sign"],[160,3,1,"","id"],[160,3,1,"","input_bit_positions"],[160,3,1,"","input_bit_size"],[160,3,1,"","input_id_links"],[160,2,1,"","is_forbidden"],[160,2,1,"","is_id_equal_to"],[160,2,1,"","is_power_of_2_word_based"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","milp_xor_differential_propagation_constraints"],[160,2,1,"","milp_xor_linear_mask_propagation_constraints"],[160,2,1,"","minizinc_xor_differential_propagation_constraints"],[160,3,1,"","output_bit_size"],[160,2,1,"","output_size_for_concatenate"],[160,2,1,"","print"],[160,2,1,"","print_as_python_dictionary"],[160,2,1,"","print_values"],[160,2,1,"","print_word_values"],[160,2,1,"","sat_constraints"],[160,2,1,"","sat_xor_differential_propagation_constraints"],[160,2,1,"","sat_xor_linear_mask_propagation_constraints"],[160,2,1,"","select_bits"],[160,2,1,"","select_words"],[160,2,1,"","set_description"],[160,2,1,"","set_id"],[160,2,1,"","set_input_bit_positions"],[160,2,1,"","set_input_id_links"],[160,2,1,"","smt_constraints"],[160,2,1,"","smt_xor_differential_propagation_constraints"],[160,2,1,"","smt_xor_linear_mask_propagation_constraints"],[160,3,1,"","suffixes"],[160,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[160,3,1,"","type"]],"components.modular_component":[[161,1,1,"","Modular"],[161,4,1,"","generic_sign_linear_constraints"],[161,4,1,"","milp_n_window_heuristic"],[161,4,1,"","sat_n_window_heuristc_bit_level"]],"components.modular_component.Modular":[[161,2,1,"","as_python_dictionary"],[161,2,1,"","check_output_size"],[161,2,1,"","cms_xor_differential_propagation_constraints"],[161,2,1,"","cms_xor_linear_mask_propagation_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[161,2,1,"","cp_twoterms_xor_differential_probability"],[161,2,1,"","cp_xor_differential_propagation_constraints"],[161,2,1,"","cp_xor_linear_mask_propagation_constraints"],[161,3,1,"","description"],[161,2,1,"","get_graph_representation"],[161,2,1,"","get_word_operation_sign"],[161,3,1,"","id"],[161,3,1,"","input_bit_positions"],[161,3,1,"","input_bit_size"],[161,3,1,"","input_id_links"],[161,2,1,"","is_forbidden"],[161,2,1,"","is_id_equal_to"],[161,2,1,"","is_power_of_2_word_based"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","milp_xor_differential_propagation_constraints"],[161,2,1,"","milp_xor_linear_mask_propagation_constraints"],[161,2,1,"","minizinc_xor_differential_propagation_constraints"],[161,3,1,"","output_bit_size"],[161,2,1,"","output_size_for_concatenate"],[161,2,1,"","print"],[161,2,1,"","print_as_python_dictionary"],[161,2,1,"","print_values"],[161,2,1,"","print_word_values"],[161,2,1,"","sat_xor_differential_propagation_constraints"],[161,2,1,"","sat_xor_linear_mask_propagation_constraints"],[161,2,1,"","select_bits"],[161,2,1,"","select_words"],[161,2,1,"","set_description"],[161,2,1,"","set_id"],[161,2,1,"","set_input_bit_positions"],[161,2,1,"","set_input_id_links"],[161,2,1,"","smt_xor_differential_propagation_constraints"],[161,2,1,"","smt_xor_linear_mask_propagation_constraints"],[161,3,1,"","suffixes"],[161,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[161,3,1,"","type"]],"components.multi_input_non_linear_logical_operator_component":[[162,1,1,"","MultiInputNonlinearLogicalOperator"]],"components.multi_input_non_linear_logical_operator_component.MultiInputNonlinearLogicalOperator":[[162,2,1,"","as_python_dictionary"],[162,2,1,"","check_output_size"],[162,2,1,"","cms_constraints"],[162,2,1,"","cms_xor_differential_propagation_constraints"],[162,2,1,"","cms_xor_linear_mask_propagation_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[162,2,1,"","cp_xor_differential_propagation_constraints"],[162,3,1,"","description"],[162,2,1,"","generic_sign_linear_constraints"],[162,2,1,"","get_graph_representation"],[162,2,1,"","get_word_operation_sign"],[162,3,1,"","id"],[162,3,1,"","input_bit_positions"],[162,3,1,"","input_bit_size"],[162,3,1,"","input_id_links"],[162,2,1,"","is_forbidden"],[162,2,1,"","is_id_equal_to"],[162,2,1,"","is_power_of_2_word_based"],[162,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[162,2,1,"","milp_xor_differential_propagation_constraints"],[162,2,1,"","milp_xor_linear_mask_propagation_constraints"],[162,3,1,"","output_bit_size"],[162,2,1,"","output_size_for_concatenate"],[162,2,1,"","print"],[162,2,1,"","print_as_python_dictionary"],[162,2,1,"","print_values"],[162,2,1,"","print_word_values"],[162,2,1,"","sat_constraints"],[162,2,1,"","sat_xor_differential_propagation_constraints"],[162,2,1,"","sat_xor_linear_mask_propagation_constraints"],[162,2,1,"","select_bits"],[162,2,1,"","select_words"],[162,2,1,"","set_description"],[162,2,1,"","set_id"],[162,2,1,"","set_input_bit_positions"],[162,2,1,"","set_input_id_links"],[162,2,1,"","smt_xor_differential_propagation_constraints"],[162,2,1,"","smt_xor_linear_mask_propagation_constraints"],[162,3,1,"","suffixes"],[162,3,1,"","type"]],"components.not_component":[[163,1,1,"","NOT"]],"components.not_component.NOT":[[163,2,1,"","algebraic_polynomials"],[163,2,1,"","as_python_dictionary"],[163,2,1,"","check_output_size"],[163,2,1,"","cms_constraints"],[163,2,1,"","cms_xor_differential_propagation_constraints"],[163,2,1,"","cms_xor_linear_mask_propagation_constraints"],[163,2,1,"","cp_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[163,2,1,"","cp_xor_differential_first_step_constraints"],[163,2,1,"","cp_xor_differential_propagation_constraints"],[163,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[163,2,1,"","cp_xor_linear_mask_propagation_constraints"],[163,3,1,"","description"],[163,2,1,"","generic_sign_linear_constraints"],[163,2,1,"","get_bit_based_vectorized_python_code"],[163,2,1,"","get_byte_based_vectorized_python_code"],[163,2,1,"","get_graph_representation"],[163,2,1,"","get_word_operation_sign"],[163,3,1,"","id"],[163,3,1,"","input_bit_positions"],[163,3,1,"","input_bit_size"],[163,3,1,"","input_id_links"],[163,2,1,"","is_forbidden"],[163,2,1,"","is_id_equal_to"],[163,2,1,"","is_power_of_2_word_based"],[163,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","milp_constraints"],[163,2,1,"","milp_xor_differential_propagation_constraints"],[163,2,1,"","milp_xor_linear_mask_propagation_constraints"],[163,3,1,"","output_bit_size"],[163,2,1,"","output_size_for_concatenate"],[163,2,1,"","print"],[163,2,1,"","print_as_python_dictionary"],[163,2,1,"","print_values"],[163,2,1,"","print_word_values"],[163,2,1,"","sat_constraints"],[163,2,1,"","sat_xor_differential_propagation_constraints"],[163,2,1,"","sat_xor_linear_mask_propagation_constraints"],[163,2,1,"","select_bits"],[163,2,1,"","select_words"],[163,2,1,"","set_description"],[163,2,1,"","set_id"],[163,2,1,"","set_input_bit_positions"],[163,2,1,"","set_input_id_links"],[163,2,1,"","smt_constraints"],[163,2,1,"","smt_xor_differential_propagation_constraints"],[163,2,1,"","smt_xor_linear_mask_propagation_constraints"],[163,3,1,"","suffixes"],[163,3,1,"","type"]],"components.or_component":[[164,1,1,"","OR"]],"components.or_component.OR":[[164,2,1,"","algebraic_polynomials"],[164,2,1,"","as_python_dictionary"],[164,2,1,"","check_output_size"],[164,2,1,"","cms_constraints"],[164,2,1,"","cms_xor_differential_propagation_constraints"],[164,2,1,"","cms_xor_linear_mask_propagation_constraints"],[164,2,1,"","cp_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[164,2,1,"","cp_xor_differential_propagation_constraints"],[164,2,1,"","cp_xor_linear_mask_propagation_constraints"],[164,3,1,"","description"],[164,2,1,"","generic_sign_linear_constraints"],[164,2,1,"","get_bit_based_vectorized_python_code"],[164,2,1,"","get_byte_based_vectorized_python_code"],[164,2,1,"","get_graph_representation"],[164,2,1,"","get_word_operation_sign"],[164,3,1,"","id"],[164,3,1,"","input_bit_positions"],[164,3,1,"","input_bit_size"],[164,3,1,"","input_id_links"],[164,2,1,"","is_forbidden"],[164,2,1,"","is_id_equal_to"],[164,2,1,"","is_power_of_2_word_based"],[164,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[164,2,1,"","milp_xor_differential_propagation_constraints"],[164,2,1,"","milp_xor_linear_mask_propagation_constraints"],[164,3,1,"","output_bit_size"],[164,2,1,"","output_size_for_concatenate"],[164,2,1,"","print"],[164,2,1,"","print_as_python_dictionary"],[164,2,1,"","print_values"],[164,2,1,"","print_word_values"],[164,2,1,"","sat_constraints"],[164,2,1,"","sat_xor_differential_propagation_constraints"],[164,2,1,"","sat_xor_linear_mask_propagation_constraints"],[164,2,1,"","select_bits"],[164,2,1,"","select_words"],[164,2,1,"","set_description"],[164,2,1,"","set_id"],[164,2,1,"","set_input_bit_positions"],[164,2,1,"","set_input_id_links"],[164,2,1,"","smt_constraints"],[164,2,1,"","smt_xor_differential_propagation_constraints"],[164,2,1,"","smt_xor_linear_mask_propagation_constraints"],[164,3,1,"","suffixes"],[164,3,1,"","type"]],"components.permutation_component":[[165,1,1,"","Permutation"]],"components.permutation_component.Permutation":[[165,2,1,"","algebraic_polynomials"],[165,2,1,"","as_python_dictionary"],[165,2,1,"","check_output_size"],[165,2,1,"","cms_constraints"],[165,2,1,"","cms_xor_differential_propagation_constraints"],[165,2,1,"","cms_xor_linear_mask_propagation_constraints"],[165,2,1,"","cp_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[165,2,1,"","cp_xor_differential_propagation_constraints"],[165,2,1,"","cp_xor_linear_mask_propagation_constraints"],[165,3,1,"","description"],[165,2,1,"","get_bit_based_c_code"],[165,2,1,"","get_bit_based_vectorized_python_code"],[165,2,1,"","get_byte_based_vectorized_python_code"],[165,2,1,"","get_graph_representation"],[165,3,1,"","id"],[165,3,1,"","input_bit_positions"],[165,3,1,"","input_bit_size"],[165,3,1,"","input_id_links"],[165,2,1,"","is_forbidden"],[165,2,1,"","is_id_equal_to"],[165,2,1,"","is_power_of_2_word_based"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_constraints"],[165,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_xor_differential_propagation_constraints"],[165,2,1,"","milp_xor_linear_mask_propagation_constraints"],[165,3,1,"","output_bit_size"],[165,2,1,"","output_size_for_concatenate"],[165,2,1,"","print"],[165,2,1,"","print_as_python_dictionary"],[165,2,1,"","print_values"],[165,2,1,"","print_word_values"],[165,2,1,"","sat_constraints"],[165,2,1,"","sat_xor_differential_propagation_constraints"],[165,2,1,"","sat_xor_linear_mask_propagation_constraints"],[165,2,1,"","select_bits"],[165,2,1,"","select_words"],[165,2,1,"","set_description"],[165,2,1,"","set_id"],[165,2,1,"","set_input_bit_positions"],[165,2,1,"","set_input_id_links"],[165,2,1,"","smt_constraints"],[165,2,1,"","smt_xor_differential_propagation_constraints"],[165,2,1,"","smt_xor_linear_mask_propagation_constraints"],[165,3,1,"","suffixes"],[165,3,1,"","type"]],"components.reverse_component":[[166,1,1,"","Reverse"]],"components.reverse_component.Reverse":[[166,2,1,"","algebraic_polynomials"],[166,2,1,"","as_python_dictionary"],[166,2,1,"","check_output_size"],[166,2,1,"","cms_constraints"],[166,2,1,"","cms_xor_differential_propagation_constraints"],[166,2,1,"","cms_xor_linear_mask_propagation_constraints"],[166,2,1,"","cp_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[166,2,1,"","cp_xor_differential_propagation_constraints"],[166,2,1,"","cp_xor_linear_mask_propagation_constraints"],[166,3,1,"","description"],[166,2,1,"","get_bit_based_c_code"],[166,2,1,"","get_bit_based_vectorized_python_code"],[166,2,1,"","get_byte_based_vectorized_python_code"],[166,2,1,"","get_graph_representation"],[166,3,1,"","id"],[166,3,1,"","input_bit_positions"],[166,3,1,"","input_bit_size"],[166,3,1,"","input_id_links"],[166,2,1,"","is_forbidden"],[166,2,1,"","is_id_equal_to"],[166,2,1,"","is_power_of_2_word_based"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_constraints"],[166,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_xor_differential_propagation_constraints"],[166,2,1,"","milp_xor_linear_mask_propagation_constraints"],[166,3,1,"","output_bit_size"],[166,2,1,"","output_size_for_concatenate"],[166,2,1,"","print"],[166,2,1,"","print_as_python_dictionary"],[166,2,1,"","print_values"],[166,2,1,"","print_word_values"],[166,2,1,"","sat_constraints"],[166,2,1,"","sat_xor_differential_propagation_constraints"],[166,2,1,"","sat_xor_linear_mask_propagation_constraints"],[166,2,1,"","select_bits"],[166,2,1,"","select_words"],[166,2,1,"","set_description"],[166,2,1,"","set_id"],[166,2,1,"","set_input_bit_positions"],[166,2,1,"","set_input_id_links"],[166,2,1,"","smt_constraints"],[166,2,1,"","smt_xor_differential_propagation_constraints"],[166,2,1,"","smt_xor_linear_mask_propagation_constraints"],[166,3,1,"","suffixes"],[166,3,1,"","type"]],"components.rotate_component":[[167,1,1,"","Rotate"]],"components.rotate_component.Rotate":[[167,2,1,"","algebraic_polynomials"],[167,2,1,"","as_python_dictionary"],[167,2,1,"","check_output_size"],[167,2,1,"","cms_constraints"],[167,2,1,"","cms_xor_differential_propagation_constraints"],[167,2,1,"","cms_xor_linear_mask_propagation_constraints"],[167,2,1,"","cp_constraints"],[167,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","cp_inverse_constraints"],[167,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","cp_xor_differential_first_step_constraints"],[167,2,1,"","cp_xor_differential_propagation_constraints"],[167,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[167,2,1,"","cp_xor_linear_mask_propagation_constraints"],[167,3,1,"","description"],[167,2,1,"","get_bit_based_vectorized_python_code"],[167,2,1,"","get_byte_based_vectorized_python_code"],[167,2,1,"","get_graph_representation"],[167,2,1,"","get_word_based_c_code"],[167,2,1,"","get_word_operation_sign"],[167,3,1,"","id"],[167,3,1,"","input_bit_positions"],[167,3,1,"","input_bit_size"],[167,3,1,"","input_id_links"],[167,2,1,"","is_forbidden"],[167,2,1,"","is_id_equal_to"],[167,2,1,"","is_power_of_2_word_based"],[167,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_constraints"],[167,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_xor_differential_propagation_constraints"],[167,2,1,"","milp_xor_linear_mask_propagation_constraints"],[167,2,1,"","minizinc_constraints"],[167,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","minizinc_xor_differential_propagation_constraints"],[167,3,1,"","output_bit_size"],[167,2,1,"","output_size_for_concatenate"],[167,2,1,"","print"],[167,2,1,"","print_as_python_dictionary"],[167,2,1,"","print_values"],[167,2,1,"","print_word_values"],[167,2,1,"","sat_constraints"],[167,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","sat_xor_differential_propagation_constraints"],[167,2,1,"","sat_xor_linear_mask_propagation_constraints"],[167,2,1,"","select_bits"],[167,2,1,"","select_words"],[167,2,1,"","set_description"],[167,2,1,"","set_id"],[167,2,1,"","set_input_bit_positions"],[167,2,1,"","set_input_id_links"],[167,2,1,"","smt_constraints"],[167,2,1,"","smt_xor_differential_propagation_constraints"],[167,2,1,"","smt_xor_linear_mask_propagation_constraints"],[167,3,1,"","suffixes"],[167,3,1,"","type"]],"components.sbox_component":[[168,1,1,"","SBOX"],[168,4,1,"","check_table_feasibility"],[168,4,1,"","cp_update_ddt_valid_probabilities"],[168,4,1,"","cp_update_lat_valid_probabilities"],[168,4,1,"","milp_large_xor_probability_constraint_for_inequality"],[168,4,1,"","sat_build_table_template"],[168,4,1,"","smt_build_table_template"],[168,4,1,"","smt_get_sbox_probability_constraints"]],"components.sbox_component.SBOX":[[168,2,1,"","algebraic_polynomials"],[168,2,1,"","as_python_dictionary"],[168,2,1,"","check_output_size"],[168,2,1,"","cms_constraints"],[168,2,1,"","cms_xor_differential_propagation_constraints"],[168,2,1,"","cms_xor_linear_mask_propagation_constraints"],[168,2,1,"","cp_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[168,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_xor_differential_first_step_constraints"],[168,2,1,"","cp_xor_differential_propagation_constraints"],[168,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[168,2,1,"","cp_xor_linear_mask_propagation_constraints"],[168,3,1,"","description"],[168,2,1,"","generate_sbox_sign_lat"],[168,2,1,"","get_bit_based_c_code"],[168,2,1,"","get_bit_based_vectorized_python_code"],[168,2,1,"","get_byte_based_vectorized_python_code"],[168,2,1,"","get_ddt_with_undisturbed_transitions"],[168,2,1,"","get_graph_representation"],[168,2,1,"","get_word_based_c_code"],[168,3,1,"","id"],[168,3,1,"","input_bit_positions"],[168,3,1,"","input_bit_size"],[168,3,1,"","input_id_links"],[168,2,1,"","is_forbidden"],[168,2,1,"","is_id_equal_to"],[168,2,1,"","is_power_of_2_word_based"],[168,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_large_xor_differential_probability_constraints"],[168,2,1,"","milp_large_xor_linear_probability_constraints"],[168,2,1,"","milp_small_xor_differential_probability_constraints"],[168,2,1,"","milp_small_xor_linear_probability_constraints"],[168,2,1,"","milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[168,2,1,"","milp_xor_differential_propagation_constraints"],[168,2,1,"","milp_xor_linear_mask_propagation_constraints"],[168,3,1,"","output_bit_size"],[168,2,1,"","output_size_for_concatenate"],[168,2,1,"","print"],[168,2,1,"","print_as_python_dictionary"],[168,2,1,"","print_values"],[168,2,1,"","print_word_values"],[168,2,1,"","sat_constraints"],[168,2,1,"","sat_xor_differential_propagation_constraints"],[168,2,1,"","sat_xor_linear_mask_propagation_constraints"],[168,2,1,"","select_bits"],[168,2,1,"","select_words"],[168,2,1,"","set_description"],[168,2,1,"","set_id"],[168,2,1,"","set_input_bit_positions"],[168,2,1,"","set_input_id_links"],[168,2,1,"","smt_constraints"],[168,2,1,"","smt_xor_differential_propagation_constraints"],[168,2,1,"","smt_xor_linear_mask_propagation_constraints"],[168,3,1,"","suffixes"],[168,3,1,"","type"]],"components.shift_component":[[169,1,1,"","SHIFT"]],"components.shift_component.SHIFT":[[169,2,1,"","algebraic_polynomials"],[169,2,1,"","as_python_dictionary"],[169,2,1,"","check_output_size"],[169,2,1,"","cms_constraints"],[169,2,1,"","cms_xor_differential_propagation_constraints"],[169,2,1,"","cms_xor_linear_mask_propagation_constraints"],[169,2,1,"","cp_constraints"],[169,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","cp_inverse_constraints"],[169,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","cp_xor_differential_first_step_constraints"],[169,2,1,"","cp_xor_differential_propagation_constraints"],[169,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[169,2,1,"","cp_xor_linear_mask_propagation_constraints"],[169,3,1,"","description"],[169,2,1,"","get_bit_based_vectorized_python_code"],[169,2,1,"","get_byte_based_vectorized_python_code"],[169,2,1,"","get_graph_representation"],[169,2,1,"","get_word_based_c_code"],[169,2,1,"","get_word_operation_sign"],[169,3,1,"","id"],[169,3,1,"","input_bit_positions"],[169,3,1,"","input_bit_size"],[169,3,1,"","input_id_links"],[169,2,1,"","is_forbidden"],[169,2,1,"","is_id_equal_to"],[169,2,1,"","is_power_of_2_word_based"],[169,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_constraints"],[169,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_xor_differential_propagation_constraints"],[169,2,1,"","milp_xor_linear_mask_propagation_constraints"],[169,2,1,"","minizinc_constraints"],[169,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","minizinc_xor_differential_propagation_constraints"],[169,3,1,"","output_bit_size"],[169,2,1,"","output_size_for_concatenate"],[169,2,1,"","print"],[169,2,1,"","print_as_python_dictionary"],[169,2,1,"","print_values"],[169,2,1,"","print_word_values"],[169,2,1,"","sat_constraints"],[169,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","sat_xor_differential_propagation_constraints"],[169,2,1,"","sat_xor_linear_mask_propagation_constraints"],[169,2,1,"","select_bits"],[169,2,1,"","select_words"],[169,2,1,"","set_description"],[169,2,1,"","set_id"],[169,2,1,"","set_input_bit_positions"],[169,2,1,"","set_input_id_links"],[169,2,1,"","smt_constraints"],[169,2,1,"","smt_xor_differential_propagation_constraints"],[169,2,1,"","smt_xor_linear_mask_propagation_constraints"],[169,3,1,"","suffixes"],[169,3,1,"","type"]],"components.shift_rows_component":[[170,1,1,"","ShiftRows"]],"components.shift_rows_component.ShiftRows":[[170,2,1,"","algebraic_polynomials"],[170,2,1,"","as_python_dictionary"],[170,2,1,"","check_output_size"],[170,2,1,"","cms_constraints"],[170,2,1,"","cms_xor_differential_propagation_constraints"],[170,2,1,"","cms_xor_linear_mask_propagation_constraints"],[170,2,1,"","cp_constraints"],[170,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","cp_inverse_constraints"],[170,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","cp_xor_differential_first_step_constraints"],[170,2,1,"","cp_xor_differential_propagation_constraints"],[170,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[170,2,1,"","cp_xor_linear_mask_propagation_constraints"],[170,3,1,"","description"],[170,2,1,"","get_bit_based_vectorized_python_code"],[170,2,1,"","get_byte_based_vectorized_python_code"],[170,2,1,"","get_graph_representation"],[170,2,1,"","get_word_based_c_code"],[170,2,1,"","get_word_operation_sign"],[170,3,1,"","id"],[170,3,1,"","input_bit_positions"],[170,3,1,"","input_bit_size"],[170,3,1,"","input_id_links"],[170,2,1,"","is_forbidden"],[170,2,1,"","is_id_equal_to"],[170,2,1,"","is_power_of_2_word_based"],[170,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_constraints"],[170,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_xor_differential_propagation_constraints"],[170,2,1,"","milp_xor_linear_mask_propagation_constraints"],[170,2,1,"","minizinc_constraints"],[170,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","minizinc_xor_differential_propagation_constraints"],[170,3,1,"","output_bit_size"],[170,2,1,"","output_size_for_concatenate"],[170,2,1,"","print"],[170,2,1,"","print_as_python_dictionary"],[170,2,1,"","print_values"],[170,2,1,"","print_word_values"],[170,2,1,"","sat_constraints"],[170,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","sat_xor_differential_propagation_constraints"],[170,2,1,"","sat_xor_linear_mask_propagation_constraints"],[170,2,1,"","select_bits"],[170,2,1,"","select_words"],[170,2,1,"","set_description"],[170,2,1,"","set_id"],[170,2,1,"","set_input_bit_positions"],[170,2,1,"","set_input_id_links"],[170,2,1,"","smt_constraints"],[170,2,1,"","smt_xor_differential_propagation_constraints"],[170,2,1,"","smt_xor_linear_mask_propagation_constraints"],[170,3,1,"","suffixes"],[170,3,1,"","type"]],"components.sigma_component":[[171,1,1,"","Sigma"]],"components.sigma_component.Sigma":[[171,2,1,"","algebraic_polynomials"],[171,2,1,"","as_python_dictionary"],[171,2,1,"","check_output_size"],[171,2,1,"","cms_constraints"],[171,2,1,"","cms_xor_differential_propagation_constraints"],[171,2,1,"","cms_xor_linear_mask_propagation_constraints"],[171,2,1,"","cp_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[171,2,1,"","cp_xor_differential_propagation_constraints"],[171,2,1,"","cp_xor_linear_mask_propagation_constraints"],[171,3,1,"","description"],[171,2,1,"","get_bit_based_c_code"],[171,2,1,"","get_bit_based_vectorized_python_code"],[171,2,1,"","get_byte_based_vectorized_python_code"],[171,2,1,"","get_graph_representation"],[171,3,1,"","id"],[171,3,1,"","input_bit_positions"],[171,3,1,"","input_bit_size"],[171,3,1,"","input_id_links"],[171,2,1,"","is_forbidden"],[171,2,1,"","is_id_equal_to"],[171,2,1,"","is_power_of_2_word_based"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_constraints"],[171,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_xor_differential_propagation_constraints"],[171,2,1,"","milp_xor_linear_mask_propagation_constraints"],[171,3,1,"","output_bit_size"],[171,2,1,"","output_size_for_concatenate"],[171,2,1,"","print"],[171,2,1,"","print_as_python_dictionary"],[171,2,1,"","print_values"],[171,2,1,"","print_word_values"],[171,2,1,"","sat_constraints"],[171,2,1,"","sat_xor_differential_propagation_constraints"],[171,2,1,"","sat_xor_linear_mask_propagation_constraints"],[171,2,1,"","select_bits"],[171,2,1,"","select_words"],[171,2,1,"","set_description"],[171,2,1,"","set_id"],[171,2,1,"","set_input_bit_positions"],[171,2,1,"","set_input_id_links"],[171,2,1,"","smt_constraints"],[171,2,1,"","smt_xor_differential_propagation_constraints"],[171,2,1,"","smt_xor_linear_mask_propagation_constraints"],[171,3,1,"","suffixes"],[171,3,1,"","type"]],"components.theta_keccak_component":[[172,1,1,"","ThetaKeccak"]],"components.theta_keccak_component.ThetaKeccak":[[172,2,1,"","algebraic_polynomials"],[172,2,1,"","as_python_dictionary"],[172,2,1,"","check_output_size"],[172,2,1,"","cms_constraints"],[172,2,1,"","cms_xor_differential_propagation_constraints"],[172,2,1,"","cms_xor_linear_mask_propagation_constraints"],[172,2,1,"","cp_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[172,2,1,"","cp_xor_differential_propagation_constraints"],[172,2,1,"","cp_xor_linear_mask_propagation_constraints"],[172,3,1,"","description"],[172,2,1,"","get_bit_based_c_code"],[172,2,1,"","get_bit_based_vectorized_python_code"],[172,2,1,"","get_byte_based_vectorized_python_code"],[172,2,1,"","get_graph_representation"],[172,3,1,"","id"],[172,3,1,"","input_bit_positions"],[172,3,1,"","input_bit_size"],[172,3,1,"","input_id_links"],[172,2,1,"","is_forbidden"],[172,2,1,"","is_id_equal_to"],[172,2,1,"","is_power_of_2_word_based"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_constraints"],[172,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_xor_differential_propagation_constraints"],[172,2,1,"","milp_xor_linear_mask_propagation_constraints"],[172,3,1,"","output_bit_size"],[172,2,1,"","output_size_for_concatenate"],[172,2,1,"","print"],[172,2,1,"","print_as_python_dictionary"],[172,2,1,"","print_values"],[172,2,1,"","print_word_values"],[172,2,1,"","sat_constraints"],[172,2,1,"","sat_xor_differential_propagation_constraints"],[172,2,1,"","sat_xor_linear_mask_propagation_constraints"],[172,2,1,"","select_bits"],[172,2,1,"","select_words"],[172,2,1,"","set_description"],[172,2,1,"","set_id"],[172,2,1,"","set_input_bit_positions"],[172,2,1,"","set_input_id_links"],[172,2,1,"","smt_constraints"],[172,2,1,"","smt_xor_differential_propagation_constraints"],[172,2,1,"","smt_xor_linear_mask_propagation_constraints"],[172,3,1,"","suffixes"],[172,3,1,"","type"]],"components.theta_xoodoo_component":[[173,1,1,"","ThetaXoodoo"]],"components.theta_xoodoo_component.ThetaXoodoo":[[173,2,1,"","algebraic_polynomials"],[173,2,1,"","as_python_dictionary"],[173,2,1,"","check_output_size"],[173,2,1,"","cms_constraints"],[173,2,1,"","cms_xor_differential_propagation_constraints"],[173,2,1,"","cms_xor_linear_mask_propagation_constraints"],[173,2,1,"","cp_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[173,2,1,"","cp_xor_differential_propagation_constraints"],[173,2,1,"","cp_xor_linear_mask_propagation_constraints"],[173,3,1,"","description"],[173,2,1,"","get_bit_based_c_code"],[173,2,1,"","get_bit_based_vectorized_python_code"],[173,2,1,"","get_byte_based_vectorized_python_code"],[173,2,1,"","get_graph_representation"],[173,3,1,"","id"],[173,3,1,"","input_bit_positions"],[173,3,1,"","input_bit_size"],[173,3,1,"","input_id_links"],[173,2,1,"","is_forbidden"],[173,2,1,"","is_id_equal_to"],[173,2,1,"","is_power_of_2_word_based"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_constraints"],[173,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_xor_differential_propagation_constraints"],[173,2,1,"","milp_xor_linear_mask_propagation_constraints"],[173,3,1,"","output_bit_size"],[173,2,1,"","output_size_for_concatenate"],[173,2,1,"","print"],[173,2,1,"","print_as_python_dictionary"],[173,2,1,"","print_values"],[173,2,1,"","print_word_values"],[173,2,1,"","sat_constraints"],[173,2,1,"","sat_xor_differential_propagation_constraints"],[173,2,1,"","sat_xor_linear_mask_propagation_constraints"],[173,2,1,"","select_bits"],[173,2,1,"","select_words"],[173,2,1,"","set_description"],[173,2,1,"","set_id"],[173,2,1,"","set_input_bit_positions"],[173,2,1,"","set_input_id_links"],[173,2,1,"","smt_constraints"],[173,2,1,"","smt_xor_differential_propagation_constraints"],[173,2,1,"","smt_xor_linear_mask_propagation_constraints"],[173,3,1,"","suffixes"],[173,3,1,"","type"]],"components.variable_rotate_component":[[174,1,1,"","VariableRotate"]],"components.variable_rotate_component.VariableRotate":[[174,2,1,"","as_python_dictionary"],[174,2,1,"","check_output_size"],[174,3,1,"","description"],[174,2,1,"","get_graph_representation"],[174,2,1,"","get_word_based_c_code"],[174,2,1,"","get_word_operation_sign"],[174,3,1,"","id"],[174,3,1,"","input_bit_positions"],[174,3,1,"","input_bit_size"],[174,3,1,"","input_id_links"],[174,2,1,"","is_forbidden"],[174,2,1,"","is_id_equal_to"],[174,2,1,"","is_power_of_2_word_based"],[174,3,1,"","output_bit_size"],[174,2,1,"","output_size_for_concatenate"],[174,2,1,"","print"],[174,2,1,"","print_as_python_dictionary"],[174,2,1,"","print_values"],[174,2,1,"","print_word_values"],[174,2,1,"","select_bits"],[174,2,1,"","select_words"],[174,2,1,"","set_description"],[174,2,1,"","set_id"],[174,2,1,"","set_input_bit_positions"],[174,2,1,"","set_input_id_links"],[174,3,1,"","suffixes"],[174,3,1,"","type"]],"components.variable_shift_component":[[175,1,1,"","VariableShift"]],"components.variable_shift_component.VariableShift":[[175,2,1,"","as_python_dictionary"],[175,2,1,"","check_output_size"],[175,2,1,"","cms_constraints"],[175,2,1,"","cp_constraints"],[175,3,1,"","description"],[175,2,1,"","get_bit_based_vectorized_python_code"],[175,2,1,"","get_byte_based_vectorized_python_code"],[175,2,1,"","get_graph_representation"],[175,2,1,"","get_word_based_c_code"],[175,2,1,"","get_word_operation_sign"],[175,3,1,"","id"],[175,3,1,"","input_bit_positions"],[175,3,1,"","input_bit_size"],[175,3,1,"","input_id_links"],[175,2,1,"","is_forbidden"],[175,2,1,"","is_id_equal_to"],[175,2,1,"","is_power_of_2_word_based"],[175,2,1,"","minizinc_xor_differential_propagation_constraints"],[175,3,1,"","output_bit_size"],[175,2,1,"","output_size_for_concatenate"],[175,2,1,"","print"],[175,2,1,"","print_as_python_dictionary"],[175,2,1,"","print_values"],[175,2,1,"","print_word_values"],[175,2,1,"","sat_constraints"],[175,2,1,"","select_bits"],[175,2,1,"","select_words"],[175,2,1,"","set_description"],[175,2,1,"","set_id"],[175,2,1,"","set_input_bit_positions"],[175,2,1,"","set_input_id_links"],[175,2,1,"","smt_constraints"],[175,3,1,"","suffixes"],[175,3,1,"","type"]],"components.word_permutation_component":[[176,1,1,"","WordPermutation"]],"components.word_permutation_component.WordPermutation":[[176,2,1,"","algebraic_polynomials"],[176,2,1,"","as_python_dictionary"],[176,2,1,"","check_output_size"],[176,2,1,"","cms_constraints"],[176,2,1,"","cms_xor_differential_propagation_constraints"],[176,2,1,"","cms_xor_linear_mask_propagation_constraints"],[176,2,1,"","cp_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[176,2,1,"","cp_xor_differential_propagation_constraints"],[176,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[176,2,1,"","cp_xor_linear_mask_propagation_constraints"],[176,3,1,"","description"],[176,2,1,"","get_bit_based_c_code"],[176,2,1,"","get_bit_based_vectorized_python_code"],[176,2,1,"","get_byte_based_vectorized_python_code"],[176,2,1,"","get_graph_representation"],[176,3,1,"","id"],[176,3,1,"","input_bit_positions"],[176,3,1,"","input_bit_size"],[176,3,1,"","input_id_links"],[176,2,1,"","is_forbidden"],[176,2,1,"","is_id_equal_to"],[176,2,1,"","is_power_of_2_word_based"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_constraints"],[176,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_xor_differential_propagation_constraints"],[176,2,1,"","milp_xor_linear_mask_propagation_constraints"],[176,3,1,"","output_bit_size"],[176,2,1,"","output_size_for_concatenate"],[176,2,1,"","print"],[176,2,1,"","print_as_python_dictionary"],[176,2,1,"","print_values"],[176,2,1,"","print_word_values"],[176,2,1,"","sat_constraints"],[176,2,1,"","sat_xor_differential_propagation_constraints"],[176,2,1,"","sat_xor_linear_mask_propagation_constraints"],[176,2,1,"","select_bits"],[176,2,1,"","select_words"],[176,2,1,"","set_description"],[176,2,1,"","set_id"],[176,2,1,"","set_input_bit_positions"],[176,2,1,"","set_input_id_links"],[176,2,1,"","smt_constraints"],[176,2,1,"","smt_xor_differential_propagation_constraints"],[176,2,1,"","smt_xor_linear_mask_propagation_constraints"],[176,3,1,"","suffixes"],[176,3,1,"","type"]],"components.xor_component":[[177,1,1,"","XOR"],[177,4,1,"","cp_build_truncated_table"],[177,4,1,"","generic_with_constant_sign_linear_constraints"],[177,4,1,"","get_milp_constraints_from_inequalities"],[177,4,1,"","get_transformed_xor_input_links_and_positions"]],"components.xor_component.XOR":[[177,2,1,"","algebraic_polynomials"],[177,2,1,"","as_python_dictionary"],[177,2,1,"","check_output_size"],[177,2,1,"","cms_constraints"],[177,2,1,"","cms_xor_differential_propagation_constraints"],[177,2,1,"","cms_xor_linear_mask_propagation_constraints"],[177,2,1,"","cp_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[177,2,1,"","cp_transform_xor_components_for_first_step"],[177,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_xor_differential_propagation_constraints"],[177,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[177,2,1,"","cp_xor_linear_mask_propagation_constraints"],[177,3,1,"","description"],[177,2,1,"","get_bit_based_vectorized_python_code"],[177,2,1,"","get_byte_based_vectorized_python_code"],[177,2,1,"","get_graph_representation"],[177,2,1,"","get_word_operation_sign"],[177,3,1,"","id"],[177,3,1,"","input_bit_positions"],[177,3,1,"","input_bit_size"],[177,3,1,"","input_id_links"],[177,2,1,"","is_forbidden"],[177,2,1,"","is_id_equal_to"],[177,2,1,"","is_power_of_2_word_based"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_sequential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[177,2,1,"","milp_xor_differential_propagation_constraints"],[177,2,1,"","milp_xor_linear_constraints"],[177,2,1,"","milp_xor_linear_mask_propagation_constraints"],[177,2,1,"","minizinc_constraints"],[177,2,1,"","minizinc_xor_differential_propagation_constraints"],[177,3,1,"","output_bit_size"],[177,2,1,"","output_size_for_concatenate"],[177,2,1,"","print"],[177,2,1,"","print_as_python_dictionary"],[177,2,1,"","print_values"],[177,2,1,"","print_word_values"],[177,2,1,"","sat_constraints"],[177,2,1,"","sat_xor_differential_propagation_constraints"],[177,2,1,"","sat_xor_linear_mask_propagation_constraints"],[177,2,1,"","select_bits"],[177,2,1,"","select_words"],[177,2,1,"","set_description"],[177,2,1,"","set_id"],[177,2,1,"","set_input_bit_positions"],[177,2,1,"","set_input_id_links"],[177,2,1,"","smt_constraints"],[177,2,1,"","smt_xor_differential_propagation_constraints"],[177,2,1,"","smt_xor_linear_mask_propagation_constraints"],[177,3,1,"","suffixes"],[177,3,1,"","type"]],"input.Input":[[181,3,1,"","bit_positions"],[181,3,1,"","bit_size"],[181,3,1,"","id_links"],[181,2,1,"","set_input_bit_positions"],[181,2,1,"","set_input_id_links"]],"round.Round":[[183,2,1,"","add_component"],[183,2,1,"","are_there_forbidden_components"],[183,2,1,"","component_from"],[183,3,1,"","components"],[183,2,1,"","get_component_from_id"],[183,2,1,"","get_components_ids"],[183,2,1,"","get_number_of_components"],[183,2,1,"","get_round_from_component_id"],[183,3,1,"","id"],[183,2,1,"","is_component_input"],[183,2,1,"","is_power_of_2_word_based"],[183,3,1,"","number_of_components"],[183,2,1,"","print_round"],[183,2,1,"","print_round_as_python_dictionary"],[183,2,1,"","remove_component"],[183,2,1,"","remove_component_from_id"],[183,2,1,"","round_as_python_dictionary"],[183,2,1,"","swap_components"]],"rounds.Rounds":[[184,2,1,"","add_component"],[184,2,1,"","add_round"],[184,2,1,"","are_there_not_forbidden_components"],[184,2,1,"","component_from"],[184,2,1,"","components_in_round"],[184,3,1,"","current_round"],[184,3,1,"","current_round_number"],[184,3,1,"","current_round_number_of_components"],[184,2,1,"","get_all_components"],[184,2,1,"","get_all_components_ids"],[184,2,1,"","get_component_from_id"],[184,2,1,"","get_round_from_component_id"],[184,2,1,"","is_power_of_2_word_based"],[184,2,1,"","number_of_components"],[184,3,1,"","number_of_rounds"],[184,2,1,"","print_rounds"],[184,2,1,"","print_rounds_as_python_dictionary"],[184,2,1,"","remove_round_component"],[184,2,1,"","remove_round_component_from_id"],[184,2,1,"","round_at"],[184,3,1,"","rounds"],[184,2,1,"","rounds_as_python_dictionary"]],"utils.integer":[[185,4,1,"","generate_bitmask"],[185,4,1,"","to_binary"]],"utils.integer_functions":[[186,4,1,"","bytearray_to_int"],[186,4,1,"","bytearray_to_wordlist"],[186,4,1,"","int_to_bytearray"],[186,4,1,"","int_to_wordlist"],[186,4,1,"","lor"],[186,4,1,"","ror"],[186,4,1,"","wordlist_to_bytearray"],[186,4,1,"","wordlist_to_int"]],"utils.sage_scripts":[[187,4,1,"","create_scenario_string"],[187,4,1,"","get_cipher"],[187,4,1,"","get_cipher_type"],[187,4,1,"","get_ciphers"],[187,4,1,"","load_parameters"],[187,4,1,"","make_cipher_id"]],"utils.sequence_operations":[[188,4,1,"","rotate_left"],[188,4,1,"","rotate_right"],[188,4,1,"","shift_left"],[188,4,1,"","shift_right"]],"utils.templates":[[189,1,1,"","Body"],[189,1,1,"","Builder"],[189,1,1,"","CSVBuilder"],[189,1,1,"","Footer"],[189,1,1,"","Header"],[189,1,1,"","LatexBuilder"],[189,1,1,"","Template"],[189,1,1,"","TemplateManager"]],"utils.templates.Body":[[189,5,1,"","content"]],"utils.templates.Builder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.CSVBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Footer":[[189,5,1,"","content"]],"utils.templates.Header":[[189,5,1,"","content"],[189,5,1,"","logo"]],"utils.templates.LatexBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Template":[[189,2,1,"","render_template"],[189,2,1,"","set_body"],[189,2,1,"","set_footer"],[189,2,1,"","set_header"]],"utils.templates.TemplateManager":[[189,2,1,"","get_template"],[189,2,1,"","set_builder"]],"utils.utils":[[190,4,1,"","aggregate_list_of_dictionary"],[190,4,1,"","bytes_positions_to_little_endian_for_32_bits"],[190,4,1,"","bytes_positions_to_little_endian_for_multiple_of_32"],[190,4,1,"","calculate_inputs"],[190,4,1,"","convert_2d_index_to_1d_index"],[190,4,1,"","create_new_state_for_calculation"],[190,4,1,"","extract_inputs"],[190,4,1,"","generate_sample_from_gf_2_n"],[190,4,1,"","get_2d_array_element_from_1d_array_index"],[190,4,1,"","get_ci"],[190,4,1,"","get_inputs_parameter"],[190,4,1,"","get_ith_word"],[190,4,1,"","get_k_th_bit"],[190,4,1,"","get_number_of_rounds_from"],[190,4,1,"","group_list_by_key"],[190,4,1,"","int_to_poly"],[190,4,1,"","layer_and_lane_initialization"],[190,4,1,"","merging_list_of_lists"],[190,4,1,"","point_pair"],[190,4,1,"","poly_to_int"],[190,4,1,"","pprint_dictionary"],[190,4,1,"","pprint_dictionary_to_file"],[190,4,1,"","set_2d_array_element_from_1d_array_index"],[190,4,1,"","sgn_function"],[190,4,1,"","signed_distance"],[190,4,1,"","simplify_inputs"]],cipher:[[0,1,1,"","Cipher"]],cipher_modules:[[1,0,0,"-","algebraic_tests"],[2,0,0,"-","avalanche_tests"],[3,0,0,"-","code_generator"],[4,0,0,"-","component_analysis_tests"],[5,0,0,"-","continuous_tests"],[6,0,0,"-","evaluator"],[8,0,0,"-","generic_functions"],[9,0,0,"-","generic_functions_continuous_diffusion_analysis"],[10,0,0,"-","generic_functions_vectorized_bit"],[11,0,0,"-","generic_functions_vectorized_byte"],[13,0,0,"-","graph_generator"],[14,0,0,"-","inverse_cipher"],[83,0,0,"-","tester"]],component:[[150,1,1,"","Component"],[150,4,1,"","check_size"],[150,4,1,"","free_input"],[150,4,1,"","linear_layer_to_binary_matrix"]],components:[[151,0,0,"-","and_component"],[152,0,0,"-","cipher_output_component"],[153,0,0,"-","concatenate_component"],[154,0,0,"-","constant_component"],[155,0,0,"-","fsr_component"],[156,0,0,"-","intermediate_output_component"],[157,0,0,"-","linear_layer_component"],[158,0,0,"-","mix_column_component"],[159,0,0,"-","modadd_component"],[160,0,0,"-","modsub_component"],[161,0,0,"-","modular_component"],[162,0,0,"-","multi_input_non_linear_logical_operator_component"],[163,0,0,"-","not_component"],[164,0,0,"-","or_component"],[165,0,0,"-","permutation_component"],[166,0,0,"-","reverse_component"],[167,0,0,"-","rotate_component"],[168,0,0,"-","sbox_component"],[169,0,0,"-","shift_component"],[170,0,0,"-","shift_rows_component"],[171,0,0,"-","sigma_component"],[172,0,0,"-","theta_keccak_component"],[173,0,0,"-","theta_xoodoo_component"],[174,0,0,"-","variable_rotate_component"],[175,0,0,"-","variable_shift_component"],[176,0,0,"-","word_permutation_component"],[177,0,0,"-","xor_component"]],compound_xor_differential_cipher:[[178,4,1,"","convert_to_compound_xor_cipher"],[178,4,1,"","create_xor_component"],[178,4,1,"","create_xor_component_inputs"],[178,4,1,"","get_component_pair"],[178,4,1,"","update_cipher_inputs"],[178,4,1,"","update_input_id_links"]],editor:[[179,4,1,"","add_AND_component"],[179,4,1,"","add_FSR_component"],[179,4,1,"","add_MODADD_component"],[179,4,1,"","add_MODSUB_component"],[179,4,1,"","add_NOT_component"],[179,4,1,"","add_OR_component"],[179,4,1,"","add_SBOX_component"],[179,4,1,"","add_SHIFT_component"],[179,4,1,"","add_XOR_component"],[179,4,1,"","add_cipher_output_component"],[179,4,1,"","add_component"],[179,4,1,"","add_concatenate_component"],[179,4,1,"","add_constant_component"],[179,4,1,"","add_intermediate_output_component"],[179,4,1,"","add_linear_layer_component"],[179,4,1,"","add_mix_column_component"],[179,4,1,"","add_permutation_component"],[179,4,1,"","add_reverse_component"],[179,4,1,"","add_rotate_component"],[179,4,1,"","add_round"],[179,4,1,"","add_round_key_output_component"],[179,4,1,"","add_round_output_component"],[179,4,1,"","add_shift_rows_component"],[179,4,1,"","add_sigma_component"],[179,4,1,"","add_theta_keccak_component"],[179,4,1,"","add_theta_xoodoo_component"],[179,4,1,"","add_variable_rotate_component"],[179,4,1,"","add_variable_shift_component"],[179,4,1,"","add_word_permutation_component"],[179,4,1,"","generate_expanded_links"],[179,4,1,"","get_final_input_positions"],[179,4,1,"","get_output_bit_size_from_id"],[179,4,1,"","get_unique_links_information"],[179,4,1,"","is_linear_layer_permutation"],[179,4,1,"","make_cipher_id"],[179,4,1,"","make_file_name"],[179,4,1,"","next_component_index_from"],[179,4,1,"","propagate_equivalences"],[179,4,1,"","propagate_permutations"],[179,4,1,"","propagate_rotations"],[179,4,1,"","remove_cipher_input_keys"],[179,4,1,"","remove_forbidden_parents"],[179,4,1,"","remove_key_schedule"],[179,4,1,"","remove_orphan_components"],[179,4,1,"","remove_permutations"],[179,4,1,"","remove_rotations"],[179,4,1,"","remove_round_component"],[179,4,1,"","remove_round_component_from_id"],[179,4,1,"","sort_cipher"],[179,4,1,"","update_cipher_inputs"],[179,4,1,"","update_component_inputs"],[179,4,1,"","update_inputs"]],input:[[181,1,1,"","Input"]],round:[[183,1,1,"","Round"]],rounds:[[184,1,1,"","Rounds"]],utils:[[185,0,0,"-","integer"],[186,0,0,"-","integer_functions"],[187,0,0,"-","sage_scripts"],[188,0,0,"-","sequence_operations"],[189,0,0,"-","templates"],[190,0,0,"-","utils"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:function","5":"py:attribute"},terms:{"0":[0,2,3,4,5,8,9,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,185,188,190],"000000":48,"000000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0000000000000000":21,"0000000000000000000000000000000000000000000000000000000000000000":21,"000101":48,"001":[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"0010":[8,179],"001010":48,"0011":179,"001111":48,"0013153553009033203":22,"002":[21,190],"002946615219116211":74,"003168344497680664":75,"004":9,"004874706268310547":[61,66],"005683183670043945":25,"00607341":182,"007165431976318359":22,"007994651794433594":25,"009123563766479492":25,"00975656509399414":25,"01":[0,2,9,21,62,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0100":8,"0100000000000000011102230245":9,"010001":48,"010079622268676758":[62,67],"0101":179,"010100":48,"010101":48,"0101100100":8,"011":95,"011011":48,"0111":8,"011111":48,"016":143,"019":33,"019376516342163086":[59,64],"02":[9,21],"030":182,"031":[51,168],"05":[0,2,9,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"054n":182,"06":75,"06306815147399902":77,"0734":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0890":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"09":[61,66,71,72,73,74,75],"09b84e4804496b9b7c480dc87768f1f62d05e72fe2f21f92458886012b28ff3173b58f3426fb662b6be4933769b0bcec048dd2bab27894fc1828ed16c027fd4e394391ed0d27d6a4a4e06dadc6b12f5cfd95713beec720a9bf693e22c0a1d79f976aa412161fa3c35577e9c9ce973eba173df71edc75a0038f8853e756dc0031eed3ce4ffbccdea2eb5b40280cc1c84132116ae838d5a09b0653d8376bca9c988c89ff979aa0f7a600c47f91965fd8560e70b393d39eb4706d73c25c4baa7089f27479ce687673fb":8,"0_27":182,"0b000":[86,148],"0b000001":[148,149],"0b000101":148,"0b001":[86,148],"0b001011":148,"0b0010110010000000000000":141,"0b010":[86,148,149],"0b010000":149,"0b010110":148,"0b010111":149,"0b011":[148,149],"0b011100":148,"0b011101":149,"0b011111":149,"0b100":148,"0b100000":149,"0b100010":148,"0b101":148,"0b101011":149,"0b110":148,"0b111":149,"0b111010":149,"0b111011":149,"0b1111":185,"0b111110":148,"0mb":25,"0s":[8,10,11],"0x0":[9,33,77],"0x00":9,"0x0000":77,"0x0000000000000000":99,"0x00000000000000000000":146,"0x00010203":101,"0x00200000":33,"0x01":[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x012345":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x01234567":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x0123456789abcdef":[87,88],"0x0123456789abcdeffedcba9876543210":99,"0x02":9,"0x03":9,"0x03805224":33,"0x04":9,"0x04f0c8e0efe316e609390a3d98e97f5acc53c199":113,"0x05":9,"0x06":9,"0x07":9,"0x08":9,"0x09":9,"0x0a":9,"0x0b":9,"0x0c":9,"0x0d":9,"0x0d8d2647a12b0d544989a6b03603b8b3c27e2c4e0be08671745366d1a8bc4d95":114,"0x0e":9,"0x0f":9,"0x0x0001020304050607":101,"0x1":9,"0x10":9,"0x11":9,"0x11111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1111111111111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1198636720bac54986d1ab5a494866c9":143,"0x12":9,"0x1234":77,"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":8,"0x12695bc9b7b7f8":88,"0x13":9,"0x133457799bbcdff1":87,"0x14":9,"0x15":9,"0x16":9,"0x17":9,"0x173":148,"0x18":9,"0x19":9,"0x1918111009080100":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1a":9,"0x1b":9,"0x1c":9,"0x1d":[9,149],"0x1e":9,"0x1f":9,"0x1fe":148,"0x1ff":148,"0x2":9,"0x20":9,"0x21":9,"0x22":9,"0x23":9,"0x23a8d72":101,"0x24":9,"0x25":9,"0x25ac1ea08e1ec131e0a1780f7a2a42bb":143,"0x26":9,"0x27":9,"0x28":9,"0x29":9,"0x2a":9,"0x2b":9,"0x2b5f25d6":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x2b7e151628aed2a6abf7158809cf4f3c":84,"0x2bd6459f82c5b300952c49104881ff48":145,"0x2c":9,"0x2cc660354929f2ca":99,"0x2d":9,"0x2e":9,"0x2f":9,"0x3":9,"0x30":9,"0x30d0e5ede563dee67884718977510a4c22661cf128d8f75af4a2708276014d83":142,"0x31":9,"0x32":9,"0x33":9,"0x34":9,"0x35":9,"0x36":9,"0x37":9,"0x38":9,"0x39":9,"0x3956fba8c05053e5a27040b8ab9a7545":112,"0x3a":9,"0x3ad77bb40d7a3660a89ecaf32466ef97":84,"0x3b":9,"0x3c":9,"0x3d":9,"0x3e":[9,148],"0x3f":[9,148,149],"0x4":9,"0x40":9,"0x400000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x41":9,"0x42":9,"0x43":9,"0x43686961726180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030":[113,114],"0x439d5298656eccc67de":85,"0x44":9,"0x45":9,"0x46":9,"0x47":9,"0x47a57eff5d6475a68916":85,"0x48":9,"0x48c4a2e691d5b3f7":141,"0x49":9,"0x4a":9,"0x4b":9,"0x4c":9,"0x4d":9,"0x4e":9,"0x4e2448a4c6f486bb16b6562c73b4020bf3043e3a731bce721ae1b303d97e6d4c7181eebdb6c57e277d0e34957114cbd6c797fc9d95d8b582d225292076d4eef5":115,"0x4f":9,"0x5":9,"0x50":9,"0x51":9,"0x514896226caa4f20":92,"0x5175656c2066657a20736768656d626f20636f70726520646176616e74692e8000000000000000000000000000000000000000000000000000000000000000f8":112,"0x52":9,"0x53":9,"0x534eaa582fe8151ab6e1855a728c093f4d68d757ed949b4cbe41b7c6b":141,"0x54":9,"0x55":9,"0x56":9,"0x57":9,"0x58":9,"0x59":9,"0x5a":9,"0x5b":9,"0x5c":9,"0x5d":9,"0x5e":9,"0x5f":9,"0x6":9,"0x60":9,"0x61":9,"0x61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018":115,"0x617078653320646e79622d326b206574":144,"0x62":9,"0x63":9,"0x64":9,"0x65":9,"0x6574694c":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x6574694d":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x657cfa07096398b":147,"0x66":9,"0x67":9,"0x67452301":185,"0x68":9,"0x69":9,"0x6a":9,"0x6b":9,"0x6bc1bee22e409f96e93d7e117393172a":84,"0x6c":[9,148],"0x6cb4561c40bf0a9705931cb6d408e7fa":108,"0x6d":9,"0x6e":9,"0x6f":9,"0x7":9,"0x70":9,"0x71":9,"0x72":9,"0x73":9,"0x74":9,"0x75":9,"0x76":9,"0x77":9,"0x78":9,"0x79":9,"0x7a":9,"0x7b":9,"0x7c":9,"0x7d":9,"0x7e":9,"0x7e5c3a18f6d4b2901eb852fc9630da74":99,"0x7f":9,"0x8":[8,9],"0x80":9,"0x81":9,"0x82":9,"0x83":9,"0x84":9,"0x85":9,"0x85e813540f0ab405":[87,88],"0x86":9,"0x87":9,"0x88":9,"0x89":9,"0x89abcd":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x89abcdef":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x8a":9,"0x8b":9,"0x8be":148,"0x8c":9,"0x8cd29cc32668b90ee2312924376f1b4":143,"0x8cdd0f3459fb721e798655298d5c1":85,"0x8d":9,"0x8e":9,"0x8f":9,"0x9":9,"0x90":9,"0x90afe91bb288544f2c32dc239b2635e6":108,"0x91":9,"0x92":9,"0x93":9,"0x94":9,"0x95":9,"0x96":9,"0x97":9,"0x98":9,"0x99":9,"0x9900aabbccddeeff1122334455667788":92,"0x9a":9,"0x9b":9,"0x9c":9,"0x9d":9,"0x9e":9,"0x9f":9,"0xa":9,"0xa0":9,"0xa1":9,"0xa2":9,"0xa3":9,"0xa4":9,"0xa5":9,"0xa6":9,"0xa7":9,"0xa8":9,"0xa86842f2":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xa9":9,"0xaa":9,"0xab":9,"0xab01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,179],"0xab02":179,"0xabcd":77,"0xabcdef01abcdef01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xabee97047ac31373":145,"0xac":9,"0xad":9,"0xad0":149,"0xae":9,"0xaf":9,"0xaffec7":[59,64,72],"0xb":[9,143,148],"0xb0":9,"0xb1":9,"0xb2":9,"0xb3":9,"0xb4":9,"0xb5":9,"0xb6":9,"0xb7":9,"0xb8":9,"0xb9":9,"0xba":9,"0xbb":9,"0xbc":9,"0xbd":9,"0xbe":9,"0xbf":9,"0xc":9,"0xc0":9,"0xc1":9,"0xc2":9,"0xc3":9,"0xc4":9,"0xc5":9,"0xc6":9,"0xc7":9,"0xc8":9,"0xc9":9,"0xca":9,"0xcb":9,"0xcc":9,"0xcd":9,"0xce":9,"0xcf":9,"0xd":[9,143],"0xd0":9,"0xd1":9,"0xd2":9,"0xd3":9,"0xd4":9,"0xd43bb7556ea32e46f2a282b7d45b4e0d57ff739d4dc92c1bd7fc01700cc8216f":108,"0xd5":9,"0xd6":9,"0xd7":9,"0xd8":9,"0xd9":9,"0xda":9,"0xdb":9,"0xdc":9,"0xdd":9,"0xde":9,"0xdebe55784f853606399af3f6f4b8d0a706963a91f2ba4c687baea16da074f3c3":142,"0xdf":9,"0xdf07fd641a9aa0d88a5e7472c4f993fe6a4cc06898e0f3b4e7159ef0854d97b3":146,"0xe":9,"0xe0":9,"0xe1":9,"0xe2":9,"0xe22f92fff8c245c49d10359a02f1e555":143,"0xe3":9,"0xe4":9,"0xe5":9,"0xe6":9,"0xe7":9,"0xe8":9,"0xe9":9,"0xea":9,"0xea024714ad5c4d84df1f9b251c0bf45f":145,"0xeb":9,"0xec":9,"0xed":9,"0xee":9,"0xef":9,"0xf":[0,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xf0":9,"0xf1":9,"0xf1258f7940e1dde784d5ccf933c0478ad598261ea65aa9eebd1547306f80494d8b284e056253d057ff97a42d7f8e6fd490fee5a0a44647c48c5bda0cd6192e76ad30a6f71b19059c30935ab7d08ffc64eb5aa93f2317d635a9a6e6260d71210381a57c16dbcf555f43b831cd0347c82601f22f1a11a5569f05e5635a21d9ae6164befef28cc970f2613670957bc46611b87c5a554fd00ecb8c3ee88a1ccf32c8940c7922ae3a26141841f924a2c509e416f53526e70465c275f644e97f30a13beaf1ff7b5ceca249":8,"0xf2":9,"0xf3":9,"0xf4":9,"0xf5":9,"0xf6":9,"0xf7":9,"0xf8":9,"0xf9":9,"0xfa":9,"0xfb":9,"0xfc":9,"0xfd":9,"0xfe":[9,148],"0xfe0":149,"0xfedcba0987654321":92,"0xff":[9,148],"0xffe":148,"0xffff":25,"0xffffffff":[0,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],"0xffffffffff":142,"0xffffffffff0000000000":142,"0xffffffffffffffffffff":142,"0xffffffffffffffffffffffffffffffff":147,"1":[0,3,4,8,9,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],"10":[0,3,4,5,8,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,51,54,61,66,74,79,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,177,179,182,190],"100":[0,5,22,25,26,27,28,29,30,31,32,33,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,190],"1000":[8,19,20,21,22,23,24,25],"10000":[0,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000":[],"1000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"10000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000000000000":190,"100010":48,"100111":48,"1007":[51,168,182],"101011":48,"101111":48,"1018":33,"10187196731567383":77,"1024":[110,175],"10407660024169345926":145,"1048576":175,"1058":182,"106":182,"107":182,"1073741824":175,"109":182,"10970":182,"11":[0,3,4,28,50,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"110":95,"1100":[8,22,25],"110011":48,"1101":8,"110111":48,"111":182,"111011":48,"1111":[8,179],"111111":48,"11111111011111111111111111111111":21,"111111111111111":82,"1111111111111110":21,"1111111111111111":21,"1112":182,"112":[],"113":182,"114":[],"115":[],"1152":146,"116":[],"117":[],"118":79,"119":[],"12":[0,3,4,25,28,30,31,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,162,164,165,166,171,172,173,179,190],"120":15,"1200":[22,25],"1229782938247303441":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"123735":182,"123745":182,"124":[79,182],"125":143,"127":[21,24,28],"128":[0,4,21,23,24,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,175,176],"129519094746312487908866675886161683828":144,"12pt":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"12th":182,"13":[0,3,4,25,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,164,165,166,171,172,173,179,182,190],"1300":[22,25],"131072":175,"132":[143,182],"1321":112,"13295412063598633":77,"134217728":175,"136":182,"14":[0,3,4,25,27,28,33,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,159,164,165,166,171,172,173,179,190],"1400":[22,25],"1411":[59,64],"146m":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"15":[0,3,4,21,23,24,25,50,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,157,158,159,160,161,164,165,166,167,170,171,172,173,176,177,179,190],"1500":[22,25],"156":79,"16":[0,3,4,22,24,25,28,30,31,32,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,157,158,159,160,161,164,165,166,168,169,171,172,173,175,176,177,179,190],"160":[124,131,132,133],"1600":[25,159,160,161,179],"161":182,"163":79,"16384":175,"167":182,"16777216":175,"17":[0,3,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,182,190],"173":182,"175":77,"177":[142,182],"178":79,"18":[0,3,22,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,169,170,171,172,173,176,179,190],"186":182,"188":[23,24],"19":[0,3,24,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,190],"19088743":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"191":28,"192":[28,94,99],"193":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"1962":182,"197":182,"19837307929992676":24,"1988":182,"1991":182,"1999":182,"1e":[],"1s":[8,10,11],"2":[0,3,4,8,9,10,11,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,188,190],"20":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,164,165,166,168,171,172,173,179,182,190],"200":[0,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"200000000000000":190,"2001":182,"2002":182,"2003":182,"2004":182,"2007":182,"2008":182,"2009":182,"2010":182,"2011":182,"2012":182,"2013":[182,190],"2014":[28,33,151,162,164,168,182],"2015":182,"2016":[28,33,159,160,161,182],"2017":182,"2018":182,"2019":[33,182],"202":125,"2020":[151,162,164,182],"2021":[151,162,164,182],"2022":143,"2023":182,"203":182,"2040":101,"2048":175,"206":182,"2097152":175,"21":[0,3,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,157,158,164,165,166,171,172,173,176,179,182,190],"213":[151,162,164,182],"2147483648":175,"218":182,"2190":182,"22":[0,3,27,28,29,32,33,56,57,58,59,60,61,62,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,157,159,160,161,164,165,166,171,172,173,177,179,190],"2202":182,"221":79,"222":182,"2222222222222220":21,"22222222222222202222222222222222":21,"2222222222222221":21,"22222222222222212222222222222220":21,"224":[24,114],"2256000000000004e":9,"228":[141,182],"229":141,"23":[0,3,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"237":79,"238":182,"239":77,"239000000000000":77,"24":[0,3,15,28,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,190],"240":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"243":168,"25":[0,3,23,24,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"252":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"255":[21,101],"2550":182,"256":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,175],"2564":182,"26":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"262144":175,"26553":[51,168],"268":182,"268435456":175,"27":[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,169,176,179,190],"274":182,"277":182,"28":[0,3,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,169,179,190],"281":182,"282":182,"286331153":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"288":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],"2887":182,"289":182,"29":[0,3,25,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,169,179,190],"290":[151,162,164],"294":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2948":182,"2_3":[51,168],"2_31":182,"2f3":182,"2f978":182,"2x1":[151,162,164],"3":[0,3,4,8,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,188,190],"30":[0,3,24,25,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,168,169,179,190],"300":[22,25],"304":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"305":182,"306":182,"31":[0,3,20,22,23,24,25,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,158,159,160,161,163,164,169,175,176,177,179,182,190],"3174":113,"319":182,"32":[0,3,9,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,163,164,167,168,169,170,175,177,179,185,190],"320":28,"32768":175,"32bit":180,"33":[79,179],"33554432":175,"34":[168,179],"35":[152,156,179],"3502917":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"353":182,"36":[169,179],"367":182,"37":[79,168,179],"38":179,"38103010":25,"384":[4,15,103,114,179],"39":[164,179],"3949999999999999938937733645":9,"39555":182,"3a2f087e74cd0f2a10853c8a5d036d85":50,"3rd":182,"4":[0,3,4,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,177,179,182,184,185,188,190],"40":[0,4,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179],"400":[22,25],"407":[33,159,160,161,182],"4096":175,"41":179,"41009196":54,"4194304":175,"42":179,"4294967295":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"43":179,"430":[159,160,161],"432":15,"44":[168,179],"4411":182,"44658816949":9,"45":179,"450":182,"45473":182,"46":[179,182],"466":182,"46706":182,"468":[15,32],"47":[28,79,179],"4727":182,"48":[21,27,28,143,177,179],"49":[179,182],"490":28,"5":[0,2,3,4,9,19,20,21,22,23,24,25,28,32,47,50,55,56,57,58,61,66,71,72,73,74,75,77,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,163,164,168,169,176,177,179,182,188,190],"50":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],"500":[22,25],"500000000000":77,"5049":182,"51":179,"512":[111,114,144,146,175],"52":[179,182],"520":182,"524288":175,"53":179,"536":182,"536870912":175,"54":179,"540":182,"55":[179,182],"56":179,"57":179,"58":179,"59":[79,179],"595000000000000004996003611":9,"5_26":182,"5th":182,"6":[0,3,4,9,22,24,25,27,28,32,33,48,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,182,190],"60":[168,179],"600":[22,25],"6069":[],"61":179,"62":179,"6234":114,"6263":182,"63":[21,22,25,28,163,164,169,177,179],"631":182,"632":[151,162,164],"64":[0,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,61,66,74,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,170,175,177,179,182],"640":[134,135,136,141],"641582411206367315":93,"65":[75,179],"65536":175,"66":179,"662":182,"67":[75,179],"67108864":175,"68":[157,158,165,166,171,172,173,176,179],"688":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"69":179,"6dc5":[],"7":[0,3,4,9,19,20,21,22,23,24,25,28,32,50,58,59,60,61,62,63,64,65,66,67,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,160,163,164,165,166,168,169,171,172,173,176,177,179,190],"70":[179,182],"700":[22,25],"708":142,"71":179,"72":[28,79,107,179],"73":[179,182],"7359":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"73728":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"74":179,"743":182,"7457252":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"747":[33,168],"74735":182,"7489726543426514":24,"75":179,"753":[19,20,21,22,23,24,25],"759":[46,168],"76":179,"760":182,"761":28,"77":179,"78":179,"79":179,"7_8":182,"8":[0,3,4,9,11,17,19,20,21,22,23,24,25,32,33,47,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,182,190],"80":[27,28,79,98,113,131,132,133,142,146,168,179,182],"800":[0,22,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"802999073954890452142763024312444031238555908203125":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"805":[46,168],"81":[168,182],"8128":[80,82],"8192":[80,82,175],"8294":[30,31,47,48,158,168,176],"83":77,"8388608":175,"850a9520":22,"85400194":[151,162,164],"86":182,"8702":[30,31,47,48,158,168,176],"8876":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"8ca8d5de0906f08":[59,60,61,62,63,64,65,66,67],"9":[0,3,4,19,20,21,22,23,24,25,28,33,50,58,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,167,170,171,172,173,176,179,182,190],"90":[79,182,190],"900":[22,25],"90fe":72,"91":[54,175],"9101":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"9101160168647766":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"93":[19,20,21,22,23,24,25,74,158,176],"95":175,"96":15,"973":[33,151,162,164],"978":[51,168,182],"98":190,"9834215":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"99":190,"993147134780884":24,"abstract":63,"alg\u00e9briqu":182,"bas\u00e9":182,"bj\u00f6rklund":182,"boolean":[0,3,4,8,9,10,11,17,21,46,50,55,56,57,58,76,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177,180,182],"byte":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,190],"case":[0,10,11,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],"class":[0,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,183,184,189,190],"default":[0,3,8,10,11,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,190],"do":[45,50,59,60,61,62,70],"enum":79,"faug\u00e8r":182,"final":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"float":[0,9,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"function":[0,14,17,46,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182,184,190],"gr\u00f6bner":182,"import":[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],"int":[0,4,19,20,21,22,23,24,25,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,164,168,175,176,177,182],"k\u00f6lbl":182,"long":[0,15,22,24,25,32,33,50,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,168,171,172,173],"new":[23,24,59,60,61,62,70,179,182,188],"probl\u00e8m":182,"public":182,"return":[0,3,4,10,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,185,188,190],"s\u00e9curit\u00e9":182,"static":[58,80,82],"stehl\u00e9":182,"true":[0,2,3,4,5,8,9,10,11,15,16,17,28,31,32,58,61,62,66,67,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],"try":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"universit\u00e9":182,"var":[20,21,22,23,24,25,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],"while":24,A:[0,4,10,11,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,182],AND:[4,8,10,11,76,151,162,164,179],ANDed:[10,11],And:[55,70,76,180,190],BY:175,Be:[63,82],By:[8,33,62,67,75,124,179],FOR:[151,157,165,166,171,172,173],For:[8,48,59,60,61,62,63,79,80,82,143,158,176,177,179],If:[0,8,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],In:[22,24,25,59,60,61,62,63,64,65,66,67,71,74,75,82,95,111,112,143,179,182],It:[0,33,46,51,70,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],NOT:[8,10,11,23,24,163,179],No:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],Not:[70,180],OR:[8,10,11,76,162,164,179],ORed:[10,11],On:182,One:[80,82],Or:[70,76,180],That:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],The:[0,4,8,10,11,13,22,24,26,32,33,45,46,50,51,54,58,59,60,61,62,63,66,67,71,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,179,182,190],There:[22,24,25,61,62,66,67,74,75],These:13,To:[0,33,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],With:55,_:[4,26,27,28,54,77,80,82,154,159,160,161,167,169,170,175,177],_activ:[167,168,170],_backward:[28,31],_backward_ciph:[28,31],_binary_vari:54,_cipher:[28,31,77],_evalu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_forward_ciph:[28,31],_get_input_output_vari:[27,28],_get_input_output_variables_tupl:[27,28],_input:9,_integer_vari:54,_k:96,_model:[26,27,28,29,30,31,32,33,54],_model_constraint:[27,28,30,31,32,33],_non_linear_component_id:168,_r:96,_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_round:[],_round_:[80,82],_sage:[59,60,61,62,63,64,65,66,67],_valu:[167,170],_variables_list:177,a51:141,a51streamciph:141,a5:180,a5_1_stream_ciph:141,a_0:54,a_1:54,a_7:70,a_:54,a_and_b:54,a_eq_b:54,a_geq_b:54,a_greater_b:54,a_i:54,a_leq_b:54,a_less_b:54,a_n:54,a_neq_b:54,a_or_b:54,aadd_constraints_to_build_fully_automatic_model_in_sage_milp_class:28,ab:[77,182],abcd1234:77,abl:[19,20,21,22,23,24,25,63,71],about:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],absolut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],access:182,accord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],accordingli:[110,111],accuraci:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acm:182,activ:[19,20,21,22,25,180],active_sbox:24,actual:14,actual_inputs_bit:11,ad:[0,10,11,23,24,26,27,28,29,30,31,32,33,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],adapt:[95,96],add:[0,23,24,27,28,30,31,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_add_round_tweakei:103,add_additional_xor_constraint:[23,24],add_and_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_and_component_in_md5:112,add_and_component_in_sha1:113,add_and_component_sha2:114,add_and_component_to_even_round:89,add_arc:77,add_attributes_to_oper:4,add_beta_samples_to_final_result_from:5,add_bit_to_bit_list:14,add_cipher_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_com:[55,56,57,58],add_compon:[179,183,184],add_concatenate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constant_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constraint:54,add_constraint_from_str:[55,56,57,58],add_constraints_to_build_fully_automatic_model_in_sage_milp_class:[28,31],add_constraints_to_build_in_sage_milp_class:[26,27,28,29,30,31,32,33],add_constraints_to_build_in_sage_milp_class_with_fixed_compon:[28,31],add_fsr_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_component_latin_dances_permut:137,add_intermediate_output_components_id_to_dictionari:2,add_intermediate_output_rounds_id_to_dictionari:2,add_intermediate_output_values_to_dictionari:2,add_linear_layer_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_seri:103,add_modadd_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_modadd_component_in_md5:112,add_modadd_component_in_md5_for_x:112,add_modadd_component_in_sha1:113,add_modadd_component_sha2:114,add_modsub_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_multicolumns_to_graph:2,add_new_component_to_list:14,add_not_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_not_component_in_md5:112,add_or_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_or_component_in_md5:112,add_output_com:[55,56,57,58],add_output_compon:[95,103,105,125,126,127,138,139,140],add_pad:8,add_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_reverse_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_component_in_md5:112,add_rotate_component_in_sha1:113,add_rotate_component_sha2:114,add_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],add_round_const:95,add_round_kei:[84,95,98,115],add_round_key_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_component_in_md5:112,add_round_output_component_in_sha1:113,add_round_output_component_sha2:114,add_round_output_linear:[126,139],add_round_output_nonlinear:[126,139],add_sbox_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sbox_components_layer_in_even_round:89,add_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_shift_rows_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sigma_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_solution_to_components_valu:[19,20,21,22,23,24,25],add_solutions_from_components_valu:[19,20,21,22,23,24,25],add_subkei:107,add_suffix_to_compon:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],add_theta_keccak_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_theta_xoodoo_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_toy_compon:[],add_variable_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_variable_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_verbos:3,add_word_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_xor_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,179],add_xor_component_in_md5:112,add_xor_component_sha2:114,add_xor_component_to_even_round:89,addend:[23,24],addenda:[22,23,25,151,159,160,161,177],addendum:[70,76],addit:[9,10,17,23,24,59,60,61,62,63,64,65,66,67,70,76,154,159,160,161,182],addition:119,address:143,adher:[112,113,114],adp2018:182,advanc:182,advantag:[59,60,61,62],ae:[0,4,19,20,21,22,23,24,25,30,31,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177,180,182],aeb:182,aes_block_ciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],aes_block_cipher_k128_p128_o128_r2:24,aes_block_cipher_k128_p128_o128_r2_table_of_solut:24,aesblockciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],affec7:[59,64,72],africacrypt:182,after:[32,33],again:168,against:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],aggreg:190,aggregate_list_of_dictionari:190,agnost:182,ak2019:[168,182],albrecht:182,algebra:[0,16,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,182],algebraic_model:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_polynomi:[151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_test:[0,1,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],algebraicmodel:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algorithm:[0,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,182],algorithmtest:82,all:[0,4,9,11,22,24,25,32,33,54,55,56,57,58,61,62,63,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,189,190],all_apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],all_avalanche_probability_vector:2,all_equivalent_bit:14,all_input:[23,24,177],all_input_bits_avail:14,all_output_bits_avail:14,all_output_updated_bits_avail:14,all_output_vector:2,all_solutions_:[55,56,57,58],allow:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],allw2014:[151,162,164,182],almost:[61,62,66,67,74,75],alpha:[70,76],alpha_10:70,alpha_7:70,alpha_:70,alpha_i:70,alreadi:[46,51,168],also:[9,26,27,28,29,30,31,32,33,70,71,80,82,95,151,162,164,190],altern:76,alwai:[61,62,66,67,74,75,86,151,159,160,161,162,164,179],alzett:130,alzette_round:130,amount:[8,9,10,11,70,90,93,94,95,97,98,100,102,104,105,106,107,109,110,111,112,113,114,119,124,129,175],amsgrad:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],an:[0,8,9,10,11,16,23,24,50,54,70,71,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,163,164,168,177,179,182,185,188],analysi:[0,46,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],analyz:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],analyze_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],and2inputs_ddt:[151,162,164],and2inputs_lat:[151,164],and_0:70,and_0_0:[120,134,136,179],and_0_18_act:151,and_0_18_valu:151,and_0_4:[151,162,164],and_0_4_0:177,and_0_4_0_class_bit_0:177,and_0_4_0_class_bit_1:177,and_0_4_0_i:[151,162,164],and_0_4_14:[151,162,164],and_0_4_14_o:[151,162,164],and_0_4_15:[151,162,164],and_0_4_15_o:[151,162,164],and_0_4_1:177,and_0_4_1_i:[151,162,164],and_0_8:[4,151,162,164],and_0_8_0:[151,162,164],and_0_8_0_i:[151,162,164],and_0_8_0_o:[151,162,164],and_0_8_10:[151,162,164],and_0_8_10_i:[151,162,164],and_0_8_10_o:[151,162,164],and_0_8_11:[151,162,164],and_0_8_11_i:[151,162,164],and_0_8_11_o:[151,162,164],and_0_8_12_i:[151,162,164],and_0_8_13_i:[151,162,164],and_0_8_1:[151,162,164],and_0_8_1_i:[151,162,164],and_0_8_1_o:[151,162,164],and_0_8_22_i:[151,162,164],and_0_8_23_i:[151,162,164],and_0_8_2:[151,162,164],and_0_8_2_i:[151,162,164],and_0_8_i:151,and_0_8_o:151,and_0_8_x0:151,and_0_8_x10:151,and_0_8_x11:151,and_0_8_x12:151,and_0_8_x13:151,and_0_8_x14:151,and_0_8_x15:151,and_0_8_x16:151,and_0_8_x17:151,and_0_8_x18:151,and_0_8_x19:151,and_0_8_x1:151,and_0_8_x20:151,and_0_8_x21:151,and_0_8_x22:151,and_0_8_x23:151,and_0_8_x2:151,and_0_8_x3:151,and_0_8_x4:151,and_0_8_x5:151,and_0_8_x6:151,and_0_8_x7:151,and_0_8_x8:151,and_0_8_x9:151,and_0_8_y0:151,and_0_8_y10:151,and_0_8_y11:151,and_0_8_y1:151,and_0_8_y2:151,and_0_8_y3:151,and_0_8_y4:151,and_0_8_y5:151,and_0_8_y6:151,and_0_8_y7:151,and_0_8_y8:151,and_0_8_y9:151,and_1:70,and_already_ad:[22,25],and_as_boolean_funct:4,and_compon:[4,151,162,164],and_continuous_diffusion_analysi:9,and_ddt_2:[],and_inequ:45,and_lat:45,and_out:70,and_xor_differential_probability_ddt:22,and_xor_linear_probability_lat:25,andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ani:[0,21,22,24,25,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],ankel:182,annual:182,anteced:76,anver:182,anyth:77,append:[0,3,20,21,22,24,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],appendix:168,appl:[],appli:[54,95,177,182],applic:[70,123,151,162,164,182],apply_sbox_to_each_3bit_column:[138,140],approach:182,approxim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ar:[0,4,8,11,13,19,20,21,22,23,24,25,26,28,30,31,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,177,179,190],arbitrari:[159,160,161],arc:[77,179],archiv:[151,162,164,182],are_equal_compon:14,are_there_enough_available_inputs_to_evaluate_compon:14,are_there_enough_available_inputs_to_perform_invers:14,are_there_forbidden_compon:183,are_there_not_forbidden_compon:184,are_these_bits_avail:14,area:182,arg:96,argument:17,arr:10,arrai:[10,11,19,20,21,22,23,24,25,79,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],array1d:[154,159,160,161,167,169,170,175],array2d:[19,20,21,22,23,24,25,158,168,176,177],array_dim:190,articl:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],arx:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],arx_box:104,as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],ascii:82,ascon:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,163,165,166,168,171,172,173,176,179,180],ascon_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],ascon_sbox_sigma_no_matrix_permut:[117,168],ascon_sbox_sigma_permut:[28,118,157,158,165,166,171,172,173,176],asconpermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],asconsboxsigmanomatrixpermut:[117,168],asconsboxsigmapermut:[28,118,157,158,165,166,171,172,173,176],asiacrypt2020:182,ask:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],assembl:189,assert:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],assign:70,assign_functions_based_on:104,associ:[26,27,28,189],assum:14,attack:[0,15,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],attempt:24,attribut:4,august17:182,autom:182,automat:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],automata:182,autond:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],auxiliary_materi:[30,31],avail:[0,19,20,21,22,23,24,25,26,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],available_bit:14,available_output_compon:14,available_word_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],avalanch:[0,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],avalanche_depend:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_bia:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropy_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_entropy_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_result:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_test:2,avalanche_weight_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_weight_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],averag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avoid:77,awar:82,ax:4,b:[8,9,16,54,70,76,101,112,113,114,119,125,126,127,129,144,177,182],b_7:70,back:95,backward_ciph:[28,31],baena:182,ball:182,barbara:182,bardet:182,base:[0,3,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,181,182,183,184,189],base_compon:14,base_input:[],base_output:[],basi:[0,13,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],basic:70,bc2003:182,bc:[19,20,21,22,23,24,25],bcc:182,bcg:182,bdkllssss18:182,bea1:180,bea1_block_ciph:85,bea1blockciph:85,bea:85,beat:182,becaus:[45,50,70,112,113,114],becker:182,becom:95,been:[50,55,56,57,58,77,112,113,114],befor:[14,95,179],beforehand:26,begin:[55,56,57,58],behaviour:[45,50],being:70,bellini:182,below:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ber2010:182,berlin:182,berlinheidelberg:182,bernstein:182,best:70,beta:[0,5,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_10:70,beta_11:70,beta_1:[70,76],beta_7:70,beta_:70,beta_i:70,beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_sample_output:5,bettal:182,better:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],between:[48,50,54,70,76,108,177,180,190],bf:182,bfp2009:182,bfs2003:182,bfs2015:182,bghr2023:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],bh2012:182,bia:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bibliograph:180,big:[0,19,20,21,22,23,24,25,33,59,61,62,64,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,186],big_endian:50,big_m:54,big_swap:[122,123],bin:[8,82,185],binari:[4,8,9,10,27,28,54,77,82,96,177,179,182,185],binary_matrix_of_linear_compon:4,binary_valu:[20,58,72,74,75],binary_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],biryukov:182,bit:[0,3,4,8,11,14,26,27,28,30,31,32,33,50,54,58,63,70,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,180,185,190],bit_id:[71,72,73,74,75,168],bit_length:[8,79],bit_list:14,bit_nam:14,bit_posit:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],bit_positions_kei:[55,56,57,58],bit_positions_to_be_extract:190,bit_siz:[3,19,20,21,22,23,24,25,58,72,74,75,181],bit_stream:79,bit_stream_length:82,bit_transit:54,bit_valu:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],bit_vector_and:10,bit_vector_concat:10,bit_vector_linear_lay:10,bit_vector_mix_column:10,bit_vector_mix_column_poly0:10,bit_vector_modadd:10,bit_vector_modsub:10,bit_vector_not:10,bit_vector_or:10,bit_vector_print_as_hex_valu:10,bit_vector_rot:10,bit_vector_sbox:10,bit_vector_select_word:10,bit_vector_shift:10,bit_vector_shift_by_variable_amount:10,bit_vector_to_integ:10,bit_vector_xor:10,bitarrai:[0,3,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitarraytoint:175,bits_inside_word:8,bits_list:14,bits_of_an_output_compon:14,bitstr:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitvector:[70,76],bitwis:[11,30,31,151,152,156,163,167,169,170,180,185],biv:142,bivium:180,bivium_key_stream:142,bivium_state_initi:142,bivium_stream_ciph:142,biviumstreamciph:142,bjmm2012:182,bklpprsv2007:182,bkw2019:182,blackbox:[],blake2:180,blake2_hash_funct:110,blake2hashfunct:110,blake:180,blake_hash_funct:111,blakehashfunct:111,blanklin:179,blob:[30,31,95,96,159,160,161],block:[0,79,80,82,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],block_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,162,164,167,169,170,176,177,190],block_ciph:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,190],block_count:144,blocksiz:96,blp2008:182,blp2011:182,bluetooth:180,bluetooth_stream_cipher_e0:143,bluetoothstreamciphere0:143,bm2018:182,bo:182,bodi:189,bogdanov:182,boolean_polynomi:4,boolean_polynomial_r:[4,15,16],booleanpolynomialr:[16,17],boolpolyr:8,boomerang:182,boomerang_uniform:4,boot:182,both:[21,24,50,152,156,182],bottom:13,bottom_half_quarter_round:[119,129,144],bouillaguet:182,bound:[32,33,55,56,57,58,190],box:[19,20,21,22,23,24,25,45,50,123,148,149,151,162,164,168],branch:[4,25,33,62,67,70,75],branch_numb:4,branch_xor_linear_constraint:[25,33,62,67,75],bro:182,brouwer:182,brute:182,bs2011:182,build:[0,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,189],build_:55,build_all_xor_differential_trails_with_fixed_weight:58,build_bitwise_deterministic_truncated_xor_differential_trail_model:[27,28],build_bitwise_impossible_xor_differential_trail_model:28,build_cipher_model:[20,29,56,59,60,61,62,63,64,65,66,67,72],build_code_for_compon:3,build_code_for_continuous_diffusion_analysis_compon:3,build_continuous_diffusion_analysis_function_cal:3,build_deterministic_truncated_xor_differential_trail_model:[21,57,60,65],build_function_cal:3,build_inverse_deterministic_truncated_xor_differential_trail_model:21,build_lowest_weight_xor_differential_trail_model:58,build_lowest_xor_differential_trails_with_at_most_weight:58,build_mix_column_truncated_t:[19,20,21,22,23,24,25],build_tim:24,build_wordwise_deterministic_truncated_xor_differential_trail_model:[30,31],build_wordwise_impossible_xor_differential_trail_model:31,build_xor_differential_trail_and_checker_model_at_intermediate_output_level:[61,66],build_xor_differential_trail_first_step_model:[23,24],build_xor_differential_trail_model:[19,20,21,22,23,24,25,32,55,56,57,58,59,60,61,62,63,64,65,66,67,74],build_xor_differential_trail_model_templ:[22,24],build_xor_differential_trail_second_step_model:24,build_xor_linear_trail_model:[25,33,62,67,75],build_xor_truncated_t:23,builder:189,building_tim:[22,24,25],building_time_second:[22,24,25,59,61,62,64,66,67,74,75,77],byrn:182,byte_vector_and:11,byte_vector_is_consecut:11,byte_vector_linear_lay:11,byte_vector_mix_column:11,byte_vector_mix_column_poly0:11,byte_vector_modadd:11,byte_vector_modsub:11,byte_vector_not:11,byte_vector_or:11,byte_vector_print_as_hex_valu:11,byte_vector_rot:11,byte_vector_sbox:11,byte_vector_select_all_word:11,byte_vector_shift:11,byte_vector_shift_by_variable_amount:11,byte_vector_xor:11,bytearray_to_int:186,bytearray_to_wordlist:186,byteord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bytes_positions_to_little_endian_for_32_bit:190,bytes_positions_to_little_endian_for_multiple_of_32:190,bz:17,c0:17,c0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c1:17,c1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c2:17,c3:17,c4:17,c5:17,c6:17,c7:17,c:[0,16,17,54,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,177,180,182],c_2:[70,76],c_3:70,c_7:70,c_variabl:3,ca:182,cabarca:182,cadic:63,calcul:[8,168],calculate_average_differ:2,calculate_bit_posit:[19,20,21,22,23,24,25],calculate_bit_valu:[19,20,21,22,23,24,25],calculate_carry_for_three_block:4,calculate_carry_for_two_block:4,calculate_component_weight:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],calculate_input:190,calculate_input_bit_posit:[19,20,21,22,23,24,25,158],calculate_regular_differ:2,calculate_weights_for_linear_lay:4,calculate_weights_for_mix_column:4,calculate_worst_input_differ:2,call:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75],cambridg:182,can:[0,21,22,24,25,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,188],cancel:177,candidate_differ:[],cannier:182,cannot:29,care:[50,63],carri:[17,70,76],carries_id:159,carry_0_modadd_0_1_0:159,carry_0_modadd_0_1_1:159,carry_0_modadd_0_1_29:159,carry_0_modadd_0_1_2:159,carry_0_modadd_0_1_30:159,carry_id:159,carry_modadd_0_1:159,carry_modadd_0_1_0:159,carry_modadd_0_1_13:159,carry_modadd_0_1_14:159,carry_modadd_0_1_1:159,carry_modadd_0_1_29:[],carry_modadd_0_1_2:159,carry_modadd_0_1_30:[],carry_modsub_0_7_30:160,categori:[4,63],cbc:[26,79,80,82],cca:182,certain:[0,19,20,21,22,23,24,25,58,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],chacha:180,chacha_const:144,chacha_permut:[119,144],chacha_stream_ciph:144,chachapermut:[119,144],chachastreamciph:144,cham:182,chang:3,chapter:[51,168,182],chart:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],chaskei:[70,182],che:182,check:[61,66,151,162,164],check_output_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],check_siz:150,check_table_feas:168,chen:182,cheng:182,chi_definit:[125,126,127,138,139,140],chip:[],choco:24,choic:[26,71],choos:50,chosen:[59,60,61,62,63,64,65,66,67,71,110,111,112,113,114,190],chou:182,chpss18:182,chuf:[19,20,21,22,23,24,25],chunk:95,chunk_numb:[151,159,160,161,162,164],ci:[116,117,118,120,121,125,126,127,130,138,139,140],cid:182,cipher:[1,2,3,4,5,6,8,11,13,15,19,21,22,23,24,25,26,27,28,30,31,32,33,54,55,57,58,65,66,67,73,74,75,77,79,80,82,83,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,148,149,151,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,190],cipher_block_chaining_mod:79,cipher_code_str:3,cipher_famili:[119,129,137],cipher_family_nam:187,cipher_filenam:187,cipher_find_compon:14,cipher_id:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_id_solver_nam:77,cipher_input:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_input_size_:5,cipher_input_vari:[71,72,73,74,75],cipher_input_xor_linear_vari:75,cipher_inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_inv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_invers:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_list:[30,31,179],cipher_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_modul:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,187],cipher_nam:[0,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i12_o12_r1:179,cipher_name_i32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i4_o4_r1:179,cipher_name_k32_p32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_number_of_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_oper:4,cipher_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179,190],cipher_output_0_0:179,cipher_output_0_3:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_3_input:3,cipher_output_0_3_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_6:21,cipher_output_10_13:28,cipher_output_10_13_backward:28,cipher_output_11_12:28,cipher_output_1_12:[22,152],cipher_output_1_12_0_i:152,cipher_output_1_12_1_i:152,cipher_output_1_12_2_i:152,cipher_output_1_12_30_o:152,cipher_output_1_12_31_o:152,cipher_output_1_12_7_i:77,cipher_output_1_12_8_i:77,cipher_output_1_12_9_i:77,cipher_output_1_32:24,cipher_output_1_32_126:[30,31,152,156],cipher_output_1_32_127:[30,31,152,156],cipher_output_1_32_act:21,cipher_output_1_32_valu:21,cipher_output_1_6_input:148,cipher_output_1_6_output:148,cipher_output_1_7_input:149,cipher_output_1_7_output:149,cipher_output_1_8:[26,27,28,29,30,31,32,33,152,156],cipher_output_1_8_30:[152,156],cipher_output_1_8_31:[152,156],cipher_output_21_12:[59,64,72],cipher_output_21_12_i:152,cipher_output_21_12_o:152,cipher_output_2_12:[21,27,28,32,33,152,156],cipher_output_2_12_0:[152,156],cipher_output_2_12_0_i:152,cipher_output_2_12_0_o:152,cipher_output_2_12_1:[152,156],cipher_output_2_12_1_i:152,cipher_output_2_12_1_o:152,cipher_output_2_12_29_i:62,cipher_output_2_12_2:[152,156],cipher_output_2_12_2_i:152,cipher_output_2_12_30:[152,156],cipher_output_2_12_30_i:[62,67,75,152],cipher_output_2_12_30_o:152,cipher_output_2_12_31:[152,156],cipher_output_2_12_31_i:[62,67,75,152],cipher_output_2_12_31_o:152,cipher_output_2_1:86,cipher_output_31_16:[59,60,61,62,63,64,65,66,67],cipher_output_3_12:[20,22,25],cipher_output_3_12_i:25,cipher_output_3_12_o:25,cipher_output_4_12:22,cipher_output_4_71:28,cipher_output_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_output_compon:[152,156],cipher_partial_invers:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_python_dictionari:14,cipher_reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_rounds_without_permut:[],cipher_rounds_without_rot:[],cipher_st:85,cipher_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_without_key_schedul:179,cipheroutput:[152,156],ciphertext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext:[0,28,59,60,61,62,63,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext_0:[59,60,61,62,63,64,65,66,67],ciphertext_0_o:[62,67],ciphertext_1:[59,60,61,62,63,64,65,66,67],ciphertext_1_o:[62,67],ciphertext_2:[59,60,61,62,63,64,65,66,67],ciphertext_2_o:[62,67],ciphertext_3:[59,60,61,62,63,64,65,66,67],ciphertext_3_o:[62,67],ciphertext_backward:28,claasp:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,185,188,190],classic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],claus:[59,60,61,62,63,64,65,66,67,70,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],clock:[142,146,179],clock_fsm:145,clock_lfsr:145,clock_lfsr_initialization_mod:145,clock_numb:[142,143,145,146,147],clock_polynomi:[8,179],clocking_lfsr:147,close:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],closer:182,cm:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_add_clauses_to_solv:70,cms_cipher_model:59,cms_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_deterministic_truncated_xor_differential_model:[],cms_deterministic_truncated_xor_differential_trail_constraint:[],cms_modadd:159,cms_modadd_seq:159,cms_model:[59,61,62],cms_xor_differential_model:61,cms_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_mask_propagation_constraint:[151,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_model:62,cmssatciphermodel:59,cmssatdeterministictruncatedxordifferentialmodel:60,cmssatxordifferentialmodel:61,cmssatxorlinearmodel:62,cnf:[59,60,61,62,63,71,180],cnf_and:70,cnf_and_differenti:70,cnf_and_linear:70,cnf_and_seq:70,cnf_carri:70,cnf_carry_comp2:70,cnf_equival:70,cnf_hw_lipmaa:70,cnf_inequ:70,cnf_lipmaa:70,cnf_modadd_inequ:70,cnf_n_window_heuristic_on_w_var:70,cnf_or:70,cnf_or_seq:70,cnf_result_comp2:70,cnf_vshift_fals:70,cnf_vshift_id:70,cnf_xor:70,cnf_xor_seq:70,code:[0,2,50,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,182],code_gener:3,codeword:182,coeffici:179,coin:[19,20,21,22,23,24,25],cold:182,collect:190,collect_component_oper:4,collect_components_with_the_same_oper:4,collect_input_id_link:89,collis:182,colloquium:182,column:[0,9,10,11,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,176,179,180],column_step:[110,111],columns_m:96,com:[30,31,50,51,54,95,96,159,160,161,168,182],combin:177,combinator:182,command:55,comment:[28,55,56,57,58],compact:[59,60,61,62,63,64,65,66,67,86,90,93,94,95,97,98,100,102,103,104,105,106,107,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144],compar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],comparison:50,compil:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],complet:[22,24,25,59,60,61,62,63,64,65,66,67,82],complex:182,compliant:63,compoent:[],compon:[0,2,3,8,9,13,14,15,19,20,21,22,23,24,25,26,27,28,29,31,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179,183,184],component1:[14,23,24],component1_:178,component2:[14,23,24],component2_:178,component_0:[112,113,114],component_0_0:[179,184],component_1:[112,113,114],component_1_0:184,component_analysis_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_analysis_test:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],component_bit:14,component_from:[0,4,19,20,21,22,23,24,25,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,183,184],component_id:[0,3,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184],component_id_list:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_input:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,184],component_input_bit:14,component_invers:14,component_list:[14,27,28,30,31],component_nam:160,component_output_bit:14,component_output_id:[],component_rc:128,component_solut:[19,20,21,22,23,24,25],component_typ:[10,11,150],components_:128,components_in_round:184,components_io:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],components_valu:[19,20,21,22,23,24,25,71,72,73,74,75,77],components_vari:[],compos:77,compound:180,compris:143,comput:[0,4,9,10,11,15,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],compute_bsig0_bsig1:114,compute_ch:114,compute_criterion_from_avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_compon:14,compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_compon:14,compute_magic_const:101,compute_maj:114,compute_sbox_precomput:9,compute_ssig0_ssig1:114,compute_temp_and_s_30_b:113,comut:70,concaten:[10,179,180],concatenate_0_0:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],concatenate_0_0_input:3,concatenate_0_0_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_bool_func:8,concret:189,condit:76,confer:182,config:180,configur:[110,111],connect:[15,182],connect_round:58,connection_polynomi:15,connection_polynomials_at_round:15,consecut:11,consequ:76,consid:[0,23,24,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],const_0:[103,131,132,145],const_mask:177,constant:[0,9,54,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,180],constant_0_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_10:154,constant_0_10_y0:154,constant_0_10_y10:154,constant_0_10_y11:154,constant_0_10_y12:154,constant_0_10_y13:154,constant_0_10_y14:154,constant_0_10_y15:154,constant_0_10_y16:154,constant_0_10_y17:154,constant_0_10_y18:154,constant_0_10_y19:154,constant_0_10_y1:154,constant_0_10_y20:154,constant_0_10_y21:154,constant_0_10_y22:154,constant_0_10_y23:154,constant_0_10_y2:154,constant_0_10_y3:154,constant_0_10_y4:154,constant_0_10_y5:154,constant_0_10_y6:154,constant_0_10_y7:154,constant_0_10_y8:154,constant_0_10_y9:154,constant_0_18_act:154,constant_0_18_valu:154,constant_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_2_0:154,constant_0_2_0_o:154,constant_0_2_1:154,constant_0_2_1_o:154,constant_0_2_30:154,constant_0_2_30_o:154,constant_0_2_31:154,constant_0_2_31_o:154,constant_0_30:154,constant_0_30_word_0_class:154,constant_0_30_word_1_class:154,constant_0_30_word_2_class:154,constant_0_30_word_3_class:154,constant_1_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154],constant_1_0_0:154,constant_1_0_14:154,constant_1_0_15:154,constant_1_0_1:154,constant_2_0:[86,154],constant_2_0_0:154,constant_2_0_0_o:154,constant_2_0_13:154,constant_2_0_14:154,constant_2_0_14_o:154,constant_2_0_15:154,constant_2_0_15_o:154,constant_2_0_1:154,constant_2_0_1_o:154,constant_2_0_2:154,constant_2_0_2_o:154,constant_2_0_o:154,constant_block_ciph:86,constant_bool_func:8,constant_ci:130,constant_coeffici:17,constant_compon:154,constant_continuous_diffusion_analysi:9,constant_modsub_0_7:160,constant_o3_r3:86,constant_r:130,constant_to_bitstr:3,constant_to_repr:[3,154],constant_xor_differential_constraint:154,constantblockciph:86,constrain:[151,152,154,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],constraint_permutation_and_key_schedule_separately_by_input_s:58,constraint_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77],construct:[90,93,94,95,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,182,189],constructor:168,consum:[70,77],contain:[0,3,4,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,61,62,66,67,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],content:[182,189],continu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_avalanche_factor_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_test:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j_and_beta:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measures_:5,continuous_neutrality_measures_output_values_:5,control:189,conveni:[32,33],convers:13,convert:[4,10,77],convert_2d_index_to_1d_index:190,convert_output_to_byt:[3,151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],convert_polynomial_to_binary_matrix_given_polynomial_modulu:8,convert_solver_solution_to_dictionari:[32,33,77],convert_to_compound_xor_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,178],convert_x_to_binary_matrix_given_polynomial_modulu:8,convex:[45,50],convex_hul:[45,50],coordin:17,copi:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],core:180,cornerston:70,corr:182,correct:182,correl:[0,22,24,25,33,62,67,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],correspond:[0,4,11,26,30,31,33,62,63,67,71,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cost:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cou2001:182,could:[22,24,25,61,62,66,67,74,75,80,82],count:[21,182],counter:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,143,190],coupl:[19,20,21,22,23,24,25,177],courtoi:182,cp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_build_truncated_t:177,cp_cipher_model:20,cp_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_declar:[22,25,159,160,161,168],cp_deterministic_truncated_xor_differential_constraint:[151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],cp_deterministic_truncated_xor_differential_model:21,cp_deterministic_truncated_xor_differential_trail_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_get_all_input:158,cp_inverse_constraint:[167,169,170],cp_model:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cp_transform_xor_components_for_first_step:177,cp_twoterm:[151,159,160],cp_twoterms_xor_differential_prob:[159,160,161],cp_update_ddt_valid_prob:168,cp_update_lat_valid_prob:168,cp_wordwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,167,168,169,170,177],cp_xor_differential_first_step_constraint:[163,167,168,169,170],cp_xor_differential_model:24,cp_xor_differential_number_of_active_sboxes_model:[23,24],cp_xor_differential_probability_ddt:151,cp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_differential_propagation_first_step_constraint:[152,154,156,158,163,167,168,169,170,176,177],cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model:24,cp_xor_differential_trail_search_model:[19,20,21,22,23,24,25],cp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_linear_model:[25,156],cp_xor_linear_probability_lat:151,cpa:182,cpciphermodel:20,cpdeterministictruncatedxordifferentialmodel:21,cplex:26,cpmodel:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cpxordifferentialfixingnumberofactivesboxesmodel:24,cpxordifferentialmodel:[22,24],cpxordifferentialnumberofactivesboxesmodel:[23,24],cpxordifferentialtrailsearchfixingnumberofactivesboxesmodel:24,cpxordifferentialtrailsearchmodel:[19,20,21,22,23,24,25],cpxorlinearmodel:[25,156],creat:[9,13,21,22,23,24,25,59,60,61,62,63,64,65,66,67,72,74,75,77,86,89,96,179,189],create_alpha_st:145,create_constant_compon:84,create_directori:77,create_key_sbox_compon:84,create_lookup_table_by_matrix:9,create_lookup_table_for_finite_field_el:9,create_mix_column_compon:84,create_mix_row_compon:115,create_networkx_graph_from_input_id:13,create_new_state_for_calcul:190,create_numerical_cnf:70,create_rotate_compon:84,create_round:86,create_round_constant_compon:115,create_round_kei:84,create_round_output_compon:84,create_sbox_compon:[84,115],create_scenario_str:187,create_shift_column_compon:115,create_shift_row_compon:84,create_structur:[],create_sub_kei:90,create_xor_compon:[23,24,84,178],create_xor_component_input:178,creator:14,criteria:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion_nam:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],crossbr:182,cryptanalysi:[26,50,182],cryptanalyt:182,crypto:[50,168,182],cryptogr:182,cryptograph:182,cryptographi:182,cryptographiqu:182,cryptolog:182,cryptologyeprint:182,cryptominisat:[59,60,61,62,63,64,65,66,67,70,72,75],cryptominisat_sag:63,cryptominismt:74,cryptosystem:182,crystal:182,csrc:82,csv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],csvbuilder:189,curi:182,curr_input_bit_id:77,current:[0,14,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],current_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],current_round_numb:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],current_round_number_of_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],custom:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cut:[45,50],cutting_off_greedi:[45,50],cutting_off_milp:[45,50],cvxopt:26,cwi:182,cyclic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],d1:[],d2:[],d:[0,4,17,54,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],d_7:70,dagstuhl:182,dakrv18:182,dash:[59,60,61,62,63],dat:[95,96],data:[0,48,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,186,189],data_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],data_typ:[80,82],data_word_id:[110,111],data_word_rang:[110,111],dataset:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,190],dataset_gener:79,datasetgener:79,datasettyp:79,date:190,datetim:190,dbitnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ddt:[22,46,151],ddt_sbox_0_5:168,de:[180,182],debug:[10,11],decid:[50,70],decim:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],decis:[55,56,57,58],declar:[21,22,23,24,25,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],decod:182,decrypt:143,dedic:143,deep:182,deepcopi:[23,24],def:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],defaultdict:190,defend:182,defin:[0,3,8,13,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],define_const:111,define_number_of_round:[95,110,111],define_number_of_sbox:95,define_permut:[110,111],define_rotation_amount:[110,111],definit:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],degre:[4,9],deleg:189,delet:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_dictionary_that_contains_inequalities_for_large_sbox:[46,168],delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,delete_dictionary_that_contains_inequalities_for_small_sbox:50,delete_dictionary_that_contains_wordwise_truncated_input_inequ:48,delete_dictionary_that_contains_wordwise_truncated_mds_inequ:47,delete_dictionary_that_contains_wordwise_truncated_xor_inequ:48,delete_dictionary_that_contains_xor_inequ:49,delete_espresso_dictionari:54,delete_generated_evaluate_c_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_orphan_link:14,delta_const:94,delta_i:177,delta_in_1:48,delta_in_2:48,delta_x_0:177,delta_x_1:177,delta_x_2:177,densiti:[79,80,82],deo:182,depend:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],depth:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],deriv:13,derived_kei:92,des_block_ciph:87,des_ciph:88,des_exact_key_length_block_ciph:88,desblockciph:87,descend:[13,14],describ:[46,119,151,159,160,161,162,164],descript:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],desexactkeylengthblockciph:88,design:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],desir:77,detail:[143,188],determin:[0,4,54,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],determinist:[28,31,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],deterministic_truncated_xor_differenti:[19,20,21,22,23,24,25],deterministic_truncated_xor_differential_one_solut:[19,20,21,22,23,24,25],dey2023:119,diagon:[111,137],diagonal_step:[110,111],dict:[27,28,30,31,32,77,80,82,151,159,160,161,163,167,168,170],dict_criterion:2,dict_inequ:157,dict_intermediate_output_nam:2,dict_list:[80,82],dict_paramet:2,dict_polyhedron:50,dict_test_result:2,dictioanri:58,dictionari:[0,4,9,10,11,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,50,58,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],dictionary_exampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diehard:180,dieharder_:80,dieharder_random_toy_ciph:80,dieharder_random_toy_cipher_round_1:80,dieharder_report_dict:80,dieharder_report_folder_prefix:80,dieharder_statistical_test:80,dieharder_statistics_report:80,dieharder_test_output:80,diehardertest:80,diff:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diff_in_0:70,diff_in_1:70,diff_out:70,diff_str:[],differ:[0,26,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],difference_bit:[],difference_evaluation_funct:[],difference_posit:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],differenti:[0,4,26,45,46,50,51,54,63,70,71,72,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],differential_branch_numb:4,diffus:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],diffusion_factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diffusion_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],diffusion_tests_result:2,digit:[17,54,182],dilithium:182,dim:190,dimac:63,dimacs_input:70,dimens:47,dimension:8,din2021cri:182,din2021imp:182,din:182,dinur:182,dio2020:182,diogo:182,direct:[8,9,13,179,180],directli:70,directori:77,dirnam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],disabl:[55,56,57,58],discret:182,disctionari:58,discuss:51,displai:[10,11],dist:190,distanc:[182,190],distinct:[76,143,163],distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],divalpha:145,divid:63,dkllsss18:182,doc:188,docker:[46,51,82],doctest:[0,3,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],document:[82,180,182],documentclass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],doe:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],doi:182,done:29,draw:[80,82],ds:[],dto:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183],dtype:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],du2001:182,du2004:182,du2018:182,duart:182,duca:182,due:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],duke:80,dum1991:182,dumer:182,dummi:[33,54,70],dummy_0_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_0_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_0_mix_column_0_23_12_o:[158,176],dummy_0_mix_column_0_23_4_o:[158,176],dummy_0_mix_column_0_23_8_o:[158,176],dummy_10:70,dummy_10_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_10_mix_column_0_23_14_o:[158,176],dummy_11_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_11_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_11_mix_column_0_23_15_o:[158,176],dummy_12_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_13_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_15_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_16_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_17_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_1_mix_column_0_23_13_o:[158,176],dummy_1_mix_column_0_23_5_o:[158,176],dummy_1_mix_column_0_23_9_o:[158,176],dummy_20_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_21_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_2_mix_column_0_23_14_o:[158,176],dummy_3_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_3_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_3_mix_column_0_23_15_o:[158,176],dummy_4_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_4_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_6_mix_column_0_23_14_o:[158,176],dummy_7_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_7_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_7_mix_column_0_23_15_o:[158,176],dummy_8_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_8_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_8_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_9_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_hw_0_0_0:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_1:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_2:[59,60,61,62,63,64,65,66,67],dummy_hw_0_77_6:[59,60,61,62,63,64,65,66,67],dummy_hw_0_78_6:[59,60,61,62,63,64,65,66,67],dummy_i:70,dummy_modadd_1_9_0:[159,160,161],dunkelman:182,dure:[55,56,57,58],duursma:182,dx0:177,dx1:177,dx2:177,dx3:177,dx:168,dy:[168,177],e0:180,e0_bottom_id:13,e0_keystream:143,e0_nonlinear_funct:143,e1_top_id:13,e7c92d3f:[],e:[0,26,27,28,32,33,48,63,71,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,182],each:[0,3,4,8,10,11,14,15,17,26,32,33,46,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],ed:182,editor:[180,182],edu:80,effect:179,effici:182,eighth:182,either:[0,17,45,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],el:182,element:[4,8,9,14,190],elif:[54,177],eliminate_linear_vari:17,ell_funct:130,els:[21,54,76,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],else_constraint:54,elseif:[21,54],emb:182,embed:[59,60,61,62,63,64,65,66,67,182],empti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],encod:[54,177],encount:168,encrypt:[91,143,182],end:[32,33,48,59,60,61,62,63,64,65,66,67,77,80,82,179],end_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],endia:[77,186],endian:[59,64,72,77,185,190],endif:[21,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],enforc:168,engr:182,ensur:[32,33],entir:[58,77],entri:[4,46,179],entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],enumer:[79,182],env_vars_str:70,epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],eprint:[28,33,143,151,159,160,161,162,164,168,182],eq:[159,160,161],eq_modadd_0_1:[159,160,161],equal:[8,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,87,88,92,99,108,111,114,168,180,190],equality_polynomi:17,equat:[15,182],equival:[0,8,45,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],equivalent_bits_in_common:14,error:182,espresso:[46,51,54,168,177],espresso_inequ:54,espresso_pos_to_constraint:54,estim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],et:182,etc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],euclidean:190,euro:182,eurocrypt99:182,evalu:[0,3,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],evaluate_continuous_diffusion_analysi:3,evaluate_multiple_differ:[],evaluate_using_c:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vector:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vectorized_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_with_intermediate_outputs_continuous_diffusion_analysi:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluated_boolean_funct:9,evaluated_compon:14,evaluated_input:2,evaluated_y_list:9,evaluated_y_list_2:9,evaluated_y_list_3:9,everi:[0,59,60,61,62,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],evolutionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evolutionary_algorithm:[],exact:180,exampl:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],except:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,190],exchang:182,exclud:[80,82],exclude_variables_value_constraint:32,exclude_variables_value_xor_linear_constraint:33,execut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],exhaust:182,exist:[30,31,82],exmapl:79,expect:[0,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expected_output:190,experi:82,explain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expon:182,express:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],extend:[9,182],extended_and_bit:9,extended_left_rotation_by_variable_amount:9,extended_left_shift_by_variable_amount:9,extended_not_bit:9,extended_one_left_rotation_iter:9,extended_one_left_shift_iter:9,extended_one_right_rotation_iter:9,extended_one_right_shift_iter:9,extended_right_rotation_by_variable_amount:9,extended_right_shift_by_variable_amount:9,extended_two_bit_multiplex:9,extern:[26,27,28,29,30,31,32,33,50,59,60,61,62,63,64,65,66,67],external_solver_nam:[26,27,28,29,30,31,32,33],extract:[10,50,151,159,160,161,162,164,168],extract_input:190,f0:17,f0s_elim:17,f1:17,f2:182,f5:182,f:[0,9,17,55,56,57,58,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,182,190],fabio:182,fact:[151,159,160,161,162,164],factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fail:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fals:[0,3,4,6,8,10,11,14,15,16,17,21,23,24,28,31,32,50,51,55,56,57,58,59,60,61,62,63,64,65,66,67,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],famili:[114,148,149],family_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],fanci:[0,3,4,15,27,28,84,85,86,87,88,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177,180],fancy_block_ciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fancyblockciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fast:182,faster:[45,50,177],feedback:179,feistel_funct:102,ffff0000:22,ffffffffffffffffffffffffffffffff:24,fi_funct:92,field:[4,9,179,182],field_element_matrix_to_integer_matrix:4,fig:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file:[0,24,26,27,28,29,30,31,32,33,48,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_nam:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_path:[54,55,56,57,58,77,187],filenam:[79,80,82],fill_area:4,final_activ:[],final_constraint:20,final_deterministic_truncated_xor_differential_constraint:21,final_impossible_constraint:21,final_result:5,final_sign:77,final_transform:90,final_xor_differential_constraint:[22,24],final_xor_differential_first_step_constraint:[23,24],final_xor_linear_constraint:25,finalanalysisreport:82,finalanalysisreportexampl:82,find:[0,22,24,25,26,55,56,57,58,61,62,66,67,74,75,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,163,164,177,182],find_all_deterministic_truncated_xor_differential_trail:21,find_all_xor_differential_trails_with_fixed_weight:[22,24,32,58,61,66,74],find_all_xor_differential_trails_with_weight_at_most:[22,24,32,58,61,66,74],find_all_xor_linear_trails_with_fixed_weight:[25,33,62,67,75,77],find_all_xor_linear_trails_with_weight_at_most:[25,33,62,67,75],find_correct_ord:14,find_correct_order_for_invers:14,find_differential_weight:[22,24],find_good_input_difference_for_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_impossible_properti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_input_id_link_bits_equival:14,find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_lowest_weight_xor_differential_trail:[22,24,32,58,61,63,66,74],find_lowest_weight_xor_linear_trail:[25,33,62,67,75,77],find_min_of_max_xor_differential_between_permutation_and_key_schedul:58,find_missing_bit:[59,64,72],find_one_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_one_bitwise_impossible_xor_differential_trail:28,find_one_bitwise_impossible_xor_differential_trail_with_fixed_compon:28,find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model:28,find_one_deterministic_truncated_xor_differential_trail:21,find_one_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_one_wordwise_impossible_xor_differential_trail:31,find_one_wordwise_impossible_xor_differential_trail_with_fixed_compon:31,find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model:31,find_one_xor_differential_trail:[22,24,32,61,66,74],find_one_xor_differential_trail_with_fixed_weight:[22,24,32,61,66,74],find_one_xor_linear_trail:[25,33,62,67,75],find_one_xor_linear_trail_with_fixed_weight:[25,33,62,67,75],find_possible_number_of_active_sbox:[19,20,21,22,23,24,25],find_sign_for_one_xor_linear_trail:77,find_sign_for_xor_linear_trail:77,finish:[77,80,82],finit:[9,182],finite_state_machine_bit_s:143,fip:125,first:[0,11,21,22,23,24,25,46,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,179],first_add_round_kei:84,first_round:[101,117,118],first_step_solut:24,first_step_solver_nam:24,fix:[0,19,20,21,22,23,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraint:[27,28],fix_variables_value_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],fix_variables_value_deterministic_truncated_xor_differential_constraint:54,fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraint:[30,31],fix_variables_value_xor_linear_constraint:[25,33,62,67,75],fixed_bit:[30,31],fixed_index:183,fixed_valu:[21,22,24,25,27,28,32,33,58,59,61,62,64,66,67,72,74,75,77],fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],fixed_weight:[22,24,25,32,33,58,61,62,66,67,74,75],fixed_word:[30,31],fl_function:92,flag:[0,3,8,10,11,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],flag_chart:[80,82],flatten:[55,56,57,58],flip:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],float_and_lat_valu:[19,20,21,22,23,24,25],floor:[8,177],flow:[59,64,72],fo_funct:92,folder:[80,82],follow:[0,26,48,54,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,188],footer:189,foral:[159,160,161,168],forbidden_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forbidden_typ:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forc:182,form:[13,17,70,76,185],format:[0,3,4,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],format_component_valu:[19,20,21,22,23,24,25],format_differ:[],format_func:77,format_output:94,formula:[70,76],fot:58,found:[0,19,20,21,22,23,24,25,32,33,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],four:143,fr:182,frac:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],frame:141,frame_bit_s:141,free_input:150,free_search:[55,56,57,58],free_search_:[55,56,57,58],from:[0,3,4,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],from_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fse2014:[151,162,164],fsm:143,fsm_bit_siz:143,fsm_id:143,fsm_input_st:143,fsm_po:143,fsr:[8,179,180],fsr_0_0:179,fsr_1_0:141,fsr_binari:8,fsr_descript:141,fsr_word:8,fss2011:182,ft_b_c_d:113,fu2016:[159,160,161],fu:182,fuer:182,fukai6:[159,160,161],full:28,full_model:[19,20,21,22,23,24,25],fundament:182,further:[59,60,61,62,63],fwgsh2016:[159,160,161,182],g:[0,26,63,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],gaborit:182,gamma:[70,76],gamma_10:70,gamma_7:70,gamma_:70,gamma_i:70,gap:182,gc:124,gecod:[19,20,21,22,23,24,25],gen:96,gener:[0,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182],general_and:54,generalized_and:54,generat:96,generate_all_possible_points_with_n_bit:49,generate_avalanche_dataset:79,generate_avalanche_probability_vector:2,generate_beta_sample_output:5,generate_bit_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_bit_based_vectorized_python_code_str:3,generate_bitmask:185,generate_boolean_polynomial_ring_from_ciph:4,generate_byte_based_vectorized_python_code_str:3,generate_cbc_dataset:79,generate_chart_al:[80,82],generate_chart_for_all_round:82,generate_chart_round:[80,82],generate_correlation_dataset:79,generate_csv_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_dict_product_of_sum_from_espresso:51,generate_espresso_input:[46,54],generate_evaluate_c_code_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_expanded_link:179,generate_formatted_input:11,generate_graph_by_differences_posit:2,generate_heatmap_graphs_for_avalanche_test:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_high_density_dataset:79,generate_impossible_points_for_xor_between_n_input_bit:49,generate_inequalities_for_large_sbox:[50,168],generate_inputs_prim:2,generate_low_density_dataset:79,generate_matric:96,generate_product_of_sum_from_espresso:[46,54],generate_python_code_str:3,generate_python_code_string_for_continuous_diffusion_analysi:3,generate_random_dataset:79,generate_random_input:2,generate_round_kei:102,generate_sample_from_gf_2_n:190,generate_sbox_inequalities_for_trail_search:50,generate_sbox_sign_lat:168,generate_table_of_solut:24,generate_valid_points_for_truncated_mds_matrix:47,generate_valid_points_for_xor_between_n_input_word:48,generate_valid_points_input_word:48,generate_word_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_funct:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_functions_continuous_diffusion_analysi:9,generic_functions_vectorized_bit:3,generic_functions_vectorized_byt:[3,11],generic_sign_linear_constraint:[151,161,162,163,164],generic_with_constant_sign_linear_constraint:177,geometri:168,gerault:182,germani:182,get:[0,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_2d_array_element_from_1d_array_index:190,get_all_bit_nam:14,get_all_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_id:[0,28,31,59,64,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_with_the_same_input_id_link_and_input_bit_posit:14,get_all_equivalent_bit:14,get_all_inputs_bit_posit:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_all_oper:4,get_available_output_compon:14,get_average_criteria_by_round_input_output:2,get_average_criteria_list_by_output_tag:2,get_bit_based_c_cod:[153,154,157,158,165,166,168,171,172,173,176],get_bit_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_bit_bind:77,get_bodi:189,get_byte_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_ci:[125,126,127,190],get_ciph:187,get_cipher_compon:14,get_cipher_components_for_components_valu:[],get_cipher_input_for_components_valu:[],get_cipher_output_component_bit_based_c_cod:3,get_cipher_output_word_based_c_cod:3,get_cipher_outputs_for_cbc_dataset:79,get_cipher_outputs_for_correlation_dataset:79,get_cipher_outputs_for_density_dataset:79,get_cipher_typ:187,get_command_for_solver_process:[19,20,21,22,23,24,25],get_component_from_id:[0,4,14,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,169,170,171,172,173,176,177,183,184],get_component_hex_valu:76,get_component_pair:178,get_component_valu:[],get_component_value_weight:[],get_components_id:183,get_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_current_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_ddt_with_undisturbed_transit:168,get_dictionary_that_contains_inequalities_for_large_sbox:46,get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,get_dictionary_that_contains_inequalities_for_small_sbox:50,get_differential_dataset:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_equivalent_input_bit_from_output_bit:14,get_final_input_posit:179,get_final_output:[],get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most:32,get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most:33,get_foot:189,get_graph_represent:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],get_hamming_weight_funct:168,get_head:189,get_independent_input_output_vari:26,get_input_bit_positions_latin_d:137,get_input_output_vari:26,get_inputs_paramet:190,get_intermediate_output_component_bit_based_c_cod:3,get_intermediate_output_nam:2,get_intermediate_output_word_based_c_cod:3,get_inverse_matrix_in_integer_represent:4,get_ith_key128:94,get_ith_key192:94,get_ith_key256:94,get_ith_word:190,get_k_th_bit:190,get_key_schedule_component_id:14,get_keystream_bit_len:146,get_lat_valu:25,get_library_path:77,get_low_density_sequ:79,get_milp_constraints_from_inequ:177,get_mix_column_all_input:[19,20,21,22,23,24,25],get_mix_column_precomput:9,get_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_most_recent_intermediate_output:14,get_neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_new_xor_input_links_and_posit:[23,24],get_number_of_compon:183,get_number_of_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_number_of_input:3,get_number_of_rounds_from:190,get_number_of_steps_from:104,get_numbers_of_round:[90,94],get_operand:74,get_output_bit_size_from_id:179,get_output_compon:14,get_padding_component_bit_based_c_cod:3,get_partial_ciph:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_previous_output_bit_id:77,get_probability_vars_from_key_schedul:58,get_probability_vars_from_permut:58,get_related_key_scenario_format_for_fixed_valu:77,get_relative_posit:14,get_round_from_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,183,184],get_rounds_bit_based_c_cod:3,get_rounds_word_based_c_cod:3,get_sbox_precomput:9,get_single_key_scenario_format_for_fixed_valu:[27,28,30,31,32,77],get_sizes_of_components_by_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_solutions_dictionaries_with_build_tim:24,get_templ:189,get_total_weight:[19,20,21,22,23,24,25],get_transformed_xor_input_links_and_posit:177,get_transitions_for_single_output_bit:51,get_unique_links_inform:179,get_valid_points_for_wordwise_xor:48,get_word_based_c_cod:[153,154,167,168,169,170,174,175],get_word_oper:[53,68],get_word_operation_component_bit_based_c_cod:3,get_word_operation_final_xor_linear_constraint:25,get_word_operation_sign:[151,159,160,161,162,163,164,167,169,170,174,175,177],get_word_operation_word_based_c_cod:3,get_word_operation_xor_differential_constraint:[22,24],get_xor_all_input:[23,24],get_xor_probability_constraint:[71,72,73,74,75],getfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],gf2nmatrix:8,gf:[16,17,182],gf_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gift:[163,164,180],gift_permut:[120,163,164],gift_sbox_permut:121,giftpermut:[120,163,164],giftsboxpermut:121,gimli:180,gimli_permut:122,gimli_sbox_permut:123,gimlipermut:[122,123],gimlisboxpermut:123,gist:50,github:[30,31,50,95,96,159,160,161],give:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],given:[0,4,13,19,20,21,22,23,24,25,45,50,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],global:96,glpk:[26,27,28,29,30,31,32,33],glucos:[63,70],glucose_sag:63,go2019:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr_resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],good:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],goubin:182,gov:[82,125],gr:14,grain:[96,180],grain_cor:124,grain_core_permut:124,grain_ssg:96,graincorepermut:124,graph:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170,180,182],graph_represent:[14,104,108,114,124],graph_representation_of_the_ciph:77,graphrepresentationcr:14,greater:[32,33,58,99],greedi:50,grobner:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],group:190,group_by_kei:190,group_list_by_kei:190,grover:182,gtm:182,guess:[0,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],guidelin:180,guo:182,gurobi:26,h:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],h_function:108,ha:[50,55,56,57,58,77,112,113,114,148,149,179,189],haemer:182,hal:182,half:[0,28,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],half_like_round_funct:[],half_like_round_function_latin_d:137,ham:[0,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hambitz:182,handl:[59,60,61,62,63,70,112,113,114,115,143],happen:8,hardw:182,hardwar:182,has_maximal_branch_numb:4,hash_funct:[110,111,112,113,114,115],hashimoto:182,have:[0,22,24,25,32,33,61,62,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],he2002:182,he:58,header:189,heatmap:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],heavili:[151,159,160,161,162,164],hei:182,heidelberg:182,helper:180,henc:50,heurist:180,hex:[8,10,11,143,148,149,185],hex_str:8,hexadecim:77,hfe:182,hidden:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hidden_lay:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],high:[79,80,82,182,190],high_dens:79,higher:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],highest_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hight:180,hight_block_ciph:90,hightblockciph:90,him:189,homepag:182,homogen:182,host:70,how:[0,8,9,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],howard:182,howev:177,hp2003:182,hrepresent:168,html:[188,189],http:[0,28,30,31,33,46,47,48,50,51,54,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],hu:182,huang:182,huffman:182,hull:[45,50],hw:[70,76],hw_10:70,hw_6:70,hw_and_0_8_0:[151,162,164],hw_and_0_8_0_o:[151,162,164],hw_and_0_8_10:[151,162,164],hw_and_0_8_10_o:[151,162,164],hw_and_0_8_11:[151,162,164],hw_and_0_8_11_o:[151,162,164],hw_and_0_8_1:[151,162,164],hw_and_0_8_1_o:[151,162,164],hw_bit_id:70,hw_i:70,hw_modadd_0_1_0:[159,160,161],hw_modadd_0_1_0_o:[159,160,161],hw_modadd_0_1_14_o:[159,160,161],hw_modadd_0_1_15_o:[159,160,161],hw_modadd_0_1_1:[159,160,161],hw_modadd_0_1_1_o:[159,160,161],hw_modadd_0_1_29:[159,160,161],hw_modadd_0_1_2_o:[159,160,161],hw_modadd_0_1_30:[159,160,161],hw_modadd_0_1_30_o:[159,160,161],hw_modadd_0_1_31:[159,160,161],hw_modadd_0_1_31_o:[159,160,161],hw_modadd_2_7_14:[59,60,61,62,63,64,65,66,67],hw_modadd_2_7_15:[59,60,61,62,63,64,65,66,67],hw_sbox_0_2_0:168,hw_sbox_0_2_0_o:168,hw_sbox_0_2_1:168,hw_sbox_0_2_1_o:168,hw_sbox_0_2_2:168,hw_sbox_0_2_2_o:168,hw_sbox_0_2_3:168,hw_sbox_0_2_3_o:168,hw_sbox_0_5_0:168,hw_sbox_0_5_1:168,hw_sbox_0_5_2:168,hw_sbox_0_5_3:168,hybrid:182,i1:54,i2:54,i:[0,3,9,11,17,27,28,32,33,48,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,168,175,177,179,182,190],i_0:70,i_1:70,i_3:70,i_4:70,iacr:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182],icalp:182,icount:[131,132],icounter_upd:[131,132],id1:14,id2:14,id:[0,4,13,27,28,31,55,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184,190],id_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_link:181,id_str:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],id_tupl:[27,28],ident:[0,3,15,84,85,86,87,88,89,90,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],identifi:70,identity_block_ciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identity_block_cipher_cr:14,identity_block_cipher_p32_k32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],identityblockciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identityblockcipherencrypt:91,ieee:182,iff:54,ignor:[55,56,57,58],imag:82,impact:182,implement:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,177,189,190],implic:76,imposs:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],impossible_differential_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],impossible_xor_differenti:[19,20,21,22,23,24,25],improv:[55,56,57,58,182],in_0:70,in_1:70,in_id:70,in_shift:70,includ:[0,13,27,28,30,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incompat:[28,31],inconsist:[23,24],inconsistent_var:28,increas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],increment:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incrementing_count:5,inde:177,index:[0,2,3,10,11,14,15,30,31,46,47,48,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,179,180,183,190],index_occurr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],index_of_specific_input:2,indexes_of_values_in_col:157,indic:[0,8,9,20,21,22,23,24,25,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],indomain_min:[22,24,25],industri:182,ineq:168,inequ:[29,54,70,76,159,160,161,168,177,180],infeas:50,infer:177,inform:[59,60,61,62,63,77,168,179,182],informat:182,informatik:182,init_constraint:58,init_dictionary_test_result:2,init_final_result_structur:5,init_input:[90,94],init_input_bit:5,init_latin_dances_ciph:137,init_model_in_sage_milp_class:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],init_st:[],init_state_latin_d:137,init_state_plaintext:144,initi:[0,26,27,28,29,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_filling_lfsr_fsm:145,initial_popul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_round_elements_definit:103,initial_transform:90,initialise_model:[19,20,21,22,23,24,25],initialise_spider_plot:4,initialization_vector_bit_s:146,inject:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inp1:[151,159],inp2:[151,159],inplen:159,input0_id:159,input1_id:159,input:[0,2,3,4,6,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,180,182,184,185,187,188,190],input_1:[54,159,160,161],input_2:[54,159,160,161],input_bit:[0,5,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],input_bit_len:168,input_bit_posit:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_bit_positions_1:[19,20,21,22,23,24,25],input_bit_positions_list:190,input_bit_positions_lst:94,input_bit_s:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,181,184],input_bits_list:14,input_constraint:20,input_data_exampl:[80,82],input_deterministic_truncated_xor_differential_constraint:21,input_diff:2,input_differ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_fil:[80,82],input_file_format:82,input_file_nam:70,input_file_path:[19,20,21,22,23,24,25],input_id:[27,28,99,179],input_id_link:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_id_link_1:[19,20,21,22,23,24,25],input_id_tupl:[27,28],input_ids_list:190,input_index:[79,80,82],input_len:177,input_length:[8,19,20,21,22,23,24,25,159,160,161],input_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_lst:9,input_matrix:8,input_nam:2,input_name_1:[19,20,21,22,23,24,25,158],input_name_2:[19,20,21,22,23,24,25,158],input_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],input_plaintext:137,input_po:99,input_s:[0,8,9,10,11,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_state_of_compon:144,input_tag:2,input_tag_:5,input_var:[33,151,157,159,160,161,162,164,168,177],input_var_list:54,input_vector:8,input_wordwise_deterministic_truncated_xor_differential_constraint:[21,30,31],input_xor_differential_constraint:[22,24],input_xor_differential_first_step_constraint:[23,24],input_xor_linear_constraint:25,inputs0:[],inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],inputs_bit_size_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_dens:79,inputs_fix:79,inputs_id:[32,33,159,190],inputs_ids_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_list:190,inputs_po:190,inputs_size_to_dict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_tag:5,inria:182,insert:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],insid:[55,56,57,58,77,112,179],inspect:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],instal:[26,46,51,59,60,61,62,63,64,65,66,67,71,82],instanc:[3,4,16,26,27,28,29,30,31,32,33,55,56,57,58,86,90,93,94,95,96,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182],instanti:96,instantiate_matrix:96,instantiate_matrix_over_correct_field:4,instead:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],instruct:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],int_search:[22,24,25],int_to_byte_arrai:8,int_to_bytearrai:[179,186],int_to_poli:[4,190],int_to_wordlist:186,int_valu:[59,64,72,77],integ:[0,4,8,9,10,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,177,179,180,184,188,190],integer_to_bit_list:[19,20,21,22,23,24,25,27,28,30,31,33,59,61,62,64,66,67,71,72,73,74,75,77],integer_to_np:[],integer_valu:[4,8,190],integer_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],integr:26,intermedi:[0,3,21,55,56,57,58,61,66,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,177,179,180],intermediate_compon:156,intermediate_output:[0,2,3,6,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],intermediate_output_0_0:[102,179],intermediate_output_0_0_input:148,intermediate_output_0_0_output:148,intermediate_output_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_1_input:149,intermediate_output_0_1_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_35:[30,31,152,156],intermediate_output_0_35_act:[152,156],intermediate_output_0_35_valu:[152,156],intermediate_output_0_37:31,intermediate_output_0_5:21,intermediate_output_0_5_input:148,intermediate_output_0_5_invers:21,intermediate_output_0_5_output:148,intermediate_output_0_6:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156],intermediate_output_0_6_0_i:[77,156],intermediate_output_0_6_0_o:156,intermediate_output_0_6_10_i:77,intermediate_output_0_6_11_i:77,intermediate_output_0_6_1_i:156,intermediate_output_0_6_1_o:156,intermediate_output_0_6_29_i:156,intermediate_output_0_6_2_i:156,intermediate_output_0_6_2_o:156,intermediate_output_0_6_30_i:156,intermediate_output_0_6_31_i:156,intermediate_output_0_6_7_i:77,intermediate_output_0_6_8_i:77,intermediate_output_0_6_9_i:77,intermediate_output_0_6_i:156,intermediate_output_0_6_input:149,intermediate_output_0_6_o:156,intermediate_output_0_6_output:149,intermediate_output_0_71:28,intermediate_output_1_0_input:148,intermediate_output_1_0_output:148,intermediate_output_1_1:86,intermediate_output_1_1_input:149,intermediate_output_1_1_output:149,intermediate_output_1_5_input:148,intermediate_output_1_5_output:148,intermediate_output_1_6_input:149,intermediate_output_1_6_output:149,intermediate_output_1_71:28,intermediate_output_21_11:[59,64,72],intermediate_output_2_71:28,intermediate_output_31_15:[59,60,61,62,63,64,65,66,67],intermediate_output_5_12:28,intermediate_output_arc:77,intermediate_output_cod:3,intermediate_output_nam:[2,26,27,28,29,30,31,32,33],intermediate_solutions_:[55,56,57,58],intermediate_var:156,intermediateoutput:156,intern:[26,27,28,29,30,31,32,33,59,60,61,62,63,64,65,66,67,70,115,182],internal_st:[90,94],interrupt:[55,56,57,58],interv:[22,24,25,61,62,66,67,74,75],introduc:[59,60,61,62],introduct:182,invers:[0,4,21,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],inverse_compon:14,invert:[0,14,21,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,139,140,141,142,143,144,145,146,147,148,149,180],involv:[11,177],iota_definit:[125,126,127,138,139,140],ip:182,ipm:182,ir:182,irreduc:8,irreducible_polynomial_int_repr:9,is_addit:17,is_algebraically_secur:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_bit_adjacent_to_list_of_bit:14,is_bit_contained_in:14,is_boolean_polynomial_r:[15,16],is_component_input:183,is_continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_continuous_neutrality_measur:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_forbidden:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_id_equal_to:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_intermedi:152,is_intersection_of_input_id_links_nul:14,is_linear_layer_permut:179,is_md:4,is_output:2,is_output_bits_updated_equivalent_to_input_bit:14,is_possibly_invertible_compon:14,is_power_of_2_word_bas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],is_shift_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_single_kei:32,is_spn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],isfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],issu:182,ite:[76,175],iter:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],itertool:54,its:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],itself:[45,50,91],iv:[142,145,146,147],iv_bit_s:[142,145,146,147],j:[19,20,21,22,23,24,25,159,160,161,177,182],jacekpomyka:182,jerzi:182,join:[54,77],joint:182,josef:182,journal:182,joux:182,just:[112,113,114,115],jv2018:182,k0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k:[0,9,26,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177,182,190],k_4_128:104,k_4_64:104,k_7:70,k_8_256:104,kaczorowski:182,karmakar:182,kaski:182,kasumi:180,kasumi_block_ciph:92,kasumiblockciph:92,keccak:[8,179,180],keccak_invertible_permut:125,keccak_permut:126,keccak_sbox_permut:127,keccakinvertiblepermut:125,keccakpermut:126,keccaksboxpermut:127,keep:[50,179],keep_key_schedul:[0,14,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],kei:[0,4,11,19,20,21,22,23,24,25,27,28,30,31,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,175,177,179,180,182,190],kem:182,kept:[],kera:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_0:[159,175],key_0_2_0_o:77,key_0_2_10_o:77,key_0_2_11_o:77,key_12:[151,162,164],key_13:[151,162,164],key_1:[159,160,161,175],key_22:[151,162,164],key_23:[151,162,164],key_29:[159,160,161],key_2:[159,160,161,175],key_30:[159,160,161],key_31:[159,160,161],key_32:[167,170],key_33:[167,170],key_39:[167,170],key_40:[167,170],key_48:177,key_49:177,key_61:177,key_62:[71,72,73,74,75,177],key_62_o:75,key_63:[71,72,73,74,75,177],key_63_o:75,key_91:175,key_95:175,key_act:[21,177],key_add:97,key_backward:28,key_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,168,169,170,177,190],key_der:92,key_expans:101,key_id:[95,97],key_initi:[103,105],key_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_length:108,key_loading_to_lfsr:147,key_o:25,key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_rot:84,key_sboxes_compon:84,key_schedul:[103,120,121],key_schedule_compon:14,key_schedule_component_id:14,key_siz:101,key_st:147,key_stat:85,key_stream:[146,147],key_valu:[21,177],key_y0:[55,56,57,58],keyerror:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],keysiz:96,keystream:[141,143,145,146],keystream_bit_len:[142,143,146],keystream_word_s:145,ki_id:92,ki_posit:92,kiltz:182,kind:26,kipni:182,kissat:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],knudsen:182,kpg1999:182,ks2:145,ks:[142,143,146,147],ks_32:145,kt:114,kyber:182,l:[11,26,76,108,157,165,166,171,172,173,182,188],l_bit:108,la:182,label:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lafourcad:182,lambda:[0,17,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lambda_2:104,lambda_4:104,lambda_valu:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lane_num:190,lane_s:190,lang:182,languag:182,larg:[50,168,180],largest_round_criterion_not_satisfi:2,last:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,80,82,86,179],lat:[25,151],lat_sbox_0_5:168,lat_tabl:25,later:[45,50],latex:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],latexbuild:189,lattic:182,layer:[0,4,8,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,165,166,171,172,173,176,179,180],layer_and_lane_initi:190,lblock:180,lblock_block_ciph:93,lblockblockciph:93,lc:17,ldc_tutori:182,lea:180,lea_block_ciph:94,leablockciph:94,leander:182,learn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],least:[32,33,61,66,70,71,77],lectur:182,left:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],left_rotations_list:94,left_shift_amount:[100,106,109],left_var:70,leibniz:182,len:[0,4,8,9,10,17,22,23,24,25,32,33,61,62,66,67,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,168,188],len_keystream_word:147,length:[0,3,8,77,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],lepoint:182,less:[87,88,92,108,168,190],level:[55,56,57,58,61,66],lfsr:179,lfsr_input_st:143,lfsr_s_high_16bit:147,lfsr_s_low_16bit:147,lfsr_state:143,lfsr_state_bit_s:143,lfsr_state_s:143,lfsr_with_initialization_mod:147,lib:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],librari:[0,26,27,28,29,30,31,32,33,63,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],library_path:77,licens:26,lightweight:182,like:[70,77,112,113,114],limit:58,lin1999:182,line:[54,55,80,82],linear:[0,4,9,10,11,29,45,50,54,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],linear_lay:[4,8,9,95,130,179],linear_layer_0_0:[95,179],linear_layer_0_17_0_i:[157,165,166,171,172,173],linear_layer_0_17_1_i:[157,165,166,171,172,173],linear_layer_0_17_62:[157,158,165,166,171,172,173,176],linear_layer_0_17_62_o:[157,165,166,171,172,173],linear_layer_0_17_63:[157,158,165,166,171,172,173,176],linear_layer_0_17_63_o:[157,165,166,171,172,173],linear_layer_0_6:[157,165,166,171,172,173],linear_layer_0_6_0:[157,165,166,171,172,173],linear_layer_0_6_0_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_17_o:[157,165,166,171,172,173],linear_layer_0_6_18_o:[157,165,166,171,172,173],linear_layer_0_6_19_o:[157,165,166,171,172,173],linear_layer_0_6_1:[157,165,166,171,172,173],linear_layer_0_6_1_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_20_o:[157,165,166,171,172,173],linear_layer_0_6_21:[157,165,166,171,172,173],linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_22:[157,165,166,171,172,173],linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_23:[157,165,166,171,172,173],linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_2:[157,165,166,171,172,173],linear_layer_0_6_2_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_3_i:[157,165,166,171,172,173],linear_layer_0_6_4_i:[157,165,166,171,172,173],linear_layer_0_6_5_i:[157,165,166,171,172,173],linear_layer_0_6_6_i:[157,165,166,171,172,173],linear_layer_0_6_i:[157,165,166,171,172,173],linear_layer_0_6_o:[157,165,166,171,172,173],linear_layer_0_6_x12:[157,165,166,171,172,173],linear_layer_0_6_x14:[157,165,166,171,172,173],linear_layer_0_6_x15:[157,165,166,171,172,173],linear_layer_0_6_x16:[157,165,166,171,172,173],linear_layer_0_6_x18:[157,165,166,171,172,173],linear_layer_0_6_x19:[157,165,166,171,172,173],linear_layer_0_6_x23:[157,165,166,171,172,173],linear_layer_0_6_x3:[157,165,166,171,172,173],linear_layer_0_6_x6:[157,165,166,171,172,173],linear_layer_0_6_x8:[157,165,166,171,172,173],linear_layer_0_6_x9:[157,165,166,171,172,173],linear_layer_0_6_y0:[157,165,166,171,172,173],linear_layer_compon:[157,158,165,166,171,172,173,176],linear_layer_continuous_diffusion_analysi:9,linear_layer_funct:150,linear_layer_properti:4,linear_layer_rot:147,linear_layer_to_binary_matrix:150,linear_matrix:9,linear_transform_l1:147,linear_transform_l2:147,linearlay:[157,158,165,166,171,172,173],link:[27,28,51,58,168,179,182,188],link_binary_tuples_to_integer_vari:[27,28],linked_compon:156,lint:182,lipic:182,lipmaa:[70,76,182],list1:14,list2:14,list:[0,3,4,8,9,10,11,13,14,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,188,190],list_length:[59,64,72,77],list_of_bit_nam:14,list_of_test_vectors_input:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_test_vectors_output:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_xor_compon:[23,24,158],list_siz:3,list_specific_input:150,liter:[59,60,61,62,63],littl:[19,20,21,22,23,24,25,77,185,190],liu:182,lm2001:[159,160,161,182],lm:17,lnc:182,lo:147,load:95,load_const:95,load_paramet:187,local:82,log2:177,logarithm:[33,62,67,75],logic:[46,51,180],logo:189,lokshtanov:182,longer:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],longest:[61,62,66,67,74,75],look:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],lookup:[9,148,149],lookup_t:[8,9],lookup_table_2:9,lookup_table_3:9,loop:[8,24],lor:186,loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],low:[79,80,82,190],low_dens:79,lower:[32,33,58,61,62,66,67,74,75],lowest:[22,24,25,27,28,30,31,32,33,58,61,62,66,67,74,75],lowmc:180,lowmc_block_ciph:95,lowmc_constants_p:96,lowmc_generate_matric:95,lowmcblockciph:95,lp:[26,27,28,29,30,31,32,33],lp_sage:63,lpn:182,lpt:182,lrot:[167,170],lsb:77,lsfr:96,lshift:[169,175],lshift_by_variable_amount:175,lst:190,lst_by_id:190,lst_exampl:190,lst_x:190,lst_y:190,luck:182,lwe:182,lwr2016:[159,160,161,182],lwr:182,lx:17,ly:[17,22,24,25,61,62,66,67,74,75],lyubashevski:182,lz:17,m0:[110,111],m1:[110,111],m:[0,10,27,28,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],m_function:99,m_t:179,mai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],main:96,mainli:91,majority_funct:99,make:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],make_cipher_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],make_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],make_resnet:[],makedir:82,mani:[0,8,9,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],manner:177,manual:180,map:[11,95,180],mari:182,mask:[70,76,177],mask_in_0:70,mask_in_1:70,mask_out:70,master:[30,31,95,96,108,143,159,160,161],master_kei:90,mat:[48,49,96],match:77,materi:[30,31],math:182,mathemat:182,mathsat:[63,71],mathsat_pars:71,matplotlib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],matric:[10,11,95,99,158,176,180],matrix:[0,4,8,9,10,11,45,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],max_degree_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],max_number_of_carri:58,max_number_of_nonlinear_carri:58,max_pattern_valu:[47,48],max_weight:[22,24,25,32,33,58,61,62,66,67,74,75],maxim:96,maximum:[32,33],mb:77,mc_matrix:4,mceliec:182,md5:180,md5_hash_funct:112,md5_step:112,md5hashfunct:112,md:[4,158,176,180],mdla:[30,31],mean:[27,28,79,80,82],meant:89,measur:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],memori:[19,20,21,22,23,24,25,77],memory_keyword:[],memory_megabyt:[21,61,62,66,67,71,72,73,74,75,77],mention:168,merg:190,merge_bit:8,merging_list_of_list:190,messag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],method:[0,3,9,21,22,24,25,32,33,46,54,55,59,60,61,62,63,64,66,67,70,71,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,176,177,182],metric:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],meurer:182,mht2013:182,middle_round:[28,31],midori:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,180],midori_block_ciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],midoriblockciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],might:[45,50],milp:[0,45,50,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182],milp_and:54,milp_bitwise_deterministic_truncated_xor_differential_binary_constraint:[157,158,159,160,161,165,166,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_model:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_impossible_xor_differential_model:28,milp_cipher_model:29,milp_constraint:[152,156,157,158,163,165,166,167,169,170,171,172,173,176,177],milp_deterministic_truncated_xor_differential_model:[],milp_deterministic_truncated_xor_differential_trail_constraint:[],milp_els:54,milp_eq:54,milp_generalized_and:54,milp_generalized_xor:54,milp_geq:54,milp_great:54,milp_if_elif_els:54,milp_if_then:54,milp_if_then_els:54,milp_large_xor_differential_probability_constraint:168,milp_large_xor_linear_probability_constraint:168,milp_large_xor_probability_constraint_for_inequ:168,milp_leq:54,milp_less:54,milp_model:[26,27,28,29,30,31,32,33,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_n_window_heurist:161,milp_neq:54,milp_or:54,milp_small_xor_differential_probability_constraint:168,milp_small_xor_linear_probability_constraint:168,milp_speck:[159,160,161],milp_twoterms_xor_linear_probability_constraint:[151,162,164],milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraint:168,milp_wordwise_deterministic_truncated_xor_differential_constraint:[152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_model:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_sequential_constraint:177,milp_wordwise_deterministic_truncated_xor_differential_simple_constraint:[168,177],milp_wordwise_impossible_xor_differential_model:31,milp_xor:54,milp_xor_differential_model:[26,27,28,29,30,31,32,33],milp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_constraint:177,milp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_model:[33,77,156],milp_xor_trunc:54,milp_xor_truncated_wordwis:54,milpbitwisedeterministictruncatedxordifferentialmodel:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milpbitwiseimpossiblexordifferentialmodel:28,milpciphermodel:29,milpdeterministictruncatedxordifferentialmodel:[],milpmodel:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milpwordwisedeterministictruncatedxordifferentialmodel:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milpwordwiseimpossiblexordifferentialmodel:31,milpxordifferentialmodel:[26,27,28,29,30,31,32,33],milpxorlinearmodel:[33,77,156],min_all_prob:58,min_weight:[22,24,25,32,33,58,61,62,66,67,74,75],mind:182,minim:[22,23,24,25,45,46,50,51,180],minimum:[23,24,46,182],minisat:[63,70],minizinc:[24,152,154,156,159,160,161,167,169,170,175,177],minizinc_cipher_model:56,minizinc_constraint:[152,156,167,169,170,177],minizinc_deterministic_truncated_xor_differential_model:57,minizinc_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],minizinc_model:[55,56,57,58,154,159,160,161,167,169,170,175,177],minizinc_xor_differential_model:[55,56,57,58,154,159,160,161],minizinc_xor_differential_propagation_constraint:[152,154,156,159,160,161,167,169,170,175,177],minizincciphermodel:56,minizincdeterministictruncatedxordifferentialmodel:57,minizincmodel:[55,56,57,58,167,169,170,175,177],minizincxordifferentialmodel:[55,56,57,58,154,159,160,161],minor:4,minrank:182,minus1_power_x_:9,minus1_power_x_s_2:9,minus1_power_x_s_3:9,minus1_power_x_t:9,minus_pre_modsub_0_7_1:160,mip:[32,33,54,161],mipvari:[27,28,30,31,151,159,160,161,162,164,168],miura:182,mix:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,107,176,179,180],mix_column:[9,11,19,20,21,22,23,24,25,97,158,176,179],mix_column_0_0:179,mix_column_0_19:4,mix_column_0_1:4,mix_column_0_20:[4,158,176],mix_column_0_20_34:[158,176],mix_column_0_20_35:[158,176],mix_column_0_20_36:[158,176],mix_column_0_20_37:[158,176],mix_column_0_20_38:[158,176],mix_column_0_20_39:[158,176],mix_column_0_20_40:[158,176],mix_column_0_20_41:[158,176],mix_column_0_20_42:[158,176],mix_column_0_20_43:[158,176],mix_column_0_20_44:[158,176],mix_column_0_20_45:[158,176],mix_column_0_20_word_0_class_bit_0:[157,165,166,171,172,173],mix_column_0_20_word_0_class_bit_1:[157,165,166,171,172,173],mix_column_0_20_x0:[158,176],mix_column_0_20_x1:[158,176],mix_column_0_20_x2:[158,176],mix_column_0_20_y0:[158,176],mix_column_0_20_y1:[158,176],mix_column_0_20_y2:[158,176],mix_column_0_20_y61:[158,176],mix_column_0_20_y62:[158,176],mix_column_0_20_y63:[158,176],mix_column_0_21:[4,31,158,176],mix_column_0_21_14:[157,165,166,171,172,173],mix_column_0_21_15:[157,165,166,171,172,173],mix_column_0_21_30:[158,176],mix_column_0_21_31:[158,176],mix_column_0_21_i:[158,176],mix_column_0_21_o:[158,176],mix_column_0_21_word_3_class_bit_0:[158,176],mix_column_0_21_word_3_class_bit_1:[158,176],mix_column_0_23_0:[158,176],mix_column_0_23_0_i:[158,176],mix_column_0_23_14:[158,176],mix_column_0_23_14_o:[158,176],mix_column_0_23_15:[158,176],mix_column_0_23_15_o:[158,176],mix_column_0_23_1:[158,176],mix_column_0_23_1_i:[158,176],mix_column_0_23_2:[158,176],mix_column_0_23_2_i:[158,176],mix_column_0_31:4,mix_column_0_31_0_i:[158,176],mix_column_0_31_1_i:[158,176],mix_column_0_31_30_o:[158,176],mix_column_0_31_31_o:[158,176],mix_column_1_20:4,mix_column_compon:[4,9,84,158,176],mix_column_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],mix_column_gener:8,mix_column_generalized_bool_func:8,mix_column_generalized_continuous_diffusion_analysi:9,mix_column_matrix:9,mix_column_truncated_table_mix_column_0_21:[19,20,21,22,23,24,25,158,176],mixcolumn:[10,158,176],mmt2011:182,mo2015:182,mod:[17,157,158,159,160,161,163,165,166,171,172,173,176,177],mod_addition_polynomi:17,mod_binary_operation_polynomi:17,mod_subtraction_polynomi:17,modadd:[4,8,11,160,161,179,180],modadd_0_0:[90,100,110,179],modadd_0_1:[21,159,160,161,177,179],modadd_0_1_0:[159,160,161,177],modadd_0_1_0_i:[159,160,161],modadd_0_1_0_o:[159,160,161],modadd_0_1_13:[159,177],modadd_0_1_14:[159,160,161,177],modadd_0_1_14_o:[159,160,161],modadd_0_1_15:[159,160,161,177],modadd_0_1_15_class_bit_0:[159,160,161],modadd_0_1_15_class_bit_1:[159,160,161],modadd_0_1_15_o:[159,160,161],modadd_0_1_1:[159,160,161,177],modadd_0_1_1_i:[159,160,161],modadd_0_1_1_o:[159,160,161],modadd_0_1_29:[159,160,161],modadd_0_1_2:[159,160,161],modadd_0_1_2_i:[159,160,161],modadd_0_1_30:[159,160,161],modadd_0_1_30_i:[159,160,161],modadd_0_1_30_o:[159,160,161],modadd_0_1_31:[159,160,161],modadd_0_1_31_i:[159,160,161],modadd_0_1_31_o:[159,160,161],modadd_0_1_32_i:[159,160,161],modadd_0_1_33_i:[159,160,161],modadd_0_1_62_i:[159,160,161],modadd_0_1_63_i:[159,160,161],modadd_0_1_i:[159,160,161],modadd_0_1_o:[159,160,161],modadd_0_4:160,modadd_0_4_30:160,modadd_0_4_31:160,modadd_1_10:4,modadd_1_9:[4,159],modadd_1_9_c0_0:159,modadd_1_9_c1_4:159,modadd_1_9_c1_5:159,modadd_1_9_o0_0:159,modadd_1_9_o0_4:159,modadd_1_9_o0_5:159,modadd_1_9_x0:[159,160,161],modadd_1_9_x10:[159,160,161],modadd_1_9_x11:[159,160,161],modadd_1_9_x16:159,modadd_1_9_x17:159,modadd_1_9_x1:[159,160,161],modadd_1_9_x2:[159,160,161],modadd_1_9_x3:[159,160,161],modadd_1_9_x4:[159,160,161],modadd_1_9_x5:[159,160,161],modadd_1_9_x6:[159,160,161],modadd_1_9_x7:[159,160,161],modadd_1_9_x8:[159,160,161],modadd_1_9_x9:[159,160,161],modadd_1_9_y0_0:[159,160,161],modadd_1_9_y1_0:[159,160,161],modadd_1_9_y2_0:[159,160,161],modadd_1_9_y3_0:[159,160,161],modadd_1_9_y4_0:[159,160,161],modadd_1_9_y5:159,modadd_1_9_y5_0:[159,160,161],modadd_as_boolean_funct:4,modadd_compon:[4,159,160,161],modadd_continuous_diffusion_analysi:9,modadd_continuous_diffusion_analysis_two_word:9,modadd_linear:[159,160,161],model:[0,13,16,17,47,48,50,51,54,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],model_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],model_fil:77,model_to_writ:77,model_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],model_vari:[27,28,30,31,54],modifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],modsub:[8,11,159,161,179,180],modsub_0_0:179,modsub_0_7:160,modsub_0_7_30:160,modsub_0_7_31:160,modsub_compon:160,modsub_continuous_diffusion_analysi:9,modul:[26,46,50,51,63,70,112,113,114,182],modular:[9,10,70,76,159,160,180],modular_addition_word:[159,160,161],modular_compon:[159,160,161],modulo:2,modulu:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,179],monomi:[8,179],more:[0,9,22,24,25,33,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,188],moriai:[70,76,182],most:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],moving_index:183,mq:182,msb:[26,54,63,77,177],mul_tabl:[10,11],mulalpha:145,multi:180,multi_input_non_linear_logical_operator_compon:[151,164],multiinputnonlinearlogicaloper:[151,162,164],multipl:[0,4,8,10,11,14,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],multivari:182,mulx:145,mulxpow:145,mun:182,mur2020:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],murilo:182,must:[0,8,9,19,20,21,22,23,24,25,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],my_dataset:190,mzn:180,mzn_shift_by_variable_amount_constraint:175,n:[0,3,8,10,17,23,24,50,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,175,177,180,182,185,188,190],n_sbox:95,n_window_heurist:[26,27,28,29,30,31,32,33],name:[0,10,11,15,19,20,21,22,23,24,25,26,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],name_fil:190,narray1d:177,nb_occ:2,nb_sampl:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ndarrai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nearest:182,necessari:[45,50],necessarili:[32,33],need:[3,19,20,21,22,23,24,25,26,32,33,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,80,82,111,168,180,190],neg:[8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,61,62,66,67,74,75,179,188],negat:[11,59,60,61,62,63,76],neighbor:182,network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_blackbox_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_differential_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_staged_train:[],neuron:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neutral:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],new_constraint:[22,24,25],new_expanded_link:179,new_input_bit_positions_1:[19,20,21,22,23,24,25,158],new_input_bit_positions_2:[19,20,21,22,23,24,25,158],new_input_posit:179,new_link:179,new_numb_of_inp:[23,24],new_posit:179,next:[70,76],next_component_index_from:179,ngen:15,niederhagen:182,nist:[80,125,180],nist_:82,nist_random_toy_ciph:[],nist_random_toy_cipher_round_1:[],nist_statistical_test:82,nist_statistics_report:82,nist_sts_report_dict:82,nist_sts_report_folder_prefix:82,nistpub:125,nl:182,nlfsr:179,nmax:[23,24],node:[55,56,57,58],non:[4,19,20,21,22,23,24,25,29,32,58,61,66,74,75,77,180,188,190],non_linear_component_id:[26,27,28,29,30,31,32,33,168],nonc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],none:[0,2,5,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,186,189,190],nor:[59,60,61,62,63,64,65,66,67],normal:17,not_0_0:179,not_0_18:163,not_0_5:163,not_0_5_0:163,not_0_5_0_i:163,not_0_5_0_o:163,not_0_5_1:163,not_0_5_1_i:163,not_0_5_1_o:163,not_0_5_62:163,not_0_5_62_i:163,not_0_5_62_o:163,not_0_5_63:163,not_0_5_63_i:163,not_0_5_63_o:163,not_0_5_i:163,not_0_5_o:163,not_0_5_x0:163,not_0_5_x1:163,not_0_5_x2:163,not_0_5_x61:163,not_0_5_x62:163,not_0_5_x63:163,not_0_5_y0:163,not_0_5_y1:163,not_0_5_y2:163,not_0_5_y61:163,not_0_5_y62:163,not_0_5_y63:163,not_0_8:163,not_0_8_0:163,not_0_8_0_i:163,not_0_8_1:163,not_0_8_1_i:163,not_0_8_2:163,not_0_8_2_i:163,not_0_8_30:163,not_0_8_30_i:163,not_0_8_30_o:163,not_0_8_31:163,not_0_8_31_i:163,not_0_8_31_o:163,not_compon:163,not_const:135,not_continuous_diffusion_analysi:9,not_equ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],note:[14,32,33,59,60,61,62,70,71,182],notion:51,notwis:70,np:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],npolynomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr_solutions_:[55,56,57,58],nround_0:3,nsolut:[55,56,57,58],ntt:182,num_epoch:[],num_filt:[],num_output:[],numadd:[22,23,25,151,177],numb_of_inp:[158,177],numb_of_inp_1:[19,20,21,22,23,24,25],number:[0,4,9,10,11,15,19,20,21,22,25,27,28,30,31,45,50,54,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,177,179,180,182,184,190],number_of_1:157,number_of_active_sbox:[23,24],number_of_bit:49,number_of_bit_stream:82,number_of_block:[130,190],number_of_blocks_in_one_sampl:[79,80,82],number_of_clock:8,number_of_compon:[183,184],number_of_epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_ineq:[45,50],number_of_initialization_clock:[142,145,146,147],number_of_input:[4,8,9,10,11,33,48],number_of_input_bit:[49,177],number_of_lay:99,number_of_lin:[80,82],number_of_monomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_normal_clocks_at_initi:141,number_of_occurr:2,number_of_oper:94,number_of_output:9,number_of_round:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,184,190],number_of_row:8,number_of_sampl:[0,2,5,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],number_of_samples_in_one_lin:[80,82],number_of_sbox:[87,88,95],number_of_step:130,number_of_test:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_vari:[0,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_word:[48,90,94],numerical_cnf:70,numerical_cnf_to_dimac:70,numpi:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvar:15,nvariabl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvlpub:125,nx:17,ny:17,nz:17,o:[48,182],o_funct:99,object:[0,3,4,8,13,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,58,63,71,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,181,183,184,189,190],objective_gener:58,observ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],obtain:[0,19,20,21,22,23,24,25,54,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],occur:[28,31],occurr:4,odd:[119,129],off:[45,50],offer:70,offset:179,oil:182,old_cipher_inputs_:178,old_xor_compon:[23,24],onc:77,one:[0,10,11,22,24,25,26,27,28,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,190],onli:[0,4,29,46,48,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],oper:[0,4,8,9,10,11,22,25,55,56,57,58,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,161,163,164,167,170,176,177,180],operand:[70,76,151,152,156,160,162,164],optim:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimis:[55,56,57,58],optimisation_level_:[55,56,57,58],optimizer_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimizer_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],option:[0,8,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],or_0_0:179,or_0_4:164,or_0_4_0:164,or_0_4_1:164,or_0_4_30:164,or_0_4_31:164,or_0_4_y0:164,or_0_4_y1:164,or_0_4_y30:164,or_0_4_y31:164,or_0_9:164,or_39_6_i:164,or_39_6_o:164,or_compon:164,or_continuous_diffusion_analysi:9,order:[0,3,4,11,22,24,25,61,62,63,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185,190],order_input_id_links_for_modadd:14,order_of_linear_compon:4,ordin:24,org:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],orient:3,origin:[112,113,114],orphan:14,os:[0,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],other:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],otherwis:[0,8,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],out:[27,28,70,151,159,160,161,177],out_id:70,out_suffix:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,76],output:[0,3,4,8,9,10,11,14,17,19,20,21,22,23,24,25,26,32,33,48,54,55,56,57,58,61,66,70,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,162,164,168,177,179,180],output_absolute_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit:[0,5,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit_len:168,output_bit_s:[0,2,3,4,10,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,187],output_bits_updated_list:14,output_compon:[21,152,156],output_constraint:21,output_dictionary_that_contains_wordwise_truncated_input_inequ:48,output_dictionary_that_contains_wordwise_truncated_mds_inequ:47,output_dictionary_that_contains_wordwise_truncated_xor_inequ:48,output_dictionary_that_contains_xor_inequ:49,output_espresso_dictionari:54,output_file_nam:70,output_id:[27,28,159],output_id_link_1:158,output_id_link_2:158,output_id_tupl:[27,28],output_inverse_constraint:21,output_len:8,output_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_lst:[9,190],output_probability_per_round:[55,56,57,58],output_s:[3,46,154,158],output_size_for_concaten:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],output_tag:[0,2,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],output_tag_:5,output_to_pars:[19,20,21,22,23,24,25,71],output_values_dict:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],output_var:[33,151,157,159,160,161,162,164,168,177],output_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],outputs_id:159,outsid:[26,27,28,29,30,31,32,33],over:[63,182],overdetermin:182,overrid:[59,60,61,62,162],overridden:[59,60,61,62],overwritten:70,ozerov:182,p1:[28,105],p1_index:137,p2:[28,105],p2_index:137,p3:28,p3_index:137,p4:28,p5:28,p:[22,24,25,26,27,28,29,30,31,32,33,55,56,57,58,92,145,147,151,159,160,161,162,164,168,182],p_modadd_0_1_0:58,p_modadd_1_2_0:58,p_modadd_1_7_0:58,p_modadd_1_9_0:[159,160,161],p_modadd_2_2_0:58,p_modadd_2_7_0:58,p_or_39_6:164,paar:182,pad:[8,77],padto:[17,54],page:[33,180,182],pair:[61,66,168,190],paper:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],parallel:[123,151,162,164],param:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,167,169,170,174,175,179,182],parameters_configur:190,parent_link:179,pari:182,pariti:182,parkissat:70,pars:[11,80,82],parse_probability_var:58,parse_report:[80,82],parse_solver_inform:[19,20,21,22,23,24,25],part:[8,9,22,24,25,50,143,189],partial:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],partial_result:[],partial_speck:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],pass:[0,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],patarin:182,paterson:182,path:[0,55,56,57,58,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],pattern:[27,28,177,180],paturi:182,pb:46,pdf:[28,30,31,33,125,143,151,159,160,161,162,164,168,182],per:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],perat:[151,162,164],perform:[8,14,26,55,56,57,58,63,70,76,149,151,159,160,161,162,164,177,179,188],perlner:182,perm_0_0:179,permut:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,137,141,142,143,144,145,146,147,148,149,157,158,163,164,166,168,171,172,173,179],permutation_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,165,176,179],permutation_lay:98,perret:182,peter:182,peyrin:182,pfasant:50,phd:182,photon:180,photon_permut:128,photonpermut:128,php:[0,30,31,46,47,48,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],phy:80,pi:180,pick:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],picnic:95,picosat_sag:63,pieprzyk:182,pierr:182,pipe:70,pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],pkc:182,pla:48,plaintest:79,plaintext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,179],plaintext_0:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_0_o:[62,67,75],plaintext_10:[167,170],plaintext_13:26,plaintext_14:26,plaintext_15:26,plaintext_1:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_1_o:[62,67,75],plaintext_20:168,plaintext_29:159,plaintext_2:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_2_o:[62,67,75],plaintext_30:159,plaintext_31:[159,160,161],plaintext_33:160,plaintext_34:160,plaintext_36:169,plaintext_37:169,plaintext_3:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_3_o:[62,67,75],plaintext_63:169,plaintext_7:[167,170],plaintext_8:[167,169,170],plaintext_9:[167,169,170],plaintext_id:95,plaintext_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_list:90,plaintext_o:25,plaintext_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_y0:[15,55,56,57,58],plaintext_y1:[15,55,56,57,58],plaintext_y21:15,plaintext_y22:15,plaintext_y23:15,plaintext_y2:[15,55,56,57,58],plaintext_y3:[55,56,57,58],plane:[138,139,140,190],plane_num:190,planes_new:[138,140],pleas:80,pless:182,plot_first_line_of_data_fram:4,plot_numb:4,png:[80,82],po:11,point:[77,179],point_pair:190,poli:[11,168,179],poly_to_int:190,polyhedron:[45,50,168],polynom:190,polynomi:[0,4,8,10,15,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],polynomial_as_int:4,polynomial_system:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomial_system_at_round:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomialr:16,poor:26,portion:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],poschmann:182,posit:[0,4,8,9,10,11,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,184,185,190],position_list:150,possibl:[0,9,19,20,21,22,23,24,25,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],possible_sbox:[23,24],post:182,potential_unwanted_compon:14,pp:182,ppl:26,pprint_dictionari:190,pprint_dictionary_to_fil:190,pra1962:182,prang:182,pre:182,pre_minus_pre_modsub_0_7_1:160,pre_modadd_0_1_0:[159,160,161],pre_modadd_0_1_1:[159,160,161],pre_modsub_0_7_0:160,pre_modsub_0_7_1:160,pre_or_0_9_0:164,pre_or_0_9_1:164,pre_var_shift_0_2:175,precomput:[9,95,180],predecessor:13,predic:180,prefix:[55,56,57,58],prepare_input_bit_based_vectorized_python_code_str:3,prepare_input_byte_based_vectorized_python_code_str:3,prepend:[59,60,61,62,63],preprint:182,present:[0,8,27,28,33,84,85,86,87,88,89,90,91,92,93,94,95,97,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176,179,180,182],present_block_ciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],presentblockciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],press:182,pretti:190,previou:[70,76],previous_carri:[70,76],previous_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],previous_output_bit_id:77,previous_result:77,primit:182,print:[0,3,8,10,11,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,182,184,190],print_as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179],print_as_python_dictionary_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_cipher_structure_as_python_dictionary_to_fil:[104,108,114,124],print_component_analysis_as_radar_chart:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_component_info:[10,11],print_components_valu:77,print_evaluation_python_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_evaluation_python_code_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_input_inform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_round:[183,184],print_round_as_python_dictionari:183,print_rounds_as_python_dictionari:184,print_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],print_word_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],privaci:182,proba:168,probability_var:58,probability_vari:[],probability_weight_per_round:[55,56,57,58],probabl:[0,26,27,28,29,30,31,32,33,46,58,61,62,66,67,70,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168],probe:[55,56,57,58],problem:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],proc:182,procedur:[23,24],proceed:182,process:[55,56,57,58,189],processes_:[55,56,57,58],produc:143,product:[46,54],program:[26,27,28,29,30,31,32,33,54,182],progress:[80,82],project:82,propag:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],propagate_equival:179,propagate_permut:179,propagate_rot:179,properti:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,182,183,184],provid:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],publish:182,purpos:[10,11,50,89],py:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],python:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],q:[76,182],qarma:99,qarmav2:180,qarmav2_block_ciph:99,qarmav2blockciph:99,qi:190,qiao:182,quadrat:182,qualiti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],quantum:182,quantumcryptographi:182,quarter_round:[],quarter_round_index:137,question:54,quotient:8,quotientr:8,r:[0,15,16,17,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],r_3:70,r_7:70,radar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rafael:182,raiden:[55,56,57,58,160,175,180],raiden_block_ciph:[55,56,57,58,100,160,175],raidenblockciph:[55,56,57,58,100,160,175],rais:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],randint:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],random:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],random_el:17,random_seed_:[55,56,57,58],randomli:190,rang:[0,9,17,19,20,21,22,23,24,25,27,28,30,31,33,54,55,56,57,58,59,61,62,64,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188,190],rank:[96,182],rate:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],ratio:[79,80,82],rc5:180,rc5_block_ciph:101,rc5blockciph:101,rc:[122,123],rc_2:103,reach:[32,33],read:190,real:[9,190],real_bit:11,real_input:11,reason:177,recent:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],reduc:[0,23,24,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],reduct:182,ref:95,refer:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reg:141,reg_param:[],regist:[8,179],register_1_info:179,register_2_info:179,register_bit_length:8,register_len:179,register_n_info:179,register_polynomi:[8,179],register_word_length:179,registers_info:[8,179],regs_initi:141,regs_siz:141,regular:182,rel:[77,179],relat:[0,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reli:[151,159,160,161,162,164],remain:[0,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],remaining_xor:84,remark:[63,77],remov:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],remove_cipher_input_kei:179,remove_compon:183,remove_component_from_id:183,remove_components_from_round:14,remove_components_with_strings_as_valu:4,remove_forbidden_par:179,remove_key_schedul:[0,25,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],remove_orphan_compon:179,remove_permut:179,remove_rot:179,remove_round_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],remove_round_component_from_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],removed_compon:14,removed_key_speck:179,removed_permutations_pres:179,removed_rotations_speck:179,render_templ:189,reorder_input_and_output:94,repeat:[23,24,54],repetit:[23,24],replac:63,repo:96,report:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,189],report_dict:[80,82],report_dict_list:[80,82],report_filenam:[80,82],report_fold:82,repr_pretti:168,repres:[0,8,9,10,11,17,21,22,24,25,27,28,30,31,45,46,50,59,60,61,62,63,64,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,161,164,165,166,167,169,170,171,172,173,176,177,179,180,190],represent:[0,4,9,14,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170],reproduc:[0,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],request:[55,56,57,58],requir:[0,28,46,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],res_vector:8,research:182,reserv:11,resist:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respect:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respons:189,result:[0,4,11,48,54,55,56,57,58,61,62,66,67,70,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177],results_without_xor:4,retrain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],retriev:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],return_index:14,rev_0_0:179,revers:[11,95,179,180],revisit:182,rfc:[112,113,114],rgb:80,rho_and_pi_definit:[125,126,127],rhoeast_definit:[138,139,140],rhowest_definit:[138,139,140],right:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],right_shift_amount:[100,106,109],right_var:70,rijmen:182,ring:[4,8,15,180,182],rk_id:95,robshaw:182,roi:182,root:[55,56,57,58],ror:186,rossi:182,rot:147,rot_0_0:[21,26,105,122,123,159,160,161,167,170,179],rot_0_0_0:[26,159,160,161,167,170],rot_0_0_0_class_bit_0:[159,160,161],rot_0_0_0_class_bit_1:[159,160,161],rot_0_0_0_i:[62,67,75,167,170],rot_0_0_0_o:[167,170],rot_0_0_10_i:[167,170],rot_0_0_13:[26,159],rot_0_0_14:[26,159,167,170],rot_0_0_14_o:[167,170],rot_0_0_15:[26,159,160,161,167,170],rot_0_0_15_o:[167,170],rot_0_0_1:[26,159,160,161,167,170],rot_0_0_1_i:[62,67,75,167,170],rot_0_0_1_o:[167,170],rot_0_0_2:26,rot_0_0_2_i:62,rot_0_0_7_i:[167,170],rot_0_0_8_i:[167,170],rot_0_0_9_i:[167,170],rot_0_0_i:[25,167,170],rot_0_0_input:149,rot_0_0_invers:[167,170],rot_0_0_o:[167,170],rot_0_0_output:149,rot_0_0_x0:58,rot_0_17:[158,176],rot_0_17_0:[158,176],rot_0_17_1:[158,176],rot_0_17_word_0_class_bit_0:[158,176],rot_0_17_word_0_class_bit_1:[158,176],rot_0_18:[158,167,170,176,179],rot_0_18_30:[167,170],rot_0_18_31:[167,170],rot_0_19:[158,176],rot_0_1_0:[151,162,164],rot_0_1_1:[151,162,164],rot_0_20:[158,176],rot_0_3:21,rot_0_4_input:148,rot_0_4_output:148,rot_0_5_input:149,rot_0_5_output:149,rot_1_0_input:149,rot_1_0_output:149,rot_1_11:[4,167,170],rot_1_11_x0:[167,170],rot_1_11_x1:[167,170],rot_1_11_x2:[167,170],rot_1_11_x3:[167,170],rot_1_11_x4:[167,170],rot_1_11_x5:[167,170],rot_1_11_y0:[167,170],rot_1_11_y1:[167,170],rot_1_11_y2:[167,170],rot_1_11_y3:[167,170],rot_1_11_y4:[167,170],rot_1_11_y5:[167,170],rot_1_1:[167,170],rot_1_1_0:[167,170],rot_1_1_0_i:[167,170],rot_1_1_14:[167,170],rot_1_1_14_o:[167,170],rot_1_1_15:[167,170],rot_1_1_15_o:[167,170],rot_1_1_1:[167,170],rot_1_1_1_i:[167,170],rot_1_1_2:[167,170],rot_1_1_2_i:[167,170],rot_1_1_7_i:[167,170],rot_1_1_8_i:[167,170],rot_1_4:28,rot_1_4_input:148,rot_1_4_output:148,rot_1_5_input:149,rot_1_5_output:149,rot_1_6:179,rot_2_16:177,rot_amount:[110,111,137],rot_compon:4,rotat:[4,8,9,10,11,102,110,111,119,129,137,149,170,179,180,186,188],rotate_0_0:179,rotate_boolean_funct:8,rotate_by_variable_amount:[8,179],rotate_by_variable_amount_continuous_diffusion_analysi:9,rotate_compon:[4,167,170],rotate_continuous_diffusion_analysi:9,rotate_i:130,rotate_left:188,rotate_mzn_constraint:[167,170],rotate_right:188,rotate_x:130,rotate_x_z:[138,139,140],rotation_alpha:105,rotation_amount:[8,9,10,11,102],rotation_amount_lst:9,rotation_amounts_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,171,179],rotation_beta:105,rotation_direct:[8,9],rotation_lay:[148,149],rotation_stag:9,rotx:[138,139,140],rotz:[138,139,140],round:[0,3,14,15,21,28,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,182],round_0:[148,149],round_1:[148,149],round_as_python_dictionari:183,round_at:184,round_component_:178,round_const:[122,123],round_end:[80,82],round_funct:[90,93,94,101,103,105,114,116,117,118,120,121,122,123,125,126,127,128,130,131,132,133,134,135,136,138,139,140,141],round_i:[2,90,94,137],round_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,183],round_initi:[92,105],round_kei:[90,92,94,95,97,102],round_key_id:97,round_key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],round_key_rot:149,round_key_u:[120,121],round_key_v:[120,121],round_list:14,round_numb:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,178,184],round_object:178,round_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],round_start:[80,82],rounds_0_19:113,rounds_20_39:113,rounds_40_59:113,rounds_as_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rounds_as_python_dictionari:184,row:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],rows_n:96,rr:182,rule:[59,60,61,62,63],rule_data_:189,run:[0,22,24,25,32,33,61,62,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],run_autond_pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],run_avalanche_depend:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dependence_uniform:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dieharder_statistics_test:80,run_avalanche_entropi:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_nist_statistics_test:82,run_avalanche_weight:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_cbc_dieharder_statistics_test:80,run_cbc_nist_statistics_test:82,run_correlation_dieharder_statistics_test:80,run_correlation_nist_statistics_test:82,run_dieharder_statistical_tests_tool_interact:80,run_high_density_dieharder_statistics_test:80,run_high_density_nist_statistics_test:82,run_low_density_dieharder_statistics_test:80,run_low_density_nist_statistics_test:82,run_minisat:70,run_nist_statistical_tests_tool_interact:82,run_parkissat:70,run_random_dieharder_statistics_test:80,run_random_nist_statistics_test:82,run_sat_solv:70,run_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_yic:70,runtim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],s0:145,s11:145,s1:145,s2:145,s:[0,9,19,20,21,22,23,24,25,45,50,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],s_1:70,s_3:70,s_box_descript:168,s_box_lay:147,saber:182,sac:182,safei:182,sage:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],sagemath:[26,27,28,29,30,31,32,33,180],sai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],salsa:180,salsa_permut:129,salsapermut:129,salvi:182,same:[0,4,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sampl:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],santa:182,sasaki:182,sat:[0,27,28,55,56,57,58,59,60,61,62,71,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_build_table_templ:168,sat_cipher_model:[59,60,61,62,63,64,65,66,67],sat_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_deterministic_truncated_xor_differential_model:[60,65],sat_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],sat_modadd:159,sat_modadd_seq:159,sat_model:[59,60,61,62,63,64,65,66,67,156,159,160,161,168],sat_n_window_heuristc_bit_level:161,sat_or_milp:[55,56,57,58,159,160,161],sat_xor_differential_model:[59,60,61,62,63,64,65,66,67],sat_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_model:[62,67,156],satciphermodel:[59,60,61,62,63,64,65,66,67],satdeterministictruncatedxordifferentialmodel:[60,65],satisfact:[55,56,57,58],satisfi:[0,20,21,30,31,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],satisfy_gener:58,satmodel:[59,60,61,62,63,64,65,66,67,159,160,161,168],satxordifferentialmodel:[59,60,61,62,63,64,65,66,67],satxorlinearmodel:[62,67,156],save:[79,80,82,96],save_fil:79,sbox:[4,8,9,10,11,87,88,95,148,149,179,180],sbox_0_0:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,171,172,173,179],sbox_0_0_0:[157,165,166,171,172,173],sbox_0_0_1:[157,165,166,171,172,173],sbox_0_0_2:[157,165,166,171,172,173],sbox_0_0_3:[157,165,166,171,172,173],sbox_0_0_x0:[15,168],sbox_0_0_x1:[15,168],sbox_0_0_x2:[15,168],sbox_0_0_x3:168,sbox_0_0_y0:168,sbox_0_0_y1:168,sbox_0_0_y2:168,sbox_0_0_y3:168,sbox_0_10:[151,163,167,169,170],sbox_0_10_act:[167,170],sbox_0_14:[151,163,167,169,170],sbox_0_14_valu:[167,170],sbox_0_15:[],sbox_0_16:179,sbox_0_19:179,sbox_0_1:[4,157,165,166,168,171,172,173,179],sbox_0_1_0:[157,158,165,166,168,171,172,173,176],sbox_0_1_0_i:168,sbox_0_1_1:[157,158,165,166,168,171,172,173,176],sbox_0_1_1_i:168,sbox_0_1_2:[157,165,166,168,171,172,173],sbox_0_1_2_o:168,sbox_0_1_3:[157,165,166,168,171,172,173],sbox_0_1_3_class_bit_0:168,sbox_0_1_3_class_bit_1:168,sbox_0_1_3_o:168,sbox_0_1_6:168,sbox_0_1_6_o:168,sbox_0_1_7:168,sbox_0_1_7_o:168,sbox_0_1_act:168,sbox_0_1_word_0_class:168,sbox_0_1_word_0_class_bit_0:168,sbox_0_1_word_0_class_bit_1:168,sbox_0_2:[4,151,157,163,165,166,167,169,170,171,172,173],sbox_0_2_0:[157,165,166,168,171,172,173],sbox_0_2_0_i:168,sbox_0_2_0_o:168,sbox_0_2_1:[157,165,166,168,171,172,173],sbox_0_2_1_i:168,sbox_0_2_1_o:168,sbox_0_2_2:[157,165,166,168,171,172,173],sbox_0_2_2_i:168,sbox_0_2_3:[157,165,166,168,171,172,173],sbox_0_2_3_i:168,sbox_0_2_3_o:168,sbox_0_2_input:148,sbox_0_2_output:148,sbox_0_2_valu:[167,170],sbox_0_2_word_0_class:[167,169,170],sbox_0_3:[4,157,165,166,171,172,173],sbox_0_3_1:[157,165,166,171,172,173],sbox_0_3_2:[157,165,166,171,172,173],sbox_0_3_3:[157,165,166,171,172,173],sbox_0_3_input:[148,149],sbox_0_3_output:[148,149],sbox_0_4:[4,157,165,166,171,172,173],sbox_0_4_0:[157,165,166,171,172,173],sbox_0_4_1:[157,165,166,171,172,173],sbox_0_4_2:[157,165,166,171,172,173],sbox_0_4_3:[157,165,166,171,172,173],sbox_0_4_input:149,sbox_0_4_output:149,sbox_0_5:[4,157,165,166,168,171,172,173],sbox_0_5_0:[157,165,166,168,171,172,173],sbox_0_5_1:[157,165,166,168,171,172,173],sbox_0_5_2:[157,165,166,171,172,173],sbox_0_5_3:[157,165,166,168,171,172,173],sbox_0_5_i:168,sbox_0_5_o:168,sbox_0_5_x1:15,sbox_0_5_x2:15,sbox_0_5_x3:15,sbox_0_6:[151,163,167,169,170],sbox_0_6_act:[167,169,170],sbox_0_6_word_0_class:[167,169,170],sbox_1_0:4,sbox_1_1:4,sbox_1_2:4,sbox_1_2_input:148,sbox_1_2_output:148,sbox_1_3:4,sbox_1_3_input:[148,149],sbox_1_3_output:[148,149],sbox_1_4:4,sbox_1_4_input:149,sbox_1_4_output:149,sbox_1_5:4,sbox_3_56:28,sbox_bool_func:8,sbox_compon:[4,9,168],sbox_continuous_diffusion_analysi:9,sbox_dictionari:9,sbox_ineq:50,sbox_inequ:50,sbox_input_s:168,sbox_lay:[95,98],sbox_layer_picn:95,sbox_lookup_t:9,sbox_mant:168,sbox_precomput:[0,6,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_precomputations_mix_column:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_pres:50,sbox_properti:4,sbox_that_should_be_first:179,sbox_that_should_be_second:179,sboxes_compon:[84,115],sboxes_ddt_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],sboxes_lat_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],scenario:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scenario_dict:187,schanck:182,schedul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scheme:182,schloss:182,schwabe:182,sci:182,score:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],script:180,search:[0,21,22,23,25,26,27,28,30,31,32,33,55,56,57,58,60,61,62,63,65,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,169,180,182],second:[0,15,20,21,22,23,24,25,45,50,55,56,57,58,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],second_step_solver_nam:24,section:70,secur:[89,182],see:[27,28,30,31,33,63,70,71,80,82,151,162,164,168,179],seed:[55,56,57,58],seen:[46,54,112,113,114,151,162,164,177],seiler:182,select:182,select_bit:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],select_bits_continuous_diffusion_analysi:9,select_boolean_funct:4,select_properties_funct:4,select_word:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],self:[0,3,14,27,28,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],semi:182,separ:[46,59,60,61,62,63],sequenc:[0,15,17,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],sequence_oper:188,sequenti:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,177],set:[0,3,8,10,11,17,19,20,21,22,23,24,25,30,31,32,45,46,50,54,55,56,57,58,61,66,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,185],set_2d_array_element_from_1d_array_index:190,set_bodi:189,set_build:189,set_component_solut:77,set_component_solution_valu:[19,20,21,22,23,24,25],set_component_value_weight_sign:77,set_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77],set_foot:189,set_from_hex_str:8,set_head:189,set_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_input_bit_posit:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_input_id_link:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_max:54,set_max_number_of_carries_on_arx_ciph:58,set_max_number_of_nonlinear_carri:58,set_min:54,set_testing_data_amount:79,set_variables_nam:4,set_vector_depend:2,set_vector_dependence_uniform:2,set_vector_entropi:2,set_vector_weight:2,seurin:182,sever:89,sglytqh2017:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],sgn_function:190,sha1:180,sha1_hash_funct:113,sha1hashfunct:113,sha256:114,sha2:180,sha2_hash_funct:114,sha2hashfunct:114,sha:[113,114],shamir:182,shape:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],shi_modadd_0_1:[159,160,161],shi_pre_modadd_0_1_0:[159,160,161],shi_pre_modadd_0_1_1:[159,160,161],shift:[0,4,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,188],shift_0_0:[106,109,169,179],shift_0_0_0:[159,169],shift_0_0_0_i:169,shift_0_0_1:[159,160,161,169],shift_0_0_1_i:169,shift_0_0_26_o:169,shift_0_0_27:169,shift_0_0_27_o:169,shift_0_0_28:169,shift_0_0_29:[159,160,161,169],shift_0_0_2:[159,160,161,169],shift_0_0_2_i:169,shift_0_0_30:[159,160,161,169],shift_0_0_30_i:169,shift_0_0_30_o:169,shift_0_0_31:[159,160,161,169],shift_0_0_31_i:169,shift_0_0_31_o:169,shift_0_0_6:169,shift_0_0_6_o:169,shift_0_0_7:169,shift_0_0_7_o:169,shift_0_0_i:169,shift_0_0_invers:169,shift_0_0_o:169,shift_0_0_x0:169,shift_0_0_x10:169,shift_0_0_x11:169,shift_0_0_x12:169,shift_0_0_x13:169,shift_0_0_x14:169,shift_0_0_x15:169,shift_0_0_x16:169,shift_0_0_x17:169,shift_0_0_x18:169,shift_0_0_x19:169,shift_0_0_x1:169,shift_0_0_x20:169,shift_0_0_x21:169,shift_0_0_x22:169,shift_0_0_x23:169,shift_0_0_x24:169,shift_0_0_x25:169,shift_0_0_x26:169,shift_0_0_x27:169,shift_0_0_x28:169,shift_0_0_x29:169,shift_0_0_x2:169,shift_0_0_x30:169,shift_0_0_x31:169,shift_0_0_x3:169,shift_0_0_x4:169,shift_0_0_x5:169,shift_0_0_x6:169,shift_0_0_x7:169,shift_0_0_x8:169,shift_0_0_x9:169,shift_0_0_y0:169,shift_0_0_y10:169,shift_0_0_y11:169,shift_0_0_y12:169,shift_0_0_y13:169,shift_0_0_y14:169,shift_0_0_y15:169,shift_0_0_y16:169,shift_0_0_y17:169,shift_0_0_y18:169,shift_0_0_y19:169,shift_0_0_y1:169,shift_0_0_y20:169,shift_0_0_y21:169,shift_0_0_y22:169,shift_0_0_y23:169,shift_0_0_y24:169,shift_0_0_y25:169,shift_0_0_y26:169,shift_0_0_y27:169,shift_0_0_y28:169,shift_0_0_y29:169,shift_0_0_y2:169,shift_0_0_y30:169,shift_0_0_y31:169,shift_0_0_y3:169,shift_0_0_y4:169,shift_0_0_y5:169,shift_0_0_y6:169,shift_0_0_y7:169,shift_0_0_y8:169,shift_0_0_y9:169,shift_0_18:169,shift_0_18_30:169,shift_0_18_31:169,shift_0_18_act:169,shift_0_18_valu:169,shift_1_12:169,shift_1_12_x0:169,shift_1_12_x1:169,shift_1_12_x2:169,shift_1_12_y0:169,shift_1_12_y1:169,shift_1_12_y2:169,shift_1_12_y3:169,shift_1_12_y4:169,shift_1_12_y5:169,shift_amount:[8,9,10,11],shift_amount_lst:9,shift_amount_var_shift_0_2:175,shift_by_variable_amount:[8,179],shift_by_variable_amount_continuous_diffusion_analysi:9,shift_column_compon:115,shift_compon:169,shift_continuous_diffusion_analysi:9,shift_direct:[8,9,10,11],shift_id:70,shift_left:188,shift_mzn_constraint:169,shift_right:188,shift_row_0_0:179,shift_row_compon:84,shift_rows_0_0:179,shift_smount:11,shift_stag:9,shiftrow:170,shit:9,should:[0,8,10,32,33,45,50,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],show:[0,23,24,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],shrink:96,shuffle_cel:97,si:190,siam:182,side:70,sigma:[8,179,180],sigma_0_0:179,sigma_continuous_diffusion_analysi:9,sigmoid:[],sign:[59,60,61,62,63,64,65,66,67,77,151,159,160,161,162,163,164,167,169,170,174,175,177,190],signatur:182,signed_dist:190,signific:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],silicon:[],similar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],simon:[22,25,26,27,28,29,30,31,32,33,151,152,156,162,164,177,180,182],simon_block_ciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simonblockciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simplifi:[168,177],simplify_input:190,sinc:177,singl:[0,20,21,22,24,25,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],size:[0,8,9,10,11,14,32,33,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,168,179,186],skinni:[4,158,176,180,182],skinny_block_ciph:[4,103,158,176],skinnyblockciph:[4,103,158,176],skip:[0,3,17,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],slightli:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],small:[50,148,149,168,180,182],small_swap:[122,123],smaller:[182,189],smallest:[22,24,25,148,149],smith:182,smt2:71,smt:[0,63,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_and:76,smt_assert:76,smt_build_table_templ:168,smt_carri:76,smt_cipher_model:72,smt_constraint:[151,152,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_deterministic_truncated_xor_differential_model:[],smt_deterministic_truncated_xor_differential_trail_constraint:[],smt_distinct:76,smt_equival:76,smt_get_sbox_probability_constraint:168,smt_impli:76,smt_ite:76,smt_lipmaa:76,smt_modadd:159,smt_modadd_seq:159,smt_model:[71,72,73,74,75,156,168],smt_not:76,smt_or:76,smt_xor:76,smt_xor_differential_model:74,smt_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_model:[75,156],smtciphermodel:72,smtdeterministictruncatedxordifferentialmodel:73,smtmodel:[71,72,73,74,75,168],smtxordifferentialmodel:74,smtxorlinearmodel:[75,156],sneyd:182,snow3g:180,snow3g_key_stream:145,snow3g_state_initi:145,snow3g_stream_ciph:145,snow3gstreamciph:145,snow:145,so:[46,111,168],societi:182,soda:182,softwar:[82,182],solut:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,163,164,167,169,170,174,175,177,182],solution_numb:[19,20,21,22,23,24,25],solution_to_writ:77,solv:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,182],solve_full_two_steps_xor_differential_model:24,solve_model:24,solve_tim:[19,20,21,22,23,24,25,77],solver:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,180],solver_nam:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77],solver_output:[19,20,21,22,23,24,25],solver_spec:70,solver_typ:77,solving_time_second:[21,61,62,66,67,71,72,73,74,75,77],some:[0,4,26,30,31,45,50,63,70,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],sometim:3,song:182,sort:[14,179],sort_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],sort_cipher_graph:14,sort_input_id_links_and_input_bit_posit:14,sorted_ciph:14,sourc:50,sover:182,soviet:182,sp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sp_box:[122,123],space:[59,60,61,62,63],spaenlehau:182,sparkl:180,sparkle_permut:130,sparklepermut:130,sparx:180,sparx_block_ciph:104,sparxblockciph:104,special:[10,11],specif:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,74,75,77,111],specifi:[0,4,8,9,13,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],speck32:182,speck32_64_r22_cryptominisat:77,speck32_64_r22_sat:77,speck:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179,180,182],speck_block_ciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],speck_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],speck_diff_find:[159,160,161],speck_k64_p32_o32_r22:72,speck_p32_k64_o32_r1:21,speck_p32_k64_o32_r22:[59,64],speck_p32_k64_o32_r2:22,speck_p32_k64_o32_r3:21,speck_p32_k64_o32_r3_32_64_avalanche_index0_10lines_10240bit:[],speck_p32_k64_o32_r3_32_64_cbc_index0_2lines_524288bit:[],speck_p32_k64_o32_r3_32_64_correlation_index0_10lines_2600960bit:[],speck_p32_k64_o32_r3_32_64_high_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_low_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_random_index0_10lines_2600960bit:[],speck_p32_k64_o32_r4:[19,20,21,22,23,24,25,62,67,71,72,73,74,75,77],speck_p32_k64_o32_r5:[22,61,66,74],speck_without_key_schedul:[77,156],speckblockciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],spectra:182,split:[3,8,9,110,111,177],split_cipher_graph_into_top_bottom:13,spn:[0,23,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],spongent:180,spongent_pi_fsr_permut:131,spongent_pi_permut:132,spongent_pi_precomputation_permut:133,spongentpi:[131,132,133],spongentpifsrpermut:131,spongentpipermut:132,spongentpiprecomputationpermut:133,springer:[51,168,182],squar:4,st:[80,82],stackoverflow:54,stage:143,standard:[21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,72,73,74,75,76,77,110,111,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180],start:[22,24,25,32,33,61,62,66,67,74,75,80,82],start_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149],starting_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state:[70,84,95,99,101,103,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,142,143,144,146,179],state_0_var_shift_0_2_0:175,state_0_var_shift_0_2_1:175,state_3_var_shift_0_2_30:175,state_3_var_shift_0_2_31:175,state_bit_s:[110,111,131,132,133,142,146],state_i:130,state_initi:[103,125,126,127,147],state_of_compon:[119,129,137],state_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state_transform:[110,111],state_word_id:[110,111],state_word_rang:[110,111],state_x:130,statement:54,statist:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],statistical_test:[79,80,82],statistical_test_option_list:82,statisticaltest:82,statu:[30,31,59,60,61,62,63,64,65,66,67],stdin:70,stdtype:188,ste1988:182,step:[0,2,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,188],stern:182,stop:[22,24,25,61,62,66,67,74,75],store:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],store_intermediate_output:3,str:[17,27,28,30,31,54,55,56,57,58,76,82],str_constraint:[55,56,57,58],str_model_path:[55,56,57,58],str_solver:[55,56,57,58],strategi:58,stream:[80,82],stream_ciph:[141,142,143,144,145,146,147],strict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],strictli:[112,113,114],string:[0,3,4,8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,168,179,190],string_dictionari:3,string_python_cod:3,string_total_weight:[19,20,21,22,23,24,25],structur:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sts_report_dict:82,studi:4,sub:[13,17],sub_cel:97,sub_kei:92,sub_key_temp_list:90,sub_keys_zero:[90,93],sub_quarter_round_latin_d:137,sub_var:17,subgraph:13,subkei:107,subkey_schedul:107,submatric:4,subprocess:[59,60,61,62,63,64,65,66,67,71],substract:[9,159,160,161],substrat:[159,160,161],subtract:[10,11,17,160],suffix:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],suffix_dict:[],suggest:77,suit:82,sum:[22,23,24,25,28,46,55,56,57,58,159,160,161,164,177],sum_value_kei:190,summing_up:190,sun:182,super_class:137,superclass:[59,60,61,62],superdetermin:182,supplementari:[30,31],suppli:70,support:[55,56,57,58,151,152,156,162,164],sur:182,swap_compon:183,swedish:182,symbol:182,symmetr:[112,113,114,182],symposium:182,syrup:63,syrup_sag:63,syst:182,system:[0,15,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],systemsof:182,t:[0,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,188,190],tabl:[0,9,10,11,23,24,28,33,46,48,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,162,164,168,176,177,182],table_item:168,table_of_solution_length:[23,24],table_of_solutions_length:[23,24],table_sbox_0_5:168,table_typ:168,tag:179,tail:17,takagi:182,take:[0,13,27,28,30,31,32,33,50,59,60,61,62,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],taken:[79,80,82,177],tamaki:182,target:[26,59,60,61,62,63,71],target_bit_posit:14,target_link:14,td:[30,31],tea:[59,60,61,62,63,64,65,66,67,154,159,160,161,169,180],tea_block_ciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],tea_p64_k128_o64_r32:[59,60,61,62,63,64,65,66,67],teablockciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],techniqu:[0,26,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],temp_0_0_act:177,temp_0_0_valu:177,temp_0_15_act:177,temp_0_15_valu:177,temp_1_15_act:177,temp_1_15_valu:177,temp_carry_plaintext_32:160,temp_carry_plaintext_33:160,temp_carry_plaintext_34:160,temp_input_plaintext_62:160,temp_input_plaintext_63:160,temp_subkey_gener:90,templat:[71,72,73,74,75,168,180],templatemanag:189,tensorflow:[],term:13,termin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test:[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_against_reference_cod:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_json:190,test_pass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_report:82,test_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_typ:82,test_vector_check:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tester:180,testing_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tests_configur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],text:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],th:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],than:[0,22,24,25,32,33,58,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,190],thei:[25,59,60,61,62,63,64,65,66,67,70,74,75,168],them:[27,28,30,31,32,33,55,63,70,189,190],then_constraint:54,then_constraints_list:54,theorem:9,theoret:182,theori:182,therefor:[59,60,61,62,71],thesi:182,theta:[179,180],theta_definit:[125,126,127,138,139,140],theta_keccak:8,theta_keccak_0_0:[125,179],theta_xoodoo:8,theta_xoodoo_0_0:[138,179],thetakeccak:172,thetaxoodoo:173,thi:[0,3,8,9,10,11,14,26,32,33,45,46,50,51,54,55,59,60,61,62,63,70,71,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,168,169,176,177,179,180,184,189],third:179,thoma:182,thorkn:95,those:[26,59,60,61,62,63,64,65,66,67,96],three:70,threefish:180,threefish_block_ciph:107,threefishblockciph:107,threshold:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],threshold_for_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],through:26,tii:14,tii_dir_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tii_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tillich:182,time:[0,15,23,24,25,55,56,57,58,70,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],time_keyword:[],time_memory_extractor:[],timeout:[0,1,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],timeout_in_seconds_:[55,56,57,58],tinyjambu:180,tinyjambu_32bits_word_permut:134,tinyjambu_fsr_32bits_word_permut:135,tinyjambu_permut:136,tinyjambufsrwordbasedpermut:135,tinyjambupermut:136,tinyjambuwordbasedpermut:134,tmp_cipher_oper:4,to_bias_for_correlation_measur:77,to_bias_for_probability_measur:77,to_bias_for_xor_linear_trail:77,to_binari:185,to_bit:50,to_correlation_for_bias_measur:77,to_correlation_for_probability_measur:77,to_correlation_for_xor_linear_trail:77,to_pars:[],to_probability_for_bias_measur:77,to_probability_for_correlation_measur:77,to_probability_for_xor_linear_trail:77,tobyt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],todo:182,togeth:[10,55,56,57,58,77,189],toi:[119,148,149],tone:182,tool:[80,82,182],top:13,top_half_quarter_round:[119,129,144],topolog:14,topological_sort:14,tosc:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],total:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],total_weight:[19,20,21,22,23,24,25,27,28,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],toy_ciph:[80,82],toyspn1:180,toyspn2:180,traceback:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],trail:[19,20,21,22,23,25,26,27,28,30,31,32,33,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,169,180,182],trail_with_sign:77,trails_with_sign:77,train:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],train_gohr_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],train_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],training_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tran:182,transact:182,transform:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],transform_first_step_model:24,transform_gf2nmatrix_to_binmatrix:8,transformations_flag:[90,93],transit:[50,54,168],translat:63,transpar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],transpos:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],triv:146,trivium:180,trivium_key_stream:146,trivium_state_initi:146,trivium_stream_ciph:146,triviumstreamciph:146,trunc_binvar:[27,28],trunc_wordvar:[30,31],truncat:[19,20,22,23,24,25,28,31,51,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],truth:48,tupl:[17,27,28,54,70,168,177,188],tutori:182,tw2012:182,tweak:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tweak_bit_s:[99,107],twenti:182,twice:[55,56,57,58],two:[13,23,24,48,54,59,60,61,62,63,64,65,66,67,70,76,77,79,80,82,111,143,151,152,156,159,160,161,162,164,177,179,182],twofish:[4,180],twofish_block_ciph:[4,108],twofish_key256_r16:108,twofishblockciph:[4,108],twoterms_milp_probability_xor_linear_constraint:[159,160,161],txt:[77,80,82,189],type1_key_schedule_xor:89,type1_sbox:89,type2_key_schedule_and:89,type2_key_schedule_xor:89,type2_modadd1:89,type2_modadd2:89,type2_xor1:89,type2_xor2:89,type:[0,4,55,56,57,58,59,60,61,62,63,64,65,66,67,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,188],u:[48,70,182,190],uint8:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],uint:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ultra:182,unbalanc:182,uncertainti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],under:[0,4,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],underdefin:182,underdetermin:182,underli:4,undisturb:[168,180],unformatted_input:11,unfortun:70,uniform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],unique_length:179,univ:182,unknown:[27,28,30,31],unsign:10,unspecifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],until:[0,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],updat:[17,95],update_and_or_ddt_valid_prob:22,update_and_or_lat_valid_prob:25,update_available_bits_with_component_input_bit:14,update_available_bits_with_component_output_bit:14,update_blackbox_distinguisher_tests_d:[],update_cipher_input:[178,179],update_component_input:179,update_component_output_id:[],update_const:99,update_constraints_for_equal_typ:[71,72,73,74,75],update_constraints_for_more_than_one_bit:157,update_constraints_for_not_equal_typ:[71,72,73,74,75],update_dictionary_that_contains_inequalities_for_large_sbox:46,update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,update_dictionary_that_contains_inequalities_for_small_sbox:50,update_dictionary_that_contains_wordwise_truncated_input_inequ:48,update_dictionary_that_contains_wordwise_truncated_mds_inequ:47,update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_input:48,update_dictionary_that_contains_xor_inequalities_between_n_input_bit:49,update_dictionary_that_contains_xor_inequalities_for_specific_matrix:49,update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix:48,update_distinguisher_tests_d:[],update_input:179,update_input_id_link:178,update_input_links_from_round:14,update_intermediate_structur:3,update_kei:93,update_key_regist:[95,98],update_output_bit:14,update_partial_result:[],update_sbox_ddt_valid_prob:[22,24],update_sbox_lat_valid_prob:25,update_xor_linear_constraints_for_more_than_one_bit:156,update_xor_linear_constraints_for_more_than_two_bit:33,upper:[32,33,58],us:[0,3,4,9,10,11,13,21,22,24,25,26,27,28,29,30,31,32,33,45,46,47,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,159,160,161,162,164,168,177,179,180,182,184,190],usa:182,usefulfunct:180,user:26,usr:82,usual:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],util:[19,20,21,22,23,24,25,27,28,30,31,32,33,50,59,61,62,64,66,67,71,72,73,74,75,143,168,185,188,189],v0:[54,177],v1:[54,177],v2:99,v:[17,54,70,145,177,182],val:[3,11,54,154],val_acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],val_loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],valid:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177],valid_point:[45,51,54,168],valid_prob:[22,24,25,168],valid_transformations_matrix:46,valid_transit:168,valu:[0,4,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,177,179,186,190],value1:190,value2:190,valueerror:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],van:182,var_dict:[],var_if:54,var_if_list:54,var_list:54,var_nam:15,var_rot_0_0:179,var_rotate_0_0:179,var_shift_0_0:179,var_shift_0_2:175,var_shift_0_2_0:175,var_shift_0_2_1:175,var_shift_0_2_2:175,var_shift_0_2_30:175,var_shift_0_2_31:175,var_shift_0_2_x0:175,var_shift_0_2_x10:175,var_shift_0_2_x11:175,var_shift_0_2_x12:175,var_shift_0_2_x13:175,var_shift_0_2_x14:175,var_shift_0_2_x15:175,var_shift_0_2_x16:175,var_shift_0_2_x17:175,var_shift_0_2_x18:175,var_shift_0_2_x19:175,var_shift_0_2_x1:175,var_shift_0_2_x20:175,var_shift_0_2_x21:175,var_shift_0_2_x22:175,var_shift_0_2_x23:175,var_shift_0_2_x24:175,var_shift_0_2_x25:175,var_shift_0_2_x26:175,var_shift_0_2_x27:175,var_shift_0_2_x28:175,var_shift_0_2_x29:175,var_shift_0_2_x2:175,var_shift_0_2_x30:175,var_shift_0_2_x31:175,var_shift_0_2_x32:175,var_shift_0_2_x33:175,var_shift_0_2_x34:175,var_shift_0_2_x35:175,var_shift_0_2_x36:175,var_shift_0_2_x37:175,var_shift_0_2_x38:175,var_shift_0_2_x39:175,var_shift_0_2_x3:175,var_shift_0_2_x40:175,var_shift_0_2_x41:175,var_shift_0_2_x42:175,var_shift_0_2_x43:175,var_shift_0_2_x44:175,var_shift_0_2_x45:175,var_shift_0_2_x46:175,var_shift_0_2_x47:175,var_shift_0_2_x48:175,var_shift_0_2_x49:175,var_shift_0_2_x4:175,var_shift_0_2_x50:175,var_shift_0_2_x51:175,var_shift_0_2_x52:175,var_shift_0_2_x53:175,var_shift_0_2_x54:175,var_shift_0_2_x55:175,var_shift_0_2_x56:175,var_shift_0_2_x57:175,var_shift_0_2_x58:175,var_shift_0_2_x59:175,var_shift_0_2_x5:175,var_shift_0_2_x60:175,var_shift_0_2_x61:175,var_shift_0_2_x62:175,var_shift_0_2_x63:175,var_shift_0_2_x6:175,var_shift_0_2_x7:175,var_shift_0_2_x8:175,var_shift_0_2_x9:175,var_shift_0_2_y0:175,var_shift_0_2_y10:175,var_shift_0_2_y11:175,var_shift_0_2_y12:175,var_shift_0_2_y13:175,var_shift_0_2_y14:175,var_shift_0_2_y15:175,var_shift_0_2_y16:175,var_shift_0_2_y17:175,var_shift_0_2_y18:175,var_shift_0_2_y19:175,var_shift_0_2_y1:175,var_shift_0_2_y20:175,var_shift_0_2_y21:175,var_shift_0_2_y22:175,var_shift_0_2_y23:175,var_shift_0_2_y24:175,var_shift_0_2_y25:175,var_shift_0_2_y26:175,var_shift_0_2_y27:175,var_shift_0_2_y28:175,var_shift_0_2_y29:175,var_shift_0_2_y2:175,var_shift_0_2_y30:175,var_shift_0_2_y31:175,var_shift_0_2_y3:175,var_shift_0_2_y4:175,var_shift_0_2_y5:175,var_shift_0_2_y6:175,var_shift_0_2_y7:175,var_shift_0_2_y8:175,var_shift_0_2_y9:175,variabl:[0,4,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182,190],variable2valu:76,variable_0:[70,76],variable_1:[70,76],variable_2:70,variable_:70,variable_shift_compon:175,variablerot:174,variables_list:177,variables_n:70,variables_nam:4,variableshift:175,variant:[45,50],variou:189,vbc:182,vector:[0,2,3,50,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],vectorspac:17,veector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],verbel:182,verbos:[0,3,6,8,10,11,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,153,154,157,158,165,166,167,168,169,170,171,172,173,174,175,176],verbose_print:26,vercauteren:182,veri:168,verifi:33,verlag:182,version:[123,168],vertic:168,via:95,view:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],vikkelso:182,vinegar:182,visit:[59,60,61,62,63],vits:182,vol:182,volum:182,vs:182,vulner:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],vx:17,vy:17,w1:147,w2:147,w:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],w_id:145,w_po:145,wa:[54,89,177],wai:[14,33,177,179],wang:182,want:[0,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],wcc:182,we:[0,4,28,50,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,190],weak:89,webhom:80,weight:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],weight_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],weight_xor_linear_constraint:[25,33,62,67,75],well:63,wenzel:182,were:[59,60,61,62],when:[0,23,24,26,27,28,29,30,31,32,33,54,55,56,57,58,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],whenev:63,where:[0,8,10,11,17,28,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,185,190],whether:[0,16,17,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],which:[4,8,13,22,23,24,25,28,31,50,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,86,143,148,149,179],whirlpool:180,whirlpool_hash_funct:115,whirlpoolhashfunct:115,whitening_key_gener:90,whitening_key_list:90,whole:70,whose:[4,19,20,21,22,23,24,25,32,33,58,61,62,66,67,70,74,75,77,112,113,114],wich:177,william:182,window:180,window_s:161,window_size_0_cnf:69,window_size_1_cnf:69,window_size_2_cnf:69,window_size_3_cnf:69,window_size_4_cnf:69,window_size_5_cnf:69,window_size_by_round:[61,66],window_size_list:[55,56,57,58],window_size_weight_pr_var:[59,60,61,62,63,64,65,66,67],within:[55,56,57,58,179],wolf:182,word:[0,4,8,9,10,11,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],word_bas:179,word_based_c_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],word_index:[19,20,21,22,23,24,25,110,111,158],word_oper:179,word_operation_properti:4,word_permut:107,word_sbox_0_10:24,word_sbox_0_11:24,word_sbox_0_12:24,word_sbox_0_13:24,word_sbox_0_14:24,word_sbox_0_15:24,word_sbox_0_16:24,word_sbox_0_1:24,word_sbox_0_26:24,word_sbox_0_27:24,word_sbox_0_28:24,word_sbox_0_29:24,word_sbox_0_2:24,word_sbox_0_3:24,word_sbox_0_4:24,word_sbox_0_5:24,word_sbox_0_6:24,word_sbox_0_7:24,word_sbox_0_8:24,word_sbox_0_9:24,word_sbox_1_0:24,word_sbox_1_10:24,word_sbox_1_11:24,word_sbox_1_12:24,word_sbox_1_13:24,word_sbox_1_14:24,word_sbox_1_15:24,word_sbox_1_1:24,word_sbox_1_21:24,word_sbox_1_22:24,word_sbox_1_23:24,word_sbox_1_24:24,word_sbox_1_2:24,word_sbox_1_3:24,word_sbox_1_4:24,word_sbox_1_5:24,word_sbox_1_6:24,word_sbox_1_7:24,word_sbox_1_8:24,word_sbox_1_9:24,word_siz:[0,3,4,8,9,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,186,190],wordlist:186,wordlist_to_bytearrai:186,wordlist_to_int:186,wordpermut:176,words_per_input:11,wordsiz:[47,48],wordstring_vari:[3,153,154,167,168,169,170,174,175],wordwis:[151,152,154,156,168,169,177,180],work:[59,60,61,62,63,64,65,66,67],workshop:182,worst:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],would:[0,8,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],write:[26,27,28,29,30,31,32,33,55,56,57,58,77],write_minizinc_model_to_fil:[55,56,57,58],write_model_to_fil:77,write_solution_into_a_fil:77,write_solution_to_fil:77,www:[151,162,164,182],x0:[8,17,179],x0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x1:[8,17,177,179],x1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x2:[8,17,179],x3:[8,17,177,179],x4:[17,179],x5:[17,179],x6:[17,179],x7:[17,179],x8:179,x:[0,10,11,16,17,30,31,33,50,54,59,60,61,62,69,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182,185,188,190],x_0:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_10:[26,27,28,29,30,31,32,33,157,165,166,167,168,169,170,171,172,173],x_110:156,x_111:156,x_118:177,x_119:177,x_11:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176],x_126:[157,158,163,165,166,171,172,173,176],x_127:[157,158,163,165,166,171,172,173,176],x_12:[32,33,151,157,165,166,168,169,171,172,173],x_13:[27,28,32,33,157,158,165,166,168,169,171,172,173,176],x_142:[27,28],x_143:[27,28],x_14:[27,28,32,33,154,158,167,168,169,170,176],x_1571:[30,31],x_1572:[30,31],x_157:[159,160,161],x_158:[152,156],x_159:[152,156,159,160,161],x_15:[27,28,32,33,151,154,158,159,160,161,162,164,167,168,169,170,176],x_160:[159,160,161],x_16:[151,152,156,158,159,160,161,162,164,167,168,170,176,177],x_17:[151,152,156,159,160,161,162,164,167,168,170],x_18:[157,165,166,168,171,172,173],x_19:[157,165,166,168,171,172,173],x_1:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_20:168,x_21:168,x_22:168,x_23:[158,168,176],x_24:[158,168,176],x_25:[157,158,165,166,168,171,172,173,176],x_26:168,x_27:168,x_286:[152,156],x_287:[152,156],x_28:[168,182],x_2918:[30,31],x_2919:[30,31],x_29:168,x_2:[26,27,28,29,30,31,32,33,70,152,154,156,158,159,160,161,167,168,169,170,176,177],x_3060:[30,31],x_3061:[30,31],x_3070:[30,31],x_3071:[30,31],x_3078:[30,31],x_3079:[30,31],x_30:[159,160,161,163,167,168,170,177],x_316:33,x_317:33,x_318:33,x_319:33,x_31:[152,156,158,159,160,161,163,167,168,170,176,177],x_32:[151,152,156,158,159,160,161,162,163,164,168,176,177],x_33:[151,158,162,163,164,168,176,177],x_34:[151,162,164,177],x_35:[151,162,164],x_36:[151,162,164],x_37:[151,162,164],x_38:[151,162,164],x_39:[151,162,164,177],x_3:[26,27,28,29,30,31,32,33,70,76,154,158,159,160,161,168,169,176,177],x_40:[151,162,164,177],x_41:[151,162,164,177],x_42:[151,162,164,177],x_43:[151,162,164,177],x_44:[151,162,164,177],x_45:[151,162,164,177],x_46:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_47:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_48:[151,159,160,161,162,164,177],x_49:[151,159,160,161,162,164,177],x_4:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_50:[151,159,160,161,162,164],x_51:[151,159,160,161,162,164],x_52:[151,159,160,161,162,164],x_53:[151,159,160,161,162,164],x_54:[151,159,160,161,162,164],x_55:[151,159,160,161,162,164],x_56:[151,159,160,161,162,164],x_57:[151,159,160,161,162,164],x_58:[151,159,160,161,162,164],x_59:[151,157,158,159,160,161,162,164,165,166,171,172,173,176],x_5:[26,27,28,29,30,31,32,33,158,167,168,169,170,176,177],x_60:[151,159,160,161,162,164],x_61:[151,159,160,161,162,164],x_62:[151,152,156,158,159,160,161,162,163,164,176,177],x_63:[151,152,156,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_64:[151,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_65:[157,158,159,160,161,163,165,166,171,172,173,176,177],x_66:[159,160,161],x_6:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176,177],x_70:[167,169,170],x_71:[167,169,170],x_7:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_81:177,x_8:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_92:[27,28],x_93:[27,28],x_94:[27,28,159,160,161,177],x_95:[27,28,159,160,161,177],x_96:[27,28,159,160,161],x_97:[27,28,159,160,161],x_9:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_class:[151,152,154,156,157,158,163,165,166,167,168,169,170,171,172,173,176,177],xl:182,xoodoo:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,141,142,143,144,145,146,147,148,149,179,180],xoodoo_invertible_permut:138,xoodoo_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoo_permutation_sbox:140,xoodoo_sbox_permut:140,xoodooinvertiblepermut:138,xoodoopermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoosboxpermut:140,xoofff:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor1:84,xor:[4,8,9,10,11,19,20,26,51,54,55,56,59,63,70,71,72,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,180,184],xor_0_0:[24,97,98,104,124,126,127,139,140,168,179,184],xor_0_0_0:168,xor_0_0_0_class_bit_0:168,xor_0_0_0_class_bit_1:168,xor_0_0_1:168,xor_0_0_2:168,xor_0_0_3:168,xor_0_0_4:168,xor_0_0_5:168,xor_0_0_6:168,xor_0_0_7:168,xor_0_0_act:177,xor_0_0_valu:[168,177],xor_0_0_word_0_class:168,xor_0_0_word_0_class_bit_0:168,xor_0_0_word_0_class_bit_1:168,xor_0_1:[168,184],xor_0_1_0:164,xor_0_1_1:164,xor_0_1_30:164,xor_0_1_31:164,xor_0_1_input:148,xor_0_1_output:148,xor_0_2:[21,177,179],xor_0_2_0:[163,177],xor_0_2_0_i:177,xor_0_2_0_o:[77,177],xor_0_2_10_o:77,xor_0_2_11_o:77,xor_0_2_13:177,xor_0_2_14:177,xor_0_2_14_i:177,xor_0_2_14_o:177,xor_0_2_15:177,xor_0_2_15_i:177,xor_0_2_15_o:177,xor_0_2_16_i:[77,177],xor_0_2_17_i:177,xor_0_2_1:[163,177],xor_0_2_1_i:177,xor_0_2_1_o:177,xor_0_2_26_i:77,xor_0_2_27_i:77,xor_0_2_2:177,xor_0_2_2_i:177,xor_0_2_30_i:177,xor_0_2_31_i:177,xor_0_2_62:163,xor_0_2_63:163,xor_0_2_7_o:77,xor_0_2_8_o:77,xor_0_2_9_o:77,xor_0_2_i:177,xor_0_2_input:149,xor_0_2_o:177,xor_0_2_output:149,xor_0_2_x0:177,xor_0_2_x10:177,xor_0_2_x11:177,xor_0_2_x12:177,xor_0_2_x13:177,xor_0_2_x14:177,xor_0_2_x15:177,xor_0_2_x16:177,xor_0_2_x17:177,xor_0_2_x18:177,xor_0_2_x19:177,xor_0_2_x1:177,xor_0_2_x20:177,xor_0_2_x21:177,xor_0_2_x22:177,xor_0_2_x23:177,xor_0_2_x24:177,xor_0_2_x25:177,xor_0_2_x26:177,xor_0_2_x27:177,xor_0_2_x28:177,xor_0_2_x29:177,xor_0_2_x2:177,xor_0_2_x30:177,xor_0_2_x31:177,xor_0_2_x3:177,xor_0_2_x4:177,xor_0_2_x5:177,xor_0_2_x6:177,xor_0_2_x7:177,xor_0_2_x8:177,xor_0_2_x9:177,xor_0_2_y0:177,xor_0_2_y10:177,xor_0_2_y11:177,xor_0_2_y12:177,xor_0_2_y13:177,xor_0_2_y14:177,xor_0_2_y15:177,xor_0_2_y1:177,xor_0_2_y2:177,xor_0_2_y3:177,xor_0_2_y4:177,xor_0_2_y5:177,xor_0_2_y6:177,xor_0_2_y7:177,xor_0_2_y8:177,xor_0_2_y9:177,xor_0_31:[23,24,152,156,177],xor_0_31_valu:[152,156],xor_0_31_word_0_class_bit_0:177,xor_0_31_word_0_class_bit_1:177,xor_0_32:177,xor_0_32_30:177,xor_0_32_31:177,xor_0_34:[152,156],xor_0_34_act:[152,156],xor_0_36_11:[30,31],xor_0_36_12:[30,31],xor_0_3_0:164,xor_0_3_1:164,xor_0_3_30:164,xor_0_3_31:164,xor_0_4:[21,179],xor_0_4_0_i:77,xor_0_4_10_i:77,xor_0_4_11_i:77,xor_0_4_13_o:156,xor_0_4_14_o:156,xor_0_4_15_o:156,xor_0_4_7_i:77,xor_0_4_8_i:77,xor_0_4_9_i:77,xor_0_4_o:156,xor_0_5:177,xor_0_5_0_i:177,xor_0_5_14:177,xor_0_5_14_o:177,xor_0_5_15:177,xor_0_5_15_class_bit_0:177,xor_0_5_15_class_bit_1:177,xor_0_5_15_o:177,xor_0_5_1_i:177,xor_0_6:163,xor_0_6_0:163,xor_0_6_1:163,xor_0_6_30:163,xor_0_6_31:163,xor_0_7:[151,162,164,177],xor_0_7_0:[151,162,164],xor_0_7_10:[151,162,164],xor_0_7_11:[151,162,164],xor_0_7_1:[151,162,164],xor_0_7_x0:177,xor_0_7_x10:177,xor_0_7_x11:177,xor_0_7_x12:177,xor_0_7_x13:177,xor_0_7_x14:177,xor_0_7_x15:177,xor_0_7_x16:177,xor_0_7_x17:177,xor_0_7_x18:177,xor_0_7_x19:177,xor_0_7_x1:177,xor_0_7_x20:177,xor_0_7_x21:177,xor_0_7_x22:177,xor_0_7_x23:177,xor_0_7_x2:177,xor_0_7_x3:177,xor_0_7_x4:177,xor_0_7_x5:177,xor_0_7_x6:177,xor_0_7_x7:177,xor_0_7_x8:177,xor_0_7_x9:177,xor_0_7_y0:177,xor_0_7_y10:177,xor_0_7_y11:177,xor_0_7_y1:177,xor_0_7_y2:177,xor_0_7_y3:177,xor_0_7_y4:177,xor_0_7_y5:177,xor_0_7_y6:177,xor_0_7_y7:177,xor_0_7_y8:177,xor_0_7_y9:177,xor_1_0:184,xor_1_10:26,xor_1_10_0_i:26,xor_1_10_0_o:26,xor_1_10_14_o:26,xor_1_10_15_o:26,xor_1_10_1_i:26,xor_1_10_1_o:26,xor_1_10_30_i:26,xor_1_10_31_i:26,xor_1_10_7_i:77,xor_1_10_8_i:77,xor_1_10_9_i:77,xor_1_14:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_1_1:184,xor_1_1_input:148,xor_1_1_output:148,xor_1_2_input:149,xor_1_2_output:149,xor_1_31_word_0_class:[152,156],xor_1_31_word_1_class:[152,156],xor_1_6_0:[152,156],xor_1_6_1:[152,156],xor_1_8_7_o:77,xor_1_8_8_o:77,xor_1_8_9_o:77,xor_2_10:[152,156],xor_2_10_13_o:62,xor_2_10_14:[152,156],xor_2_10_14_o:[62,67,75],xor_2_10_15:[152,156],xor_2_10_15_o:[62,67,75],xor_2_26:177,xor_2_7:4,xor_2_8:[152,156],xor_2_8_0:[152,156],xor_2_8_1:[152,156],xor_3_10_o:25,xor_as_boolean_funct:4,xor_boolean_funct:8,xor_compon:[4,23,24,177],xor_component1:[23,24],xor_component2:[23,24],xor_continuous_diffusion_analysi:9,xor_continuous_diffusion_analysis_two_word:9,xor_differenti:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_differential_first_step:24,xor_differential_first_step_find_all_solut:24,xor_differential_one_solut:[19,20,21,22,23,24,25],xor_input1:[],xor_input2:[],xor_linear:[0,19,20,21,22,23,24,25,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_linear_one_solut:[19,20,21,22,23,24,25],xor_matrix_valu:96,xor_minizinc_constraint:177,xor_round_kei:85,xor_truncated_table_2:[23,24,177],xor_truncated_table_3:[23,177],xor_word:177,xor_wordwise_deterministic_truncated_xor_differential_constraint:177,xor_xor_differential_first_step_constraint:[23,24],xordiff:180,xore:[10,11],xtea:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],xtea_block_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xteablockciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],y0:17,y1:17,y2:17,y3:17,y4:17,y5:17,y6:17,y7:17,y:[0,9,16,17,33,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,190],y_3:[70,76],y_i:9,yang:182,yc2004:182,yice:[63,70,71],yices_pars:71,yield:177,you:[26,32,33,55,71,80,82,111,180],yu:182,z0:17,z1:17,z2:17,z3:[17,71,72,73,74,75,77],z3_parser:71,z4:17,z5:17,z6:17,z7:17,z:[16,17,33,48,70,112,114,182],zentrum:182,zero:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correlation_linear_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zeta:[177,182],zeta_in_1:48,zeta_in_2:48,zetax0:177,zetax1:177,zuc:180,zuc_nonlinear_f:147,zuc_stream_ciph:147,zucstreamciph:147,zz:[17,54]},titles:["Cipher","Algebraic tests","Avalanche tests","Code generator","Component analysis tests","Continuous tests","Evaluator","Generic bit based c functions","Generic functions","Generic functions continuous diffusion analysis","Generic functions vectorized bit","Generic functions vectorized byte","Generic word based c functions","Graph generator","Inverse cipher","Algebraic model","Boolean polynomial ring","Constraints","Usefulfunctions","Cp model","Cp cipher model","Cp deterministic truncated xor differential model","Cp xor differential model","Cp xor differential number of active sboxes model","Cp xor differential trail search fixing number of active sboxes model","Cp xor linear model","Milp model","Milp bitwise deterministic truncated xor differential model","Milp bitwise impossible xor differential model","Milp cipher model","Milp wordwise deterministic truncated xor differential model","Milp wordwise impossible xor differential model","Milp xor differential model","Milp xor linear model","Tea cipher xordiff model","Config","Dictionary containing truncated input pattern inequalities","Dictionary containing truncated mds inequalities","Dictionary containing truncated xor inequalities between n input bits","Dictionary containing xor inequalities between n input bits","Dictionary that contains inequalities for large sboxes","Dictionary that contains inequalities for large sboxes xor linear","Dictionary that contains inequalities for sboxes with undisturbed bits","Dictionary that contains inequalities for small sboxes","Dictionary that contains inequalities for small sboxes xor linear","Generate inequalities for and operation 2 input bits","Generate inequalities for large sboxes","Generate inequalities for wordwise truncated mds matrices","Generate inequalities for wordwise truncated xor with n input bits","Generate inequalities for xor with n input bits","Generate sbox inequalities for trail search","Generate undisturbed bits inequalities for sboxes","Milp name mappings","Mzn predicates","Utils","Minizinc model","Minizinc cipher model","Minizinc deterministic truncated xor differential model","Minizinc xor differential model","Cms cipher model","Cms deterministic truncated xor differential model","Cms xor differential model","Cms xor linear model","Sat model","Sat cipher model","Sat deterministic truncated xor differential model","Sat xor differential model","Sat xor linear model","Mzn predicates","N window heuristic helper","Utils","Smt model","Smt cipher model","Smt deterministic truncated xor differential model","Smt xor differential model","Smt xor linear model","Utils","Utils","Neural network tests","Dataset generator","Dieharder statistical tests","Input data example","Nist statistical tests","Tester","Aes block cipher","Bea1 block cipher","Constant block cipher","Des block cipher","Des exact key length block cipher","Fancy block cipher","Hight block cipher","Identity block cipher","Kasumi block cipher","Lblock block cipher","Lea block cipher","Lowmc block cipher","Lowmc generate matrices","Midori block cipher","Present block cipher","Qarmav2 block cipher","Raiden block cipher","Rc5 block cipher","Simon block cipher","Skinny block cipher","Sparx block cipher","Speck block cipher","Tea block cipher","Threefish block cipher","Twofish block cipher","Xtea block cipher","Blake2 hash function","Blake hash function","Md5 hash function","Sha1 hash function","Sha2 hash function","Whirlpool hash function","Ascon permutation","Ascon sbox sigma no matrix permutation","Ascon sbox sigma permutation","Chacha permutation","Gift permutation","Gift sbox permutation","Gimli permutation","Gimli sbox permutation","Grain core permutation","Keccak invertible permutation","Keccak permutation","Keccak sbox permutation","Photon permutation","Salsa permutation","Sparkle permutation","Spongent pi fsr permutation","Spongent pi permutation","Spongent pi precomputation permutation","Tinyjambu 32bits word permutation","Tinyjambu fsr 32bits word permutation","Tinyjambu permutation","Util","Xoodoo invertible permutation","Xoodoo permutation","Xoodoo sbox permutation","A5 1 stream cipher","Bivium stream cipher","Bluetooth stream cipher e0","Chacha stream cipher","Snow3g stream cipher","Trivium stream cipher","Zuc stream cipher","Toyspn1","Toyspn2","Component","And component","Cipher output component","Concatenate component","Constant component","Fsr component","Intermediate output component","Linear layer component","Mix column component","Modadd component","Modsub component","Modular component","Multi input non linear logical operator component","Not component","Or component","Permutation component","Reverse component","Rotate component","Sbox component","Shift component","Shift rows component","Sigma component","Theta keccak component","Theta xoodoo component","Variable rotate component","Variable shift component","Word permutation component","Xor component","Compound xor differential cipher","Editor","CLAASP: Cryptographic Library for Automated Analysis of Symmetric Primitives","Input","References","Round","Rounds","Integer","Integer functions","Sage scripts","Sequence operations","Templates","Utils"],titleterms:{"1":141,"2":45,"32bit":[134,135],"boolean":[16,70],"byte":11,"function":[7,8,9,10,11,12,110,111,112,113,114,115,180,186],And:151,Not:163,Or:164,a5:141,activ:[23,24],ae:84,algebra:[1,15,180],analysi:[4,9,180],ascon:[116,117,118],autom:180,avalanch:2,base:[7,12],bea1:85,between:[38,39],bit:[7,10,38,39,42,45,48,49,51],bitwis:[27,28],bivium:142,blake2:110,blake:111,block:[84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,180],bluetooth:143,build:70,c:[7,12],chacha:[119,144],cipher:[0,14,20,29,34,56,59,60,61,62,63,64,71,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,141,142,143,144,145,146,147,152,178,180],claasp:180,cm:[59,60,61,62,180],cnf:70,code:3,column:158,compon:[4,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],compound:178,concaten:153,config:35,constant:[86,154],constraint:17,contain:[36,37,38,39,40,41,42,43,44],continu:[5,9],core:124,cp:[19,20,21,22,23,24,25,180],cryptograph:180,data:81,dataset:79,de:[87,88],determinist:[21,27,30,57,60,65,73],dictionari:[36,37,38,39,40,41,42,43,44],diehard:80,differenti:[21,22,23,24,27,28,30,31,32,57,58,60,61,65,66,73,74,178],diffus:9,direct:70,e0:143,editor:179,equal:70,evalu:6,exact:88,exampl:81,fanci:89,fix:24,fsr:[131,135,155],gener:[3,7,8,9,10,11,12,13,45,46,47,48,49,50,51,70,79,96,180],gift:[120,121],gimli:[122,123],grain:124,graph:13,hash:[110,111,112,113,114,115,180],helper:69,heurist:69,hight:90,ident:91,imposs:[28,31],indic:180,inequ:[36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inform:180,input:[36,38,39,45,48,49,81,162,181],integ:[185,186],intermedi:156,invers:14,invert:[125,138],kasumi:92,keccak:[125,126,127,172],kei:88,larg:[40,41,46],layer:157,lblock:93,lea:94,length:88,librari:180,linear:[25,33,41,44,62,67,75,157,162],logic:162,lowmc:[95,96],map:52,matric:[47,96],matrix:117,md5:112,md:[37,47],midori:97,milp:[26,27,28,29,30,31,32,33,52,180],minizinc:[55,56,57,58,180],mix:158,modadd:159,model:[15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,180],modsub:160,modul:180,modular:161,multi:162,mzn:[53,68],n:[38,39,48,49,69],name:52,network:78,neural:78,nist:82,non:162,number:[23,24],oper:[45,162,188],output:[152,156],pattern:36,permut:[116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,165,176,180],photon:128,pi:[131,132,133],polynomi:16,precomput:133,predic:[53,68],present:98,primit:180,qarmav2:99,raiden:100,rc5:101,refer:182,repres:70,revers:166,ring:16,rotat:[167,174],round:[183,184],row:170,run:70,sage:187,salsa:129,sat:[63,64,65,66,67,70,180],sbox:[23,24,40,41,42,43,44,46,50,51,117,118,121,123,127,140,168],script:187,search:[24,50],sequenc:188,sha1:113,sha2:114,shift:[169,170,175],sigma:[117,118,171],simon:102,skinni:103,small:[43,44],smt:[71,72,73,74,75,180],snow3g:145,solver:[63,70],sparkl:130,sparx:104,speck:105,spongent:[131,132,133],standard:[63,71],statist:[80,82,180],stream:[141,142,143,144,145,146,147,180],symmetr:180,tabl:180,tea:[34,106],templat:189,test:[1,2,4,5,78,80,82,180],tester:83,theta:[172,173],threefish:107,tinyjambu:[134,135,136],tmp:180,toi:180,toyspn1:148,toyspn2:149,trail:[24,50],trivium:146,truncat:[21,27,30,36,37,38,47,48,57,60,65,73],twofish:108,undisturb:[42,51],usefulfunct:18,util:[54,70,76,77,137,180,190],variabl:[174,175],vector:[10,11],whirlpool:115,window:69,word:[12,134,135,176],wordwis:[30,31,47,48],xoodoo:[138,139,140,173],xor:[21,22,23,24,25,27,28,30,31,32,33,38,39,41,44,48,49,57,58,60,61,62,65,66,67,73,74,75,177,178],xordiff:34,xtea:109,zuc:147}}) \ No newline at end of file diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index 362b052b..f09536c7 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -5,11 +5,7 @@ from claasp.cipher_modules.component_analysis_tests import fsr_properties from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher - - -def test_generate_boolean_polynomial_ring_from_cipher(): - fancy = FancyBlockCipher(number_of_rounds=3) - generate_boolean_polynomial_ring_from_cipher(fancy) +from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher def test_get_all_operations(): fancy = FancyBlockCipher(number_of_rounds=3) @@ -21,13 +17,17 @@ def test_component_analysis_tests(): components_analysis = CipherComponentsAnalysis(fancy).component_analysis_tests() assert len(components_analysis) == 9 -def test_fsr_properties(): - fsr_component = FSR(0, 0, ["input"], [[0, 1, 2, 3]], 4, [[[4, [[1, [0]], [3, [1]], [2, [2]]]]], 4]) - operation = [fsr_component, 1, ['fsr_0_0']] - dictionary = fsr_properties(operation) - assert dictionary['fsr_word_size'] == 4 - assert dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] + aes = AESBlockCipher(word_size=8, state_size=2, number_of_rounds=2) + result = CipherComponentsAnalysis(aes).component_analysis_tests() + assert len(result) == 7 + +@pytest.mark.filterwarnings("ignore::DeprecationWarning:") +def test_print_component_analysis_as_radar_charts(): + aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) + fig = CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() + assert str(type(fig)) == "" +def test_fsr_properties(): e0 = BluetoothStreamCipherE0(keystream_bit_len=2) dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() assert dictionary[8]["number_of_registers"] == 4 diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 451bcbc0..76392280 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -41,7 +41,6 @@ from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher from claasp.cipher_modules.neural_network_tests import get_differential_dataset from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network -from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis EVALUATION_PY = 'evaluation.py' @@ -71,25 +70,6 @@ def test_algebraic_tests(): assert d != compare_result # skipped (need to be fixed) - -def test_analyze_cipher(): - sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, - "run_avalanche_dependence": True, - "run_avalanche_dependence_uniform": True, - "run_avalanche_weight": True, - "run_avalanche_entropy": True, - "avalanche_dependence_uniform_bias": 0.2, - "avalanche_dependence_criterion_threshold": 0, - "avalanche_dependence_uniform_criterion_threshold": 0, - "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} - analysis = sp.analyze_cipher(tests_configuration) - assert analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] - - def test_avalanche_probability_vectors(): speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) apvs = speck.avalanche_probability_vectors(100) @@ -97,36 +77,6 @@ def test_avalanche_probability_vectors(): 0.0, 1.0] -@pytest.mark.filterwarnings("ignore::DeprecationWarning:") -def test_component_analysis(): - fancy = FancyBlockCipher(number_of_rounds=2) - result = CipherComponentsAnalysis(fancy).component_analysis_tests() - assert len(result) == 9 - - aes = AESBlockCipher(word_size=8, state_size=2, number_of_rounds=2) - result = CipherComponentsAnalysis(aes).component_analysis_tests() - assert len(result) == 7 - - present = PresentBlockCipher(number_of_rounds=2) - result = CipherComponentsAnalysis(present).component_analysis_tests() - assert len(result) == 5 - - speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=22) - result = CipherComponentsAnalysis(speck).component_analysis_tests() - assert len(result) == 4 - - tea = TeaBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=32) - result = CipherComponentsAnalysis(tea).component_analysis_tests() - assert len(result) == 4 - - -@pytest.mark.filterwarnings("ignore::DeprecationWarning:") -def test_print_component_analysis_as_radar_charts(): - aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) - fig = CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() - assert str(type(fig)) == "" - - def test_compute_criterion_from_avalanche_probability_vectors(): speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) apvs = speck.avalanche_probability_vectors(100) From d989df9d5e03f69d68fbebee898640c4067cd21a Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Mon, 26 Feb 2024 12:23:23 +0400 Subject: [PATCH 091/179] FIX/1. remove references in cipher.py 2. move doctest documentation in the new NeuralNetworkTests class --- claasp/cipher.py | 214 ------------------ claasp/cipher_modules/neural_network_tests.py | 200 +++++++++++++++- .../neural_network_tests_test.py | 81 +++++++ tests/unit/cipher_test.py | 44 +--- 4 files changed, 278 insertions(+), 261 deletions(-) create mode 100644 tests/unit/cipher_modules/neural_network_tests_test.py diff --git a/claasp/cipher.py b/claasp/cipher.py index 23e3c2c6..bb4d8af2 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -32,7 +32,6 @@ component_analysis_tests, avalanche_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * -from claasp.cipher_modules.neural_network_tests import NeuralNetworkDistinguisher tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -1233,176 +1232,6 @@ def evaluate_with_intermediate_outputs_continuous_diffusion_analysis( return evaluator.evaluate_with_intermediate_outputs_continuous_diffusion_analysis( self, cipher_input, sbox_precomputations, sbox_precomputations_mix_columns, verbosity) - def find_good_input_difference_for_neural_distinguisher(self, difference_positions, - initial_population=32, number_of_generations=50, - nb_samples=10 ** 4, previous_generation=None, - verbose=False): - """ - Return good neural distinguisher input differences for a cipher. - - INPUT: - - - ``difference_positions`` -- **table of booleans**; one for each input to the cipher. True in positions where - differences are allowed - - ``initial_population`` -- **integer** (default: `32`); parameter of the evolutionary algorithm - - ``number_of_generations`` -- **integer** (default: `50`); number of iterations of the evolutionary algorithm - - ``nb_samples`` -- **integer** (default: `10`); number of samples for testing each input difference - - ``previous_generation`` -- (default: `None`); optional: initial table of differences to try - - ``verbose`` -- **boolean** (default: `False`); verbosity - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() - sage: diff, scores, highest_round = find_good_input_difference_for_neural_distinguisher(cipher, [True, False], verbose = False, number_of_generations=5) - """ - # from claasp.cipher_modules.neural_network_tests import find_good_input_difference_for_neural_distinguisher - return NeuralNetworkDistinguisher(self).find_good_input_difference_for_neural_distinguisher( - difference_positions, - initial_population, - number_of_generations, - nb_samples, - previous_generation, - verbose) - - def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, epochs=5, pipeline=True): - """ - Trains a neural distinguisher for the data generated by the data_generator function, using the provided neural network, at round starting_rounds. - If pipeline is set to True, retrains the distinguisher for one more round, as long as the validation accuracy remains significant. - - INPUT: - - - ``data_generator`` -- **function**; A dataset generation function, taking as input a cipher (usually self), a number of rounds, - and a number of samples, an returns a dataset X, Y, where X is a numpy matrix with one row per sample, and Y is a label veector. - To reproduce classical neural distinguisher results, on would use the example below. - - ``starting_round`` -- **integer**; number of rounds to analyze - - ``neural_network`` -- **(compiled) keras model** (default: `None`); the neural network to use for distinguishing, either a custom one or one - returned by the get_neural_network function of neural_network_tests. - - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training - - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing - - ``pipeline`` -- **boolean**; (default: `True`) If False, only trains for starting_round. If True, increments starting_round and retrain - the model as long as the accuracy is statistically significant. - - ``verbose`` -- **boolean** (default: `False`); verbosity - - EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network - sage: cipher = SpeckBlockCipher() - sage: input_differences = [0x400000, 0] - sage: data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds = nr, samples = samples) - sage: neural_network = get_neural_network('gohr_resnet', input_size = 64) - sage: cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network) - """ - if pipeline: - # from claasp.cipher_modules.neural_network_tests import neural_staged_training - acc = NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, starting_round, neural_network, training_samples, - testing_samples, epochs) - else: - # from claasp.cipher_modules.neural_network_tests import train_neural_distinguisher - acc = NeuralNetworkDistinguisher(self).train_neural_distinguisher(data_generator, starting_round, neural_network, training_samples, - testing_samples, epochs) - return acc - - def train_gohr_neural_distinguisher(self, input_difference, number_of_rounds, depth=1, word_size=0, - training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=200): - """ - Trains a differential neural distinguisher on nr rounds, for the input difference input_difference, using a slightly - modified (AMSGrad instead of cyclic learning rate schedule) depth depth Gohr's RESNet ([Go2019]). - - INPUT: - - - ``input_difference`` -- **list of integers**; The input difference, expressed as a list with one value per - input to the cipher. - - ``number_of_rounds`` -- **integer**; number of rounds to analyze - - ``depth`` -- **integer**; (default: `1`) the depth of the neural network, as defined in Gohr's paper - - ``word_size`` -- **integer**; the word size of the cipher, determines the shape of the neural network. - Defaults to output_bit_size when unspecified (may reduce the accuracy of the obtained distinguisher). - - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training - - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing - - ``number_of_epochs`` -- **integer**; (default: `40`) number of training epochs - - EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() - sage: input_differences = [0x400000, 0] - sage: number_of_rounds = 5 - sage: cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size = 16, number_of_epochs = 1) - 2000/2000 [==============================] - 294s 146ms/step - loss: 0.0890 - acc: 0.8876 - val_loss: 0.0734 - val_acc: 0.9101 - Validation accuracy at 5 rounds :0.9101160168647766 - 0.9101160168647766 - """ - - def data_generator(nr, samples): - return NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples) - - # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ - # train_neural_distinguisher, get_neural_network - input_size = self.output_bit_size * 2 - neural_network = NeuralNetworkDistinguisher(self).get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) - return NeuralNetworkDistinguisher(self).train_neural_distinguisher(data_generator, number_of_rounds, neural_network, training_samples, - testing_samples, num_epochs=number_of_epochs) - - def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, - training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet', save_prefix=None): - """ - Runs the AutoND pipeline ([BGHR2023]): - - Find an input difference for the inputs set to True in difference_positions using an optimizer - - Train a neural distinguisher based on DBitNET for that input difference, increasing the number of rounds - until the accuracy is no better than random guessing. - - INPUT: - - - ``difference_positions`` -- **list of booleans**; default: `True in the plaintext position, False in the - other positions`. If specified, must have the same length as self.inputs_bit_size, and contain one boolean per - input position. The optimizer will look for input differences in the positions set to True; by default, - the single-key case will be run. - - ``optimizer_samples`` -- **integer**; number of samples used by the optimizer; higher values increase the - quality of the optimizer, at the cost of a longer runtime. - - ``optimizer_generations`` -- **integer**; (default: `50`) number of generations used by the optimizer; - higher values increase the runtime. - - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training - - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing - - ``number_of_epochs`` -- **integer**; (default: `40`) number of training epochs - - ``verbose`` -- **boolean**; (default: `False`) verbosity of the optimizer - - ``neural_net`` -- **string**; (default: `dbitnet`) the neural network architecture to use; supports 'dbitnet' and 'gohr_resnet' - - - EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() - sage: cipher.run_autond_pipeline() - """ - # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network, \ - # int_difference_to_input_differences, neural_staged_training - - def data_generator(nr, samples): - return NeuralNetworkDistinguisher(self).get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples) - - if difference_positions is None: - difference_positions = [] - for inp in self.inputs: - if 'plaintext' in inp: - difference_positions.append(True) - else: - difference_positions.append(False) - assert True in difference_positions, "At least one position in difference_positions must be set to True. If " \ - "the default value was used, the primitive has no input named `plaintext`." - - diff, scores, highest_round = self.find_good_input_difference_for_neural_distinguisher(difference_positions, - number_of_generations=optimizer_generations, - nb_samples=optimizer_samples, - verbose=verbose) - input_difference = NeuralNetworkDistinguisher(self).int_difference_to_input_differences(diff[-1], difference_positions, self.inputs_bit_size) - input_size = self.output_bit_size * 2 - neural_network = NeuralNetworkDistinguisher(self).get_neural_network(neural_net, input_size = input_size) - nr = max(1, highest_round-3) - print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.inputs}), from round {nr}...') - return NeuralNetworkDistinguisher(self).neural_staged_training(data_generator, nr, neural_network, training_samples, - testing_samples, number_of_epochs) #save_prefix - def generate_bit_based_c_code(self, intermediate_output=False, verbosity=False): """ Return a string containing the C code that defines the self.evaluate() method. @@ -1780,49 +1609,6 @@ def make_cipher_id(self): def make_file_name(self): return editor.make_file_name(self._id) - def neural_network_blackbox_distinguisher_tests( - self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10): - """ - Return a python dictionary that contains the accuracies corresponding to each round. - - INPUT: - - - ``nb_samples`` -- **integer** (default: `10000`); how many sample the neural network is trained with - - ``hidden_layers`` -- **list** (default: `[32, 32, 32]`); a list containing the number of neurons in each - hidden layer of the neural network - - ``number_of_epochs`` -- **integer** (default: `10`); how long is the training of the neural network - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: #speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random - """ - # from claasp.cipher_modules.neural_network_tests import neural_network_blackbox_distinguisher_tests - return NeuralNetworkDistinguisher(self).neural_network_blackbox_distinguisher_tests( - nb_samples, hidden_layers, number_of_epochs) - - def neural_network_differential_distinguisher_tests( - self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[0x01]): - """ - Return a python dictionary that contains the accuracies corresponding to each round. - - INPUT: - - - ``nb_samples`` -- **integer** (default: `10000`); how many sample the neural network is trained with - - ``hidden_layers`` -- **list** (default: `[32, 32, 32]`); a list containing the number of neurons in each - hidden layer of the neural network - - ``number_of_epochs`` -- **integer** (default: `10`); how long is the training of the neural network - - ``diff`` -- **list** (default: `[0x01]`); list of input differences - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: #speck(number_of_rounds=22).neural_network_differential_distinguisher_tests(nb_samples = 10) # random - """ - # from claasp.cipher_modules.neural_network_tests import neural_network_differential_distinguisher_tests - return NeuralNetworkDistinguisher(self).neural_network_differential_distinguisher_tests( - nb_samples, hidden_layers, number_of_epochs, diff) - def print(self): """ Print the structure of the cipher into the sage terminal. diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 80fec08b..d97d24f9 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -13,14 +13,30 @@ from tensorflow.keras.regularizers import l2 -class NeuralNetworkDistinguisher: +class NeuralNetworkTests: def __init__(self, cipher): - super(NeuralNetworkDistinguisher, self).__init__() + super(NeuralNetworkTests, self).__init__() self.cipher = cipher def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, rounds_to_train=[]): + """ + Return a python dictionary that contains the accuracies corresponding to each round. + + INPUT: + + - ``nb_samples`` -- **integer** (default: `10000`); how many sample the neural network is trained with + - ``hidden_layers`` -- **list** (default: `[32, 32, 32]`); a list containing the number of neurons in each + hidden layer of the neural network + - ``number_of_epochs`` -- **integer** (default: `10`); how long is the training of the neural network + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: #speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random + + """ results = {"input_parameters": { "test_name": "neural_network_blackbox_distinguisher_tests", "number_of_samples": nb_samples, @@ -144,6 +160,22 @@ def create_structure(self, base_output, test_name, partial_result): def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[0x01, 0x0a], rounds_to_train=[]): + """ + Return a python dictionary that contains the accuracies corresponding to each round. + + INPUT: + + - ``nb_samples`` -- **integer** (default: `10000`); how many sample the neural network is trained with + - ``hidden_layers`` -- **list** (default: `[32, 32, 32]`); a list containing the number of neurons in each + hidden layer of the neural network + - ``number_of_epochs`` -- **integer** (default: `10`); how long is the training of the neural network + - ``diff`` -- **list** (default: `[0x01]`); list of input differences + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: #speck(number_of_rounds=22).neural_network_differential_distinguisher_tests(nb_samples = 10) # random + """ results = {"input_parameters": { "test_name": "neural_network_differential_distinguisher_tests", "number_of_samples": nb_samples, @@ -279,7 +311,7 @@ def make_checkpoint(self, datei): res = ModelCheckpoint(datei, monitor='val_loss', save_best_only=True) return res - def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, + def train_neural_distinguisher_(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, testing_samples=10 ** 6, num_epochs=1): acc = 1 bs = 5000 @@ -300,11 +332,151 @@ def neural_staged_training(self, data_generator, starting_round, neural_network= while acc >= threshold and nr < self.cipher.number_of_rounds: # acc = train_neural_distinguisher(cipher, data_generator, nr, neural_network, training_samples, testing_samples, # num_epochs) - acc = self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, testing_samples, + acc = self.train_neural_distinguisher_(data_generator, nr, neural_network, training_samples, testing_samples, num_epochs) accuracies[nr] = acc nr += 1 return accuracies + def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, + testing_samples=10 ** 6, epochs=5, pipeline=True): + """ + Trains a neural distinguisher for the data generated by the data_generator function, using the provided neural network, at round starting_rounds. + If pipeline is set to True, retrains the distinguisher for one more round, as long as the validation accuracy remains significant. + + INPUT: + + - ``data_generator`` -- **function**; A dataset generation function, taking as input a cipher (usually self), a number of rounds, + and a number of samples, an returns a dataset X, Y, where X is a numpy matrix with one row per sample, and Y is a label veector. + To reproduce classical neural distinguisher results, on would use the example below. + - ``starting_round`` -- **integer**; number of rounds to analyze + - ``neural_network`` -- **(compiled) keras model** (default: `None`); the neural network to use for distinguishing, either a custom one or one + returned by the get_neural_network function of neural_network_tests. + - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training + - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing + - ``pipeline`` -- **boolean**; (default: `True`) If False, only trains for starting_round. If True, increments starting_round and retrain + the model as long as the accuracy is statistically significant. + - ``verbose`` -- **boolean** (default: `False`); verbosity + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network + sage: cipher = SpeckBlockCipher() + sage: input_differences = [0x400000, 0] + sage: data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds = nr, samples = samples) + sage: neural_network = get_neural_network('gohr_resnet', input_size = 64) + sage: cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network) + """ + if pipeline: + # from claasp.cipher_modules.neural_network_tests import neural_staged_training + acc = self.neural_staged_training(data_generator, starting_round, neural_network, + training_samples, + testing_samples, epochs) + else: + # from claasp.cipher_modules.neural_network_tests import train_neural_distinguisher + acc = self.train_neural_distinguisher_(data_generator, starting_round, + neural_network, training_samples, + testing_samples, epochs) + return acc + + def train_gohr_neural_distinguisher(self, input_difference, number_of_rounds, depth=1, word_size=0, + training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=200): + """ + Trains a differential neural distinguisher on nr rounds, for the input difference input_difference, using a slightly + modified (AMSGrad instead of cyclic learning rate schedule) depth depth Gohr's RESNet ([Go2019]). + + INPUT: + + - ``input_difference`` -- **list of integers**; The input difference, expressed as a list with one value per + input to the cipher. + - ``number_of_rounds`` -- **integer**; number of rounds to analyze + - ``depth`` -- **integer**; (default: `1`) the depth of the neural network, as defined in Gohr's paper + - ``word_size`` -- **integer**; the word size of the cipher, determines the shape of the neural network. + Defaults to output_bit_size when unspecified (may reduce the accuracy of the obtained distinguisher). + - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training + - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing + - ``number_of_epochs`` -- **integer**; (default: `40`) number of training epochs + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: cipher = SpeckBlockCipher() + sage: input_differences = [0x400000, 0] + sage: number_of_rounds = 5 + sage: cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size = 16, number_of_epochs = 1) + 2000/2000 [==============================] - 294s 146ms/step - loss: 0.0890 - acc: 0.8876 - val_loss: 0.0734 - val_acc: 0.9101 + Validation accuracy at 5 rounds :0.9101160168647766 + 0.9101160168647766 + """ + + def data_generator(nr, samples): + return self.get_differential_dataset(input_difference, number_of_rounds=nr, + samples=samples) + + # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ + # train_neural_distinguisher, get_neural_network + input_size = self.cipher.output_bit_size * 2 + neural_network = self.get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) + return self.train_neural_distinguisher_(data_generator, number_of_rounds, neural_network, training_samples, + testing_samples, num_epochs=number_of_epochs) + + def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, + training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet', save_prefix=None): + """ + Runs the AutoND pipeline ([BGHR2023]): + - Find an input difference for the inputs set to True in difference_positions using an optimizer + - Train a neural distinguisher based on DBitNET for that input difference, increasing the number of rounds + until the accuracy is no better than random guessing. + + INPUT: + + - ``difference_positions`` -- **list of booleans**; default: `True in the plaintext position, False in the + other positions`. If specified, must have the same length as self.inputs_bit_size, and contain one boolean per + input position. The optimizer will look for input differences in the positions set to True; by default, + the single-key case will be run. + - ``optimizer_samples`` -- **integer**; number of samples used by the optimizer; higher values increase the + quality of the optimizer, at the cost of a longer runtime. + - ``optimizer_generations`` -- **integer**; (default: `50`) number of generations used by the optimizer; + higher values increase the runtime. + - ``training_samples`` -- **integer**; (default: `10**7`) number samples used for training + - ``testing_samples`` -- **integer**; (default: `10**6`) number samples used for testing + - ``number_of_epochs`` -- **integer**; (default: `40`) number of training epochs + - ``verbose`` -- **boolean**; (default: `False`) verbosity of the optimizer + - ``neural_net`` -- **string**; (default: `dbitnet`) the neural network architecture to use; supports 'dbitnet' and 'gohr_resnet' + + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: cipher = SpeckBlockCipher() + sage: cipher.run_autond_pipeline() + """ + # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network, \ + # int_difference_to_input_differences, neural_staged_training + + def data_generator(nr, samples): + return self.get_differential_dataset(input_difference, number_of_rounds=nr, + samples=samples) + + if difference_positions is None: + difference_positions = [] + for inp in self.cipher.inputs: + if 'plaintext' in inp: + difference_positions.append(True) + else: + difference_positions.append(False) + assert True in difference_positions, "At least one position in difference_positions must be set to True. If " \ + "the default value was used, the primitive has no input named `plaintext`." + + diff, scores, highest_round = self.find_good_input_difference_for_neural_distinguisher(difference_positions, + number_of_generations=optimizer_generations, + nb_samples=optimizer_samples, + verbose=verbose) + input_difference = self.int_difference_to_input_differences(diff[-1], difference_positions, self.cipher.inputs_bit_size) + input_size = self.cipher.output_bit_size * 2 + neural_network = self.get_neural_network(neural_net, input_size = input_size) + nr = max(1, highest_round-3) + print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.cipher.inputs}), from round {nr}...') + return self.neural_staged_training(data_generator, nr, neural_network, training_samples, + testing_samples, number_of_epochs) #save_prefix + def make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, reg_param=10 ** -5, @@ -417,6 +589,26 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio initial_population=32, number_of_generations=15, nb_samples=10 ** 3, previous_generation=None, verbose=False): + """ + Return good neural distinguisher input differences for a cipher. + + INPUT: + + - ``difference_positions`` -- **table of booleans**; one for each input to the cipher. True in positions where + differences are allowed + - ``initial_population`` -- **integer** (default: `32`); parameter of the evolutionary algorithm + - ``number_of_generations`` -- **integer** (default: `50`); number of iterations of the evolutionary algorithm + - ``nb_samples`` -- **integer** (default: `10`); number of samples for testing each input difference + - ``previous_generation`` -- (default: `None`); optional: initial table of differences to try + - ``verbose`` -- **boolean** (default: `False`); verbosity + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: cipher = SpeckBlockCipher() + sage: diff, scores, highest_round = find_good_input_difference_for_neural_distinguisher(cipher, [True, False], verbose = False, number_of_generations=5) + """ + # Initialisation input_lengths = self.cipher.inputs_bit_size input_tags = self.cipher.inputs diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py new file mode 100644 index 00000000..6659f6e6 --- /dev/null +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -0,0 +1,81 @@ +import os +import sys +import pytest +import inspect +import os.path +import numpy as np +from io import StringIO +from decimal import Decimal + +import claasp +from claasp.cipher import Cipher +from claasp.ciphers.block_ciphers.lblock_block_cipher import LBlockBlockCipher +from claasp.ciphers.block_ciphers.tea_block_cipher import TeaBlockCipher +from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher +from claasp.ciphers.block_ciphers.xtea_block_cipher import XTeaBlockCipher +from claasp.ciphers.permutations.ascon_permutation import AsconPermutation +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher +from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation +from claasp.ciphers.permutations.keccak_invertible_permutation import KeccakInvertiblePermutation +from claasp.ciphers.permutations.keccak_permutation import KeccakPermutation +from claasp.ciphers.permutations.xoodoo_permutation import XoodooPermutation +from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher +from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher +from claasp.ciphers.block_ciphers.present_block_cipher import PresentBlockCipher +from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher +from claasp.ciphers.permutations.ascon_sbox_sigma_permutation import AsconSboxSigmaPermutation +from claasp.ciphers.block_ciphers.simon_block_cipher import SimonBlockCipher +from claasp.ciphers.block_ciphers.skinny_block_cipher import SkinnyBlockCipher +from claasp.ciphers.permutations.spongent_pi_permutation import SpongentPiPermutation +from claasp.ciphers.permutations.photon_permutation import PhotonPermutation +from claasp.ciphers.block_ciphers.lea_block_cipher import LeaBlockCipher +from claasp.ciphers.permutations.sparkle_permutation import SparklePermutation +from claasp.ciphers.permutations.xoodoo_invertible_permutation import XoodooInvertiblePermutation +from claasp.ciphers.permutations.gift_sbox_permutation import GiftSboxPermutation +from claasp.ciphers.block_ciphers.raiden_block_cipher import RaidenBlockCipher +from claasp.ciphers.block_ciphers.hight_block_cipher import HightBlockCipher +from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher +from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation +from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher + +from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + +def test_find_good_input_difference_for_neural_distinguisher(): + cipher = SpeckBlockCipher() + diff, scores, highest_round = NeuralNetworkTests(cipher).find_good_input_difference_for_neural_distinguisher([True, False], + verbose=False, + number_of_generations=5) + + assert str(type(diff)) == "" + assert str(type(scores)) == "" + +def test_neural_staged_training(): + cipher = SpeckBlockCipher() + input_differences = [0x400000, 0] + data_generator = lambda nr, samples: NeuralNetworkTests(cipher).get_differential_dataset(input_differences, number_of_rounds = nr, samples = samples) + neural_network = NeuralNetworkTests(cipher).get_neural_network('gohr_resnet', input_size = 64, word_size = 16) + results_gohr = NeuralNetworkTests(cipher).train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) + assert results_gohr[5] >= 0 + neural_network = NeuralNetworkTests(cipher).get_neural_network('dbitnet', input_size = 64) + results_dbitnet = NeuralNetworkTests(cipher).train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) + assert results_dbitnet[5] >= 0 + +def test_train_gohr_neural_distinguisher(): + cipher = SpeckBlockCipher() + input_differences = [0x400000, 0] + number_of_rounds = 5 + result = NeuralNetworkTests(cipher).train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size=16, number_of_epochs=1, training_samples = 10**3, testing_samples = 10**3) + assert result > 0 + +def test_run_autond_pipeline(): + cipher = SpeckBlockCipher() + result = NeuralNetworkTests(cipher).run_autond_pipeline(optimizer_samples=10 ** 3, optimizer_generations=1, + training_samples=10 ** 2, testing_samples=10 ** 2, number_of_epochs=1, verbose=False) + assert not result is {} + +def test_get_differential_dataset(): + diff_value_plain_key = [0x400000, 0] + cipher = SpeckBlockCipher() + x, y = NeuralNetworkTests(cipher).get_differential_dataset(diff_value_plain_key, 5, samples=10) + assert x.shape == (10, 64) + assert y.shape == (10, ) \ No newline at end of file diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 912aca8d..af073943 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -38,7 +38,7 @@ from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher -from claasp.cipher_modules.neural_network_tests import NeuralNetworkDistinguisher +from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests EVALUATION_PY = 'evaluation.py' DICTIONARY_EXAMPLE_PY = "claasp/ciphers/dictionary_example.py" @@ -236,48 +236,6 @@ def test_evaluate_with_intermediate_outputs_continuous_diffusion_analysis(): assert output[0][0] == Decimal('-1.000000000') -def test_find_good_input_difference_for_neural_distinguisher(): - cipher = SpeckBlockCipher() - diff, scores, highest_round = NeuralNetworkDistinguisher(cipher).find_good_input_difference_for_neural_distinguisher([True, False], - verbose=False, - number_of_generations=5) - - assert str(type(diff)) == "" - assert str(type(scores)) == "" - - - -def test_neural_staged_training(): - cipher = SpeckBlockCipher() - input_differences = [0x400000, 0] - data_generator = lambda nr, samples: NeuralNetworkDistinguisher(cipher).get_differential_dataset(input_differences, number_of_rounds = nr, samples = samples) - neural_network = NeuralNetworkDistinguisher(cipher).get_neural_network('gohr_resnet', input_size = 64, word_size = 16) - results_gohr = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) - assert results_gohr[5] >= 0 - neural_network = NeuralNetworkDistinguisher(cipher).get_neural_network('dbitnet', input_size = 64) - results_dbitnet = cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples = 10**5, epochs = 1) - assert results_dbitnet[5] >= 0 - -def test_train_gohr_neural_distinguisher(): - cipher = SpeckBlockCipher() - input_differences = [0x400000, 0] - number_of_rounds = 5 - result = cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size=16, number_of_epochs=1, training_samples = 10**3, testing_samples = 10**3) - assert result > 0 - -def test_run_autond_pipeline(): - cipher = SpeckBlockCipher() - result = cipher.run_autond_pipeline(optimizer_samples=10 ** 3, optimizer_generations=1, - training_samples=10 ** 2, testing_samples=10 ** 2, number_of_epochs=1, verbose=False) - assert not result is {} - -def test_get_differential_dataset(): - diff_value_plain_key = [0x400000, 0] - cipher = SpeckBlockCipher() - x, y = NeuralNetworkDistinguisher(cipher).get_differential_dataset(diff_value_plain_key, 5, samples=10) - assert x.shape == (10, 64) - assert y.shape == (10, ) - def test_get_model(): speck = SpeckBlockCipher(number_of_rounds=1) assert speck.get_model("cp", "xor_differential").__class__.__name__ == "CpXorDifferentialModel" From e750daaa747cb9978960b9afb4971ed9b0b038e7 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Mon, 26 Feb 2024 13:10:40 +0400 Subject: [PATCH 092/179] FIX/1. remove references in cipher.py 2. move doctest documentation in the new NeuralNetworkTests class --- tests/unit/cipher_modules/report_test.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index a9b1a4e1..33a27fd4 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -8,6 +8,7 @@ from claasp.cipher_modules.report import Report from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests +from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests def test_print_report(): @@ -31,7 +32,7 @@ def test_print_report(): avalanche_report = Report(speck, avalanche_results) avalanche_report.print_report() - blackbox_results = speck.neural_network_blackbox_distinguisher_tests() + blackbox_results = NeuralNetworkTests(speck).neural_network_blackbox_distinguisher_tests() blackbox_report = Report(speck,blackbox_results) blackbox_report.print_report() @@ -97,7 +98,7 @@ def test_save_as_DataFrame(): def test_save_as_json(): simon = SimonBlockCipher(number_of_rounds=3) - neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests(simon).neural_network_blackbox_distinguisher_tests() blackbox_report = Report(simon,neural_network_blackbox_distinguisher_tests_results) milp = MilpXorDifferentialModel(simon) @@ -127,7 +128,7 @@ def test_save_as_json(): def test_clean_reports(): simon = SimonBlockCipher(number_of_rounds=2) - neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests(simon).neural_network_blackbox_distinguisher_tests() blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) blackbox_report.save_as_json() From 4e403d5eb8971ab1c01ea345593bd5e3a7869149 Mon Sep 17 00:00:00 2001 From: davidgerault Date: Mon, 26 Feb 2024 14:11:12 +0400 Subject: [PATCH 093/179] Added refs for the NN tests --- claasp/cipher_modules/neural_network_tests.py | 4 +++- docs/references.rst | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index d97d24f9..546c7349 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -22,6 +22,7 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, rounds_to_train=[]): """ + Runs the test defined in [BR2021]. Return a python dictionary that contains the accuracies corresponding to each round. INPUT: @@ -34,7 +35,7 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: #speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random + sage: speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random """ results = {"input_parameters": { @@ -161,6 +162,7 @@ def create_structure(self, base_output, test_name, partial_result): def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[0x01, 0x0a], rounds_to_train=[]): """ + Runs the test defined in [BHPR2021]. Return a python dictionary that contains the accuracies corresponding to each round. INPUT: diff --git a/docs/references.rst b/docs/references.rst index a9f81a60..6b388d07 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -79,6 +79,19 @@ \Bos, J.W., Ducas, L., Kiltz, E., Lepoint, T., Lyubashevsky, V., Schanck, J.M., Schwabe, P., Seiler, G., Stehlé, D.: CRYSTALS-Kyber: A CCA-Secure Module-Lattice-Based KEM. EuroS&P 2018: 353-367. +.. [BHPR2021] + Bellini E., Hambitzer A., Protopapa M., Rossi M. : *Limitations + of the Use of Neural Networks in Black Box Cryptanalysis* : + In Innovative Security Solutions for Information Technology + and Communications: 14th International Conference, SecITC 2021, + Virtual Event, November 25–26, 2021, Revised Selected Papers. + Springer-Verlag, Berlin, Heidelberg, 100–124 + +.. [BR2021] + Bellini, E., Rossi, M. : *Performance Comparison Between Deep Learning-Based + and Conventional Cryptographic Distinguishers* : In: Arai, K. (eds) Intelligent Computing. + Lecture Notes in Networks and Systems, vol 285. Springer + .. [BKLPPRSV2007] Bogdanov A., Knudsen L., Leander G., Paar C., Poschmann A., Robshaw M., Seurin Y., Vikkelsoe C. : *PRESENT: An Ultra-Lightweight Block Cipher* From 70f597230be9a168364139ed470723b0edb5ccdb Mon Sep 17 00:00:00 2001 From: davidgerault Date: Mon, 26 Feb 2024 14:27:05 +0400 Subject: [PATCH 094/179] Reverted the 2 NN tests to MLP --- claasp/cipher_modules/neural_network_tests.py | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 546c7349..f04583ac 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -11,7 +11,8 @@ from tensorflow.keras.layers import Input, Conv1D, Dense, Dropout, Lambda, concatenate, BatchNormalization, Activation, \ Add from tensorflow.keras.regularizers import l2 - +from keras.models import Sequential, Model +from keras.layers import Dense, BatchNormalization, LeakyReLU class NeuralNetworkTests: def __init__(self, cipher): @@ -62,14 +63,14 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, nb_samples) self.update_partial_result(component_output_ids, ds, index, test_name, labels, number_of_epochs, partial_result, 0, blackbox=True, - rounds_to_train=rounds_to_train) + rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) results["test_results"][input_tag].update(partial_result) return results def update_partial_result(self, component_output_ids, ds, index, test_name, labels, number_of_epochs, - partial_result, diff, blackbox=True, rounds_to_train=[]): + partial_result, diff, blackbox=True, rounds_to_train=[], hidden_layers = [32,32,32]): # noinspection PyUnresolvedReferences input_lengths = self.cipher.inputs_bit_size @@ -88,7 +89,23 @@ def update_partial_result(self, component_output_ids, ds, index, test_name, labe if rounds_to_train and self.cipher.get_round_from_component_id( component_output_ids[k][i]) not in rounds_to_train: continue - m = self.make_resnet(input_lengths[index] + ds[k][0] if blackbox else 2 * ds[k][0]) + + m = Sequential() + m.add(BatchNormalization()) + dense = Dense(input_lengths[index] + ds[k][0], + input_shape=(input_lengths[index] + ds[k][0],)) if blackbox \ + else Dense(2 * ds[k][0], input_shape=(2 * ds[k][0],)) + m.add(dense) + m.add(BatchNormalization()) + m.add(LeakyReLU()) + for dim in hidden_layers: + m.add(Dense(dim)) + m.add(BatchNormalization()) + m.add(LeakyReLU()) + m.add(Dense(1, activation='sigmoid')) + m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) + + #m = self.make_resnet(input_lengths[index] + ds[k][0] if blackbox else 2 * ds[k][0]) m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) history = m.fit(np.array(ds[k][1][i]), labels, validation_split=0.1, shuffle=1, verbose=0) if blackbox \ else m.fit(np.array(ds[k][1][i]), labels, epochs=number_of_epochs, @@ -207,7 +224,7 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd self.update_distinguisher_vectorized_tests_ds(base_inputs, d, ds, index, labels, nb_samples) self.update_partial_result(component_output_ids, ds, index, test_name, labels, number_of_epochs, partial_result, d, blackbox=False, - rounds_to_train=rounds_to_train) + rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) results["test_results"][it] = partial_result # self.update_partial_result(ds, index, test_name, labels, number_of_epochs, partial_result, 0, blackbox=True, # rounds_to_train=rounds_to_train) From b3cf86446c31758d665c0fd37fd55c15d0efe2d4 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 26 Feb 2024 14:28:56 +0400 Subject: [PATCH 095/179] FIX/Change: Location of files related to MILP external solvers change to current working directory --- claasp/cipher_modules/models/milp/milp_model.py | 4 +++- claasp/cipher_modules/models/milp/utils/config.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/claasp/cipher_modules/models/milp/milp_model.py b/claasp/cipher_modules/models/milp/milp_model.py index 473f6d78..41dda924 100644 --- a/claasp/cipher_modules/models/milp/milp_model.py +++ b/claasp/cipher_modules/models/milp/milp_model.py @@ -43,7 +43,8 @@ from sage.numerical.mip import MixedIntegerLinearProgram, MIPSolverException -from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, EXTERNAL_MILP_SOLVERS +from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, EXTERNAL_MILP_SOLVERS, \ + SOLUTION_FILE_DEFAULT_NAME, MODEL_DEFAULT_PATH from claasp.cipher_modules.models.milp.utils.utils import _get_data, _parse_external_solver_output, _write_model_to_lp_file from claasp.cipher_modules.models.utils import convert_solver_solution_to_dictionary @@ -337,6 +338,7 @@ def solve(self, model_type, solver_name=SOLVER_DEFAULT, external_solver_name=Non status, objective_value, components_values, milp_time, milp_memory = self._solve_with_external_solver( model_type, model_path, external_solver_name) os.remove(model_path) + os.remove(f"{MODEL_DEFAULT_PATH}/{SOLUTION_FILE_DEFAULT_NAME}") else: solver_name_in_solution = solver_name status, milp_time, milp_memory = self._solve_with_internal_solver() diff --git a/claasp/cipher_modules/models/milp/utils/config.py b/claasp/cipher_modules/models/milp/utils/config.py index 6bdcb189..86201dec 100644 --- a/claasp/cipher_modules/models/milp/utils/config.py +++ b/claasp/cipher_modules/models/milp/utils/config.py @@ -18,7 +18,7 @@ SOLVER_DEFAULT = "GLPK" -MODEL_DEFAULT_PATH = "./claasp/cipher_modules/models/milp/tmp" +MODEL_DEFAULT_PATH = "." SOLUTION_FILE_DEFAULT_NAME = "milp_model.sol" EXTERNAL_MILP_SOLVERS = { From e4b5f5023837b6d4e0d3921e69cf34a8f8041bd0 Mon Sep 17 00:00:00 2001 From: davidgerault Date: Mon, 26 Feb 2024 14:51:13 +0400 Subject: [PATCH 096/179] Added one difference list per input in the differential neural test --- claasp/cipher_modules/neural_network_tests.py | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index f04583ac..6ee19cda 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -105,8 +105,6 @@ def update_partial_result(self, component_output_ids, ds, index, test_name, labe m.add(Dense(1, activation='sigmoid')) m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) - #m = self.make_resnet(input_lengths[index] + ds[k][0] if blackbox else 2 * ds[k][0]) - m.compile(loss='binary_crossentropy', optimizer="adam", metrics=['binary_accuracy']) history = m.fit(np.array(ds[k][1][i]), labels, validation_split=0.1, shuffle=1, verbose=0) if blackbox \ else m.fit(np.array(ds[k][1][i]), labels, epochs=number_of_epochs, validation_split=0.1, shuffle=1, verbose=0) @@ -177,7 +175,7 @@ def create_structure(self, base_output, test_name, partial_result): return partial_result, ds, component_output_ids def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], - number_of_epochs=10, diff=[0x01, 0x0a], rounds_to_train=[]): + number_of_epochs=10, diff=[[0x400000], [0xa]], rounds_to_train=[]): """ Runs the test defined in [BHPR2021]. Return a python dictionary that contains the accuracies corresponding to each round. @@ -188,7 +186,8 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd - ``hidden_layers`` -- **list** (default: `[32, 32, 32]`); a list containing the number of neurons in each hidden layer of the neural network - ``number_of_epochs`` -- **integer** (default: `10`); how long is the training of the neural network - - ``diff`` -- **list** (default: `[0x01]`); list of input differences + - ``diff`` -- **list** (default: `[[0x01, 0x0a, 0x400000], [0, 0, 0]]`); list of input differences, containing + one list of values per input to the cipher. EXAMPLES:: @@ -218,7 +217,7 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd base_inputs = [secrets.randbits(i) for i in self.cipher.inputs_bit_size] base_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] partial_result = {} - for d in diff: + for d in diff[index]: partial_result, ds, component_output_ids = self.create_structure(base_output, test_name, partial_result) self.update_component_output_ids(component_output_ids) self.update_distinguisher_vectorized_tests_ds(base_inputs, d, ds, index, labels, nb_samples) @@ -226,10 +225,6 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd number_of_epochs, partial_result, d, blackbox=False, rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) results["test_results"][it] = partial_result - # self.update_partial_result(ds, index, test_name, labels, number_of_epochs, partial_result, 0, blackbox=True, - # rounds_to_train=rounds_to_train) - # def update_partial_result(self, ds, index, test_name, labels, number_of_epochs, - # partial_result, diff, blackbox=True, rounds_to_train=[]): return results def update_distinguisher_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): From 50b0ce12dee9214423562a7437fc5beef3356480 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 15:07:23 +0400 Subject: [PATCH 097/179] fixing pytests --- .../component_analysis_tests.py | 152 +++++++++--------- tests/unit/utils/utils_test.py | 19 +-- 2 files changed, 84 insertions(+), 87 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index fb3cf8ff..4f62c945 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -451,7 +451,7 @@ def _is_mds(self, component): """ description = component.description - final_mtr, _ = self._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + final_mtr, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), component.input_bit_size, component.output_bit_size) num_rows, num_cols = final_mtr.dimensions() @@ -463,81 +463,6 @@ def _is_mds(self, component): return False return True - def _instantiate_matrix_over_correct_field(self, matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): - """ - sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: midori = MidoriBlockCipher(number_of_rounds=2) - sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') - sage: description = mix_column_component.description - sage: mc_matrix, _ = CipherComponentsAnalysis(midori)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - - sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: midori = MidoriBlockCipher(number_of_rounds=2) - sage: mix_column_component = midori.get_component_from_id('mix_column_0_21') - sage: description = mix_column_component.description - sage: mc_matrix, _ = CipherComponentsAnalysis(midori)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - - """ - - G = PolynomialRing(GF(2), 'x') - x = G.gen() - irr_poly = int_to_poly(polynomial_as_int, word_size, x) - if irr_poly: - F = GF(2 ** word_size, name='a', modulus=irr_poly) - else: - F = GF(2 ** word_size) - a = F.gen() - input_word_size = input_bit_size // word_size - output_word_size = output_bit_size // word_size - mtr = [[0 for _ in range(input_word_size)] for _ in range(output_word_size)] - - for i in range(output_word_size): - for j in range(input_word_size): - mtr[i][j] = int_to_poly(matrix[i][j], word_size, a) - final_mtr = Matrix(F, mtr) - - return final_mtr, F - - def _field_element_matrix_to_integer_matrix(self, matrix): - """ - Converts a matrix of field elements to the corresponding integer matrix representation - - INPUT: - - - ``matrix`` -- **Matrix object**; a matrix whose entries are field elements - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: aes = AESBlockCipher(number_of_rounds=3) - sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') - sage: description = mix_column_component.description - sage: mc_matrix, _ = CipherComponentsAnalysis(aes)._instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), - mix_column_component.input_bit_size, mix_column_component.output_bit_size) - sage: mc_matrix - [ a a + 1 1 1] - [ 1 a a + 1 1] - [ 1 1 a a + 1] - [a + 1 1 1 a] - sage: CipherComponentsAnalysis(aes)._field_element_matrix_to_integer_matrix(mc_matrix) - [2 3 1 1] - [1 2 3 1] - [1 1 2 3] - [3 1 1 2] - """ - - int_matrix = [] - for i in range(matrix.nrows()): - for j in range(matrix.ncols()): - int_matrix.append(matrix[i][j].integer_representation()) - - return Matrix(matrix.nrows(), matrix.ncols(), int_matrix) - def _word_operation_properties(self, operation, boolean_polynomial_ring): """ Return a dictionary containing some properties of word operation component. @@ -1182,3 +1107,78 @@ def int_to_poly(integer_value, word_size, variable): z = z + pow(variable, i) return z + +def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): + """ + sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: midori = MidoriBlockCipher(number_of_rounds=2) + sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') + sage: description = mix_column_component.description + sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + + sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: midori = MidoriBlockCipher(number_of_rounds=2) + sage: mix_column_component = midori.get_component_from_id('mix_column_0_21') + sage: description = mix_column_component.description + sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + + """ + + G = PolynomialRing(GF(2), 'x') + x = G.gen() + irr_poly = int_to_poly(polynomial_as_int, word_size, x) + if irr_poly: + F = GF(2 ** word_size, name='a', modulus=irr_poly) + else: + F = GF(2 ** word_size) + a = F.gen() + input_word_size = input_bit_size // word_size + output_word_size = output_bit_size // word_size + mtr = [[0 for _ in range(input_word_size)] for _ in range(output_word_size)] + + for i in range(output_word_size): + for j in range(input_word_size): + mtr[i][j] = int_to_poly(matrix[i][j], word_size, a) + final_mtr = Matrix(F, mtr) + + return final_mtr, F + +def field_element_matrix_to_integer_matrix(matrix): + """ + Converts a matrix of field elements to the corresponding integer matrix representation + + INPUT: + + - ``matrix`` -- **Matrix object**; a matrix whose entries are field elements + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher + sage: from claasp.cipher_modules.component_analysis_tests import * + sage: aes = AESBlockCipher(number_of_rounds=3) + sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') + sage: description = mix_column_component.description + sage: mc_matrix, _ = instantiate_matrix_over_correct_field(description[0], int(description[1]), int(description[2]), + mix_column_component.input_bit_size, mix_column_component.output_bit_size) + sage: mc_matrix + [ a a + 1 1 1] + [ 1 a a + 1 1] + [ 1 1 a a + 1] + [a + 1 1 1 a] + sage: field_element_matrix_to_integer_matrix(mc_matrix) + [2 3 1 1] + [1 2 3 1] + [1 1 2 3] + [3 1 1 2] + """ + + int_matrix = [] + for i in range(matrix.nrows()): + for j in range(matrix.ncols()): + int_matrix.append(matrix[i][j].integer_representation()) + + return Matrix(matrix.nrows(), matrix.ncols(), int_matrix) \ No newline at end of file diff --git a/tests/unit/utils/utils_test.py b/tests/unit/utils/utils_test.py index 258dc815..008ab0d7 100644 --- a/tests/unit/utils/utils_test.py +++ b/tests/unit/utils/utils_test.py @@ -12,7 +12,7 @@ from claasp.utils.utils import pprint_dictionary_to_file from claasp.utils.utils import bytes_positions_to_little_endian_for_32_bits from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher - +from claasp.cipher_modules import avalanche_tests def test_bytes_positions_to_little_endian_for_32_bits(): lst = list(range(32)) @@ -26,8 +26,7 @@ def test_get_k_th_bit(): def test_pprint_dictionary(): - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, + tests_configuration = {"diffusion_tests": {"number_of_samples": 100, "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, "run_avalanche_weight": True, "run_avalanche_entropy": True, @@ -35,10 +34,9 @@ def test_pprint_dictionary(): "avalanche_dependence_criterion_threshold": 0, "avalanche_dependence_uniform_criterion_threshold": 0, "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} + "avalanche_entropy_criterion_threshold": 0.1}} cipher = IdentityBlockCipher() - analysis = cipher.analyze_cipher(tests_configuration) + analysis= {'diffusion_tests': avalanche_tests.avalanche_tests(cipher, **tests_configuration["diffusion_tests"])} pprint_dictionary(analysis['diffusion_tests']['input_parameters']) result = analysis['diffusion_tests']['input_parameters'] assert result == {'avalanche_dependence_criterion_threshold': 0, @@ -100,7 +98,7 @@ def test_pprint_dictionary(): def test_pprint_dictionary_to_file(): identity = IdentityBlockCipher() - tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, + tests_configuration = {"diffusion_tests": {"number_of_samples": 100, "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, "run_avalanche_weight": True, @@ -109,11 +107,10 @@ def test_pprint_dictionary_to_file(): "avalanche_dependence_criterion_threshold": 0, "avalanche_dependence_uniform_criterion_threshold": 0, "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} + "avalanche_entropy_criterion_threshold": 0.1}} tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) - analysis = identity.analyze_cipher(tests_configuration) + analysis = {'diffusion_tests': avalanche_tests.avalanche_tests(identity, **tests_configuration["diffusion_tests"])} pprint_dictionary_to_file(analysis['diffusion_tests']['input_parameters'], f"{tii_dir_path}/test_json") assert os.path.isfile(f"{tii_dir_path}/test_json") is True os.remove(f"{tii_dir_path}/test_json") @@ -132,4 +129,4 @@ def test_signed_distance(): def test_point_pair(): result = point_pair(0.001, 1) assert str(type(result[0][0])) == "" - assert str(type(result[1][0])) == "" + assert str(type(result[1][0])) == "" \ No newline at end of file From 49d7947bf12ae0d0a196cfcc9da8ca2237a62044 Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Mon, 26 Feb 2024 15:09:58 +0400 Subject: [PATCH 098/179] FIX/1. remove references in cipher.py 2. move doctest documentation in the new NeuralNetworkTests class neural_network_tests_test.py --- .../neural_network_tests_test.py | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py index 6659f6e6..0adccec8 100644 --- a/tests/unit/cipher_modules/neural_network_tests_test.py +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -78,4 +78,27 @@ def test_get_differential_dataset(): cipher = SpeckBlockCipher() x, y = NeuralNetworkTests(cipher).get_differential_dataset(diff_value_plain_key, 5, samples=10) assert x.shape == (10, 64) - assert y.shape == (10, ) \ No newline at end of file + assert y.shape == (10, ) + +@pytest.mark.filterwarnings("ignore::DeprecationWarning:") +def test_neural_network_blackbox_distinguisher_tests(): + cipher = SpeckBlockCipher(number_of_rounds=5) + results = NeuralNetworkTests(cipher).neural_network_blackbox_distinguisher_tests(nb_samples=10) + assert results['input_parameters'] == \ + {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, 'test_name': 'neural_network_blackbox_distinguisher_tests'} + + +def test_neural_network_differential_distinguisher_tests(): + cipher = SpeckBlockCipher(number_of_rounds=5) + results = NeuralNetworkTests(cipher).neural_network_differential_distinguisher_tests(nb_samples=10) + assert results['input_parameters'] == \ + {'test_name': 'neural_network_differential_distinguisher_tests', + 'number_of_samples': 10, + 'input_differences': [1], + 'hidden_layers': [32, 32, 32], + 'min_accuracy_value': 0, + 'max_accuracy_value': 1, + 'output_bit_size': 32, + 'number_of_epochs': 10, + 'plaintext_input_bit_size': 32, + 'key_input_bit_size': 64} \ No newline at end of file From 0d253b0f8ea8752135e80fc3c8a6b6ba70b296aa Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Mon, 26 Feb 2024 15:20:22 +0400 Subject: [PATCH 099/179] FIX/removed functions from cipher_test.py --- tests/unit/cipher_test.py | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index af073943..e40d266c 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -38,8 +38,6 @@ from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher -from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests - EVALUATION_PY = 'evaluation.py' DICTIONARY_EXAMPLE_PY = "claasp/ciphers/dictionary_example.py" BIT_BASED_C_FUNCTIONS_O_FILE = 'claasp/cipher_modules/generic_bit_based_c_functions.o' @@ -350,29 +348,6 @@ def test_is_spn(): aes = AESBlockCipher(number_of_rounds=2) assert aes.is_spn() is True - -@pytest.mark.filterwarnings("ignore::DeprecationWarning:") -def test_neural_network_blackbox_distinguisher_tests(): - results = SpeckBlockCipher(number_of_rounds=5).neural_network_blackbox_distinguisher_tests(nb_samples=10) - assert results['input_parameters'] == \ - {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, 'test_name': 'neural_network_blackbox_distinguisher_tests'} - - -def test_neural_network_differential_distinguisher_tests(): - results = SpeckBlockCipher(number_of_rounds=5).neural_network_differential_distinguisher_tests(nb_samples=10) - assert results['input_parameters'] == \ - {'test_name': 'neural_network_differential_distinguisher_tests', - 'number_of_samples': 10, - 'input_differences': [1], - 'hidden_layers': [32, 32, 32], - 'min_accuracy_value': 0, - 'max_accuracy_value': 1, - 'output_bit_size': 32, - 'number_of_epochs': 10, - 'plaintext_input_bit_size': 32, - 'key_input_bit_size': 64} - - def test_polynomial_system(): assert str(IdentityBlockCipher().polynomial_system()) == 'Polynomial Sequence with 128 Polynomials in 256 Variables' From 90afc083a5d2bbbadc73986b31ac0f2603944d99 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 26 Feb 2024 14:28:56 +0400 Subject: [PATCH 100/179] FIX/Change: Location of files related to MILP external solvers change to current working directory --- claasp/cipher_modules/models/milp/milp_model.py | 4 +++- claasp/cipher_modules/models/milp/utils/config.py | 9 ++++----- claasp/cipher_modules/models/milp/utils/utils.py | 8 ++++---- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/claasp/cipher_modules/models/milp/milp_model.py b/claasp/cipher_modules/models/milp/milp_model.py index 473f6d78..f37a0016 100644 --- a/claasp/cipher_modules/models/milp/milp_model.py +++ b/claasp/cipher_modules/models/milp/milp_model.py @@ -43,7 +43,8 @@ from sage.numerical.mip import MixedIntegerLinearProgram, MIPSolverException -from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, EXTERNAL_MILP_SOLVERS +from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, EXTERNAL_MILP_SOLVERS, \ + SOLUTION_FILE_DEFAULT_NAME from claasp.cipher_modules.models.milp.utils.utils import _get_data, _parse_external_solver_output, _write_model_to_lp_file from claasp.cipher_modules.models.utils import convert_solver_solution_to_dictionary @@ -337,6 +338,7 @@ def solve(self, model_type, solver_name=SOLVER_DEFAULT, external_solver_name=Non status, objective_value, components_values, milp_time, milp_memory = self._solve_with_external_solver( model_type, model_path, external_solver_name) os.remove(model_path) + os.remove(f"{SOLUTION_FILE_DEFAULT_NAME}") else: solver_name_in_solution = solver_name status, milp_time, milp_memory = self._solve_with_internal_solver() diff --git a/claasp/cipher_modules/models/milp/utils/config.py b/claasp/cipher_modules/models/milp/utils/config.py index 6bdcb189..fd1ba039 100644 --- a/claasp/cipher_modules/models/milp/utils/config.py +++ b/claasp/cipher_modules/models/milp/utils/config.py @@ -18,12 +18,11 @@ SOLVER_DEFAULT = "GLPK" -MODEL_DEFAULT_PATH = "./claasp/cipher_modules/models/milp/tmp" SOLUTION_FILE_DEFAULT_NAME = "milp_model.sol" EXTERNAL_MILP_SOLVERS = { 'Gurobi': { - 'command': f'gurobi_cl ResultFile={MODEL_DEFAULT_PATH}/{SOLUTION_FILE_DEFAULT_NAME} ', + 'command': f'gurobi_cl ResultFile={SOLUTION_FILE_DEFAULT_NAME} ', 'options': "", 'time': r"Explored \d+ nodes \(\d+ simplex iterations\) in ([0-9]*[.]?[0-9]+) seconds", 'unsat_condition': "Model is infeasible" @@ -31,20 +30,20 @@ 'scip': { 'file_path': [], 'command': 'scip -c \"read ', - 'options': f' opt write solution {MODEL_DEFAULT_PATH}/{SOLUTION_FILE_DEFAULT_NAME} quit\"', + 'options': f' opt write solution {SOLUTION_FILE_DEFAULT_NAME} quit\"', 'time': r"Solving Time \(sec\)[\s]+:[\s]+([0-9]*[.]?[0-9]+)", 'unsat_condition': "problem is solved [infeasible]" }, 'glpk': { 'command': 'glpsol --lp ', - 'options': f' --output {MODEL_DEFAULT_PATH}/{SOLUTION_FILE_DEFAULT_NAME}', + 'options': f' --output {SOLUTION_FILE_DEFAULT_NAME}', 'time': r"Time used:[\s]+([0-9]*[.]?[0-9]+) secs", 'memory': r"Memory used:[\s]+([0-9]*[.]?[0-9]+) Mb", 'unsat_condition': 'PROBLEM HAS NO PRIMAL FEASIBLE SOLUTION' }, 'cplex': { 'command': 'cplex -c \"read ', - 'options': f'\" \"optimize\" \"display solution variables *\" | tee {MODEL_DEFAULT_PATH}/{SOLUTION_FILE_DEFAULT_NAME}', + 'options': f'\" \"optimize\" \"display solution variables *\" | tee {SOLUTION_FILE_DEFAULT_NAME}', 'time': r"Solution time =[\s]+([0-9]*[.]?[0-9]+) sec.", 'unsat_condition': "MIP - Integer infeasible." } diff --git a/claasp/cipher_modules/models/milp/utils/utils.py b/claasp/cipher_modules/models/milp/utils/utils.py index d5463f2e..71332562 100644 --- a/claasp/cipher_modules/models/milp/utils/utils.py +++ b/claasp/cipher_modules/models/milp/utils/utils.py @@ -15,7 +15,7 @@ # along with this program. If not, see . # **************************************************************************** import pickle -import re, os +import re from subprocess import run from bitstring import BitArray @@ -24,7 +24,7 @@ output_dictionary_that_contains_xor_inequalities, update_dictionary_that_contains_xor_inequalities_between_n_input_bits) -from claasp.cipher_modules.models.milp.utils.config import EXTERNAL_MILP_SOLVERS, MODEL_DEFAULT_PATH, \ +from claasp.cipher_modules.models.milp.utils.config import EXTERNAL_MILP_SOLVERS, \ SOLUTION_FILE_DEFAULT_NAME from sage.numerical.mip import MIPSolverException @@ -39,7 +39,7 @@ def _write_model_to_lp_file(model, model_type): mip = model._model - model_file_path = os.path.join(MODEL_DEFAULT_PATH, f"{model.cipher_id}_{model_type}.lp") + model_file_path = f"{model.cipher_id}_{model_type}.lp" mip.write_lp(model_file_path) return model_file_path @@ -74,7 +74,7 @@ def _parse_external_solver_output(model, model_type, solver_name, solver_process if solver_specs['unsat_condition'] not in str(solver_process): status = 'SATISFIABLE' - solution_file_path = os.path.join(MODEL_DEFAULT_PATH, SOLUTION_FILE_DEFAULT_NAME) + solution_file_path = SOLUTION_FILE_DEFAULT_NAME with open(solution_file_path, 'r') as lp_file: read_file = lp_file.read() From 4a5c4a9c12cef6d4ed046d4afa62a874ee9516e3 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 15:35:20 +0400 Subject: [PATCH 101/179] take into account comments in PR: remove analyze_cipher() --- claasp/cipher.py | 42 ---------- claasp/cipher_modules/avalanche_tests.py | 8 +- claasp/utils/utils.py | 25 ++---- tests/unit/cipher_test.py | 50 ------------ tests/unit/utils/utils_test.py | 100 ++++------------------- 5 files changed, 26 insertions(+), 199 deletions(-) diff --git a/claasp/cipher.py b/claasp/cipher.py index 44eb4b89..085b2fde 100644 --- a/claasp/cipher.py +++ b/claasp/cipher.py @@ -32,7 +32,6 @@ component_analysis_tests, algebraic_tests import importlib from claasp.cipher_modules.inverse_cipher import * -from claasp.cipher_modules.avalanche_tests import AvalancheTests tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) @@ -272,47 +271,6 @@ def algebraic_tests(self, timeout): """ return algebraic_tests.algebraic_tests(self, timeout) - def analyze_cipher(self, tests_configuration): - """ - Generate a dictionary with the analysis of the cipher. - - The analysis is related to the following tests: - - - Diffusion Tests - - INPUT: - - - ``tests_configuration`` -- **python dictionary** - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - sage: tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, - ....: "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, - ....: "run_avalanche_weight": True, "run_avalanche_entropy": True, - ....: "avalanche_dependence_uniform_bias": 0.2, "avalanche_dependence_criterion_threshold": 0, - ....: "avalanche_dependence_uniform_criterion_threshold":0, "avalanche_weight_criterion_threshold": 0.1, - ....: "avalanche_entropy_criterion_threshold":0.1}, "component_analysis_tests": {"run_tests": True}} - sage: analysis = sp.analyze_cipher(tests_configuration) - sage: analysis["diffusion_tests"]["test_results"]["key"]["round_output"][ # random - ....: "avalanche_dependence_vectors"]["differences"][31]["output_vectors"][0]["vector"] # random - """ - tmp_tests_configuration = deepcopy(tests_configuration) - analysis_results = {} - if "diffusion_tests" in tests_configuration and tests_configuration["diffusion_tests"]["run_tests"]: - tmp_tests_configuration["diffusion_tests"].pop("run_tests") - analysis_results['diffusion_tests'] = \ - AvalancheTests(self).avalanche_tests(**tmp_tests_configuration["diffusion_tests"]) - if "component_analysis_tests" in tests_configuration and tests_configuration[ - "component_analysis_tests"]["run_tests"]: - analysis_results["component_analysis_tests"] = component_analysis_tests.component_analysis_tests(self) - if "algebraic_tests" in tests_configuration and tests_configuration["algebraic_tests"]["run_tests"]: - timeout = tests_configuration["algebraic_tests"]["timeout"] - analysis_results["algebraic_tests"] = algebraic_tests.algebraic_tests(self, timeout=timeout) - - return analysis_results - def as_python_dictionary(self): return { 'cipher_id': self._id, diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index a74ed292..c7c206a3 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -114,8 +114,8 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias diffusion_tests, input_name, intermediate_output_name) self.calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, input_name, intermediate_output_name) - # self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, - # diffusion_tests, input_name, intermediate_output_name) + self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, + diffusion_tests, input_name, intermediate_output_name) return diffusion_tests @@ -160,8 +160,6 @@ def add_intermediate_output_values_to_dictionary(self, criterion_name, dict_inte self.cipher.inputs_bit_size[index] output_bit_size = dict_intermediate_output_names[intermediate_output_name][0] dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_output_bit_size'] = output_bit_size - #dict_test_results[input_name][intermediate_output_name][criterion_name]["max_possible_value_per_bit"] = 1 - #dict_test_results[input_name][intermediate_output_name][criterion_name]["min_possible_value_per_bit"] = 0 dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_bit'] = \ dict_parameters[criterion_name][1] dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_max_possible_value_per_output_block'] = \ @@ -245,7 +243,7 @@ def calculate_worst_input_differences(self, criterion_name, largest_round_criter worst_input_diffs = [input_diff for input_diff, specific_round in largest_round_criterion_not_satisfied.items() if specific_round == max_round_criterion_not_satisfied] - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(worst_input_diffs) + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append({'worst_input_differences': worst_input_diffs}) def avalanche_probability_vectors(self, nb_samples): """ diff --git a/claasp/utils/utils.py b/claasp/utils/utils.py index d5b7bf14..86191020 100644 --- a/claasp/utils/utils.py +++ b/claasp/utils/utils.py @@ -323,24 +323,13 @@ def pprint_dictionary(dictionary): EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher - sage: from claasp.utils.utils import pprint_dictionary - sage: tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, - ....: "run_avalanche_dependence": True, "run_avalanche_dependence_uniform": True, - ....: "run_avalanche_weight": True, "run_avalanche_entropy": True, - ....: "avalanche_dependence_uniform_bias": 0.2, "avalanche_dependence_criterion_threshold": 0, - ....: "avalanche_dependence_uniform_criterion_threshold":0, "avalanche_weight_criterion_threshold": 0.1, - ....: "avalanche_entropy_criterion_threshold":0.1}, "component_analysis_tests": {"run_tests": True} - ....: } - sage: cipher = IdentityBlockCipher() - sage: analysis = cipher.analyze_cipher(tests_configuration) - sage: pprint_dictionary(analysis['diffusion_tests']['input_parameters']) - { 'avalanche_dependence_criterion_threshold': 0, - 'avalanche_dependence_uniform_bias': 0.200000000000000, - 'avalanche_dependence_uniform_criterion_threshold': 0, - 'avalanche_entropy_criterion_threshold': 0.100000000000000, - 'avalanche_weight_criterion_threshold': 0.100000000000000, - 'number_of_samples': 100} + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: test = AvalancheTests(speck) + sage: d = test.avalanche_tests(number_of_samples=100) + sage: pprint_dictionary(d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]) + """ pp = pprint.PrettyPrinter(indent=4) pp.pprint(dictionary) diff --git a/tests/unit/cipher_test.py b/tests/unit/cipher_test.py index 311680b7..04b4235d 100644 --- a/tests/unit/cipher_test.py +++ b/tests/unit/cipher_test.py @@ -71,24 +71,6 @@ def test_algebraic_tests(): assert d != compare_result # skipped (need to be fixed) -def test_analyze_cipher(): - sp = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, - "run_avalanche_dependence": True, - "run_avalanche_dependence_uniform": True, - "run_avalanche_weight": True, - "run_avalanche_entropy": True, - "avalanche_dependence_uniform_bias": 0.2, - "avalanche_dependence_criterion_threshold": 0, - "avalanche_dependence_uniform_criterion_threshold": 0, - "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} - analysis = sp.analyze_cipher(tests_configuration) - assert analysis["diffusion_tests"]["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][31]["vectors"][0] == [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1] - - @pytest.mark.filterwarnings("ignore::DeprecationWarning:") def test_component_analysis(): fancy = FancyBlockCipher(number_of_rounds=2) @@ -262,38 +244,6 @@ def test_generate_bit_based_c_code(): bit_based_c_code = SpeckBlockCipher().generate_bit_based_c_code(True, True) assert '\tprintf("\\nROUND 0\\n\\n");\n' in bit_based_c_code - -### Replaced by equivalent functions in Report class - -#def test_generate_csv_report(): -# tii_path = inspect.getfile(claasp) -# tii_dir_path = os.path.dirname(tii_path) -# identity = IdentityBlockCipher() -# identity.generate_csv_report(10, f"{tii_dir_path}/{identity.id}_report.csv") -# assert os.path.isfile(f"{tii_dir_path}/{identity.id}_report.csv") - -# os.remove(f"{tii_dir_path}/{identity.id}_report.csv") - - -# def test_generate_heatmap_graphs_for_avalanche_tests(): -# sp = SpeckBlockCipher(block_bit_size=64, key_bit_size=128, number_of_rounds=5) -# d = sp.diffusion_tests(number_of_samples=100) -# h = sp.generate_heatmap_graphs_for_avalanche_tests(d) -# documentclass_pt_ = '\\documentclass[12pt]' -# assert h[:20] == documentclass_pt_ -# -# ascon = AsconPermutation(number_of_rounds=4) -# d = ascon.diffusion_tests(number_of_samples=100) -# h = ascon.generate_heatmap_graphs_for_avalanche_tests(d, [0], ["avalanche_weight_vectors"]) -# assert h[:20] == documentclass_pt_ -# -# cipher = XoodooPermutation(number_of_rounds=4) -# d = cipher.diffusion_tests(number_of_samples=100) -# h = cipher.generate_heatmap_graphs_for_avalanche_tests(d, [1, 193], ["avalanche_dependence_vectors", -# "avalanche_entropy_vectors"]) -# assert h[:20] == documentclass_pt_ - - def test_generate_word_based_c_code(): word_based_c_code = SpeckBlockCipher().generate_word_based_c_code(20) assert word_based_c_code[:8] == '#include' diff --git a/tests/unit/utils/utils_test.py b/tests/unit/utils/utils_test.py index 258dc815..18bdbac4 100644 --- a/tests/unit/utils/utils_test.py +++ b/tests/unit/utils/utils_test.py @@ -12,6 +12,8 @@ from claasp.utils.utils import pprint_dictionary_to_file from claasp.utils.utils import bytes_positions_to_little_endian_for_32_bits from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher +from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher +from claasp.cipher_modules.avalanche_tests import AvalancheTests def test_bytes_positions_to_little_endian_for_32_bits(): @@ -26,95 +28,25 @@ def test_get_k_th_bit(): def test_pprint_dictionary(): - tests_configuration = {"diffusion_tests": {"run_tests": True, - "number_of_samples": 100, - "run_avalanche_dependence": True, - "run_avalanche_dependence_uniform": True, - "run_avalanche_weight": True, "run_avalanche_entropy": True, - "avalanche_dependence_uniform_bias": 0.2, - "avalanche_dependence_criterion_threshold": 0, - "avalanche_dependence_uniform_criterion_threshold": 0, - "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} - cipher = IdentityBlockCipher() - analysis = cipher.analyze_cipher(tests_configuration) - pprint_dictionary(analysis['diffusion_tests']['input_parameters']) - result = analysis['diffusion_tests']['input_parameters'] - assert result == {'avalanche_dependence_criterion_threshold': 0, - 'avalanche_dependence_uniform_bias': 0.2, - 'avalanche_dependence_uniform_criterion_threshold': 0, - 'avalanche_entropy_criterion_threshold': 0.1, - 'avalanche_weight_criterion_threshold': 0.1, - 'cipher_output_avalanche_dependence_uniform_vectors_expected_value_per_bit': 1, - 'cipher_output_avalanche_dependence_uniform_vectors_expected_value_per_output_block': 32, - 'cipher_output_avalanche_dependence_uniform_vectors_input_bit_size': 32, - 'cipher_output_avalanche_dependence_uniform_vectors_max_possible_value_per_output_block': 32, - 'cipher_output_avalanche_dependence_uniform_vectors_min_possible_value_per_output_block': 0, - 'cipher_output_avalanche_dependence_uniform_vectors_output_bit_size': 32, - 'cipher_output_avalanche_dependence_vectors_expected_value_per_bit': 1, - 'cipher_output_avalanche_dependence_vectors_expected_value_per_output_block': 32, - 'cipher_output_avalanche_dependence_vectors_input_bit_size': 32, - 'cipher_output_avalanche_dependence_vectors_max_possible_value_per_output_block': 32, - 'cipher_output_avalanche_dependence_vectors_min_possible_value_per_output_block': 0, - 'cipher_output_avalanche_dependence_vectors_output_bit_size': 32, - 'cipher_output_avalanche_entropy_vectors_expected_value_per_bit': 1, - 'cipher_output_avalanche_entropy_vectors_expected_value_per_output_block': 32, - 'cipher_output_avalanche_entropy_vectors_input_bit_size': 32, - 'cipher_output_avalanche_entropy_vectors_max_possible_value_per_output_block': 32, - 'cipher_output_avalanche_entropy_vectors_min_possible_value_per_output_block': 0, - 'cipher_output_avalanche_entropy_vectors_output_bit_size': 32, - 'cipher_output_avalanche_weight_vectors_expected_value_per_bit': 0.5, - 'cipher_output_avalanche_weight_vectors_expected_value_per_output_block': 16.0, - 'cipher_output_avalanche_weight_vectors_input_bit_size': 32, - 'cipher_output_avalanche_weight_vectors_max_possible_value_per_output_block': 32, - 'cipher_output_avalanche_weight_vectors_min_possible_value_per_output_block': 0, - 'cipher_output_avalanche_weight_vectors_output_bit_size': 32, - 'number_of_samples': 100, - 'round_key_output_avalanche_dependence_uniform_vectors_expected_value_per_bit': 1, - 'round_key_output_avalanche_dependence_uniform_vectors_expected_value_per_output_block': 32, - 'round_key_output_avalanche_dependence_uniform_vectors_input_bit_size': 32, - 'round_key_output_avalanche_dependence_uniform_vectors_max_possible_value_per_output_block': 32, - 'round_key_output_avalanche_dependence_uniform_vectors_min_possible_value_per_output_block': 0, - 'round_key_output_avalanche_dependence_uniform_vectors_output_bit_size': 32, - 'round_key_output_avalanche_dependence_vectors_expected_value_per_bit': 1, - 'round_key_output_avalanche_dependence_vectors_expected_value_per_output_block': 32, - 'round_key_output_avalanche_dependence_vectors_input_bit_size': 32, - 'round_key_output_avalanche_dependence_vectors_max_possible_value_per_output_block': 32, - 'round_key_output_avalanche_dependence_vectors_min_possible_value_per_output_block': 0, - 'round_key_output_avalanche_dependence_vectors_output_bit_size': 32, - 'round_key_output_avalanche_entropy_vectors_expected_value_per_bit': 1, - 'round_key_output_avalanche_entropy_vectors_expected_value_per_output_block': 32, - 'round_key_output_avalanche_entropy_vectors_input_bit_size': 32, - 'round_key_output_avalanche_entropy_vectors_max_possible_value_per_output_block': 32, - 'round_key_output_avalanche_entropy_vectors_min_possible_value_per_output_block': 0, - 'round_key_output_avalanche_entropy_vectors_output_bit_size': 32, - 'round_key_output_avalanche_weight_vectors_expected_value_per_bit': 0.5, - 'round_key_output_avalanche_weight_vectors_expected_value_per_output_block': 16.0, - 'round_key_output_avalanche_weight_vectors_input_bit_size': 32, - 'round_key_output_avalanche_weight_vectors_max_possible_value_per_output_block': 32, - 'round_key_output_avalanche_weight_vectors_min_possible_value_per_output_block': 0, - 'round_key_output_avalanche_weight_vectors_output_bit_size': 32, - 'test_name': 'avalanche_tests'} + speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + test = AvalancheTests(speck) + d = test.avalanche_tests(number_of_samples=100) + pprint_dictionary(d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]) + result = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]["input_difference_value"] + assert result == "0x1" def test_pprint_dictionary_to_file(): - identity = IdentityBlockCipher() - tests_configuration = {"diffusion_tests": {"run_tests": True, "number_of_samples": 100, - "run_avalanche_dependence": True, - "run_avalanche_dependence_uniform": True, - "run_avalanche_weight": True, - "run_avalanche_entropy": True, - "avalanche_dependence_uniform_bias": 0.2, - "avalanche_dependence_criterion_threshold": 0, - "avalanche_dependence_uniform_criterion_threshold": 0, - "avalanche_weight_criterion_threshold": 0.1, - "avalanche_entropy_criterion_threshold": 0.1}, - "component_analysis_tests": {"run_tests": True}} + speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + test = AvalancheTests(speck) + d = test.avalanche_tests(number_of_samples=100) + pprint_dictionary(d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]) + result = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]["input_difference_value"] + assert result == "0x1" tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) - analysis = identity.analyze_cipher(tests_configuration) - pprint_dictionary_to_file(analysis['diffusion_tests']['input_parameters'], f"{tii_dir_path}/test_json") + analysis = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]["input_difference_value"] + pprint_dictionary_to_file(analysis, f"{tii_dir_path}/test_json") assert os.path.isfile(f"{tii_dir_path}/test_json") is True os.remove(f"{tii_dir_path}/test_json") From b58925e387fe7a42efa4e5701b8f673e0c9d77cb Mon Sep 17 00:00:00 2001 From: Nitin Satpute Date: Mon, 26 Feb 2024 15:39:16 +0400 Subject: [PATCH 102/179] FIX/last function from neural_network_tests_test.py passed --- tests/unit/cipher_modules/neural_network_tests_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py index 0adccec8..378b9f62 100644 --- a/tests/unit/cipher_modules/neural_network_tests_test.py +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -94,7 +94,7 @@ def test_neural_network_differential_distinguisher_tests(): assert results['input_parameters'] == \ {'test_name': 'neural_network_differential_distinguisher_tests', 'number_of_samples': 10, - 'input_differences': [1], + 'input_differences': [[4194304], [10]], 'hidden_layers': [32, 32, 32], 'min_accuracy_value': 0, 'max_accuracy_value': 1, From d06f932a04e982075e59c66d098383c059d7a4ef Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 15:48:04 +0400 Subject: [PATCH 103/179] fixing pytests --- tests/unit/cipher_modules/component_analysis_tests_test.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index f09536c7..a150ad60 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -1,8 +1,5 @@ from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher -from claasp.cipher_modules.component_analysis_tests import generate_boolean_polynomial_ring_from_cipher from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis -from claasp.components.fsr_component import FSR -from claasp.cipher_modules.component_analysis_tests import fsr_properties from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher From 4a2e72978d5b202051dbf551a7c565ca85f51e10 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 16:40:11 +0400 Subject: [PATCH 104/179] fixing pytests related to report.py --- claasp/cipher_modules/report.py | 10 ++++++++-- tests/unit/utils/utils_test.py | 6 +----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 83cfd9da..9167a3fd 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -232,7 +232,10 @@ def _export(self, file_format, output_dir): path = output_dir + '/' + self.cipher.id + '/' + self.test_report["input_parameters"][ "test_name"] + '_tables/' + it + '/' + out + '/' + test - res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if file_format == '.csv': @@ -488,7 +491,10 @@ def _produce_graph(self, output_directory): data = self.test_report['test_results'][it][out][res] for case in list(data): - res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if out == 'round_output': output_res = self.test_report['test_results'][it]['cipher_output'][res] diff --git a/tests/unit/utils/utils_test.py b/tests/unit/utils/utils_test.py index 18bdbac4..0e1fff9e 100644 --- a/tests/unit/utils/utils_test.py +++ b/tests/unit/utils/utils_test.py @@ -40,17 +40,13 @@ def test_pprint_dictionary_to_file(): speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) test = AvalancheTests(speck) d = test.avalanche_tests(number_of_samples=100) - pprint_dictionary(d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]) - result = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]["input_difference_value"] - assert result == "0x1" tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) - analysis = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0]["input_difference_value"] + analysis = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0] pprint_dictionary_to_file(analysis, f"{tii_dir_path}/test_json") assert os.path.isfile(f"{tii_dir_path}/test_json") is True os.remove(f"{tii_dir_path}/test_json") - def test_sgn_function(): assert sgn_function(-1) == -1 From f5a0298e18a1cc007f4d761edddf5749d6cdc7be Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 16:45:09 +0400 Subject: [PATCH 105/179] fix pytest related to test_pprint_dictionary_to_file() --- tests/unit/utils/utils_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/unit/utils/utils_test.py b/tests/unit/utils/utils_test.py index 0e1fff9e..c4dc5f2b 100644 --- a/tests/unit/utils/utils_test.py +++ b/tests/unit/utils/utils_test.py @@ -42,8 +42,7 @@ def test_pprint_dictionary_to_file(): d = test.avalanche_tests(number_of_samples=100) tii_path = inspect.getfile(claasp) tii_dir_path = os.path.dirname(tii_path) - analysis = d["test_results"]["plaintext"]["round_output"]["avalanche_dependence_vectors"][0] - pprint_dictionary_to_file(analysis, f"{tii_dir_path}/test_json") + pprint_dictionary_to_file(d["input_parameters"], f"{tii_dir_path}/test_json") assert os.path.isfile(f"{tii_dir_path}/test_json") is True os.remove(f"{tii_dir_path}/test_json") From 48e228cf7e6141f9fa5baf3d7dd21c3265e21637 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 16:49:04 +0400 Subject: [PATCH 106/179] fixing pytests --- tests/unit/cipher_modules/component_analysis_tests_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index a150ad60..f6280819 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -18,7 +18,6 @@ def test_component_analysis_tests(): result = CipherComponentsAnalysis(aes).component_analysis_tests() assert len(result) == 7 -@pytest.mark.filterwarnings("ignore::DeprecationWarning:") def test_print_component_analysis_as_radar_charts(): aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) fig = CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() From 11ea584ea60fc047c684d288ab86de8ebee66bde Mon Sep 17 00:00:00 2001 From: cs Date: Mon, 26 Feb 2024 20:34:24 +0400 Subject: [PATCH 107/179] finalize a52 cipher doctest and unit test --- .../stream_ciphers/a5_2_stream_cipher.py | 186 ++++++++++++++++++ .../stream_ciphers/a5_2_stream_cipher_test.py | 16 ++ 2 files changed, 202 insertions(+) create mode 100644 claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py create mode 100644 tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py diff --git a/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py b/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py new file mode 100644 index 00000000..0a5b4437 --- /dev/null +++ b/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py @@ -0,0 +1,186 @@ + +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** + +from claasp.cipher import Cipher +from claasp.DTOs.component_state import ComponentState +from claasp.utils.utils import get_inputs_parameter +from claasp.name_mappings import INPUT_KEY, INPUT_FRAME + + +BIT_LENGTH = "BIT_LENGTH" +TAPPED_BITS = "TAPPED_BITS" +CLOCK_BIT = "CLOCK_BIT" +CLOCK_POLYNOMIAL = "CLOCK_POLYNOMIAL" + +MASK_AFTER_FRAME_SETUP = 0b000100000000000000000000100000000000000000000100000000000000000000000000010000000 + + +REGISTERS = [ + {BIT_LENGTH: 19, + TAPPED_BITS: [[0], [1], [2], [5]], + CLOCK_POLYNOMIAL: [[70, 73], [70, 77], [73, 77], [70], []]}, + {BIT_LENGTH: 22, + TAPPED_BITS: [[19], [20]], + CLOCK_POLYNOMIAL: [[70, 73], [70, 77], [73, 77], [77], []]}, + {BIT_LENGTH: 23, + TAPPED_BITS: [[41], [42], [43], [56]], + CLOCK_POLYNOMIAL: [[70, 73], [70, 77], [73, 77], [73], []]}, + {BIT_LENGTH: 17, + TAPPED_BITS: [[64], [69]], + CLOCK_POLYNOMIAL: None}] + + +PARAMETERS_CONFIGURATION_LIST = [{'key_bit_size': 64, 'frame_bit_size': 22, + 'number_of_normal_clocks_at_initialization': 100, + 'number_of_rounds': 228}] + + +class A52StreamCipher(Cipher): + """ + Construct an instance of the A52StreamCipher class. + + This class is used to store compact representations of a cipher, used to generate the corresponding cipher. + + INPUT: + + - ``key_bit_size`` -- **integer** (default: `128`); cipher key bit size of the cipher + - ``number_of_rounds`` -- **integer** (default: `640`); number of rounds of the cipher + + EXAMPLES:: + + sage: from claasp.ciphers.stream_ciphers.a5_2_stream_cipher import A52StreamCipher + sage: a52 = A52StreamCipher() + sage: a52.number_of_rounds + 229 + + sage: a52.component_from(0, 0).id + 'constant_0_0' + + sage: a52.component_from(1, 0).id + 'fsr_1_0' + + sage: key = 0x003fffffffffffff + sage: frame = 0b1000010000000000000000 + sage: keystream = 0xf4512cac13593764460b722dadd51200350ca385a853735ee5c889944 + sage: a52.evaluate([key, frame]) == keystream + True + + """ + + def __init__(self, key_bit_size=64, frame_bit_size=22, number_of_normal_clocks_at_initialization=100, + number_of_rounds=228): + + super().__init__(family_name="a52", + cipher_type="stream_cipher", + cipher_inputs=[INPUT_KEY, INPUT_FRAME], + cipher_inputs_bit_size=[key_bit_size, frame_bit_size], + cipher_output_bit_size=number_of_rounds) + + # registers initialization + regs_size = 0 + for i in range(len(REGISTERS)-1): + regs_size += REGISTERS[i][BIT_LENGTH] + regs_size += REGISTERS[-1][BIT_LENGTH] + regs = self.regs_initialization(key_bit_size=key_bit_size, frame_bit_size=frame_bit_size, + number_of_normal_clocks_at_initialization=number_of_normal_clocks_at_initialization, + regs_size=regs_size) + + fsr_description = [[[REGISTERS[i][BIT_LENGTH], REGISTERS[i][TAPPED_BITS], + REGISTERS[i][CLOCK_POLYNOMIAL]] for i in range(len(REGISTERS))], 1, 1] + cipher_output=[] + for r in range(number_of_rounds): + regs_xor_output = [] + regs_xor_bit = [0,3,6,19,27,31,41,45,47] + for i in regs_xor_bit: + regs_xor_output.append(ComponentState(regs.id, [[i]])) + regs_and_bit = [[3,4,6], [24,27,31], [45,47,50]] + for k in regs_and_bit: + for i in range(len(k)): + for j in range(i+1, len(k)): + self.add_AND_component(regs.id, [[k[i],k[j]]], 1) + regs_xor_output.append(ComponentState([self.get_current_component_id()], [[0]])) + + inputs_id, inputs_pos = get_inputs_parameter(regs_xor_output) + self.add_XOR_component(inputs_id, inputs_pos, 1) + cipher_output.append(ComponentState([self.get_current_component_id()], [[0]])) + + regs = self.round_function(regs=regs, regs_size=regs_size, fsr_description=fsr_description) + + inputs_id, inputs_pos = get_inputs_parameter(cipher_output) + self.add_cipher_output_component(inputs_id, inputs_pos, number_of_rounds) + + def regs_initialization(self, key_bit_size, frame_bit_size, number_of_normal_clocks_at_initialization, regs_size): + # registers initialization + self.add_round() + constant_0 = [] + for i in range(len(REGISTERS)): + self.add_constant_component(REGISTERS[i][BIT_LENGTH] - 1, 0) + constant_0.append(ComponentState([self.get_current_component_id()], + [[i for i in range(REGISTERS[i][BIT_LENGTH] - 1)]])) + + self.add_constant_component(regs_size, 0) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + # load key + fsr_description = [[[REGISTERS[i][BIT_LENGTH], REGISTERS[i][TAPPED_BITS]] for i in range(len(REGISTERS))], 1] + for i in range(key_bit_size): + self.add_FSR_component(regs.id, regs.input_bit_positions, regs_size, fsr_description) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + inputs = [regs] + for j in range(len(REGISTERS)): + inputs.append(constant_0[j]) + inputs.append(ComponentState([INPUT_KEY], [[i]])) + inputs_id, inputs_pos = get_inputs_parameter(inputs) + self.add_XOR_component(inputs_id, inputs_pos, regs_size) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + # load frame + for i in range(frame_bit_size): + self.add_FSR_component(regs.id, regs.input_bit_positions, regs_size, fsr_description) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + inputs = [regs] + for j in range(len(REGISTERS)): + inputs.append(constant_0[j]) + inputs.append(ComponentState([INPUT_FRAME], [[i]])) + inputs_id, inputs_pos = get_inputs_parameter(inputs) + self.add_XOR_component(inputs_id, inputs_pos, regs_size) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + # For A5/2, somebits is fixed to 1 after frame is loaded + self.add_constant_component(regs_size, MASK_AFTER_FRAME_SETUP) + mask = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + inputs_id, inputs_pos = get_inputs_parameter([regs, mask]) + self.add_OR_component(inputs_id, inputs_pos, regs_size) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + # normal clocked without output + fsr_description = [[[REGISTERS[i][BIT_LENGTH], REGISTERS[i][TAPPED_BITS], + REGISTERS[i][CLOCK_POLYNOMIAL]] for i in range(len(REGISTERS))], 1, + number_of_normal_clocks_at_initialization] + self.add_FSR_component(regs.id, regs.input_bit_positions, regs_size, fsr_description) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + return regs + + def round_function(self, regs, regs_size, fsr_description): + self.add_round() + self.add_FSR_component(regs.id, regs.input_bit_positions, regs_size, fsr_description) + regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) + + return regs diff --git a/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py b/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py new file mode 100644 index 00000000..bdfbfcad --- /dev/null +++ b/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py @@ -0,0 +1,16 @@ +from claasp.ciphers.stream_ciphers.a5_2_stream_cipher import A52StreamCipher + +def test_a51(): + a52 = A52StreamCipher() + assert a52.family_name == 'a52' + assert a52.type == 'stream_cipher' + assert a52.number_of_rounds == 229 + assert a52.id == 'a52_k64_i22_o228_r229' + assert a52.component_from(0, 0).id == 'constant_0_0' + assert a52.component_from(1, 0).id == 'fsr_1_0' + + key = 0x003fffffffffffff + frame = 0b1000010000000000000000 + keystream = 0xf4512cac13593764460b722dadd51200350ca385a853735ee5c889944 + assert a52.evaluate([key, frame]) == keystream + From e6da56dad730101a056dc06fe17d1b64e4216611 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Mon, 26 Feb 2024 20:36:49 +0400 Subject: [PATCH 108/179] polish code --- claasp/cipher_modules/component_analysis_tests.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 4f62c945..3bab4c27 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -1012,7 +1012,6 @@ def get_inverse_matrix_in_integer_representation(component): component.input_bit_size, component.output_bit_size) return field_element_matrix_to_integer_matrix(matrix.inverse()) - def has_maximal_branch_number(component): """ INPUT: @@ -1127,7 +1126,6 @@ def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, mix_column_component.input_bit_size, mix_column_component.output_bit_size) """ - G = PolynomialRing(GF(2), 'x') x = G.gen() irr_poly = int_to_poly(polynomial_as_int, word_size, x) From 8de2900188d1e93ff9f01c7370e3ae160031c02b Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 27 Feb 2024 07:56:21 +0400 Subject: [PATCH 109/179] Refactoring continuous_diffusion_tests method --- .../continuous_diffusion_analysis.py | 91 +++++++++++++------ 1 file changed, 63 insertions(+), 28 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index e6504f17..cf324c6d 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -15,9 +15,6 @@ # along with this program. If not, see . # **************************************************************************** - -import math -import random import numpy as np from decimal import Decimal from multiprocessing import Pool @@ -212,7 +209,9 @@ def _compute_sample_for_continuous_neutrality_measure(self, lst_input, sbox_prec sbox_precomputations_mix_columns, output_dict, x): def mag(xx): if xx > 0: - return math.log(abs(math.log(abs(xx), 10)) + 1, 2) + inner_log = xx.log10().copy_abs() + outer_log = (inner_log + Decimal('1')).ln() / Decimal('2').ln() + return outer_log return 0 x_inputs = [ @@ -360,6 +359,41 @@ def incrementing_counters(continuous_neutrality_measures_output_values_, continu else: df_values[index][key] = 0.0 + def _merge_dictionaries(*dicts, is_continuous_avalanche_factor=True, is_continuous_neutrality_measure=True, + is_diffusion_factor=True): + merged_dict = {} + def merge_recursive(target, source): + for key, value in source.items(): + if isinstance(value, dict): + node = target.setdefault(key, {}) + merge_recursive(node, value) + else: + if target.get(key) is None: + target[key] = value + else: + # Merge or update the values list, depending on the metric + if isinstance(value, list) and isinstance(target[key], list): + target[key].extend(value) + else: + target[key] = value + + def filter_metrics(data): + if not is_continuous_avalanche_factor: + data.pop("continuous_avalanche_factor", None) + if not is_continuous_neutrality_measure: + data.pop("continuous_neutrality_measure", None) + if not is_diffusion_factor: + data.pop("diffusion_factor", None) + for key, value in data.items(): + if isinstance(value, dict): + filter_metrics(value) + + for dictionary in dicts[1:]: + merge_recursive(merged_dict, dictionary) + + filter_metrics(merged_dict) + return merged_dict + def continuous_diffusion_tests(self, continuous_avalanche_factor_number_of_samples=100, threshold_for_avalanche_factor=0.001, @@ -420,46 +454,47 @@ def continuous_diffusion_tests(self, 'is_diffusion_factor': is_diffusion_factor }, "test_results": {}} - + continuous_diffusion_factor_output = {} + continuous_neutrality_measure_output = {} + continuous_avalanche_factor_output = {} if is_diffusion_factor: continuous_diffusion_factor_output = self.continuous_diffusion_factor( continuous_diffusion_factor_beta_number_of_samples, continuous_diffusion_factor_gf_number_samples) + inputs_tags = list(continuous_diffusion_factor_output.keys()) + output_tags = list(continuous_diffusion_factor_output[inputs_tags[0]].keys()) if is_continuous_neutrality_measure: continuous_neutrality_measure_output = self.continuous_neutrality_measure_for_bit_j( continuous_neutral_measure_beta_number_of_samples, continuous_neutral_measure_gf_number_samples) - + inputs_tags = list(continuous_neutrality_measure_output.keys()) + output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) + for it in inputs_tags: + for out in output_tags: + copy_values = [list(X.values()) for X in + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'][ + 'values']] + copy_values = [value for round in copy_values for value in round] + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'][ + 'values'] = copy_values + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('input_bit') + continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('output_bits') if is_continuous_avalanche_factor: continuous_avalanche_factor_output = self.continuous_avalanche_factor( threshold_for_avalanche_factor, continuous_avalanche_factor_number_of_samples) - - inputs_tags = list(continuous_neutrality_measure_output.keys()) - output_tags = list(continuous_neutrality_measure_output[inputs_tags[0]].keys()) - - for it in inputs_tags: - for out in output_tags: - copy_values = [list(X.values()) for X in - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values']] - copy_values = [value for round in copy_values for value in round] - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure']['values'] = copy_values - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('input_bit') - continuous_neutrality_measure_output[it][out]['continuous_neutrality_measure'].pop('output_bits') - - for input_tag in inputs_tags: - continuous_diffusion_tests["test_results"][input_tag] = {} - for output_tag in output_tags: - continuous_diffusion_tests["test_results"][input_tag][output_tag] = { - **continuous_neutrality_measure_output[input_tag][output_tag], - **continuous_avalanche_factor_output[input_tag][output_tag], - **continuous_diffusion_factor_output[input_tag][output_tag], - } + inputs_tags = list(continuous_avalanche_factor_output.keys()) + output_tags = list(continuous_avalanche_factor_output[inputs_tags[0]].keys()) + + continuous_diffusion_tests["test_results"] = self._merge_dictionaries( + continuous_diffusion_factor_output, continuous_avalanche_factor_output, + continuous_neutrality_measure_output, is_continuous_avalanche_factor=is_continuous_avalanche_factor, + is_continuous_neutrality_measure=is_continuous_neutrality_measure, + is_diffusion_factor=is_diffusion_factor) for input_tag in inputs_tags: for output_tag in output_tags: for test in continuous_diffusion_tests["test_results"][input_tag][output_tag].keys(): continuous_diffusion_tests["test_results"][input_tag][output_tag][test] = [ continuous_diffusion_tests["test_results"][input_tag][output_tag][test]] - return continuous_diffusion_tests def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_number_samples, From c160c32bc523e16a77ae0ed987621047ae4d8d51 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 27 Feb 2024 08:34:55 +0400 Subject: [PATCH 110/179] Refactoring continuous_diffusion_tests method --- claasp/cipher_modules/continuous_diffusion_analysis.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index cf324c6d..438f8fbb 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -487,9 +487,9 @@ def continuous_diffusion_tests(self, continuous_diffusion_tests["test_results"] = self._merge_dictionaries( continuous_diffusion_factor_output, continuous_avalanche_factor_output, - continuous_neutrality_measure_output, is_continuous_avalanche_factor=is_continuous_avalanche_factor, - is_continuous_neutrality_measure=is_continuous_neutrality_measure, - is_diffusion_factor=is_diffusion_factor) + continuous_neutrality_measure_output, is_continuous_avalanche_factor, + is_continuous_neutrality_measure, + is_diffusion_factor) for input_tag in inputs_tags: for output_tag in output_tags: for test in continuous_diffusion_tests["test_results"][input_tag][output_tag].keys(): From 8e83dc5f677b627854f1e517ca4e7a6c21dd95d6 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 27 Feb 2024 08:55:16 +0400 Subject: [PATCH 111/179] Refactoring continuous_diffusion_tests method --- .../cipher_modules/continuous_diffusion_analysis.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index 438f8fbb..d4e4ee00 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -359,9 +359,15 @@ def incrementing_counters(continuous_neutrality_measures_output_values_, continu else: df_values[index][key] = 0.0 - def _merge_dictionaries(*dicts, is_continuous_avalanche_factor=True, is_continuous_neutrality_measure=True, - is_diffusion_factor=True): + def _merge_dictionaries( + self, continuous_diffusion_factor_output, continuous_avalanche_factor_output, + continuous_neutrality_measure_output, is_continuous_avalanche_factor=True, + is_continuous_neutrality_measure=True, is_diffusion_factor=True + ): + dict_of_outputs = [continuous_diffusion_factor_output, continuous_avalanche_factor_output, + continuous_neutrality_measure_output] merged_dict = {} + def merge_recursive(target, source): for key, value in source.items(): if isinstance(value, dict): @@ -388,7 +394,7 @@ def filter_metrics(data): if isinstance(value, dict): filter_metrics(value) - for dictionary in dicts[1:]: + for dictionary in dict_of_outputs: merge_recursive(merged_dict, dictionary) filter_metrics(merged_dict) From 197741b4d3c2dd92e5f235e8b9427b50f640d69b Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 27 Feb 2024 09:40:19 +0400 Subject: [PATCH 112/179] updated print_trail function in report class --- claasp/cipher_modules/avalanche_tests.py | 8 +++----- claasp/cipher_modules/report.py | 10 ++++++++-- .../statistical_tests/dieharder_statistical_tests.py | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index 032ac901..b5641e34 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -66,8 +66,8 @@ def avalanche_tests(cipher, number_of_samples=5, avalanche_dependence_uniform_bi diffusion_tests, input_name, intermediate_output_name) calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, input_name, intermediate_output_name) - #calculate_worst_input_differences(cipher, criterion_name, largest_round_criterion_not_satisfied, - # diffusion_tests, input_name, intermediate_output_name) + calculate_worst_input_differences(cipher, criterion_name, largest_round_criterion_not_satisfied, + diffusion_tests, input_name, intermediate_output_name) return diffusion_tests @@ -112,8 +112,6 @@ def add_intermediate_output_values_to_dictionary(cipher, criterion_name, dict_in cipher.inputs_bit_size[index] output_bit_size = dict_intermediate_output_names[intermediate_output_name][0] dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_output_bit_size'] = output_bit_size - #dict_test_results[input_name][intermediate_output_name][criterion_name]["max_possible_value_per_bit"] = 1 - #dict_test_results[input_name][intermediate_output_name][criterion_name]["min_possible_value_per_bit"] = 0 dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_bit'] = \ dict_parameters[criterion_name][1] dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_max_possible_value_per_output_block'] = \ @@ -197,7 +195,7 @@ def calculate_worst_input_differences(cipher, criterion_name, largest_round_crit worst_input_diffs = [input_diff for input_diff, specific_round in largest_round_criterion_not_satisfied.items() if specific_round == max_round_criterion_not_satisfied] - dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(worst_input_diffs) + dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append({'worst_input_differences': worst_input_diffs}) def avalanche_probability_vectors(cipher, nb_samples): diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 86e30562..32dc953e 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -232,7 +232,10 @@ def _export(self, file_format, output_dir): path = output_dir + '/' + self.cipher.id + '/' + self.test_report["input_parameters"][ "test_name"] + '_tables/' + it + '/' + out + '/' + test - res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if file_format == '.csv': @@ -488,8 +491,11 @@ def _produce_graph(self, output_directory): data = self.test_report['test_results'][it][out][res] for case in list(data): - res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if out == 'round_output': output_res = self.test_report['test_results'][it]['cipher_output'][res] if "input_difference_value" in case.keys(): diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 59e4947b..8c3ff652 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -38,7 +38,7 @@ def __init__(self, cipher): @staticmethod - def dieharder_statistical_tests(input_file): + def dieharder_statistical_tests(): """ Run the run_dieharder_statistical_tests_tool_interactively function and process its output with the parse_output function From 05b1a6ff4a4eb75d68096da554732cde1e580a9e Mon Sep 17 00:00:00 2001 From: davidgerault Date: Tue, 27 Feb 2024 10:24:07 +0400 Subject: [PATCH 113/179] Cleaned imports --- .../neural_network_tests_test.py | 40 +------------------ 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py index 378b9f62..5c17fbde 100644 --- a/tests/unit/cipher_modules/neural_network_tests_test.py +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -1,43 +1,5 @@ -import os -import sys import pytest -import inspect -import os.path -import numpy as np -from io import StringIO -from decimal import Decimal - -import claasp -from claasp.cipher import Cipher -from claasp.ciphers.block_ciphers.lblock_block_cipher import LBlockBlockCipher -from claasp.ciphers.block_ciphers.tea_block_cipher import TeaBlockCipher -from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher -from claasp.ciphers.block_ciphers.xtea_block_cipher import XTeaBlockCipher -from claasp.ciphers.permutations.ascon_permutation import AsconPermutation from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher -from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation -from claasp.ciphers.permutations.keccak_invertible_permutation import KeccakInvertiblePermutation -from claasp.ciphers.permutations.keccak_permutation import KeccakPermutation -from claasp.ciphers.permutations.xoodoo_permutation import XoodooPermutation -from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher -from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher -from claasp.ciphers.block_ciphers.present_block_cipher import PresentBlockCipher -from claasp.ciphers.block_ciphers.identity_block_cipher import IdentityBlockCipher -from claasp.ciphers.permutations.ascon_sbox_sigma_permutation import AsconSboxSigmaPermutation -from claasp.ciphers.block_ciphers.simon_block_cipher import SimonBlockCipher -from claasp.ciphers.block_ciphers.skinny_block_cipher import SkinnyBlockCipher -from claasp.ciphers.permutations.spongent_pi_permutation import SpongentPiPermutation -from claasp.ciphers.permutations.photon_permutation import PhotonPermutation -from claasp.ciphers.block_ciphers.lea_block_cipher import LeaBlockCipher -from claasp.ciphers.permutations.sparkle_permutation import SparklePermutation -from claasp.ciphers.permutations.xoodoo_invertible_permutation import XoodooInvertiblePermutation -from claasp.ciphers.permutations.gift_sbox_permutation import GiftSboxPermutation -from claasp.ciphers.block_ciphers.raiden_block_cipher import RaidenBlockCipher -from claasp.ciphers.block_ciphers.hight_block_cipher import HightBlockCipher -from claasp.ciphers.block_ciphers.des_block_cipher import DESBlockCipher -from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation -from claasp.ciphers.block_ciphers.bea1_block_cipher import BEA1BlockCipher - from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests def test_find_good_input_difference_for_neural_distinguisher(): @@ -101,4 +63,4 @@ def test_neural_network_differential_distinguisher_tests(): 'output_bit_size': 32, 'number_of_epochs': 10, 'plaintext_input_bit_size': 32, - 'key_input_bit_size': 64} \ No newline at end of file + 'key_input_bit_size': 64} From a2b9bd65d917988d2c8cc5ef59c1d402accc20da Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Tue, 27 Feb 2024 10:33:30 +0400 Subject: [PATCH 114/179] fixing pytests --- claasp/cipher_modules/avalanche_tests.py | 4 ++++ claasp/cipher_modules/report.py | 2 ++ 2 files changed, 6 insertions(+) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index c7c206a3..a9f8e9d0 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -24,6 +24,8 @@ from claasp.cipher_modules import evaluator from claasp.name_mappings import INTERMEDIATE_OUTPUT, CIPHER_OUTPUT +import matplotlib.pyplot as plt +from matplotlib.colors import LinearSegmentedColormap class AvalancheTests: def __init__(self, cipher): @@ -467,3 +469,5 @@ def add_intermediate_output_rounds_id_to_dictionary(self): return dict_intermediate_output_names + + diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 9167a3fd..178b1e38 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -498,6 +498,8 @@ def _produce_graph(self, output_directory): if out == 'round_output': output_res = self.test_report['test_results'][it]['cipher_output'][res] + if 'worst_input_differences' in output_res[-1].keys(): + output_res = output_res[:-1] if "input_difference_value" in case.keys(): diff_key = case["input_difference_value"] output = [out for out in output_res if out["input_difference_value"] == diff_key][0] From 28ab232c737f93e7372cbc9e3876349d6fb00628 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 27 Feb 2024 11:20:50 +0400 Subject: [PATCH 115/179] updated print_trail function in report class --- claasp/cipher_modules/report.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 32dc953e..c37c6ca1 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -498,6 +498,8 @@ def _produce_graph(self, output_directory): continue if out == 'round_output': output_res = self.test_report['test_results'][it]['cipher_output'][res] + if 'worst_input_differences' in output_res[-1].keys(): + output_res = output_res[:-1] if "input_difference_value" in case.keys(): diff_key = case["input_difference_value"] output = [out for out in output_res if out["input_difference_value"] == diff_key][0] From 7b55d39903a0235f37320ffb6228ffe9220d1c77 Mon Sep 17 00:00:00 2001 From: cs Date: Tue, 27 Feb 2024 11:21:48 +0400 Subject: [PATCH 116/179] rename the test name --- tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py b/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py index bdfbfcad..40f09b8b 100644 --- a/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py +++ b/tests/unit/ciphers/stream_ciphers/a5_2_stream_cipher_test.py @@ -1,6 +1,6 @@ from claasp.ciphers.stream_ciphers.a5_2_stream_cipher import A52StreamCipher -def test_a51(): +def test_a52(): a52 = A52StreamCipher() assert a52.family_name == 'a52' assert a52.type == 'stream_cipher' From 6e924e112906edcecc134232e37911fc01ab1a5c Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 27 Feb 2024 11:50:38 +0400 Subject: [PATCH 117/179] Fixing doctests on continuous_diffusion_analysis --- .../continuous_diffusion_analysis.py | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index d4e4ee00..de604c57 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -275,9 +275,11 @@ def continuous_avalanche_factor(self, lambda_value, number_of_samples): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: from claasp.cipher_modules.continuous_diffusion_analysis import ContinuousDiffusionAnalysis sage: speck_cipher = speck(number_of_rounds=2) - sage: result = speck_cipher.continuous_avalanche_factor(0.001, 10) - sage: result['plaintext']['round_key_output']['continuous_avalanche_factor']['values'][0]['value'] + sage: cda = ContinuousDiffusionAnalysis(speck_cipher) + sage: result = cda.continuous_avalanche_factor(0.001, 10) + sage: result['plaintext']['round_key_output']['continuous_avalanche_factor']['values'][0] 0.0 """ input_tags = self.cipher.inputs @@ -302,9 +304,11 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: from claasp.cipher_modules.continuous_diffusion_analysis import ContinuousDiffusionAnalysis sage: speck_cipher = speck(number_of_rounds=2) # long time - sage: output = speck_cipher.continuous_diffusion_factor(5, 20) # long time - sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0]['2'] > 0 # long time + sage: cda = ContinuousDiffusionAnalysis(speck_cipher) + sage: output = cda.continuous_diffusion_factor(5, 20) # long time + sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0] > 0 # long time True """ output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( @@ -442,9 +446,11 @@ def continuous_diffusion_tests(self, EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck + sage: from claasp.cipher_modules.continuous_diffusion_analysis import ContinuousDiffusionAnalysis sage: speck_cipher = speck(number_of_rounds=1) # long time - sage: output = speck_cipher.continuous_diffusion_tests() # long time - sage: output['plaintext']['round_key_output']['continuous_neutrality_measure']['values'][0]['1'] == 0.0 # long time + sage: cda = ContinuousDiffusionAnalysis(speck_cipher) + sage: output = cda.continuous_diffusion_tests() # long time + sage: output["test_results"]['plaintext']['round_key_output']['continuous_neutrality_measure'][0]['values'][0] == 0.0 # long time True """ continuous_diffusion_tests = {"input_parameters": { @@ -518,7 +524,10 @@ def continuous_neutrality_measure_for_bit_j(self, beta_number_of_samples, gf_num EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: output = speck(number_of_rounds=2).continuous_neutrality_measure_for_bit_j(50, 200) # long time + sage: from claasp.cipher_modules.continuous_diffusion_analysis import ContinuousDiffusionAnalysis + sage: speck_cipher = speck(number_of_rounds=2) + sage: cda = ContinuousDiffusionAnalysis(speck_cipher) + sage: output = cda.continuous_neutrality_measure_for_bit_j(50, 200) # long time sage: output['plaintext']['cipher_output']['continuous_neutrality_measure']['values'][0]['2'] > 0 # long time True """ From f3d112c6fb8536c7410158c185bd34c9ce0d6921 Mon Sep 17 00:00:00 2001 From: cs Date: Tue, 27 Feb 2024 11:54:36 +0400 Subject: [PATCH 118/179] modified the FSR function for None type --- claasp/cipher_modules/generic_functions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher_modules/generic_functions.py b/claasp/cipher_modules/generic_functions.py index 8f006cb2..4dae1a38 100644 --- a/claasp/cipher_modules/generic_functions.py +++ b/claasp/cipher_modules/generic_functions.py @@ -994,7 +994,7 @@ def get_polynomail(polynomial_index_list, R): end += registers_info[i][0] registers_update_bit[i] = end - 1 registers_polynomial[i] = get_polynomail(registers_info[i][1], R) - if len(registers_info[i]) > 2: + if len(registers_info[i]) > 2 and registers_info[i][2] != None: clock_polynomials[i] = get_polynomail(registers_info[i][2], R) for r in range(number_of_clocks): From 24365aea8e3fe3a058796e52cde6eec97b702952 Mon Sep 17 00:00:00 2001 From: Alessandro De Piccoli Date: Tue, 27 Feb 2024 10:50:56 +0100 Subject: [PATCH 119/179] FIX/Fix: consider whole solution when searching XOR linear trails --- .../models/sat/sat_models/sat_xor_linear_model.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py index 9a66396b..a0094ff6 100644 --- a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py +++ b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py @@ -152,13 +152,9 @@ def find_all_xor_linear_trails_with_fixed_weight(self, fixed_weight, fixed_value literals = [] for component in self._cipher.get_all_components(): bit_len = component.output_bit_size - if component.type == SBOX or \ - (component.type == WORD_OPERATION and - component.description[0] in ('AND', 'MODADD', 'MODSUB', 'OR', 'SHIFT_BY_VARIABLE_AMOUNT')): - value_to_avoid = int(solution['components_values'][f'{component.id}{out_suffix}']['value'], - base=16) - minus = ['-' * (value_to_avoid >> i & 1) for i in reversed(range(bit_len))] - literals.extend([f'{minus[i]}{component.id}_{i}{out_suffix}' for i in range(bit_len)]) + value_to_avoid = int(solution['components_values'][f'{component.id}{out_suffix}']['value'], base=16) + minus = ['-' * (value_to_avoid >> i & 1) for i in reversed(range(bit_len))] + literals.extend([f'{minus[i]}{component.id}_{i}{out_suffix}' for i in range(bit_len)]) self._model_constraints.append(' '.join(literals)) solution = self.solve(XOR_LINEAR, solver_name=solver_name) solution['building_time_seconds'] = end_building_time - start_building_time From e9b7a7fdda11416c6576f1c9f5e9912b54cf7bbc Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Tue, 27 Feb 2024 14:17:10 +0400 Subject: [PATCH 120/179] Refactoring _merge_dictionaries --- .../continuous_diffusion_analysis.py | 109 ++++++++---------- 1 file changed, 47 insertions(+), 62 deletions(-) diff --git a/claasp/cipher_modules/continuous_diffusion_analysis.py b/claasp/cipher_modules/continuous_diffusion_analysis.py index de604c57..aed05b60 100644 --- a/claasp/cipher_modules/continuous_diffusion_analysis.py +++ b/claasp/cipher_modules/continuous_diffusion_analysis.py @@ -31,9 +31,9 @@ def __init__(self, cipher): self.cipher = cipher def _compute_conditional_expected_value_for_continuous_metric(self, lambda_value, number_of_samples, tag_input): - def _create_list_fixing_some_inputs(tag_input): + def _create_list_fixing_some_inputs(_tag_input): max_bias = [-1, 1] - index_of_tag_input = self.cipher.inputs.index(tag_input) + index_of_tag_input = self.cipher.inputs.index(_tag_input) lst_input = [] i = 0 for _ in self.cipher.inputs: @@ -311,13 +311,13 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) sage: output['plaintext']['cipher_output']['diffusion_factor']['values'][0] > 0 # long time True """ - output_tags = ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( - self.cipher.as_python_dictionary()).keys() - i = 0 - continuous_neutrality_measures = {} - for cipher_input_size in self.cipher.inputs_bit_size: + output_tags = list(ContinuousDiffusionAnalysis._get_graph_representation_tag_output_sizes( + self.cipher.as_python_dictionary()).keys()) + continuous_neutrality_measures = {input_tag: {ot: {"diffusion_factor": {"values": []}} for ot in output_tags} + for input_tag in self.cipher.inputs} + + for i, cipher_input_size in enumerate(self.cipher.inputs_bit_size): input_tag = self.cipher.inputs[i] - continuous_neutrality_measures[input_tag] = {} for input_bit in range(cipher_input_size): continuous_neutrality_measures_output = self.continuous_neutrality_measure_for_bit_j( beta_number_of_samples, gf_number_samples, input_bit={input_tag: input_bit}) @@ -325,33 +325,29 @@ def continuous_diffusion_factor(self, beta_number_of_samples, gf_number_samples) continuous_neutrality_measures_values = \ continuous_neutrality_measures_output[input_tag][output_tag][ "continuous_neutrality_measure"]["values"] - if output_tag not in continuous_neutrality_measures[input_tag]: - continuous_neutrality_measures[input_tag][output_tag] = {} - continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"] = {} - continuous_neutrality_measures_output_values = continuous_neutrality_measures_values - if input_bit == 0: - continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"] = [ - {} for _ in range(len(continuous_neutrality_measures_output_values))] - ContinuousDiffusionAnalysis.incrementing_counters( - continuous_neutrality_measures_output_values, + if not continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"]: + continuous_neutrality_measures[input_tag][output_tag]["diffusion_factor"]["values"] = [{} for _ + in + continuous_neutrality_measures_values] + ContinuousDiffusionAnalysis._incrementing_counters( + continuous_neutrality_measures_values, continuous_neutrality_measures, cipher_input_size, input_tag, output_tag, input_bit ) - i += 1 - for it in continuous_neutrality_measures.keys(): - for out in continuous_neutrality_measures[it].keys(): - copy_values = [list(X.values()) for X in - continuous_neutrality_measures[it][out]['diffusion_factor']['values']] - copy_values = [value for round in copy_values for value in round] - continuous_neutrality_measures[it][out]['diffusion_factor']['values'] = copy_values + # Simplify the aggregation of values + for it, outs in continuous_neutrality_measures.items(): + for out, data in outs.items(): + values = data['diffusion_factor']['values'] + flattened_values = [value for sublist in values for value in sublist.values()] + continuous_neutrality_measures[it][out]['diffusion_factor']['values'] = flattened_values return continuous_neutrality_measures @staticmethod - def incrementing_counters(continuous_neutrality_measures_output_values_, continuous_neutrality_measures_, - cipher_input_size_, input_tag_, output_tag_, input_bit): + def _incrementing_counters(continuous_neutrality_measures_output_values_, continuous_neutrality_measures_, + cipher_input_size_, input_tag_, output_tag_, input_bit): df_values = continuous_neutrality_measures_[input_tag_][output_tag_]["diffusion_factor"]["values"] for index in range(len(continuous_neutrality_measures_output_values_)): for key in continuous_neutrality_measures_output_values_[index]: @@ -363,45 +359,34 @@ def incrementing_counters(continuous_neutrality_measures_output_values_, continu else: df_values[index][key] = 0.0 - def _merge_dictionaries( - self, continuous_diffusion_factor_output, continuous_avalanche_factor_output, - continuous_neutrality_measure_output, is_continuous_avalanche_factor=True, - is_continuous_neutrality_measure=True, is_diffusion_factor=True - ): - dict_of_outputs = [continuous_diffusion_factor_output, continuous_avalanche_factor_output, - continuous_neutrality_measure_output] + @staticmethod + def _merge_dictionaries(continuous_diffusion_factor_output, continuous_avalanche_factor_output, + continuous_neutrality_measure_output, is_continuous_avalanche_factor, + is_continuous_neutrality_measure, + is_diffusion_factor): merged_dict = {} - def merge_recursive(target, source): - for key, value in source.items(): - if isinstance(value, dict): - node = target.setdefault(key, {}) - merge_recursive(node, value) + def merge_two_dicts(target, source): + for k, v in source.items(): + if isinstance(v, dict): + target[k] = merge_two_dicts(target.get(k, {}), v) else: - if target.get(key) is None: - target[key] = value + if k in target and isinstance(target[k], list) and isinstance(v, list): + target[k] += v # Extend if both are lists else: - # Merge or update the values list, depending on the metric - if isinstance(value, list) and isinstance(target[key], list): - target[key].extend(value) - else: - target[key] = value - - def filter_metrics(data): - if not is_continuous_avalanche_factor: - data.pop("continuous_avalanche_factor", None) - if not is_continuous_neutrality_measure: - data.pop("continuous_neutrality_measure", None) - if not is_diffusion_factor: - data.pop("diffusion_factor", None) - for key, value in data.items(): - if isinstance(value, dict): - filter_metrics(value) - - for dictionary in dict_of_outputs: - merge_recursive(merged_dict, dictionary) - - filter_metrics(merged_dict) + target[k] = v + return target + + dict_of_outputs = [ + (continuous_diffusion_factor_output, is_diffusion_factor), + (continuous_avalanche_factor_output, is_continuous_avalanche_factor), + (continuous_neutrality_measure_output, is_continuous_neutrality_measure) + ] + + for dict_output, flag in dict_of_outputs: + if flag: + merged_dict = merge_two_dicts(merged_dict, dict_output) + return merged_dict def continuous_diffusion_tests(self, @@ -497,7 +482,7 @@ def continuous_diffusion_tests(self, inputs_tags = list(continuous_avalanche_factor_output.keys()) output_tags = list(continuous_avalanche_factor_output[inputs_tags[0]].keys()) - continuous_diffusion_tests["test_results"] = self._merge_dictionaries( + continuous_diffusion_tests["test_results"] = ContinuousDiffusionAnalysis._merge_dictionaries( continuous_diffusion_factor_output, continuous_avalanche_factor_output, continuous_neutrality_measure_output, is_continuous_avalanche_factor, is_continuous_neutrality_measure, From b0f61440204271ff75f39c9c48eecc48fcc822b8 Mon Sep 17 00:00:00 2001 From: cs Date: Tue, 27 Feb 2024 15:03:51 +0400 Subject: [PATCH 121/179] Rename private function --- claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py b/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py index 0a5b4437..f18494ef 100644 --- a/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py +++ b/claasp/ciphers/stream_ciphers/a5_2_stream_cipher.py @@ -96,9 +96,9 @@ def __init__(self, key_bit_size=64, frame_bit_size=22, number_of_normal_clocks_a for i in range(len(REGISTERS)-1): regs_size += REGISTERS[i][BIT_LENGTH] regs_size += REGISTERS[-1][BIT_LENGTH] - regs = self.regs_initialization(key_bit_size=key_bit_size, frame_bit_size=frame_bit_size, - number_of_normal_clocks_at_initialization=number_of_normal_clocks_at_initialization, - regs_size=regs_size) + regs = self._regs_initialization(key_bit_size=key_bit_size, frame_bit_size=frame_bit_size, + number_of_normal_clocks_at_initialization=number_of_normal_clocks_at_initialization, + regs_size=regs_size) fsr_description = [[[REGISTERS[i][BIT_LENGTH], REGISTERS[i][TAPPED_BITS], REGISTERS[i][CLOCK_POLYNOMIAL]] for i in range(len(REGISTERS))], 1, 1] @@ -119,12 +119,12 @@ def __init__(self, key_bit_size=64, frame_bit_size=22, number_of_normal_clocks_a self.add_XOR_component(inputs_id, inputs_pos, 1) cipher_output.append(ComponentState([self.get_current_component_id()], [[0]])) - regs = self.round_function(regs=regs, regs_size=regs_size, fsr_description=fsr_description) + regs = self._round_function(regs=regs, regs_size=regs_size, fsr_description=fsr_description) inputs_id, inputs_pos = get_inputs_parameter(cipher_output) self.add_cipher_output_component(inputs_id, inputs_pos, number_of_rounds) - def regs_initialization(self, key_bit_size, frame_bit_size, number_of_normal_clocks_at_initialization, regs_size): + def _regs_initialization(self, key_bit_size, frame_bit_size, number_of_normal_clocks_at_initialization, regs_size): # registers initialization self.add_round() constant_0 = [] @@ -178,7 +178,7 @@ def regs_initialization(self, key_bit_size, frame_bit_size, number_of_normal_clo return regs - def round_function(self, regs, regs_size, fsr_description): + def _round_function(self, regs, regs_size, fsr_description): self.add_round() self.add_FSR_component(regs.id, regs.input_bit_positions, regs_size, fsr_description) regs = ComponentState([self.get_current_component_id()], [[i for i in range(regs_size)]]) From cd5817dbd9c9f219667ec291964ce4aff2d13136 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Tue, 27 Feb 2024 15:34:55 +0400 Subject: [PATCH 122/179] put all intermediate methods as private --- claasp/cipher_modules/avalanche_tests.py | 175 ++++++++++++++++------- 1 file changed, 123 insertions(+), 52 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index a9f8e9d0..f0c1a8c2 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -29,7 +29,7 @@ class AvalancheTests: def __init__(self, cipher): - self.cipher = cipher + self._cipher = cipher def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias=0.05, avalanche_dependence_criterion_threshold=0, avalanche_dependence_uniform_criterion_threshold=0, @@ -73,19 +73,20 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias difference has been injected in position i in the plaintext. EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests sage: test = AvalancheTests(speck) sage: d = test.avalanche_tests(number_of_samples=100) - sage: d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][1] + sage: d["test_results"]["key"]["round_output"]["avalanche_dependence_vectors"][0]["vectors"][1] # random """ all_avalanche_probability_vectors = self.avalanche_probability_vectors(number_of_samples) criterion = self.compute_criterion_from_avalanche_probability_vectors(all_avalanche_probability_vectors, avalanche_dependence_uniform_bias) - intermediate_output_names = self.add_intermediate_output_components_id_to_dictionary(self.cipher.get_all_components()) + intermediate_output_names = self._add_intermediate_output_components_id_to_dictionary(self._cipher.get_all_components()) diffusion_tests = {"input_parameters": { "test_name": "avalanche_tests", "number_of_samples": number_of_samples, @@ -94,7 +95,7 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias "avalanche_dependence_uniform_criterion_threshold": avalanche_dependence_uniform_criterion_threshold, "avalanche_weight_criterion_threshold": avalanche_weight_criterion_threshold, "avalanche_entropy_criterion_threshold": avalanche_entropy_criterion_threshold}, - "test_results": self.init_dictionary_test_results(intermediate_output_names)} + "test_results": self._init_dictionary_test_results(intermediate_output_names)} parameters = { "avalanche_dependence_vectors": [run_avalanche_dependence, 1, @@ -105,26 +106,26 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias "avalanche_entropy_vectors": [run_avalanche_entropy, 1, avalanche_entropy_criterion_threshold]} for criterion_name in parameters.keys(): - for index, input_name in enumerate(self.cipher.inputs): + for index, input_name in enumerate(self._cipher.inputs): for intermediate_output_name in list(intermediate_output_names.keys()): if parameters[criterion_name][0]: - self.add_intermediate_output_values_to_dictionary(criterion_name, intermediate_output_names, + self._add_intermediate_output_values_to_dictionary(criterion_name, intermediate_output_names, parameters,diffusion_tests, index, input_name, intermediate_output_name) all_output_vectors, largest_round_criterion_not_satisfied = \ - self.calculate_regular_difference(criterion_name, criterion, intermediate_output_names, parameters, + self._calculate_regular_difference(criterion_name, criterion, intermediate_output_names, parameters, diffusion_tests, input_name, intermediate_output_name) - self.calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, + self._calculate_average_difference(all_output_vectors, criterion_name, parameters, diffusion_tests, input_name, intermediate_output_name) - self.calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, + self._calculate_worst_input_differences(criterion_name, largest_round_criterion_not_satisfied, diffusion_tests, input_name, intermediate_output_name) return diffusion_tests - def init_dictionary_test_results(self, dict_intermediate_output_names): + def _init_dictionary_test_results(self, dict_intermediate_output_names): dict_test_results = {} - for input_name in self.cipher.inputs: + for input_name in self._cipher.inputs: dict_test_results[input_name] = {} for intermediate_output_name in list(dict_intermediate_output_names.keys()): dict_test_results[input_name][intermediate_output_name] = {} @@ -132,14 +133,14 @@ def init_dictionary_test_results(self, dict_intermediate_output_names): return dict_test_results - def is_output(self, component): + def _is_output(self, component): return component.type == INTERMEDIATE_OUTPUT or component.type == CIPHER_OUTPUT - def add_intermediate_output_components_id_to_dictionary(self, components): + def _add_intermediate_output_components_id_to_dictionary(self, components): intermediate_output_names = {} for component in components: - if self.is_output(component): + if self._is_output(component): if component.description[0] not in list(intermediate_output_names.keys()): number_of_occurrences = 0 components_id = [] @@ -154,12 +155,12 @@ def add_intermediate_output_components_id_to_dictionary(self, components): return intermediate_output_names - def add_intermediate_output_values_to_dictionary(self, criterion_name, dict_intermediate_output_names, + def _add_intermediate_output_values_to_dictionary(self, criterion_name, dict_intermediate_output_names, dict_parameters, dict_test_results, index, input_name, intermediate_output_name): dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = {} dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_input_bit_size'] = \ - self.cipher.inputs_bit_size[index] + self._cipher.inputs_bit_size[index] output_bit_size = dict_intermediate_output_names[intermediate_output_name][0] dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_output_bit_size'] = output_bit_size dict_test_results["input_parameters"][f'{intermediate_output_name}_{criterion_name}_expected_value_per_bit'] = \ @@ -172,7 +173,7 @@ def add_intermediate_output_values_to_dictionary(self, criterion_name, dict_inte dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name] = [] - def calculate_regular_difference(self, criterion_name, dict_criterion, dict_intermediate_output_names, dict_parameters, + def _calculate_regular_difference(self, criterion_name, dict_criterion, dict_intermediate_output_names, dict_parameters, dict_test_results, input_name, intermediate_output_name): all_output_vectors = {} dict_largest_round_criterion_not_satisfied = {} @@ -212,7 +213,7 @@ def calculate_regular_difference(self, criterion_name, dict_criterion, dict_inte return all_output_vectors, dict_largest_round_criterion_not_satisfied - def calculate_average_difference(self, all_output_vectors, criterion_name, dict_parameters, dict_test_results, input_name, + def _calculate_average_difference(self, all_output_vectors, criterion_name, dict_parameters, dict_test_results, input_name, intermediate_output_name): dict_for_average_diff = {"input_difference_value": 'average'} output_vectors = [] @@ -238,10 +239,10 @@ def calculate_average_difference(self, all_output_vectors, criterion_name, dict_ dict_test_results["test_results"][input_name][intermediate_output_name][criterion_name].append(dict_for_average_diff) - def calculate_worst_input_differences(self, criterion_name, largest_round_criterion_not_satisfied, + def _calculate_worst_input_differences(self, criterion_name, largest_round_criterion_not_satisfied, dict_test_results, input_name, intermediate_output_name): max_round_criterion_not_satisfied = max( - largest_round_criterion_not_satisfied.values(), default=self.cipher.number_of_rounds) + largest_round_criterion_not_satisfied.values(), default=self._cipher.number_of_rounds) worst_input_diffs = [input_diff for input_diff, specific_round in largest_round_criterion_not_satisfied.items() if specific_round == max_round_criterion_not_satisfied] @@ -273,12 +274,13 @@ def avalanche_probability_vectors(self, nb_samples): sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests sage: test = AvalancheTests(speck) sage: apvs = test.avalanche_probability_vectors(100) - sage: apvs["plaintext"]["round_output"][0][3] + sage: apvs["plaintext"]["round_output"][0][3] # random + """ intermediate_output_names = {} - for component in self.cipher.get_all_components(): - if self.is_output(component): + for component in self._cipher.get_all_components(): + if self._is_output(component): if component.description[0] not in list(intermediate_output_names.keys()): intermediate_output_names[component.description[0]] = [0, component.output_bit_size] intermediate_output_names[component.description[0]][0] += 1 @@ -288,17 +290,17 @@ def avalanche_probability_vectors(self, nb_samples): # all_avalanche_probability_vectors['key']['round_output'][i] = [apv_round_0,apv_round_1, ... , apv_round_(n-1)] # where the diff has been injected in position i all_avalanche_probability_vectors = {} - for cipher_input in self.cipher.inputs: + for cipher_input in self._cipher.inputs: all_avalanche_probability_vectors[cipher_input] = {} for intermediate_output_name in list(intermediate_output_names.keys()): all_avalanche_probability_vectors[cipher_input][intermediate_output_name] = [] - inputs = self.generate_random_inputs(nb_samples) - evaluated_inputs = evaluator.evaluate_vectorized(self.cipher, inputs, intermediate_outputs=True, verbosity=False) - input_bits_to_analyse = self.cipher.get_all_inputs_bit_positions() - for index_of_specific_input, specific_input in enumerate(self.cipher.inputs): # where the diff is injected + inputs = self._generate_random_inputs(nb_samples) + evaluated_inputs = evaluator.evaluate_vectorized(self._cipher, inputs, intermediate_outputs=True, verbosity=False) + input_bits_to_analyse = self._cipher.get_all_inputs_bit_positions() + for index_of_specific_input, specific_input in enumerate(self._cipher.inputs): # where the diff is injected for input_diff in input_bits_to_analyse[specific_input]: - intermediate_avalanche_probability_vectors = self.generate_avalanche_probability_vectors( + intermediate_avalanche_probability_vectors = self._generate_avalanche_probability_vectors( intermediate_output_names, inputs, evaluated_inputs, input_diff, index_of_specific_input) for intermediate_output_name in list(intermediate_output_names.keys()): all_avalanche_probability_vectors[specific_input][intermediate_output_name].append( @@ -307,20 +309,20 @@ def avalanche_probability_vectors(self, nb_samples): return all_avalanche_probability_vectors - def generate_random_inputs(self, nb_samples): + def _generate_random_inputs(self, nb_samples): inputs = [] - for i in range(len(self.cipher.inputs)): + for i in range(len(self._cipher.inputs)): inputs.append(np.random.randint(256, - size=(math.ceil(self.cipher.inputs_bit_size[i] / 8), nb_samples), + size=(math.ceil(self._cipher.inputs_bit_size[i] / 8), nb_samples), dtype=np.uint8)) return inputs - def generate_avalanche_probability_vectors(self, dict_intermediate_output_names, inputs, + def _generate_avalanche_probability_vectors(self, dict_intermediate_output_names, inputs, evaluated_inputs, input_diff, index_of_specific_input): - inputs_prime = self.generate_inputs_prime(index_of_specific_input, input_diff, inputs) - evaluated_inputs_prime = evaluator.evaluate_vectorized(self.cipher, inputs_prime, + inputs_prime = self._generate_inputs_prime(index_of_specific_input, input_diff, inputs) + evaluated_inputs_prime = evaluator.evaluate_vectorized(self._cipher, inputs_prime, intermediate_outputs=True, verbosity=False) intermediate_avalanche_probability_vectors = {} for intermediate_output_name in list(dict_intermediate_output_names.keys()): @@ -339,13 +341,13 @@ def generate_avalanche_probability_vectors(self, dict_intermediate_output_names, return intermediate_avalanche_probability_vectors - def generate_inputs_prime(self, index_of_specific_input, input_diff, inputs): + def _generate_inputs_prime(self, index_of_specific_input, input_diff, inputs): inputs_prime = [] - for input_index in range(len(self.cipher.inputs)): + for input_index in range(len(self._cipher.inputs)): if input_index == index_of_specific_input: - diff = (1 << (self.cipher.inputs_bit_size[input_index] - 1 - input_diff)) + diff = (1 << (self._cipher.inputs_bit_size[input_index] - 1 - input_diff)) diff_vectorized = np.array( - np.frombuffer(int.to_bytes(diff, math.ceil(self.cipher.inputs_bit_size[input_index] / 8), byteorder='big'), + np.frombuffer(int.to_bytes(diff, math.ceil(self._cipher.inputs_bit_size[input_index] / 8), byteorder='big'), dtype=np.uint8)).reshape((-1, 1)) inputs_prime.append(inputs[input_index] ^ diff_vectorized) else: @@ -399,14 +401,16 @@ def compute_criterion_from_avalanche_probability_vectors(self, all_avalanche_pro :py:meth:`~avalanche_probability_vectors` for the returning vectors. EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests sage: test = AvalancheTests(speck) sage: apvs = test.avalanche_probability_vectors(100) - sage: d = test.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) + sage: d = test.compute_criterion_from_avalanche_probability_vectors(apvs, 0.2) # random + """ - intermediate_output_names = self.add_intermediate_output_rounds_id_to_dictionary() + intermediate_output_names = self._add_intermediate_output_rounds_id_to_dictionary() criterion = {} for input_tag in all_avalanche_probability_vectors.keys(): criterion[input_tag] = {} @@ -420,27 +424,27 @@ def compute_criterion_from_avalanche_probability_vectors(self, all_avalanche_pro criterion[input_tag][output_tag][input_diff][number_of_occurrence]["round"] = \ intermediate_output_names[output_tag][1][number_of_occurrence] vector = all_avalanche_probability_vectors[input_tag][output_tag][input_diff][number_of_occurrence] - self.set_vector_dependence(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - self.set_vector_dependence_uniform(avalanche_dependence_uniform_bias, criterion, input_diff, + self._set_vector_dependence(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + self._set_vector_dependence_uniform(avalanche_dependence_uniform_bias, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - self.set_vector_weight(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) - self.set_vector_entropy(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + self._set_vector_weight(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) + self._set_vector_entropy(criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector) return criterion - def set_vector_entropy(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + def _set_vector_entropy(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): vector_entropy = [round((-proba * log(proba, 2)) - (1 - proba) * log(1 - proba, 2), 5) if proba not in [0, 1] else 0 for proba in vector] criterion[input_tag][output_tag][input_diff][number_of_occurrence][ "avalanche_entropy_vectors"] = vector_entropy - def set_vector_weight(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + def _set_vector_weight(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): criterion[input_tag][output_tag][input_diff][number_of_occurrence]["avalanche_weight_vectors"] = vector - def set_vector_dependence_uniform(self, avalanche_dependence_uniform_bias, criterion, input_diff, + def _set_vector_dependence_uniform(self, avalanche_dependence_uniform_bias, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): bias = avalanche_dependence_uniform_bias vector_dependence_uniform = [1 if 1 / 2 - bias <= proba <= 1 / 2 + bias else 0 for proba in vector] @@ -448,16 +452,16 @@ def set_vector_dependence_uniform(self, avalanche_dependence_uniform_bias, crite "avalanche_dependence_uniform_vectors"] = vector_dependence_uniform - def set_vector_dependence(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): + def _set_vector_dependence(self, criterion, input_diff, input_tag, number_of_occurrence, output_tag, vector): vector_dependence = [1 if proba != 0 else 0 for proba in vector] criterion[input_tag][output_tag][input_diff][number_of_occurrence][ "avalanche_dependence_vectors"] = vector_dependence - def add_intermediate_output_rounds_id_to_dictionary(self): + def _add_intermediate_output_rounds_id_to_dictionary(self): dict_intermediate_output_names = {} - for cipher_round in self.cipher.rounds_as_list: + for cipher_round in self._cipher.rounds_as_list: for component in cipher_round.components: - if self.is_output(component): + if self._is_output(component): if component.description[0] not in list(dict_intermediate_output_names.keys()): number_of_occurrences = 0 rounds_id = [] @@ -469,5 +473,72 @@ def add_intermediate_output_rounds_id_to_dictionary(self): return dict_intermediate_output_names + def generate_3D_plot(self, number_of_samples=100, criterion="avalanche_weight_vectors"): + r""" + Return an object that can be plot to visualize the results of the avalanche properties in a 3D graph. + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: cipher = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: plot = AvalancheTests(cipher).generate_3D_plot(number_of_samples=100) + sage: type(plot) + + + sage: from claasp.ciphers.permutations.chacha_permutation import ChachaPermutation + sage: cipher = ChachaPermutation(number_of_rounds=5) + sage: from claasp.cipher_modules.avalanche_tests import AvalancheTests + sage: plot = AvalancheTests(cipher).generate_3D_plot(number_of_samples=100) + sage: type(plot) + + + """ + if criterion not in ["avalanche_weight_vectors", "avalanche_dependence_vectors", "avalanche_dependence_uniform_vectors", "avalanche_entropy_vectors"]: + print('criterion must be one of the following: "avalanche_weight_vectors", "avalanche_dependence_vectors", "avalanche_dependence_uniform_vectors", "avalanche_entropy_vectors"') + return False + + nb_rounds = self._cipher.number_of_rounds + results = self.avalanche_tests(number_of_samples) + fig = plt.figure() + ax = fig.add_subplot(111, projection='3d') + + plaintext_index = self._cipher.inputs.index("plaintext") + input_bit_size = self._cipher.inputs_bit_size[plaintext_index] + + x = np.zeros(input_bit_size * nb_rounds) + y = np.zeros(input_bit_size * nb_rounds) + z = np.zeros(input_bit_size * nb_rounds) + # add intermediate rounds + for bit_position in range(input_bit_size): + for r in range(nb_rounds - 1): + x[r * input_bit_size + bit_position] = bit_position + y[r * input_bit_size + bit_position] = r + z[r * input_bit_size + bit_position] = results["test_results"]["plaintext"]["round_output"][criterion][-2]["vectors"][r][bit_position] + # add last round + for bit_position in range(input_bit_size): + x[(nb_rounds - 1) * input_bit_size + bit_position] = bit_position + y[(nb_rounds - 1) * input_bit_size + bit_position] = (nb_rounds - 1) + z[(nb_rounds - 1) * input_bit_size + bit_position] = results["test_results"]["plaintext"]["cipher_output"][criterion][-2]["vectors"][0][bit_position] + + # Define a custom colormap from red to green based on z values + cmap = LinearSegmentedColormap.from_list('RedGreen', [(1, 0, 0), (0, 1, 0)]) + scatter = ax.scatter(x, y, z, c=z, cmap=cmap, marker='.', label='Data points') + + # Add a color bar to show the mapping of z values to colors + cbar = fig.colorbar(scatter) + cbar.set_label('Avalanche Weight') + + # Customize the plot as needed + ax.set_xlabel('Bit Position') + ax.set_ylabel('Round') + ax.set_zlabel('Total Avalanche Weight') + ax.set_title('3D Avalanche Weight Plot') + + # Show the plot + # plt.show() + print("graph can be plot with the build-in method plot.show()") + return plt + From 2f0be9b8c03ef347817a1557bb46513167f43639 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Tue, 27 Feb 2024 15:55:53 +0400 Subject: [PATCH 123/179] remove import * --- .../component_analysis_tests.py | 154 ++++++++++-------- 1 file changed, 90 insertions(+), 64 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 3bab4c27..c06f580e 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -17,7 +17,6 @@ from sage.crypto.sbox import SBox from sage.matrix.special import identity_matrix -from sage.rings.quotient_ring import QuotientRing from sage.matrix.constructor import matrix, Matrix from sage.rings.polynomial.pbori.pbori import BooleanPolynomialRing from sage.rings.finite_rings.finite_field_constructor import FiniteField as GF @@ -43,9 +42,11 @@ def component_analysis_tests(self): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: components_analysis = CipherComponentsAnalysis(fancy).component_analysis_tests() + sage: len(components_analysis) + 9 """ all_variables_names = [] @@ -84,11 +85,12 @@ def get_all_operations(self): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: cipher_operations = CipherComponentsAnalysis(fancy).get_all_operations() sage: list(cipher_operations.keys()) ['sbox', 'linear_layer', 'XOR', 'AND', 'MODADD', 'ROTATE', 'SHIFT'] + """ tmp_cipher_operations = {} for component in self._cipher.get_all_components(): @@ -114,19 +116,23 @@ def get_all_operations(self): def print_component_analysis_as_radar_charts(self): """ - Display the properties of all the operations of a cipher in a spider graph + Return a graph that can be plot to visualize the properties of all the operations of a cipher in a spider graph EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: CipherComponentsAnalysis(fancy).print_component_analysis_as_radar_charts() + sage: plot = CipherComponentsAnalysis(fancy).print_component_analysis_as_radar_charts() + sage: type(plot) + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=3) - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: CipherComponentsAnalysis(speck).print_component_analysis_as_radar_charts() + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis + sage: plot = CipherComponentsAnalysis(speck).print_component_analysis_as_radar_charts() + sage: type(plot) + """ results = self.component_analysis_tests() @@ -219,13 +225,14 @@ def _AND_as_boolean_function(self, component, boolean_polynomial_ring): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: and_component = fancy.get_component_from_id('and_0_8') sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._AND_as_boolean_function(and_component, boolean_polynomial_ring) sage: len(boolean_polynomials) 12 + """ number_of_inputs = len(component.input_id_links) number_of_blocks = component.description[1] @@ -277,13 +284,14 @@ def _MODADD_as_boolean_function(self, component, boolean_polynomial_ring): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: modadd_component = fancy.get_component_from_id('modadd_1_9') sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._MODADD_as_boolean_function(modadd_component, boolean_polynomial_ring) sage: len(boolean_polynomials) 6 + """ number_of_inputs = len(component.input_id_links) output_bit_size = component.output_bit_size @@ -360,13 +368,14 @@ def _XOR_as_boolean_function(self, component, boolean_polynomial_ring): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: xor_component = fancy.get_component_from_id('xor_2_7') sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() sage: boolean_polynomials = CipherComponentsAnalysis(fancy)._XOR_as_boolean_function(xor_component, boolean_polynomial_ring) sage: len(boolean_polynomials) 12 + """ number_of_inputs = len(component.input_id_links) number_of_blocks = component.description[1] @@ -429,25 +438,26 @@ def _is_mds(self, component): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.twofish_block_cipher import TwofishBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: twofish = TwofishBlockCipher(number_of_rounds=2) sage: mix_column_component = twofish.get_component_from_id('mix_column_0_19') sage: CipherComponentsAnalysis(twofish)._is_mds(mix_column_component) True sage: from claasp.ciphers.block_ciphers.skinny_block_cipher import SkinnyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: skinny = SkinnyBlockCipher(block_bit_size=128, key_bit_size=384, number_of_rounds=40) sage: mix_column_component = skinny.get_component_from_id('mix_column_0_31') sage: CipherComponentsAnalysis(skinny)._is_mds(mix_column_component) False sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: aes = AESBlockCipher(number_of_rounds=3) sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') sage: CipherComponentsAnalysis(aes)._is_mds(mix_column_component) True + """ description = component.description @@ -479,7 +489,7 @@ def _word_operation_properties(self, operation, boolean_polynomial_ring): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: modadd_component = fancy.component_from(1, 9) sage: operation = [modadd_component, 2, ['modadd_1_9', 'modadd_1_10']] @@ -487,6 +497,7 @@ def _word_operation_properties(self, operation, boolean_polynomial_ring): sage: d = CipherComponentsAnalysis(fancy)._word_operation_properties(operation, boolean_polynomial_ring) sage: d["properties"]["degree"]["value"] 4.5 + """ component = operation[0] component_as_dictionary = {"type": component.type, "input_bit_size": component.input_bit_size, @@ -531,9 +542,12 @@ def _generate_boolean_polynomial_ring_from_cipher(self): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: boolean_polynomial_ring = CipherComponentsAnalysis(fancy)._generate_boolean_polynomial_ring_from_cipher() + sage: boolean_polynomial_ring.n_variables() + 372 + """ all_variables_names = [] for cipher_round in self._cipher.rounds_as_list: @@ -600,7 +614,7 @@ def _linear_layer_properties(self, operation): EXAMPLES:: - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: from claasp.components.rotate_component import Rotate sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher sage: fancy = FancyBlockCipher(number_of_rounds=3) @@ -609,6 +623,7 @@ def _linear_layer_properties(self, operation): sage: d = CipherComponentsAnalysis(fancy)._linear_layer_properties(operation) sage: d["properties"]["differential_branch_number"]["value"] 2 + """ component = operation[0] dictio = {"type": component.type, "input_bit_size": component.input_bit_size, @@ -654,11 +669,12 @@ def _order_of_linear_component(self, component): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: rot_component = fancy.get_component_from_id('rot_1_11') sage: CipherComponentsAnalysis(fancy)._order_of_linear_component(rot_component) 2 + """ binary_matrix = binary_matrix_of_linear_component(component) if not binary_matrix: @@ -682,7 +698,7 @@ def _sbox_properties(self, operation): EXAMPLES:: - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher sage: fancy = FancyBlockCipher(number_of_rounds=3) sage: from claasp.components.sbox_component import SBOX @@ -747,46 +763,47 @@ def _sbox_properties(self, operation): def _fsr_properties(self, operation): """ - Return a dictionary containing some properties of fsr component. - - INPUT: - - - ``operation`` -- **list**; a list containing: - - * a component with the operation under study - * number of occurrences of the operation - * list of ids of all the components with the same underlying operation - - EXAMPLES:: - - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher - sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: from claasp.components.fsr_component import FSR - sage: fsr_component = FSR(0,0, ["input"],[[0,1,2,3]],4,[[[4, [[1,[0]],[3,[1]],[2,[2]]]]],4]) - sage: operation= [fsr_component, 1, ['fsr_0_0']] - sage: dictionary = CipherComponentsAnalysis(fancy)._fsr_properties(operation) - sage: dictionary['fsr_word_size'] == 4 - True - sage: dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] - True - - sage: from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 - sage: from claasp.cipher_modules.component_analysis_tests import * - sage: e0 = BluetoothStreamCipherE0(keystream_bit_len=2) - sage: dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() - sage: assert dictionary[8]["number_of_registers"] == 4 - sage: dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' # first lfsr - True - sage: dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] - True - - sage: from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher - sage: triv = TriviumStreamCipher(keystream_bit_len=1) - sage: dictionary = CipherComponentsAnalysis(triv).component_analysis_tests() - sage: dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] - True - """ + Return a dictionary containing some properties of fsr component. + + INPUT: + + - ``operation`` -- **list**; a list containing: + + * a component with the operation under study + * number of occurrences of the operation + * list of ids of all the components with the same underlying operation + + EXAMPLES:: + + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis + sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher + sage: fancy = FancyBlockCipher(number_of_rounds=3) + sage: from claasp.components.fsr_component import FSR + sage: fsr_component = FSR(0,0, ["input"],[[0,1,2,3]],4,[[[4, [[1,[0]],[3,[1]],[2,[2]]]]],4]) + sage: operation= [fsr_component, 1, ['fsr_0_0']] + sage: dictionary = CipherComponentsAnalysis(fancy)._fsr_properties(operation) + sage: dictionary['fsr_word_size'] == 4 + True + sage: dictionary['lfsr_connection_polynomials'] == ['x^4 + (z4 + 1)*x^3 + z4*x^2 + 1'] + True + + sage: from claasp.ciphers.stream_ciphers.bluetooth_stream_cipher_e0 import BluetoothStreamCipherE0 + sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis + sage: e0 = BluetoothStreamCipherE0(keystream_bit_len=2) + sage: dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() + sage: assert dictionary[8]["number_of_registers"] == 4 + sage: dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' # first lfsr + True + sage: dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] + True + + sage: from claasp.ciphers.stream_ciphers.trivium_stream_cipher import TriviumStreamCipher + sage: triv = TriviumStreamCipher(keystream_bit_len=1) + sage: dictionary = CipherComponentsAnalysis(triv).component_analysis_tests() + sage: dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] + True + + """ component = operation[0] fsr_word_size = component.description[1] component_dict = { @@ -927,6 +944,7 @@ def binary_matrix_of_linear_component(component): [1 0 0 0 0 0] [0 1 0 0 0 0] [0 0 1 0 0 0] + """ input_bit_size = component.input_bit_size output_bit_size = component.output_bit_size @@ -965,6 +983,7 @@ def branch_number(component, type, format): sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') sage: branch_number(mix_column_component, 'differential', 'word') 5 + """ if (component.type == "word_operation") and (component.description[0] == "ROTATE"): return 2 @@ -1000,8 +1019,9 @@ def get_inverse_matrix_in_integer_representation(component): sage: from claasp.cipher_modules.component_analysis_tests import get_inverse_matrix_in_integer_representation sage: midori = MidoriBlockCipher(number_of_rounds=3) sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') - sage: get_inverse_matrix_in_integer_representation(mix_column_component) - + sage: m = get_inverse_matrix_in_integer_representation(mix_column_component) + sage: m.dimensions() + (16,16) """ if component.type != MIX_COLUMN: @@ -1047,6 +1067,7 @@ def has_maximal_branch_number(component): sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') sage: has_maximal_branch_number(mix_column_component) True + """ description = component.description word_size = int(description[2]) @@ -1109,8 +1130,12 @@ def int_to_poly(integer_value, word_size, variable): def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, input_bit_size, output_bit_size): """ + Return a binary matrix based on the description of a component. + + EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field sage: midori = MidoriBlockCipher(number_of_rounds=2) sage: mix_column_component = midori.get_component_from_id('mix_column_0_20') sage: description = mix_column_component.description @@ -1118,7 +1143,7 @@ def instantiate_matrix_over_correct_field(matrix, polynomial_as_int, word_size, mix_column_component.input_bit_size, mix_column_component.output_bit_size) sage: from claasp.ciphers.block_ciphers.midori_block_cipher import MidoriBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field sage: midori = MidoriBlockCipher(number_of_rounds=2) sage: mix_column_component = midori.get_component_from_id('mix_column_0_21') sage: description = mix_column_component.description @@ -1156,7 +1181,7 @@ def field_element_matrix_to_integer_matrix(matrix): EXAMPLES:: sage: from claasp.ciphers.block_ciphers.aes_block_cipher import AESBlockCipher - sage: from claasp.cipher_modules.component_analysis_tests import * + sage: from claasp.cipher_modules.component_analysis_tests import instantiate_matrix_over_correct_field, field_element_matrix_to_integer_matrix sage: aes = AESBlockCipher(number_of_rounds=3) sage: mix_column_component = aes.get_component_from_id('mix_column_1_20') sage: description = mix_column_component.description @@ -1172,6 +1197,7 @@ def field_element_matrix_to_integer_matrix(matrix): [1 2 3 1] [1 1 2 3] [3 1 1 2] + """ int_matrix = [] From c7554b4c6c3e40a517a776d72a202b8a07a26a4e Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Tue, 27 Feb 2024 16:01:35 +0400 Subject: [PATCH 124/179] stop tracking searchindex.js --- docs/build/html/searchindex.js | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 docs/build/html/searchindex.js diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js deleted file mode 100644 index 467a342d..00000000 --- a/docs/build/html/searchindex.js +++ /dev/null @@ -1,2 +0,0 @@ -Search.setIndex({docnames:["cipher","cipher_modules/algebraic_tests","cipher_modules/avalanche_tests","cipher_modules/code_generator","cipher_modules/component_analysis_tests","cipher_modules/continuous_tests","cipher_modules/evaluator","cipher_modules/generic_bit_based_c_functions","cipher_modules/generic_functions","cipher_modules/generic_functions_continuous_diffusion_analysis","cipher_modules/generic_functions_vectorized_bit","cipher_modules/generic_functions_vectorized_byte","cipher_modules/generic_word_based_c_functions","cipher_modules/graph_generator","cipher_modules/inverse_cipher","cipher_modules/models/algebraic/algebraic_model","cipher_modules/models/algebraic/boolean_polynomial_ring","cipher_modules/models/algebraic/constraints","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions","cipher_modules/models/cp/cp_model","cipher_modules/models/cp/cp_models/cp_cipher_model","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_model","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model","cipher_modules/models/cp/cp_models/cp_xor_linear_model","cipher_modules/models/milp/milp_model","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_cipher_model","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_differential_model","cipher_modules/models/milp/milp_models/milp_xor_linear_model","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model","cipher_modules/models/milp/utils/config","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes","cipher_modules/models/milp/utils/milp_name_mappings","cipher_modules/models/milp/utils/mzn_predicates","cipher_modules/models/milp/utils/utils","cipher_modules/models/minizinc/minizinc_model","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model","cipher_modules/models/sat/cms_models/cms_cipher_model","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_differential_model","cipher_modules/models/sat/cms_models/cms_xor_linear_model","cipher_modules/models/sat/sat_model","cipher_modules/models/sat/sat_models/sat_cipher_model","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_differential_model","cipher_modules/models/sat/sat_models/sat_xor_linear_model","cipher_modules/models/sat/utils/mzn_predicates","cipher_modules/models/sat/utils/n_window_heuristic_helper","cipher_modules/models/sat/utils/utils","cipher_modules/models/smt/smt_model","cipher_modules/models/smt/smt_models/smt_cipher_model","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_differential_model","cipher_modules/models/smt/smt_models/smt_xor_linear_model","cipher_modules/models/smt/utils/utils","cipher_modules/models/utils","cipher_modules/neural_network_tests","cipher_modules/statistical_tests/dataset_generator","cipher_modules/statistical_tests/dieharder_statistical_tests","cipher_modules/statistical_tests/input_data_example","cipher_modules/statistical_tests/nist_statistical_tests","cipher_modules/tester","ciphers/block_ciphers/aes_block_cipher","ciphers/block_ciphers/bea1_block_cipher","ciphers/block_ciphers/constant_block_cipher","ciphers/block_ciphers/des_block_cipher","ciphers/block_ciphers/des_exact_key_length_block_cipher","ciphers/block_ciphers/fancy_block_cipher","ciphers/block_ciphers/hight_block_cipher","ciphers/block_ciphers/identity_block_cipher","ciphers/block_ciphers/kasumi_block_cipher","ciphers/block_ciphers/lblock_block_cipher","ciphers/block_ciphers/lea_block_cipher","ciphers/block_ciphers/lowmc_block_cipher","ciphers/block_ciphers/lowmc_generate_matrices","ciphers/block_ciphers/midori_block_cipher","ciphers/block_ciphers/present_block_cipher","ciphers/block_ciphers/qarmav2_block_cipher","ciphers/block_ciphers/raiden_block_cipher","ciphers/block_ciphers/rc5_block_cipher","ciphers/block_ciphers/simon_block_cipher","ciphers/block_ciphers/skinny_block_cipher","ciphers/block_ciphers/sparx_block_cipher","ciphers/block_ciphers/speck_block_cipher","ciphers/block_ciphers/tea_block_cipher","ciphers/block_ciphers/threefish_block_cipher","ciphers/block_ciphers/twofish_block_cipher","ciphers/block_ciphers/xtea_block_cipher","ciphers/hash_functions/blake2_hash_function","ciphers/hash_functions/blake_hash_function","ciphers/hash_functions/md5_hash_function","ciphers/hash_functions/sha1_hash_function","ciphers/hash_functions/sha2_hash_function","ciphers/hash_functions/whirlpool_hash_function","ciphers/permutations/ascon_permutation","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation","ciphers/permutations/ascon_sbox_sigma_permutation","ciphers/permutations/chacha_permutation","ciphers/permutations/gift_permutation","ciphers/permutations/gift_sbox_permutation","ciphers/permutations/gimli_permutation","ciphers/permutations/gimli_sbox_permutation","ciphers/permutations/grain_core_permutation","ciphers/permutations/keccak_invertible_permutation","ciphers/permutations/keccak_permutation","ciphers/permutations/keccak_sbox_permutation","ciphers/permutations/photon_permutation","ciphers/permutations/salsa_permutation","ciphers/permutations/sparkle_permutation","ciphers/permutations/spongent_pi_fsr_permutation","ciphers/permutations/spongent_pi_permutation","ciphers/permutations/spongent_pi_precomputation_permutation","ciphers/permutations/tinyjambu_32bits_word_permutation","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation","ciphers/permutations/tinyjambu_permutation","ciphers/permutations/util","ciphers/permutations/xoodoo_invertible_permutation","ciphers/permutations/xoodoo_permutation","ciphers/permutations/xoodoo_sbox_permutation","ciphers/stream_ciphers/a5_1_stream_cipher","ciphers/stream_ciphers/bivium_stream_cipher","ciphers/stream_ciphers/bluetooth_stream_cipher_e0","ciphers/stream_ciphers/chacha_stream_cipher","ciphers/stream_ciphers/snow3g_stream_cipher","ciphers/stream_ciphers/trivium_stream_cipher","ciphers/stream_ciphers/zuc_stream_cipher","ciphers/toys/toyspn1","ciphers/toys/toyspn2","component","components/and_component","components/cipher_output_component","components/concatenate_component","components/constant_component","components/fsr_component","components/intermediate_output_component","components/linear_layer_component","components/mix_column_component","components/modadd_component","components/modsub_component","components/modular_component","components/multi_input_non_linear_logical_operator_component","components/not_component","components/or_component","components/permutation_component","components/reverse_component","components/rotate_component","components/sbox_component","components/shift_component","components/shift_rows_component","components/sigma_component","components/theta_keccak_component","components/theta_xoodoo_component","components/variable_rotate_component","components/variable_shift_component","components/word_permutation_component","components/xor_component","compound_xor_differential_cipher","editor","index","input","references","round","rounds","utils/integer","utils/integer_functions","utils/sage_scripts","utils/sequence_operations","utils/templates","utils/utils"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinxcontrib.bibtex":9,sphinx:56},filenames:["cipher.rst","cipher_modules/algebraic_tests.rst","cipher_modules/avalanche_tests.rst","cipher_modules/code_generator.rst","cipher_modules/component_analysis_tests.rst","cipher_modules/continuous_tests.rst","cipher_modules/evaluator.rst","cipher_modules/generic_bit_based_c_functions.rst","cipher_modules/generic_functions.rst","cipher_modules/generic_functions_continuous_diffusion_analysis.rst","cipher_modules/generic_functions_vectorized_bit.rst","cipher_modules/generic_functions_vectorized_byte.rst","cipher_modules/generic_word_based_c_functions.rst","cipher_modules/graph_generator.rst","cipher_modules/inverse_cipher.rst","cipher_modules/models/algebraic/algebraic_model.rst","cipher_modules/models/algebraic/boolean_polynomial_ring.rst","cipher_modules/models/algebraic/constraints.rst","cipher_modules/models/cp/Minizinc_functions/Usefulfunctions.rst","cipher_modules/models/cp/cp_model.rst","cipher_modules/models/cp/cp_models/cp_cipher_model.rst","cipher_modules/models/cp/cp_models/cp_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.rst","cipher_modules/models/cp/cp_models/cp_xor_linear_model.rst","cipher_modules/models/milp/milp_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_bitwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_cipher_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_wordwise_impossible_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_differential_model.rst","cipher_modules/models/milp/milp_models/milp_xor_linear_model.rst","cipher_modules/models/milp/tmp/tea_cipher_xordiff_model.rst","cipher_modules/models/milp/utils/config.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_input_pattern_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_mds_inequalities.rst","cipher_modules/models/milp/utils/dictionary_containing_truncated_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_containing_xor_inequalities_between_n_input_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_large_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes.rst","cipher_modules/models/milp/utils/dictionary_that_contains_inequalities_for_small_sboxes_xor_linear.rst","cipher_modules/models/milp/utils/generate_inequalities_for_and_operation_2_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.rst","cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.rst","cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.rst","cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.rst","cipher_modules/models/milp/utils/milp_name_mappings.rst","cipher_modules/models/milp/utils/mzn_predicates.rst","cipher_modules/models/milp/utils/utils.rst","cipher_modules/models/minizinc/minizinc_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_cipher_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/minizinc/minizinc_models/minizinc_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_cipher_model.rst","cipher_modules/models/sat/cms_models/cms_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_differential_model.rst","cipher_modules/models/sat/cms_models/cms_xor_linear_model.rst","cipher_modules/models/sat/sat_model.rst","cipher_modules/models/sat/sat_models/sat_cipher_model.rst","cipher_modules/models/sat/sat_models/sat_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_differential_model.rst","cipher_modules/models/sat/sat_models/sat_xor_linear_model.rst","cipher_modules/models/sat/utils/mzn_predicates.rst","cipher_modules/models/sat/utils/n_window_heuristic_helper.rst","cipher_modules/models/sat/utils/utils.rst","cipher_modules/models/smt/smt_model.rst","cipher_modules/models/smt/smt_models/smt_cipher_model.rst","cipher_modules/models/smt/smt_models/smt_deterministic_truncated_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_differential_model.rst","cipher_modules/models/smt/smt_models/smt_xor_linear_model.rst","cipher_modules/models/smt/utils/utils.rst","cipher_modules/models/utils.rst","cipher_modules/neural_network_tests.rst","cipher_modules/statistical_tests/dataset_generator.rst","cipher_modules/statistical_tests/dieharder_statistical_tests.rst","cipher_modules/statistical_tests/input_data_example.rst","cipher_modules/statistical_tests/nist_statistical_tests.rst","cipher_modules/tester.rst","ciphers/block_ciphers/aes_block_cipher.rst","ciphers/block_ciphers/bea1_block_cipher.rst","ciphers/block_ciphers/constant_block_cipher.rst","ciphers/block_ciphers/des_block_cipher.rst","ciphers/block_ciphers/des_exact_key_length_block_cipher.rst","ciphers/block_ciphers/fancy_block_cipher.rst","ciphers/block_ciphers/hight_block_cipher.rst","ciphers/block_ciphers/identity_block_cipher.rst","ciphers/block_ciphers/kasumi_block_cipher.rst","ciphers/block_ciphers/lblock_block_cipher.rst","ciphers/block_ciphers/lea_block_cipher.rst","ciphers/block_ciphers/lowmc_block_cipher.rst","ciphers/block_ciphers/lowmc_generate_matrices.rst","ciphers/block_ciphers/midori_block_cipher.rst","ciphers/block_ciphers/present_block_cipher.rst","ciphers/block_ciphers/qarmav2_block_cipher.rst","ciphers/block_ciphers/raiden_block_cipher.rst","ciphers/block_ciphers/rc5_block_cipher.rst","ciphers/block_ciphers/simon_block_cipher.rst","ciphers/block_ciphers/skinny_block_cipher.rst","ciphers/block_ciphers/sparx_block_cipher.rst","ciphers/block_ciphers/speck_block_cipher.rst","ciphers/block_ciphers/tea_block_cipher.rst","ciphers/block_ciphers/threefish_block_cipher.rst","ciphers/block_ciphers/twofish_block_cipher.rst","ciphers/block_ciphers/xtea_block_cipher.rst","ciphers/hash_functions/blake2_hash_function.rst","ciphers/hash_functions/blake_hash_function.rst","ciphers/hash_functions/md5_hash_function.rst","ciphers/hash_functions/sha1_hash_function.rst","ciphers/hash_functions/sha2_hash_function.rst","ciphers/hash_functions/whirlpool_hash_function.rst","ciphers/permutations/ascon_permutation.rst","ciphers/permutations/ascon_sbox_sigma_no_matrix_permutation.rst","ciphers/permutations/ascon_sbox_sigma_permutation.rst","ciphers/permutations/chacha_permutation.rst","ciphers/permutations/gift_permutation.rst","ciphers/permutations/gift_sbox_permutation.rst","ciphers/permutations/gimli_permutation.rst","ciphers/permutations/gimli_sbox_permutation.rst","ciphers/permutations/grain_core_permutation.rst","ciphers/permutations/keccak_invertible_permutation.rst","ciphers/permutations/keccak_permutation.rst","ciphers/permutations/keccak_sbox_permutation.rst","ciphers/permutations/photon_permutation.rst","ciphers/permutations/salsa_permutation.rst","ciphers/permutations/sparkle_permutation.rst","ciphers/permutations/spongent_pi_fsr_permutation.rst","ciphers/permutations/spongent_pi_permutation.rst","ciphers/permutations/spongent_pi_precomputation_permutation.rst","ciphers/permutations/tinyjambu_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_fsr_32bits_word_permutation.rst","ciphers/permutations/tinyjambu_permutation.rst","ciphers/permutations/util.rst","ciphers/permutations/xoodoo_invertible_permutation.rst","ciphers/permutations/xoodoo_permutation.rst","ciphers/permutations/xoodoo_sbox_permutation.rst","ciphers/stream_ciphers/a5_1_stream_cipher.rst","ciphers/stream_ciphers/bivium_stream_cipher.rst","ciphers/stream_ciphers/bluetooth_stream_cipher_e0.rst","ciphers/stream_ciphers/chacha_stream_cipher.rst","ciphers/stream_ciphers/snow3g_stream_cipher.rst","ciphers/stream_ciphers/trivium_stream_cipher.rst","ciphers/stream_ciphers/zuc_stream_cipher.rst","ciphers/toys/toyspn1.rst","ciphers/toys/toyspn2.rst","component.rst","components/and_component.rst","components/cipher_output_component.rst","components/concatenate_component.rst","components/constant_component.rst","components/fsr_component.rst","components/intermediate_output_component.rst","components/linear_layer_component.rst","components/mix_column_component.rst","components/modadd_component.rst","components/modsub_component.rst","components/modular_component.rst","components/multi_input_non_linear_logical_operator_component.rst","components/not_component.rst","components/or_component.rst","components/permutation_component.rst","components/reverse_component.rst","components/rotate_component.rst","components/sbox_component.rst","components/shift_component.rst","components/shift_rows_component.rst","components/sigma_component.rst","components/theta_keccak_component.rst","components/theta_xoodoo_component.rst","components/variable_rotate_component.rst","components/variable_shift_component.rst","components/word_permutation_component.rst","components/xor_component.rst","compound_xor_differential_cipher.rst","editor.rst","index.rst","input.rst","references.rst","round.rst","rounds.rst","utils/integer.rst","utils/integer_functions.rst","utils/sage_scripts.rst","utils/sequence_operations.rst","utils/templates.rst","utils/utils.rst"],objects:{"":[[0,0,0,"-","cipher"],[150,0,0,"-","component"],[178,0,0,"-","compound_xor_differential_cipher"],[179,0,0,"-","editor"],[181,0,0,"-","input"],[183,0,0,"-","round"],[184,0,0,"-","rounds"]],"cipher.Cipher":[[0,2,1,"","add_AND_component"],[0,2,1,"","add_FSR_component"],[0,2,1,"","add_MODADD_component"],[0,2,1,"","add_MODSUB_component"],[0,2,1,"","add_NOT_component"],[0,2,1,"","add_OR_component"],[0,2,1,"","add_SBOX_component"],[0,2,1,"","add_SHIFT_component"],[0,2,1,"","add_XOR_component"],[0,2,1,"","add_cipher_output_component"],[0,2,1,"","add_concatenate_component"],[0,2,1,"","add_constant_component"],[0,2,1,"","add_intermediate_output_component"],[0,2,1,"","add_linear_layer_component"],[0,2,1,"","add_mix_column_component"],[0,2,1,"","add_permutation_component"],[0,2,1,"","add_reverse_component"],[0,2,1,"","add_rotate_component"],[0,2,1,"","add_round"],[0,2,1,"","add_round_key_output_component"],[0,2,1,"","add_round_output_component"],[0,2,1,"","add_shift_rows_component"],[0,2,1,"","add_sigma_component"],[0,2,1,"","add_suffix_to_components"],[0,2,1,"","add_theta_keccak_component"],[0,2,1,"","add_theta_xoodoo_component"],[0,2,1,"","add_variable_rotate_component"],[0,2,1,"","add_variable_shift_component"],[0,2,1,"","add_word_permutation_component"],[0,2,1,"","algebraic_tests"],[0,2,1,"","analyze_cipher"],[0,2,1,"","as_python_dictionary"],[0,2,1,"","avalanche_probability_vectors"],[0,2,1,"","cipher_inverse"],[0,2,1,"","cipher_partial_inverse"],[0,2,1,"","component_analysis_tests"],[0,2,1,"","component_from"],[0,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[0,2,1,"","continuous_avalanche_factor"],[0,2,1,"","continuous_diffusion_factor"],[0,2,1,"","continuous_diffusion_tests"],[0,2,1,"","continuous_neutrality_measure_for_bit_j"],[0,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[0,2,1,"","convert_to_compound_xor_cipher"],[0,3,1,"","current_round"],[0,3,1,"","current_round_number"],[0,3,1,"","current_round_number_of_components"],[0,2,1,"","delete_generated_evaluate_c_shared_library"],[0,2,1,"","diffusion_tests"],[0,2,1,"","evaluate"],[0,2,1,"","evaluate_using_c"],[0,2,1,"","evaluate_vectorized"],[0,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[0,3,1,"","family_name"],[0,3,1,"","file_name"],[0,2,1,"","find_good_input_difference_for_neural_distinguisher"],[0,2,1,"","find_impossible_property"],[0,2,1,"","generate_bit_based_c_code"],[0,2,1,"","generate_csv_report"],[0,2,1,"","generate_evaluate_c_code_shared_library"],[0,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[0,2,1,"","generate_word_based_c_code"],[0,2,1,"","get_all_components"],[0,2,1,"","get_all_components_ids"],[0,2,1,"","get_all_inputs_bit_positions"],[0,2,1,"","get_component_from_id"],[0,2,1,"","get_components_in_round"],[0,2,1,"","get_current_component_id"],[0,2,1,"","get_model"],[0,2,1,"","get_number_of_components_in_round"],[0,2,1,"","get_partial_cipher"],[0,2,1,"","get_round_from_component_id"],[0,2,1,"","get_sizes_of_components_by_type"],[0,3,1,"","id"],[0,2,1,"","impossible_differential_search"],[0,3,1,"","inputs"],[0,3,1,"","inputs_bit_size"],[0,2,1,"","inputs_size_to_dict"],[0,2,1,"","is_algebraically_secure"],[0,2,1,"","is_andrx"],[0,2,1,"","is_arx"],[0,2,1,"","is_power_of_2_word_based"],[0,2,1,"","is_shift_arx"],[0,2,1,"","is_spn"],[0,2,1,"","make_cipher_id"],[0,2,1,"","make_file_name"],[0,2,1,"","neural_network_blackbox_distinguisher_tests"],[0,2,1,"","neural_network_differential_distinguisher_tests"],[0,3,1,"","number_of_rounds"],[0,3,1,"","output_bit_size"],[0,2,1,"","polynomial_system"],[0,2,1,"","polynomial_system_at_round"],[0,2,1,"","print"],[0,2,1,"","print_as_python_dictionary"],[0,2,1,"","print_as_python_dictionary_to_file"],[0,2,1,"","print_component_analysis_as_radar_charts"],[0,2,1,"","print_evaluation_python_code"],[0,2,1,"","print_evaluation_python_code_to_file"],[0,2,1,"","print_input_information"],[0,3,1,"","reference_code"],[0,2,1,"","remove_key_schedule"],[0,2,1,"","remove_round_component"],[0,2,1,"","remove_round_component_from_id"],[0,3,1,"","rounds"],[0,3,1,"","rounds_as_list"],[0,2,1,"","run_autond_pipeline"],[0,2,1,"","set_file_name"],[0,2,1,"","set_id"],[0,2,1,"","set_inputs"],[0,2,1,"","sort_cipher"],[0,2,1,"","test_against_reference_code"],[0,2,1,"","test_vector_check"],[0,2,1,"","train_gohr_neural_distinguisher"],[0,2,1,"","train_neural_distinguisher"],[0,3,1,"","type"],[0,2,1,"","zero_correlation_linear_search"]],"cipher_modules.algebraic_tests":[[1,4,1,"","algebraic_tests"]],"cipher_modules.avalanche_tests":[[2,4,1,"","add_intermediate_output_components_id_to_dictionary"],[2,4,1,"","add_intermediate_output_rounds_id_to_dictionary"],[2,4,1,"","add_intermediate_output_values_to_dictionary"],[2,4,1,"","add_multicolumns_to_graph"],[2,4,1,"","avalanche_probability_vectors"],[2,4,1,"","avalanche_tests"],[2,4,1,"","calculate_average_difference"],[2,4,1,"","calculate_regular_difference"],[2,4,1,"","calculate_worst_input_differences"],[2,4,1,"","compute_criterion_from_avalanche_probability_vectors"],[2,4,1,"","generate_avalanche_probability_vectors"],[2,4,1,"","generate_graph_by_differences_positions"],[2,4,1,"","generate_heatmap_graphs_for_avalanche_tests"],[2,4,1,"","generate_inputs_prime"],[2,4,1,"","generate_random_inputs"],[2,4,1,"","get_average_criteria_by_round_input_output"],[2,4,1,"","get_average_criteria_list_by_output_tag"],[2,4,1,"","get_intermediate_output_names"],[2,4,1,"","init_dictionary_test_results"],[2,4,1,"","is_output"],[2,4,1,"","set_vector_dependence"],[2,4,1,"","set_vector_dependence_uniform"],[2,4,1,"","set_vector_entropy"],[2,4,1,"","set_vector_weight"]],"cipher_modules.code_generator":[[3,4,1,"","build_code_for_components"],[3,4,1,"","build_code_for_continuous_diffusion_analysis_components"],[3,4,1,"","build_continuous_diffusion_analysis_function_call"],[3,4,1,"","build_function_call"],[3,4,1,"","constant_to_bitstring"],[3,4,1,"","constant_to_repr"],[3,4,1,"","delete_generated_evaluate_c_shared_library"],[3,4,1,"","generate_bit_based_c_code"],[3,4,1,"","generate_bit_based_vectorized_python_code_string"],[3,4,1,"","generate_byte_based_vectorized_python_code_string"],[3,4,1,"","generate_evaluate_c_code_shared_library"],[3,4,1,"","generate_python_code_string"],[3,4,1,"","generate_python_code_string_for_continuous_diffusion_analysis"],[3,4,1,"","generate_word_based_c_code"],[3,4,1,"","get_cipher_output_component_bit_based_c_code"],[3,4,1,"","get_cipher_output_word_based_c_code"],[3,4,1,"","get_intermediate_output_component_bit_based_c_code"],[3,4,1,"","get_intermediate_output_word_based_c_code"],[3,4,1,"","get_number_of_inputs"],[3,4,1,"","get_padding_component_bit_based_c_code"],[3,4,1,"","get_rounds_bit_based_c_code"],[3,4,1,"","get_rounds_word_based_c_code"],[3,4,1,"","get_word_operation_component_bit_based_c_code"],[3,4,1,"","get_word_operation_word_based_c_code"],[3,4,1,"","prepare_input_bit_based_vectorized_python_code_string"],[3,4,1,"","prepare_input_byte_based_vectorized_python_code_string"],[3,4,1,"","update_intermediate_structure"]],"cipher_modules.component_analysis_tests":[[4,4,1,"","AND_as_boolean_function"],[4,4,1,"","MODADD_as_boolean_function"],[4,4,1,"","XOR_as_boolean_function"],[4,4,1,"","add_attributes_to_operation"],[4,4,1,"","binary_matrix_of_linear_component"],[4,4,1,"","branch_number"],[4,4,1,"","calculate_carry_for_three_blocks"],[4,4,1,"","calculate_carry_for_two_blocks"],[4,4,1,"","calculate_weights_for_linear_layer"],[4,4,1,"","calculate_weights_for_mix_column"],[4,4,1,"","collect_component_operations"],[4,4,1,"","collect_components_with_the_same_operation"],[4,4,1,"","component_analysis_tests"],[4,4,1,""," - field_element_matrix_to_integer_matrix"],[4,4,1,"","fill_area"],[4,4,1,"","generate_boolean_polynomial_ring_from_cipher"],[4,4,1,"","get_all_operations"],[4,4,1,"","get_inverse_matrix_in_integer_representation"],[4,4,1,"","has_maximal_branch_number"],[4,4,1,"","initialise_spider_plot"],[4,4,1,"","instantiate_matrix_over_correct_field"],[4,4,1,"","int_to_poly"],[4,4,1,"","is_mds"],[4,4,1,"","linear_layer_properties"],[4,4,1,"","order_of_linear_component"],[4,4,1,"","plot_first_line_of_data_frame"],[4,4,1,"","print_component_analysis_as_radar_charts"],[4,4,1,"","remove_components_with_strings_as_values"],[4,4,1,"","sbox_properties"],[4,4,1,"","select_boolean_function"],[4,4,1,"","select_properties_function"],[4,4,1,"","set_variables_names"],[4,4,1,"","word_operation_properties"]],"cipher_modules.continuous_tests":[[5,4,1,"","add_beta_samples_to_final_result_from"],[5,4,1,"","continuous_avalanche_factor"],[5,4,1,"","continuous_diffusion_factor"],[5,4,1,"","continuous_diffusion_tests"],[5,4,1,"","continuous_neutrality_measure_for_bit_j"],[5,4,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[5,4,1,"","generate_beta_sample_output"],[5,4,1,"","incrementing_counters"],[5,4,1,"","init_final_result_structure"],[5,4,1,"","init_input_bits"]],"cipher_modules.evaluator":[[6,4,1,"","evaluate"],[6,4,1,"","evaluate_using_c"],[6,4,1,"","evaluate_vectorized"],[6,4,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"]],"cipher_modules.generic_functions":[[8,4,1,"","AND"],[8,4,1,"","MODADD"],[8,4,1,"","MODSUB"],[8,4,1,"","NOT"],[8,4,1,"","OR"],[8,4,1,"","ROTATE"],[8,4,1,"","ROTATE_BY_VARIABLE_AMOUNT"],[8,4,1,"","ROTATE_boolean_function"],[8,4,1,"","SHIFT"],[8,4,1,"","SHIFT_BY_VARIABLE_AMOUNT"],[8,4,1,"","SIGMA"],[8,4,1,"","THETA_KECCAK"],[8,4,1,"","THETA_XOODOO"],[8,4,1,"","XOR"],[8,4,1,"","XOR_boolean_function"],[8,4,1,"","add_padding"],[8,4,1,"","concatenate_bool_func"],[8,4,1,"","constant_bool_func"],[8,4,1,"","convert_polynomial_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","convert_x_to_binary_matrix_given_polynomial_modulus"],[8,4,1,"","fsr_binary"],[8,4,1,"","fsr_word"],[8,4,1,"","int_to_byte_array"],[8,4,1,"","linear_layer"],[8,4,1,"","merge_bits"],[8,4,1,"","mix_column_generalized"],[8,4,1,"","mix_column_generalized_bool_func"],[8,4,1,"","padding"],[8,4,1,"","sbox"],[8,4,1,"","sbox_bool_func"],[8,4,1,"","select_bits"],[8,4,1,"","set_from_hex_string"],[8,4,1,"","transform_GF2NMatrix_to_BinMatrix"]],"cipher_modules.generic_functions_continuous_diffusion_analysis":[[9,4,1,"","AND_continuous_diffusion_analysis"],[9,4,1,"","CONSTANT_continuous_diffusion_analysis"],[9,4,1,"","LINEAR_LAYER_continuous_diffusion_analysis"],[9,4,1,"","MIX_COLUMN_generalized_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis"],[9,4,1,"","MODADD_continuous_diffusion_analysis_two_words"],[9,4,1,"","MODSUB_continuous_diffusion_analysis"],[9,4,1,"","NOT_continuous_diffusion_analysis"],[9,4,1,"","OR_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","ROTATE_continuous_diffusion_analysis"],[9,4,1,"","SBOX_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_BY_VARIABLE_AMOUNT_continuous_diffusion_analysis"],[9,4,1,"","SHIFT_continuous_diffusion_analysis"],[9,4,1,"","SIGMA_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis"],[9,4,1,"","XOR_continuous_diffusion_analysis_two_words"],[9,4,1,"","compute_sbox_precomputations"],[9,4,1,"","create_lookup_table_by_matrix"],[9,4,1,"","create_lookup_table_for_finite_field_element"],[9,4,1,"","extended_and_bit"],[9,4,1,"","extended_left_rotation_by_variable_amount"],[9,4,1,"","extended_left_shift_by_variable_amount"],[9,4,1,"","extended_not_bit"],[9,4,1,"","extended_one_left_rotation_iteration"],[9,4,1,"","extended_one_left_shift_iteration"],[9,4,1,"","extended_one_right_rotation_iteration"],[9,4,1,"","extended_one_right_shift_iteration"],[9,4,1,"","extended_right_rotation_by_variable_amount"],[9,4,1,"","extended_right_shift_by_variable_amount"],[9,4,1,"","extended_two_bit_multiplexer"],[9,4,1,"","get_mix_column_precomputations"],[9,4,1,"","get_sbox_precomputations"],[9,4,1,"","select_bits_continuous_diffusion_analysis"]],"cipher_modules.generic_functions_vectorized_bit":[[10,4,1,"","bit_vector_AND"],[10,4,1,"","bit_vector_CONCAT"],[10,4,1,"","bit_vector_MODADD"],[10,4,1,"","bit_vector_MODSUB"],[10,4,1,"","bit_vector_NOT"],[10,4,1,"","bit_vector_OR"],[10,4,1,"","bit_vector_ROTATE"],[10,4,1,"","bit_vector_SBOX"],[10,4,1,"","bit_vector_SHIFT"],[10,4,1,"","bit_vector_SHIFT_BY_VARIABLE_AMOUNT"],[10,4,1,"","bit_vector_XOR"],[10,4,1,"","bit_vector_linear_layer"],[10,4,1,"","bit_vector_mix_column"],[10,4,1,"","bit_vector_mix_column_poly0"],[10,4,1,"","bit_vector_print_as_hex_values"],[10,4,1,"","bit_vector_select_word"],[10,4,1,"","bit_vector_to_integer"],[10,4,1,"","print_component_info"]],"cipher_modules.generic_functions_vectorized_byte":[[11,4,1,"","byte_vector_AND"],[11,4,1,"","byte_vector_MODADD"],[11,4,1,"","byte_vector_MODSUB"],[11,4,1,"","byte_vector_NOT"],[11,4,1,"","byte_vector_OR"],[11,4,1,"","byte_vector_ROTATE"],[11,4,1,"","byte_vector_SBOX"],[11,4,1,"","byte_vector_SHIFT"],[11,4,1,"","byte_vector_SHIFT_BY_VARIABLE_AMOUNT"],[11,4,1,"","byte_vector_XOR"],[11,4,1,"","byte_vector_is_consecutive"],[11,4,1,"","byte_vector_linear_layer"],[11,4,1,"","byte_vector_mix_column"],[11,4,1,"","byte_vector_mix_column_poly0"],[11,4,1,"","byte_vector_print_as_hex_values"],[11,4,1,"","byte_vector_select_all_words"],[11,4,1,"","generate_formatted_inputs"],[11,4,1,"","print_component_info"]],"cipher_modules.graph_generator":[[13,4,1,"","create_networkx_graph_from_input_ids"],[13,4,1,"","split_cipher_graph_into_top_bottom"]],"cipher_modules.inverse_cipher":[[14,4,1,"","add_bit_to_bit_list"],[14,4,1,"","add_new_component_to_list"],[14,4,1,"","all_input_bits_available"],[14,4,1,"","all_output_bits_available"],[14,4,1,"","all_output_updated_bits_available"],[14,4,1,"","are_equal_components"],[14,4,1,"","are_there_enough_available_inputs_to_evaluate_component"],[14,4,1,"","are_there_enough_available_inputs_to_perform_inversion"],[14,4,1,"","are_these_bits_available"],[14,4,1,"","cipher_find_component"],[14,4,1,"","component_input_bits"],[14,4,1,"","component_inverse"],[14,4,1,"","component_output_bits"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_components"],[14,4,1,"","compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_components"],[14,4,1,"","delete_orphan_links"],[14,4,1,"","equivalent_bits_in_common"],[14,4,1,"","evaluated_component"],[14,4,1,"","find_correct_order"],[14,4,1,"","find_correct_order_for_inversion"],[14,4,1,"","find_input_id_link_bits_equivalent"],[14,4,1,"","get_all_bit_names"],[14,4,1,"","get_all_components_with_the_same_input_id_link_and_input_bit_positions"],[14,4,1,"","get_all_equivalent_bits"],[14,4,1,"","get_available_output_components"],[14,4,1,"","get_cipher_components"],[14,4,1,"","get_component_from_id"],[14,4,1,"","get_equivalent_input_bit_from_output_bit"],[14,4,1,"","get_key_schedule_component_ids"],[14,4,1,"","get_most_recent_intermediate_output"],[14,4,1,"","get_output_components"],[14,4,1,"","get_relative_position"],[14,4,1,"","is_bit_adjacent_to_list_of_bits"],[14,4,1,"","is_bit_contained_in"],[14,4,1,"","is_intersection_of_input_id_links_null"],[14,4,1,"","is_output_bits_updated_equivalent_to_input_bits"],[14,4,1,"","is_possibly_invertible_component"],[14,4,1,"","order_input_id_links_for_modadd"],[14,4,1,"","remove_components_from_rounds"],[14,4,1,"","sort_cipher_graph"],[14,4,1,"","sort_input_id_links_and_input_bit_positions"],[14,4,1,"","topological_sort"],[14,4,1,"","update_available_bits_with_component_input_bits"],[14,4,1,"","update_available_bits_with_component_output_bits"],[14,4,1,"","update_input_links_from_rounds"],[14,4,1,"","update_output_bits"]],"cipher_modules.models":[[77,0,0,"-","utils"]],"cipher_modules.models.algebraic":[[15,0,0,"-","algebraic_model"],[16,0,0,"-","boolean_polynomial_ring"],[17,0,0,"-","constraints"]],"cipher_modules.models.algebraic.algebraic_model":[[15,1,1,"","AlgebraicModel"]],"cipher_modules.models.algebraic.algebraic_model.AlgebraicModel":[[15,2,1,"","connection_polynomials"],[15,2,1,"","connection_polynomials_at_round"],[15,2,1,"","is_algebraically_secure"],[15,2,1,"","nvars"],[15,2,1,"","polynomial_system"],[15,2,1,"","polynomial_system_at_round"],[15,2,1,"","ring"],[15,2,1,"","var_names"]],"cipher_modules.models.algebraic.boolean_polynomial_ring":[[16,4,1,"","is_boolean_polynomial_ring"]],"cipher_modules.models.algebraic.constraints":[[17,4,1,"","equality_polynomials"],[17,4,1,"","mod_addition_polynomials"],[17,4,1,"","mod_binary_operation_polynomials"],[17,4,1,"","mod_subtraction_polynomials"]],"cipher_modules.models.cp":[[19,0,0,"-","cp_model"]],"cipher_modules.models.cp.cp_model":[[19,1,1,"","CpModel"]],"cipher_modules.models.cp.cp_model.CpModel":[[19,2,1,"","add_solution_to_components_values"],[19,2,1,"","add_solutions_from_components_values"],[19,2,1,"","build_mix_column_truncated_table"],[19,2,1,"","calculate_bit_positions"],[19,2,1,"","calculate_bit_values"],[19,2,1,"","calculate_input_bit_positions"],[19,3,1,"","cipher"],[19,3,1,"","cipher_id"],[19,2,1,"","find_possible_number_of_active_sboxes"],[19,2,1,"","fix_variables_value_constraints"],[19,3,1,"","float_and_lat_values"],[19,2,1,"","format_component_value"],[19,2,1,"","get_command_for_solver_process"],[19,2,1,"","get_mix_column_all_inputs"],[19,2,1,"","get_total_weight"],[19,2,1,"","initialise_model"],[19,3,1,"","model_constraints"],[19,2,1,"","parse_solver_information"],[19,2,1,"","set_component_solution_value"],[19,2,1,"","solve"],[19,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models":[[20,0,0,"-","cp_cipher_model"],[21,0,0,"-","cp_deterministic_truncated_xor_differential_model"],[22,0,0,"-","cp_xor_differential_model"],[23,0,0,"-","cp_xor_differential_number_of_active_sboxes_model"],[24,0,0,"-","cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model"],[25,0,0,"-","cp_xor_linear_model"]],"cipher_modules.models.cp.cp_models.cp_cipher_model":[[20,1,1,"","CpCipherModel"]],"cipher_modules.models.cp.cp_models.cp_cipher_model.CpCipherModel":[[20,2,1,"","add_solution_to_components_values"],[20,2,1,"","add_solutions_from_components_values"],[20,2,1,"","build_cipher_model"],[20,2,1,"","build_mix_column_truncated_table"],[20,2,1,"","calculate_bit_positions"],[20,2,1,"","calculate_bit_values"],[20,2,1,"","calculate_input_bit_positions"],[20,3,1,"","cipher"],[20,3,1,"","cipher_id"],[20,2,1,"","final_constraints"],[20,2,1,"","find_possible_number_of_active_sboxes"],[20,2,1,"","fix_variables_value_constraints"],[20,3,1,"","float_and_lat_values"],[20,2,1,"","format_component_value"],[20,2,1,"","get_command_for_solver_process"],[20,2,1,"","get_mix_column_all_inputs"],[20,2,1,"","get_total_weight"],[20,2,1,"","initialise_model"],[20,2,1,"","input_constraints"],[20,3,1,"","model_constraints"],[20,2,1,"","parse_solver_information"],[20,2,1,"","set_component_solution_value"],[20,2,1,"","solve"],[20,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model":[[21,1,1,"","CpDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.cp.cp_models.cp_deterministic_truncated_xor_differential_model.CpDeterministicTruncatedXorDifferentialModel":[[21,2,1,"","add_solution_to_components_values"],[21,2,1,"","add_solutions_from_components_values"],[21,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_inverse_deterministic_truncated_xor_differential_trail_model"],[21,2,1,"","build_mix_column_truncated_table"],[21,2,1,"","calculate_bit_positions"],[21,2,1,"","calculate_bit_values"],[21,2,1,"","calculate_input_bit_positions"],[21,3,1,"","cipher"],[21,3,1,"","cipher_id"],[21,2,1,"","final_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","final_impossible_constraints"],[21,2,1,"","find_all_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_one_deterministic_truncated_xor_differential_trail"],[21,2,1,"","find_possible_number_of_active_sboxes"],[21,2,1,"","fix_variables_value_constraints"],[21,3,1,"","float_and_lat_values"],[21,2,1,"","format_component_value"],[21,2,1,"","get_command_for_solver_process"],[21,2,1,"","get_mix_column_all_inputs"],[21,2,1,"","get_total_weight"],[21,2,1,"","initialise_model"],[21,2,1,"","input_deterministic_truncated_xor_differential_constraints"],[21,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[21,3,1,"","model_constraints"],[21,2,1,"","output_constraints"],[21,2,1,"","output_inverse_constraints"],[21,2,1,"","parse_solver_information"],[21,2,1,"","set_component_solution_value"],[21,2,1,"","solve"],[21,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model":[[22,1,1,"","CpXorDifferentialModel"],[22,4,1,"","and_xor_differential_probability_ddt"],[22,4,1,"","update_and_or_ddt_valid_probabilities"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_model.CpXorDifferentialModel":[[22,2,1,"","add_solution_to_components_values"],[22,2,1,"","add_solutions_from_components_values"],[22,2,1,"","build_mix_column_truncated_table"],[22,2,1,"","build_xor_differential_trail_model"],[22,2,1,"","build_xor_differential_trail_model_template"],[22,2,1,"","calculate_bit_positions"],[22,2,1,"","calculate_bit_values"],[22,2,1,"","calculate_input_bit_positions"],[22,3,1,"","cipher"],[22,3,1,"","cipher_id"],[22,2,1,"","final_xor_differential_constraints"],[22,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[22,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[22,2,1,"","find_differential_weight"],[22,2,1,"","find_lowest_weight_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail"],[22,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[22,2,1,"","find_possible_number_of_active_sboxes"],[22,2,1,"","fix_variables_value_constraints"],[22,3,1,"","float_and_lat_values"],[22,2,1,"","format_component_value"],[22,2,1,"","get_command_for_solver_process"],[22,2,1,"","get_mix_column_all_inputs"],[22,2,1,"","get_total_weight"],[22,2,1,"","get_word_operation_xor_differential_constraints"],[22,2,1,"","initialise_model"],[22,2,1,"","input_xor_differential_constraints"],[22,3,1,"","model_constraints"],[22,2,1,"","parse_solver_information"],[22,2,1,"","set_component_solution_value"],[22,2,1,"","solve"],[22,2,1,"","update_sbox_ddt_valid_probabilities"],[22,2,1,"","weight_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model":[[23,1,1,"","CpXorDifferentialNumberOfActiveSboxesModel"],[23,4,1,"","build_xor_truncated_table"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_number_of_active_sboxes_model.CpXorDifferentialNumberOfActiveSboxesModel":[[23,2,1,"","add_additional_xor_constraints"],[23,2,1,"","add_solution_to_components_values"],[23,2,1,"","add_solutions_from_components_values"],[23,2,1,"","build_mix_column_truncated_table"],[23,2,1,"","build_xor_differential_trail_first_step_model"],[23,2,1,"","calculate_bit_positions"],[23,2,1,"","calculate_bit_values"],[23,2,1,"","calculate_input_bit_positions"],[23,3,1,"","cipher"],[23,3,1,"","cipher_id"],[23,2,1,"","create_xor_component"],[23,2,1,"","final_xor_differential_first_step_constraints"],[23,2,1,"","find_possible_number_of_active_sboxes"],[23,2,1,"","fix_variables_value_constraints"],[23,3,1,"","float_and_lat_values"],[23,2,1,"","format_component_value"],[23,2,1,"","get_command_for_solver_process"],[23,2,1,"","get_mix_column_all_inputs"],[23,2,1,"","get_new_xor_input_links_and_positions"],[23,2,1,"","get_total_weight"],[23,2,1,"","get_xor_all_inputs"],[23,2,1,"","initialise_model"],[23,2,1,"","input_xor_differential_first_step_constraints"],[23,3,1,"","model_constraints"],[23,2,1,"","parse_solver_information"],[23,2,1,"","set_component_solution_value"],[23,2,1,"","solve"],[23,2,1,"","weight_constraints"],[23,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model":[[24,1,1,"","CpXorDifferentialFixingNumberOfActiveSboxesModel"]],"cipher_modules.models.cp.cp_models.cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model.CpXorDifferentialFixingNumberOfActiveSboxesModel":[[24,2,1,"","add_additional_xor_constraints"],[24,2,1,"","add_solution_to_components_values"],[24,2,1,"","add_solutions_from_components_values"],[24,2,1,"","build_mix_column_truncated_table"],[24,2,1,"","build_xor_differential_trail_first_step_model"],[24,2,1,"","build_xor_differential_trail_model"],[24,2,1,"","build_xor_differential_trail_model_template"],[24,2,1,"","build_xor_differential_trail_second_step_model"],[24,2,1,"","calculate_bit_positions"],[24,2,1,"","calculate_bit_values"],[24,2,1,"","calculate_input_bit_positions"],[24,3,1,"","cipher"],[24,3,1,"","cipher_id"],[24,2,1,"","create_xor_component"],[24,2,1,"","final_xor_differential_constraints"],[24,2,1,"","final_xor_differential_first_step_constraints"],[24,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[24,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[24,2,1,"","find_differential_weight"],[24,2,1,"","find_lowest_weight_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail"],[24,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[24,2,1,"","find_possible_number_of_active_sboxes"],[24,2,1,"","fix_variables_value_constraints"],[24,3,1,"","float_and_lat_values"],[24,2,1,"","format_component_value"],[24,2,1,"","generate_table_of_solutions"],[24,2,1,"","get_command_for_solver_process"],[24,2,1,"","get_mix_column_all_inputs"],[24,2,1,"","get_new_xor_input_links_and_positions"],[24,2,1,"","get_solutions_dictionaries_with_build_time"],[24,2,1,"","get_total_weight"],[24,2,1,"","get_word_operation_xor_differential_constraints"],[24,2,1,"","get_xor_all_inputs"],[24,2,1,"","initialise_model"],[24,2,1,"","input_xor_differential_constraints"],[24,2,1,"","input_xor_differential_first_step_constraints"],[24,3,1,"","model_constraints"],[24,2,1,"","parse_solver_information"],[24,2,1,"","set_component_solution_value"],[24,2,1,"","solve"],[24,2,1,"","solve_full_two_steps_xor_differential_model"],[24,2,1,"","solve_model"],[24,2,1,"","transform_first_step_model"],[24,2,1,"","update_sbox_ddt_valid_probabilities"],[24,2,1,"","weight_constraints"],[24,2,1,"","xor_xor_differential_first_step_constraints"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model":[[25,1,1,"","CpXorLinearModel"]],"cipher_modules.models.cp.cp_models.cp_xor_linear_model.CpXorLinearModel":[[25,2,1,"","add_solution_to_components_values"],[25,2,1,"","add_solutions_from_components_values"],[25,2,1,"","and_xor_linear_probability_lat"],[25,2,1,"","branch_xor_linear_constraints"],[25,2,1,"","build_mix_column_truncated_table"],[25,2,1,"","build_xor_linear_trail_model"],[25,2,1,"","calculate_bit_positions"],[25,2,1,"","calculate_bit_values"],[25,2,1,"","calculate_input_bit_positions"],[25,3,1,"","cipher"],[25,3,1,"","cipher_id"],[25,2,1,"","final_xor_linear_constraints"],[25,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[25,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[25,2,1,"","find_lowest_weight_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail"],[25,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[25,2,1,"","find_possible_number_of_active_sboxes"],[25,2,1,"","fix_variables_value_constraints"],[25,2,1,"","fix_variables_value_xor_linear_constraints"],[25,3,1,"","float_and_lat_values"],[25,2,1,"","format_component_value"],[25,2,1,"","get_command_for_solver_process"],[25,2,1,"","get_lat_values"],[25,2,1,"","get_mix_column_all_inputs"],[25,2,1,"","get_total_weight"],[25,2,1,"","get_word_operation_final_xor_linear_constraints"],[25,2,1,"","initialise_model"],[25,2,1,"","input_xor_linear_constraints"],[25,3,1,"","model_constraints"],[25,2,1,"","parse_solver_information"],[25,2,1,"","set_component_solution_value"],[25,2,1,"","solve"],[25,2,1,"","update_and_or_lat_valid_probabilities"],[25,2,1,"","update_sbox_lat_valid_probabilities"],[25,2,1,"","weight_constraints"],[25,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp":[[26,0,0,"-","milp_model"]],"cipher_modules.models.milp.milp_model":[[26,1,1,"","MilpModel"],[26,4,1,"","get_independent_input_output_variables"],[26,4,1,"","get_input_output_variables"],[26,4,1,"","verbose_print"]],"cipher_modules.models.milp.milp_model.MilpModel":[[26,3,1,"","binary_variable"],[26,3,1,"","cipher"],[26,3,1,"","cipher_id"],[26,2,1,"","fix_variables_value_constraints"],[26,2,1,"","init_model_in_sage_milp_class"],[26,3,1,"","integer_variable"],[26,3,1,"","intermediate_output_names"],[26,3,1,"","model"],[26,3,1,"","model_constraints"],[26,3,1,"","non_linear_component_id"],[26,2,1,"","solve"],[26,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models":[[27,0,0,"-","milp_bitwise_deterministic_truncated_xor_differential_model"],[28,0,0,"-","milp_bitwise_impossible_xor_differential_model"],[29,0,0,"-","milp_cipher_model"],[30,0,0,"-","milp_wordwise_deterministic_truncated_xor_differential_model"],[31,0,0,"-","milp_wordwise_impossible_xor_differential_model"],[32,0,0,"-","milp_xor_differential_model"],[33,0,0,"-","milp_xor_linear_model"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model":[[27,1,1,"","MilpBitwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_deterministic_truncated_xor_differential_model.MilpBitwiseDeterministicTruncatedXorDifferentialModel":[[27,2,1,"","add_constraints_to_build_in_sage_milp_class"],[27,3,1,"","binary_variable"],[27,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[27,3,1,"","cipher"],[27,3,1,"","cipher_id"],[27,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[27,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[27,2,1,"","fix_variables_value_constraints"],[27,2,1,"","init_model_in_sage_milp_class"],[27,3,1,"","integer_variable"],[27,3,1,"","intermediate_output_names"],[27,2,1,"","link_binary_tuples_to_integer_variables"],[27,3,1,"","model"],[27,3,1,"","model_constraints"],[27,3,1,"","non_linear_component_id"],[27,2,1,"","solve"],[27,3,1,"","trunc_binvar"],[27,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model":[[28,1,1,"","MilpBitwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_bitwise_impossible_xor_differential_model.MilpBitwiseImpossibleXorDifferentialModel":[[28,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class"],[28,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[28,3,1,"","binary_variable"],[28,2,1,"","build_bitwise_deterministic_truncated_xor_differential_trail_model"],[28,2,1,"","build_bitwise_impossible_xor_differential_trail_model"],[28,3,1,"","cipher"],[28,3,1,"","cipher_id"],[28,2,1,"","find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_deterministic_truncated_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fixed_component"],[28,2,1,"","find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model"],[28,2,1,"","fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraints"],[28,2,1,"","fix_variables_value_constraints"],[28,2,1,"","init_model_in_sage_milp_class"],[28,3,1,"","integer_variable"],[28,3,1,"","intermediate_output_names"],[28,2,1,"","link_binary_tuples_to_integer_variables"],[28,3,1,"","model"],[28,3,1,"","model_constraints"],[28,3,1,"","non_linear_component_id"],[28,2,1,"","solve"],[28,3,1,"","trunc_binvar"],[28,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_cipher_model":[[29,1,1,"","MilpCipherModel"]],"cipher_modules.models.milp.milp_models.milp_cipher_model.MilpCipherModel":[[29,3,1,"","binary_variable"],[29,2,1,"","build_cipher_model"],[29,3,1,"","cipher"],[29,3,1,"","cipher_id"],[29,2,1,"","fix_variables_value_constraints"],[29,2,1,"","init_model_in_sage_milp_class"],[29,3,1,"","integer_variable"],[29,3,1,"","intermediate_output_names"],[29,3,1,"","model"],[29,3,1,"","model_constraints"],[29,3,1,"","non_linear_component_id"],[29,2,1,"","solve"],[29,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model":[[30,1,1,"","MilpWordwiseDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_deterministic_truncated_xor_differential_model.MilpWordwiseDeterministicTruncatedXorDifferentialModel":[[30,2,1,"","add_constraints_to_build_in_sage_milp_class"],[30,3,1,"","binary_variable"],[30,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[30,3,1,"","cipher"],[30,3,1,"","cipher_id"],[30,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[30,2,1,"","fix_variables_value_constraints"],[30,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[30,2,1,"","init_model_in_sage_milp_class"],[30,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[30,3,1,"","integer_variable"],[30,3,1,"","intermediate_output_names"],[30,3,1,"","model"],[30,3,1,"","model_constraints"],[30,3,1,"","non_linear_component_id"],[30,2,1,"","solve"],[30,3,1,"","trunc_wordvar"],[30,2,1,"","weight_constraints"],[30,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model":[[31,1,1,"","MilpWordwiseImpossibleXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_wordwise_impossible_xor_differential_model.MilpWordwiseImpossibleXorDifferentialModel":[[31,2,1,"","add_constraints_to_build_fully_automatic_model_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class"],[31,2,1,"","add_constraints_to_build_in_sage_milp_class_with_fixed_components"],[31,3,1,"","binary_variable"],[31,2,1,"","build_wordwise_deterministic_truncated_xor_differential_trail_model"],[31,2,1,"","build_wordwise_impossible_xor_differential_trail_model"],[31,3,1,"","cipher"],[31,3,1,"","cipher_id"],[31,2,1,"","find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_deterministic_truncated_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fixed_component"],[31,2,1,"","find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model"],[31,2,1,"","fix_variables_value_constraints"],[31,2,1,"","fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraints"],[31,2,1,"","init_model_in_sage_milp_class"],[31,2,1,"","input_wordwise_deterministic_truncated_xor_differential_constraints"],[31,3,1,"","integer_variable"],[31,3,1,"","intermediate_output_names"],[31,3,1,"","model"],[31,3,1,"","model_constraints"],[31,3,1,"","non_linear_component_id"],[31,2,1,"","solve"],[31,3,1,"","trunc_wordvar"],[31,2,1,"","weight_constraints"],[31,3,1,"","word_size"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model":[[32,1,1,"","MilpXorDifferentialModel"]],"cipher_modules.models.milp.milp_models.milp_xor_differential_model.MilpXorDifferentialModel":[[32,2,1,"","add_constraints_to_build_in_sage_milp_class"],[32,3,1,"","binary_variable"],[32,2,1,"","build_xor_differential_trail_model"],[32,3,1,"","cipher"],[32,3,1,"","cipher_id"],[32,2,1,"","exclude_variables_value_constraints"],[32,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[32,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","find_lowest_weight_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail"],[32,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[32,2,1,"","fix_variables_value_constraints"],[32,2,1,"","get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most"],[32,2,1,"","init_model_in_sage_milp_class"],[32,3,1,"","integer_variable"],[32,3,1,"","intermediate_output_names"],[32,2,1,"","is_single_key"],[32,3,1,"","model"],[32,3,1,"","model_constraints"],[32,3,1,"","non_linear_component_id"],[32,2,1,"","solve"],[32,2,1,"","weight_constraints"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model":[[33,1,1,"","MilpXorLinearModel"]],"cipher_modules.models.milp.milp_models.milp_xor_linear_model.MilpXorLinearModel":[[33,2,1,"","add_constraints_to_build_in_sage_milp_class"],[33,3,1,"","binary_variable"],[33,2,1,"","branch_xor_linear_constraints"],[33,2,1,"","build_xor_linear_trail_model"],[33,3,1,"","cipher"],[33,3,1,"","cipher_id"],[33,2,1,"","exclude_variables_value_xor_linear_constraints"],[33,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[33,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","find_lowest_weight_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail"],[33,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[33,2,1,"","fix_variables_value_constraints"],[33,2,1,"","fix_variables_value_xor_linear_constraints"],[33,2,1,"","get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most"],[33,2,1,"","init_model_in_sage_milp_class"],[33,3,1,"","integer_variable"],[33,3,1,"","intermediate_output_names"],[33,3,1,"","model"],[33,3,1,"","model_constraints"],[33,3,1,"","non_linear_component_id"],[33,2,1,"","solve"],[33,2,1,"","update_xor_linear_constraints_for_more_than_two_bits"],[33,2,1,"","weight_constraints"],[33,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.milp.utils":[[35,0,0,"-","config"],[45,0,0,"-","generate_inequalities_for_and_operation_2_input_bits"],[46,0,0,"-","generate_inequalities_for_large_sboxes"],[47,0,0,"-","generate_inequalities_for_wordwise_truncated_mds_matrices"],[48,0,0,"-","generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits"],[49,0,0,"-","generate_inequalities_for_xor_with_n_input_bits"],[50,0,0,"-","generate_sbox_inequalities_for_trail_search"],[51,0,0,"-","generate_undisturbed_bits_inequalities_for_sboxes"],[52,0,0,"-","milp_name_mappings"],[53,0,0,"-","mzn_predicates"],[54,0,0,"-","utils"]],"cipher_modules.models.milp.utils.generate_inequalities_for_and_operation_2_input_bits":[[45,4,1,"","and_LAT"],[45,4,1,"","and_inequalities"],[45,4,1,"","convex_hull"],[45,4,1,"","cutting_off_greedy"],[45,4,1,"","cutting_off_milp"]],"cipher_modules.models.milp.utils.generate_inequalities_for_large_sboxes":[[46,4,1,"","delete_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","generate_espresso_input"],[46,4,1,"","generate_product_of_sum_from_espresso"],[46,4,1,"","get_dictionary_that_contains_inequalities_for_large_sboxes"],[46,4,1,"","update_dictionary_that_contains_inequalities_for_large_sboxes"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_mds_matrices":[[47,4,1,"","delete_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","generate_valid_points_for_truncated_mds_matrix"],[47,4,1,"","output_dictionary_that_contains_wordwise_truncated_mds_inequalities"],[47,4,1,"","update_dictionary_that_contains_wordwise_truncated_mds_inequalities"]],"cipher_modules.models.milp.utils.generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits":[[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","delete_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","generate_valid_points_for_xor_between_n_input_words"],[48,4,1,"","generate_valid_points_input_words"],[48,4,1,"","get_valid_points_for_wordwise_xor"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","output_dictionary_that_contains_wordwise_truncated_xor_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_input_inequalities"],[48,4,1,"","update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_inputs"],[48,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix"]],"cipher_modules.models.milp.utils.generate_inequalities_for_xor_with_n_input_bits":[[49,4,1,"","delete_dictionary_that_contains_xor_inequalities"],[49,4,1,"","generate_all_possible_points_with_n_bits"],[49,4,1,"","generate_impossible_points_for_xor_between_n_input_bits"],[49,4,1,"","output_dictionary_that_contains_xor_inequalities"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_between_n_input_bits"],[49,4,1,"","update_dictionary_that_contains_xor_inequalities_for_specific_matrix"]],"cipher_modules.models.milp.utils.generate_sbox_inequalities_for_trail_search":[[50,4,1,"","convex_hull"],[50,4,1,"","cutting_off_greedy"],[50,4,1,"","cutting_off_milp"],[50,4,1,"","delete_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","get_dictionary_that_contains_inequalities_for_small_sboxes"],[50,4,1,"","sbox_inequalities"],[50,4,1,"","to_bits"],[50,4,1,"","update_dictionary_that_contains_inequalities_for_small_sboxes"]],"cipher_modules.models.milp.utils.generate_undisturbed_bits_inequalities_for_sboxes":[[51,4,1,"","delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","generate_dict_product_of_sum_from_espresso"],[51,4,1,"","get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"],[51,4,1,"","get_transitions_for_single_output_bit"],[51,4,1,"","update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits"]],"cipher_modules.models.milp.utils.mzn_predicates":[[53,4,1,"","get_word_operations"]],"cipher_modules.models.milp.utils.utils":[[54,4,1,"","delete_espresso_dictionary"],[54,4,1,"","espresso_pos_to_constraints"],[54,4,1,"","fix_variables_value_deterministic_truncated_xor_differential_constraints"],[54,4,1,"","generate_espresso_input"],[54,4,1,"","generate_product_of_sum_from_espresso"],[54,4,1,"","milp_and"],[54,4,1,"","milp_else"],[54,4,1,"","milp_eq"],[54,4,1,"","milp_generalized_and"],[54,4,1,"","milp_generalized_xor"],[54,4,1,"","milp_geq"],[54,4,1,"","milp_greater"],[54,4,1,"","milp_if_elif_else"],[54,4,1,"","milp_if_then"],[54,4,1,"","milp_if_then_else"],[54,4,1,"","milp_leq"],[54,4,1,"","milp_less"],[54,4,1,"","milp_neq"],[54,4,1,"","milp_or"],[54,4,1,"","milp_xor"],[54,4,1,"","milp_xor_truncated"],[54,4,1,"","milp_xor_truncated_wordwise"],[54,4,1,"","output_espresso_dictionary"]],"cipher_modules.models.minizinc":[[55,0,0,"-","minizinc_model"]],"cipher_modules.models.minizinc.minizinc_model":[[55,1,1,"","MinizincModel"]],"cipher_modules.models.minizinc.minizinc_model.MinizincModel":[[55,2,1,"","add_comment"],[55,2,1,"","add_constraint_from_str"],[55,2,1,"","add_output_comment"],[55,3,1,"","cipher"],[55,3,1,"","cipher_id"],[55,2,1,"","fix_variables_value_constraints"],[55,3,1,"","model_constraints"],[55,2,1,"","output_probability_per_round"],[55,2,1,"","solve"],[55,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models":[[56,0,0,"-","minizinc_cipher_model"],[57,0,0,"-","minizinc_deterministic_truncated_xor_differential_model"],[58,0,0,"-","minizinc_xor_differential_model"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model":[[56,1,1,"","MinizincCipherModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_cipher_model.MinizincCipherModel":[[56,2,1,"","add_comment"],[56,2,1,"","add_constraint_from_str"],[56,2,1,"","add_output_comment"],[56,2,1,"","build_cipher_model"],[56,3,1,"","cipher"],[56,3,1,"","cipher_id"],[56,2,1,"","fix_variables_value_constraints"],[56,3,1,"","model_constraints"],[56,2,1,"","output_probability_per_round"],[56,2,1,"","solve"],[56,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model":[[57,1,1,"","MinizincDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_deterministic_truncated_xor_differential_model.MinizincDeterministicTruncatedXorDifferentialModel":[[57,2,1,"","add_comment"],[57,2,1,"","add_constraint_from_str"],[57,2,1,"","add_output_comment"],[57,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[57,3,1,"","cipher"],[57,3,1,"","cipher_id"],[57,2,1,"","fix_variables_value_constraints"],[57,3,1,"","model_constraints"],[57,2,1,"","output_probability_per_round"],[57,2,1,"","solve"],[57,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model":[[58,1,1,"","MinizincXorDifferentialModel"]],"cipher_modules.models.minizinc.minizinc_models.minizinc_xor_differential_model.MinizincXorDifferentialModel":[[58,2,1,"","add_comment"],[58,2,1,"","add_constraint_from_str"],[58,2,1,"","add_output_comment"],[58,2,1,"","build_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","build_lowest_weight_xor_differential_trail_model"],[58,2,1,"","build_lowest_xor_differential_trails_with_at_most_weight"],[58,2,1,"","build_xor_differential_trail_model"],[58,3,1,"","cipher"],[58,3,1,"","cipher_id"],[58,2,1,"","connect_rounds"],[58,2,1,"","constraint_permutation_and_key_schedule_separately_by_input_sizes"],[58,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[58,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[58,2,1,"","find_lowest_weight_xor_differential_trail"],[58,2,1,"","find_min_of_max_xor_differential_between_permutation_and_key_schedule"],[58,2,1,"","fix_variables_value_constraints"],[58,2,1,"","get_probability_vars_from_key_schedule"],[58,2,1,"","get_probability_vars_from_permutation"],[58,2,1,"","init_constraints"],[58,3,1,"","model_constraints"],[58,2,1,"","objective_generator"],[58,2,1,"","output_probability_per_round"],[58,2,1,"","parse_probability_vars"],[58,2,1,"","satisfy_generator"],[58,2,1,"","set_max_number_of_carries_on_arx_cipher"],[58,2,1,"","set_max_number_of_nonlinear_carries"],[58,2,1,"","solve"],[58,2,1,"","weight_constraints"],[58,2,1,"","write_minizinc_model_to_file"]],"cipher_modules.models.sat":[[63,0,0,"-","sat_model"]],"cipher_modules.models.sat.cms_models":[[59,0,0,"-","cms_cipher_model"],[60,0,0,"-","cms_deterministic_truncated_xor_differential_model"],[61,0,0,"-","cms_xor_differential_model"],[62,0,0,"-","cms_xor_linear_model"]],"cipher_modules.models.sat.cms_models.cms_cipher_model":[[59,1,1,"","CmsSatCipherModel"]],"cipher_modules.models.sat.cms_models.cms_cipher_model.CmsSatCipherModel":[[59,2,1,"","build_cipher_model"],[59,2,1,"","calculate_component_weight"],[59,3,1,"","cipher_id"],[59,2,1,"","find_missing_bits"],[59,2,1,"","fix_variables_value_constraints"],[59,3,1,"","model_constraints"],[59,3,1,"","sboxes_ddt_templates"],[59,3,1,"","sboxes_lat_templates"],[59,2,1,"","solve"],[59,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model":[[60,1,1,"","CmsSatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_deterministic_truncated_xor_differential_model.CmsSatDeterministicTruncatedXorDifferentialModel":[[60,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[60,2,1,"","calculate_component_weight"],[60,3,1,"","cipher_id"],[60,2,1,"","fix_variables_value_constraints"],[60,3,1,"","model_constraints"],[60,3,1,"","sboxes_ddt_templates"],[60,3,1,"","sboxes_lat_templates"],[60,2,1,"","solve"],[60,2,1,"","weight_constraints"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model":[[61,1,1,"","CmsSatXorDifferentialModel"]],"cipher_modules.models.sat.cms_models.cms_xor_differential_model.CmsSatXorDifferentialModel":[[61,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[61,2,1,"","build_xor_differential_trail_model"],[61,2,1,"","calculate_component_weight"],[61,3,1,"","cipher_id"],[61,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[61,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[61,2,1,"","find_lowest_weight_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail"],[61,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[61,2,1,"","fix_variables_value_constraints"],[61,3,1,"","model_constraints"],[61,3,1,"","sboxes_ddt_templates"],[61,3,1,"","sboxes_lat_templates"],[61,2,1,"","solve"],[61,2,1,"","weight_constraints"],[61,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model":[[62,1,1,"","CmsSatXorLinearModel"]],"cipher_modules.models.sat.cms_models.cms_xor_linear_model.CmsSatXorLinearModel":[[62,2,1,"","branch_xor_linear_constraints"],[62,2,1,"","build_xor_linear_trail_model"],[62,2,1,"","calculate_component_weight"],[62,3,1,"","cipher_id"],[62,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[62,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[62,2,1,"","find_lowest_weight_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail"],[62,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[62,2,1,"","fix_variables_value_constraints"],[62,2,1,"","fix_variables_value_xor_linear_constraints"],[62,3,1,"","model_constraints"],[62,3,1,"","sboxes_ddt_templates"],[62,3,1,"","sboxes_lat_templates"],[62,2,1,"","solve"],[62,2,1,"","weight_constraints"],[62,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.sat_model":[[63,1,1,"","SatModel"]],"cipher_modules.models.sat.sat_model.SatModel":[[63,2,1,"","calculate_component_weight"],[63,3,1,"","cipher_id"],[63,2,1,"","fix_variables_value_constraints"],[63,3,1,"","model_constraints"],[63,3,1,"","sboxes_ddt_templates"],[63,3,1,"","sboxes_lat_templates"],[63,2,1,"","solve"],[63,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models":[[64,0,0,"-","sat_cipher_model"],[65,0,0,"-","sat_deterministic_truncated_xor_differential_model"],[66,0,0,"-","sat_xor_differential_model"],[67,0,0,"-","sat_xor_linear_model"]],"cipher_modules.models.sat.sat_models.sat_cipher_model":[[64,1,1,"","SatCipherModel"]],"cipher_modules.models.sat.sat_models.sat_cipher_model.SatCipherModel":[[64,2,1,"","build_cipher_model"],[64,2,1,"","calculate_component_weight"],[64,3,1,"","cipher_id"],[64,2,1,"","find_missing_bits"],[64,2,1,"","fix_variables_value_constraints"],[64,3,1,"","model_constraints"],[64,3,1,"","sboxes_ddt_templates"],[64,3,1,"","sboxes_lat_templates"],[64,2,1,"","solve"],[64,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model":[[65,1,1,"","SatDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_deterministic_truncated_xor_differential_model.SatDeterministicTruncatedXorDifferentialModel":[[65,2,1,"","build_deterministic_truncated_xor_differential_trail_model"],[65,2,1,"","calculate_component_weight"],[65,3,1,"","cipher_id"],[65,2,1,"","fix_variables_value_constraints"],[65,3,1,"","model_constraints"],[65,3,1,"","sboxes_ddt_templates"],[65,3,1,"","sboxes_lat_templates"],[65,2,1,"","solve"],[65,2,1,"","weight_constraints"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model":[[66,1,1,"","SatXorDifferentialModel"]],"cipher_modules.models.sat.sat_models.sat_xor_differential_model.SatXorDifferentialModel":[[66,2,1,"","build_xor_differential_trail_and_checker_model_at_intermediate_output_level"],[66,2,1,"","build_xor_differential_trail_model"],[66,2,1,"","calculate_component_weight"],[66,3,1,"","cipher_id"],[66,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[66,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[66,2,1,"","find_lowest_weight_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail"],[66,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[66,2,1,"","fix_variables_value_constraints"],[66,3,1,"","model_constraints"],[66,3,1,"","sboxes_ddt_templates"],[66,3,1,"","sboxes_lat_templates"],[66,2,1,"","solve"],[66,2,1,"","weight_constraints"],[66,3,1,"","window_size_by_round"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model":[[67,1,1,"","SatXorLinearModel"]],"cipher_modules.models.sat.sat_models.sat_xor_linear_model.SatXorLinearModel":[[67,2,1,"","branch_xor_linear_constraints"],[67,2,1,"","build_xor_linear_trail_model"],[67,2,1,"","calculate_component_weight"],[67,3,1,"","cipher_id"],[67,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[67,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[67,2,1,"","find_lowest_weight_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail"],[67,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[67,2,1,"","fix_variables_value_constraints"],[67,2,1,"","fix_variables_value_xor_linear_constraints"],[67,3,1,"","model_constraints"],[67,3,1,"","sboxes_ddt_templates"],[67,3,1,"","sboxes_lat_templates"],[67,2,1,"","solve"],[67,2,1,"","weight_constraints"],[67,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.sat.utils":[[68,0,0,"-","mzn_predicates"],[69,0,0,"-","n_window_heuristic_helper"],[70,0,0,"-","utils"]],"cipher_modules.models.sat.utils.mzn_predicates":[[68,4,1,"","get_word_operations"]],"cipher_modules.models.sat.utils.n_window_heuristic_helper":[[69,4,1,"","window_size_0_cnf"],[69,4,1,"","window_size_1_cnf"],[69,4,1,"","window_size_2_cnf"],[69,4,1,"","window_size_3_cnf"],[69,4,1,"","window_size_4_cnf"],[69,4,1,"","window_size_5_cnf"]],"cipher_modules.models.sat.utils.utils":[[70,4,1,"","cms_add_clauses_to_solver"],[70,4,1,"","cnf_and"],[70,4,1,"","cnf_and_differential"],[70,4,1,"","cnf_and_linear"],[70,4,1,"","cnf_and_seq"],[70,4,1,"","cnf_carry"],[70,4,1,"","cnf_carry_comp2"],[70,4,1,"","cnf_equivalent"],[70,4,1,"","cnf_hw_lipmaa"],[70,4,1,"","cnf_inequality"],[70,4,1,"","cnf_lipmaa"],[70,4,1,"","cnf_modadd_inequality"],[70,4,1,"","cnf_n_window_heuristic_on_w_vars"],[70,4,1,"","cnf_or"],[70,4,1,"","cnf_or_seq"],[70,4,1,"","cnf_result_comp2"],[70,4,1,"","cnf_vshift_false"],[70,4,1,"","cnf_vshift_id"],[70,4,1,"","cnf_xor"],[70,4,1,"","cnf_xor_seq"],[70,4,1,"","create_numerical_cnf"],[70,4,1,"","numerical_cnf_to_dimacs"],[70,4,1,"","run_minisat"],[70,4,1,"","run_parkissat"],[70,4,1,"","run_sat_solver"],[70,4,1,"","run_yices"]],"cipher_modules.models.smt":[[71,0,0,"-","smt_model"]],"cipher_modules.models.smt.smt_model":[[71,1,1,"","SmtModel"],[71,4,1,"","mathsat_parser"],[71,4,1,"","yices_parser"],[71,4,1,"","z3_parser"]],"cipher_modules.models.smt.smt_model.SmtModel":[[71,2,1,"","calculate_component_weight"],[71,3,1,"","cipher_id"],[71,2,1,"","cipher_input_variables"],[71,2,1,"","fix_variables_value_constraints"],[71,2,1,"","get_xor_probability_constraints"],[71,3,1,"","model_constraints"],[71,3,1,"","sboxes_ddt_templates"],[71,3,1,"","sboxes_lat_templates"],[71,2,1,"","solve"],[71,2,1,"","update_constraints_for_equal_type"],[71,2,1,"","update_constraints_for_not_equal_type"],[71,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models":[[72,0,0,"-","smt_cipher_model"],[73,0,0,"-","smt_deterministic_truncated_xor_differential_model"],[74,0,0,"-","smt_xor_differential_model"],[75,0,0,"-","smt_xor_linear_model"]],"cipher_modules.models.smt.smt_models.smt_cipher_model":[[72,1,1,"","SmtCipherModel"]],"cipher_modules.models.smt.smt_models.smt_cipher_model.SmtCipherModel":[[72,2,1,"","build_cipher_model"],[72,2,1,"","calculate_component_weight"],[72,3,1,"","cipher_id"],[72,2,1,"","cipher_input_variables"],[72,2,1,"","find_missing_bits"],[72,2,1,"","fix_variables_value_constraints"],[72,2,1,"","get_xor_probability_constraints"],[72,3,1,"","model_constraints"],[72,3,1,"","sboxes_ddt_templates"],[72,3,1,"","sboxes_lat_templates"],[72,2,1,"","solve"],[72,2,1,"","update_constraints_for_equal_type"],[72,2,1,"","update_constraints_for_not_equal_type"],[72,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model":[[73,1,1,"","SmtDeterministicTruncatedXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_deterministic_truncated_xor_differential_model.SmtDeterministicTruncatedXorDifferentialModel":[[73,2,1,"","calculate_component_weight"],[73,3,1,"","cipher_id"],[73,2,1,"","cipher_input_variables"],[73,2,1,"","fix_variables_value_constraints"],[73,2,1,"","get_xor_probability_constraints"],[73,3,1,"","model_constraints"],[73,3,1,"","sboxes_ddt_templates"],[73,3,1,"","sboxes_lat_templates"],[73,2,1,"","solve"],[73,2,1,"","update_constraints_for_equal_type"],[73,2,1,"","update_constraints_for_not_equal_type"],[73,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model":[[74,1,1,"","SmtXorDifferentialModel"]],"cipher_modules.models.smt.smt_models.smt_xor_differential_model.SmtXorDifferentialModel":[[74,2,1,"","build_xor_differential_trail_model"],[74,2,1,"","calculate_component_weight"],[74,3,1,"","cipher_id"],[74,2,1,"","cipher_input_variables"],[74,2,1,"","find_all_xor_differential_trails_with_fixed_weight"],[74,2,1,"","find_all_xor_differential_trails_with_weight_at_most"],[74,2,1,"","find_lowest_weight_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail"],[74,2,1,"","find_one_xor_differential_trail_with_fixed_weight"],[74,2,1,"","fix_variables_value_constraints"],[74,2,1,"","get_operands"],[74,2,1,"","get_xor_probability_constraints"],[74,3,1,"","model_constraints"],[74,3,1,"","sboxes_ddt_templates"],[74,3,1,"","sboxes_lat_templates"],[74,2,1,"","solve"],[74,2,1,"","update_constraints_for_equal_type"],[74,2,1,"","update_constraints_for_not_equal_type"],[74,2,1,"","weight_constraints"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model":[[75,1,1,"","SmtXorLinearModel"]],"cipher_modules.models.smt.smt_models.smt_xor_linear_model.SmtXorLinearModel":[[75,2,1,"","branch_xor_linear_constraints"],[75,2,1,"","build_xor_linear_trail_model"],[75,2,1,"","calculate_component_weight"],[75,3,1,"","cipher_id"],[75,2,1,"","cipher_input_variables"],[75,2,1,"","cipher_input_xor_linear_variables"],[75,2,1,"","find_all_xor_linear_trails_with_fixed_weight"],[75,2,1,"","find_all_xor_linear_trails_with_weight_at_most"],[75,2,1,"","find_lowest_weight_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail"],[75,2,1,"","find_one_xor_linear_trail_with_fixed_weight"],[75,2,1,"","fix_variables_value_constraints"],[75,2,1,"","fix_variables_value_xor_linear_constraints"],[75,2,1,"","get_xor_probability_constraints"],[75,3,1,"","model_constraints"],[75,3,1,"","sboxes_ddt_templates"],[75,3,1,"","sboxes_lat_templates"],[75,2,1,"","solve"],[75,2,1,"","update_constraints_for_equal_type"],[75,2,1,"","update_constraints_for_not_equal_type"],[75,2,1,"","weight_constraints"],[75,2,1,"","weight_xor_linear_constraints"]],"cipher_modules.models.smt.utils":[[76,0,0,"-","utils"]],"cipher_modules.models.smt.utils.utils":[[76,4,1,"","get_component_hex_value"],[76,4,1,"","smt_and"],[76,4,1,"","smt_assert"],[76,4,1,"","smt_carry"],[76,4,1,"","smt_distinct"],[76,4,1,"","smt_equivalent"],[76,4,1,"","smt_implies"],[76,4,1,"","smt_ite"],[76,4,1,"","smt_lipmaa"],[76,4,1,"","smt_not"],[76,4,1,"","smt_or"],[76,4,1,"","smt_xor"]],"cipher_modules.models.utils":[[77,4,1,"","add_arcs"],[77,4,1,"","convert_solver_solution_to_dictionary"],[77,4,1,"","create_directory"],[77,4,1,"","find_sign_for_one_xor_linear_trail"],[77,4,1,"","find_sign_for_xor_linear_trails"],[77,4,1,"","get_bit_bindings"],[77,4,1,"","get_library_path"],[77,4,1,"","get_previous_output_bit_ids"],[77,4,1,"","get_related_key_scenario_format_for_fixed_values"],[77,4,1,"","get_single_key_scenario_format_for_fixed_values"],[77,4,1,"","integer_to_bit_list"],[77,4,1,"","print_components_values"],[77,4,1,"","set_component_solution"],[77,4,1,"","set_component_value_weight_sign"],[77,4,1,"","set_fixed_variables"],[77,4,1,"","to_bias_for_correlation_measure"],[77,4,1,"","to_bias_for_probability_measure"],[77,4,1,"","to_bias_for_xor_linear_trail"],[77,4,1,"","to_correlation_for_bias_measure"],[77,4,1,"","to_correlation_for_probability_measure"],[77,4,1,"","to_correlation_for_xor_linear_trail"],[77,4,1,"","to_probability_for_bias_measure"],[77,4,1,"","to_probability_for_correlation_measure"],[77,4,1,"","to_probability_for_xor_linear_trail"],[77,4,1,"","write_model_to_file"],[77,4,1,"","write_solution_into_a_file"],[77,4,1,"","write_solution_to_file"]],"cipher_modules.statistical_tests":[[79,0,0,"-","dataset_generator"],[80,0,0,"-","dieharder_statistical_tests"],[82,0,0,"-","nist_statistical_tests"]],"cipher_modules.statistical_tests.dataset_generator":[[79,1,1,"","DatasetGenerator"],[79,1,1,"","DatasetType"],[79,4,1,"","get_low_density_sequences"],[79,4,1,"","set_testing_data_amount"]],"cipher_modules.statistical_tests.dataset_generator.DatasetGenerator":[[79,2,1,"","generate_avalanche_dataset"],[79,2,1,"","generate_cbc_dataset"],[79,2,1,"","generate_correlation_dataset"],[79,2,1,"","generate_high_density_dataset"],[79,2,1,"","generate_low_density_dataset"],[79,2,1,"","generate_random_dataset"],[79,2,1,"","get_cipher_outputs_for_cbc_dataset"],[79,2,1,"","get_cipher_outputs_for_correlation_dataset"],[79,2,1,"","get_cipher_outputs_for_density_dataset"]],"cipher_modules.statistical_tests.dataset_generator.DatasetType":[[79,5,1,"","avalanche"],[79,5,1,"","cbc"],[79,5,1,"","correlation"],[79,5,1,"","high_density"],[79,5,1,"","low_density"],[79,5,1,"","random"]],"cipher_modules.statistical_tests.dieharder_statistical_tests":[[80,1,1,"","DieharderTests"]],"cipher_modules.statistical_tests.dieharder_statistical_tests.DieharderTests":[[80,2,1,"","generate_chart_all"],[80,2,1,"","generate_chart_round"],[80,2,1,"","parse_report"],[80,2,1,"","run_CBC_dieharder_statistics_test"],[80,2,1,"","run_avalanche_dieharder_statistics_test"],[80,2,1,"","run_correlation_dieharder_statistics_test"],[80,2,1,"","run_dieharder_statistical_tests_tool_interactively"],[80,2,1,"","run_high_density_dieharder_statistics_test"],[80,2,1,"","run_low_density_dieharder_statistics_test"],[80,2,1,"","run_random_dieharder_statistics_test"]],"cipher_modules.statistical_tests.nist_statistical_tests":[[82,1,1,"","StatisticalTests"]],"cipher_modules.statistical_tests.nist_statistical_tests.StatisticalTests":[[82,2,1,"","generate_chart_all"],[82,2,1,"","generate_chart_for_all_rounds"],[82,2,1,"","generate_chart_round"],[82,2,1,"","parse_report"],[82,2,1,"","run_CBC_nist_statistics_test"],[82,2,1,"","run_avalanche_nist_statistics_test"],[82,2,1,"","run_correlation_nist_statistics_test"],[82,2,1,"","run_high_density_nist_statistics_test"],[82,2,1,"","run_low_density_nist_statistics_test"],[82,2,1,"","run_nist_statistical_tests_tool_interactively"],[82,2,1,"","run_random_nist_statistics_test"]],"cipher_modules.tester":[[83,4,1,"","test_against_reference_code"],[83,4,1,"","test_vector_check"]],"ciphers.block_ciphers":[[84,0,0,"-","aes_block_cipher"],[85,0,0,"-","bea1_block_cipher"],[86,0,0,"-","constant_block_cipher"],[87,0,0,"-","des_block_cipher"],[88,0,0,"-","des_exact_key_length_block_cipher"],[89,0,0,"-","fancy_block_cipher"],[90,0,0,"-","hight_block_cipher"],[91,0,0,"-","identity_block_cipher"],[92,0,0,"-","kasumi_block_cipher"],[93,0,0,"-","lblock_block_cipher"],[94,0,0,"-","lea_block_cipher"],[95,0,0,"-","lowmc_block_cipher"],[96,0,0,"-","lowmc_generate_matrices"],[97,0,0,"-","midori_block_cipher"],[98,0,0,"-","present_block_cipher"],[99,0,0,"-","qarmav2_block_cipher"],[100,0,0,"-","raiden_block_cipher"],[101,0,0,"-","rc5_block_cipher"],[102,0,0,"-","simon_block_cipher"],[103,0,0,"-","skinny_block_cipher"],[104,0,0,"-","sparx_block_cipher"],[105,0,0,"-","speck_block_cipher"],[106,0,0,"-","tea_block_cipher"],[107,0,0,"-","threefish_block_cipher"],[108,0,0,"-","twofish_block_cipher"],[109,0,0,"-","xtea_block_cipher"]],"ciphers.block_ciphers.aes_block_cipher":[[84,1,1,"","AESBlockCipher"]],"ciphers.block_ciphers.aes_block_cipher.AESBlockCipher":[[84,2,1,"","add_AND_component"],[84,2,1,"","add_FSR_component"],[84,2,1,"","add_MODADD_component"],[84,2,1,"","add_MODSUB_component"],[84,2,1,"","add_NOT_component"],[84,2,1,"","add_OR_component"],[84,2,1,"","add_SBOX_component"],[84,2,1,"","add_SHIFT_component"],[84,2,1,"","add_XOR_component"],[84,2,1,"","add_cipher_output_component"],[84,2,1,"","add_concatenate_component"],[84,2,1,"","add_constant_component"],[84,2,1,"","add_intermediate_output_component"],[84,2,1,"","add_linear_layer_component"],[84,2,1,"","add_mix_column_component"],[84,2,1,"","add_permutation_component"],[84,2,1,"","add_reverse_component"],[84,2,1,"","add_rotate_component"],[84,2,1,"","add_round"],[84,2,1,"","add_round_key_output_component"],[84,2,1,"","add_round_output_component"],[84,2,1,"","add_shift_rows_component"],[84,2,1,"","add_sigma_component"],[84,2,1,"","add_suffix_to_components"],[84,2,1,"","add_theta_keccak_component"],[84,2,1,"","add_theta_xoodoo_component"],[84,2,1,"","add_variable_rotate_component"],[84,2,1,"","add_variable_shift_component"],[84,2,1,"","add_word_permutation_component"],[84,2,1,"","algebraic_tests"],[84,2,1,"","analyze_cipher"],[84,2,1,"","as_python_dictionary"],[84,2,1,"","avalanche_probability_vectors"],[84,2,1,"","cipher_inverse"],[84,2,1,"","cipher_partial_inverse"],[84,2,1,"","component_analysis_tests"],[84,2,1,"","component_from"],[84,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[84,2,1,"","continuous_avalanche_factor"],[84,2,1,"","continuous_diffusion_factor"],[84,2,1,"","continuous_diffusion_tests"],[84,2,1,"","continuous_neutrality_measure_for_bit_j"],[84,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[84,2,1,"","convert_to_compound_xor_cipher"],[84,2,1,"","create_constant_component"],[84,2,1,"","create_key_sbox_components"],[84,2,1,"","create_mix_column_components"],[84,2,1,"","create_rotate_component"],[84,2,1,"","create_round_key"],[84,2,1,"","create_round_output_component"],[84,2,1,"","create_sbox_components"],[84,2,1,"","create_shift_row_components"],[84,2,1,"","create_xor_components"],[84,3,1,"","current_round"],[84,3,1,"","current_round_number"],[84,3,1,"","current_round_number_of_components"],[84,2,1,"","delete_generated_evaluate_c_shared_library"],[84,2,1,"","diffusion_tests"],[84,2,1,"","evaluate"],[84,2,1,"","evaluate_using_c"],[84,2,1,"","evaluate_vectorized"],[84,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[84,3,1,"","family_name"],[84,3,1,"","file_name"],[84,2,1,"","find_good_input_difference_for_neural_distinguisher"],[84,2,1,"","find_impossible_property"],[84,2,1,"","generate_bit_based_c_code"],[84,2,1,"","generate_csv_report"],[84,2,1,"","generate_evaluate_c_code_shared_library"],[84,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[84,2,1,"","generate_word_based_c_code"],[84,2,1,"","get_all_components"],[84,2,1,"","get_all_components_ids"],[84,2,1,"","get_all_inputs_bit_positions"],[84,2,1,"","get_component_from_id"],[84,2,1,"","get_components_in_round"],[84,2,1,"","get_current_component_id"],[84,2,1,"","get_model"],[84,2,1,"","get_number_of_components_in_round"],[84,2,1,"","get_partial_cipher"],[84,2,1,"","get_round_from_component_id"],[84,2,1,"","get_sizes_of_components_by_type"],[84,3,1,"","id"],[84,2,1,"","impossible_differential_search"],[84,3,1,"","inputs"],[84,3,1,"","inputs_bit_size"],[84,2,1,"","inputs_size_to_dict"],[84,2,1,"","is_algebraically_secure"],[84,2,1,"","is_andrx"],[84,2,1,"","is_arx"],[84,2,1,"","is_power_of_2_word_based"],[84,2,1,"","is_shift_arx"],[84,2,1,"","is_spn"],[84,2,1,"","make_cipher_id"],[84,2,1,"","make_file_name"],[84,2,1,"","neural_network_blackbox_distinguisher_tests"],[84,2,1,"","neural_network_differential_distinguisher_tests"],[84,3,1,"","number_of_rounds"],[84,3,1,"","output_bit_size"],[84,2,1,"","polynomial_system"],[84,2,1,"","polynomial_system_at_round"],[84,2,1,"","print"],[84,2,1,"","print_as_python_dictionary"],[84,2,1,"","print_as_python_dictionary_to_file"],[84,2,1,"","print_component_analysis_as_radar_charts"],[84,2,1,"","print_evaluation_python_code"],[84,2,1,"","print_evaluation_python_code_to_file"],[84,2,1,"","print_input_information"],[84,3,1,"","reference_code"],[84,2,1,"","remove_key_schedule"],[84,2,1,"","remove_round_component"],[84,2,1,"","remove_round_component_from_id"],[84,3,1,"","rounds"],[84,3,1,"","rounds_as_list"],[84,2,1,"","run_autond_pipeline"],[84,2,1,"","set_file_name"],[84,2,1,"","set_id"],[84,2,1,"","set_inputs"],[84,2,1,"","sort_cipher"],[84,2,1,"","test_against_reference_code"],[84,2,1,"","test_vector_check"],[84,2,1,"","train_gohr_neural_distinguisher"],[84,2,1,"","train_neural_distinguisher"],[84,3,1,"","type"],[84,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.bea1_block_cipher":[[85,1,1,"","BEA1BlockCipher"]],"ciphers.block_ciphers.bea1_block_cipher.BEA1BlockCipher":[[85,2,1,"","add_AND_component"],[85,2,1,"","add_FSR_component"],[85,2,1,"","add_MODADD_component"],[85,2,1,"","add_MODSUB_component"],[85,2,1,"","add_NOT_component"],[85,2,1,"","add_OR_component"],[85,2,1,"","add_SBOX_component"],[85,2,1,"","add_SHIFT_component"],[85,2,1,"","add_XOR_component"],[85,2,1,"","add_cipher_output_component"],[85,2,1,"","add_concatenate_component"],[85,2,1,"","add_constant_component"],[85,2,1,"","add_intermediate_output_component"],[85,2,1,"","add_linear_layer_component"],[85,2,1,"","add_mix_column_component"],[85,2,1,"","add_permutation_component"],[85,2,1,"","add_reverse_component"],[85,2,1,"","add_rotate_component"],[85,2,1,"","add_round"],[85,2,1,"","add_round_key_output_component"],[85,2,1,"","add_round_output_component"],[85,2,1,"","add_shift_rows_component"],[85,2,1,"","add_sigma_component"],[85,2,1,"","add_suffix_to_components"],[85,2,1,"","add_theta_keccak_component"],[85,2,1,"","add_theta_xoodoo_component"],[85,2,1,"","add_variable_rotate_component"],[85,2,1,"","add_variable_shift_component"],[85,2,1,"","add_word_permutation_component"],[85,2,1,"","algebraic_tests"],[85,2,1,"","analyze_cipher"],[85,2,1,"","as_python_dictionary"],[85,2,1,"","avalanche_probability_vectors"],[85,2,1,"","cipher_inverse"],[85,2,1,"","cipher_partial_inverse"],[85,2,1,"","component_analysis_tests"],[85,2,1,"","component_from"],[85,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[85,2,1,"","continuous_avalanche_factor"],[85,2,1,"","continuous_diffusion_factor"],[85,2,1,"","continuous_diffusion_tests"],[85,2,1,"","continuous_neutrality_measure_for_bit_j"],[85,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[85,2,1,"","convert_to_compound_xor_cipher"],[85,3,1,"","current_round"],[85,3,1,"","current_round_number"],[85,3,1,"","current_round_number_of_components"],[85,2,1,"","delete_generated_evaluate_c_shared_library"],[85,2,1,"","diffusion_tests"],[85,2,1,"","evaluate"],[85,2,1,"","evaluate_using_c"],[85,2,1,"","evaluate_vectorized"],[85,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[85,3,1,"","family_name"],[85,3,1,"","file_name"],[85,2,1,"","find_good_input_difference_for_neural_distinguisher"],[85,2,1,"","find_impossible_property"],[85,2,1,"","generate_bit_based_c_code"],[85,2,1,"","generate_csv_report"],[85,2,1,"","generate_evaluate_c_code_shared_library"],[85,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[85,2,1,"","generate_word_based_c_code"],[85,2,1,"","get_all_components"],[85,2,1,"","get_all_components_ids"],[85,2,1,"","get_all_inputs_bit_positions"],[85,2,1,"","get_component_from_id"],[85,2,1,"","get_components_in_round"],[85,2,1,"","get_current_component_id"],[85,2,1,"","get_model"],[85,2,1,"","get_number_of_components_in_round"],[85,2,1,"","get_partial_cipher"],[85,2,1,"","get_round_from_component_id"],[85,2,1,"","get_sizes_of_components_by_type"],[85,3,1,"","id"],[85,2,1,"","impossible_differential_search"],[85,3,1,"","inputs"],[85,3,1,"","inputs_bit_size"],[85,2,1,"","inputs_size_to_dict"],[85,2,1,"","is_algebraically_secure"],[85,2,1,"","is_andrx"],[85,2,1,"","is_arx"],[85,2,1,"","is_power_of_2_word_based"],[85,2,1,"","is_shift_arx"],[85,2,1,"","is_spn"],[85,2,1,"","make_cipher_id"],[85,2,1,"","make_file_name"],[85,2,1,"","neural_network_blackbox_distinguisher_tests"],[85,2,1,"","neural_network_differential_distinguisher_tests"],[85,3,1,"","number_of_rounds"],[85,3,1,"","output_bit_size"],[85,2,1,"","polynomial_system"],[85,2,1,"","polynomial_system_at_round"],[85,2,1,"","print"],[85,2,1,"","print_as_python_dictionary"],[85,2,1,"","print_as_python_dictionary_to_file"],[85,2,1,"","print_component_analysis_as_radar_charts"],[85,2,1,"","print_evaluation_python_code"],[85,2,1,"","print_evaluation_python_code_to_file"],[85,2,1,"","print_input_information"],[85,3,1,"","reference_code"],[85,2,1,"","remove_key_schedule"],[85,2,1,"","remove_round_component"],[85,2,1,"","remove_round_component_from_id"],[85,3,1,"","rounds"],[85,3,1,"","rounds_as_list"],[85,2,1,"","run_autond_pipeline"],[85,2,1,"","set_file_name"],[85,2,1,"","set_id"],[85,2,1,"","set_inputs"],[85,2,1,"","sort_cipher"],[85,2,1,"","test_against_reference_code"],[85,2,1,"","test_vector_check"],[85,2,1,"","train_gohr_neural_distinguisher"],[85,2,1,"","train_neural_distinguisher"],[85,3,1,"","type"],[85,2,1,"","xor_round_key"],[85,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.constant_block_cipher":[[86,1,1,"","ConstantBlockCipher"]],"ciphers.block_ciphers.constant_block_cipher.ConstantBlockCipher":[[86,2,1,"","add_AND_component"],[86,2,1,"","add_FSR_component"],[86,2,1,"","add_MODADD_component"],[86,2,1,"","add_MODSUB_component"],[86,2,1,"","add_NOT_component"],[86,2,1,"","add_OR_component"],[86,2,1,"","add_SBOX_component"],[86,2,1,"","add_SHIFT_component"],[86,2,1,"","add_XOR_component"],[86,2,1,"","add_cipher_output_component"],[86,2,1,"","add_concatenate_component"],[86,2,1,"","add_constant_component"],[86,2,1,"","add_intermediate_output_component"],[86,2,1,"","add_linear_layer_component"],[86,2,1,"","add_mix_column_component"],[86,2,1,"","add_permutation_component"],[86,2,1,"","add_reverse_component"],[86,2,1,"","add_rotate_component"],[86,2,1,"","add_round"],[86,2,1,"","add_round_key_output_component"],[86,2,1,"","add_round_output_component"],[86,2,1,"","add_shift_rows_component"],[86,2,1,"","add_sigma_component"],[86,2,1,"","add_suffix_to_components"],[86,2,1,"","add_theta_keccak_component"],[86,2,1,"","add_theta_xoodoo_component"],[86,2,1,"","add_variable_rotate_component"],[86,2,1,"","add_variable_shift_component"],[86,2,1,"","add_word_permutation_component"],[86,2,1,"","algebraic_tests"],[86,2,1,"","analyze_cipher"],[86,2,1,"","as_python_dictionary"],[86,2,1,"","avalanche_probability_vectors"],[86,2,1,"","cipher_inverse"],[86,2,1,"","cipher_partial_inverse"],[86,2,1,"","component_analysis_tests"],[86,2,1,"","component_from"],[86,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[86,2,1,"","continuous_avalanche_factor"],[86,2,1,"","continuous_diffusion_factor"],[86,2,1,"","continuous_diffusion_tests"],[86,2,1,"","continuous_neutrality_measure_for_bit_j"],[86,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[86,2,1,"","convert_to_compound_xor_cipher"],[86,2,1,"","create_rounds"],[86,3,1,"","current_round"],[86,3,1,"","current_round_number"],[86,3,1,"","current_round_number_of_components"],[86,2,1,"","delete_generated_evaluate_c_shared_library"],[86,2,1,"","diffusion_tests"],[86,2,1,"","evaluate"],[86,2,1,"","evaluate_using_c"],[86,2,1,"","evaluate_vectorized"],[86,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[86,3,1,"","family_name"],[86,3,1,"","file_name"],[86,2,1,"","find_good_input_difference_for_neural_distinguisher"],[86,2,1,"","find_impossible_property"],[86,2,1,"","generate_bit_based_c_code"],[86,2,1,"","generate_csv_report"],[86,2,1,"","generate_evaluate_c_code_shared_library"],[86,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[86,2,1,"","generate_word_based_c_code"],[86,2,1,"","get_all_components"],[86,2,1,"","get_all_components_ids"],[86,2,1,"","get_all_inputs_bit_positions"],[86,2,1,"","get_component_from_id"],[86,2,1,"","get_components_in_round"],[86,2,1,"","get_current_component_id"],[86,2,1,"","get_model"],[86,2,1,"","get_number_of_components_in_round"],[86,2,1,"","get_partial_cipher"],[86,2,1,"","get_round_from_component_id"],[86,2,1,"","get_sizes_of_components_by_type"],[86,3,1,"","id"],[86,2,1,"","impossible_differential_search"],[86,3,1,"","inputs"],[86,3,1,"","inputs_bit_size"],[86,2,1,"","inputs_size_to_dict"],[86,2,1,"","is_algebraically_secure"],[86,2,1,"","is_andrx"],[86,2,1,"","is_arx"],[86,2,1,"","is_power_of_2_word_based"],[86,2,1,"","is_shift_arx"],[86,2,1,"","is_spn"],[86,2,1,"","make_cipher_id"],[86,2,1,"","make_file_name"],[86,2,1,"","neural_network_blackbox_distinguisher_tests"],[86,2,1,"","neural_network_differential_distinguisher_tests"],[86,3,1,"","number_of_rounds"],[86,3,1,"","output_bit_size"],[86,2,1,"","polynomial_system"],[86,2,1,"","polynomial_system_at_round"],[86,2,1,"","print"],[86,2,1,"","print_as_python_dictionary"],[86,2,1,"","print_as_python_dictionary_to_file"],[86,2,1,"","print_component_analysis_as_radar_charts"],[86,2,1,"","print_evaluation_python_code"],[86,2,1,"","print_evaluation_python_code_to_file"],[86,2,1,"","print_input_information"],[86,3,1,"","reference_code"],[86,2,1,"","remove_key_schedule"],[86,2,1,"","remove_round_component"],[86,2,1,"","remove_round_component_from_id"],[86,3,1,"","rounds"],[86,3,1,"","rounds_as_list"],[86,2,1,"","run_autond_pipeline"],[86,2,1,"","set_file_name"],[86,2,1,"","set_id"],[86,2,1,"","set_inputs"],[86,2,1,"","sort_cipher"],[86,2,1,"","test_against_reference_code"],[86,2,1,"","test_vector_check"],[86,2,1,"","train_gohr_neural_distinguisher"],[86,2,1,"","train_neural_distinguisher"],[86,3,1,"","type"],[86,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_block_cipher":[[87,1,1,"","DESBlockCipher"]],"ciphers.block_ciphers.des_block_cipher.DESBlockCipher":[[87,2,1,"","add_AND_component"],[87,2,1,"","add_FSR_component"],[87,2,1,"","add_MODADD_component"],[87,2,1,"","add_MODSUB_component"],[87,2,1,"","add_NOT_component"],[87,2,1,"","add_OR_component"],[87,2,1,"","add_SBOX_component"],[87,2,1,"","add_SHIFT_component"],[87,2,1,"","add_XOR_component"],[87,2,1,"","add_cipher_output_component"],[87,2,1,"","add_concatenate_component"],[87,2,1,"","add_constant_component"],[87,2,1,"","add_intermediate_output_component"],[87,2,1,"","add_linear_layer_component"],[87,2,1,"","add_mix_column_component"],[87,2,1,"","add_permutation_component"],[87,2,1,"","add_reverse_component"],[87,2,1,"","add_rotate_component"],[87,2,1,"","add_round"],[87,2,1,"","add_round_key_output_component"],[87,2,1,"","add_round_output_component"],[87,2,1,"","add_shift_rows_component"],[87,2,1,"","add_sigma_component"],[87,2,1,"","add_suffix_to_components"],[87,2,1,"","add_theta_keccak_component"],[87,2,1,"","add_theta_xoodoo_component"],[87,2,1,"","add_variable_rotate_component"],[87,2,1,"","add_variable_shift_component"],[87,2,1,"","add_word_permutation_component"],[87,2,1,"","algebraic_tests"],[87,2,1,"","analyze_cipher"],[87,2,1,"","as_python_dictionary"],[87,2,1,"","avalanche_probability_vectors"],[87,2,1,"","cipher_inverse"],[87,2,1,"","cipher_partial_inverse"],[87,2,1,"","component_analysis_tests"],[87,2,1,"","component_from"],[87,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[87,2,1,"","continuous_avalanche_factor"],[87,2,1,"","continuous_diffusion_factor"],[87,2,1,"","continuous_diffusion_tests"],[87,2,1,"","continuous_neutrality_measure_for_bit_j"],[87,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[87,2,1,"","convert_to_compound_xor_cipher"],[87,3,1,"","current_round"],[87,3,1,"","current_round_number"],[87,3,1,"","current_round_number_of_components"],[87,2,1,"","delete_generated_evaluate_c_shared_library"],[87,2,1,"","diffusion_tests"],[87,2,1,"","evaluate"],[87,2,1,"","evaluate_using_c"],[87,2,1,"","evaluate_vectorized"],[87,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[87,3,1,"","family_name"],[87,3,1,"","file_name"],[87,2,1,"","find_good_input_difference_for_neural_distinguisher"],[87,2,1,"","find_impossible_property"],[87,2,1,"","generate_bit_based_c_code"],[87,2,1,"","generate_csv_report"],[87,2,1,"","generate_evaluate_c_code_shared_library"],[87,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[87,2,1,"","generate_word_based_c_code"],[87,2,1,"","get_all_components"],[87,2,1,"","get_all_components_ids"],[87,2,1,"","get_all_inputs_bit_positions"],[87,2,1,"","get_component_from_id"],[87,2,1,"","get_components_in_round"],[87,2,1,"","get_current_component_id"],[87,2,1,"","get_model"],[87,2,1,"","get_number_of_components_in_round"],[87,2,1,"","get_partial_cipher"],[87,2,1,"","get_round_from_component_id"],[87,2,1,"","get_sizes_of_components_by_type"],[87,3,1,"","id"],[87,2,1,"","impossible_differential_search"],[87,3,1,"","inputs"],[87,3,1,"","inputs_bit_size"],[87,2,1,"","inputs_size_to_dict"],[87,2,1,"","is_algebraically_secure"],[87,2,1,"","is_andrx"],[87,2,1,"","is_arx"],[87,2,1,"","is_power_of_2_word_based"],[87,2,1,"","is_shift_arx"],[87,2,1,"","is_spn"],[87,2,1,"","make_cipher_id"],[87,2,1,"","make_file_name"],[87,2,1,"","neural_network_blackbox_distinguisher_tests"],[87,2,1,"","neural_network_differential_distinguisher_tests"],[87,3,1,"","number_of_rounds"],[87,3,1,"","output_bit_size"],[87,2,1,"","polynomial_system"],[87,2,1,"","polynomial_system_at_round"],[87,2,1,"","print"],[87,2,1,"","print_as_python_dictionary"],[87,2,1,"","print_as_python_dictionary_to_file"],[87,2,1,"","print_component_analysis_as_radar_charts"],[87,2,1,"","print_evaluation_python_code"],[87,2,1,"","print_evaluation_python_code_to_file"],[87,2,1,"","print_input_information"],[87,3,1,"","reference_code"],[87,2,1,"","remove_key_schedule"],[87,2,1,"","remove_round_component"],[87,2,1,"","remove_round_component_from_id"],[87,3,1,"","rounds"],[87,3,1,"","rounds_as_list"],[87,2,1,"","run_autond_pipeline"],[87,2,1,"","set_file_name"],[87,2,1,"","set_id"],[87,2,1,"","set_inputs"],[87,2,1,"","sort_cipher"],[87,2,1,"","test_against_reference_code"],[87,2,1,"","test_vector_check"],[87,2,1,"","train_gohr_neural_distinguisher"],[87,2,1,"","train_neural_distinguisher"],[87,3,1,"","type"],[87,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher":[[88,1,1,"","DESExactKeyLengthBlockCipher"]],"ciphers.block_ciphers.des_exact_key_length_block_cipher.DESExactKeyLengthBlockCipher":[[88,2,1,"","add_AND_component"],[88,2,1,"","add_FSR_component"],[88,2,1,"","add_MODADD_component"],[88,2,1,"","add_MODSUB_component"],[88,2,1,"","add_NOT_component"],[88,2,1,"","add_OR_component"],[88,2,1,"","add_SBOX_component"],[88,2,1,"","add_SHIFT_component"],[88,2,1,"","add_XOR_component"],[88,2,1,"","add_cipher_output_component"],[88,2,1,"","add_concatenate_component"],[88,2,1,"","add_constant_component"],[88,2,1,"","add_intermediate_output_component"],[88,2,1,"","add_linear_layer_component"],[88,2,1,"","add_mix_column_component"],[88,2,1,"","add_permutation_component"],[88,2,1,"","add_reverse_component"],[88,2,1,"","add_rotate_component"],[88,2,1,"","add_round"],[88,2,1,"","add_round_key_output_component"],[88,2,1,"","add_round_output_component"],[88,2,1,"","add_shift_rows_component"],[88,2,1,"","add_sigma_component"],[88,2,1,"","add_suffix_to_components"],[88,2,1,"","add_theta_keccak_component"],[88,2,1,"","add_theta_xoodoo_component"],[88,2,1,"","add_variable_rotate_component"],[88,2,1,"","add_variable_shift_component"],[88,2,1,"","add_word_permutation_component"],[88,2,1,"","algebraic_tests"],[88,2,1,"","analyze_cipher"],[88,2,1,"","as_python_dictionary"],[88,2,1,"","avalanche_probability_vectors"],[88,2,1,"","cipher_inverse"],[88,2,1,"","cipher_partial_inverse"],[88,2,1,"","component_analysis_tests"],[88,2,1,"","component_from"],[88,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[88,2,1,"","continuous_avalanche_factor"],[88,2,1,"","continuous_diffusion_factor"],[88,2,1,"","continuous_diffusion_tests"],[88,2,1,"","continuous_neutrality_measure_for_bit_j"],[88,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[88,2,1,"","convert_to_compound_xor_cipher"],[88,3,1,"","current_round"],[88,3,1,"","current_round_number"],[88,3,1,"","current_round_number_of_components"],[88,2,1,"","delete_generated_evaluate_c_shared_library"],[88,2,1,"","diffusion_tests"],[88,2,1,"","evaluate"],[88,2,1,"","evaluate_using_c"],[88,2,1,"","evaluate_vectorized"],[88,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[88,3,1,"","family_name"],[88,3,1,"","file_name"],[88,2,1,"","find_good_input_difference_for_neural_distinguisher"],[88,2,1,"","find_impossible_property"],[88,2,1,"","generate_bit_based_c_code"],[88,2,1,"","generate_csv_report"],[88,2,1,"","generate_evaluate_c_code_shared_library"],[88,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[88,2,1,"","generate_word_based_c_code"],[88,2,1,"","get_all_components"],[88,2,1,"","get_all_components_ids"],[88,2,1,"","get_all_inputs_bit_positions"],[88,2,1,"","get_component_from_id"],[88,2,1,"","get_components_in_round"],[88,2,1,"","get_current_component_id"],[88,2,1,"","get_model"],[88,2,1,"","get_number_of_components_in_round"],[88,2,1,"","get_partial_cipher"],[88,2,1,"","get_round_from_component_id"],[88,2,1,"","get_sizes_of_components_by_type"],[88,3,1,"","id"],[88,2,1,"","impossible_differential_search"],[88,3,1,"","inputs"],[88,3,1,"","inputs_bit_size"],[88,2,1,"","inputs_size_to_dict"],[88,2,1,"","is_algebraically_secure"],[88,2,1,"","is_andrx"],[88,2,1,"","is_arx"],[88,2,1,"","is_power_of_2_word_based"],[88,2,1,"","is_shift_arx"],[88,2,1,"","is_spn"],[88,2,1,"","make_cipher_id"],[88,2,1,"","make_file_name"],[88,2,1,"","neural_network_blackbox_distinguisher_tests"],[88,2,1,"","neural_network_differential_distinguisher_tests"],[88,3,1,"","number_of_rounds"],[88,3,1,"","output_bit_size"],[88,2,1,"","polynomial_system"],[88,2,1,"","polynomial_system_at_round"],[88,2,1,"","print"],[88,2,1,"","print_as_python_dictionary"],[88,2,1,"","print_as_python_dictionary_to_file"],[88,2,1,"","print_component_analysis_as_radar_charts"],[88,2,1,"","print_evaluation_python_code"],[88,2,1,"","print_evaluation_python_code_to_file"],[88,2,1,"","print_input_information"],[88,3,1,"","reference_code"],[88,2,1,"","remove_key_schedule"],[88,2,1,"","remove_round_component"],[88,2,1,"","remove_round_component_from_id"],[88,3,1,"","rounds"],[88,3,1,"","rounds_as_list"],[88,2,1,"","run_autond_pipeline"],[88,2,1,"","set_file_name"],[88,2,1,"","set_id"],[88,2,1,"","set_inputs"],[88,2,1,"","sort_cipher"],[88,2,1,"","test_against_reference_code"],[88,2,1,"","test_vector_check"],[88,2,1,"","train_gohr_neural_distinguisher"],[88,2,1,"","train_neural_distinguisher"],[88,3,1,"","type"],[88,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.fancy_block_cipher":[[89,1,1,"","FancyBlockCipher"]],"ciphers.block_ciphers.fancy_block_cipher.FancyBlockCipher":[[89,2,1,"","add_AND_component"],[89,2,1,"","add_FSR_component"],[89,2,1,"","add_MODADD_component"],[89,2,1,"","add_MODSUB_component"],[89,2,1,"","add_NOT_component"],[89,2,1,"","add_OR_component"],[89,2,1,"","add_SBOX_component"],[89,2,1,"","add_SHIFT_component"],[89,2,1,"","add_XOR_component"],[89,2,1,"","add_and_component_to_even_round"],[89,2,1,"","add_cipher_output_component"],[89,2,1,"","add_concatenate_component"],[89,2,1,"","add_constant_component"],[89,2,1,"","add_intermediate_output_component"],[89,2,1,"","add_linear_layer_component"],[89,2,1,"","add_mix_column_component"],[89,2,1,"","add_permutation_component"],[89,2,1,"","add_reverse_component"],[89,2,1,"","add_rotate_component"],[89,2,1,"","add_round"],[89,2,1,"","add_round_key_output_component"],[89,2,1,"","add_round_output_component"],[89,2,1,"","add_sbox_components_layer_in_even_rounds"],[89,2,1,"","add_shift_rows_component"],[89,2,1,"","add_sigma_component"],[89,2,1,"","add_suffix_to_components"],[89,2,1,"","add_theta_keccak_component"],[89,2,1,"","add_theta_xoodoo_component"],[89,2,1,"","add_variable_rotate_component"],[89,2,1,"","add_variable_shift_component"],[89,2,1,"","add_word_permutation_component"],[89,2,1,"","add_xor_component_to_even_round"],[89,2,1,"","algebraic_tests"],[89,2,1,"","analyze_cipher"],[89,2,1,"","as_python_dictionary"],[89,2,1,"","avalanche_probability_vectors"],[89,2,1,"","cipher_inverse"],[89,2,1,"","cipher_partial_inverse"],[89,2,1,"","collect_input_id_links"],[89,2,1,"","component_analysis_tests"],[89,2,1,"","component_from"],[89,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[89,2,1,"","continuous_avalanche_factor"],[89,2,1,"","continuous_diffusion_factor"],[89,2,1,"","continuous_diffusion_tests"],[89,2,1,"","continuous_neutrality_measure_for_bit_j"],[89,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[89,2,1,"","convert_to_compound_xor_cipher"],[89,3,1,"","current_round"],[89,3,1,"","current_round_number"],[89,3,1,"","current_round_number_of_components"],[89,2,1,"","delete_generated_evaluate_c_shared_library"],[89,2,1,"","diffusion_tests"],[89,2,1,"","evaluate"],[89,2,1,"","evaluate_using_c"],[89,2,1,"","evaluate_vectorized"],[89,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[89,3,1,"","family_name"],[89,3,1,"","file_name"],[89,2,1,"","find_good_input_difference_for_neural_distinguisher"],[89,2,1,"","find_impossible_property"],[89,2,1,"","generate_bit_based_c_code"],[89,2,1,"","generate_csv_report"],[89,2,1,"","generate_evaluate_c_code_shared_library"],[89,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[89,2,1,"","generate_word_based_c_code"],[89,2,1,"","get_all_components"],[89,2,1,"","get_all_components_ids"],[89,2,1,"","get_all_inputs_bit_positions"],[89,2,1,"","get_component_from_id"],[89,2,1,"","get_components_in_round"],[89,2,1,"","get_current_component_id"],[89,2,1,"","get_model"],[89,2,1,"","get_number_of_components_in_round"],[89,2,1,"","get_partial_cipher"],[89,2,1,"","get_round_from_component_id"],[89,2,1,"","get_sizes_of_components_by_type"],[89,3,1,"","id"],[89,2,1,"","impossible_differential_search"],[89,3,1,"","inputs"],[89,3,1,"","inputs_bit_size"],[89,2,1,"","inputs_size_to_dict"],[89,2,1,"","is_algebraically_secure"],[89,2,1,"","is_andrx"],[89,2,1,"","is_arx"],[89,2,1,"","is_power_of_2_word_based"],[89,2,1,"","is_shift_arx"],[89,2,1,"","is_spn"],[89,2,1,"","make_cipher_id"],[89,2,1,"","make_file_name"],[89,2,1,"","neural_network_blackbox_distinguisher_tests"],[89,2,1,"","neural_network_differential_distinguisher_tests"],[89,3,1,"","number_of_rounds"],[89,3,1,"","output_bit_size"],[89,2,1,"","polynomial_system"],[89,2,1,"","polynomial_system_at_round"],[89,2,1,"","print"],[89,2,1,"","print_as_python_dictionary"],[89,2,1,"","print_as_python_dictionary_to_file"],[89,2,1,"","print_component_analysis_as_radar_charts"],[89,2,1,"","print_evaluation_python_code"],[89,2,1,"","print_evaluation_python_code_to_file"],[89,2,1,"","print_input_information"],[89,3,1,"","reference_code"],[89,2,1,"","remove_key_schedule"],[89,2,1,"","remove_round_component"],[89,2,1,"","remove_round_component_from_id"],[89,3,1,"","rounds"],[89,3,1,"","rounds_as_list"],[89,2,1,"","run_autond_pipeline"],[89,2,1,"","set_file_name"],[89,2,1,"","set_id"],[89,2,1,"","set_inputs"],[89,2,1,"","sort_cipher"],[89,2,1,"","test_against_reference_code"],[89,2,1,"","test_vector_check"],[89,2,1,"","train_gohr_neural_distinguisher"],[89,2,1,"","train_neural_distinguisher"],[89,3,1,"","type"],[89,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.hight_block_cipher":[[90,1,1,"","HightBlockCipher"],[90,4,1,"","init_input"],[90,4,1,"","temp_subkey_generation"],[90,4,1,"","whitening_key_generation"]],"ciphers.block_ciphers.hight_block_cipher.HightBlockCipher":[[90,2,1,"","add_AND_component"],[90,2,1,"","add_FSR_component"],[90,2,1,"","add_MODADD_component"],[90,2,1,"","add_MODSUB_component"],[90,2,1,"","add_NOT_component"],[90,2,1,"","add_OR_component"],[90,2,1,"","add_SBOX_component"],[90,2,1,"","add_SHIFT_component"],[90,2,1,"","add_XOR_component"],[90,2,1,"","add_cipher_output_component"],[90,2,1,"","add_concatenate_component"],[90,2,1,"","add_constant_component"],[90,2,1,"","add_intermediate_output_component"],[90,2,1,"","add_intermediate_output_components"],[90,2,1,"","add_linear_layer_component"],[90,2,1,"","add_mix_column_component"],[90,2,1,"","add_permutation_component"],[90,2,1,"","add_reverse_component"],[90,2,1,"","add_rotate_component"],[90,2,1,"","add_round"],[90,2,1,"","add_round_key_output_component"],[90,2,1,"","add_round_output_component"],[90,2,1,"","add_shift_rows_component"],[90,2,1,"","add_sigma_component"],[90,2,1,"","add_suffix_to_components"],[90,2,1,"","add_theta_keccak_component"],[90,2,1,"","add_theta_xoodoo_component"],[90,2,1,"","add_variable_rotate_component"],[90,2,1,"","add_variable_shift_component"],[90,2,1,"","add_word_permutation_component"],[90,2,1,"","algebraic_tests"],[90,2,1,"","analyze_cipher"],[90,2,1,"","as_python_dictionary"],[90,2,1,"","avalanche_probability_vectors"],[90,2,1,"","cipher_inverse"],[90,2,1,"","cipher_partial_inverse"],[90,2,1,"","component_analysis_tests"],[90,2,1,"","component_from"],[90,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[90,2,1,"","continuous_avalanche_factor"],[90,2,1,"","continuous_diffusion_factor"],[90,2,1,"","continuous_diffusion_tests"],[90,2,1,"","continuous_neutrality_measure_for_bit_j"],[90,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[90,2,1,"","convert_to_compound_xor_cipher"],[90,2,1,"","create_sub_key"],[90,3,1,"","current_round"],[90,3,1,"","current_round_number"],[90,3,1,"","current_round_number_of_components"],[90,2,1,"","delete_generated_evaluate_c_shared_library"],[90,2,1,"","diffusion_tests"],[90,2,1,"","evaluate"],[90,2,1,"","evaluate_using_c"],[90,2,1,"","evaluate_vectorized"],[90,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[90,3,1,"","family_name"],[90,3,1,"","file_name"],[90,2,1,"","final_transformation"],[90,2,1,"","find_good_input_difference_for_neural_distinguisher"],[90,2,1,"","find_impossible_property"],[90,2,1,"","generate_bit_based_c_code"],[90,2,1,"","generate_csv_report"],[90,2,1,"","generate_evaluate_c_code_shared_library"],[90,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[90,2,1,"","generate_word_based_c_code"],[90,2,1,"","get_all_components"],[90,2,1,"","get_all_components_ids"],[90,2,1,"","get_all_inputs_bit_positions"],[90,2,1,"","get_component_from_id"],[90,2,1,"","get_components_in_round"],[90,2,1,"","get_current_component_id"],[90,2,1,"","get_model"],[90,2,1,"","get_number_of_components_in_round"],[90,2,1,"","get_numbers_of_rounds"],[90,2,1,"","get_partial_cipher"],[90,2,1,"","get_round_from_component_id"],[90,2,1,"","get_sizes_of_components_by_type"],[90,3,1,"","id"],[90,2,1,"","impossible_differential_search"],[90,2,1,"","initial_transformation"],[90,3,1,"","inputs"],[90,3,1,"","inputs_bit_size"],[90,2,1,"","inputs_size_to_dict"],[90,2,1,"","is_algebraically_secure"],[90,2,1,"","is_andrx"],[90,2,1,"","is_arx"],[90,2,1,"","is_power_of_2_word_based"],[90,2,1,"","is_shift_arx"],[90,2,1,"","is_spn"],[90,2,1,"","make_cipher_id"],[90,2,1,"","make_file_name"],[90,2,1,"","neural_network_blackbox_distinguisher_tests"],[90,2,1,"","neural_network_differential_distinguisher_tests"],[90,3,1,"","number_of_rounds"],[90,3,1,"","output_bit_size"],[90,2,1,"","polynomial_system"],[90,2,1,"","polynomial_system_at_round"],[90,2,1,"","print"],[90,2,1,"","print_as_python_dictionary"],[90,2,1,"","print_as_python_dictionary_to_file"],[90,2,1,"","print_component_analysis_as_radar_charts"],[90,2,1,"","print_evaluation_python_code"],[90,2,1,"","print_evaluation_python_code_to_file"],[90,2,1,"","print_input_information"],[90,3,1,"","reference_code"],[90,2,1,"","remove_key_schedule"],[90,2,1,"","remove_round_component"],[90,2,1,"","remove_round_component_from_id"],[90,2,1,"","round_function"],[90,3,1,"","rounds"],[90,3,1,"","rounds_as_list"],[90,2,1,"","run_autond_pipeline"],[90,2,1,"","set_file_name"],[90,2,1,"","set_id"],[90,2,1,"","set_inputs"],[90,2,1,"","sort_cipher"],[90,2,1,"","test_against_reference_code"],[90,2,1,"","test_vector_check"],[90,2,1,"","train_gohr_neural_distinguisher"],[90,2,1,"","train_neural_distinguisher"],[90,3,1,"","type"],[90,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.identity_block_cipher":[[91,1,1,"","IdentityBlockCipher"]],"ciphers.block_ciphers.identity_block_cipher.IdentityBlockCipher":[[91,2,1,"","add_AND_component"],[91,2,1,"","add_FSR_component"],[91,2,1,"","add_MODADD_component"],[91,2,1,"","add_MODSUB_component"],[91,2,1,"","add_NOT_component"],[91,2,1,"","add_OR_component"],[91,2,1,"","add_SBOX_component"],[91,2,1,"","add_SHIFT_component"],[91,2,1,"","add_XOR_component"],[91,2,1,"","add_cipher_output_component"],[91,2,1,"","add_concatenate_component"],[91,2,1,"","add_constant_component"],[91,2,1,"","add_intermediate_output_component"],[91,2,1,"","add_linear_layer_component"],[91,2,1,"","add_mix_column_component"],[91,2,1,"","add_permutation_component"],[91,2,1,"","add_reverse_component"],[91,2,1,"","add_rotate_component"],[91,2,1,"","add_round"],[91,2,1,"","add_round_key_output_component"],[91,2,1,"","add_round_output_component"],[91,2,1,"","add_shift_rows_component"],[91,2,1,"","add_sigma_component"],[91,2,1,"","add_suffix_to_components"],[91,2,1,"","add_theta_keccak_component"],[91,2,1,"","add_theta_xoodoo_component"],[91,2,1,"","add_variable_rotate_component"],[91,2,1,"","add_variable_shift_component"],[91,2,1,"","add_word_permutation_component"],[91,2,1,"","algebraic_tests"],[91,2,1,"","analyze_cipher"],[91,2,1,"","as_python_dictionary"],[91,2,1,"","avalanche_probability_vectors"],[91,2,1,"","cipher_inverse"],[91,2,1,"","cipher_partial_inverse"],[91,2,1,"","component_analysis_tests"],[91,2,1,"","component_from"],[91,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[91,2,1,"","continuous_avalanche_factor"],[91,2,1,"","continuous_diffusion_factor"],[91,2,1,"","continuous_diffusion_tests"],[91,2,1,"","continuous_neutrality_measure_for_bit_j"],[91,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[91,2,1,"","convert_to_compound_xor_cipher"],[91,3,1,"","current_round"],[91,3,1,"","current_round_number"],[91,3,1,"","current_round_number_of_components"],[91,2,1,"","delete_generated_evaluate_c_shared_library"],[91,2,1,"","diffusion_tests"],[91,2,1,"","evaluate"],[91,2,1,"","evaluate_using_c"],[91,2,1,"","evaluate_vectorized"],[91,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[91,3,1,"","family_name"],[91,3,1,"","file_name"],[91,2,1,"","find_good_input_difference_for_neural_distinguisher"],[91,2,1,"","find_impossible_property"],[91,2,1,"","generate_bit_based_c_code"],[91,2,1,"","generate_csv_report"],[91,2,1,"","generate_evaluate_c_code_shared_library"],[91,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[91,2,1,"","generate_word_based_c_code"],[91,2,1,"","get_all_components"],[91,2,1,"","get_all_components_ids"],[91,2,1,"","get_all_inputs_bit_positions"],[91,2,1,"","get_component_from_id"],[91,2,1,"","get_components_in_round"],[91,2,1,"","get_current_component_id"],[91,2,1,"","get_model"],[91,2,1,"","get_number_of_components_in_round"],[91,2,1,"","get_partial_cipher"],[91,2,1,"","get_round_from_component_id"],[91,2,1,"","get_sizes_of_components_by_type"],[91,3,1,"","id"],[91,2,1,"","impossible_differential_search"],[91,3,1,"","inputs"],[91,3,1,"","inputs_bit_size"],[91,2,1,"","inputs_size_to_dict"],[91,2,1,"","is_algebraically_secure"],[91,2,1,"","is_andrx"],[91,2,1,"","is_arx"],[91,2,1,"","is_power_of_2_word_based"],[91,2,1,"","is_shift_arx"],[91,2,1,"","is_spn"],[91,2,1,"","make_cipher_id"],[91,2,1,"","make_file_name"],[91,2,1,"","neural_network_blackbox_distinguisher_tests"],[91,2,1,"","neural_network_differential_distinguisher_tests"],[91,3,1,"","number_of_rounds"],[91,3,1,"","output_bit_size"],[91,2,1,"","polynomial_system"],[91,2,1,"","polynomial_system_at_round"],[91,2,1,"","print"],[91,2,1,"","print_as_python_dictionary"],[91,2,1,"","print_as_python_dictionary_to_file"],[91,2,1,"","print_component_analysis_as_radar_charts"],[91,2,1,"","print_evaluation_python_code"],[91,2,1,"","print_evaluation_python_code_to_file"],[91,2,1,"","print_input_information"],[91,3,1,"","reference_code"],[91,2,1,"","remove_key_schedule"],[91,2,1,"","remove_round_component"],[91,2,1,"","remove_round_component_from_id"],[91,3,1,"","rounds"],[91,3,1,"","rounds_as_list"],[91,2,1,"","run_autond_pipeline"],[91,2,1,"","set_file_name"],[91,2,1,"","set_id"],[91,2,1,"","set_inputs"],[91,2,1,"","sort_cipher"],[91,2,1,"","test_against_reference_code"],[91,2,1,"","test_vector_check"],[91,2,1,"","train_gohr_neural_distinguisher"],[91,2,1,"","train_neural_distinguisher"],[91,3,1,"","type"],[91,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.kasumi_block_cipher":[[92,1,1,"","KasumiBlockCipher"]],"ciphers.block_ciphers.kasumi_block_cipher.KasumiBlockCipher":[[92,2,1,"","add_AND_component"],[92,2,1,"","add_FSR_component"],[92,2,1,"","add_MODADD_component"],[92,2,1,"","add_MODSUB_component"],[92,2,1,"","add_NOT_component"],[92,2,1,"","add_OR_component"],[92,2,1,"","add_SBOX_component"],[92,2,1,"","add_SHIFT_component"],[92,2,1,"","add_XOR_component"],[92,2,1,"","add_cipher_output_component"],[92,2,1,"","add_concatenate_component"],[92,2,1,"","add_constant_component"],[92,2,1,"","add_intermediate_output_component"],[92,2,1,"","add_linear_layer_component"],[92,2,1,"","add_mix_column_component"],[92,2,1,"","add_permutation_component"],[92,2,1,"","add_reverse_component"],[92,2,1,"","add_rotate_component"],[92,2,1,"","add_round"],[92,2,1,"","add_round_key_output_component"],[92,2,1,"","add_round_output_component"],[92,2,1,"","add_shift_rows_component"],[92,2,1,"","add_sigma_component"],[92,2,1,"","add_suffix_to_components"],[92,2,1,"","add_theta_keccak_component"],[92,2,1,"","add_theta_xoodoo_component"],[92,2,1,"","add_variable_rotate_component"],[92,2,1,"","add_variable_shift_component"],[92,2,1,"","add_word_permutation_component"],[92,2,1,"","algebraic_tests"],[92,2,1,"","analyze_cipher"],[92,2,1,"","as_python_dictionary"],[92,2,1,"","avalanche_probability_vectors"],[92,2,1,"","cipher_inverse"],[92,2,1,"","cipher_partial_inverse"],[92,2,1,"","component_analysis_tests"],[92,2,1,"","component_from"],[92,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[92,2,1,"","continuous_avalanche_factor"],[92,2,1,"","continuous_diffusion_factor"],[92,2,1,"","continuous_diffusion_tests"],[92,2,1,"","continuous_neutrality_measure_for_bit_j"],[92,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[92,2,1,"","convert_to_compound_xor_cipher"],[92,3,1,"","current_round"],[92,3,1,"","current_round_number"],[92,3,1,"","current_round_number_of_components"],[92,2,1,"","delete_generated_evaluate_c_shared_library"],[92,2,1,"","derived_key"],[92,2,1,"","diffusion_tests"],[92,2,1,"","evaluate"],[92,2,1,"","evaluate_using_c"],[92,2,1,"","evaluate_vectorized"],[92,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[92,3,1,"","family_name"],[92,2,1,"","fi_function"],[92,3,1,"","file_name"],[92,2,1,"","find_good_input_difference_for_neural_distinguisher"],[92,2,1,"","find_impossible_property"],[92,2,1,"","fl_function"],[92,2,1,"","fo_function"],[92,2,1,"","generate_bit_based_c_code"],[92,2,1,"","generate_csv_report"],[92,2,1,"","generate_evaluate_c_code_shared_library"],[92,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[92,2,1,"","generate_word_based_c_code"],[92,2,1,"","get_all_components"],[92,2,1,"","get_all_components_ids"],[92,2,1,"","get_all_inputs_bit_positions"],[92,2,1,"","get_component_from_id"],[92,2,1,"","get_components_in_round"],[92,2,1,"","get_current_component_id"],[92,2,1,"","get_model"],[92,2,1,"","get_number_of_components_in_round"],[92,2,1,"","get_partial_cipher"],[92,2,1,"","get_round_from_component_id"],[92,2,1,"","get_sizes_of_components_by_type"],[92,3,1,"","id"],[92,2,1,"","impossible_differential_search"],[92,3,1,"","inputs"],[92,3,1,"","inputs_bit_size"],[92,2,1,"","inputs_size_to_dict"],[92,2,1,"","is_algebraically_secure"],[92,2,1,"","is_andrx"],[92,2,1,"","is_arx"],[92,2,1,"","is_power_of_2_word_based"],[92,2,1,"","is_shift_arx"],[92,2,1,"","is_spn"],[92,2,1,"","make_cipher_id"],[92,2,1,"","make_file_name"],[92,2,1,"","neural_network_blackbox_distinguisher_tests"],[92,2,1,"","neural_network_differential_distinguisher_tests"],[92,3,1,"","number_of_rounds"],[92,3,1,"","output_bit_size"],[92,2,1,"","polynomial_system"],[92,2,1,"","polynomial_system_at_round"],[92,2,1,"","print"],[92,2,1,"","print_as_python_dictionary"],[92,2,1,"","print_as_python_dictionary_to_file"],[92,2,1,"","print_component_analysis_as_radar_charts"],[92,2,1,"","print_evaluation_python_code"],[92,2,1,"","print_evaluation_python_code_to_file"],[92,2,1,"","print_input_information"],[92,3,1,"","reference_code"],[92,2,1,"","remove_key_schedule"],[92,2,1,"","remove_round_component"],[92,2,1,"","remove_round_component_from_id"],[92,2,1,"","round_initialization"],[92,2,1,"","round_key"],[92,3,1,"","rounds"],[92,3,1,"","rounds_as_list"],[92,2,1,"","run_autond_pipeline"],[92,2,1,"","set_file_name"],[92,2,1,"","set_id"],[92,2,1,"","set_inputs"],[92,2,1,"","sort_cipher"],[92,2,1,"","test_against_reference_code"],[92,2,1,"","test_vector_check"],[92,2,1,"","train_gohr_neural_distinguisher"],[92,2,1,"","train_neural_distinguisher"],[92,3,1,"","type"],[92,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lblock_block_cipher":[[93,1,1,"","LBlockBlockCipher"]],"ciphers.block_ciphers.lblock_block_cipher.LBlockBlockCipher":[[93,2,1,"","add_AND_component"],[93,2,1,"","add_FSR_component"],[93,2,1,"","add_MODADD_component"],[93,2,1,"","add_MODSUB_component"],[93,2,1,"","add_NOT_component"],[93,2,1,"","add_OR_component"],[93,2,1,"","add_SBOX_component"],[93,2,1,"","add_SHIFT_component"],[93,2,1,"","add_XOR_component"],[93,2,1,"","add_cipher_output_component"],[93,2,1,"","add_concatenate_component"],[93,2,1,"","add_constant_component"],[93,2,1,"","add_intermediate_output_component"],[93,2,1,"","add_linear_layer_component"],[93,2,1,"","add_mix_column_component"],[93,2,1,"","add_permutation_component"],[93,2,1,"","add_reverse_component"],[93,2,1,"","add_rotate_component"],[93,2,1,"","add_round"],[93,2,1,"","add_round_key_output_component"],[93,2,1,"","add_round_output_component"],[93,2,1,"","add_shift_rows_component"],[93,2,1,"","add_sigma_component"],[93,2,1,"","add_suffix_to_components"],[93,2,1,"","add_theta_keccak_component"],[93,2,1,"","add_theta_xoodoo_component"],[93,2,1,"","add_variable_rotate_component"],[93,2,1,"","add_variable_shift_component"],[93,2,1,"","add_word_permutation_component"],[93,2,1,"","algebraic_tests"],[93,2,1,"","analyze_cipher"],[93,2,1,"","as_python_dictionary"],[93,2,1,"","avalanche_probability_vectors"],[93,2,1,"","cipher_inverse"],[93,2,1,"","cipher_partial_inverse"],[93,2,1,"","component_analysis_tests"],[93,2,1,"","component_from"],[93,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[93,2,1,"","continuous_avalanche_factor"],[93,2,1,"","continuous_diffusion_factor"],[93,2,1,"","continuous_diffusion_tests"],[93,2,1,"","continuous_neutrality_measure_for_bit_j"],[93,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[93,2,1,"","convert_to_compound_xor_cipher"],[93,3,1,"","current_round"],[93,3,1,"","current_round_number"],[93,3,1,"","current_round_number_of_components"],[93,2,1,"","delete_generated_evaluate_c_shared_library"],[93,2,1,"","diffusion_tests"],[93,2,1,"","evaluate"],[93,2,1,"","evaluate_using_c"],[93,2,1,"","evaluate_vectorized"],[93,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[93,3,1,"","family_name"],[93,3,1,"","file_name"],[93,2,1,"","find_good_input_difference_for_neural_distinguisher"],[93,2,1,"","find_impossible_property"],[93,2,1,"","generate_bit_based_c_code"],[93,2,1,"","generate_csv_report"],[93,2,1,"","generate_evaluate_c_code_shared_library"],[93,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[93,2,1,"","generate_word_based_c_code"],[93,2,1,"","get_all_components"],[93,2,1,"","get_all_components_ids"],[93,2,1,"","get_all_inputs_bit_positions"],[93,2,1,"","get_component_from_id"],[93,2,1,"","get_components_in_round"],[93,2,1,"","get_current_component_id"],[93,2,1,"","get_model"],[93,2,1,"","get_number_of_components_in_round"],[93,2,1,"","get_partial_cipher"],[93,2,1,"","get_round_from_component_id"],[93,2,1,"","get_sizes_of_components_by_type"],[93,3,1,"","id"],[93,2,1,"","impossible_differential_search"],[93,3,1,"","inputs"],[93,3,1,"","inputs_bit_size"],[93,2,1,"","inputs_size_to_dict"],[93,2,1,"","is_algebraically_secure"],[93,2,1,"","is_andrx"],[93,2,1,"","is_arx"],[93,2,1,"","is_power_of_2_word_based"],[93,2,1,"","is_shift_arx"],[93,2,1,"","is_spn"],[93,2,1,"","make_cipher_id"],[93,2,1,"","make_file_name"],[93,2,1,"","neural_network_blackbox_distinguisher_tests"],[93,2,1,"","neural_network_differential_distinguisher_tests"],[93,3,1,"","number_of_rounds"],[93,3,1,"","output_bit_size"],[93,2,1,"","polynomial_system"],[93,2,1,"","polynomial_system_at_round"],[93,2,1,"","print"],[93,2,1,"","print_as_python_dictionary"],[93,2,1,"","print_as_python_dictionary_to_file"],[93,2,1,"","print_component_analysis_as_radar_charts"],[93,2,1,"","print_evaluation_python_code"],[93,2,1,"","print_evaluation_python_code_to_file"],[93,2,1,"","print_input_information"],[93,3,1,"","reference_code"],[93,2,1,"","remove_key_schedule"],[93,2,1,"","remove_round_component"],[93,2,1,"","remove_round_component_from_id"],[93,2,1,"","round_function"],[93,3,1,"","rounds"],[93,3,1,"","rounds_as_list"],[93,2,1,"","run_autond_pipeline"],[93,2,1,"","set_file_name"],[93,2,1,"","set_id"],[93,2,1,"","set_inputs"],[93,2,1,"","sort_cipher"],[93,2,1,"","test_against_reference_code"],[93,2,1,"","test_vector_check"],[93,2,1,"","train_gohr_neural_distinguisher"],[93,2,1,"","train_neural_distinguisher"],[93,3,1,"","type"],[93,2,1,"","update_key"],[93,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lea_block_cipher":[[94,1,1,"","LeaBlockCipher"],[94,4,1,"","format_output"],[94,4,1,"","init_input"]],"ciphers.block_ciphers.lea_block_cipher.LeaBlockCipher":[[94,2,1,"","add_AND_component"],[94,2,1,"","add_FSR_component"],[94,2,1,"","add_MODADD_component"],[94,2,1,"","add_MODSUB_component"],[94,2,1,"","add_NOT_component"],[94,2,1,"","add_OR_component"],[94,2,1,"","add_SBOX_component"],[94,2,1,"","add_SHIFT_component"],[94,2,1,"","add_XOR_component"],[94,2,1,"","add_cipher_output_component"],[94,2,1,"","add_concatenate_component"],[94,2,1,"","add_constant_component"],[94,2,1,"","add_intermediate_output_component"],[94,2,1,"","add_intermediate_output_components"],[94,2,1,"","add_linear_layer_component"],[94,2,1,"","add_mix_column_component"],[94,2,1,"","add_permutation_component"],[94,2,1,"","add_reverse_component"],[94,2,1,"","add_rotate_component"],[94,2,1,"","add_round"],[94,2,1,"","add_round_key_output_component"],[94,2,1,"","add_round_output_component"],[94,2,1,"","add_shift_rows_component"],[94,2,1,"","add_sigma_component"],[94,2,1,"","add_suffix_to_components"],[94,2,1,"","add_theta_keccak_component"],[94,2,1,"","add_theta_xoodoo_component"],[94,2,1,"","add_variable_rotate_component"],[94,2,1,"","add_variable_shift_component"],[94,2,1,"","add_word_permutation_component"],[94,2,1,"","algebraic_tests"],[94,2,1,"","analyze_cipher"],[94,2,1,"","as_python_dictionary"],[94,2,1,"","avalanche_probability_vectors"],[94,2,1,"","cipher_inverse"],[94,2,1,"","cipher_partial_inverse"],[94,2,1,"","component_analysis_tests"],[94,2,1,"","component_from"],[94,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[94,2,1,"","continuous_avalanche_factor"],[94,2,1,"","continuous_diffusion_factor"],[94,2,1,"","continuous_diffusion_tests"],[94,2,1,"","continuous_neutrality_measure_for_bit_j"],[94,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[94,2,1,"","convert_to_compound_xor_cipher"],[94,3,1,"","current_round"],[94,3,1,"","current_round_number"],[94,3,1,"","current_round_number_of_components"],[94,2,1,"","delete_generated_evaluate_c_shared_library"],[94,2,1,"","diffusion_tests"],[94,2,1,"","evaluate"],[94,2,1,"","evaluate_using_c"],[94,2,1,"","evaluate_vectorized"],[94,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[94,3,1,"","family_name"],[94,3,1,"","file_name"],[94,2,1,"","find_good_input_difference_for_neural_distinguisher"],[94,2,1,"","find_impossible_property"],[94,2,1,"","generate_bit_based_c_code"],[94,2,1,"","generate_csv_report"],[94,2,1,"","generate_evaluate_c_code_shared_library"],[94,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[94,2,1,"","generate_word_based_c_code"],[94,2,1,"","get_all_components"],[94,2,1,"","get_all_components_ids"],[94,2,1,"","get_all_inputs_bit_positions"],[94,2,1,"","get_component_from_id"],[94,2,1,"","get_components_in_round"],[94,2,1,"","get_current_component_id"],[94,2,1,"","get_ith_key128"],[94,2,1,"","get_ith_key192"],[94,2,1,"","get_ith_key256"],[94,2,1,"","get_model"],[94,2,1,"","get_number_of_components_in_round"],[94,2,1,"","get_numbers_of_rounds"],[94,2,1,"","get_partial_cipher"],[94,2,1,"","get_round_from_component_id"],[94,2,1,"","get_sizes_of_components_by_type"],[94,3,1,"","id"],[94,2,1,"","impossible_differential_search"],[94,3,1,"","inputs"],[94,3,1,"","inputs_bit_size"],[94,2,1,"","inputs_size_to_dict"],[94,2,1,"","is_algebraically_secure"],[94,2,1,"","is_andrx"],[94,2,1,"","is_arx"],[94,2,1,"","is_power_of_2_word_based"],[94,2,1,"","is_shift_arx"],[94,2,1,"","is_spn"],[94,2,1,"","make_cipher_id"],[94,2,1,"","make_file_name"],[94,2,1,"","neural_network_blackbox_distinguisher_tests"],[94,2,1,"","neural_network_differential_distinguisher_tests"],[94,3,1,"","number_of_rounds"],[94,3,1,"","output_bit_size"],[94,2,1,"","polynomial_system"],[94,2,1,"","polynomial_system_at_round"],[94,2,1,"","print"],[94,2,1,"","print_as_python_dictionary"],[94,2,1,"","print_as_python_dictionary_to_file"],[94,2,1,"","print_component_analysis_as_radar_charts"],[94,2,1,"","print_evaluation_python_code"],[94,2,1,"","print_evaluation_python_code_to_file"],[94,2,1,"","print_input_information"],[94,3,1,"","reference_code"],[94,2,1,"","remove_key_schedule"],[94,2,1,"","remove_round_component"],[94,2,1,"","remove_round_component_from_id"],[94,2,1,"","round_function"],[94,3,1,"","rounds"],[94,3,1,"","rounds_as_list"],[94,2,1,"","run_autond_pipeline"],[94,2,1,"","set_file_name"],[94,2,1,"","set_id"],[94,2,1,"","set_inputs"],[94,2,1,"","sort_cipher"],[94,2,1,"","test_against_reference_code"],[94,2,1,"","test_vector_check"],[94,2,1,"","train_gohr_neural_distinguisher"],[94,2,1,"","train_neural_distinguisher"],[94,3,1,"","type"],[94,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_block_cipher":[[95,1,1,"","LowMCBlockCipher"]],"ciphers.block_ciphers.lowmc_block_cipher.LowMCBlockCipher":[[95,2,1,"","add_AND_component"],[95,2,1,"","add_FSR_component"],[95,2,1,"","add_MODADD_component"],[95,2,1,"","add_MODSUB_component"],[95,2,1,"","add_NOT_component"],[95,2,1,"","add_OR_component"],[95,2,1,"","add_SBOX_component"],[95,2,1,"","add_SHIFT_component"],[95,2,1,"","add_XOR_component"],[95,2,1,"","add_cipher_output_component"],[95,2,1,"","add_concatenate_component"],[95,2,1,"","add_constant_component"],[95,2,1,"","add_intermediate_output_component"],[95,2,1,"","add_linear_layer_component"],[95,2,1,"","add_mix_column_component"],[95,2,1,"","add_output_component"],[95,2,1,"","add_permutation_component"],[95,2,1,"","add_reverse_component"],[95,2,1,"","add_rotate_component"],[95,2,1,"","add_round"],[95,2,1,"","add_round_constant"],[95,2,1,"","add_round_key"],[95,2,1,"","add_round_key_output_component"],[95,2,1,"","add_round_output_component"],[95,2,1,"","add_shift_rows_component"],[95,2,1,"","add_sigma_component"],[95,2,1,"","add_suffix_to_components"],[95,2,1,"","add_theta_keccak_component"],[95,2,1,"","add_theta_xoodoo_component"],[95,2,1,"","add_variable_rotate_component"],[95,2,1,"","add_variable_shift_component"],[95,2,1,"","add_word_permutation_component"],[95,2,1,"","algebraic_tests"],[95,2,1,"","analyze_cipher"],[95,2,1,"","as_python_dictionary"],[95,2,1,"","avalanche_probability_vectors"],[95,2,1,"","cipher_inverse"],[95,2,1,"","cipher_partial_inverse"],[95,2,1,"","component_analysis_tests"],[95,2,1,"","component_from"],[95,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[95,2,1,"","continuous_avalanche_factor"],[95,2,1,"","continuous_diffusion_factor"],[95,2,1,"","continuous_diffusion_tests"],[95,2,1,"","continuous_neutrality_measure_for_bit_j"],[95,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[95,2,1,"","convert_to_compound_xor_cipher"],[95,3,1,"","current_round"],[95,3,1,"","current_round_number"],[95,3,1,"","current_round_number_of_components"],[95,2,1,"","define_number_of_rounds"],[95,2,1,"","define_number_of_sboxes"],[95,2,1,"","delete_generated_evaluate_c_shared_library"],[95,2,1,"","diffusion_tests"],[95,2,1,"","evaluate"],[95,2,1,"","evaluate_using_c"],[95,2,1,"","evaluate_vectorized"],[95,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[95,3,1,"","family_name"],[95,3,1,"","file_name"],[95,2,1,"","find_good_input_difference_for_neural_distinguisher"],[95,2,1,"","find_impossible_property"],[95,2,1,"","generate_bit_based_c_code"],[95,2,1,"","generate_csv_report"],[95,2,1,"","generate_evaluate_c_code_shared_library"],[95,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[95,2,1,"","generate_word_based_c_code"],[95,2,1,"","get_all_components"],[95,2,1,"","get_all_components_ids"],[95,2,1,"","get_all_inputs_bit_positions"],[95,2,1,"","get_component_from_id"],[95,2,1,"","get_components_in_round"],[95,2,1,"","get_current_component_id"],[95,2,1,"","get_model"],[95,2,1,"","get_number_of_components_in_round"],[95,2,1,"","get_partial_cipher"],[95,2,1,"","get_round_from_component_id"],[95,2,1,"","get_sizes_of_components_by_type"],[95,3,1,"","id"],[95,2,1,"","impossible_differential_search"],[95,3,1,"","inputs"],[95,3,1,"","inputs_bit_size"],[95,2,1,"","inputs_size_to_dict"],[95,2,1,"","is_algebraically_secure"],[95,2,1,"","is_andrx"],[95,2,1,"","is_arx"],[95,2,1,"","is_power_of_2_word_based"],[95,2,1,"","is_shift_arx"],[95,2,1,"","is_spn"],[95,2,1,"","linear_layer"],[95,2,1,"","load_constants"],[95,2,1,"","make_cipher_id"],[95,2,1,"","make_file_name"],[95,2,1,"","neural_network_blackbox_distinguisher_tests"],[95,2,1,"","neural_network_differential_distinguisher_tests"],[95,3,1,"","number_of_rounds"],[95,3,1,"","output_bit_size"],[95,2,1,"","polynomial_system"],[95,2,1,"","polynomial_system_at_round"],[95,2,1,"","print"],[95,2,1,"","print_as_python_dictionary"],[95,2,1,"","print_as_python_dictionary_to_file"],[95,2,1,"","print_component_analysis_as_radar_charts"],[95,2,1,"","print_evaluation_python_code"],[95,2,1,"","print_evaluation_python_code_to_file"],[95,2,1,"","print_input_information"],[95,3,1,"","reference_code"],[95,2,1,"","remove_key_schedule"],[95,2,1,"","remove_round_component"],[95,2,1,"","remove_round_component_from_id"],[95,3,1,"","rounds"],[95,3,1,"","rounds_as_list"],[95,2,1,"","run_autond_pipeline"],[95,2,1,"","sbox_layer"],[95,2,1,"","sbox_layer_picnic"],[95,2,1,"","set_file_name"],[95,2,1,"","set_id"],[95,2,1,"","set_inputs"],[95,2,1,"","sort_cipher"],[95,2,1,"","test_against_reference_code"],[95,2,1,"","test_vector_check"],[95,2,1,"","train_gohr_neural_distinguisher"],[95,2,1,"","train_neural_distinguisher"],[95,3,1,"","type"],[95,2,1,"","update_key_register"],[95,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.lowmc_generate_matrices":[[96,4,1,"","grain_ssg"],[96,4,1,"","instantiate_matrix"],[96,4,1,"","main"],[96,4,1,"","rank"],[96,4,1,"","xor_matrix_values"]],"ciphers.block_ciphers.midori_block_cipher":[[97,1,1,"","MidoriBlockCipher"]],"ciphers.block_ciphers.midori_block_cipher.MidoriBlockCipher":[[97,2,1,"","add_AND_component"],[97,2,1,"","add_FSR_component"],[97,2,1,"","add_MODADD_component"],[97,2,1,"","add_MODSUB_component"],[97,2,1,"","add_NOT_component"],[97,2,1,"","add_OR_component"],[97,2,1,"","add_SBOX_component"],[97,2,1,"","add_SHIFT_component"],[97,2,1,"","add_XOR_component"],[97,2,1,"","add_cipher_output_component"],[97,2,1,"","add_concatenate_component"],[97,2,1,"","add_constant_component"],[97,2,1,"","add_intermediate_output_component"],[97,2,1,"","add_linear_layer_component"],[97,2,1,"","add_mix_column_component"],[97,2,1,"","add_permutation_component"],[97,2,1,"","add_reverse_component"],[97,2,1,"","add_rotate_component"],[97,2,1,"","add_round"],[97,2,1,"","add_round_key_output_component"],[97,2,1,"","add_round_output_component"],[97,2,1,"","add_shift_rows_component"],[97,2,1,"","add_sigma_component"],[97,2,1,"","add_suffix_to_components"],[97,2,1,"","add_theta_keccak_component"],[97,2,1,"","add_theta_xoodoo_component"],[97,2,1,"","add_variable_rotate_component"],[97,2,1,"","add_variable_shift_component"],[97,2,1,"","add_word_permutation_component"],[97,2,1,"","algebraic_tests"],[97,2,1,"","analyze_cipher"],[97,2,1,"","as_python_dictionary"],[97,2,1,"","avalanche_probability_vectors"],[97,2,1,"","cipher_inverse"],[97,2,1,"","cipher_partial_inverse"],[97,2,1,"","component_analysis_tests"],[97,2,1,"","component_from"],[97,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[97,2,1,"","continuous_avalanche_factor"],[97,2,1,"","continuous_diffusion_factor"],[97,2,1,"","continuous_diffusion_tests"],[97,2,1,"","continuous_neutrality_measure_for_bit_j"],[97,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[97,2,1,"","convert_to_compound_xor_cipher"],[97,3,1,"","current_round"],[97,3,1,"","current_round_number"],[97,3,1,"","current_round_number_of_components"],[97,2,1,"","delete_generated_evaluate_c_shared_library"],[97,2,1,"","diffusion_tests"],[97,2,1,"","evaluate"],[97,2,1,"","evaluate_using_c"],[97,2,1,"","evaluate_vectorized"],[97,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[97,3,1,"","family_name"],[97,3,1,"","file_name"],[97,2,1,"","find_good_input_difference_for_neural_distinguisher"],[97,2,1,"","find_impossible_property"],[97,2,1,"","generate_bit_based_c_code"],[97,2,1,"","generate_csv_report"],[97,2,1,"","generate_evaluate_c_code_shared_library"],[97,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[97,2,1,"","generate_word_based_c_code"],[97,2,1,"","get_all_components"],[97,2,1,"","get_all_components_ids"],[97,2,1,"","get_all_inputs_bit_positions"],[97,2,1,"","get_component_from_id"],[97,2,1,"","get_components_in_round"],[97,2,1,"","get_current_component_id"],[97,2,1,"","get_model"],[97,2,1,"","get_number_of_components_in_round"],[97,2,1,"","get_partial_cipher"],[97,2,1,"","get_round_from_component_id"],[97,2,1,"","get_sizes_of_components_by_type"],[97,3,1,"","id"],[97,2,1,"","impossible_differential_search"],[97,3,1,"","inputs"],[97,3,1,"","inputs_bit_size"],[97,2,1,"","inputs_size_to_dict"],[97,2,1,"","is_algebraically_secure"],[97,2,1,"","is_andrx"],[97,2,1,"","is_arx"],[97,2,1,"","is_power_of_2_word_based"],[97,2,1,"","is_shift_arx"],[97,2,1,"","is_spn"],[97,2,1,"","key_add"],[97,2,1,"","make_cipher_id"],[97,2,1,"","make_file_name"],[97,2,1,"","mix_column"],[97,2,1,"","neural_network_blackbox_distinguisher_tests"],[97,2,1,"","neural_network_differential_distinguisher_tests"],[97,3,1,"","number_of_rounds"],[97,3,1,"","output_bit_size"],[97,2,1,"","polynomial_system"],[97,2,1,"","polynomial_system_at_round"],[97,2,1,"","print"],[97,2,1,"","print_as_python_dictionary"],[97,2,1,"","print_as_python_dictionary_to_file"],[97,2,1,"","print_component_analysis_as_radar_charts"],[97,2,1,"","print_evaluation_python_code"],[97,2,1,"","print_evaluation_python_code_to_file"],[97,2,1,"","print_input_information"],[97,3,1,"","reference_code"],[97,2,1,"","remove_key_schedule"],[97,2,1,"","remove_round_component"],[97,2,1,"","remove_round_component_from_id"],[97,2,1,"","round_key"],[97,3,1,"","rounds"],[97,3,1,"","rounds_as_list"],[97,2,1,"","run_autond_pipeline"],[97,2,1,"","set_file_name"],[97,2,1,"","set_id"],[97,2,1,"","set_inputs"],[97,2,1,"","shuffle_cell"],[97,2,1,"","sort_cipher"],[97,2,1,"","sub_cell"],[97,2,1,"","test_against_reference_code"],[97,2,1,"","test_vector_check"],[97,2,1,"","train_gohr_neural_distinguisher"],[97,2,1,"","train_neural_distinguisher"],[97,3,1,"","type"],[97,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.present_block_cipher":[[98,1,1,"","PresentBlockCipher"]],"ciphers.block_ciphers.present_block_cipher.PresentBlockCipher":[[98,2,1,"","add_AND_component"],[98,2,1,"","add_FSR_component"],[98,2,1,"","add_MODADD_component"],[98,2,1,"","add_MODSUB_component"],[98,2,1,"","add_NOT_component"],[98,2,1,"","add_OR_component"],[98,2,1,"","add_SBOX_component"],[98,2,1,"","add_SHIFT_component"],[98,2,1,"","add_XOR_component"],[98,2,1,"","add_cipher_output_component"],[98,2,1,"","add_concatenate_component"],[98,2,1,"","add_constant_component"],[98,2,1,"","add_intermediate_output_component"],[98,2,1,"","add_linear_layer_component"],[98,2,1,"","add_mix_column_component"],[98,2,1,"","add_permutation_component"],[98,2,1,"","add_reverse_component"],[98,2,1,"","add_rotate_component"],[98,2,1,"","add_round"],[98,2,1,"","add_round_key"],[98,2,1,"","add_round_key_output_component"],[98,2,1,"","add_round_output_component"],[98,2,1,"","add_shift_rows_component"],[98,2,1,"","add_sigma_component"],[98,2,1,"","add_suffix_to_components"],[98,2,1,"","add_theta_keccak_component"],[98,2,1,"","add_theta_xoodoo_component"],[98,2,1,"","add_variable_rotate_component"],[98,2,1,"","add_variable_shift_component"],[98,2,1,"","add_word_permutation_component"],[98,2,1,"","algebraic_tests"],[98,2,1,"","analyze_cipher"],[98,2,1,"","as_python_dictionary"],[98,2,1,"","avalanche_probability_vectors"],[98,2,1,"","cipher_inverse"],[98,2,1,"","cipher_partial_inverse"],[98,2,1,"","component_analysis_tests"],[98,2,1,"","component_from"],[98,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[98,2,1,"","continuous_avalanche_factor"],[98,2,1,"","continuous_diffusion_factor"],[98,2,1,"","continuous_diffusion_tests"],[98,2,1,"","continuous_neutrality_measure_for_bit_j"],[98,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[98,2,1,"","convert_to_compound_xor_cipher"],[98,3,1,"","current_round"],[98,3,1,"","current_round_number"],[98,3,1,"","current_round_number_of_components"],[98,2,1,"","delete_generated_evaluate_c_shared_library"],[98,2,1,"","diffusion_tests"],[98,2,1,"","evaluate"],[98,2,1,"","evaluate_using_c"],[98,2,1,"","evaluate_vectorized"],[98,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[98,3,1,"","family_name"],[98,3,1,"","file_name"],[98,2,1,"","find_good_input_difference_for_neural_distinguisher"],[98,2,1,"","find_impossible_property"],[98,2,1,"","generate_bit_based_c_code"],[98,2,1,"","generate_csv_report"],[98,2,1,"","generate_evaluate_c_code_shared_library"],[98,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[98,2,1,"","generate_word_based_c_code"],[98,2,1,"","get_all_components"],[98,2,1,"","get_all_components_ids"],[98,2,1,"","get_all_inputs_bit_positions"],[98,2,1,"","get_component_from_id"],[98,2,1,"","get_components_in_round"],[98,2,1,"","get_current_component_id"],[98,2,1,"","get_model"],[98,2,1,"","get_number_of_components_in_round"],[98,2,1,"","get_partial_cipher"],[98,2,1,"","get_round_from_component_id"],[98,2,1,"","get_sizes_of_components_by_type"],[98,3,1,"","id"],[98,2,1,"","impossible_differential_search"],[98,3,1,"","inputs"],[98,3,1,"","inputs_bit_size"],[98,2,1,"","inputs_size_to_dict"],[98,2,1,"","is_algebraically_secure"],[98,2,1,"","is_andrx"],[98,2,1,"","is_arx"],[98,2,1,"","is_power_of_2_word_based"],[98,2,1,"","is_shift_arx"],[98,2,1,"","is_spn"],[98,2,1,"","make_cipher_id"],[98,2,1,"","make_file_name"],[98,2,1,"","neural_network_blackbox_distinguisher_tests"],[98,2,1,"","neural_network_differential_distinguisher_tests"],[98,3,1,"","number_of_rounds"],[98,3,1,"","output_bit_size"],[98,2,1,"","permutation_layer"],[98,2,1,"","polynomial_system"],[98,2,1,"","polynomial_system_at_round"],[98,2,1,"","print"],[98,2,1,"","print_as_python_dictionary"],[98,2,1,"","print_as_python_dictionary_to_file"],[98,2,1,"","print_component_analysis_as_radar_charts"],[98,2,1,"","print_evaluation_python_code"],[98,2,1,"","print_evaluation_python_code_to_file"],[98,2,1,"","print_input_information"],[98,3,1,"","reference_code"],[98,2,1,"","remove_key_schedule"],[98,2,1,"","remove_round_component"],[98,2,1,"","remove_round_component_from_id"],[98,3,1,"","rounds"],[98,3,1,"","rounds_as_list"],[98,2,1,"","run_autond_pipeline"],[98,2,1,"","sbox_layer"],[98,2,1,"","set_file_name"],[98,2,1,"","set_id"],[98,2,1,"","set_inputs"],[98,2,1,"","sort_cipher"],[98,2,1,"","test_against_reference_code"],[98,2,1,"","test_vector_check"],[98,2,1,"","train_gohr_neural_distinguisher"],[98,2,1,"","train_neural_distinguisher"],[98,3,1,"","type"],[98,2,1,"","update_key_register"],[98,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.qarmav2_block_cipher":[[99,1,1,"","QARMAv2BlockCipher"]],"ciphers.block_ciphers.qarmav2_block_cipher.QARMAv2BlockCipher":[[99,2,1,"","M_function"],[99,2,1,"","add_AND_component"],[99,2,1,"","add_FSR_component"],[99,2,1,"","add_MODADD_component"],[99,2,1,"","add_MODSUB_component"],[99,2,1,"","add_NOT_component"],[99,2,1,"","add_OR_component"],[99,2,1,"","add_SBOX_component"],[99,2,1,"","add_SHIFT_component"],[99,2,1,"","add_XOR_component"],[99,2,1,"","add_cipher_output_component"],[99,2,1,"","add_concatenate_component"],[99,2,1,"","add_constant_component"],[99,2,1,"","add_intermediate_output_component"],[99,2,1,"","add_linear_layer_component"],[99,2,1,"","add_mix_column_component"],[99,2,1,"","add_permutation_component"],[99,2,1,"","add_reverse_component"],[99,2,1,"","add_rotate_component"],[99,2,1,"","add_round"],[99,2,1,"","add_round_key_output_component"],[99,2,1,"","add_round_output_component"],[99,2,1,"","add_shift_rows_component"],[99,2,1,"","add_sigma_component"],[99,2,1,"","add_suffix_to_components"],[99,2,1,"","add_theta_keccak_component"],[99,2,1,"","add_theta_xoodoo_component"],[99,2,1,"","add_variable_rotate_component"],[99,2,1,"","add_variable_shift_component"],[99,2,1,"","add_word_permutation_component"],[99,2,1,"","algebraic_tests"],[99,2,1,"","analyze_cipher"],[99,2,1,"","as_python_dictionary"],[99,2,1,"","avalanche_probability_vectors"],[99,2,1,"","cipher_inverse"],[99,2,1,"","cipher_partial_inverse"],[99,2,1,"","component_analysis_tests"],[99,2,1,"","component_from"],[99,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[99,2,1,"","continuous_avalanche_factor"],[99,2,1,"","continuous_diffusion_factor"],[99,2,1,"","continuous_diffusion_tests"],[99,2,1,"","continuous_neutrality_measure_for_bit_j"],[99,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[99,2,1,"","convert_to_compound_xor_cipher"],[99,3,1,"","current_round"],[99,3,1,"","current_round_number"],[99,3,1,"","current_round_number_of_components"],[99,2,1,"","delete_generated_evaluate_c_shared_library"],[99,2,1,"","diffusion_tests"],[99,2,1,"","evaluate"],[99,2,1,"","evaluate_using_c"],[99,2,1,"","evaluate_vectorized"],[99,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[99,3,1,"","family_name"],[99,3,1,"","file_name"],[99,2,1,"","find_good_input_difference_for_neural_distinguisher"],[99,2,1,"","find_impossible_property"],[99,2,1,"","generate_bit_based_c_code"],[99,2,1,"","generate_csv_report"],[99,2,1,"","generate_evaluate_c_code_shared_library"],[99,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[99,2,1,"","generate_word_based_c_code"],[99,2,1,"","get_all_components"],[99,2,1,"","get_all_components_ids"],[99,2,1,"","get_all_inputs_bit_positions"],[99,2,1,"","get_component_from_id"],[99,2,1,"","get_components_in_round"],[99,2,1,"","get_current_component_id"],[99,2,1,"","get_model"],[99,2,1,"","get_number_of_components_in_round"],[99,2,1,"","get_partial_cipher"],[99,2,1,"","get_round_from_component_id"],[99,2,1,"","get_sizes_of_components_by_type"],[99,3,1,"","id"],[99,2,1,"","impossible_differential_search"],[99,3,1,"","inputs"],[99,3,1,"","inputs_bit_size"],[99,2,1,"","inputs_size_to_dict"],[99,2,1,"","is_algebraically_secure"],[99,2,1,"","is_andrx"],[99,2,1,"","is_arx"],[99,2,1,"","is_power_of_2_word_based"],[99,2,1,"","is_shift_arx"],[99,2,1,"","is_spn"],[99,2,1,"","majority_function"],[99,2,1,"","make_cipher_id"],[99,2,1,"","make_file_name"],[99,2,1,"","neural_network_blackbox_distinguisher_tests"],[99,2,1,"","neural_network_differential_distinguisher_tests"],[99,3,1,"","number_of_rounds"],[99,2,1,"","o_function"],[99,3,1,"","output_bit_size"],[99,2,1,"","polynomial_system"],[99,2,1,"","polynomial_system_at_round"],[99,2,1,"","print"],[99,2,1,"","print_as_python_dictionary"],[99,2,1,"","print_as_python_dictionary_to_file"],[99,2,1,"","print_component_analysis_as_radar_charts"],[99,2,1,"","print_evaluation_python_code"],[99,2,1,"","print_evaluation_python_code_to_file"],[99,2,1,"","print_input_information"],[99,3,1,"","reference_code"],[99,2,1,"","remove_key_schedule"],[99,2,1,"","remove_round_component"],[99,2,1,"","remove_round_component_from_id"],[99,3,1,"","rounds"],[99,3,1,"","rounds_as_list"],[99,2,1,"","run_autond_pipeline"],[99,2,1,"","set_file_name"],[99,2,1,"","set_id"],[99,2,1,"","set_inputs"],[99,2,1,"","sort_cipher"],[99,2,1,"","test_against_reference_code"],[99,2,1,"","test_vector_check"],[99,2,1,"","train_gohr_neural_distinguisher"],[99,2,1,"","train_neural_distinguisher"],[99,3,1,"","type"],[99,2,1,"","update_constants"],[99,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.raiden_block_cipher":[[100,1,1,"","RaidenBlockCipher"]],"ciphers.block_ciphers.raiden_block_cipher.RaidenBlockCipher":[[100,2,1,"","add_AND_component"],[100,2,1,"","add_FSR_component"],[100,2,1,"","add_MODADD_component"],[100,2,1,"","add_MODSUB_component"],[100,2,1,"","add_NOT_component"],[100,2,1,"","add_OR_component"],[100,2,1,"","add_SBOX_component"],[100,2,1,"","add_SHIFT_component"],[100,2,1,"","add_XOR_component"],[100,2,1,"","add_cipher_output_component"],[100,2,1,"","add_concatenate_component"],[100,2,1,"","add_constant_component"],[100,2,1,"","add_intermediate_output_component"],[100,2,1,"","add_linear_layer_component"],[100,2,1,"","add_mix_column_component"],[100,2,1,"","add_permutation_component"],[100,2,1,"","add_reverse_component"],[100,2,1,"","add_rotate_component"],[100,2,1,"","add_round"],[100,2,1,"","add_round_key_output_component"],[100,2,1,"","add_round_output_component"],[100,2,1,"","add_shift_rows_component"],[100,2,1,"","add_sigma_component"],[100,2,1,"","add_suffix_to_components"],[100,2,1,"","add_theta_keccak_component"],[100,2,1,"","add_theta_xoodoo_component"],[100,2,1,"","add_variable_rotate_component"],[100,2,1,"","add_variable_shift_component"],[100,2,1,"","add_word_permutation_component"],[100,2,1,"","algebraic_tests"],[100,2,1,"","analyze_cipher"],[100,2,1,"","as_python_dictionary"],[100,2,1,"","avalanche_probability_vectors"],[100,2,1,"","cipher_inverse"],[100,2,1,"","cipher_partial_inverse"],[100,2,1,"","component_analysis_tests"],[100,2,1,"","component_from"],[100,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[100,2,1,"","continuous_avalanche_factor"],[100,2,1,"","continuous_diffusion_factor"],[100,2,1,"","continuous_diffusion_tests"],[100,2,1,"","continuous_neutrality_measure_for_bit_j"],[100,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[100,2,1,"","convert_to_compound_xor_cipher"],[100,3,1,"","current_round"],[100,3,1,"","current_round_number"],[100,3,1,"","current_round_number_of_components"],[100,2,1,"","delete_generated_evaluate_c_shared_library"],[100,2,1,"","diffusion_tests"],[100,2,1,"","evaluate"],[100,2,1,"","evaluate_using_c"],[100,2,1,"","evaluate_vectorized"],[100,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[100,3,1,"","family_name"],[100,3,1,"","file_name"],[100,2,1,"","find_good_input_difference_for_neural_distinguisher"],[100,2,1,"","find_impossible_property"],[100,2,1,"","generate_bit_based_c_code"],[100,2,1,"","generate_csv_report"],[100,2,1,"","generate_evaluate_c_code_shared_library"],[100,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[100,2,1,"","generate_word_based_c_code"],[100,2,1,"","get_all_components"],[100,2,1,"","get_all_components_ids"],[100,2,1,"","get_all_inputs_bit_positions"],[100,2,1,"","get_component_from_id"],[100,2,1,"","get_components_in_round"],[100,2,1,"","get_current_component_id"],[100,2,1,"","get_model"],[100,2,1,"","get_number_of_components_in_round"],[100,2,1,"","get_partial_cipher"],[100,2,1,"","get_round_from_component_id"],[100,2,1,"","get_sizes_of_components_by_type"],[100,3,1,"","id"],[100,2,1,"","impossible_differential_search"],[100,3,1,"","inputs"],[100,3,1,"","inputs_bit_size"],[100,2,1,"","inputs_size_to_dict"],[100,2,1,"","is_algebraically_secure"],[100,2,1,"","is_andrx"],[100,2,1,"","is_arx"],[100,2,1,"","is_power_of_2_word_based"],[100,2,1,"","is_shift_arx"],[100,2,1,"","is_spn"],[100,2,1,"","make_cipher_id"],[100,2,1,"","make_file_name"],[100,2,1,"","neural_network_blackbox_distinguisher_tests"],[100,2,1,"","neural_network_differential_distinguisher_tests"],[100,3,1,"","number_of_rounds"],[100,3,1,"","output_bit_size"],[100,2,1,"","polynomial_system"],[100,2,1,"","polynomial_system_at_round"],[100,2,1,"","print"],[100,2,1,"","print_as_python_dictionary"],[100,2,1,"","print_as_python_dictionary_to_file"],[100,2,1,"","print_component_analysis_as_radar_charts"],[100,2,1,"","print_evaluation_python_code"],[100,2,1,"","print_evaluation_python_code_to_file"],[100,2,1,"","print_input_information"],[100,3,1,"","reference_code"],[100,2,1,"","remove_key_schedule"],[100,2,1,"","remove_round_component"],[100,2,1,"","remove_round_component_from_id"],[100,3,1,"","rounds"],[100,3,1,"","rounds_as_list"],[100,2,1,"","run_autond_pipeline"],[100,2,1,"","set_file_name"],[100,2,1,"","set_id"],[100,2,1,"","set_inputs"],[100,2,1,"","sort_cipher"],[100,2,1,"","test_against_reference_code"],[100,2,1,"","test_vector_check"],[100,2,1,"","train_gohr_neural_distinguisher"],[100,2,1,"","train_neural_distinguisher"],[100,3,1,"","type"],[100,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.rc5_block_cipher":[[101,1,1,"","RC5BlockCipher"]],"ciphers.block_ciphers.rc5_block_cipher.RC5BlockCipher":[[101,2,1,"","add_AND_component"],[101,2,1,"","add_FSR_component"],[101,2,1,"","add_MODADD_component"],[101,2,1,"","add_MODSUB_component"],[101,2,1,"","add_NOT_component"],[101,2,1,"","add_OR_component"],[101,2,1,"","add_SBOX_component"],[101,2,1,"","add_SHIFT_component"],[101,2,1,"","add_XOR_component"],[101,2,1,"","add_cipher_output_component"],[101,2,1,"","add_concatenate_component"],[101,2,1,"","add_constant_component"],[101,2,1,"","add_intermediate_output_component"],[101,2,1,"","add_linear_layer_component"],[101,2,1,"","add_mix_column_component"],[101,2,1,"","add_permutation_component"],[101,2,1,"","add_reverse_component"],[101,2,1,"","add_rotate_component"],[101,2,1,"","add_round"],[101,2,1,"","add_round_key_output_component"],[101,2,1,"","add_round_output_component"],[101,2,1,"","add_shift_rows_component"],[101,2,1,"","add_sigma_component"],[101,2,1,"","add_suffix_to_components"],[101,2,1,"","add_theta_keccak_component"],[101,2,1,"","add_theta_xoodoo_component"],[101,2,1,"","add_variable_rotate_component"],[101,2,1,"","add_variable_shift_component"],[101,2,1,"","add_word_permutation_component"],[101,2,1,"","algebraic_tests"],[101,2,1,"","analyze_cipher"],[101,2,1,"","as_python_dictionary"],[101,2,1,"","avalanche_probability_vectors"],[101,2,1,"","cipher_inverse"],[101,2,1,"","cipher_partial_inverse"],[101,2,1,"","component_analysis_tests"],[101,2,1,"","component_from"],[101,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[101,2,1,"","compute_magic_constants"],[101,2,1,"","continuous_avalanche_factor"],[101,2,1,"","continuous_diffusion_factor"],[101,2,1,"","continuous_diffusion_tests"],[101,2,1,"","continuous_neutrality_measure_for_bit_j"],[101,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[101,2,1,"","convert_to_compound_xor_cipher"],[101,3,1,"","current_round"],[101,3,1,"","current_round_number"],[101,3,1,"","current_round_number_of_components"],[101,2,1,"","delete_generated_evaluate_c_shared_library"],[101,2,1,"","diffusion_tests"],[101,2,1,"","evaluate"],[101,2,1,"","evaluate_using_c"],[101,2,1,"","evaluate_vectorized"],[101,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[101,3,1,"","family_name"],[101,3,1,"","file_name"],[101,2,1,"","find_good_input_difference_for_neural_distinguisher"],[101,2,1,"","find_impossible_property"],[101,2,1,"","first_round"],[101,2,1,"","generate_bit_based_c_code"],[101,2,1,"","generate_csv_report"],[101,2,1,"","generate_evaluate_c_code_shared_library"],[101,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[101,2,1,"","generate_word_based_c_code"],[101,2,1,"","get_all_components"],[101,2,1,"","get_all_components_ids"],[101,2,1,"","get_all_inputs_bit_positions"],[101,2,1,"","get_component_from_id"],[101,2,1,"","get_components_in_round"],[101,2,1,"","get_current_component_id"],[101,2,1,"","get_model"],[101,2,1,"","get_number_of_components_in_round"],[101,2,1,"","get_partial_cipher"],[101,2,1,"","get_round_from_component_id"],[101,2,1,"","get_sizes_of_components_by_type"],[101,3,1,"","id"],[101,2,1,"","impossible_differential_search"],[101,3,1,"","inputs"],[101,3,1,"","inputs_bit_size"],[101,2,1,"","inputs_size_to_dict"],[101,2,1,"","is_algebraically_secure"],[101,2,1,"","is_andrx"],[101,2,1,"","is_arx"],[101,2,1,"","is_power_of_2_word_based"],[101,2,1,"","is_shift_arx"],[101,2,1,"","is_spn"],[101,2,1,"","key_expansion"],[101,2,1,"","make_cipher_id"],[101,2,1,"","make_file_name"],[101,2,1,"","neural_network_blackbox_distinguisher_tests"],[101,2,1,"","neural_network_differential_distinguisher_tests"],[101,3,1,"","number_of_rounds"],[101,3,1,"","output_bit_size"],[101,2,1,"","polynomial_system"],[101,2,1,"","polynomial_system_at_round"],[101,2,1,"","print"],[101,2,1,"","print_as_python_dictionary"],[101,2,1,"","print_as_python_dictionary_to_file"],[101,2,1,"","print_component_analysis_as_radar_charts"],[101,2,1,"","print_evaluation_python_code"],[101,2,1,"","print_evaluation_python_code_to_file"],[101,2,1,"","print_input_information"],[101,3,1,"","reference_code"],[101,2,1,"","remove_key_schedule"],[101,2,1,"","remove_round_component"],[101,2,1,"","remove_round_component_from_id"],[101,2,1,"","round_function"],[101,3,1,"","rounds"],[101,3,1,"","rounds_as_list"],[101,2,1,"","run_autond_pipeline"],[101,2,1,"","set_file_name"],[101,2,1,"","set_id"],[101,2,1,"","set_inputs"],[101,2,1,"","sort_cipher"],[101,2,1,"","test_against_reference_code"],[101,2,1,"","test_vector_check"],[101,2,1,"","train_gohr_neural_distinguisher"],[101,2,1,"","train_neural_distinguisher"],[101,3,1,"","type"],[101,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.simon_block_cipher":[[102,1,1,"","SimonBlockCipher"]],"ciphers.block_ciphers.simon_block_cipher.SimonBlockCipher":[[102,2,1,"","add_AND_component"],[102,2,1,"","add_FSR_component"],[102,2,1,"","add_MODADD_component"],[102,2,1,"","add_MODSUB_component"],[102,2,1,"","add_NOT_component"],[102,2,1,"","add_OR_component"],[102,2,1,"","add_SBOX_component"],[102,2,1,"","add_SHIFT_component"],[102,2,1,"","add_XOR_component"],[102,2,1,"","add_cipher_output_component"],[102,2,1,"","add_concatenate_component"],[102,2,1,"","add_constant_component"],[102,2,1,"","add_intermediate_output_component"],[102,2,1,"","add_linear_layer_component"],[102,2,1,"","add_mix_column_component"],[102,2,1,"","add_permutation_component"],[102,2,1,"","add_reverse_component"],[102,2,1,"","add_rotate_component"],[102,2,1,"","add_round"],[102,2,1,"","add_round_key_output_component"],[102,2,1,"","add_round_output_component"],[102,2,1,"","add_shift_rows_component"],[102,2,1,"","add_sigma_component"],[102,2,1,"","add_suffix_to_components"],[102,2,1,"","add_theta_keccak_component"],[102,2,1,"","add_theta_xoodoo_component"],[102,2,1,"","add_variable_rotate_component"],[102,2,1,"","add_variable_shift_component"],[102,2,1,"","add_word_permutation_component"],[102,2,1,"","algebraic_tests"],[102,2,1,"","analyze_cipher"],[102,2,1,"","as_python_dictionary"],[102,2,1,"","avalanche_probability_vectors"],[102,2,1,"","cipher_inverse"],[102,2,1,"","cipher_partial_inverse"],[102,2,1,"","component_analysis_tests"],[102,2,1,"","component_from"],[102,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[102,2,1,"","continuous_avalanche_factor"],[102,2,1,"","continuous_diffusion_factor"],[102,2,1,"","continuous_diffusion_tests"],[102,2,1,"","continuous_neutrality_measure_for_bit_j"],[102,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[102,2,1,"","convert_to_compound_xor_cipher"],[102,3,1,"","current_round"],[102,3,1,"","current_round_number"],[102,3,1,"","current_round_number_of_components"],[102,2,1,"","delete_generated_evaluate_c_shared_library"],[102,2,1,"","diffusion_tests"],[102,2,1,"","evaluate"],[102,2,1,"","evaluate_using_c"],[102,2,1,"","evaluate_vectorized"],[102,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[102,2,1,"","f"],[102,3,1,"","family_name"],[102,2,1,"","feistel_function"],[102,3,1,"","file_name"],[102,2,1,"","find_good_input_difference_for_neural_distinguisher"],[102,2,1,"","find_impossible_property"],[102,2,1,"","generate_bit_based_c_code"],[102,2,1,"","generate_csv_report"],[102,2,1,"","generate_evaluate_c_code_shared_library"],[102,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[102,2,1,"","generate_round_key"],[102,2,1,"","generate_word_based_c_code"],[102,2,1,"","get_all_components"],[102,2,1,"","get_all_components_ids"],[102,2,1,"","get_all_inputs_bit_positions"],[102,2,1,"","get_component_from_id"],[102,2,1,"","get_components_in_round"],[102,2,1,"","get_current_component_id"],[102,2,1,"","get_model"],[102,2,1,"","get_number_of_components_in_round"],[102,2,1,"","get_partial_cipher"],[102,2,1,"","get_round_from_component_id"],[102,2,1,"","get_sizes_of_components_by_type"],[102,3,1,"","id"],[102,2,1,"","impossible_differential_search"],[102,3,1,"","inputs"],[102,3,1,"","inputs_bit_size"],[102,2,1,"","inputs_size_to_dict"],[102,2,1,"","is_algebraically_secure"],[102,2,1,"","is_andrx"],[102,2,1,"","is_arx"],[102,2,1,"","is_power_of_2_word_based"],[102,2,1,"","is_shift_arx"],[102,2,1,"","is_spn"],[102,2,1,"","make_cipher_id"],[102,2,1,"","make_file_name"],[102,2,1,"","neural_network_blackbox_distinguisher_tests"],[102,2,1,"","neural_network_differential_distinguisher_tests"],[102,3,1,"","number_of_rounds"],[102,3,1,"","output_bit_size"],[102,2,1,"","polynomial_system"],[102,2,1,"","polynomial_system_at_round"],[102,2,1,"","print"],[102,2,1,"","print_as_python_dictionary"],[102,2,1,"","print_as_python_dictionary_to_file"],[102,2,1,"","print_component_analysis_as_radar_charts"],[102,2,1,"","print_evaluation_python_code"],[102,2,1,"","print_evaluation_python_code_to_file"],[102,2,1,"","print_input_information"],[102,3,1,"","reference_code"],[102,2,1,"","remove_key_schedule"],[102,2,1,"","remove_round_component"],[102,2,1,"","remove_round_component_from_id"],[102,3,1,"","rounds"],[102,3,1,"","rounds_as_list"],[102,2,1,"","run_autond_pipeline"],[102,2,1,"","set_file_name"],[102,2,1,"","set_id"],[102,2,1,"","set_inputs"],[102,2,1,"","sort_cipher"],[102,2,1,"","test_against_reference_code"],[102,2,1,"","test_vector_check"],[102,2,1,"","train_gohr_neural_distinguisher"],[102,2,1,"","train_neural_distinguisher"],[102,3,1,"","type"],[102,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.skinny_block_cipher":[[103,1,1,"","SkinnyBlockCipher"],[103,4,1,"","add_shift_rows_components"],[103,4,1,"","key_initialization"],[103,4,1,"","state_initialization"]],"ciphers.block_ciphers.skinny_block_cipher.SkinnyBlockCipher":[[103,2,1,"","add_AND_component"],[103,2,1,"","add_FSR_component"],[103,2,1,"","add_MODADD_component"],[103,2,1,"","add_MODSUB_component"],[103,2,1,"","add_NOT_component"],[103,2,1,"","add_OR_component"],[103,2,1,"","add_SBOX_component"],[103,2,1,"","add_SHIFT_component"],[103,2,1,"","add_XOR_component"],[103,2,1,"","add_add_round_tweakey"],[103,2,1,"","add_cipher_output_component"],[103,2,1,"","add_concatenate_component"],[103,2,1,"","add_constant_component"],[103,2,1,"","add_intermediate_output_component"],[103,2,1,"","add_linear_layer_component"],[103,2,1,"","add_mix_column_component"],[103,2,1,"","add_mix_column_serials"],[103,2,1,"","add_output_component"],[103,2,1,"","add_permutation_component"],[103,2,1,"","add_reverse_component"],[103,2,1,"","add_rotate_component"],[103,2,1,"","add_round"],[103,2,1,"","add_round_key_output_component"],[103,2,1,"","add_round_output_component"],[103,2,1,"","add_shift_rows_component"],[103,2,1,"","add_sigma_component"],[103,2,1,"","add_suffix_to_components"],[103,2,1,"","add_theta_keccak_component"],[103,2,1,"","add_theta_xoodoo_component"],[103,2,1,"","add_variable_rotate_component"],[103,2,1,"","add_variable_shift_component"],[103,2,1,"","add_word_permutation_component"],[103,2,1,"","algebraic_tests"],[103,2,1,"","analyze_cipher"],[103,2,1,"","as_python_dictionary"],[103,2,1,"","avalanche_probability_vectors"],[103,2,1,"","cipher_inverse"],[103,2,1,"","cipher_partial_inverse"],[103,2,1,"","component_analysis_tests"],[103,2,1,"","component_from"],[103,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[103,2,1,"","continuous_avalanche_factor"],[103,2,1,"","continuous_diffusion_factor"],[103,2,1,"","continuous_diffusion_tests"],[103,2,1,"","continuous_neutrality_measure_for_bit_j"],[103,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[103,2,1,"","convert_to_compound_xor_cipher"],[103,3,1,"","current_round"],[103,3,1,"","current_round_number"],[103,3,1,"","current_round_number_of_components"],[103,2,1,"","delete_generated_evaluate_c_shared_library"],[103,2,1,"","diffusion_tests"],[103,2,1,"","evaluate"],[103,2,1,"","evaluate_using_c"],[103,2,1,"","evaluate_vectorized"],[103,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[103,3,1,"","family_name"],[103,3,1,"","file_name"],[103,2,1,"","find_good_input_difference_for_neural_distinguisher"],[103,2,1,"","find_impossible_property"],[103,2,1,"","generate_bit_based_c_code"],[103,2,1,"","generate_csv_report"],[103,2,1,"","generate_evaluate_c_code_shared_library"],[103,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[103,2,1,"","generate_word_based_c_code"],[103,2,1,"","get_all_components"],[103,2,1,"","get_all_components_ids"],[103,2,1,"","get_all_inputs_bit_positions"],[103,2,1,"","get_component_from_id"],[103,2,1,"","get_components_in_round"],[103,2,1,"","get_current_component_id"],[103,2,1,"","get_model"],[103,2,1,"","get_number_of_components_in_round"],[103,2,1,"","get_partial_cipher"],[103,2,1,"","get_round_from_component_id"],[103,2,1,"","get_sizes_of_components_by_type"],[103,3,1,"","id"],[103,2,1,"","impossible_differential_search"],[103,2,1,"","initial_round_elements_definition"],[103,3,1,"","inputs"],[103,3,1,"","inputs_bit_size"],[103,2,1,"","inputs_size_to_dict"],[103,2,1,"","is_algebraically_secure"],[103,2,1,"","is_andrx"],[103,2,1,"","is_arx"],[103,2,1,"","is_power_of_2_word_based"],[103,2,1,"","is_shift_arx"],[103,2,1,"","is_spn"],[103,2,1,"","key_schedule"],[103,2,1,"","make_cipher_id"],[103,2,1,"","make_file_name"],[103,2,1,"","neural_network_blackbox_distinguisher_tests"],[103,2,1,"","neural_network_differential_distinguisher_tests"],[103,3,1,"","number_of_rounds"],[103,3,1,"","output_bit_size"],[103,2,1,"","polynomial_system"],[103,2,1,"","polynomial_system_at_round"],[103,2,1,"","print"],[103,2,1,"","print_as_python_dictionary"],[103,2,1,"","print_as_python_dictionary_to_file"],[103,2,1,"","print_component_analysis_as_radar_charts"],[103,2,1,"","print_evaluation_python_code"],[103,2,1,"","print_evaluation_python_code_to_file"],[103,2,1,"","print_input_information"],[103,3,1,"","reference_code"],[103,2,1,"","remove_key_schedule"],[103,2,1,"","remove_round_component"],[103,2,1,"","remove_round_component_from_id"],[103,2,1,"","round_function"],[103,3,1,"","rounds"],[103,3,1,"","rounds_as_list"],[103,2,1,"","run_autond_pipeline"],[103,2,1,"","set_file_name"],[103,2,1,"","set_id"],[103,2,1,"","set_inputs"],[103,2,1,"","sort_cipher"],[103,2,1,"","test_against_reference_code"],[103,2,1,"","test_vector_check"],[103,2,1,"","train_gohr_neural_distinguisher"],[103,2,1,"","train_neural_distinguisher"],[103,3,1,"","type"],[103,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.sparx_block_cipher":[[104,1,1,"","SparxBlockCipher"],[104,4,1,"","get_number_of_steps_from"]],"ciphers.block_ciphers.sparx_block_cipher.SparxBlockCipher":[[104,2,1,"","K_4_128"],[104,2,1,"","K_4_64"],[104,2,1,"","K_8_256"],[104,2,1,"","add_AND_component"],[104,2,1,"","add_FSR_component"],[104,2,1,"","add_MODADD_component"],[104,2,1,"","add_MODSUB_component"],[104,2,1,"","add_NOT_component"],[104,2,1,"","add_OR_component"],[104,2,1,"","add_SBOX_component"],[104,2,1,"","add_SHIFT_component"],[104,2,1,"","add_XOR_component"],[104,2,1,"","add_cipher_output_component"],[104,2,1,"","add_concatenate_component"],[104,2,1,"","add_constant_component"],[104,2,1,"","add_intermediate_output_component"],[104,2,1,"","add_linear_layer_component"],[104,2,1,"","add_mix_column_component"],[104,2,1,"","add_permutation_component"],[104,2,1,"","add_reverse_component"],[104,2,1,"","add_rotate_component"],[104,2,1,"","add_round"],[104,2,1,"","add_round_key_output_component"],[104,2,1,"","add_round_output_component"],[104,2,1,"","add_shift_rows_component"],[104,2,1,"","add_sigma_component"],[104,2,1,"","add_suffix_to_components"],[104,2,1,"","add_theta_keccak_component"],[104,2,1,"","add_theta_xoodoo_component"],[104,2,1,"","add_variable_rotate_component"],[104,2,1,"","add_variable_shift_component"],[104,2,1,"","add_word_permutation_component"],[104,2,1,"","algebraic_tests"],[104,2,1,"","analyze_cipher"],[104,2,1,"","arx_box"],[104,2,1,"","as_python_dictionary"],[104,2,1,"","assign_functions_based_on"],[104,2,1,"","avalanche_probability_vectors"],[104,2,1,"","cipher_inverse"],[104,2,1,"","cipher_partial_inverse"],[104,2,1,"","component_analysis_tests"],[104,2,1,"","component_from"],[104,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[104,2,1,"","continuous_avalanche_factor"],[104,2,1,"","continuous_diffusion_factor"],[104,2,1,"","continuous_diffusion_tests"],[104,2,1,"","continuous_neutrality_measure_for_bit_j"],[104,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[104,2,1,"","convert_to_compound_xor_cipher"],[104,3,1,"","current_round"],[104,3,1,"","current_round_number"],[104,3,1,"","current_round_number_of_components"],[104,2,1,"","delete_generated_evaluate_c_shared_library"],[104,2,1,"","diffusion_tests"],[104,2,1,"","evaluate"],[104,2,1,"","evaluate_using_c"],[104,2,1,"","evaluate_vectorized"],[104,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[104,3,1,"","family_name"],[104,3,1,"","file_name"],[104,2,1,"","find_good_input_difference_for_neural_distinguisher"],[104,2,1,"","find_impossible_property"],[104,2,1,"","generate_bit_based_c_code"],[104,2,1,"","generate_csv_report"],[104,2,1,"","generate_evaluate_c_code_shared_library"],[104,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[104,2,1,"","generate_word_based_c_code"],[104,2,1,"","get_all_components"],[104,2,1,"","get_all_components_ids"],[104,2,1,"","get_all_inputs_bit_positions"],[104,2,1,"","get_component_from_id"],[104,2,1,"","get_components_in_round"],[104,2,1,"","get_current_component_id"],[104,2,1,"","get_model"],[104,2,1,"","get_number_of_components_in_round"],[104,2,1,"","get_partial_cipher"],[104,2,1,"","get_round_from_component_id"],[104,2,1,"","get_sizes_of_components_by_type"],[104,3,1,"","id"],[104,2,1,"","impossible_differential_search"],[104,3,1,"","inputs"],[104,3,1,"","inputs_bit_size"],[104,2,1,"","inputs_size_to_dict"],[104,2,1,"","is_algebraically_secure"],[104,2,1,"","is_andrx"],[104,2,1,"","is_arx"],[104,2,1,"","is_power_of_2_word_based"],[104,2,1,"","is_shift_arx"],[104,2,1,"","is_spn"],[104,2,1,"","lambda_2"],[104,2,1,"","lambda_4"],[104,2,1,"","make_cipher_id"],[104,2,1,"","make_file_name"],[104,2,1,"","neural_network_blackbox_distinguisher_tests"],[104,2,1,"","neural_network_differential_distinguisher_tests"],[104,3,1,"","number_of_rounds"],[104,3,1,"","output_bit_size"],[104,2,1,"","polynomial_system"],[104,2,1,"","polynomial_system_at_round"],[104,2,1,"","print"],[104,2,1,"","print_as_python_dictionary"],[104,2,1,"","print_as_python_dictionary_to_file"],[104,2,1,"","print_component_analysis_as_radar_charts"],[104,2,1,"","print_evaluation_python_code"],[104,2,1,"","print_evaluation_python_code_to_file"],[104,2,1,"","print_input_information"],[104,3,1,"","reference_code"],[104,2,1,"","remove_key_schedule"],[104,2,1,"","remove_round_component"],[104,2,1,"","remove_round_component_from_id"],[104,3,1,"","rounds"],[104,3,1,"","rounds_as_list"],[104,2,1,"","run_autond_pipeline"],[104,2,1,"","set_file_name"],[104,2,1,"","set_id"],[104,2,1,"","set_inputs"],[104,2,1,"","sort_cipher"],[104,2,1,"","test_against_reference_code"],[104,2,1,"","test_vector_check"],[104,2,1,"","train_gohr_neural_distinguisher"],[104,2,1,"","train_neural_distinguisher"],[104,3,1,"","type"],[104,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.speck_block_cipher":[[105,1,1,"","SpeckBlockCipher"]],"ciphers.block_ciphers.speck_block_cipher.SpeckBlockCipher":[[105,2,1,"","add_AND_component"],[105,2,1,"","add_FSR_component"],[105,2,1,"","add_MODADD_component"],[105,2,1,"","add_MODSUB_component"],[105,2,1,"","add_NOT_component"],[105,2,1,"","add_OR_component"],[105,2,1,"","add_SBOX_component"],[105,2,1,"","add_SHIFT_component"],[105,2,1,"","add_XOR_component"],[105,2,1,"","add_cipher_output_component"],[105,2,1,"","add_concatenate_component"],[105,2,1,"","add_constant_component"],[105,2,1,"","add_intermediate_output_component"],[105,2,1,"","add_linear_layer_component"],[105,2,1,"","add_mix_column_component"],[105,2,1,"","add_output_component"],[105,2,1,"","add_permutation_component"],[105,2,1,"","add_reverse_component"],[105,2,1,"","add_rotate_component"],[105,2,1,"","add_round"],[105,2,1,"","add_round_key_output_component"],[105,2,1,"","add_round_output_component"],[105,2,1,"","add_shift_rows_component"],[105,2,1,"","add_sigma_component"],[105,2,1,"","add_suffix_to_components"],[105,2,1,"","add_theta_keccak_component"],[105,2,1,"","add_theta_xoodoo_component"],[105,2,1,"","add_variable_rotate_component"],[105,2,1,"","add_variable_shift_component"],[105,2,1,"","add_word_permutation_component"],[105,2,1,"","algebraic_tests"],[105,2,1,"","analyze_cipher"],[105,2,1,"","as_python_dictionary"],[105,2,1,"","avalanche_probability_vectors"],[105,2,1,"","cipher_inverse"],[105,2,1,"","cipher_partial_inverse"],[105,2,1,"","component_analysis_tests"],[105,2,1,"","component_from"],[105,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[105,2,1,"","continuous_avalanche_factor"],[105,2,1,"","continuous_diffusion_factor"],[105,2,1,"","continuous_diffusion_tests"],[105,2,1,"","continuous_neutrality_measure_for_bit_j"],[105,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[105,2,1,"","convert_to_compound_xor_cipher"],[105,3,1,"","current_round"],[105,3,1,"","current_round_number"],[105,3,1,"","current_round_number_of_components"],[105,2,1,"","delete_generated_evaluate_c_shared_library"],[105,2,1,"","diffusion_tests"],[105,2,1,"","evaluate"],[105,2,1,"","evaluate_using_c"],[105,2,1,"","evaluate_vectorized"],[105,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[105,3,1,"","family_name"],[105,3,1,"","file_name"],[105,2,1,"","find_good_input_difference_for_neural_distinguisher"],[105,2,1,"","find_impossible_property"],[105,2,1,"","generate_bit_based_c_code"],[105,2,1,"","generate_csv_report"],[105,2,1,"","generate_evaluate_c_code_shared_library"],[105,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[105,2,1,"","generate_word_based_c_code"],[105,2,1,"","get_all_components"],[105,2,1,"","get_all_components_ids"],[105,2,1,"","get_all_inputs_bit_positions"],[105,2,1,"","get_component_from_id"],[105,2,1,"","get_components_in_round"],[105,2,1,"","get_current_component_id"],[105,2,1,"","get_model"],[105,2,1,"","get_number_of_components_in_round"],[105,2,1,"","get_partial_cipher"],[105,2,1,"","get_round_from_component_id"],[105,2,1,"","get_sizes_of_components_by_type"],[105,3,1,"","id"],[105,2,1,"","impossible_differential_search"],[105,3,1,"","inputs"],[105,3,1,"","inputs_bit_size"],[105,2,1,"","inputs_size_to_dict"],[105,2,1,"","is_algebraically_secure"],[105,2,1,"","is_andrx"],[105,2,1,"","is_arx"],[105,2,1,"","is_power_of_2_word_based"],[105,2,1,"","is_shift_arx"],[105,2,1,"","is_spn"],[105,2,1,"","key_initialization"],[105,2,1,"","make_cipher_id"],[105,2,1,"","make_file_name"],[105,2,1,"","neural_network_blackbox_distinguisher_tests"],[105,2,1,"","neural_network_differential_distinguisher_tests"],[105,3,1,"","number_of_rounds"],[105,3,1,"","output_bit_size"],[105,2,1,"","polynomial_system"],[105,2,1,"","polynomial_system_at_round"],[105,2,1,"","print"],[105,2,1,"","print_as_python_dictionary"],[105,2,1,"","print_as_python_dictionary_to_file"],[105,2,1,"","print_component_analysis_as_radar_charts"],[105,2,1,"","print_evaluation_python_code"],[105,2,1,"","print_evaluation_python_code_to_file"],[105,2,1,"","print_input_information"],[105,3,1,"","reference_code"],[105,2,1,"","remove_key_schedule"],[105,2,1,"","remove_round_component"],[105,2,1,"","remove_round_component_from_id"],[105,2,1,"","round_function"],[105,2,1,"","round_initialization"],[105,3,1,"","rounds"],[105,3,1,"","rounds_as_list"],[105,2,1,"","run_autond_pipeline"],[105,2,1,"","set_file_name"],[105,2,1,"","set_id"],[105,2,1,"","set_inputs"],[105,2,1,"","sort_cipher"],[105,2,1,"","test_against_reference_code"],[105,2,1,"","test_vector_check"],[105,2,1,"","train_gohr_neural_distinguisher"],[105,2,1,"","train_neural_distinguisher"],[105,3,1,"","type"],[105,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.tea_block_cipher":[[106,1,1,"","TeaBlockCipher"]],"ciphers.block_ciphers.tea_block_cipher.TeaBlockCipher":[[106,2,1,"","add_AND_component"],[106,2,1,"","add_FSR_component"],[106,2,1,"","add_MODADD_component"],[106,2,1,"","add_MODSUB_component"],[106,2,1,"","add_NOT_component"],[106,2,1,"","add_OR_component"],[106,2,1,"","add_SBOX_component"],[106,2,1,"","add_SHIFT_component"],[106,2,1,"","add_XOR_component"],[106,2,1,"","add_cipher_output_component"],[106,2,1,"","add_concatenate_component"],[106,2,1,"","add_constant_component"],[106,2,1,"","add_intermediate_output_component"],[106,2,1,"","add_linear_layer_component"],[106,2,1,"","add_mix_column_component"],[106,2,1,"","add_permutation_component"],[106,2,1,"","add_reverse_component"],[106,2,1,"","add_rotate_component"],[106,2,1,"","add_round"],[106,2,1,"","add_round_key_output_component"],[106,2,1,"","add_round_output_component"],[106,2,1,"","add_shift_rows_component"],[106,2,1,"","add_sigma_component"],[106,2,1,"","add_suffix_to_components"],[106,2,1,"","add_theta_keccak_component"],[106,2,1,"","add_theta_xoodoo_component"],[106,2,1,"","add_variable_rotate_component"],[106,2,1,"","add_variable_shift_component"],[106,2,1,"","add_word_permutation_component"],[106,2,1,"","algebraic_tests"],[106,2,1,"","analyze_cipher"],[106,2,1,"","as_python_dictionary"],[106,2,1,"","avalanche_probability_vectors"],[106,2,1,"","cipher_inverse"],[106,2,1,"","cipher_partial_inverse"],[106,2,1,"","component_analysis_tests"],[106,2,1,"","component_from"],[106,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[106,2,1,"","continuous_avalanche_factor"],[106,2,1,"","continuous_diffusion_factor"],[106,2,1,"","continuous_diffusion_tests"],[106,2,1,"","continuous_neutrality_measure_for_bit_j"],[106,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[106,2,1,"","convert_to_compound_xor_cipher"],[106,3,1,"","current_round"],[106,3,1,"","current_round_number"],[106,3,1,"","current_round_number_of_components"],[106,2,1,"","delete_generated_evaluate_c_shared_library"],[106,2,1,"","diffusion_tests"],[106,2,1,"","evaluate"],[106,2,1,"","evaluate_using_c"],[106,2,1,"","evaluate_vectorized"],[106,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[106,3,1,"","family_name"],[106,3,1,"","file_name"],[106,2,1,"","find_good_input_difference_for_neural_distinguisher"],[106,2,1,"","find_impossible_property"],[106,2,1,"","generate_bit_based_c_code"],[106,2,1,"","generate_csv_report"],[106,2,1,"","generate_evaluate_c_code_shared_library"],[106,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[106,2,1,"","generate_word_based_c_code"],[106,2,1,"","get_all_components"],[106,2,1,"","get_all_components_ids"],[106,2,1,"","get_all_inputs_bit_positions"],[106,2,1,"","get_component_from_id"],[106,2,1,"","get_components_in_round"],[106,2,1,"","get_current_component_id"],[106,2,1,"","get_model"],[106,2,1,"","get_number_of_components_in_round"],[106,2,1,"","get_partial_cipher"],[106,2,1,"","get_round_from_component_id"],[106,2,1,"","get_sizes_of_components_by_type"],[106,3,1,"","id"],[106,2,1,"","impossible_differential_search"],[106,3,1,"","inputs"],[106,3,1,"","inputs_bit_size"],[106,2,1,"","inputs_size_to_dict"],[106,2,1,"","is_algebraically_secure"],[106,2,1,"","is_andrx"],[106,2,1,"","is_arx"],[106,2,1,"","is_power_of_2_word_based"],[106,2,1,"","is_shift_arx"],[106,2,1,"","is_spn"],[106,2,1,"","make_cipher_id"],[106,2,1,"","make_file_name"],[106,2,1,"","neural_network_blackbox_distinguisher_tests"],[106,2,1,"","neural_network_differential_distinguisher_tests"],[106,3,1,"","number_of_rounds"],[106,3,1,"","output_bit_size"],[106,2,1,"","polynomial_system"],[106,2,1,"","polynomial_system_at_round"],[106,2,1,"","print"],[106,2,1,"","print_as_python_dictionary"],[106,2,1,"","print_as_python_dictionary_to_file"],[106,2,1,"","print_component_analysis_as_radar_charts"],[106,2,1,"","print_evaluation_python_code"],[106,2,1,"","print_evaluation_python_code_to_file"],[106,2,1,"","print_input_information"],[106,3,1,"","reference_code"],[106,2,1,"","remove_key_schedule"],[106,2,1,"","remove_round_component"],[106,2,1,"","remove_round_component_from_id"],[106,3,1,"","rounds"],[106,3,1,"","rounds_as_list"],[106,2,1,"","run_autond_pipeline"],[106,2,1,"","set_file_name"],[106,2,1,"","set_id"],[106,2,1,"","set_inputs"],[106,2,1,"","sort_cipher"],[106,2,1,"","test_against_reference_code"],[106,2,1,"","test_vector_check"],[106,2,1,"","train_gohr_neural_distinguisher"],[106,2,1,"","train_neural_distinguisher"],[106,3,1,"","type"],[106,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.threefish_block_cipher":[[107,1,1,"","ThreefishBlockCipher"]],"ciphers.block_ciphers.threefish_block_cipher.ThreefishBlockCipher":[[107,2,1,"","add_AND_component"],[107,2,1,"","add_FSR_component"],[107,2,1,"","add_MODADD_component"],[107,2,1,"","add_MODSUB_component"],[107,2,1,"","add_NOT_component"],[107,2,1,"","add_OR_component"],[107,2,1,"","add_SBOX_component"],[107,2,1,"","add_SHIFT_component"],[107,2,1,"","add_XOR_component"],[107,2,1,"","add_cipher_output_component"],[107,2,1,"","add_concatenate_component"],[107,2,1,"","add_constant_component"],[107,2,1,"","add_intermediate_output_component"],[107,2,1,"","add_linear_layer_component"],[107,2,1,"","add_mix_column_component"],[107,2,1,"","add_permutation_component"],[107,2,1,"","add_reverse_component"],[107,2,1,"","add_rotate_component"],[107,2,1,"","add_round"],[107,2,1,"","add_round_key_output_component"],[107,2,1,"","add_round_output_component"],[107,2,1,"","add_shift_rows_component"],[107,2,1,"","add_sigma_component"],[107,2,1,"","add_subkey"],[107,2,1,"","add_suffix_to_components"],[107,2,1,"","add_theta_keccak_component"],[107,2,1,"","add_theta_xoodoo_component"],[107,2,1,"","add_variable_rotate_component"],[107,2,1,"","add_variable_shift_component"],[107,2,1,"","add_word_permutation_component"],[107,2,1,"","algebraic_tests"],[107,2,1,"","analyze_cipher"],[107,2,1,"","as_python_dictionary"],[107,2,1,"","avalanche_probability_vectors"],[107,2,1,"","cipher_inverse"],[107,2,1,"","cipher_partial_inverse"],[107,2,1,"","component_analysis_tests"],[107,2,1,"","component_from"],[107,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[107,2,1,"","continuous_avalanche_factor"],[107,2,1,"","continuous_diffusion_factor"],[107,2,1,"","continuous_diffusion_tests"],[107,2,1,"","continuous_neutrality_measure_for_bit_j"],[107,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[107,2,1,"","convert_to_compound_xor_cipher"],[107,3,1,"","current_round"],[107,3,1,"","current_round_number"],[107,3,1,"","current_round_number_of_components"],[107,2,1,"","delete_generated_evaluate_c_shared_library"],[107,2,1,"","diffusion_tests"],[107,2,1,"","evaluate"],[107,2,1,"","evaluate_using_c"],[107,2,1,"","evaluate_vectorized"],[107,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[107,3,1,"","family_name"],[107,3,1,"","file_name"],[107,2,1,"","find_good_input_difference_for_neural_distinguisher"],[107,2,1,"","find_impossible_property"],[107,2,1,"","generate_bit_based_c_code"],[107,2,1,"","generate_csv_report"],[107,2,1,"","generate_evaluate_c_code_shared_library"],[107,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[107,2,1,"","generate_word_based_c_code"],[107,2,1,"","get_all_components"],[107,2,1,"","get_all_components_ids"],[107,2,1,"","get_all_inputs_bit_positions"],[107,2,1,"","get_component_from_id"],[107,2,1,"","get_components_in_round"],[107,2,1,"","get_current_component_id"],[107,2,1,"","get_model"],[107,2,1,"","get_number_of_components_in_round"],[107,2,1,"","get_partial_cipher"],[107,2,1,"","get_round_from_component_id"],[107,2,1,"","get_sizes_of_components_by_type"],[107,3,1,"","id"],[107,2,1,"","impossible_differential_search"],[107,3,1,"","inputs"],[107,3,1,"","inputs_bit_size"],[107,2,1,"","inputs_size_to_dict"],[107,2,1,"","is_algebraically_secure"],[107,2,1,"","is_andrx"],[107,2,1,"","is_arx"],[107,2,1,"","is_power_of_2_word_based"],[107,2,1,"","is_shift_arx"],[107,2,1,"","is_spn"],[107,2,1,"","make_cipher_id"],[107,2,1,"","make_file_name"],[107,2,1,"","mix"],[107,2,1,"","neural_network_blackbox_distinguisher_tests"],[107,2,1,"","neural_network_differential_distinguisher_tests"],[107,3,1,"","number_of_rounds"],[107,3,1,"","output_bit_size"],[107,2,1,"","polynomial_system"],[107,2,1,"","polynomial_system_at_round"],[107,2,1,"","print"],[107,2,1,"","print_as_python_dictionary"],[107,2,1,"","print_as_python_dictionary_to_file"],[107,2,1,"","print_component_analysis_as_radar_charts"],[107,2,1,"","print_evaluation_python_code"],[107,2,1,"","print_evaluation_python_code_to_file"],[107,2,1,"","print_input_information"],[107,3,1,"","reference_code"],[107,2,1,"","remove_key_schedule"],[107,2,1,"","remove_round_component"],[107,2,1,"","remove_round_component_from_id"],[107,3,1,"","rounds"],[107,3,1,"","rounds_as_list"],[107,2,1,"","run_autond_pipeline"],[107,2,1,"","set_file_name"],[107,2,1,"","set_id"],[107,2,1,"","set_inputs"],[107,2,1,"","sort_cipher"],[107,2,1,"","subkey_schedule"],[107,2,1,"","test_against_reference_code"],[107,2,1,"","test_vector_check"],[107,2,1,"","train_gohr_neural_distinguisher"],[107,2,1,"","train_neural_distinguisher"],[107,3,1,"","type"],[107,2,1,"","word_permutation"],[107,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.twofish_block_cipher":[[108,1,1,"","TwofishBlockCipher"]],"ciphers.block_ciphers.twofish_block_cipher.TwofishBlockCipher":[[108,2,1,"","add_AND_component"],[108,2,1,"","add_FSR_component"],[108,2,1,"","add_MODADD_component"],[108,2,1,"","add_MODSUB_component"],[108,2,1,"","add_NOT_component"],[108,2,1,"","add_OR_component"],[108,2,1,"","add_SBOX_component"],[108,2,1,"","add_SHIFT_component"],[108,2,1,"","add_XOR_component"],[108,2,1,"","add_cipher_output_component"],[108,2,1,"","add_concatenate_component"],[108,2,1,"","add_constant_component"],[108,2,1,"","add_intermediate_output_component"],[108,2,1,"","add_linear_layer_component"],[108,2,1,"","add_mix_column_component"],[108,2,1,"","add_permutation_component"],[108,2,1,"","add_reverse_component"],[108,2,1,"","add_rotate_component"],[108,2,1,"","add_round"],[108,2,1,"","add_round_key_output_component"],[108,2,1,"","add_round_output_component"],[108,2,1,"","add_shift_rows_component"],[108,2,1,"","add_sigma_component"],[108,2,1,"","add_suffix_to_components"],[108,2,1,"","add_theta_keccak_component"],[108,2,1,"","add_theta_xoodoo_component"],[108,2,1,"","add_variable_rotate_component"],[108,2,1,"","add_variable_shift_component"],[108,2,1,"","add_word_permutation_component"],[108,2,1,"","algebraic_tests"],[108,2,1,"","analyze_cipher"],[108,2,1,"","as_python_dictionary"],[108,2,1,"","avalanche_probability_vectors"],[108,2,1,"","cipher_inverse"],[108,2,1,"","cipher_partial_inverse"],[108,2,1,"","component_analysis_tests"],[108,2,1,"","component_from"],[108,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[108,2,1,"","continuous_avalanche_factor"],[108,2,1,"","continuous_diffusion_factor"],[108,2,1,"","continuous_diffusion_tests"],[108,2,1,"","continuous_neutrality_measure_for_bit_j"],[108,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[108,2,1,"","convert_to_compound_xor_cipher"],[108,3,1,"","current_round"],[108,3,1,"","current_round_number"],[108,3,1,"","current_round_number_of_components"],[108,2,1,"","delete_generated_evaluate_c_shared_library"],[108,2,1,"","diffusion_tests"],[108,2,1,"","evaluate"],[108,2,1,"","evaluate_using_c"],[108,2,1,"","evaluate_vectorized"],[108,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[108,3,1,"","family_name"],[108,3,1,"","file_name"],[108,2,1,"","find_good_input_difference_for_neural_distinguisher"],[108,2,1,"","find_impossible_property"],[108,2,1,"","generate_bit_based_c_code"],[108,2,1,"","generate_csv_report"],[108,2,1,"","generate_evaluate_c_code_shared_library"],[108,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[108,2,1,"","generate_word_based_c_code"],[108,2,1,"","get_all_components"],[108,2,1,"","get_all_components_ids"],[108,2,1,"","get_all_inputs_bit_positions"],[108,2,1,"","get_component_from_id"],[108,2,1,"","get_components_in_round"],[108,2,1,"","get_current_component_id"],[108,2,1,"","get_model"],[108,2,1,"","get_number_of_components_in_round"],[108,2,1,"","get_partial_cipher"],[108,2,1,"","get_round_from_component_id"],[108,2,1,"","get_sizes_of_components_by_type"],[108,2,1,"","h_function"],[108,3,1,"","id"],[108,2,1,"","impossible_differential_search"],[108,3,1,"","inputs"],[108,3,1,"","inputs_bit_size"],[108,2,1,"","inputs_size_to_dict"],[108,2,1,"","is_algebraically_secure"],[108,2,1,"","is_andrx"],[108,2,1,"","is_arx"],[108,2,1,"","is_power_of_2_word_based"],[108,2,1,"","is_shift_arx"],[108,2,1,"","is_spn"],[108,2,1,"","make_cipher_id"],[108,2,1,"","make_file_name"],[108,2,1,"","neural_network_blackbox_distinguisher_tests"],[108,2,1,"","neural_network_differential_distinguisher_tests"],[108,3,1,"","number_of_rounds"],[108,3,1,"","output_bit_size"],[108,2,1,"","polynomial_system"],[108,2,1,"","polynomial_system_at_round"],[108,2,1,"","print"],[108,2,1,"","print_as_python_dictionary"],[108,2,1,"","print_as_python_dictionary_to_file"],[108,2,1,"","print_component_analysis_as_radar_charts"],[108,2,1,"","print_evaluation_python_code"],[108,2,1,"","print_evaluation_python_code_to_file"],[108,2,1,"","print_input_information"],[108,3,1,"","reference_code"],[108,2,1,"","remove_key_schedule"],[108,2,1,"","remove_round_component"],[108,2,1,"","remove_round_component_from_id"],[108,3,1,"","rounds"],[108,3,1,"","rounds_as_list"],[108,2,1,"","run_autond_pipeline"],[108,2,1,"","set_file_name"],[108,2,1,"","set_id"],[108,2,1,"","set_inputs"],[108,2,1,"","sort_cipher"],[108,2,1,"","test_against_reference_code"],[108,2,1,"","test_vector_check"],[108,2,1,"","train_gohr_neural_distinguisher"],[108,2,1,"","train_neural_distinguisher"],[108,3,1,"","type"],[108,2,1,"","zero_correlation_linear_search"]],"ciphers.block_ciphers.xtea_block_cipher":[[109,1,1,"","XTeaBlockCipher"]],"ciphers.block_ciphers.xtea_block_cipher.XTeaBlockCipher":[[109,2,1,"","add_AND_component"],[109,2,1,"","add_FSR_component"],[109,2,1,"","add_MODADD_component"],[109,2,1,"","add_MODSUB_component"],[109,2,1,"","add_NOT_component"],[109,2,1,"","add_OR_component"],[109,2,1,"","add_SBOX_component"],[109,2,1,"","add_SHIFT_component"],[109,2,1,"","add_XOR_component"],[109,2,1,"","add_cipher_output_component"],[109,2,1,"","add_concatenate_component"],[109,2,1,"","add_constant_component"],[109,2,1,"","add_intermediate_output_component"],[109,2,1,"","add_linear_layer_component"],[109,2,1,"","add_mix_column_component"],[109,2,1,"","add_permutation_component"],[109,2,1,"","add_reverse_component"],[109,2,1,"","add_rotate_component"],[109,2,1,"","add_round"],[109,2,1,"","add_round_key_output_component"],[109,2,1,"","add_round_output_component"],[109,2,1,"","add_shift_rows_component"],[109,2,1,"","add_sigma_component"],[109,2,1,"","add_suffix_to_components"],[109,2,1,"","add_theta_keccak_component"],[109,2,1,"","add_theta_xoodoo_component"],[109,2,1,"","add_variable_rotate_component"],[109,2,1,"","add_variable_shift_component"],[109,2,1,"","add_word_permutation_component"],[109,2,1,"","algebraic_tests"],[109,2,1,"","analyze_cipher"],[109,2,1,"","as_python_dictionary"],[109,2,1,"","avalanche_probability_vectors"],[109,2,1,"","cipher_inverse"],[109,2,1,"","cipher_partial_inverse"],[109,2,1,"","component_analysis_tests"],[109,2,1,"","component_from"],[109,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[109,2,1,"","continuous_avalanche_factor"],[109,2,1,"","continuous_diffusion_factor"],[109,2,1,"","continuous_diffusion_tests"],[109,2,1,"","continuous_neutrality_measure_for_bit_j"],[109,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[109,2,1,"","convert_to_compound_xor_cipher"],[109,3,1,"","current_round"],[109,3,1,"","current_round_number"],[109,3,1,"","current_round_number_of_components"],[109,2,1,"","delete_generated_evaluate_c_shared_library"],[109,2,1,"","diffusion_tests"],[109,2,1,"","evaluate"],[109,2,1,"","evaluate_using_c"],[109,2,1,"","evaluate_vectorized"],[109,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[109,3,1,"","family_name"],[109,3,1,"","file_name"],[109,2,1,"","find_good_input_difference_for_neural_distinguisher"],[109,2,1,"","find_impossible_property"],[109,2,1,"","generate_bit_based_c_code"],[109,2,1,"","generate_csv_report"],[109,2,1,"","generate_evaluate_c_code_shared_library"],[109,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[109,2,1,"","generate_word_based_c_code"],[109,2,1,"","get_all_components"],[109,2,1,"","get_all_components_ids"],[109,2,1,"","get_all_inputs_bit_positions"],[109,2,1,"","get_component_from_id"],[109,2,1,"","get_components_in_round"],[109,2,1,"","get_current_component_id"],[109,2,1,"","get_model"],[109,2,1,"","get_number_of_components_in_round"],[109,2,1,"","get_partial_cipher"],[109,2,1,"","get_round_from_component_id"],[109,2,1,"","get_sizes_of_components_by_type"],[109,3,1,"","id"],[109,2,1,"","impossible_differential_search"],[109,3,1,"","inputs"],[109,3,1,"","inputs_bit_size"],[109,2,1,"","inputs_size_to_dict"],[109,2,1,"","is_algebraically_secure"],[109,2,1,"","is_andrx"],[109,2,1,"","is_arx"],[109,2,1,"","is_power_of_2_word_based"],[109,2,1,"","is_shift_arx"],[109,2,1,"","is_spn"],[109,2,1,"","make_cipher_id"],[109,2,1,"","make_file_name"],[109,2,1,"","neural_network_blackbox_distinguisher_tests"],[109,2,1,"","neural_network_differential_distinguisher_tests"],[109,3,1,"","number_of_rounds"],[109,3,1,"","output_bit_size"],[109,2,1,"","polynomial_system"],[109,2,1,"","polynomial_system_at_round"],[109,2,1,"","print"],[109,2,1,"","print_as_python_dictionary"],[109,2,1,"","print_as_python_dictionary_to_file"],[109,2,1,"","print_component_analysis_as_radar_charts"],[109,2,1,"","print_evaluation_python_code"],[109,2,1,"","print_evaluation_python_code_to_file"],[109,2,1,"","print_input_information"],[109,3,1,"","reference_code"],[109,2,1,"","remove_key_schedule"],[109,2,1,"","remove_round_component"],[109,2,1,"","remove_round_component_from_id"],[109,3,1,"","rounds"],[109,3,1,"","rounds_as_list"],[109,2,1,"","run_autond_pipeline"],[109,2,1,"","set_file_name"],[109,2,1,"","set_id"],[109,2,1,"","set_inputs"],[109,2,1,"","sort_cipher"],[109,2,1,"","test_against_reference_code"],[109,2,1,"","test_vector_check"],[109,2,1,"","train_gohr_neural_distinguisher"],[109,2,1,"","train_neural_distinguisher"],[109,3,1,"","type"],[109,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions":[[110,0,0,"-","blake2_hash_function"],[111,0,0,"-","blake_hash_function"],[112,0,0,"-","md5_hash_function"],[113,0,0,"-","sha1_hash_function"],[114,0,0,"-","sha2_hash_function"],[115,0,0,"-","whirlpool_hash_function"]],"ciphers.hash_functions.blake2_hash_function":[[110,1,1,"","Blake2HashFunction"]],"ciphers.hash_functions.blake2_hash_function.Blake2HashFunction":[[110,2,1,"","add_AND_component"],[110,2,1,"","add_FSR_component"],[110,2,1,"","add_MODADD_component"],[110,2,1,"","add_MODSUB_component"],[110,2,1,"","add_NOT_component"],[110,2,1,"","add_OR_component"],[110,2,1,"","add_SBOX_component"],[110,2,1,"","add_SHIFT_component"],[110,2,1,"","add_XOR_component"],[110,2,1,"","add_cipher_output_component"],[110,2,1,"","add_concatenate_component"],[110,2,1,"","add_constant_component"],[110,2,1,"","add_intermediate_output_component"],[110,2,1,"","add_linear_layer_component"],[110,2,1,"","add_mix_column_component"],[110,2,1,"","add_permutation_component"],[110,2,1,"","add_reverse_component"],[110,2,1,"","add_rotate_component"],[110,2,1,"","add_round"],[110,2,1,"","add_round_key_output_component"],[110,2,1,"","add_round_output_component"],[110,2,1,"","add_shift_rows_component"],[110,2,1,"","add_sigma_component"],[110,2,1,"","add_suffix_to_components"],[110,2,1,"","add_theta_keccak_component"],[110,2,1,"","add_theta_xoodoo_component"],[110,2,1,"","add_variable_rotate_component"],[110,2,1,"","add_variable_shift_component"],[110,2,1,"","add_word_permutation_component"],[110,2,1,"","algebraic_tests"],[110,2,1,"","analyze_cipher"],[110,2,1,"","as_python_dictionary"],[110,2,1,"","avalanche_probability_vectors"],[110,2,1,"","cipher_inverse"],[110,2,1,"","cipher_partial_inverse"],[110,2,1,"","column_step"],[110,2,1,"","component_analysis_tests"],[110,2,1,"","component_from"],[110,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[110,2,1,"","continuous_avalanche_factor"],[110,2,1,"","continuous_diffusion_factor"],[110,2,1,"","continuous_diffusion_tests"],[110,2,1,"","continuous_neutrality_measure_for_bit_j"],[110,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[110,2,1,"","convert_to_compound_xor_cipher"],[110,3,1,"","current_round"],[110,3,1,"","current_round_number"],[110,3,1,"","current_round_number_of_components"],[110,2,1,"","define_number_of_rounds"],[110,2,1,"","define_permutations"],[110,2,1,"","define_rotation_amounts"],[110,2,1,"","delete_generated_evaluate_c_shared_library"],[110,2,1,"","diagonal_step"],[110,2,1,"","diffusion_tests"],[110,2,1,"","evaluate"],[110,2,1,"","evaluate_using_c"],[110,2,1,"","evaluate_vectorized"],[110,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[110,3,1,"","family_name"],[110,3,1,"","file_name"],[110,2,1,"","find_good_input_difference_for_neural_distinguisher"],[110,2,1,"","find_impossible_property"],[110,2,1,"","generate_bit_based_c_code"],[110,2,1,"","generate_csv_report"],[110,2,1,"","generate_evaluate_c_code_shared_library"],[110,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[110,2,1,"","generate_word_based_c_code"],[110,2,1,"","get_all_components"],[110,2,1,"","get_all_components_ids"],[110,2,1,"","get_all_inputs_bit_positions"],[110,2,1,"","get_component_from_id"],[110,2,1,"","get_components_in_round"],[110,2,1,"","get_current_component_id"],[110,2,1,"","get_model"],[110,2,1,"","get_number_of_components_in_round"],[110,2,1,"","get_partial_cipher"],[110,2,1,"","get_round_from_component_id"],[110,2,1,"","get_sizes_of_components_by_type"],[110,3,1,"","id"],[110,2,1,"","impossible_differential_search"],[110,3,1,"","inputs"],[110,3,1,"","inputs_bit_size"],[110,2,1,"","inputs_size_to_dict"],[110,2,1,"","is_algebraically_secure"],[110,2,1,"","is_andrx"],[110,2,1,"","is_arx"],[110,2,1,"","is_power_of_2_word_based"],[110,2,1,"","is_shift_arx"],[110,2,1,"","is_spn"],[110,2,1,"","make_cipher_id"],[110,2,1,"","make_file_name"],[110,2,1,"","neural_network_blackbox_distinguisher_tests"],[110,2,1,"","neural_network_differential_distinguisher_tests"],[110,3,1,"","number_of_rounds"],[110,3,1,"","output_bit_size"],[110,2,1,"","polynomial_system"],[110,2,1,"","polynomial_system_at_round"],[110,2,1,"","print"],[110,2,1,"","print_as_python_dictionary"],[110,2,1,"","print_as_python_dictionary_to_file"],[110,2,1,"","print_component_analysis_as_radar_charts"],[110,2,1,"","print_evaluation_python_code"],[110,2,1,"","print_evaluation_python_code_to_file"],[110,2,1,"","print_input_information"],[110,3,1,"","reference_code"],[110,2,1,"","remove_key_schedule"],[110,2,1,"","remove_round_component"],[110,2,1,"","remove_round_component_from_id"],[110,3,1,"","rounds"],[110,3,1,"","rounds_as_list"],[110,2,1,"","run_autond_pipeline"],[110,2,1,"","set_file_name"],[110,2,1,"","set_id"],[110,2,1,"","set_inputs"],[110,2,1,"","sort_cipher"],[110,2,1,"","state_transformation"],[110,2,1,"","test_against_reference_code"],[110,2,1,"","test_vector_check"],[110,2,1,"","train_gohr_neural_distinguisher"],[110,2,1,"","train_neural_distinguisher"],[110,3,1,"","type"],[110,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.blake_hash_function":[[111,1,1,"","BlakeHashFunction"]],"ciphers.hash_functions.blake_hash_function.BlakeHashFunction":[[111,2,1,"","add_AND_component"],[111,2,1,"","add_FSR_component"],[111,2,1,"","add_MODADD_component"],[111,2,1,"","add_MODSUB_component"],[111,2,1,"","add_NOT_component"],[111,2,1,"","add_OR_component"],[111,2,1,"","add_SBOX_component"],[111,2,1,"","add_SHIFT_component"],[111,2,1,"","add_XOR_component"],[111,2,1,"","add_cipher_output_component"],[111,2,1,"","add_concatenate_component"],[111,2,1,"","add_constant_component"],[111,2,1,"","add_intermediate_output_component"],[111,2,1,"","add_linear_layer_component"],[111,2,1,"","add_mix_column_component"],[111,2,1,"","add_permutation_component"],[111,2,1,"","add_reverse_component"],[111,2,1,"","add_rotate_component"],[111,2,1,"","add_round"],[111,2,1,"","add_round_key_output_component"],[111,2,1,"","add_round_output_component"],[111,2,1,"","add_shift_rows_component"],[111,2,1,"","add_sigma_component"],[111,2,1,"","add_suffix_to_components"],[111,2,1,"","add_theta_keccak_component"],[111,2,1,"","add_theta_xoodoo_component"],[111,2,1,"","add_variable_rotate_component"],[111,2,1,"","add_variable_shift_component"],[111,2,1,"","add_word_permutation_component"],[111,2,1,"","algebraic_tests"],[111,2,1,"","analyze_cipher"],[111,2,1,"","as_python_dictionary"],[111,2,1,"","avalanche_probability_vectors"],[111,2,1,"","cipher_inverse"],[111,2,1,"","cipher_partial_inverse"],[111,2,1,"","column_step"],[111,2,1,"","component_analysis_tests"],[111,2,1,"","component_from"],[111,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[111,2,1,"","continuous_avalanche_factor"],[111,2,1,"","continuous_diffusion_factor"],[111,2,1,"","continuous_diffusion_tests"],[111,2,1,"","continuous_neutrality_measure_for_bit_j"],[111,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[111,2,1,"","convert_to_compound_xor_cipher"],[111,3,1,"","current_round"],[111,3,1,"","current_round_number"],[111,3,1,"","current_round_number_of_components"],[111,2,1,"","define_constants"],[111,2,1,"","define_number_of_rounds"],[111,2,1,"","define_permutations"],[111,2,1,"","define_rotation_amounts"],[111,2,1,"","delete_generated_evaluate_c_shared_library"],[111,2,1,"","diagonal_step"],[111,2,1,"","diffusion_tests"],[111,2,1,"","evaluate"],[111,2,1,"","evaluate_using_c"],[111,2,1,"","evaluate_vectorized"],[111,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[111,3,1,"","family_name"],[111,3,1,"","file_name"],[111,2,1,"","find_good_input_difference_for_neural_distinguisher"],[111,2,1,"","find_impossible_property"],[111,2,1,"","generate_bit_based_c_code"],[111,2,1,"","generate_csv_report"],[111,2,1,"","generate_evaluate_c_code_shared_library"],[111,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[111,2,1,"","generate_word_based_c_code"],[111,2,1,"","get_all_components"],[111,2,1,"","get_all_components_ids"],[111,2,1,"","get_all_inputs_bit_positions"],[111,2,1,"","get_component_from_id"],[111,2,1,"","get_components_in_round"],[111,2,1,"","get_current_component_id"],[111,2,1,"","get_model"],[111,2,1,"","get_number_of_components_in_round"],[111,2,1,"","get_partial_cipher"],[111,2,1,"","get_round_from_component_id"],[111,2,1,"","get_sizes_of_components_by_type"],[111,3,1,"","id"],[111,2,1,"","impossible_differential_search"],[111,3,1,"","inputs"],[111,3,1,"","inputs_bit_size"],[111,2,1,"","inputs_size_to_dict"],[111,2,1,"","is_algebraically_secure"],[111,2,1,"","is_andrx"],[111,2,1,"","is_arx"],[111,2,1,"","is_power_of_2_word_based"],[111,2,1,"","is_shift_arx"],[111,2,1,"","is_spn"],[111,2,1,"","make_cipher_id"],[111,2,1,"","make_file_name"],[111,2,1,"","neural_network_blackbox_distinguisher_tests"],[111,2,1,"","neural_network_differential_distinguisher_tests"],[111,3,1,"","number_of_rounds"],[111,3,1,"","output_bit_size"],[111,2,1,"","polynomial_system"],[111,2,1,"","polynomial_system_at_round"],[111,2,1,"","print"],[111,2,1,"","print_as_python_dictionary"],[111,2,1,"","print_as_python_dictionary_to_file"],[111,2,1,"","print_component_analysis_as_radar_charts"],[111,2,1,"","print_evaluation_python_code"],[111,2,1,"","print_evaluation_python_code_to_file"],[111,2,1,"","print_input_information"],[111,3,1,"","reference_code"],[111,2,1,"","remove_key_schedule"],[111,2,1,"","remove_round_component"],[111,2,1,"","remove_round_component_from_id"],[111,3,1,"","rounds"],[111,3,1,"","rounds_as_list"],[111,2,1,"","run_autond_pipeline"],[111,2,1,"","set_file_name"],[111,2,1,"","set_id"],[111,2,1,"","set_inputs"],[111,2,1,"","sort_cipher"],[111,2,1,"","state_transformation"],[111,2,1,"","test_against_reference_code"],[111,2,1,"","test_vector_check"],[111,2,1,"","train_gohr_neural_distinguisher"],[111,2,1,"","train_neural_distinguisher"],[111,3,1,"","type"],[111,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.md5_hash_function":[[112,1,1,"","MD5HashFunction"]],"ciphers.hash_functions.md5_hash_function.MD5HashFunction":[[112,2,1,"","F"],[112,2,1,"","G"],[112,2,1,"","H"],[112,2,1,"","I"],[112,2,1,"","add_AND_component"],[112,2,1,"","add_FSR_component"],[112,2,1,"","add_MODADD_component"],[112,2,1,"","add_MODSUB_component"],[112,2,1,"","add_NOT_component"],[112,2,1,"","add_OR_component"],[112,2,1,"","add_SBOX_component"],[112,2,1,"","add_SHIFT_component"],[112,2,1,"","add_XOR_component"],[112,2,1,"","add_and_component_in_md5"],[112,2,1,"","add_cipher_output_component"],[112,2,1,"","add_concatenate_component"],[112,2,1,"","add_constant_component"],[112,2,1,"","add_intermediate_output_component"],[112,2,1,"","add_linear_layer_component"],[112,2,1,"","add_mix_column_component"],[112,2,1,"","add_modadd_component_in_md5"],[112,2,1,"","add_modadd_component_in_md5_for_x"],[112,2,1,"","add_not_component_in_md5"],[112,2,1,"","add_or_component_in_md5"],[112,2,1,"","add_permutation_component"],[112,2,1,"","add_reverse_component"],[112,2,1,"","add_rotate_component"],[112,2,1,"","add_rotate_component_in_md5"],[112,2,1,"","add_round"],[112,2,1,"","add_round_key_output_component"],[112,2,1,"","add_round_output_component"],[112,2,1,"","add_round_output_component_in_md5"],[112,2,1,"","add_shift_rows_component"],[112,2,1,"","add_sigma_component"],[112,2,1,"","add_suffix_to_components"],[112,2,1,"","add_theta_keccak_component"],[112,2,1,"","add_theta_xoodoo_component"],[112,2,1,"","add_variable_rotate_component"],[112,2,1,"","add_variable_shift_component"],[112,2,1,"","add_word_permutation_component"],[112,2,1,"","add_xor_component_in_md5"],[112,2,1,"","algebraic_tests"],[112,2,1,"","analyze_cipher"],[112,2,1,"","as_python_dictionary"],[112,2,1,"","avalanche_probability_vectors"],[112,2,1,"","cipher_inverse"],[112,2,1,"","cipher_partial_inverse"],[112,2,1,"","component_analysis_tests"],[112,2,1,"","component_from"],[112,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[112,2,1,"","continuous_avalanche_factor"],[112,2,1,"","continuous_diffusion_factor"],[112,2,1,"","continuous_diffusion_tests"],[112,2,1,"","continuous_neutrality_measure_for_bit_j"],[112,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[112,2,1,"","convert_to_compound_xor_cipher"],[112,3,1,"","current_round"],[112,3,1,"","current_round_number"],[112,3,1,"","current_round_number_of_components"],[112,2,1,"","delete_generated_evaluate_c_shared_library"],[112,2,1,"","diffusion_tests"],[112,2,1,"","evaluate"],[112,2,1,"","evaluate_using_c"],[112,2,1,"","evaluate_vectorized"],[112,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[112,3,1,"","family_name"],[112,3,1,"","file_name"],[112,2,1,"","find_good_input_difference_for_neural_distinguisher"],[112,2,1,"","find_impossible_property"],[112,2,1,"","generate_bit_based_c_code"],[112,2,1,"","generate_csv_report"],[112,2,1,"","generate_evaluate_c_code_shared_library"],[112,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[112,2,1,"","generate_word_based_c_code"],[112,2,1,"","get_all_components"],[112,2,1,"","get_all_components_ids"],[112,2,1,"","get_all_inputs_bit_positions"],[112,2,1,"","get_component_from_id"],[112,2,1,"","get_components_in_round"],[112,2,1,"","get_current_component_id"],[112,2,1,"","get_model"],[112,2,1,"","get_number_of_components_in_round"],[112,2,1,"","get_partial_cipher"],[112,2,1,"","get_round_from_component_id"],[112,2,1,"","get_sizes_of_components_by_type"],[112,3,1,"","id"],[112,2,1,"","impossible_differential_search"],[112,3,1,"","inputs"],[112,3,1,"","inputs_bit_size"],[112,2,1,"","inputs_size_to_dict"],[112,2,1,"","is_algebraically_secure"],[112,2,1,"","is_andrx"],[112,2,1,"","is_arx"],[112,2,1,"","is_power_of_2_word_based"],[112,2,1,"","is_shift_arx"],[112,2,1,"","is_spn"],[112,2,1,"","make_cipher_id"],[112,2,1,"","make_file_name"],[112,2,1,"","md5_step"],[112,2,1,"","neural_network_blackbox_distinguisher_tests"],[112,2,1,"","neural_network_differential_distinguisher_tests"],[112,3,1,"","number_of_rounds"],[112,3,1,"","output_bit_size"],[112,2,1,"","polynomial_system"],[112,2,1,"","polynomial_system_at_round"],[112,2,1,"","print"],[112,2,1,"","print_as_python_dictionary"],[112,2,1,"","print_as_python_dictionary_to_file"],[112,2,1,"","print_component_analysis_as_radar_charts"],[112,2,1,"","print_evaluation_python_code"],[112,2,1,"","print_evaluation_python_code_to_file"],[112,2,1,"","print_input_information"],[112,3,1,"","reference_code"],[112,2,1,"","remove_key_schedule"],[112,2,1,"","remove_round_component"],[112,2,1,"","remove_round_component_from_id"],[112,3,1,"","rounds"],[112,3,1,"","rounds_as_list"],[112,2,1,"","run_autond_pipeline"],[112,2,1,"","set_file_name"],[112,2,1,"","set_id"],[112,2,1,"","set_inputs"],[112,2,1,"","sort_cipher"],[112,2,1,"","test_against_reference_code"],[112,2,1,"","test_vector_check"],[112,2,1,"","train_gohr_neural_distinguisher"],[112,2,1,"","train_neural_distinguisher"],[112,3,1,"","type"],[112,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha1_hash_function":[[113,1,1,"","SHA1HashFunction"]],"ciphers.hash_functions.sha1_hash_function.SHA1HashFunction":[[113,2,1,"","add_AND_component"],[113,2,1,"","add_FSR_component"],[113,2,1,"","add_MODADD_component"],[113,2,1,"","add_MODSUB_component"],[113,2,1,"","add_NOT_component"],[113,2,1,"","add_OR_component"],[113,2,1,"","add_SBOX_component"],[113,2,1,"","add_SHIFT_component"],[113,2,1,"","add_XOR_component"],[113,2,1,"","add_and_component_in_sha1"],[113,2,1,"","add_cipher_output_component"],[113,2,1,"","add_concatenate_component"],[113,2,1,"","add_constant_component"],[113,2,1,"","add_intermediate_output_component"],[113,2,1,"","add_linear_layer_component"],[113,2,1,"","add_mix_column_component"],[113,2,1,"","add_modadd_component_in_sha1"],[113,2,1,"","add_permutation_component"],[113,2,1,"","add_reverse_component"],[113,2,1,"","add_rotate_component"],[113,2,1,"","add_rotate_component_in_sha1"],[113,2,1,"","add_round"],[113,2,1,"","add_round_key_output_component"],[113,2,1,"","add_round_output_component"],[113,2,1,"","add_round_output_component_in_sha1"],[113,2,1,"","add_shift_rows_component"],[113,2,1,"","add_sigma_component"],[113,2,1,"","add_suffix_to_components"],[113,2,1,"","add_theta_keccak_component"],[113,2,1,"","add_theta_xoodoo_component"],[113,2,1,"","add_variable_rotate_component"],[113,2,1,"","add_variable_shift_component"],[113,2,1,"","add_word_permutation_component"],[113,2,1,"","algebraic_tests"],[113,2,1,"","analyze_cipher"],[113,2,1,"","as_python_dictionary"],[113,2,1,"","avalanche_probability_vectors"],[113,2,1,"","cipher_inverse"],[113,2,1,"","cipher_partial_inverse"],[113,2,1,"","component_analysis_tests"],[113,2,1,"","component_from"],[113,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[113,2,1,"","compute_temp_and_s_30_b"],[113,2,1,"","continuous_avalanche_factor"],[113,2,1,"","continuous_diffusion_factor"],[113,2,1,"","continuous_diffusion_tests"],[113,2,1,"","continuous_neutrality_measure_for_bit_j"],[113,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[113,2,1,"","convert_to_compound_xor_cipher"],[113,3,1,"","current_round"],[113,3,1,"","current_round_number"],[113,3,1,"","current_round_number_of_components"],[113,2,1,"","delete_generated_evaluate_c_shared_library"],[113,2,1,"","diffusion_tests"],[113,2,1,"","evaluate"],[113,2,1,"","evaluate_using_c"],[113,2,1,"","evaluate_vectorized"],[113,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[113,3,1,"","family_name"],[113,3,1,"","file_name"],[113,2,1,"","find_good_input_difference_for_neural_distinguisher"],[113,2,1,"","find_impossible_property"],[113,2,1,"","generate_bit_based_c_code"],[113,2,1,"","generate_csv_report"],[113,2,1,"","generate_evaluate_c_code_shared_library"],[113,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[113,2,1,"","generate_word_based_c_code"],[113,2,1,"","get_all_components"],[113,2,1,"","get_all_components_ids"],[113,2,1,"","get_all_inputs_bit_positions"],[113,2,1,"","get_component_from_id"],[113,2,1,"","get_components_in_round"],[113,2,1,"","get_current_component_id"],[113,2,1,"","get_model"],[113,2,1,"","get_number_of_components_in_round"],[113,2,1,"","get_partial_cipher"],[113,2,1,"","get_round_from_component_id"],[113,2,1,"","get_sizes_of_components_by_type"],[113,3,1,"","id"],[113,2,1,"","impossible_differential_search"],[113,3,1,"","inputs"],[113,3,1,"","inputs_bit_size"],[113,2,1,"","inputs_size_to_dict"],[113,2,1,"","is_algebraically_secure"],[113,2,1,"","is_andrx"],[113,2,1,"","is_arx"],[113,2,1,"","is_power_of_2_word_based"],[113,2,1,"","is_shift_arx"],[113,2,1,"","is_spn"],[113,2,1,"","make_cipher_id"],[113,2,1,"","make_file_name"],[113,2,1,"","neural_network_blackbox_distinguisher_tests"],[113,2,1,"","neural_network_differential_distinguisher_tests"],[113,3,1,"","number_of_rounds"],[113,3,1,"","output_bit_size"],[113,2,1,"","polynomial_system"],[113,2,1,"","polynomial_system_at_round"],[113,2,1,"","print"],[113,2,1,"","print_as_python_dictionary"],[113,2,1,"","print_as_python_dictionary_to_file"],[113,2,1,"","print_component_analysis_as_radar_charts"],[113,2,1,"","print_evaluation_python_code"],[113,2,1,"","print_evaluation_python_code_to_file"],[113,2,1,"","print_input_information"],[113,3,1,"","reference_code"],[113,2,1,"","remove_key_schedule"],[113,2,1,"","remove_round_component"],[113,2,1,"","remove_round_component_from_id"],[113,3,1,"","rounds"],[113,2,1,"","rounds_0_19"],[113,2,1,"","rounds_20_39"],[113,2,1,"","rounds_40_59"],[113,3,1,"","rounds_as_list"],[113,2,1,"","run_autond_pipeline"],[113,2,1,"","schedule"],[113,2,1,"","set_file_name"],[113,2,1,"","set_id"],[113,2,1,"","set_inputs"],[113,2,1,"","sort_cipher"],[113,2,1,"","test_against_reference_code"],[113,2,1,"","test_vector_check"],[113,2,1,"","train_gohr_neural_distinguisher"],[113,2,1,"","train_neural_distinguisher"],[113,3,1,"","type"],[113,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.sha2_hash_function":[[114,1,1,"","SHA2HashFunction"]],"ciphers.hash_functions.sha2_hash_function.SHA2HashFunction":[[114,2,1,"","add_AND_component"],[114,2,1,"","add_FSR_component"],[114,2,1,"","add_MODADD_component"],[114,2,1,"","add_MODSUB_component"],[114,2,1,"","add_NOT_component"],[114,2,1,"","add_OR_component"],[114,2,1,"","add_SBOX_component"],[114,2,1,"","add_SHIFT_component"],[114,2,1,"","add_XOR_component"],[114,2,1,"","add_and_component_sha2"],[114,2,1,"","add_cipher_output_component"],[114,2,1,"","add_concatenate_component"],[114,2,1,"","add_constant_component"],[114,2,1,"","add_intermediate_output_component"],[114,2,1,"","add_linear_layer_component"],[114,2,1,"","add_mix_column_component"],[114,2,1,"","add_modadd_component_sha2"],[114,2,1,"","add_permutation_component"],[114,2,1,"","add_reverse_component"],[114,2,1,"","add_rotate_component"],[114,2,1,"","add_rotate_component_sha2"],[114,2,1,"","add_round"],[114,2,1,"","add_round_key_output_component"],[114,2,1,"","add_round_output_component"],[114,2,1,"","add_round_output_component_sha2"],[114,2,1,"","add_shift_rows_component"],[114,2,1,"","add_sigma_component"],[114,2,1,"","add_suffix_to_components"],[114,2,1,"","add_theta_keccak_component"],[114,2,1,"","add_theta_xoodoo_component"],[114,2,1,"","add_variable_rotate_component"],[114,2,1,"","add_variable_shift_component"],[114,2,1,"","add_word_permutation_component"],[114,2,1,"","add_xor_component_sha2"],[114,2,1,"","algebraic_tests"],[114,2,1,"","analyze_cipher"],[114,2,1,"","as_python_dictionary"],[114,2,1,"","avalanche_probability_vectors"],[114,2,1,"","cipher_inverse"],[114,2,1,"","cipher_partial_inverse"],[114,2,1,"","component_analysis_tests"],[114,2,1,"","component_from"],[114,2,1,"","compute_bsig0_bsig1"],[114,2,1,"","compute_ch"],[114,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[114,2,1,"","compute_maj"],[114,2,1,"","compute_ssig0_ssig1"],[114,2,1,"","continuous_avalanche_factor"],[114,2,1,"","continuous_diffusion_factor"],[114,2,1,"","continuous_diffusion_tests"],[114,2,1,"","continuous_neutrality_measure_for_bit_j"],[114,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[114,2,1,"","convert_to_compound_xor_cipher"],[114,3,1,"","current_round"],[114,3,1,"","current_round_number"],[114,3,1,"","current_round_number_of_components"],[114,2,1,"","delete_generated_evaluate_c_shared_library"],[114,2,1,"","diffusion_tests"],[114,2,1,"","evaluate"],[114,2,1,"","evaluate_using_c"],[114,2,1,"","evaluate_vectorized"],[114,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[114,3,1,"","family_name"],[114,3,1,"","file_name"],[114,2,1,"","find_good_input_difference_for_neural_distinguisher"],[114,2,1,"","find_impossible_property"],[114,2,1,"","generate_bit_based_c_code"],[114,2,1,"","generate_csv_report"],[114,2,1,"","generate_evaluate_c_code_shared_library"],[114,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[114,2,1,"","generate_word_based_c_code"],[114,2,1,"","get_all_components"],[114,2,1,"","get_all_components_ids"],[114,2,1,"","get_all_inputs_bit_positions"],[114,2,1,"","get_component_from_id"],[114,2,1,"","get_components_in_round"],[114,2,1,"","get_current_component_id"],[114,2,1,"","get_model"],[114,2,1,"","get_number_of_components_in_round"],[114,2,1,"","get_partial_cipher"],[114,2,1,"","get_round_from_component_id"],[114,2,1,"","get_sizes_of_components_by_type"],[114,3,1,"","id"],[114,2,1,"","impossible_differential_search"],[114,3,1,"","inputs"],[114,3,1,"","inputs_bit_size"],[114,2,1,"","inputs_size_to_dict"],[114,2,1,"","is_algebraically_secure"],[114,2,1,"","is_andrx"],[114,2,1,"","is_arx"],[114,2,1,"","is_power_of_2_word_based"],[114,2,1,"","is_shift_arx"],[114,2,1,"","is_spn"],[114,2,1,"","make_cipher_id"],[114,2,1,"","make_file_name"],[114,2,1,"","neural_network_blackbox_distinguisher_tests"],[114,2,1,"","neural_network_differential_distinguisher_tests"],[114,3,1,"","number_of_rounds"],[114,3,1,"","output_bit_size"],[114,2,1,"","polynomial_system"],[114,2,1,"","polynomial_system_at_round"],[114,2,1,"","print"],[114,2,1,"","print_as_python_dictionary"],[114,2,1,"","print_as_python_dictionary_to_file"],[114,2,1,"","print_component_analysis_as_radar_charts"],[114,2,1,"","print_evaluation_python_code"],[114,2,1,"","print_evaluation_python_code_to_file"],[114,2,1,"","print_input_information"],[114,3,1,"","reference_code"],[114,2,1,"","remove_key_schedule"],[114,2,1,"","remove_round_component"],[114,2,1,"","remove_round_component_from_id"],[114,2,1,"","round_function"],[114,3,1,"","rounds"],[114,3,1,"","rounds_as_list"],[114,2,1,"","run_autond_pipeline"],[114,2,1,"","schedule"],[114,2,1,"","set_file_name"],[114,2,1,"","set_id"],[114,2,1,"","set_inputs"],[114,2,1,"","sort_cipher"],[114,2,1,"","test_against_reference_code"],[114,2,1,"","test_vector_check"],[114,2,1,"","train_gohr_neural_distinguisher"],[114,2,1,"","train_neural_distinguisher"],[114,3,1,"","type"],[114,2,1,"","zero_correlation_linear_search"]],"ciphers.hash_functions.whirlpool_hash_function":[[115,1,1,"","WhirlpoolHashFunction"]],"ciphers.hash_functions.whirlpool_hash_function.WhirlpoolHashFunction":[[115,2,1,"","add_AND_component"],[115,2,1,"","add_FSR_component"],[115,2,1,"","add_MODADD_component"],[115,2,1,"","add_MODSUB_component"],[115,2,1,"","add_NOT_component"],[115,2,1,"","add_OR_component"],[115,2,1,"","add_SBOX_component"],[115,2,1,"","add_SHIFT_component"],[115,2,1,"","add_XOR_component"],[115,2,1,"","add_cipher_output_component"],[115,2,1,"","add_concatenate_component"],[115,2,1,"","add_constant_component"],[115,2,1,"","add_intermediate_output_component"],[115,2,1,"","add_linear_layer_component"],[115,2,1,"","add_mix_column_component"],[115,2,1,"","add_permutation_component"],[115,2,1,"","add_reverse_component"],[115,2,1,"","add_rotate_component"],[115,2,1,"","add_round"],[115,2,1,"","add_round_key_output_component"],[115,2,1,"","add_round_output_component"],[115,2,1,"","add_shift_rows_component"],[115,2,1,"","add_sigma_component"],[115,2,1,"","add_suffix_to_components"],[115,2,1,"","add_theta_keccak_component"],[115,2,1,"","add_theta_xoodoo_component"],[115,2,1,"","add_variable_rotate_component"],[115,2,1,"","add_variable_shift_component"],[115,2,1,"","add_word_permutation_component"],[115,2,1,"","algebraic_tests"],[115,2,1,"","analyze_cipher"],[115,2,1,"","as_python_dictionary"],[115,2,1,"","avalanche_probability_vectors"],[115,2,1,"","cipher_inverse"],[115,2,1,"","cipher_partial_inverse"],[115,2,1,"","component_analysis_tests"],[115,2,1,"","component_from"],[115,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[115,2,1,"","continuous_avalanche_factor"],[115,2,1,"","continuous_diffusion_factor"],[115,2,1,"","continuous_diffusion_tests"],[115,2,1,"","continuous_neutrality_measure_for_bit_j"],[115,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[115,2,1,"","convert_to_compound_xor_cipher"],[115,2,1,"","create_SBOX_component"],[115,2,1,"","create_mix_row_components"],[115,2,1,"","create_round_constant_component"],[115,2,1,"","create_shift_column_components"],[115,3,1,"","current_round"],[115,3,1,"","current_round_number"],[115,3,1,"","current_round_number_of_components"],[115,2,1,"","delete_generated_evaluate_c_shared_library"],[115,2,1,"","diffusion_tests"],[115,2,1,"","evaluate"],[115,2,1,"","evaluate_using_c"],[115,2,1,"","evaluate_vectorized"],[115,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[115,3,1,"","family_name"],[115,3,1,"","file_name"],[115,2,1,"","find_good_input_difference_for_neural_distinguisher"],[115,2,1,"","find_impossible_property"],[115,2,1,"","generate_bit_based_c_code"],[115,2,1,"","generate_csv_report"],[115,2,1,"","generate_evaluate_c_code_shared_library"],[115,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[115,2,1,"","generate_word_based_c_code"],[115,2,1,"","get_all_components"],[115,2,1,"","get_all_components_ids"],[115,2,1,"","get_all_inputs_bit_positions"],[115,2,1,"","get_component_from_id"],[115,2,1,"","get_components_in_round"],[115,2,1,"","get_current_component_id"],[115,2,1,"","get_model"],[115,2,1,"","get_number_of_components_in_round"],[115,2,1,"","get_partial_cipher"],[115,2,1,"","get_round_from_component_id"],[115,2,1,"","get_sizes_of_components_by_type"],[115,3,1,"","id"],[115,2,1,"","impossible_differential_search"],[115,3,1,"","inputs"],[115,3,1,"","inputs_bit_size"],[115,2,1,"","inputs_size_to_dict"],[115,2,1,"","is_algebraically_secure"],[115,2,1,"","is_andrx"],[115,2,1,"","is_arx"],[115,2,1,"","is_power_of_2_word_based"],[115,2,1,"","is_shift_arx"],[115,2,1,"","is_spn"],[115,2,1,"","make_cipher_id"],[115,2,1,"","make_file_name"],[115,2,1,"","neural_network_blackbox_distinguisher_tests"],[115,2,1,"","neural_network_differential_distinguisher_tests"],[115,3,1,"","number_of_rounds"],[115,3,1,"","output_bit_size"],[115,2,1,"","polynomial_system"],[115,2,1,"","polynomial_system_at_round"],[115,2,1,"","print"],[115,2,1,"","print_as_python_dictionary"],[115,2,1,"","print_as_python_dictionary_to_file"],[115,2,1,"","print_component_analysis_as_radar_charts"],[115,2,1,"","print_evaluation_python_code"],[115,2,1,"","print_evaluation_python_code_to_file"],[115,2,1,"","print_input_information"],[115,3,1,"","reference_code"],[115,2,1,"","remove_key_schedule"],[115,2,1,"","remove_round_component"],[115,2,1,"","remove_round_component_from_id"],[115,3,1,"","rounds"],[115,3,1,"","rounds_as_list"],[115,2,1,"","run_autond_pipeline"],[115,2,1,"","set_file_name"],[115,2,1,"","set_id"],[115,2,1,"","set_inputs"],[115,2,1,"","sort_cipher"],[115,2,1,"","test_against_reference_code"],[115,2,1,"","test_vector_check"],[115,2,1,"","train_gohr_neural_distinguisher"],[115,2,1,"","train_neural_distinguisher"],[115,3,1,"","type"],[115,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations":[[116,0,0,"-","ascon_permutation"],[117,0,0,"-","ascon_sbox_sigma_no_matrix_permutation"],[118,0,0,"-","ascon_sbox_sigma_permutation"],[119,0,0,"-","chacha_permutation"],[120,0,0,"-","gift_permutation"],[121,0,0,"-","gift_sbox_permutation"],[122,0,0,"-","gimli_permutation"],[123,0,0,"-","gimli_sbox_permutation"],[124,0,0,"-","grain_core_permutation"],[125,0,0,"-","keccak_invertible_permutation"],[126,0,0,"-","keccak_permutation"],[127,0,0,"-","keccak_sbox_permutation"],[128,0,0,"-","photon_permutation"],[129,0,0,"-","salsa_permutation"],[130,0,0,"-","sparkle_permutation"],[131,0,0,"-","spongent_pi_fsr_permutation"],[132,0,0,"-","spongent_pi_permutation"],[133,0,0,"-","spongent_pi_precomputation_permutation"],[134,0,0,"-","tinyjambu_32bits_word_permutation"],[135,0,0,"-","tinyjambu_fsr_32bits_word_permutation"],[136,0,0,"-","tinyjambu_permutation"],[137,0,0,"-","util"],[138,0,0,"-","xoodoo_invertible_permutation"],[139,0,0,"-","xoodoo_permutation"],[140,0,0,"-","xoodoo_sbox_permutation"]],"ciphers.permutations.ascon_permutation":[[116,1,1,"","AsconPermutation"]],"ciphers.permutations.ascon_permutation.AsconPermutation":[[116,2,1,"","add_AND_component"],[116,2,1,"","add_FSR_component"],[116,2,1,"","add_MODADD_component"],[116,2,1,"","add_MODSUB_component"],[116,2,1,"","add_NOT_component"],[116,2,1,"","add_OR_component"],[116,2,1,"","add_SBOX_component"],[116,2,1,"","add_SHIFT_component"],[116,2,1,"","add_XOR_component"],[116,2,1,"","add_cipher_output_component"],[116,2,1,"","add_concatenate_component"],[116,2,1,"","add_constant_component"],[116,2,1,"","add_intermediate_output_component"],[116,2,1,"","add_linear_layer_component"],[116,2,1,"","add_mix_column_component"],[116,2,1,"","add_permutation_component"],[116,2,1,"","add_reverse_component"],[116,2,1,"","add_rotate_component"],[116,2,1,"","add_round"],[116,2,1,"","add_round_key_output_component"],[116,2,1,"","add_round_output_component"],[116,2,1,"","add_shift_rows_component"],[116,2,1,"","add_sigma_component"],[116,2,1,"","add_suffix_to_components"],[116,2,1,"","add_theta_keccak_component"],[116,2,1,"","add_theta_xoodoo_component"],[116,2,1,"","add_variable_rotate_component"],[116,2,1,"","add_variable_shift_component"],[116,2,1,"","add_word_permutation_component"],[116,2,1,"","algebraic_tests"],[116,2,1,"","analyze_cipher"],[116,2,1,"","as_python_dictionary"],[116,2,1,"","avalanche_probability_vectors"],[116,2,1,"","cipher_inverse"],[116,2,1,"","cipher_partial_inverse"],[116,2,1,"","component_analysis_tests"],[116,2,1,"","component_from"],[116,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[116,2,1,"","continuous_avalanche_factor"],[116,2,1,"","continuous_diffusion_factor"],[116,2,1,"","continuous_diffusion_tests"],[116,2,1,"","continuous_neutrality_measure_for_bit_j"],[116,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[116,2,1,"","convert_to_compound_xor_cipher"],[116,3,1,"","current_round"],[116,3,1,"","current_round_number"],[116,3,1,"","current_round_number_of_components"],[116,2,1,"","delete_generated_evaluate_c_shared_library"],[116,2,1,"","diffusion_tests"],[116,2,1,"","evaluate"],[116,2,1,"","evaluate_using_c"],[116,2,1,"","evaluate_vectorized"],[116,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[116,3,1,"","family_name"],[116,3,1,"","file_name"],[116,2,1,"","find_good_input_difference_for_neural_distinguisher"],[116,2,1,"","find_impossible_property"],[116,2,1,"","generate_bit_based_c_code"],[116,2,1,"","generate_csv_report"],[116,2,1,"","generate_evaluate_c_code_shared_library"],[116,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[116,2,1,"","generate_word_based_c_code"],[116,2,1,"","get_all_components"],[116,2,1,"","get_all_components_ids"],[116,2,1,"","get_all_inputs_bit_positions"],[116,2,1,"","get_component_from_id"],[116,2,1,"","get_components_in_round"],[116,2,1,"","get_current_component_id"],[116,2,1,"","get_model"],[116,2,1,"","get_number_of_components_in_round"],[116,2,1,"","get_partial_cipher"],[116,2,1,"","get_round_from_component_id"],[116,2,1,"","get_sizes_of_components_by_type"],[116,3,1,"","id"],[116,2,1,"","impossible_differential_search"],[116,3,1,"","inputs"],[116,3,1,"","inputs_bit_size"],[116,2,1,"","inputs_size_to_dict"],[116,2,1,"","is_algebraically_secure"],[116,2,1,"","is_andrx"],[116,2,1,"","is_arx"],[116,2,1,"","is_power_of_2_word_based"],[116,2,1,"","is_shift_arx"],[116,2,1,"","is_spn"],[116,2,1,"","make_cipher_id"],[116,2,1,"","make_file_name"],[116,2,1,"","neural_network_blackbox_distinguisher_tests"],[116,2,1,"","neural_network_differential_distinguisher_tests"],[116,3,1,"","number_of_rounds"],[116,3,1,"","output_bit_size"],[116,2,1,"","polynomial_system"],[116,2,1,"","polynomial_system_at_round"],[116,2,1,"","print"],[116,2,1,"","print_as_python_dictionary"],[116,2,1,"","print_as_python_dictionary_to_file"],[116,2,1,"","print_component_analysis_as_radar_charts"],[116,2,1,"","print_evaluation_python_code"],[116,2,1,"","print_evaluation_python_code_to_file"],[116,2,1,"","print_input_information"],[116,3,1,"","reference_code"],[116,2,1,"","remove_key_schedule"],[116,2,1,"","remove_round_component"],[116,2,1,"","remove_round_component_from_id"],[116,2,1,"","round_function"],[116,3,1,"","rounds"],[116,3,1,"","rounds_as_list"],[116,2,1,"","run_autond_pipeline"],[116,2,1,"","set_file_name"],[116,2,1,"","set_id"],[116,2,1,"","set_inputs"],[116,2,1,"","sort_cipher"],[116,2,1,"","test_against_reference_code"],[116,2,1,"","test_vector_check"],[116,2,1,"","train_gohr_neural_distinguisher"],[116,2,1,"","train_neural_distinguisher"],[116,3,1,"","type"],[116,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation":[[117,1,1,"","AsconSboxSigmaNoMatrixPermutation"]],"ciphers.permutations.ascon_sbox_sigma_no_matrix_permutation.AsconSboxSigmaNoMatrixPermutation":[[117,2,1,"","add_AND_component"],[117,2,1,"","add_FSR_component"],[117,2,1,"","add_MODADD_component"],[117,2,1,"","add_MODSUB_component"],[117,2,1,"","add_NOT_component"],[117,2,1,"","add_OR_component"],[117,2,1,"","add_SBOX_component"],[117,2,1,"","add_SHIFT_component"],[117,2,1,"","add_XOR_component"],[117,2,1,"","add_cipher_output_component"],[117,2,1,"","add_concatenate_component"],[117,2,1,"","add_constant_component"],[117,2,1,"","add_intermediate_output_component"],[117,2,1,"","add_linear_layer_component"],[117,2,1,"","add_mix_column_component"],[117,2,1,"","add_permutation_component"],[117,2,1,"","add_reverse_component"],[117,2,1,"","add_rotate_component"],[117,2,1,"","add_round"],[117,2,1,"","add_round_key_output_component"],[117,2,1,"","add_round_output_component"],[117,2,1,"","add_shift_rows_component"],[117,2,1,"","add_sigma_component"],[117,2,1,"","add_suffix_to_components"],[117,2,1,"","add_theta_keccak_component"],[117,2,1,"","add_theta_xoodoo_component"],[117,2,1,"","add_variable_rotate_component"],[117,2,1,"","add_variable_shift_component"],[117,2,1,"","add_word_permutation_component"],[117,2,1,"","algebraic_tests"],[117,2,1,"","analyze_cipher"],[117,2,1,"","as_python_dictionary"],[117,2,1,"","avalanche_probability_vectors"],[117,2,1,"","cipher_inverse"],[117,2,1,"","cipher_partial_inverse"],[117,2,1,"","component_analysis_tests"],[117,2,1,"","component_from"],[117,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[117,2,1,"","continuous_avalanche_factor"],[117,2,1,"","continuous_diffusion_factor"],[117,2,1,"","continuous_diffusion_tests"],[117,2,1,"","continuous_neutrality_measure_for_bit_j"],[117,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[117,2,1,"","convert_to_compound_xor_cipher"],[117,3,1,"","current_round"],[117,3,1,"","current_round_number"],[117,3,1,"","current_round_number_of_components"],[117,2,1,"","delete_generated_evaluate_c_shared_library"],[117,2,1,"","diffusion_tests"],[117,2,1,"","evaluate"],[117,2,1,"","evaluate_using_c"],[117,2,1,"","evaluate_vectorized"],[117,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[117,3,1,"","family_name"],[117,3,1,"","file_name"],[117,2,1,"","find_good_input_difference_for_neural_distinguisher"],[117,2,1,"","find_impossible_property"],[117,2,1,"","generate_bit_based_c_code"],[117,2,1,"","generate_csv_report"],[117,2,1,"","generate_evaluate_c_code_shared_library"],[117,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[117,2,1,"","generate_word_based_c_code"],[117,2,1,"","get_all_components"],[117,2,1,"","get_all_components_ids"],[117,2,1,"","get_all_inputs_bit_positions"],[117,2,1,"","get_component_from_id"],[117,2,1,"","get_components_in_round"],[117,2,1,"","get_current_component_id"],[117,2,1,"","get_model"],[117,2,1,"","get_number_of_components_in_round"],[117,2,1,"","get_partial_cipher"],[117,2,1,"","get_round_from_component_id"],[117,2,1,"","get_sizes_of_components_by_type"],[117,3,1,"","id"],[117,2,1,"","impossible_differential_search"],[117,3,1,"","inputs"],[117,3,1,"","inputs_bit_size"],[117,2,1,"","inputs_size_to_dict"],[117,2,1,"","is_algebraically_secure"],[117,2,1,"","is_andrx"],[117,2,1,"","is_arx"],[117,2,1,"","is_power_of_2_word_based"],[117,2,1,"","is_shift_arx"],[117,2,1,"","is_spn"],[117,2,1,"","make_cipher_id"],[117,2,1,"","make_file_name"],[117,2,1,"","neural_network_blackbox_distinguisher_tests"],[117,2,1,"","neural_network_differential_distinguisher_tests"],[117,3,1,"","number_of_rounds"],[117,3,1,"","output_bit_size"],[117,2,1,"","polynomial_system"],[117,2,1,"","polynomial_system_at_round"],[117,2,1,"","print"],[117,2,1,"","print_as_python_dictionary"],[117,2,1,"","print_as_python_dictionary_to_file"],[117,2,1,"","print_component_analysis_as_radar_charts"],[117,2,1,"","print_evaluation_python_code"],[117,2,1,"","print_evaluation_python_code_to_file"],[117,2,1,"","print_input_information"],[117,3,1,"","reference_code"],[117,2,1,"","remove_key_schedule"],[117,2,1,"","remove_round_component"],[117,2,1,"","remove_round_component_from_id"],[117,2,1,"","round_function"],[117,3,1,"","rounds"],[117,3,1,"","rounds_as_list"],[117,2,1,"","run_autond_pipeline"],[117,2,1,"","set_file_name"],[117,2,1,"","set_id"],[117,2,1,"","set_inputs"],[117,2,1,"","sort_cipher"],[117,2,1,"","test_against_reference_code"],[117,2,1,"","test_vector_check"],[117,2,1,"","train_gohr_neural_distinguisher"],[117,2,1,"","train_neural_distinguisher"],[117,3,1,"","type"],[117,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.ascon_sbox_sigma_permutation":[[118,1,1,"","AsconSboxSigmaPermutation"]],"ciphers.permutations.ascon_sbox_sigma_permutation.AsconSboxSigmaPermutation":[[118,2,1,"","add_AND_component"],[118,2,1,"","add_FSR_component"],[118,2,1,"","add_MODADD_component"],[118,2,1,"","add_MODSUB_component"],[118,2,1,"","add_NOT_component"],[118,2,1,"","add_OR_component"],[118,2,1,"","add_SBOX_component"],[118,2,1,"","add_SHIFT_component"],[118,2,1,"","add_XOR_component"],[118,2,1,"","add_cipher_output_component"],[118,2,1,"","add_concatenate_component"],[118,2,1,"","add_constant_component"],[118,2,1,"","add_intermediate_output_component"],[118,2,1,"","add_linear_layer_component"],[118,2,1,"","add_mix_column_component"],[118,2,1,"","add_permutation_component"],[118,2,1,"","add_reverse_component"],[118,2,1,"","add_rotate_component"],[118,2,1,"","add_round"],[118,2,1,"","add_round_key_output_component"],[118,2,1,"","add_round_output_component"],[118,2,1,"","add_shift_rows_component"],[118,2,1,"","add_sigma_component"],[118,2,1,"","add_suffix_to_components"],[118,2,1,"","add_theta_keccak_component"],[118,2,1,"","add_theta_xoodoo_component"],[118,2,1,"","add_variable_rotate_component"],[118,2,1,"","add_variable_shift_component"],[118,2,1,"","add_word_permutation_component"],[118,2,1,"","algebraic_tests"],[118,2,1,"","analyze_cipher"],[118,2,1,"","as_python_dictionary"],[118,2,1,"","avalanche_probability_vectors"],[118,2,1,"","cipher_inverse"],[118,2,1,"","cipher_partial_inverse"],[118,2,1,"","component_analysis_tests"],[118,2,1,"","component_from"],[118,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[118,2,1,"","continuous_avalanche_factor"],[118,2,1,"","continuous_diffusion_factor"],[118,2,1,"","continuous_diffusion_tests"],[118,2,1,"","continuous_neutrality_measure_for_bit_j"],[118,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[118,2,1,"","convert_to_compound_xor_cipher"],[118,3,1,"","current_round"],[118,3,1,"","current_round_number"],[118,3,1,"","current_round_number_of_components"],[118,2,1,"","delete_generated_evaluate_c_shared_library"],[118,2,1,"","diffusion_tests"],[118,2,1,"","evaluate"],[118,2,1,"","evaluate_using_c"],[118,2,1,"","evaluate_vectorized"],[118,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[118,3,1,"","family_name"],[118,3,1,"","file_name"],[118,2,1,"","find_good_input_difference_for_neural_distinguisher"],[118,2,1,"","find_impossible_property"],[118,2,1,"","generate_bit_based_c_code"],[118,2,1,"","generate_csv_report"],[118,2,1,"","generate_evaluate_c_code_shared_library"],[118,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[118,2,1,"","generate_word_based_c_code"],[118,2,1,"","get_all_components"],[118,2,1,"","get_all_components_ids"],[118,2,1,"","get_all_inputs_bit_positions"],[118,2,1,"","get_component_from_id"],[118,2,1,"","get_components_in_round"],[118,2,1,"","get_current_component_id"],[118,2,1,"","get_model"],[118,2,1,"","get_number_of_components_in_round"],[118,2,1,"","get_partial_cipher"],[118,2,1,"","get_round_from_component_id"],[118,2,1,"","get_sizes_of_components_by_type"],[118,3,1,"","id"],[118,2,1,"","impossible_differential_search"],[118,3,1,"","inputs"],[118,3,1,"","inputs_bit_size"],[118,2,1,"","inputs_size_to_dict"],[118,2,1,"","is_algebraically_secure"],[118,2,1,"","is_andrx"],[118,2,1,"","is_arx"],[118,2,1,"","is_power_of_2_word_based"],[118,2,1,"","is_shift_arx"],[118,2,1,"","is_spn"],[118,2,1,"","make_cipher_id"],[118,2,1,"","make_file_name"],[118,2,1,"","neural_network_blackbox_distinguisher_tests"],[118,2,1,"","neural_network_differential_distinguisher_tests"],[118,3,1,"","number_of_rounds"],[118,3,1,"","output_bit_size"],[118,2,1,"","polynomial_system"],[118,2,1,"","polynomial_system_at_round"],[118,2,1,"","print"],[118,2,1,"","print_as_python_dictionary"],[118,2,1,"","print_as_python_dictionary_to_file"],[118,2,1,"","print_component_analysis_as_radar_charts"],[118,2,1,"","print_evaluation_python_code"],[118,2,1,"","print_evaluation_python_code_to_file"],[118,2,1,"","print_input_information"],[118,3,1,"","reference_code"],[118,2,1,"","remove_key_schedule"],[118,2,1,"","remove_round_component"],[118,2,1,"","remove_round_component_from_id"],[118,2,1,"","round_function"],[118,3,1,"","rounds"],[118,3,1,"","rounds_as_list"],[118,2,1,"","run_autond_pipeline"],[118,2,1,"","set_file_name"],[118,2,1,"","set_id"],[118,2,1,"","set_inputs"],[118,2,1,"","sort_cipher"],[118,2,1,"","test_against_reference_code"],[118,2,1,"","test_vector_check"],[118,2,1,"","train_gohr_neural_distinguisher"],[118,2,1,"","train_neural_distinguisher"],[118,3,1,"","type"],[118,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.chacha_permutation":[[119,1,1,"","ChachaPermutation"]],"ciphers.permutations.chacha_permutation.ChachaPermutation":[[119,2,1,"","add_AND_component"],[119,2,1,"","add_FSR_component"],[119,2,1,"","add_MODADD_component"],[119,2,1,"","add_MODSUB_component"],[119,2,1,"","add_NOT_component"],[119,2,1,"","add_OR_component"],[119,2,1,"","add_SBOX_component"],[119,2,1,"","add_SHIFT_component"],[119,2,1,"","add_XOR_component"],[119,2,1,"","add_cipher_output_component"],[119,2,1,"","add_concatenate_component"],[119,2,1,"","add_constant_component"],[119,2,1,"","add_intermediate_output_component"],[119,2,1,"","add_linear_layer_component"],[119,2,1,"","add_mix_column_component"],[119,2,1,"","add_permutation_component"],[119,2,1,"","add_reverse_component"],[119,2,1,"","add_rotate_component"],[119,2,1,"","add_round"],[119,2,1,"","add_round_key_output_component"],[119,2,1,"","add_round_output_component"],[119,2,1,"","add_shift_rows_component"],[119,2,1,"","add_sigma_component"],[119,2,1,"","add_suffix_to_components"],[119,2,1,"","add_theta_keccak_component"],[119,2,1,"","add_theta_xoodoo_component"],[119,2,1,"","add_variable_rotate_component"],[119,2,1,"","add_variable_shift_component"],[119,2,1,"","add_word_permutation_component"],[119,2,1,"","algebraic_tests"],[119,2,1,"","analyze_cipher"],[119,2,1,"","as_python_dictionary"],[119,2,1,"","avalanche_probability_vectors"],[119,2,1,"","bottom_half_quarter_round"],[119,2,1,"","cipher_inverse"],[119,2,1,"","cipher_partial_inverse"],[119,2,1,"","component_analysis_tests"],[119,2,1,"","component_from"],[119,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[119,2,1,"","continuous_avalanche_factor"],[119,2,1,"","continuous_diffusion_factor"],[119,2,1,"","continuous_diffusion_tests"],[119,2,1,"","continuous_neutrality_measure_for_bit_j"],[119,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[119,2,1,"","convert_to_compound_xor_cipher"],[119,3,1,"","current_round"],[119,3,1,"","current_round_number"],[119,3,1,"","current_round_number_of_components"],[119,2,1,"","delete_generated_evaluate_c_shared_library"],[119,2,1,"","diffusion_tests"],[119,2,1,"","evaluate"],[119,2,1,"","evaluate_using_c"],[119,2,1,"","evaluate_vectorized"],[119,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[119,3,1,"","family_name"],[119,3,1,"","file_name"],[119,2,1,"","find_good_input_difference_for_neural_distinguisher"],[119,2,1,"","find_impossible_property"],[119,2,1,"","generate_bit_based_c_code"],[119,2,1,"","generate_csv_report"],[119,2,1,"","generate_evaluate_c_code_shared_library"],[119,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[119,2,1,"","generate_word_based_c_code"],[119,2,1,"","get_all_components"],[119,2,1,"","get_all_components_ids"],[119,2,1,"","get_all_inputs_bit_positions"],[119,2,1,"","get_component_from_id"],[119,2,1,"","get_components_in_round"],[119,2,1,"","get_current_component_id"],[119,2,1,"","get_model"],[119,2,1,"","get_number_of_components_in_round"],[119,2,1,"","get_partial_cipher"],[119,2,1,"","get_round_from_component_id"],[119,2,1,"","get_sizes_of_components_by_type"],[119,3,1,"","id"],[119,2,1,"","impossible_differential_search"],[119,3,1,"","inputs"],[119,3,1,"","inputs_bit_size"],[119,2,1,"","inputs_size_to_dict"],[119,2,1,"","is_algebraically_secure"],[119,2,1,"","is_andrx"],[119,2,1,"","is_arx"],[119,2,1,"","is_power_of_2_word_based"],[119,2,1,"","is_shift_arx"],[119,2,1,"","is_spn"],[119,2,1,"","make_cipher_id"],[119,2,1,"","make_file_name"],[119,2,1,"","neural_network_blackbox_distinguisher_tests"],[119,2,1,"","neural_network_differential_distinguisher_tests"],[119,3,1,"","number_of_rounds"],[119,3,1,"","output_bit_size"],[119,2,1,"","polynomial_system"],[119,2,1,"","polynomial_system_at_round"],[119,2,1,"","print"],[119,2,1,"","print_as_python_dictionary"],[119,2,1,"","print_as_python_dictionary_to_file"],[119,2,1,"","print_component_analysis_as_radar_charts"],[119,2,1,"","print_evaluation_python_code"],[119,2,1,"","print_evaluation_python_code_to_file"],[119,2,1,"","print_input_information"],[119,3,1,"","reference_code"],[119,2,1,"","remove_key_schedule"],[119,2,1,"","remove_round_component"],[119,2,1,"","remove_round_component_from_id"],[119,3,1,"","rounds"],[119,3,1,"","rounds_as_list"],[119,2,1,"","run_autond_pipeline"],[119,2,1,"","set_file_name"],[119,2,1,"","set_id"],[119,2,1,"","set_inputs"],[119,2,1,"","sort_cipher"],[119,2,1,"","test_against_reference_code"],[119,2,1,"","test_vector_check"],[119,2,1,"","top_half_quarter_round"],[119,2,1,"","train_gohr_neural_distinguisher"],[119,2,1,"","train_neural_distinguisher"],[119,3,1,"","type"],[119,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_permutation":[[120,1,1,"","GiftPermutation"]],"ciphers.permutations.gift_permutation.GiftPermutation":[[120,2,1,"","add_AND_component"],[120,2,1,"","add_FSR_component"],[120,2,1,"","add_MODADD_component"],[120,2,1,"","add_MODSUB_component"],[120,2,1,"","add_NOT_component"],[120,2,1,"","add_OR_component"],[120,2,1,"","add_SBOX_component"],[120,2,1,"","add_SHIFT_component"],[120,2,1,"","add_XOR_component"],[120,2,1,"","add_cipher_output_component"],[120,2,1,"","add_concatenate_component"],[120,2,1,"","add_constant_component"],[120,2,1,"","add_intermediate_output_component"],[120,2,1,"","add_linear_layer_component"],[120,2,1,"","add_mix_column_component"],[120,2,1,"","add_permutation_component"],[120,2,1,"","add_reverse_component"],[120,2,1,"","add_rotate_component"],[120,2,1,"","add_round"],[120,2,1,"","add_round_key_output_component"],[120,2,1,"","add_round_output_component"],[120,2,1,"","add_shift_rows_component"],[120,2,1,"","add_sigma_component"],[120,2,1,"","add_suffix_to_components"],[120,2,1,"","add_theta_keccak_component"],[120,2,1,"","add_theta_xoodoo_component"],[120,2,1,"","add_variable_rotate_component"],[120,2,1,"","add_variable_shift_component"],[120,2,1,"","add_word_permutation_component"],[120,2,1,"","algebraic_tests"],[120,2,1,"","analyze_cipher"],[120,2,1,"","as_python_dictionary"],[120,2,1,"","avalanche_probability_vectors"],[120,2,1,"","cipher_inverse"],[120,2,1,"","cipher_partial_inverse"],[120,2,1,"","component_analysis_tests"],[120,2,1,"","component_from"],[120,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[120,2,1,"","continuous_avalanche_factor"],[120,2,1,"","continuous_diffusion_factor"],[120,2,1,"","continuous_diffusion_tests"],[120,2,1,"","continuous_neutrality_measure_for_bit_j"],[120,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[120,2,1,"","convert_to_compound_xor_cipher"],[120,3,1,"","current_round"],[120,3,1,"","current_round_number"],[120,3,1,"","current_round_number_of_components"],[120,2,1,"","delete_generated_evaluate_c_shared_library"],[120,2,1,"","diffusion_tests"],[120,2,1,"","evaluate"],[120,2,1,"","evaluate_using_c"],[120,2,1,"","evaluate_vectorized"],[120,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[120,3,1,"","family_name"],[120,3,1,"","file_name"],[120,2,1,"","find_good_input_difference_for_neural_distinguisher"],[120,2,1,"","find_impossible_property"],[120,2,1,"","generate_bit_based_c_code"],[120,2,1,"","generate_csv_report"],[120,2,1,"","generate_evaluate_c_code_shared_library"],[120,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[120,2,1,"","generate_word_based_c_code"],[120,2,1,"","get_all_components"],[120,2,1,"","get_all_components_ids"],[120,2,1,"","get_all_inputs_bit_positions"],[120,2,1,"","get_component_from_id"],[120,2,1,"","get_components_in_round"],[120,2,1,"","get_current_component_id"],[120,2,1,"","get_model"],[120,2,1,"","get_number_of_components_in_round"],[120,2,1,"","get_partial_cipher"],[120,2,1,"","get_round_from_component_id"],[120,2,1,"","get_sizes_of_components_by_type"],[120,3,1,"","id"],[120,2,1,"","impossible_differential_search"],[120,3,1,"","inputs"],[120,3,1,"","inputs_bit_size"],[120,2,1,"","inputs_size_to_dict"],[120,2,1,"","is_algebraically_secure"],[120,2,1,"","is_andrx"],[120,2,1,"","is_arx"],[120,2,1,"","is_power_of_2_word_based"],[120,2,1,"","is_shift_arx"],[120,2,1,"","is_spn"],[120,2,1,"","key_schedule"],[120,2,1,"","make_cipher_id"],[120,2,1,"","make_file_name"],[120,2,1,"","neural_network_blackbox_distinguisher_tests"],[120,2,1,"","neural_network_differential_distinguisher_tests"],[120,3,1,"","number_of_rounds"],[120,3,1,"","output_bit_size"],[120,2,1,"","polynomial_system"],[120,2,1,"","polynomial_system_at_round"],[120,2,1,"","print"],[120,2,1,"","print_as_python_dictionary"],[120,2,1,"","print_as_python_dictionary_to_file"],[120,2,1,"","print_component_analysis_as_radar_charts"],[120,2,1,"","print_evaluation_python_code"],[120,2,1,"","print_evaluation_python_code_to_file"],[120,2,1,"","print_input_information"],[120,3,1,"","reference_code"],[120,2,1,"","remove_key_schedule"],[120,2,1,"","remove_round_component"],[120,2,1,"","remove_round_component_from_id"],[120,2,1,"","round_function"],[120,3,1,"","rounds"],[120,3,1,"","rounds_as_list"],[120,2,1,"","run_autond_pipeline"],[120,2,1,"","set_file_name"],[120,2,1,"","set_id"],[120,2,1,"","set_inputs"],[120,2,1,"","sort_cipher"],[120,2,1,"","test_against_reference_code"],[120,2,1,"","test_vector_check"],[120,2,1,"","train_gohr_neural_distinguisher"],[120,2,1,"","train_neural_distinguisher"],[120,3,1,"","type"],[120,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gift_sbox_permutation":[[121,1,1,"","GiftSboxPermutation"]],"ciphers.permutations.gift_sbox_permutation.GiftSboxPermutation":[[121,2,1,"","add_AND_component"],[121,2,1,"","add_FSR_component"],[121,2,1,"","add_MODADD_component"],[121,2,1,"","add_MODSUB_component"],[121,2,1,"","add_NOT_component"],[121,2,1,"","add_OR_component"],[121,2,1,"","add_SBOX_component"],[121,2,1,"","add_SHIFT_component"],[121,2,1,"","add_XOR_component"],[121,2,1,"","add_cipher_output_component"],[121,2,1,"","add_concatenate_component"],[121,2,1,"","add_constant_component"],[121,2,1,"","add_intermediate_output_component"],[121,2,1,"","add_linear_layer_component"],[121,2,1,"","add_mix_column_component"],[121,2,1,"","add_permutation_component"],[121,2,1,"","add_reverse_component"],[121,2,1,"","add_rotate_component"],[121,2,1,"","add_round"],[121,2,1,"","add_round_key_output_component"],[121,2,1,"","add_round_output_component"],[121,2,1,"","add_shift_rows_component"],[121,2,1,"","add_sigma_component"],[121,2,1,"","add_suffix_to_components"],[121,2,1,"","add_theta_keccak_component"],[121,2,1,"","add_theta_xoodoo_component"],[121,2,1,"","add_variable_rotate_component"],[121,2,1,"","add_variable_shift_component"],[121,2,1,"","add_word_permutation_component"],[121,2,1,"","algebraic_tests"],[121,2,1,"","analyze_cipher"],[121,2,1,"","as_python_dictionary"],[121,2,1,"","avalanche_probability_vectors"],[121,2,1,"","cipher_inverse"],[121,2,1,"","cipher_partial_inverse"],[121,2,1,"","component_analysis_tests"],[121,2,1,"","component_from"],[121,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[121,2,1,"","continuous_avalanche_factor"],[121,2,1,"","continuous_diffusion_factor"],[121,2,1,"","continuous_diffusion_tests"],[121,2,1,"","continuous_neutrality_measure_for_bit_j"],[121,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[121,2,1,"","convert_to_compound_xor_cipher"],[121,3,1,"","current_round"],[121,3,1,"","current_round_number"],[121,3,1,"","current_round_number_of_components"],[121,2,1,"","delete_generated_evaluate_c_shared_library"],[121,2,1,"","diffusion_tests"],[121,2,1,"","evaluate"],[121,2,1,"","evaluate_using_c"],[121,2,1,"","evaluate_vectorized"],[121,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[121,3,1,"","family_name"],[121,3,1,"","file_name"],[121,2,1,"","find_good_input_difference_for_neural_distinguisher"],[121,2,1,"","find_impossible_property"],[121,2,1,"","generate_bit_based_c_code"],[121,2,1,"","generate_csv_report"],[121,2,1,"","generate_evaluate_c_code_shared_library"],[121,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[121,2,1,"","generate_word_based_c_code"],[121,2,1,"","get_all_components"],[121,2,1,"","get_all_components_ids"],[121,2,1,"","get_all_inputs_bit_positions"],[121,2,1,"","get_component_from_id"],[121,2,1,"","get_components_in_round"],[121,2,1,"","get_current_component_id"],[121,2,1,"","get_model"],[121,2,1,"","get_number_of_components_in_round"],[121,2,1,"","get_partial_cipher"],[121,2,1,"","get_round_from_component_id"],[121,2,1,"","get_sizes_of_components_by_type"],[121,3,1,"","id"],[121,2,1,"","impossible_differential_search"],[121,3,1,"","inputs"],[121,3,1,"","inputs_bit_size"],[121,2,1,"","inputs_size_to_dict"],[121,2,1,"","is_algebraically_secure"],[121,2,1,"","is_andrx"],[121,2,1,"","is_arx"],[121,2,1,"","is_power_of_2_word_based"],[121,2,1,"","is_shift_arx"],[121,2,1,"","is_spn"],[121,2,1,"","key_schedule"],[121,2,1,"","make_cipher_id"],[121,2,1,"","make_file_name"],[121,2,1,"","neural_network_blackbox_distinguisher_tests"],[121,2,1,"","neural_network_differential_distinguisher_tests"],[121,3,1,"","number_of_rounds"],[121,3,1,"","output_bit_size"],[121,2,1,"","polynomial_system"],[121,2,1,"","polynomial_system_at_round"],[121,2,1,"","print"],[121,2,1,"","print_as_python_dictionary"],[121,2,1,"","print_as_python_dictionary_to_file"],[121,2,1,"","print_component_analysis_as_radar_charts"],[121,2,1,"","print_evaluation_python_code"],[121,2,1,"","print_evaluation_python_code_to_file"],[121,2,1,"","print_input_information"],[121,3,1,"","reference_code"],[121,2,1,"","remove_key_schedule"],[121,2,1,"","remove_round_component"],[121,2,1,"","remove_round_component_from_id"],[121,2,1,"","round_function"],[121,3,1,"","rounds"],[121,3,1,"","rounds_as_list"],[121,2,1,"","run_autond_pipeline"],[121,2,1,"","set_file_name"],[121,2,1,"","set_id"],[121,2,1,"","set_inputs"],[121,2,1,"","sort_cipher"],[121,2,1,"","test_against_reference_code"],[121,2,1,"","test_vector_check"],[121,2,1,"","train_gohr_neural_distinguisher"],[121,2,1,"","train_neural_distinguisher"],[121,3,1,"","type"],[121,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_permutation":[[122,1,1,"","GimliPermutation"],[122,4,1,"","big_swap"],[122,4,1,"","small_swap"]],"ciphers.permutations.gimli_permutation.GimliPermutation":[[122,2,1,"","add_AND_component"],[122,2,1,"","add_FSR_component"],[122,2,1,"","add_MODADD_component"],[122,2,1,"","add_MODSUB_component"],[122,2,1,"","add_NOT_component"],[122,2,1,"","add_OR_component"],[122,2,1,"","add_SBOX_component"],[122,2,1,"","add_SHIFT_component"],[122,2,1,"","add_XOR_component"],[122,2,1,"","add_cipher_output_component"],[122,2,1,"","add_concatenate_component"],[122,2,1,"","add_constant_component"],[122,2,1,"","add_intermediate_output_component"],[122,2,1,"","add_linear_layer_component"],[122,2,1,"","add_mix_column_component"],[122,2,1,"","add_permutation_component"],[122,2,1,"","add_reverse_component"],[122,2,1,"","add_rotate_component"],[122,2,1,"","add_round"],[122,2,1,"","add_round_key_output_component"],[122,2,1,"","add_round_output_component"],[122,2,1,"","add_shift_rows_component"],[122,2,1,"","add_sigma_component"],[122,2,1,"","add_suffix_to_components"],[122,2,1,"","add_theta_keccak_component"],[122,2,1,"","add_theta_xoodoo_component"],[122,2,1,"","add_variable_rotate_component"],[122,2,1,"","add_variable_shift_component"],[122,2,1,"","add_word_permutation_component"],[122,2,1,"","algebraic_tests"],[122,2,1,"","analyze_cipher"],[122,2,1,"","as_python_dictionary"],[122,2,1,"","avalanche_probability_vectors"],[122,2,1,"","cipher_inverse"],[122,2,1,"","cipher_partial_inverse"],[122,2,1,"","component_analysis_tests"],[122,2,1,"","component_from"],[122,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[122,2,1,"","continuous_avalanche_factor"],[122,2,1,"","continuous_diffusion_factor"],[122,2,1,"","continuous_diffusion_tests"],[122,2,1,"","continuous_neutrality_measure_for_bit_j"],[122,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[122,2,1,"","convert_to_compound_xor_cipher"],[122,3,1,"","current_round"],[122,3,1,"","current_round_number"],[122,3,1,"","current_round_number_of_components"],[122,2,1,"","delete_generated_evaluate_c_shared_library"],[122,2,1,"","diffusion_tests"],[122,2,1,"","evaluate"],[122,2,1,"","evaluate_using_c"],[122,2,1,"","evaluate_vectorized"],[122,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[122,3,1,"","family_name"],[122,3,1,"","file_name"],[122,2,1,"","find_good_input_difference_for_neural_distinguisher"],[122,2,1,"","find_impossible_property"],[122,2,1,"","generate_bit_based_c_code"],[122,2,1,"","generate_csv_report"],[122,2,1,"","generate_evaluate_c_code_shared_library"],[122,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[122,2,1,"","generate_word_based_c_code"],[122,2,1,"","get_all_components"],[122,2,1,"","get_all_components_ids"],[122,2,1,"","get_all_inputs_bit_positions"],[122,2,1,"","get_component_from_id"],[122,2,1,"","get_components_in_round"],[122,2,1,"","get_current_component_id"],[122,2,1,"","get_model"],[122,2,1,"","get_number_of_components_in_round"],[122,2,1,"","get_partial_cipher"],[122,2,1,"","get_round_from_component_id"],[122,2,1,"","get_sizes_of_components_by_type"],[122,3,1,"","id"],[122,2,1,"","impossible_differential_search"],[122,3,1,"","inputs"],[122,3,1,"","inputs_bit_size"],[122,2,1,"","inputs_size_to_dict"],[122,2,1,"","is_algebraically_secure"],[122,2,1,"","is_andrx"],[122,2,1,"","is_arx"],[122,2,1,"","is_power_of_2_word_based"],[122,2,1,"","is_shift_arx"],[122,2,1,"","is_spn"],[122,2,1,"","make_cipher_id"],[122,2,1,"","make_file_name"],[122,2,1,"","neural_network_blackbox_distinguisher_tests"],[122,2,1,"","neural_network_differential_distinguisher_tests"],[122,3,1,"","number_of_rounds"],[122,3,1,"","output_bit_size"],[122,2,1,"","polynomial_system"],[122,2,1,"","polynomial_system_at_round"],[122,2,1,"","print"],[122,2,1,"","print_as_python_dictionary"],[122,2,1,"","print_as_python_dictionary_to_file"],[122,2,1,"","print_component_analysis_as_radar_charts"],[122,2,1,"","print_evaluation_python_code"],[122,2,1,"","print_evaluation_python_code_to_file"],[122,2,1,"","print_input_information"],[122,3,1,"","reference_code"],[122,2,1,"","remove_key_schedule"],[122,2,1,"","remove_round_component"],[122,2,1,"","remove_round_component_from_id"],[122,2,1,"","round_constant"],[122,2,1,"","round_function"],[122,3,1,"","rounds"],[122,3,1,"","rounds_as_list"],[122,2,1,"","run_autond_pipeline"],[122,2,1,"","set_file_name"],[122,2,1,"","set_id"],[122,2,1,"","set_inputs"],[122,2,1,"","sort_cipher"],[122,2,1,"","sp_box"],[122,2,1,"","test_against_reference_code"],[122,2,1,"","test_vector_check"],[122,2,1,"","train_gohr_neural_distinguisher"],[122,2,1,"","train_neural_distinguisher"],[122,3,1,"","type"],[122,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.gimli_sbox_permutation":[[123,1,1,"","GimliSboxPermutation"],[123,4,1,"","big_swap"],[123,4,1,"","small_swap"]],"ciphers.permutations.gimli_sbox_permutation.GimliSboxPermutation":[[123,2,1,"","add_AND_component"],[123,2,1,"","add_FSR_component"],[123,2,1,"","add_MODADD_component"],[123,2,1,"","add_MODSUB_component"],[123,2,1,"","add_NOT_component"],[123,2,1,"","add_OR_component"],[123,2,1,"","add_SBOX_component"],[123,2,1,"","add_SHIFT_component"],[123,2,1,"","add_XOR_component"],[123,2,1,"","add_cipher_output_component"],[123,2,1,"","add_concatenate_component"],[123,2,1,"","add_constant_component"],[123,2,1,"","add_intermediate_output_component"],[123,2,1,"","add_linear_layer_component"],[123,2,1,"","add_mix_column_component"],[123,2,1,"","add_permutation_component"],[123,2,1,"","add_reverse_component"],[123,2,1,"","add_rotate_component"],[123,2,1,"","add_round"],[123,2,1,"","add_round_key_output_component"],[123,2,1,"","add_round_output_component"],[123,2,1,"","add_shift_rows_component"],[123,2,1,"","add_sigma_component"],[123,2,1,"","add_suffix_to_components"],[123,2,1,"","add_theta_keccak_component"],[123,2,1,"","add_theta_xoodoo_component"],[123,2,1,"","add_variable_rotate_component"],[123,2,1,"","add_variable_shift_component"],[123,2,1,"","add_word_permutation_component"],[123,2,1,"","algebraic_tests"],[123,2,1,"","analyze_cipher"],[123,2,1,"","as_python_dictionary"],[123,2,1,"","avalanche_probability_vectors"],[123,2,1,"","cipher_inverse"],[123,2,1,"","cipher_partial_inverse"],[123,2,1,"","component_analysis_tests"],[123,2,1,"","component_from"],[123,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[123,2,1,"","continuous_avalanche_factor"],[123,2,1,"","continuous_diffusion_factor"],[123,2,1,"","continuous_diffusion_tests"],[123,2,1,"","continuous_neutrality_measure_for_bit_j"],[123,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[123,2,1,"","convert_to_compound_xor_cipher"],[123,3,1,"","current_round"],[123,3,1,"","current_round_number"],[123,3,1,"","current_round_number_of_components"],[123,2,1,"","delete_generated_evaluate_c_shared_library"],[123,2,1,"","diffusion_tests"],[123,2,1,"","evaluate"],[123,2,1,"","evaluate_using_c"],[123,2,1,"","evaluate_vectorized"],[123,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[123,3,1,"","family_name"],[123,3,1,"","file_name"],[123,2,1,"","find_good_input_difference_for_neural_distinguisher"],[123,2,1,"","find_impossible_property"],[123,2,1,"","generate_bit_based_c_code"],[123,2,1,"","generate_csv_report"],[123,2,1,"","generate_evaluate_c_code_shared_library"],[123,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[123,2,1,"","generate_word_based_c_code"],[123,2,1,"","get_all_components"],[123,2,1,"","get_all_components_ids"],[123,2,1,"","get_all_inputs_bit_positions"],[123,2,1,"","get_component_from_id"],[123,2,1,"","get_components_in_round"],[123,2,1,"","get_current_component_id"],[123,2,1,"","get_model"],[123,2,1,"","get_number_of_components_in_round"],[123,2,1,"","get_partial_cipher"],[123,2,1,"","get_round_from_component_id"],[123,2,1,"","get_sizes_of_components_by_type"],[123,3,1,"","id"],[123,2,1,"","impossible_differential_search"],[123,3,1,"","inputs"],[123,3,1,"","inputs_bit_size"],[123,2,1,"","inputs_size_to_dict"],[123,2,1,"","is_algebraically_secure"],[123,2,1,"","is_andrx"],[123,2,1,"","is_arx"],[123,2,1,"","is_power_of_2_word_based"],[123,2,1,"","is_shift_arx"],[123,2,1,"","is_spn"],[123,2,1,"","make_cipher_id"],[123,2,1,"","make_file_name"],[123,2,1,"","neural_network_blackbox_distinguisher_tests"],[123,2,1,"","neural_network_differential_distinguisher_tests"],[123,3,1,"","number_of_rounds"],[123,3,1,"","output_bit_size"],[123,2,1,"","polynomial_system"],[123,2,1,"","polynomial_system_at_round"],[123,2,1,"","print"],[123,2,1,"","print_as_python_dictionary"],[123,2,1,"","print_as_python_dictionary_to_file"],[123,2,1,"","print_component_analysis_as_radar_charts"],[123,2,1,"","print_evaluation_python_code"],[123,2,1,"","print_evaluation_python_code_to_file"],[123,2,1,"","print_input_information"],[123,3,1,"","reference_code"],[123,2,1,"","remove_key_schedule"],[123,2,1,"","remove_round_component"],[123,2,1,"","remove_round_component_from_id"],[123,2,1,"","round_constant"],[123,2,1,"","round_function"],[123,3,1,"","rounds"],[123,3,1,"","rounds_as_list"],[123,2,1,"","run_autond_pipeline"],[123,2,1,"","set_file_name"],[123,2,1,"","set_id"],[123,2,1,"","set_inputs"],[123,2,1,"","sort_cipher"],[123,2,1,"","sp_box"],[123,2,1,"","test_against_reference_code"],[123,2,1,"","test_vector_check"],[123,2,1,"","train_gohr_neural_distinguisher"],[123,2,1,"","train_neural_distinguisher"],[123,3,1,"","type"],[123,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.grain_core_permutation":[[124,1,1,"","GrainCorePermutation"]],"ciphers.permutations.grain_core_permutation.GrainCorePermutation":[[124,2,1,"","add_AND_component"],[124,2,1,"","add_FSR_component"],[124,2,1,"","add_MODADD_component"],[124,2,1,"","add_MODSUB_component"],[124,2,1,"","add_NOT_component"],[124,2,1,"","add_OR_component"],[124,2,1,"","add_SBOX_component"],[124,2,1,"","add_SHIFT_component"],[124,2,1,"","add_XOR_component"],[124,2,1,"","add_cipher_output_component"],[124,2,1,"","add_concatenate_component"],[124,2,1,"","add_constant_component"],[124,2,1,"","add_intermediate_output_component"],[124,2,1,"","add_linear_layer_component"],[124,2,1,"","add_mix_column_component"],[124,2,1,"","add_permutation_component"],[124,2,1,"","add_reverse_component"],[124,2,1,"","add_rotate_component"],[124,2,1,"","add_round"],[124,2,1,"","add_round_key_output_component"],[124,2,1,"","add_round_output_component"],[124,2,1,"","add_shift_rows_component"],[124,2,1,"","add_sigma_component"],[124,2,1,"","add_suffix_to_components"],[124,2,1,"","add_theta_keccak_component"],[124,2,1,"","add_theta_xoodoo_component"],[124,2,1,"","add_variable_rotate_component"],[124,2,1,"","add_variable_shift_component"],[124,2,1,"","add_word_permutation_component"],[124,2,1,"","algebraic_tests"],[124,2,1,"","analyze_cipher"],[124,2,1,"","as_python_dictionary"],[124,2,1,"","avalanche_probability_vectors"],[124,2,1,"","cipher_inverse"],[124,2,1,"","cipher_partial_inverse"],[124,2,1,"","component_analysis_tests"],[124,2,1,"","component_from"],[124,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[124,2,1,"","continuous_avalanche_factor"],[124,2,1,"","continuous_diffusion_factor"],[124,2,1,"","continuous_diffusion_tests"],[124,2,1,"","continuous_neutrality_measure_for_bit_j"],[124,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[124,2,1,"","convert_to_compound_xor_cipher"],[124,3,1,"","current_round"],[124,3,1,"","current_round_number"],[124,3,1,"","current_round_number_of_components"],[124,2,1,"","delete_generated_evaluate_c_shared_library"],[124,2,1,"","diffusion_tests"],[124,2,1,"","evaluate"],[124,2,1,"","evaluate_using_c"],[124,2,1,"","evaluate_vectorized"],[124,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[124,3,1,"","family_name"],[124,3,1,"","file_name"],[124,2,1,"","find_good_input_difference_for_neural_distinguisher"],[124,2,1,"","find_impossible_property"],[124,2,1,"","generate_bit_based_c_code"],[124,2,1,"","generate_csv_report"],[124,2,1,"","generate_evaluate_c_code_shared_library"],[124,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[124,2,1,"","generate_word_based_c_code"],[124,2,1,"","get_all_components"],[124,2,1,"","get_all_components_ids"],[124,2,1,"","get_all_inputs_bit_positions"],[124,2,1,"","get_component_from_id"],[124,2,1,"","get_components_in_round"],[124,2,1,"","get_current_component_id"],[124,2,1,"","get_model"],[124,2,1,"","get_number_of_components_in_round"],[124,2,1,"","get_partial_cipher"],[124,2,1,"","get_round_from_component_id"],[124,2,1,"","get_sizes_of_components_by_type"],[124,3,1,"","id"],[124,2,1,"","impossible_differential_search"],[124,3,1,"","inputs"],[124,3,1,"","inputs_bit_size"],[124,2,1,"","inputs_size_to_dict"],[124,2,1,"","is_algebraically_secure"],[124,2,1,"","is_andrx"],[124,2,1,"","is_arx"],[124,2,1,"","is_power_of_2_word_based"],[124,2,1,"","is_shift_arx"],[124,2,1,"","is_spn"],[124,2,1,"","make_cipher_id"],[124,2,1,"","make_file_name"],[124,2,1,"","neural_network_blackbox_distinguisher_tests"],[124,2,1,"","neural_network_differential_distinguisher_tests"],[124,3,1,"","number_of_rounds"],[124,3,1,"","output_bit_size"],[124,2,1,"","polynomial_system"],[124,2,1,"","polynomial_system_at_round"],[124,2,1,"","print"],[124,2,1,"","print_as_python_dictionary"],[124,2,1,"","print_as_python_dictionary_to_file"],[124,2,1,"","print_component_analysis_as_radar_charts"],[124,2,1,"","print_evaluation_python_code"],[124,2,1,"","print_evaluation_python_code_to_file"],[124,2,1,"","print_input_information"],[124,3,1,"","reference_code"],[124,2,1,"","remove_key_schedule"],[124,2,1,"","remove_round_component"],[124,2,1,"","remove_round_component_from_id"],[124,3,1,"","rounds"],[124,3,1,"","rounds_as_list"],[124,2,1,"","run_autond_pipeline"],[124,2,1,"","set_file_name"],[124,2,1,"","set_id"],[124,2,1,"","set_inputs"],[124,2,1,"","sort_cipher"],[124,2,1,"","test_against_reference_code"],[124,2,1,"","test_vector_check"],[124,2,1,"","train_gohr_neural_distinguisher"],[124,2,1,"","train_neural_distinguisher"],[124,3,1,"","type"],[124,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_invertible_permutation":[[125,1,1,"","KeccakInvertiblePermutation"]],"ciphers.permutations.keccak_invertible_permutation.KeccakInvertiblePermutation":[[125,2,1,"","add_AND_component"],[125,2,1,"","add_FSR_component"],[125,2,1,"","add_MODADD_component"],[125,2,1,"","add_MODSUB_component"],[125,2,1,"","add_NOT_component"],[125,2,1,"","add_OR_component"],[125,2,1,"","add_SBOX_component"],[125,2,1,"","add_SHIFT_component"],[125,2,1,"","add_XOR_component"],[125,2,1,"","add_cipher_output_component"],[125,2,1,"","add_concatenate_component"],[125,2,1,"","add_constant_component"],[125,2,1,"","add_intermediate_output_component"],[125,2,1,"","add_linear_layer_component"],[125,2,1,"","add_mix_column_component"],[125,2,1,"","add_output_component"],[125,2,1,"","add_permutation_component"],[125,2,1,"","add_reverse_component"],[125,2,1,"","add_rotate_component"],[125,2,1,"","add_round"],[125,2,1,"","add_round_key_output_component"],[125,2,1,"","add_round_output_component"],[125,2,1,"","add_shift_rows_component"],[125,2,1,"","add_sigma_component"],[125,2,1,"","add_suffix_to_components"],[125,2,1,"","add_theta_keccak_component"],[125,2,1,"","add_theta_xoodoo_component"],[125,2,1,"","add_variable_rotate_component"],[125,2,1,"","add_variable_shift_component"],[125,2,1,"","add_word_permutation_component"],[125,2,1,"","algebraic_tests"],[125,2,1,"","analyze_cipher"],[125,2,1,"","as_python_dictionary"],[125,2,1,"","avalanche_probability_vectors"],[125,2,1,"","chi_definition"],[125,2,1,"","cipher_inverse"],[125,2,1,"","cipher_partial_inverse"],[125,2,1,"","component_analysis_tests"],[125,2,1,"","component_from"],[125,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[125,2,1,"","continuous_avalanche_factor"],[125,2,1,"","continuous_diffusion_factor"],[125,2,1,"","continuous_diffusion_tests"],[125,2,1,"","continuous_neutrality_measure_for_bit_j"],[125,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[125,2,1,"","convert_to_compound_xor_cipher"],[125,3,1,"","current_round"],[125,3,1,"","current_round_number"],[125,3,1,"","current_round_number_of_components"],[125,2,1,"","delete_generated_evaluate_c_shared_library"],[125,2,1,"","diffusion_tests"],[125,2,1,"","evaluate"],[125,2,1,"","evaluate_using_c"],[125,2,1,"","evaluate_vectorized"],[125,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[125,3,1,"","family_name"],[125,3,1,"","file_name"],[125,2,1,"","find_good_input_difference_for_neural_distinguisher"],[125,2,1,"","find_impossible_property"],[125,2,1,"","generate_bit_based_c_code"],[125,2,1,"","generate_csv_report"],[125,2,1,"","generate_evaluate_c_code_shared_library"],[125,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[125,2,1,"","generate_word_based_c_code"],[125,2,1,"","get_all_components"],[125,2,1,"","get_all_components_ids"],[125,2,1,"","get_all_inputs_bit_positions"],[125,2,1,"","get_ci"],[125,2,1,"","get_component_from_id"],[125,2,1,"","get_components_in_round"],[125,2,1,"","get_current_component_id"],[125,2,1,"","get_model"],[125,2,1,"","get_number_of_components_in_round"],[125,2,1,"","get_partial_cipher"],[125,2,1,"","get_round_from_component_id"],[125,2,1,"","get_sizes_of_components_by_type"],[125,3,1,"","id"],[125,2,1,"","impossible_differential_search"],[125,3,1,"","inputs"],[125,3,1,"","inputs_bit_size"],[125,2,1,"","inputs_size_to_dict"],[125,2,1,"","iota_definition"],[125,2,1,"","is_algebraically_secure"],[125,2,1,"","is_andrx"],[125,2,1,"","is_arx"],[125,2,1,"","is_power_of_2_word_based"],[125,2,1,"","is_shift_arx"],[125,2,1,"","is_spn"],[125,2,1,"","make_cipher_id"],[125,2,1,"","make_file_name"],[125,2,1,"","neural_network_blackbox_distinguisher_tests"],[125,2,1,"","neural_network_differential_distinguisher_tests"],[125,3,1,"","number_of_rounds"],[125,3,1,"","output_bit_size"],[125,2,1,"","polynomial_system"],[125,2,1,"","polynomial_system_at_round"],[125,2,1,"","print"],[125,2,1,"","print_as_python_dictionary"],[125,2,1,"","print_as_python_dictionary_to_file"],[125,2,1,"","print_component_analysis_as_radar_charts"],[125,2,1,"","print_evaluation_python_code"],[125,2,1,"","print_evaluation_python_code_to_file"],[125,2,1,"","print_input_information"],[125,3,1,"","reference_code"],[125,2,1,"","remove_key_schedule"],[125,2,1,"","remove_round_component"],[125,2,1,"","remove_round_component_from_id"],[125,2,1,"","rho_and_pi_definition"],[125,2,1,"","round_function"],[125,3,1,"","rounds"],[125,3,1,"","rounds_as_list"],[125,2,1,"","run_autond_pipeline"],[125,2,1,"","set_file_name"],[125,2,1,"","set_id"],[125,2,1,"","set_inputs"],[125,2,1,"","sort_cipher"],[125,2,1,"","state_initialization"],[125,2,1,"","test_against_reference_code"],[125,2,1,"","test_vector_check"],[125,2,1,"","theta_definition"],[125,2,1,"","train_gohr_neural_distinguisher"],[125,2,1,"","train_neural_distinguisher"],[125,3,1,"","type"],[125,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_permutation":[[126,1,1,"","KeccakPermutation"]],"ciphers.permutations.keccak_permutation.KeccakPermutation":[[126,2,1,"","add_AND_component"],[126,2,1,"","add_FSR_component"],[126,2,1,"","add_MODADD_component"],[126,2,1,"","add_MODSUB_component"],[126,2,1,"","add_NOT_component"],[126,2,1,"","add_OR_component"],[126,2,1,"","add_SBOX_component"],[126,2,1,"","add_SHIFT_component"],[126,2,1,"","add_XOR_component"],[126,2,1,"","add_cipher_output_component"],[126,2,1,"","add_concatenate_component"],[126,2,1,"","add_constant_component"],[126,2,1,"","add_intermediate_output_component"],[126,2,1,"","add_linear_layer_component"],[126,2,1,"","add_mix_column_component"],[126,2,1,"","add_output_component"],[126,2,1,"","add_permutation_component"],[126,2,1,"","add_reverse_component"],[126,2,1,"","add_rotate_component"],[126,2,1,"","add_round"],[126,2,1,"","add_round_key_output_component"],[126,2,1,"","add_round_output_component"],[126,2,1,"","add_round_output_linear"],[126,2,1,"","add_round_output_nonlinear"],[126,2,1,"","add_shift_rows_component"],[126,2,1,"","add_sigma_component"],[126,2,1,"","add_suffix_to_components"],[126,2,1,"","add_theta_keccak_component"],[126,2,1,"","add_theta_xoodoo_component"],[126,2,1,"","add_variable_rotate_component"],[126,2,1,"","add_variable_shift_component"],[126,2,1,"","add_word_permutation_component"],[126,2,1,"","algebraic_tests"],[126,2,1,"","analyze_cipher"],[126,2,1,"","as_python_dictionary"],[126,2,1,"","avalanche_probability_vectors"],[126,2,1,"","chi_definition"],[126,2,1,"","cipher_inverse"],[126,2,1,"","cipher_partial_inverse"],[126,2,1,"","component_analysis_tests"],[126,2,1,"","component_from"],[126,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[126,2,1,"","continuous_avalanche_factor"],[126,2,1,"","continuous_diffusion_factor"],[126,2,1,"","continuous_diffusion_tests"],[126,2,1,"","continuous_neutrality_measure_for_bit_j"],[126,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[126,2,1,"","convert_to_compound_xor_cipher"],[126,3,1,"","current_round"],[126,3,1,"","current_round_number"],[126,3,1,"","current_round_number_of_components"],[126,2,1,"","delete_generated_evaluate_c_shared_library"],[126,2,1,"","diffusion_tests"],[126,2,1,"","evaluate"],[126,2,1,"","evaluate_using_c"],[126,2,1,"","evaluate_vectorized"],[126,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[126,3,1,"","family_name"],[126,3,1,"","file_name"],[126,2,1,"","find_good_input_difference_for_neural_distinguisher"],[126,2,1,"","find_impossible_property"],[126,2,1,"","generate_bit_based_c_code"],[126,2,1,"","generate_csv_report"],[126,2,1,"","generate_evaluate_c_code_shared_library"],[126,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[126,2,1,"","generate_word_based_c_code"],[126,2,1,"","get_all_components"],[126,2,1,"","get_all_components_ids"],[126,2,1,"","get_all_inputs_bit_positions"],[126,2,1,"","get_ci"],[126,2,1,"","get_component_from_id"],[126,2,1,"","get_components_in_round"],[126,2,1,"","get_current_component_id"],[126,2,1,"","get_model"],[126,2,1,"","get_number_of_components_in_round"],[126,2,1,"","get_partial_cipher"],[126,2,1,"","get_round_from_component_id"],[126,2,1,"","get_sizes_of_components_by_type"],[126,3,1,"","id"],[126,2,1,"","impossible_differential_search"],[126,3,1,"","inputs"],[126,3,1,"","inputs_bit_size"],[126,2,1,"","inputs_size_to_dict"],[126,2,1,"","iota_definition"],[126,2,1,"","is_algebraically_secure"],[126,2,1,"","is_andrx"],[126,2,1,"","is_arx"],[126,2,1,"","is_power_of_2_word_based"],[126,2,1,"","is_shift_arx"],[126,2,1,"","is_spn"],[126,2,1,"","make_cipher_id"],[126,2,1,"","make_file_name"],[126,2,1,"","neural_network_blackbox_distinguisher_tests"],[126,2,1,"","neural_network_differential_distinguisher_tests"],[126,3,1,"","number_of_rounds"],[126,3,1,"","output_bit_size"],[126,2,1,"","polynomial_system"],[126,2,1,"","polynomial_system_at_round"],[126,2,1,"","print"],[126,2,1,"","print_as_python_dictionary"],[126,2,1,"","print_as_python_dictionary_to_file"],[126,2,1,"","print_component_analysis_as_radar_charts"],[126,2,1,"","print_evaluation_python_code"],[126,2,1,"","print_evaluation_python_code_to_file"],[126,2,1,"","print_input_information"],[126,3,1,"","reference_code"],[126,2,1,"","remove_key_schedule"],[126,2,1,"","remove_round_component"],[126,2,1,"","remove_round_component_from_id"],[126,2,1,"","rho_and_pi_definition"],[126,2,1,"","round_function"],[126,3,1,"","rounds"],[126,3,1,"","rounds_as_list"],[126,2,1,"","run_autond_pipeline"],[126,2,1,"","set_file_name"],[126,2,1,"","set_id"],[126,2,1,"","set_inputs"],[126,2,1,"","sort_cipher"],[126,2,1,"","state_initialization"],[126,2,1,"","test_against_reference_code"],[126,2,1,"","test_vector_check"],[126,2,1,"","theta_definition"],[126,2,1,"","train_gohr_neural_distinguisher"],[126,2,1,"","train_neural_distinguisher"],[126,3,1,"","type"],[126,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.keccak_sbox_permutation":[[127,1,1,"","KeccakSboxPermutation"]],"ciphers.permutations.keccak_sbox_permutation.KeccakSboxPermutation":[[127,2,1,"","add_AND_component"],[127,2,1,"","add_FSR_component"],[127,2,1,"","add_MODADD_component"],[127,2,1,"","add_MODSUB_component"],[127,2,1,"","add_NOT_component"],[127,2,1,"","add_OR_component"],[127,2,1,"","add_SBOX_component"],[127,2,1,"","add_SHIFT_component"],[127,2,1,"","add_XOR_component"],[127,2,1,"","add_cipher_output_component"],[127,2,1,"","add_concatenate_component"],[127,2,1,"","add_constant_component"],[127,2,1,"","add_intermediate_output_component"],[127,2,1,"","add_linear_layer_component"],[127,2,1,"","add_mix_column_component"],[127,2,1,"","add_output_component"],[127,2,1,"","add_permutation_component"],[127,2,1,"","add_reverse_component"],[127,2,1,"","add_rotate_component"],[127,2,1,"","add_round"],[127,2,1,"","add_round_key_output_component"],[127,2,1,"","add_round_output_component"],[127,2,1,"","add_shift_rows_component"],[127,2,1,"","add_sigma_component"],[127,2,1,"","add_suffix_to_components"],[127,2,1,"","add_theta_keccak_component"],[127,2,1,"","add_theta_xoodoo_component"],[127,2,1,"","add_variable_rotate_component"],[127,2,1,"","add_variable_shift_component"],[127,2,1,"","add_word_permutation_component"],[127,2,1,"","algebraic_tests"],[127,2,1,"","analyze_cipher"],[127,2,1,"","as_python_dictionary"],[127,2,1,"","avalanche_probability_vectors"],[127,2,1,"","chi_definition"],[127,2,1,"","cipher_inverse"],[127,2,1,"","cipher_partial_inverse"],[127,2,1,"","component_analysis_tests"],[127,2,1,"","component_from"],[127,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[127,2,1,"","continuous_avalanche_factor"],[127,2,1,"","continuous_diffusion_factor"],[127,2,1,"","continuous_diffusion_tests"],[127,2,1,"","continuous_neutrality_measure_for_bit_j"],[127,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[127,2,1,"","convert_to_compound_xor_cipher"],[127,3,1,"","current_round"],[127,3,1,"","current_round_number"],[127,3,1,"","current_round_number_of_components"],[127,2,1,"","delete_generated_evaluate_c_shared_library"],[127,2,1,"","diffusion_tests"],[127,2,1,"","evaluate"],[127,2,1,"","evaluate_using_c"],[127,2,1,"","evaluate_vectorized"],[127,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[127,3,1,"","family_name"],[127,3,1,"","file_name"],[127,2,1,"","find_good_input_difference_for_neural_distinguisher"],[127,2,1,"","find_impossible_property"],[127,2,1,"","generate_bit_based_c_code"],[127,2,1,"","generate_csv_report"],[127,2,1,"","generate_evaluate_c_code_shared_library"],[127,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[127,2,1,"","generate_word_based_c_code"],[127,2,1,"","get_all_components"],[127,2,1,"","get_all_components_ids"],[127,2,1,"","get_all_inputs_bit_positions"],[127,2,1,"","get_ci"],[127,2,1,"","get_component_from_id"],[127,2,1,"","get_components_in_round"],[127,2,1,"","get_current_component_id"],[127,2,1,"","get_model"],[127,2,1,"","get_number_of_components_in_round"],[127,2,1,"","get_partial_cipher"],[127,2,1,"","get_round_from_component_id"],[127,2,1,"","get_sizes_of_components_by_type"],[127,3,1,"","id"],[127,2,1,"","impossible_differential_search"],[127,3,1,"","inputs"],[127,3,1,"","inputs_bit_size"],[127,2,1,"","inputs_size_to_dict"],[127,2,1,"","iota_definition"],[127,2,1,"","is_algebraically_secure"],[127,2,1,"","is_andrx"],[127,2,1,"","is_arx"],[127,2,1,"","is_power_of_2_word_based"],[127,2,1,"","is_shift_arx"],[127,2,1,"","is_spn"],[127,2,1,"","make_cipher_id"],[127,2,1,"","make_file_name"],[127,2,1,"","neural_network_blackbox_distinguisher_tests"],[127,2,1,"","neural_network_differential_distinguisher_tests"],[127,3,1,"","number_of_rounds"],[127,3,1,"","output_bit_size"],[127,2,1,"","polynomial_system"],[127,2,1,"","polynomial_system_at_round"],[127,2,1,"","print"],[127,2,1,"","print_as_python_dictionary"],[127,2,1,"","print_as_python_dictionary_to_file"],[127,2,1,"","print_component_analysis_as_radar_charts"],[127,2,1,"","print_evaluation_python_code"],[127,2,1,"","print_evaluation_python_code_to_file"],[127,2,1,"","print_input_information"],[127,3,1,"","reference_code"],[127,2,1,"","remove_key_schedule"],[127,2,1,"","remove_round_component"],[127,2,1,"","remove_round_component_from_id"],[127,2,1,"","rho_and_pi_definition"],[127,2,1,"","round_function"],[127,3,1,"","rounds"],[127,3,1,"","rounds_as_list"],[127,2,1,"","run_autond_pipeline"],[127,2,1,"","set_file_name"],[127,2,1,"","set_id"],[127,2,1,"","set_inputs"],[127,2,1,"","sort_cipher"],[127,2,1,"","state_initialization"],[127,2,1,"","test_against_reference_code"],[127,2,1,"","test_vector_check"],[127,2,1,"","theta_definition"],[127,2,1,"","train_gohr_neural_distinguisher"],[127,2,1,"","train_neural_distinguisher"],[127,3,1,"","type"],[127,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.photon_permutation":[[128,1,1,"","PhotonPermutation"]],"ciphers.permutations.photon_permutation.PhotonPermutation":[[128,2,1,"","add_AND_component"],[128,2,1,"","add_FSR_component"],[128,2,1,"","add_MODADD_component"],[128,2,1,"","add_MODSUB_component"],[128,2,1,"","add_NOT_component"],[128,2,1,"","add_OR_component"],[128,2,1,"","add_SBOX_component"],[128,2,1,"","add_SHIFT_component"],[128,2,1,"","add_XOR_component"],[128,2,1,"","add_cipher_output_component"],[128,2,1,"","add_concatenate_component"],[128,2,1,"","add_constant_component"],[128,2,1,"","add_intermediate_output_component"],[128,2,1,"","add_linear_layer_component"],[128,2,1,"","add_mix_column_component"],[128,2,1,"","add_permutation_component"],[128,2,1,"","add_reverse_component"],[128,2,1,"","add_rotate_component"],[128,2,1,"","add_round"],[128,2,1,"","add_round_key_output_component"],[128,2,1,"","add_round_output_component"],[128,2,1,"","add_shift_rows_component"],[128,2,1,"","add_sigma_component"],[128,2,1,"","add_suffix_to_components"],[128,2,1,"","add_theta_keccak_component"],[128,2,1,"","add_theta_xoodoo_component"],[128,2,1,"","add_variable_rotate_component"],[128,2,1,"","add_variable_shift_component"],[128,2,1,"","add_word_permutation_component"],[128,2,1,"","algebraic_tests"],[128,2,1,"","analyze_cipher"],[128,2,1,"","as_python_dictionary"],[128,2,1,"","avalanche_probability_vectors"],[128,2,1,"","cipher_inverse"],[128,2,1,"","cipher_partial_inverse"],[128,2,1,"","component_analysis_tests"],[128,2,1,"","component_from"],[128,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[128,2,1,"","continuous_avalanche_factor"],[128,2,1,"","continuous_diffusion_factor"],[128,2,1,"","continuous_diffusion_tests"],[128,2,1,"","continuous_neutrality_measure_for_bit_j"],[128,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[128,2,1,"","convert_to_compound_xor_cipher"],[128,3,1,"","current_round"],[128,3,1,"","current_round_number"],[128,3,1,"","current_round_number_of_components"],[128,2,1,"","delete_generated_evaluate_c_shared_library"],[128,2,1,"","diffusion_tests"],[128,2,1,"","evaluate"],[128,2,1,"","evaluate_using_c"],[128,2,1,"","evaluate_vectorized"],[128,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[128,3,1,"","family_name"],[128,3,1,"","file_name"],[128,2,1,"","find_good_input_difference_for_neural_distinguisher"],[128,2,1,"","find_impossible_property"],[128,2,1,"","generate_bit_based_c_code"],[128,2,1,"","generate_csv_report"],[128,2,1,"","generate_evaluate_c_code_shared_library"],[128,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[128,2,1,"","generate_word_based_c_code"],[128,2,1,"","get_all_components"],[128,2,1,"","get_all_components_ids"],[128,2,1,"","get_all_inputs_bit_positions"],[128,2,1,"","get_component_from_id"],[128,2,1,"","get_components_in_round"],[128,2,1,"","get_current_component_id"],[128,2,1,"","get_model"],[128,2,1,"","get_number_of_components_in_round"],[128,2,1,"","get_partial_cipher"],[128,2,1,"","get_round_from_component_id"],[128,2,1,"","get_sizes_of_components_by_type"],[128,3,1,"","id"],[128,2,1,"","impossible_differential_search"],[128,3,1,"","inputs"],[128,3,1,"","inputs_bit_size"],[128,2,1,"","inputs_size_to_dict"],[128,2,1,"","is_algebraically_secure"],[128,2,1,"","is_andrx"],[128,2,1,"","is_arx"],[128,2,1,"","is_power_of_2_word_based"],[128,2,1,"","is_shift_arx"],[128,2,1,"","is_spn"],[128,2,1,"","make_cipher_id"],[128,2,1,"","make_file_name"],[128,2,1,"","neural_network_blackbox_distinguisher_tests"],[128,2,1,"","neural_network_differential_distinguisher_tests"],[128,3,1,"","number_of_rounds"],[128,3,1,"","output_bit_size"],[128,2,1,"","polynomial_system"],[128,2,1,"","polynomial_system_at_round"],[128,2,1,"","print"],[128,2,1,"","print_as_python_dictionary"],[128,2,1,"","print_as_python_dictionary_to_file"],[128,2,1,"","print_component_analysis_as_radar_charts"],[128,2,1,"","print_evaluation_python_code"],[128,2,1,"","print_evaluation_python_code_to_file"],[128,2,1,"","print_input_information"],[128,3,1,"","reference_code"],[128,2,1,"","remove_key_schedule"],[128,2,1,"","remove_round_component"],[128,2,1,"","remove_round_component_from_id"],[128,2,1,"","round_function"],[128,3,1,"","rounds"],[128,3,1,"","rounds_as_list"],[128,2,1,"","run_autond_pipeline"],[128,2,1,"","set_file_name"],[128,2,1,"","set_id"],[128,2,1,"","set_inputs"],[128,2,1,"","sort_cipher"],[128,2,1,"","test_against_reference_code"],[128,2,1,"","test_vector_check"],[128,2,1,"","train_gohr_neural_distinguisher"],[128,2,1,"","train_neural_distinguisher"],[128,3,1,"","type"],[128,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.salsa_permutation":[[129,1,1,"","SalsaPermutation"]],"ciphers.permutations.salsa_permutation.SalsaPermutation":[[129,2,1,"","add_AND_component"],[129,2,1,"","add_FSR_component"],[129,2,1,"","add_MODADD_component"],[129,2,1,"","add_MODSUB_component"],[129,2,1,"","add_NOT_component"],[129,2,1,"","add_OR_component"],[129,2,1,"","add_SBOX_component"],[129,2,1,"","add_SHIFT_component"],[129,2,1,"","add_XOR_component"],[129,2,1,"","add_cipher_output_component"],[129,2,1,"","add_concatenate_component"],[129,2,1,"","add_constant_component"],[129,2,1,"","add_intermediate_output_component"],[129,2,1,"","add_linear_layer_component"],[129,2,1,"","add_mix_column_component"],[129,2,1,"","add_permutation_component"],[129,2,1,"","add_reverse_component"],[129,2,1,"","add_rotate_component"],[129,2,1,"","add_round"],[129,2,1,"","add_round_key_output_component"],[129,2,1,"","add_round_output_component"],[129,2,1,"","add_shift_rows_component"],[129,2,1,"","add_sigma_component"],[129,2,1,"","add_suffix_to_components"],[129,2,1,"","add_theta_keccak_component"],[129,2,1,"","add_theta_xoodoo_component"],[129,2,1,"","add_variable_rotate_component"],[129,2,1,"","add_variable_shift_component"],[129,2,1,"","add_word_permutation_component"],[129,2,1,"","algebraic_tests"],[129,2,1,"","analyze_cipher"],[129,2,1,"","as_python_dictionary"],[129,2,1,"","avalanche_probability_vectors"],[129,2,1,"","bottom_half_quarter_round"],[129,2,1,"","cipher_inverse"],[129,2,1,"","cipher_partial_inverse"],[129,2,1,"","component_analysis_tests"],[129,2,1,"","component_from"],[129,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[129,2,1,"","continuous_avalanche_factor"],[129,2,1,"","continuous_diffusion_factor"],[129,2,1,"","continuous_diffusion_tests"],[129,2,1,"","continuous_neutrality_measure_for_bit_j"],[129,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[129,2,1,"","convert_to_compound_xor_cipher"],[129,3,1,"","current_round"],[129,3,1,"","current_round_number"],[129,3,1,"","current_round_number_of_components"],[129,2,1,"","delete_generated_evaluate_c_shared_library"],[129,2,1,"","diffusion_tests"],[129,2,1,"","evaluate"],[129,2,1,"","evaluate_using_c"],[129,2,1,"","evaluate_vectorized"],[129,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[129,3,1,"","family_name"],[129,3,1,"","file_name"],[129,2,1,"","find_good_input_difference_for_neural_distinguisher"],[129,2,1,"","find_impossible_property"],[129,2,1,"","generate_bit_based_c_code"],[129,2,1,"","generate_csv_report"],[129,2,1,"","generate_evaluate_c_code_shared_library"],[129,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[129,2,1,"","generate_word_based_c_code"],[129,2,1,"","get_all_components"],[129,2,1,"","get_all_components_ids"],[129,2,1,"","get_all_inputs_bit_positions"],[129,2,1,"","get_component_from_id"],[129,2,1,"","get_components_in_round"],[129,2,1,"","get_current_component_id"],[129,2,1,"","get_model"],[129,2,1,"","get_number_of_components_in_round"],[129,2,1,"","get_partial_cipher"],[129,2,1,"","get_round_from_component_id"],[129,2,1,"","get_sizes_of_components_by_type"],[129,3,1,"","id"],[129,2,1,"","impossible_differential_search"],[129,3,1,"","inputs"],[129,3,1,"","inputs_bit_size"],[129,2,1,"","inputs_size_to_dict"],[129,2,1,"","is_algebraically_secure"],[129,2,1,"","is_andrx"],[129,2,1,"","is_arx"],[129,2,1,"","is_power_of_2_word_based"],[129,2,1,"","is_shift_arx"],[129,2,1,"","is_spn"],[129,2,1,"","make_cipher_id"],[129,2,1,"","make_file_name"],[129,2,1,"","neural_network_blackbox_distinguisher_tests"],[129,2,1,"","neural_network_differential_distinguisher_tests"],[129,3,1,"","number_of_rounds"],[129,3,1,"","output_bit_size"],[129,2,1,"","polynomial_system"],[129,2,1,"","polynomial_system_at_round"],[129,2,1,"","print"],[129,2,1,"","print_as_python_dictionary"],[129,2,1,"","print_as_python_dictionary_to_file"],[129,2,1,"","print_component_analysis_as_radar_charts"],[129,2,1,"","print_evaluation_python_code"],[129,2,1,"","print_evaluation_python_code_to_file"],[129,2,1,"","print_input_information"],[129,3,1,"","reference_code"],[129,2,1,"","remove_key_schedule"],[129,2,1,"","remove_round_component"],[129,2,1,"","remove_round_component_from_id"],[129,3,1,"","rounds"],[129,3,1,"","rounds_as_list"],[129,2,1,"","run_autond_pipeline"],[129,2,1,"","set_file_name"],[129,2,1,"","set_id"],[129,2,1,"","set_inputs"],[129,2,1,"","sort_cipher"],[129,2,1,"","test_against_reference_code"],[129,2,1,"","test_vector_check"],[129,2,1,"","top_half_quarter_round"],[129,2,1,"","train_gohr_neural_distinguisher"],[129,2,1,"","train_neural_distinguisher"],[129,3,1,"","type"],[129,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.sparkle_permutation":[[130,1,1,"","SparklePermutation"]],"ciphers.permutations.sparkle_permutation.SparklePermutation":[[130,2,1,"","add_AND_component"],[130,2,1,"","add_FSR_component"],[130,2,1,"","add_MODADD_component"],[130,2,1,"","add_MODSUB_component"],[130,2,1,"","add_NOT_component"],[130,2,1,"","add_OR_component"],[130,2,1,"","add_SBOX_component"],[130,2,1,"","add_SHIFT_component"],[130,2,1,"","add_XOR_component"],[130,2,1,"","add_cipher_output_component"],[130,2,1,"","add_concatenate_component"],[130,2,1,"","add_constant_component"],[130,2,1,"","add_intermediate_output_component"],[130,2,1,"","add_linear_layer_component"],[130,2,1,"","add_mix_column_component"],[130,2,1,"","add_permutation_component"],[130,2,1,"","add_reverse_component"],[130,2,1,"","add_rotate_component"],[130,2,1,"","add_round"],[130,2,1,"","add_round_key_output_component"],[130,2,1,"","add_round_output_component"],[130,2,1,"","add_shift_rows_component"],[130,2,1,"","add_sigma_component"],[130,2,1,"","add_suffix_to_components"],[130,2,1,"","add_theta_keccak_component"],[130,2,1,"","add_theta_xoodoo_component"],[130,2,1,"","add_variable_rotate_component"],[130,2,1,"","add_variable_shift_component"],[130,2,1,"","add_word_permutation_component"],[130,2,1,"","algebraic_tests"],[130,2,1,"","alzette"],[130,2,1,"","alzette_round"],[130,2,1,"","analyze_cipher"],[130,2,1,"","as_python_dictionary"],[130,2,1,"","avalanche_probability_vectors"],[130,2,1,"","cipher_inverse"],[130,2,1,"","cipher_partial_inverse"],[130,2,1,"","component_analysis_tests"],[130,2,1,"","component_from"],[130,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[130,2,1,"","continuous_avalanche_factor"],[130,2,1,"","continuous_diffusion_factor"],[130,2,1,"","continuous_diffusion_tests"],[130,2,1,"","continuous_neutrality_measure_for_bit_j"],[130,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[130,2,1,"","convert_to_compound_xor_cipher"],[130,3,1,"","current_round"],[130,3,1,"","current_round_number"],[130,3,1,"","current_round_number_of_components"],[130,2,1,"","delete_generated_evaluate_c_shared_library"],[130,2,1,"","diffusion_tests"],[130,2,1,"","ell_function"],[130,2,1,"","evaluate"],[130,2,1,"","evaluate_using_c"],[130,2,1,"","evaluate_vectorized"],[130,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[130,3,1,"","family_name"],[130,3,1,"","file_name"],[130,2,1,"","find_good_input_difference_for_neural_distinguisher"],[130,2,1,"","find_impossible_property"],[130,2,1,"","generate_bit_based_c_code"],[130,2,1,"","generate_csv_report"],[130,2,1,"","generate_evaluate_c_code_shared_library"],[130,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[130,2,1,"","generate_word_based_c_code"],[130,2,1,"","get_all_components"],[130,2,1,"","get_all_components_ids"],[130,2,1,"","get_all_inputs_bit_positions"],[130,2,1,"","get_component_from_id"],[130,2,1,"","get_components_in_round"],[130,2,1,"","get_current_component_id"],[130,2,1,"","get_model"],[130,2,1,"","get_number_of_components_in_round"],[130,2,1,"","get_partial_cipher"],[130,2,1,"","get_round_from_component_id"],[130,2,1,"","get_sizes_of_components_by_type"],[130,3,1,"","id"],[130,2,1,"","impossible_differential_search"],[130,3,1,"","inputs"],[130,3,1,"","inputs_bit_size"],[130,2,1,"","inputs_size_to_dict"],[130,2,1,"","is_algebraically_secure"],[130,2,1,"","is_andrx"],[130,2,1,"","is_arx"],[130,2,1,"","is_power_of_2_word_based"],[130,2,1,"","is_shift_arx"],[130,2,1,"","is_spn"],[130,2,1,"","linear_layer"],[130,2,1,"","make_cipher_id"],[130,2,1,"","make_file_name"],[130,2,1,"","neural_network_blackbox_distinguisher_tests"],[130,2,1,"","neural_network_differential_distinguisher_tests"],[130,3,1,"","number_of_rounds"],[130,3,1,"","output_bit_size"],[130,2,1,"","polynomial_system"],[130,2,1,"","polynomial_system_at_round"],[130,2,1,"","print"],[130,2,1,"","print_as_python_dictionary"],[130,2,1,"","print_as_python_dictionary_to_file"],[130,2,1,"","print_component_analysis_as_radar_charts"],[130,2,1,"","print_evaluation_python_code"],[130,2,1,"","print_evaluation_python_code_to_file"],[130,2,1,"","print_input_information"],[130,3,1,"","reference_code"],[130,2,1,"","remove_key_schedule"],[130,2,1,"","remove_round_component"],[130,2,1,"","remove_round_component_from_id"],[130,2,1,"","round_function"],[130,3,1,"","rounds"],[130,3,1,"","rounds_as_list"],[130,2,1,"","run_autond_pipeline"],[130,2,1,"","set_file_name"],[130,2,1,"","set_id"],[130,2,1,"","set_inputs"],[130,2,1,"","sort_cipher"],[130,2,1,"","test_against_reference_code"],[130,2,1,"","test_vector_check"],[130,2,1,"","train_gohr_neural_distinguisher"],[130,2,1,"","train_neural_distinguisher"],[130,3,1,"","type"],[130,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_fsr_permutation":[[131,1,1,"","SpongentPiFSRPermutation"]],"ciphers.permutations.spongent_pi_fsr_permutation.SpongentPiFSRPermutation":[[131,2,1,"","add_AND_component"],[131,2,1,"","add_FSR_component"],[131,2,1,"","add_MODADD_component"],[131,2,1,"","add_MODSUB_component"],[131,2,1,"","add_NOT_component"],[131,2,1,"","add_OR_component"],[131,2,1,"","add_SBOX_component"],[131,2,1,"","add_SHIFT_component"],[131,2,1,"","add_XOR_component"],[131,2,1,"","add_cipher_output_component"],[131,2,1,"","add_concatenate_component"],[131,2,1,"","add_constant_component"],[131,2,1,"","add_intermediate_output_component"],[131,2,1,"","add_linear_layer_component"],[131,2,1,"","add_mix_column_component"],[131,2,1,"","add_permutation_component"],[131,2,1,"","add_reverse_component"],[131,2,1,"","add_rotate_component"],[131,2,1,"","add_round"],[131,2,1,"","add_round_key_output_component"],[131,2,1,"","add_round_output_component"],[131,2,1,"","add_shift_rows_component"],[131,2,1,"","add_sigma_component"],[131,2,1,"","add_suffix_to_components"],[131,2,1,"","add_theta_keccak_component"],[131,2,1,"","add_theta_xoodoo_component"],[131,2,1,"","add_variable_rotate_component"],[131,2,1,"","add_variable_shift_component"],[131,2,1,"","add_word_permutation_component"],[131,2,1,"","algebraic_tests"],[131,2,1,"","analyze_cipher"],[131,2,1,"","as_python_dictionary"],[131,2,1,"","avalanche_probability_vectors"],[131,2,1,"","cipher_inverse"],[131,2,1,"","cipher_partial_inverse"],[131,2,1,"","component_analysis_tests"],[131,2,1,"","component_from"],[131,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[131,2,1,"","continuous_avalanche_factor"],[131,2,1,"","continuous_diffusion_factor"],[131,2,1,"","continuous_diffusion_tests"],[131,2,1,"","continuous_neutrality_measure_for_bit_j"],[131,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[131,2,1,"","convert_to_compound_xor_cipher"],[131,3,1,"","current_round"],[131,3,1,"","current_round_number"],[131,3,1,"","current_round_number_of_components"],[131,2,1,"","delete_generated_evaluate_c_shared_library"],[131,2,1,"","diffusion_tests"],[131,2,1,"","evaluate"],[131,2,1,"","evaluate_using_c"],[131,2,1,"","evaluate_vectorized"],[131,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[131,3,1,"","family_name"],[131,3,1,"","file_name"],[131,2,1,"","find_good_input_difference_for_neural_distinguisher"],[131,2,1,"","find_impossible_property"],[131,2,1,"","generate_bit_based_c_code"],[131,2,1,"","generate_csv_report"],[131,2,1,"","generate_evaluate_c_code_shared_library"],[131,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[131,2,1,"","generate_word_based_c_code"],[131,2,1,"","get_all_components"],[131,2,1,"","get_all_components_ids"],[131,2,1,"","get_all_inputs_bit_positions"],[131,2,1,"","get_component_from_id"],[131,2,1,"","get_components_in_round"],[131,2,1,"","get_current_component_id"],[131,2,1,"","get_model"],[131,2,1,"","get_number_of_components_in_round"],[131,2,1,"","get_partial_cipher"],[131,2,1,"","get_round_from_component_id"],[131,2,1,"","get_sizes_of_components_by_type"],[131,2,1,"","icounter_update"],[131,3,1,"","id"],[131,2,1,"","impossible_differential_search"],[131,3,1,"","inputs"],[131,3,1,"","inputs_bit_size"],[131,2,1,"","inputs_size_to_dict"],[131,2,1,"","is_algebraically_secure"],[131,2,1,"","is_andrx"],[131,2,1,"","is_arx"],[131,2,1,"","is_power_of_2_word_based"],[131,2,1,"","is_shift_arx"],[131,2,1,"","is_spn"],[131,2,1,"","make_cipher_id"],[131,2,1,"","make_file_name"],[131,2,1,"","neural_network_blackbox_distinguisher_tests"],[131,2,1,"","neural_network_differential_distinguisher_tests"],[131,3,1,"","number_of_rounds"],[131,3,1,"","output_bit_size"],[131,2,1,"","polynomial_system"],[131,2,1,"","polynomial_system_at_round"],[131,2,1,"","print"],[131,2,1,"","print_as_python_dictionary"],[131,2,1,"","print_as_python_dictionary_to_file"],[131,2,1,"","print_component_analysis_as_radar_charts"],[131,2,1,"","print_evaluation_python_code"],[131,2,1,"","print_evaluation_python_code_to_file"],[131,2,1,"","print_input_information"],[131,3,1,"","reference_code"],[131,2,1,"","remove_key_schedule"],[131,2,1,"","remove_round_component"],[131,2,1,"","remove_round_component_from_id"],[131,2,1,"","round_function"],[131,3,1,"","rounds"],[131,3,1,"","rounds_as_list"],[131,2,1,"","run_autond_pipeline"],[131,2,1,"","set_file_name"],[131,2,1,"","set_id"],[131,2,1,"","set_inputs"],[131,2,1,"","sort_cipher"],[131,2,1,"","test_against_reference_code"],[131,2,1,"","test_vector_check"],[131,2,1,"","train_gohr_neural_distinguisher"],[131,2,1,"","train_neural_distinguisher"],[131,3,1,"","type"],[131,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_permutation":[[132,1,1,"","SpongentPiPermutation"]],"ciphers.permutations.spongent_pi_permutation.SpongentPiPermutation":[[132,2,1,"","add_AND_component"],[132,2,1,"","add_FSR_component"],[132,2,1,"","add_MODADD_component"],[132,2,1,"","add_MODSUB_component"],[132,2,1,"","add_NOT_component"],[132,2,1,"","add_OR_component"],[132,2,1,"","add_SBOX_component"],[132,2,1,"","add_SHIFT_component"],[132,2,1,"","add_XOR_component"],[132,2,1,"","add_cipher_output_component"],[132,2,1,"","add_concatenate_component"],[132,2,1,"","add_constant_component"],[132,2,1,"","add_intermediate_output_component"],[132,2,1,"","add_linear_layer_component"],[132,2,1,"","add_mix_column_component"],[132,2,1,"","add_permutation_component"],[132,2,1,"","add_reverse_component"],[132,2,1,"","add_rotate_component"],[132,2,1,"","add_round"],[132,2,1,"","add_round_key_output_component"],[132,2,1,"","add_round_output_component"],[132,2,1,"","add_shift_rows_component"],[132,2,1,"","add_sigma_component"],[132,2,1,"","add_suffix_to_components"],[132,2,1,"","add_theta_keccak_component"],[132,2,1,"","add_theta_xoodoo_component"],[132,2,1,"","add_variable_rotate_component"],[132,2,1,"","add_variable_shift_component"],[132,2,1,"","add_word_permutation_component"],[132,2,1,"","algebraic_tests"],[132,2,1,"","analyze_cipher"],[132,2,1,"","as_python_dictionary"],[132,2,1,"","avalanche_probability_vectors"],[132,2,1,"","cipher_inverse"],[132,2,1,"","cipher_partial_inverse"],[132,2,1,"","component_analysis_tests"],[132,2,1,"","component_from"],[132,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[132,2,1,"","continuous_avalanche_factor"],[132,2,1,"","continuous_diffusion_factor"],[132,2,1,"","continuous_diffusion_tests"],[132,2,1,"","continuous_neutrality_measure_for_bit_j"],[132,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[132,2,1,"","convert_to_compound_xor_cipher"],[132,3,1,"","current_round"],[132,3,1,"","current_round_number"],[132,3,1,"","current_round_number_of_components"],[132,2,1,"","delete_generated_evaluate_c_shared_library"],[132,2,1,"","diffusion_tests"],[132,2,1,"","evaluate"],[132,2,1,"","evaluate_using_c"],[132,2,1,"","evaluate_vectorized"],[132,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[132,3,1,"","family_name"],[132,3,1,"","file_name"],[132,2,1,"","find_good_input_difference_for_neural_distinguisher"],[132,2,1,"","find_impossible_property"],[132,2,1,"","generate_bit_based_c_code"],[132,2,1,"","generate_csv_report"],[132,2,1,"","generate_evaluate_c_code_shared_library"],[132,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[132,2,1,"","generate_word_based_c_code"],[132,2,1,"","get_all_components"],[132,2,1,"","get_all_components_ids"],[132,2,1,"","get_all_inputs_bit_positions"],[132,2,1,"","get_component_from_id"],[132,2,1,"","get_components_in_round"],[132,2,1,"","get_current_component_id"],[132,2,1,"","get_model"],[132,2,1,"","get_number_of_components_in_round"],[132,2,1,"","get_partial_cipher"],[132,2,1,"","get_round_from_component_id"],[132,2,1,"","get_sizes_of_components_by_type"],[132,2,1,"","icounter_update"],[132,3,1,"","id"],[132,2,1,"","impossible_differential_search"],[132,3,1,"","inputs"],[132,3,1,"","inputs_bit_size"],[132,2,1,"","inputs_size_to_dict"],[132,2,1,"","is_algebraically_secure"],[132,2,1,"","is_andrx"],[132,2,1,"","is_arx"],[132,2,1,"","is_power_of_2_word_based"],[132,2,1,"","is_shift_arx"],[132,2,1,"","is_spn"],[132,2,1,"","make_cipher_id"],[132,2,1,"","make_file_name"],[132,2,1,"","neural_network_blackbox_distinguisher_tests"],[132,2,1,"","neural_network_differential_distinguisher_tests"],[132,3,1,"","number_of_rounds"],[132,3,1,"","output_bit_size"],[132,2,1,"","polynomial_system"],[132,2,1,"","polynomial_system_at_round"],[132,2,1,"","print"],[132,2,1,"","print_as_python_dictionary"],[132,2,1,"","print_as_python_dictionary_to_file"],[132,2,1,"","print_component_analysis_as_radar_charts"],[132,2,1,"","print_evaluation_python_code"],[132,2,1,"","print_evaluation_python_code_to_file"],[132,2,1,"","print_input_information"],[132,3,1,"","reference_code"],[132,2,1,"","remove_key_schedule"],[132,2,1,"","remove_round_component"],[132,2,1,"","remove_round_component_from_id"],[132,2,1,"","round_function"],[132,3,1,"","rounds"],[132,3,1,"","rounds_as_list"],[132,2,1,"","run_autond_pipeline"],[132,2,1,"","set_file_name"],[132,2,1,"","set_id"],[132,2,1,"","set_inputs"],[132,2,1,"","sort_cipher"],[132,2,1,"","test_against_reference_code"],[132,2,1,"","test_vector_check"],[132,2,1,"","train_gohr_neural_distinguisher"],[132,2,1,"","train_neural_distinguisher"],[132,3,1,"","type"],[132,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.spongent_pi_precomputation_permutation":[[133,1,1,"","SpongentPiPrecomputationPermutation"]],"ciphers.permutations.spongent_pi_precomputation_permutation.SpongentPiPrecomputationPermutation":[[133,2,1,"","add_AND_component"],[133,2,1,"","add_FSR_component"],[133,2,1,"","add_MODADD_component"],[133,2,1,"","add_MODSUB_component"],[133,2,1,"","add_NOT_component"],[133,2,1,"","add_OR_component"],[133,2,1,"","add_SBOX_component"],[133,2,1,"","add_SHIFT_component"],[133,2,1,"","add_XOR_component"],[133,2,1,"","add_cipher_output_component"],[133,2,1,"","add_concatenate_component"],[133,2,1,"","add_constant_component"],[133,2,1,"","add_intermediate_output_component"],[133,2,1,"","add_linear_layer_component"],[133,2,1,"","add_mix_column_component"],[133,2,1,"","add_permutation_component"],[133,2,1,"","add_reverse_component"],[133,2,1,"","add_rotate_component"],[133,2,1,"","add_round"],[133,2,1,"","add_round_key_output_component"],[133,2,1,"","add_round_output_component"],[133,2,1,"","add_shift_rows_component"],[133,2,1,"","add_sigma_component"],[133,2,1,"","add_suffix_to_components"],[133,2,1,"","add_theta_keccak_component"],[133,2,1,"","add_theta_xoodoo_component"],[133,2,1,"","add_variable_rotate_component"],[133,2,1,"","add_variable_shift_component"],[133,2,1,"","add_word_permutation_component"],[133,2,1,"","algebraic_tests"],[133,2,1,"","analyze_cipher"],[133,2,1,"","as_python_dictionary"],[133,2,1,"","avalanche_probability_vectors"],[133,2,1,"","cipher_inverse"],[133,2,1,"","cipher_partial_inverse"],[133,2,1,"","component_analysis_tests"],[133,2,1,"","component_from"],[133,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[133,2,1,"","continuous_avalanche_factor"],[133,2,1,"","continuous_diffusion_factor"],[133,2,1,"","continuous_diffusion_tests"],[133,2,1,"","continuous_neutrality_measure_for_bit_j"],[133,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[133,2,1,"","convert_to_compound_xor_cipher"],[133,3,1,"","current_round"],[133,3,1,"","current_round_number"],[133,3,1,"","current_round_number_of_components"],[133,2,1,"","delete_generated_evaluate_c_shared_library"],[133,2,1,"","diffusion_tests"],[133,2,1,"","evaluate"],[133,2,1,"","evaluate_using_c"],[133,2,1,"","evaluate_vectorized"],[133,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[133,3,1,"","family_name"],[133,3,1,"","file_name"],[133,2,1,"","find_good_input_difference_for_neural_distinguisher"],[133,2,1,"","find_impossible_property"],[133,2,1,"","generate_bit_based_c_code"],[133,2,1,"","generate_csv_report"],[133,2,1,"","generate_evaluate_c_code_shared_library"],[133,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[133,2,1,"","generate_word_based_c_code"],[133,2,1,"","get_all_components"],[133,2,1,"","get_all_components_ids"],[133,2,1,"","get_all_inputs_bit_positions"],[133,2,1,"","get_component_from_id"],[133,2,1,"","get_components_in_round"],[133,2,1,"","get_current_component_id"],[133,2,1,"","get_model"],[133,2,1,"","get_number_of_components_in_round"],[133,2,1,"","get_partial_cipher"],[133,2,1,"","get_round_from_component_id"],[133,2,1,"","get_sizes_of_components_by_type"],[133,3,1,"","id"],[133,2,1,"","impossible_differential_search"],[133,3,1,"","inputs"],[133,3,1,"","inputs_bit_size"],[133,2,1,"","inputs_size_to_dict"],[133,2,1,"","is_algebraically_secure"],[133,2,1,"","is_andrx"],[133,2,1,"","is_arx"],[133,2,1,"","is_power_of_2_word_based"],[133,2,1,"","is_shift_arx"],[133,2,1,"","is_spn"],[133,2,1,"","make_cipher_id"],[133,2,1,"","make_file_name"],[133,2,1,"","neural_network_blackbox_distinguisher_tests"],[133,2,1,"","neural_network_differential_distinguisher_tests"],[133,3,1,"","number_of_rounds"],[133,3,1,"","output_bit_size"],[133,2,1,"","polynomial_system"],[133,2,1,"","polynomial_system_at_round"],[133,2,1,"","print"],[133,2,1,"","print_as_python_dictionary"],[133,2,1,"","print_as_python_dictionary_to_file"],[133,2,1,"","print_component_analysis_as_radar_charts"],[133,2,1,"","print_evaluation_python_code"],[133,2,1,"","print_evaluation_python_code_to_file"],[133,2,1,"","print_input_information"],[133,3,1,"","reference_code"],[133,2,1,"","remove_key_schedule"],[133,2,1,"","remove_round_component"],[133,2,1,"","remove_round_component_from_id"],[133,2,1,"","round_function"],[133,3,1,"","rounds"],[133,3,1,"","rounds_as_list"],[133,2,1,"","run_autond_pipeline"],[133,2,1,"","set_file_name"],[133,2,1,"","set_id"],[133,2,1,"","set_inputs"],[133,2,1,"","sort_cipher"],[133,2,1,"","test_against_reference_code"],[133,2,1,"","test_vector_check"],[133,2,1,"","train_gohr_neural_distinguisher"],[133,2,1,"","train_neural_distinguisher"],[133,3,1,"","type"],[133,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_32bits_word_permutation":[[134,1,1,"","TinyJambuWordBasedPermutation"]],"ciphers.permutations.tinyjambu_32bits_word_permutation.TinyJambuWordBasedPermutation":[[134,2,1,"","add_AND_component"],[134,2,1,"","add_FSR_component"],[134,2,1,"","add_MODADD_component"],[134,2,1,"","add_MODSUB_component"],[134,2,1,"","add_NOT_component"],[134,2,1,"","add_OR_component"],[134,2,1,"","add_SBOX_component"],[134,2,1,"","add_SHIFT_component"],[134,2,1,"","add_XOR_component"],[134,2,1,"","add_cipher_output_component"],[134,2,1,"","add_concatenate_component"],[134,2,1,"","add_constant_component"],[134,2,1,"","add_intermediate_output_component"],[134,2,1,"","add_linear_layer_component"],[134,2,1,"","add_mix_column_component"],[134,2,1,"","add_permutation_component"],[134,2,1,"","add_reverse_component"],[134,2,1,"","add_rotate_component"],[134,2,1,"","add_round"],[134,2,1,"","add_round_key_output_component"],[134,2,1,"","add_round_output_component"],[134,2,1,"","add_shift_rows_component"],[134,2,1,"","add_sigma_component"],[134,2,1,"","add_suffix_to_components"],[134,2,1,"","add_theta_keccak_component"],[134,2,1,"","add_theta_xoodoo_component"],[134,2,1,"","add_variable_rotate_component"],[134,2,1,"","add_variable_shift_component"],[134,2,1,"","add_word_permutation_component"],[134,2,1,"","algebraic_tests"],[134,2,1,"","analyze_cipher"],[134,2,1,"","as_python_dictionary"],[134,2,1,"","avalanche_probability_vectors"],[134,2,1,"","cipher_inverse"],[134,2,1,"","cipher_partial_inverse"],[134,2,1,"","component_analysis_tests"],[134,2,1,"","component_from"],[134,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[134,2,1,"","continuous_avalanche_factor"],[134,2,1,"","continuous_diffusion_factor"],[134,2,1,"","continuous_diffusion_tests"],[134,2,1,"","continuous_neutrality_measure_for_bit_j"],[134,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[134,2,1,"","convert_to_compound_xor_cipher"],[134,3,1,"","current_round"],[134,3,1,"","current_round_number"],[134,3,1,"","current_round_number_of_components"],[134,2,1,"","delete_generated_evaluate_c_shared_library"],[134,2,1,"","diffusion_tests"],[134,2,1,"","evaluate"],[134,2,1,"","evaluate_using_c"],[134,2,1,"","evaluate_vectorized"],[134,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[134,3,1,"","family_name"],[134,3,1,"","file_name"],[134,2,1,"","find_good_input_difference_for_neural_distinguisher"],[134,2,1,"","find_impossible_property"],[134,2,1,"","generate_bit_based_c_code"],[134,2,1,"","generate_csv_report"],[134,2,1,"","generate_evaluate_c_code_shared_library"],[134,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[134,2,1,"","generate_word_based_c_code"],[134,2,1,"","get_all_components"],[134,2,1,"","get_all_components_ids"],[134,2,1,"","get_all_inputs_bit_positions"],[134,2,1,"","get_component_from_id"],[134,2,1,"","get_components_in_round"],[134,2,1,"","get_current_component_id"],[134,2,1,"","get_model"],[134,2,1,"","get_number_of_components_in_round"],[134,2,1,"","get_partial_cipher"],[134,2,1,"","get_round_from_component_id"],[134,2,1,"","get_sizes_of_components_by_type"],[134,3,1,"","id"],[134,2,1,"","impossible_differential_search"],[134,3,1,"","inputs"],[134,3,1,"","inputs_bit_size"],[134,2,1,"","inputs_size_to_dict"],[134,2,1,"","is_algebraically_secure"],[134,2,1,"","is_andrx"],[134,2,1,"","is_arx"],[134,2,1,"","is_power_of_2_word_based"],[134,2,1,"","is_shift_arx"],[134,2,1,"","is_spn"],[134,2,1,"","make_cipher_id"],[134,2,1,"","make_file_name"],[134,2,1,"","neural_network_blackbox_distinguisher_tests"],[134,2,1,"","neural_network_differential_distinguisher_tests"],[134,3,1,"","number_of_rounds"],[134,3,1,"","output_bit_size"],[134,2,1,"","polynomial_system"],[134,2,1,"","polynomial_system_at_round"],[134,2,1,"","print"],[134,2,1,"","print_as_python_dictionary"],[134,2,1,"","print_as_python_dictionary_to_file"],[134,2,1,"","print_component_analysis_as_radar_charts"],[134,2,1,"","print_evaluation_python_code"],[134,2,1,"","print_evaluation_python_code_to_file"],[134,2,1,"","print_input_information"],[134,3,1,"","reference_code"],[134,2,1,"","remove_key_schedule"],[134,2,1,"","remove_round_component"],[134,2,1,"","remove_round_component_from_id"],[134,2,1,"","round_function"],[134,3,1,"","rounds"],[134,3,1,"","rounds_as_list"],[134,2,1,"","run_autond_pipeline"],[134,2,1,"","set_file_name"],[134,2,1,"","set_id"],[134,2,1,"","set_inputs"],[134,2,1,"","sort_cipher"],[134,2,1,"","test_against_reference_code"],[134,2,1,"","test_vector_check"],[134,2,1,"","train_gohr_neural_distinguisher"],[134,2,1,"","train_neural_distinguisher"],[134,3,1,"","type"],[134,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation":[[135,1,1,"","TinyJambuFSRWordBasedPermutation"]],"ciphers.permutations.tinyjambu_fsr_32bits_word_permutation.TinyJambuFSRWordBasedPermutation":[[135,2,1,"","add_AND_component"],[135,2,1,"","add_FSR_component"],[135,2,1,"","add_MODADD_component"],[135,2,1,"","add_MODSUB_component"],[135,2,1,"","add_NOT_component"],[135,2,1,"","add_OR_component"],[135,2,1,"","add_SBOX_component"],[135,2,1,"","add_SHIFT_component"],[135,2,1,"","add_XOR_component"],[135,2,1,"","add_cipher_output_component"],[135,2,1,"","add_concatenate_component"],[135,2,1,"","add_constant_component"],[135,2,1,"","add_intermediate_output_component"],[135,2,1,"","add_linear_layer_component"],[135,2,1,"","add_mix_column_component"],[135,2,1,"","add_permutation_component"],[135,2,1,"","add_reverse_component"],[135,2,1,"","add_rotate_component"],[135,2,1,"","add_round"],[135,2,1,"","add_round_key_output_component"],[135,2,1,"","add_round_output_component"],[135,2,1,"","add_shift_rows_component"],[135,2,1,"","add_sigma_component"],[135,2,1,"","add_suffix_to_components"],[135,2,1,"","add_theta_keccak_component"],[135,2,1,"","add_theta_xoodoo_component"],[135,2,1,"","add_variable_rotate_component"],[135,2,1,"","add_variable_shift_component"],[135,2,1,"","add_word_permutation_component"],[135,2,1,"","algebraic_tests"],[135,2,1,"","analyze_cipher"],[135,2,1,"","as_python_dictionary"],[135,2,1,"","avalanche_probability_vectors"],[135,2,1,"","cipher_inverse"],[135,2,1,"","cipher_partial_inverse"],[135,2,1,"","component_analysis_tests"],[135,2,1,"","component_from"],[135,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[135,2,1,"","continuous_avalanche_factor"],[135,2,1,"","continuous_diffusion_factor"],[135,2,1,"","continuous_diffusion_tests"],[135,2,1,"","continuous_neutrality_measure_for_bit_j"],[135,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[135,2,1,"","convert_to_compound_xor_cipher"],[135,3,1,"","current_round"],[135,3,1,"","current_round_number"],[135,3,1,"","current_round_number_of_components"],[135,2,1,"","delete_generated_evaluate_c_shared_library"],[135,2,1,"","diffusion_tests"],[135,2,1,"","evaluate"],[135,2,1,"","evaluate_using_c"],[135,2,1,"","evaluate_vectorized"],[135,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[135,3,1,"","family_name"],[135,3,1,"","file_name"],[135,2,1,"","find_good_input_difference_for_neural_distinguisher"],[135,2,1,"","find_impossible_property"],[135,2,1,"","generate_bit_based_c_code"],[135,2,1,"","generate_csv_report"],[135,2,1,"","generate_evaluate_c_code_shared_library"],[135,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[135,2,1,"","generate_word_based_c_code"],[135,2,1,"","get_all_components"],[135,2,1,"","get_all_components_ids"],[135,2,1,"","get_all_inputs_bit_positions"],[135,2,1,"","get_component_from_id"],[135,2,1,"","get_components_in_round"],[135,2,1,"","get_current_component_id"],[135,2,1,"","get_model"],[135,2,1,"","get_number_of_components_in_round"],[135,2,1,"","get_partial_cipher"],[135,2,1,"","get_round_from_component_id"],[135,2,1,"","get_sizes_of_components_by_type"],[135,3,1,"","id"],[135,2,1,"","impossible_differential_search"],[135,3,1,"","inputs"],[135,3,1,"","inputs_bit_size"],[135,2,1,"","inputs_size_to_dict"],[135,2,1,"","is_algebraically_secure"],[135,2,1,"","is_andrx"],[135,2,1,"","is_arx"],[135,2,1,"","is_power_of_2_word_based"],[135,2,1,"","is_shift_arx"],[135,2,1,"","is_spn"],[135,2,1,"","make_cipher_id"],[135,2,1,"","make_file_name"],[135,2,1,"","neural_network_blackbox_distinguisher_tests"],[135,2,1,"","neural_network_differential_distinguisher_tests"],[135,3,1,"","number_of_rounds"],[135,3,1,"","output_bit_size"],[135,2,1,"","polynomial_system"],[135,2,1,"","polynomial_system_at_round"],[135,2,1,"","print"],[135,2,1,"","print_as_python_dictionary"],[135,2,1,"","print_as_python_dictionary_to_file"],[135,2,1,"","print_component_analysis_as_radar_charts"],[135,2,1,"","print_evaluation_python_code"],[135,2,1,"","print_evaluation_python_code_to_file"],[135,2,1,"","print_input_information"],[135,3,1,"","reference_code"],[135,2,1,"","remove_key_schedule"],[135,2,1,"","remove_round_component"],[135,2,1,"","remove_round_component_from_id"],[135,2,1,"","round_function"],[135,3,1,"","rounds"],[135,3,1,"","rounds_as_list"],[135,2,1,"","run_autond_pipeline"],[135,2,1,"","set_file_name"],[135,2,1,"","set_id"],[135,2,1,"","set_inputs"],[135,2,1,"","sort_cipher"],[135,2,1,"","test_against_reference_code"],[135,2,1,"","test_vector_check"],[135,2,1,"","train_gohr_neural_distinguisher"],[135,2,1,"","train_neural_distinguisher"],[135,3,1,"","type"],[135,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.tinyjambu_permutation":[[136,1,1,"","TinyJambuPermutation"]],"ciphers.permutations.tinyjambu_permutation.TinyJambuPermutation":[[136,2,1,"","add_AND_component"],[136,2,1,"","add_FSR_component"],[136,2,1,"","add_MODADD_component"],[136,2,1,"","add_MODSUB_component"],[136,2,1,"","add_NOT_component"],[136,2,1,"","add_OR_component"],[136,2,1,"","add_SBOX_component"],[136,2,1,"","add_SHIFT_component"],[136,2,1,"","add_XOR_component"],[136,2,1,"","add_cipher_output_component"],[136,2,1,"","add_concatenate_component"],[136,2,1,"","add_constant_component"],[136,2,1,"","add_intermediate_output_component"],[136,2,1,"","add_linear_layer_component"],[136,2,1,"","add_mix_column_component"],[136,2,1,"","add_permutation_component"],[136,2,1,"","add_reverse_component"],[136,2,1,"","add_rotate_component"],[136,2,1,"","add_round"],[136,2,1,"","add_round_key_output_component"],[136,2,1,"","add_round_output_component"],[136,2,1,"","add_shift_rows_component"],[136,2,1,"","add_sigma_component"],[136,2,1,"","add_suffix_to_components"],[136,2,1,"","add_theta_keccak_component"],[136,2,1,"","add_theta_xoodoo_component"],[136,2,1,"","add_variable_rotate_component"],[136,2,1,"","add_variable_shift_component"],[136,2,1,"","add_word_permutation_component"],[136,2,1,"","algebraic_tests"],[136,2,1,"","analyze_cipher"],[136,2,1,"","as_python_dictionary"],[136,2,1,"","avalanche_probability_vectors"],[136,2,1,"","cipher_inverse"],[136,2,1,"","cipher_partial_inverse"],[136,2,1,"","component_analysis_tests"],[136,2,1,"","component_from"],[136,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[136,2,1,"","continuous_avalanche_factor"],[136,2,1,"","continuous_diffusion_factor"],[136,2,1,"","continuous_diffusion_tests"],[136,2,1,"","continuous_neutrality_measure_for_bit_j"],[136,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[136,2,1,"","convert_to_compound_xor_cipher"],[136,3,1,"","current_round"],[136,3,1,"","current_round_number"],[136,3,1,"","current_round_number_of_components"],[136,2,1,"","delete_generated_evaluate_c_shared_library"],[136,2,1,"","diffusion_tests"],[136,2,1,"","evaluate"],[136,2,1,"","evaluate_using_c"],[136,2,1,"","evaluate_vectorized"],[136,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[136,3,1,"","family_name"],[136,3,1,"","file_name"],[136,2,1,"","find_good_input_difference_for_neural_distinguisher"],[136,2,1,"","find_impossible_property"],[136,2,1,"","generate_bit_based_c_code"],[136,2,1,"","generate_csv_report"],[136,2,1,"","generate_evaluate_c_code_shared_library"],[136,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[136,2,1,"","generate_word_based_c_code"],[136,2,1,"","get_all_components"],[136,2,1,"","get_all_components_ids"],[136,2,1,"","get_all_inputs_bit_positions"],[136,2,1,"","get_component_from_id"],[136,2,1,"","get_components_in_round"],[136,2,1,"","get_current_component_id"],[136,2,1,"","get_model"],[136,2,1,"","get_number_of_components_in_round"],[136,2,1,"","get_partial_cipher"],[136,2,1,"","get_round_from_component_id"],[136,2,1,"","get_sizes_of_components_by_type"],[136,3,1,"","id"],[136,2,1,"","impossible_differential_search"],[136,3,1,"","inputs"],[136,3,1,"","inputs_bit_size"],[136,2,1,"","inputs_size_to_dict"],[136,2,1,"","is_algebraically_secure"],[136,2,1,"","is_andrx"],[136,2,1,"","is_arx"],[136,2,1,"","is_power_of_2_word_based"],[136,2,1,"","is_shift_arx"],[136,2,1,"","is_spn"],[136,2,1,"","make_cipher_id"],[136,2,1,"","make_file_name"],[136,2,1,"","neural_network_blackbox_distinguisher_tests"],[136,2,1,"","neural_network_differential_distinguisher_tests"],[136,3,1,"","number_of_rounds"],[136,3,1,"","output_bit_size"],[136,2,1,"","polynomial_system"],[136,2,1,"","polynomial_system_at_round"],[136,2,1,"","print"],[136,2,1,"","print_as_python_dictionary"],[136,2,1,"","print_as_python_dictionary_to_file"],[136,2,1,"","print_component_analysis_as_radar_charts"],[136,2,1,"","print_evaluation_python_code"],[136,2,1,"","print_evaluation_python_code_to_file"],[136,2,1,"","print_input_information"],[136,3,1,"","reference_code"],[136,2,1,"","remove_key_schedule"],[136,2,1,"","remove_round_component"],[136,2,1,"","remove_round_component_from_id"],[136,2,1,"","round_function"],[136,3,1,"","rounds"],[136,3,1,"","rounds_as_list"],[136,2,1,"","run_autond_pipeline"],[136,2,1,"","set_file_name"],[136,2,1,"","set_id"],[136,2,1,"","set_inputs"],[136,2,1,"","sort_cipher"],[136,2,1,"","test_against_reference_code"],[136,2,1,"","test_vector_check"],[136,2,1,"","train_gohr_neural_distinguisher"],[136,2,1,"","train_neural_distinguisher"],[136,3,1,"","type"],[136,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.util":[[137,4,1,"","add_intermediate_output_component_latin_dances_permutations"],[137,4,1,"","get_input_bit_positions_latin_dances"],[137,4,1,"","half_like_round_function_latin_dances"],[137,4,1,"","init_latin_dances_cipher"],[137,4,1,"","init_state_latin_dances"],[137,4,1,"","sub_quarter_round_latin_dances"]],"ciphers.permutations.xoodoo_invertible_permutation":[[138,1,1,"","XoodooInvertiblePermutation"]],"ciphers.permutations.xoodoo_invertible_permutation.XoodooInvertiblePermutation":[[138,2,1,"","add_AND_component"],[138,2,1,"","add_FSR_component"],[138,2,1,"","add_MODADD_component"],[138,2,1,"","add_MODSUB_component"],[138,2,1,"","add_NOT_component"],[138,2,1,"","add_OR_component"],[138,2,1,"","add_SBOX_component"],[138,2,1,"","add_SHIFT_component"],[138,2,1,"","add_XOR_component"],[138,2,1,"","add_cipher_output_component"],[138,2,1,"","add_concatenate_component"],[138,2,1,"","add_constant_component"],[138,2,1,"","add_intermediate_output_component"],[138,2,1,"","add_linear_layer_component"],[138,2,1,"","add_mix_column_component"],[138,2,1,"","add_output_component"],[138,2,1,"","add_permutation_component"],[138,2,1,"","add_reverse_component"],[138,2,1,"","add_rotate_component"],[138,2,1,"","add_round"],[138,2,1,"","add_round_key_output_component"],[138,2,1,"","add_round_output_component"],[138,2,1,"","add_shift_rows_component"],[138,2,1,"","add_sigma_component"],[138,2,1,"","add_suffix_to_components"],[138,2,1,"","add_theta_keccak_component"],[138,2,1,"","add_theta_xoodoo_component"],[138,2,1,"","add_variable_rotate_component"],[138,2,1,"","add_variable_shift_component"],[138,2,1,"","add_word_permutation_component"],[138,2,1,"","algebraic_tests"],[138,2,1,"","analyze_cipher"],[138,2,1,"","apply_sbox_to_each_3bit_column"],[138,2,1,"","as_python_dictionary"],[138,2,1,"","avalanche_probability_vectors"],[138,2,1,"","chi_definition"],[138,2,1,"","cipher_inverse"],[138,2,1,"","cipher_partial_inverse"],[138,2,1,"","component_analysis_tests"],[138,2,1,"","component_from"],[138,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[138,2,1,"","continuous_avalanche_factor"],[138,2,1,"","continuous_diffusion_factor"],[138,2,1,"","continuous_diffusion_tests"],[138,2,1,"","continuous_neutrality_measure_for_bit_j"],[138,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[138,2,1,"","convert_to_compound_xor_cipher"],[138,3,1,"","current_round"],[138,3,1,"","current_round_number"],[138,3,1,"","current_round_number_of_components"],[138,2,1,"","delete_generated_evaluate_c_shared_library"],[138,2,1,"","diffusion_tests"],[138,2,1,"","evaluate"],[138,2,1,"","evaluate_using_c"],[138,2,1,"","evaluate_vectorized"],[138,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[138,3,1,"","family_name"],[138,3,1,"","file_name"],[138,2,1,"","find_good_input_difference_for_neural_distinguisher"],[138,2,1,"","find_impossible_property"],[138,2,1,"","generate_bit_based_c_code"],[138,2,1,"","generate_csv_report"],[138,2,1,"","generate_evaluate_c_code_shared_library"],[138,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[138,2,1,"","generate_word_based_c_code"],[138,2,1,"","get_all_components"],[138,2,1,"","get_all_components_ids"],[138,2,1,"","get_all_inputs_bit_positions"],[138,2,1,"","get_component_from_id"],[138,2,1,"","get_components_in_round"],[138,2,1,"","get_current_component_id"],[138,2,1,"","get_model"],[138,2,1,"","get_number_of_components_in_round"],[138,2,1,"","get_partial_cipher"],[138,2,1,"","get_round_from_component_id"],[138,2,1,"","get_sizes_of_components_by_type"],[138,3,1,"","id"],[138,2,1,"","impossible_differential_search"],[138,3,1,"","inputs"],[138,3,1,"","inputs_bit_size"],[138,2,1,"","inputs_size_to_dict"],[138,2,1,"","iota_definition"],[138,2,1,"","is_algebraically_secure"],[138,2,1,"","is_andrx"],[138,2,1,"","is_arx"],[138,2,1,"","is_power_of_2_word_based"],[138,2,1,"","is_shift_arx"],[138,2,1,"","is_spn"],[138,2,1,"","make_cipher_id"],[138,2,1,"","make_file_name"],[138,2,1,"","neural_network_blackbox_distinguisher_tests"],[138,2,1,"","neural_network_differential_distinguisher_tests"],[138,3,1,"","number_of_rounds"],[138,3,1,"","output_bit_size"],[138,2,1,"","polynomial_system"],[138,2,1,"","polynomial_system_at_round"],[138,2,1,"","print"],[138,2,1,"","print_as_python_dictionary"],[138,2,1,"","print_as_python_dictionary_to_file"],[138,2,1,"","print_component_analysis_as_radar_charts"],[138,2,1,"","print_evaluation_python_code"],[138,2,1,"","print_evaluation_python_code_to_file"],[138,2,1,"","print_input_information"],[138,3,1,"","reference_code"],[138,2,1,"","remove_key_schedule"],[138,2,1,"","remove_round_component"],[138,2,1,"","remove_round_component_from_id"],[138,2,1,"","rhoeast_definition"],[138,2,1,"","rhowest_definition"],[138,2,1,"","rotate_x_z"],[138,2,1,"","round_function"],[138,3,1,"","rounds"],[138,3,1,"","rounds_as_list"],[138,2,1,"","run_autond_pipeline"],[138,2,1,"","set_file_name"],[138,2,1,"","set_id"],[138,2,1,"","set_inputs"],[138,2,1,"","sort_cipher"],[138,2,1,"","test_against_reference_code"],[138,2,1,"","test_vector_check"],[138,2,1,"","theta_definition"],[138,2,1,"","train_gohr_neural_distinguisher"],[138,2,1,"","train_neural_distinguisher"],[138,3,1,"","type"],[138,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_permutation":[[139,1,1,"","XoodooPermutation"]],"ciphers.permutations.xoodoo_permutation.XoodooPermutation":[[139,2,1,"","add_AND_component"],[139,2,1,"","add_FSR_component"],[139,2,1,"","add_MODADD_component"],[139,2,1,"","add_MODSUB_component"],[139,2,1,"","add_NOT_component"],[139,2,1,"","add_OR_component"],[139,2,1,"","add_SBOX_component"],[139,2,1,"","add_SHIFT_component"],[139,2,1,"","add_XOR_component"],[139,2,1,"","add_cipher_output_component"],[139,2,1,"","add_concatenate_component"],[139,2,1,"","add_constant_component"],[139,2,1,"","add_intermediate_output_component"],[139,2,1,"","add_linear_layer_component"],[139,2,1,"","add_mix_column_component"],[139,2,1,"","add_output_component"],[139,2,1,"","add_permutation_component"],[139,2,1,"","add_reverse_component"],[139,2,1,"","add_rotate_component"],[139,2,1,"","add_round"],[139,2,1,"","add_round_key_output_component"],[139,2,1,"","add_round_output_component"],[139,2,1,"","add_round_output_linear"],[139,2,1,"","add_round_output_nonlinear"],[139,2,1,"","add_shift_rows_component"],[139,2,1,"","add_sigma_component"],[139,2,1,"","add_suffix_to_components"],[139,2,1,"","add_theta_keccak_component"],[139,2,1,"","add_theta_xoodoo_component"],[139,2,1,"","add_variable_rotate_component"],[139,2,1,"","add_variable_shift_component"],[139,2,1,"","add_word_permutation_component"],[139,2,1,"","algebraic_tests"],[139,2,1,"","analyze_cipher"],[139,2,1,"","as_python_dictionary"],[139,2,1,"","avalanche_probability_vectors"],[139,2,1,"","chi_definition"],[139,2,1,"","cipher_inverse"],[139,2,1,"","cipher_partial_inverse"],[139,2,1,"","component_analysis_tests"],[139,2,1,"","component_from"],[139,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[139,2,1,"","continuous_avalanche_factor"],[139,2,1,"","continuous_diffusion_factor"],[139,2,1,"","continuous_diffusion_tests"],[139,2,1,"","continuous_neutrality_measure_for_bit_j"],[139,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[139,2,1,"","convert_to_compound_xor_cipher"],[139,3,1,"","current_round"],[139,3,1,"","current_round_number"],[139,3,1,"","current_round_number_of_components"],[139,2,1,"","delete_generated_evaluate_c_shared_library"],[139,2,1,"","diffusion_tests"],[139,2,1,"","evaluate"],[139,2,1,"","evaluate_using_c"],[139,2,1,"","evaluate_vectorized"],[139,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[139,3,1,"","family_name"],[139,3,1,"","file_name"],[139,2,1,"","find_good_input_difference_for_neural_distinguisher"],[139,2,1,"","find_impossible_property"],[139,2,1,"","generate_bit_based_c_code"],[139,2,1,"","generate_csv_report"],[139,2,1,"","generate_evaluate_c_code_shared_library"],[139,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[139,2,1,"","generate_word_based_c_code"],[139,2,1,"","get_all_components"],[139,2,1,"","get_all_components_ids"],[139,2,1,"","get_all_inputs_bit_positions"],[139,2,1,"","get_component_from_id"],[139,2,1,"","get_components_in_round"],[139,2,1,"","get_current_component_id"],[139,2,1,"","get_model"],[139,2,1,"","get_number_of_components_in_round"],[139,2,1,"","get_partial_cipher"],[139,2,1,"","get_round_from_component_id"],[139,2,1,"","get_sizes_of_components_by_type"],[139,3,1,"","id"],[139,2,1,"","impossible_differential_search"],[139,3,1,"","inputs"],[139,3,1,"","inputs_bit_size"],[139,2,1,"","inputs_size_to_dict"],[139,2,1,"","iota_definition"],[139,2,1,"","is_algebraically_secure"],[139,2,1,"","is_andrx"],[139,2,1,"","is_arx"],[139,2,1,"","is_power_of_2_word_based"],[139,2,1,"","is_shift_arx"],[139,2,1,"","is_spn"],[139,2,1,"","make_cipher_id"],[139,2,1,"","make_file_name"],[139,2,1,"","neural_network_blackbox_distinguisher_tests"],[139,2,1,"","neural_network_differential_distinguisher_tests"],[139,3,1,"","number_of_rounds"],[139,3,1,"","output_bit_size"],[139,2,1,"","polynomial_system"],[139,2,1,"","polynomial_system_at_round"],[139,2,1,"","print"],[139,2,1,"","print_as_python_dictionary"],[139,2,1,"","print_as_python_dictionary_to_file"],[139,2,1,"","print_component_analysis_as_radar_charts"],[139,2,1,"","print_evaluation_python_code"],[139,2,1,"","print_evaluation_python_code_to_file"],[139,2,1,"","print_input_information"],[139,3,1,"","reference_code"],[139,2,1,"","remove_key_schedule"],[139,2,1,"","remove_round_component"],[139,2,1,"","remove_round_component_from_id"],[139,2,1,"","rhoeast_definition"],[139,2,1,"","rhowest_definition"],[139,2,1,"","rotate_x_z"],[139,2,1,"","round_function"],[139,3,1,"","rounds"],[139,3,1,"","rounds_as_list"],[139,2,1,"","run_autond_pipeline"],[139,2,1,"","set_file_name"],[139,2,1,"","set_id"],[139,2,1,"","set_inputs"],[139,2,1,"","sort_cipher"],[139,2,1,"","test_against_reference_code"],[139,2,1,"","test_vector_check"],[139,2,1,"","theta_definition"],[139,2,1,"","train_gohr_neural_distinguisher"],[139,2,1,"","train_neural_distinguisher"],[139,3,1,"","type"],[139,2,1,"","zero_correlation_linear_search"]],"ciphers.permutations.xoodoo_sbox_permutation":[[140,1,1,"","XoodooSboxPermutation"]],"ciphers.permutations.xoodoo_sbox_permutation.XoodooSboxPermutation":[[140,2,1,"","add_AND_component"],[140,2,1,"","add_FSR_component"],[140,2,1,"","add_MODADD_component"],[140,2,1,"","add_MODSUB_component"],[140,2,1,"","add_NOT_component"],[140,2,1,"","add_OR_component"],[140,2,1,"","add_SBOX_component"],[140,2,1,"","add_SHIFT_component"],[140,2,1,"","add_XOR_component"],[140,2,1,"","add_cipher_output_component"],[140,2,1,"","add_concatenate_component"],[140,2,1,"","add_constant_component"],[140,2,1,"","add_intermediate_output_component"],[140,2,1,"","add_linear_layer_component"],[140,2,1,"","add_mix_column_component"],[140,2,1,"","add_output_component"],[140,2,1,"","add_permutation_component"],[140,2,1,"","add_reverse_component"],[140,2,1,"","add_rotate_component"],[140,2,1,"","add_round"],[140,2,1,"","add_round_key_output_component"],[140,2,1,"","add_round_output_component"],[140,2,1,"","add_shift_rows_component"],[140,2,1,"","add_sigma_component"],[140,2,1,"","add_suffix_to_components"],[140,2,1,"","add_theta_keccak_component"],[140,2,1,"","add_theta_xoodoo_component"],[140,2,1,"","add_variable_rotate_component"],[140,2,1,"","add_variable_shift_component"],[140,2,1,"","add_word_permutation_component"],[140,2,1,"","algebraic_tests"],[140,2,1,"","analyze_cipher"],[140,2,1,"","apply_sbox_to_each_3bit_column"],[140,2,1,"","as_python_dictionary"],[140,2,1,"","avalanche_probability_vectors"],[140,2,1,"","chi_definition"],[140,2,1,"","cipher_inverse"],[140,2,1,"","cipher_partial_inverse"],[140,2,1,"","component_analysis_tests"],[140,2,1,"","component_from"],[140,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[140,2,1,"","continuous_avalanche_factor"],[140,2,1,"","continuous_diffusion_factor"],[140,2,1,"","continuous_diffusion_tests"],[140,2,1,"","continuous_neutrality_measure_for_bit_j"],[140,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[140,2,1,"","convert_to_compound_xor_cipher"],[140,3,1,"","current_round"],[140,3,1,"","current_round_number"],[140,3,1,"","current_round_number_of_components"],[140,2,1,"","delete_generated_evaluate_c_shared_library"],[140,2,1,"","diffusion_tests"],[140,2,1,"","evaluate"],[140,2,1,"","evaluate_using_c"],[140,2,1,"","evaluate_vectorized"],[140,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[140,3,1,"","family_name"],[140,3,1,"","file_name"],[140,2,1,"","find_good_input_difference_for_neural_distinguisher"],[140,2,1,"","find_impossible_property"],[140,2,1,"","generate_bit_based_c_code"],[140,2,1,"","generate_csv_report"],[140,2,1,"","generate_evaluate_c_code_shared_library"],[140,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[140,2,1,"","generate_word_based_c_code"],[140,2,1,"","get_all_components"],[140,2,1,"","get_all_components_ids"],[140,2,1,"","get_all_inputs_bit_positions"],[140,2,1,"","get_component_from_id"],[140,2,1,"","get_components_in_round"],[140,2,1,"","get_current_component_id"],[140,2,1,"","get_model"],[140,2,1,"","get_number_of_components_in_round"],[140,2,1,"","get_partial_cipher"],[140,2,1,"","get_round_from_component_id"],[140,2,1,"","get_sizes_of_components_by_type"],[140,3,1,"","id"],[140,2,1,"","impossible_differential_search"],[140,3,1,"","inputs"],[140,3,1,"","inputs_bit_size"],[140,2,1,"","inputs_size_to_dict"],[140,2,1,"","iota_definition"],[140,2,1,"","is_algebraically_secure"],[140,2,1,"","is_andrx"],[140,2,1,"","is_arx"],[140,2,1,"","is_power_of_2_word_based"],[140,2,1,"","is_shift_arx"],[140,2,1,"","is_spn"],[140,2,1,"","make_cipher_id"],[140,2,1,"","make_file_name"],[140,2,1,"","neural_network_blackbox_distinguisher_tests"],[140,2,1,"","neural_network_differential_distinguisher_tests"],[140,3,1,"","number_of_rounds"],[140,3,1,"","output_bit_size"],[140,2,1,"","polynomial_system"],[140,2,1,"","polynomial_system_at_round"],[140,2,1,"","print"],[140,2,1,"","print_as_python_dictionary"],[140,2,1,"","print_as_python_dictionary_to_file"],[140,2,1,"","print_component_analysis_as_radar_charts"],[140,2,1,"","print_evaluation_python_code"],[140,2,1,"","print_evaluation_python_code_to_file"],[140,2,1,"","print_input_information"],[140,3,1,"","reference_code"],[140,2,1,"","remove_key_schedule"],[140,2,1,"","remove_round_component"],[140,2,1,"","remove_round_component_from_id"],[140,2,1,"","rhoeast_definition"],[140,2,1,"","rhowest_definition"],[140,2,1,"","rotate_x_z"],[140,2,1,"","round_function"],[140,3,1,"","rounds"],[140,3,1,"","rounds_as_list"],[140,2,1,"","run_autond_pipeline"],[140,2,1,"","set_file_name"],[140,2,1,"","set_id"],[140,2,1,"","set_inputs"],[140,2,1,"","sort_cipher"],[140,2,1,"","test_against_reference_code"],[140,2,1,"","test_vector_check"],[140,2,1,"","theta_definition"],[140,2,1,"","train_gohr_neural_distinguisher"],[140,2,1,"","train_neural_distinguisher"],[140,3,1,"","type"],[140,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers":[[141,0,0,"-","a5_1_stream_cipher"],[142,0,0,"-","bivium_stream_cipher"],[143,0,0,"-","bluetooth_stream_cipher_e0"],[144,0,0,"-","chacha_stream_cipher"],[145,0,0,"-","snow3g_stream_cipher"],[146,0,0,"-","trivium_stream_cipher"],[147,0,0,"-","zuc_stream_cipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher":[[141,1,1,"","A51StreamCipher"]],"ciphers.stream_ciphers.a5_1_stream_cipher.A51StreamCipher":[[141,2,1,"","add_AND_component"],[141,2,1,"","add_FSR_component"],[141,2,1,"","add_MODADD_component"],[141,2,1,"","add_MODSUB_component"],[141,2,1,"","add_NOT_component"],[141,2,1,"","add_OR_component"],[141,2,1,"","add_SBOX_component"],[141,2,1,"","add_SHIFT_component"],[141,2,1,"","add_XOR_component"],[141,2,1,"","add_cipher_output_component"],[141,2,1,"","add_concatenate_component"],[141,2,1,"","add_constant_component"],[141,2,1,"","add_intermediate_output_component"],[141,2,1,"","add_linear_layer_component"],[141,2,1,"","add_mix_column_component"],[141,2,1,"","add_permutation_component"],[141,2,1,"","add_reverse_component"],[141,2,1,"","add_rotate_component"],[141,2,1,"","add_round"],[141,2,1,"","add_round_key_output_component"],[141,2,1,"","add_round_output_component"],[141,2,1,"","add_shift_rows_component"],[141,2,1,"","add_sigma_component"],[141,2,1,"","add_suffix_to_components"],[141,2,1,"","add_theta_keccak_component"],[141,2,1,"","add_theta_xoodoo_component"],[141,2,1,"","add_variable_rotate_component"],[141,2,1,"","add_variable_shift_component"],[141,2,1,"","add_word_permutation_component"],[141,2,1,"","algebraic_tests"],[141,2,1,"","analyze_cipher"],[141,2,1,"","as_python_dictionary"],[141,2,1,"","avalanche_probability_vectors"],[141,2,1,"","cipher_inverse"],[141,2,1,"","cipher_partial_inverse"],[141,2,1,"","component_analysis_tests"],[141,2,1,"","component_from"],[141,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[141,2,1,"","continuous_avalanche_factor"],[141,2,1,"","continuous_diffusion_factor"],[141,2,1,"","continuous_diffusion_tests"],[141,2,1,"","continuous_neutrality_measure_for_bit_j"],[141,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[141,2,1,"","convert_to_compound_xor_cipher"],[141,3,1,"","current_round"],[141,3,1,"","current_round_number"],[141,3,1,"","current_round_number_of_components"],[141,2,1,"","delete_generated_evaluate_c_shared_library"],[141,2,1,"","diffusion_tests"],[141,2,1,"","evaluate"],[141,2,1,"","evaluate_using_c"],[141,2,1,"","evaluate_vectorized"],[141,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[141,3,1,"","family_name"],[141,3,1,"","file_name"],[141,2,1,"","find_good_input_difference_for_neural_distinguisher"],[141,2,1,"","find_impossible_property"],[141,2,1,"","generate_bit_based_c_code"],[141,2,1,"","generate_csv_report"],[141,2,1,"","generate_evaluate_c_code_shared_library"],[141,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[141,2,1,"","generate_word_based_c_code"],[141,2,1,"","get_all_components"],[141,2,1,"","get_all_components_ids"],[141,2,1,"","get_all_inputs_bit_positions"],[141,2,1,"","get_component_from_id"],[141,2,1,"","get_components_in_round"],[141,2,1,"","get_current_component_id"],[141,2,1,"","get_model"],[141,2,1,"","get_number_of_components_in_round"],[141,2,1,"","get_partial_cipher"],[141,2,1,"","get_round_from_component_id"],[141,2,1,"","get_sizes_of_components_by_type"],[141,3,1,"","id"],[141,2,1,"","impossible_differential_search"],[141,3,1,"","inputs"],[141,3,1,"","inputs_bit_size"],[141,2,1,"","inputs_size_to_dict"],[141,2,1,"","is_algebraically_secure"],[141,2,1,"","is_andrx"],[141,2,1,"","is_arx"],[141,2,1,"","is_power_of_2_word_based"],[141,2,1,"","is_shift_arx"],[141,2,1,"","is_spn"],[141,2,1,"","make_cipher_id"],[141,2,1,"","make_file_name"],[141,2,1,"","neural_network_blackbox_distinguisher_tests"],[141,2,1,"","neural_network_differential_distinguisher_tests"],[141,3,1,"","number_of_rounds"],[141,3,1,"","output_bit_size"],[141,2,1,"","polynomial_system"],[141,2,1,"","polynomial_system_at_round"],[141,2,1,"","print"],[141,2,1,"","print_as_python_dictionary"],[141,2,1,"","print_as_python_dictionary_to_file"],[141,2,1,"","print_component_analysis_as_radar_charts"],[141,2,1,"","print_evaluation_python_code"],[141,2,1,"","print_evaluation_python_code_to_file"],[141,2,1,"","print_input_information"],[141,3,1,"","reference_code"],[141,2,1,"","regs_initialization"],[141,2,1,"","remove_key_schedule"],[141,2,1,"","remove_round_component"],[141,2,1,"","remove_round_component_from_id"],[141,2,1,"","round_function"],[141,3,1,"","rounds"],[141,3,1,"","rounds_as_list"],[141,2,1,"","run_autond_pipeline"],[141,2,1,"","set_file_name"],[141,2,1,"","set_id"],[141,2,1,"","set_inputs"],[141,2,1,"","sort_cipher"],[141,2,1,"","test_against_reference_code"],[141,2,1,"","test_vector_check"],[141,2,1,"","train_gohr_neural_distinguisher"],[141,2,1,"","train_neural_distinguisher"],[141,3,1,"","type"],[141,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bivium_stream_cipher":[[142,1,1,"","BiviumStreamCipher"]],"ciphers.stream_ciphers.bivium_stream_cipher.BiviumStreamCipher":[[142,2,1,"","add_AND_component"],[142,2,1,"","add_FSR_component"],[142,2,1,"","add_MODADD_component"],[142,2,1,"","add_MODSUB_component"],[142,2,1,"","add_NOT_component"],[142,2,1,"","add_OR_component"],[142,2,1,"","add_SBOX_component"],[142,2,1,"","add_SHIFT_component"],[142,2,1,"","add_XOR_component"],[142,2,1,"","add_cipher_output_component"],[142,2,1,"","add_concatenate_component"],[142,2,1,"","add_constant_component"],[142,2,1,"","add_intermediate_output_component"],[142,2,1,"","add_linear_layer_component"],[142,2,1,"","add_mix_column_component"],[142,2,1,"","add_permutation_component"],[142,2,1,"","add_reverse_component"],[142,2,1,"","add_rotate_component"],[142,2,1,"","add_round"],[142,2,1,"","add_round_key_output_component"],[142,2,1,"","add_round_output_component"],[142,2,1,"","add_shift_rows_component"],[142,2,1,"","add_sigma_component"],[142,2,1,"","add_suffix_to_components"],[142,2,1,"","add_theta_keccak_component"],[142,2,1,"","add_theta_xoodoo_component"],[142,2,1,"","add_variable_rotate_component"],[142,2,1,"","add_variable_shift_component"],[142,2,1,"","add_word_permutation_component"],[142,2,1,"","algebraic_tests"],[142,2,1,"","analyze_cipher"],[142,2,1,"","as_python_dictionary"],[142,2,1,"","avalanche_probability_vectors"],[142,2,1,"","bivium_key_stream"],[142,2,1,"","bivium_state_initialization"],[142,2,1,"","cipher_inverse"],[142,2,1,"","cipher_partial_inverse"],[142,2,1,"","component_analysis_tests"],[142,2,1,"","component_from"],[142,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[142,2,1,"","continuous_avalanche_factor"],[142,2,1,"","continuous_diffusion_factor"],[142,2,1,"","continuous_diffusion_tests"],[142,2,1,"","continuous_neutrality_measure_for_bit_j"],[142,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[142,2,1,"","convert_to_compound_xor_cipher"],[142,3,1,"","current_round"],[142,3,1,"","current_round_number"],[142,3,1,"","current_round_number_of_components"],[142,2,1,"","delete_generated_evaluate_c_shared_library"],[142,2,1,"","diffusion_tests"],[142,2,1,"","evaluate"],[142,2,1,"","evaluate_using_c"],[142,2,1,"","evaluate_vectorized"],[142,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[142,3,1,"","family_name"],[142,3,1,"","file_name"],[142,2,1,"","find_good_input_difference_for_neural_distinguisher"],[142,2,1,"","find_impossible_property"],[142,2,1,"","generate_bit_based_c_code"],[142,2,1,"","generate_csv_report"],[142,2,1,"","generate_evaluate_c_code_shared_library"],[142,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[142,2,1,"","generate_word_based_c_code"],[142,2,1,"","get_all_components"],[142,2,1,"","get_all_components_ids"],[142,2,1,"","get_all_inputs_bit_positions"],[142,2,1,"","get_component_from_id"],[142,2,1,"","get_components_in_round"],[142,2,1,"","get_current_component_id"],[142,2,1,"","get_model"],[142,2,1,"","get_number_of_components_in_round"],[142,2,1,"","get_partial_cipher"],[142,2,1,"","get_round_from_component_id"],[142,2,1,"","get_sizes_of_components_by_type"],[142,3,1,"","id"],[142,2,1,"","impossible_differential_search"],[142,3,1,"","inputs"],[142,3,1,"","inputs_bit_size"],[142,2,1,"","inputs_size_to_dict"],[142,2,1,"","is_algebraically_secure"],[142,2,1,"","is_andrx"],[142,2,1,"","is_arx"],[142,2,1,"","is_power_of_2_word_based"],[142,2,1,"","is_shift_arx"],[142,2,1,"","is_spn"],[142,2,1,"","make_cipher_id"],[142,2,1,"","make_file_name"],[142,2,1,"","neural_network_blackbox_distinguisher_tests"],[142,2,1,"","neural_network_differential_distinguisher_tests"],[142,3,1,"","number_of_rounds"],[142,3,1,"","output_bit_size"],[142,2,1,"","polynomial_system"],[142,2,1,"","polynomial_system_at_round"],[142,2,1,"","print"],[142,2,1,"","print_as_python_dictionary"],[142,2,1,"","print_as_python_dictionary_to_file"],[142,2,1,"","print_component_analysis_as_radar_charts"],[142,2,1,"","print_evaluation_python_code"],[142,2,1,"","print_evaluation_python_code_to_file"],[142,2,1,"","print_input_information"],[142,3,1,"","reference_code"],[142,2,1,"","remove_key_schedule"],[142,2,1,"","remove_round_component"],[142,2,1,"","remove_round_component_from_id"],[142,3,1,"","rounds"],[142,3,1,"","rounds_as_list"],[142,2,1,"","run_autond_pipeline"],[142,2,1,"","set_file_name"],[142,2,1,"","set_id"],[142,2,1,"","set_inputs"],[142,2,1,"","sort_cipher"],[142,2,1,"","test_against_reference_code"],[142,2,1,"","test_vector_check"],[142,2,1,"","train_gohr_neural_distinguisher"],[142,2,1,"","train_neural_distinguisher"],[142,3,1,"","type"],[142,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0":[[143,1,1,"","BluetoothStreamCipherE0"]],"ciphers.stream_ciphers.bluetooth_stream_cipher_e0.BluetoothStreamCipherE0":[[143,2,1,"","add_AND_component"],[143,2,1,"","add_FSR_component"],[143,2,1,"","add_MODADD_component"],[143,2,1,"","add_MODSUB_component"],[143,2,1,"","add_NOT_component"],[143,2,1,"","add_OR_component"],[143,2,1,"","add_SBOX_component"],[143,2,1,"","add_SHIFT_component"],[143,2,1,"","add_XOR_component"],[143,2,1,"","add_cipher_output_component"],[143,2,1,"","add_concatenate_component"],[143,2,1,"","add_constant_component"],[143,2,1,"","add_intermediate_output_component"],[143,2,1,"","add_linear_layer_component"],[143,2,1,"","add_mix_column_component"],[143,2,1,"","add_permutation_component"],[143,2,1,"","add_reverse_component"],[143,2,1,"","add_rotate_component"],[143,2,1,"","add_round"],[143,2,1,"","add_round_key_output_component"],[143,2,1,"","add_round_output_component"],[143,2,1,"","add_shift_rows_component"],[143,2,1,"","add_sigma_component"],[143,2,1,"","add_suffix_to_components"],[143,2,1,"","add_theta_keccak_component"],[143,2,1,"","add_theta_xoodoo_component"],[143,2,1,"","add_variable_rotate_component"],[143,2,1,"","add_variable_shift_component"],[143,2,1,"","add_word_permutation_component"],[143,2,1,"","algebraic_tests"],[143,2,1,"","analyze_cipher"],[143,2,1,"","as_python_dictionary"],[143,2,1,"","avalanche_probability_vectors"],[143,2,1,"","cipher_inverse"],[143,2,1,"","cipher_partial_inverse"],[143,2,1,"","component_analysis_tests"],[143,2,1,"","component_from"],[143,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[143,2,1,"","continuous_avalanche_factor"],[143,2,1,"","continuous_diffusion_factor"],[143,2,1,"","continuous_diffusion_tests"],[143,2,1,"","continuous_neutrality_measure_for_bit_j"],[143,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[143,2,1,"","convert_to_compound_xor_cipher"],[143,3,1,"","current_round"],[143,3,1,"","current_round_number"],[143,3,1,"","current_round_number_of_components"],[143,2,1,"","delete_generated_evaluate_c_shared_library"],[143,2,1,"","diffusion_tests"],[143,2,1,"","e0_keystream"],[143,2,1,"","e0_nonlinear_function"],[143,2,1,"","evaluate"],[143,2,1,"","evaluate_using_c"],[143,2,1,"","evaluate_vectorized"],[143,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[143,3,1,"","family_name"],[143,3,1,"","file_name"],[143,2,1,"","find_good_input_difference_for_neural_distinguisher"],[143,2,1,"","find_impossible_property"],[143,2,1,"","generate_bit_based_c_code"],[143,2,1,"","generate_csv_report"],[143,2,1,"","generate_evaluate_c_code_shared_library"],[143,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[143,2,1,"","generate_word_based_c_code"],[143,2,1,"","get_all_components"],[143,2,1,"","get_all_components_ids"],[143,2,1,"","get_all_inputs_bit_positions"],[143,2,1,"","get_component_from_id"],[143,2,1,"","get_components_in_round"],[143,2,1,"","get_current_component_id"],[143,2,1,"","get_model"],[143,2,1,"","get_number_of_components_in_round"],[143,2,1,"","get_partial_cipher"],[143,2,1,"","get_round_from_component_id"],[143,2,1,"","get_sizes_of_components_by_type"],[143,3,1,"","id"],[143,2,1,"","impossible_differential_search"],[143,3,1,"","inputs"],[143,3,1,"","inputs_bit_size"],[143,2,1,"","inputs_size_to_dict"],[143,2,1,"","is_algebraically_secure"],[143,2,1,"","is_andrx"],[143,2,1,"","is_arx"],[143,2,1,"","is_power_of_2_word_based"],[143,2,1,"","is_shift_arx"],[143,2,1,"","is_spn"],[143,2,1,"","make_cipher_id"],[143,2,1,"","make_file_name"],[143,2,1,"","neural_network_blackbox_distinguisher_tests"],[143,2,1,"","neural_network_differential_distinguisher_tests"],[143,3,1,"","number_of_rounds"],[143,3,1,"","output_bit_size"],[143,2,1,"","polynomial_system"],[143,2,1,"","polynomial_system_at_round"],[143,2,1,"","print"],[143,2,1,"","print_as_python_dictionary"],[143,2,1,"","print_as_python_dictionary_to_file"],[143,2,1,"","print_component_analysis_as_radar_charts"],[143,2,1,"","print_evaluation_python_code"],[143,2,1,"","print_evaluation_python_code_to_file"],[143,2,1,"","print_input_information"],[143,3,1,"","reference_code"],[143,2,1,"","remove_key_schedule"],[143,2,1,"","remove_round_component"],[143,2,1,"","remove_round_component_from_id"],[143,3,1,"","rounds"],[143,3,1,"","rounds_as_list"],[143,2,1,"","run_autond_pipeline"],[143,2,1,"","set_file_name"],[143,2,1,"","set_id"],[143,2,1,"","set_inputs"],[143,2,1,"","sort_cipher"],[143,2,1,"","test_against_reference_code"],[143,2,1,"","test_vector_check"],[143,2,1,"","train_gohr_neural_distinguisher"],[143,2,1,"","train_neural_distinguisher"],[143,3,1,"","type"],[143,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.chacha_stream_cipher":[[144,1,1,"","ChachaStreamCipher"],[144,4,1,"","init_state_plaintext"]],"ciphers.stream_ciphers.chacha_stream_cipher.ChachaStreamCipher":[[144,2,1,"","add_AND_component"],[144,2,1,"","add_FSR_component"],[144,2,1,"","add_MODADD_component"],[144,2,1,"","add_MODSUB_component"],[144,2,1,"","add_NOT_component"],[144,2,1,"","add_OR_component"],[144,2,1,"","add_SBOX_component"],[144,2,1,"","add_SHIFT_component"],[144,2,1,"","add_XOR_component"],[144,2,1,"","add_cipher_output_component"],[144,2,1,"","add_concatenate_component"],[144,2,1,"","add_constant_component"],[144,2,1,"","add_intermediate_output_component"],[144,2,1,"","add_linear_layer_component"],[144,2,1,"","add_mix_column_component"],[144,2,1,"","add_permutation_component"],[144,2,1,"","add_reverse_component"],[144,2,1,"","add_rotate_component"],[144,2,1,"","add_round"],[144,2,1,"","add_round_key_output_component"],[144,2,1,"","add_round_output_component"],[144,2,1,"","add_shift_rows_component"],[144,2,1,"","add_sigma_component"],[144,2,1,"","add_suffix_to_components"],[144,2,1,"","add_theta_keccak_component"],[144,2,1,"","add_theta_xoodoo_component"],[144,2,1,"","add_variable_rotate_component"],[144,2,1,"","add_variable_shift_component"],[144,2,1,"","add_word_permutation_component"],[144,2,1,"","algebraic_tests"],[144,2,1,"","analyze_cipher"],[144,2,1,"","as_python_dictionary"],[144,2,1,"","avalanche_probability_vectors"],[144,2,1,"","bottom_half_quarter_round"],[144,2,1,"","cipher_inverse"],[144,2,1,"","cipher_partial_inverse"],[144,2,1,"","component_analysis_tests"],[144,2,1,"","component_from"],[144,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[144,2,1,"","continuous_avalanche_factor"],[144,2,1,"","continuous_diffusion_factor"],[144,2,1,"","continuous_diffusion_tests"],[144,2,1,"","continuous_neutrality_measure_for_bit_j"],[144,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[144,2,1,"","convert_to_compound_xor_cipher"],[144,3,1,"","current_round"],[144,3,1,"","current_round_number"],[144,3,1,"","current_round_number_of_components"],[144,2,1,"","delete_generated_evaluate_c_shared_library"],[144,2,1,"","diffusion_tests"],[144,2,1,"","evaluate"],[144,2,1,"","evaluate_using_c"],[144,2,1,"","evaluate_vectorized"],[144,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[144,3,1,"","family_name"],[144,3,1,"","file_name"],[144,2,1,"","find_good_input_difference_for_neural_distinguisher"],[144,2,1,"","find_impossible_property"],[144,2,1,"","generate_bit_based_c_code"],[144,2,1,"","generate_csv_report"],[144,2,1,"","generate_evaluate_c_code_shared_library"],[144,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[144,2,1,"","generate_word_based_c_code"],[144,2,1,"","get_all_components"],[144,2,1,"","get_all_components_ids"],[144,2,1,"","get_all_inputs_bit_positions"],[144,2,1,"","get_component_from_id"],[144,2,1,"","get_components_in_round"],[144,2,1,"","get_current_component_id"],[144,2,1,"","get_model"],[144,2,1,"","get_number_of_components_in_round"],[144,2,1,"","get_partial_cipher"],[144,2,1,"","get_round_from_component_id"],[144,2,1,"","get_sizes_of_components_by_type"],[144,3,1,"","id"],[144,2,1,"","impossible_differential_search"],[144,3,1,"","inputs"],[144,3,1,"","inputs_bit_size"],[144,2,1,"","inputs_size_to_dict"],[144,2,1,"","is_algebraically_secure"],[144,2,1,"","is_andrx"],[144,2,1,"","is_arx"],[144,2,1,"","is_power_of_2_word_based"],[144,2,1,"","is_shift_arx"],[144,2,1,"","is_spn"],[144,2,1,"","make_cipher_id"],[144,2,1,"","make_file_name"],[144,2,1,"","neural_network_blackbox_distinguisher_tests"],[144,2,1,"","neural_network_differential_distinguisher_tests"],[144,3,1,"","number_of_rounds"],[144,3,1,"","output_bit_size"],[144,2,1,"","polynomial_system"],[144,2,1,"","polynomial_system_at_round"],[144,2,1,"","print"],[144,2,1,"","print_as_python_dictionary"],[144,2,1,"","print_as_python_dictionary_to_file"],[144,2,1,"","print_component_analysis_as_radar_charts"],[144,2,1,"","print_evaluation_python_code"],[144,2,1,"","print_evaluation_python_code_to_file"],[144,2,1,"","print_input_information"],[144,3,1,"","reference_code"],[144,2,1,"","remove_key_schedule"],[144,2,1,"","remove_round_component"],[144,2,1,"","remove_round_component_from_id"],[144,3,1,"","rounds"],[144,3,1,"","rounds_as_list"],[144,2,1,"","run_autond_pipeline"],[144,2,1,"","set_file_name"],[144,2,1,"","set_id"],[144,2,1,"","set_inputs"],[144,2,1,"","sort_cipher"],[144,2,1,"","test_against_reference_code"],[144,2,1,"","test_vector_check"],[144,2,1,"","top_half_quarter_round"],[144,2,1,"","train_gohr_neural_distinguisher"],[144,2,1,"","train_neural_distinguisher"],[144,3,1,"","type"],[144,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.snow3g_stream_cipher":[[145,1,1,"","Snow3GStreamCipher"]],"ciphers.stream_ciphers.snow3g_stream_cipher.Snow3GStreamCipher":[[145,2,1,"","DIValpha"],[145,2,1,"","MULalpha"],[145,2,1,"","MULx"],[145,2,1,"","MULxPOW"],[145,2,1,"","S1"],[145,2,1,"","S2"],[145,2,1,"","add_AND_component"],[145,2,1,"","add_FSR_component"],[145,2,1,"","add_MODADD_component"],[145,2,1,"","add_MODSUB_component"],[145,2,1,"","add_NOT_component"],[145,2,1,"","add_OR_component"],[145,2,1,"","add_SBOX_component"],[145,2,1,"","add_SHIFT_component"],[145,2,1,"","add_XOR_component"],[145,2,1,"","add_cipher_output_component"],[145,2,1,"","add_concatenate_component"],[145,2,1,"","add_constant_component"],[145,2,1,"","add_intermediate_output_component"],[145,2,1,"","add_linear_layer_component"],[145,2,1,"","add_mix_column_component"],[145,2,1,"","add_permutation_component"],[145,2,1,"","add_reverse_component"],[145,2,1,"","add_rotate_component"],[145,2,1,"","add_round"],[145,2,1,"","add_round_key_output_component"],[145,2,1,"","add_round_output_component"],[145,2,1,"","add_shift_rows_component"],[145,2,1,"","add_sigma_component"],[145,2,1,"","add_suffix_to_components"],[145,2,1,"","add_theta_keccak_component"],[145,2,1,"","add_theta_xoodoo_component"],[145,2,1,"","add_variable_rotate_component"],[145,2,1,"","add_variable_shift_component"],[145,2,1,"","add_word_permutation_component"],[145,2,1,"","algebraic_tests"],[145,2,1,"","analyze_cipher"],[145,2,1,"","as_python_dictionary"],[145,2,1,"","avalanche_probability_vectors"],[145,2,1,"","cipher_inverse"],[145,2,1,"","cipher_partial_inverse"],[145,2,1,"","clock_fsm"],[145,2,1,"","clock_lfsr"],[145,2,1,"","clock_lfsr_initialization_mode"],[145,2,1,"","component_analysis_tests"],[145,2,1,"","component_from"],[145,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[145,2,1,"","continuous_avalanche_factor"],[145,2,1,"","continuous_diffusion_factor"],[145,2,1,"","continuous_diffusion_tests"],[145,2,1,"","continuous_neutrality_measure_for_bit_j"],[145,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[145,2,1,"","convert_to_compound_xor_cipher"],[145,2,1,"","create_alpha_state"],[145,3,1,"","current_round"],[145,3,1,"","current_round_number"],[145,3,1,"","current_round_number_of_components"],[145,2,1,"","delete_generated_evaluate_c_shared_library"],[145,2,1,"","diffusion_tests"],[145,2,1,"","evaluate"],[145,2,1,"","evaluate_using_c"],[145,2,1,"","evaluate_vectorized"],[145,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[145,3,1,"","family_name"],[145,3,1,"","file_name"],[145,2,1,"","find_good_input_difference_for_neural_distinguisher"],[145,2,1,"","find_impossible_property"],[145,2,1,"","generate_bit_based_c_code"],[145,2,1,"","generate_csv_report"],[145,2,1,"","generate_evaluate_c_code_shared_library"],[145,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[145,2,1,"","generate_word_based_c_code"],[145,2,1,"","get_all_components"],[145,2,1,"","get_all_components_ids"],[145,2,1,"","get_all_inputs_bit_positions"],[145,2,1,"","get_component_from_id"],[145,2,1,"","get_components_in_round"],[145,2,1,"","get_current_component_id"],[145,2,1,"","get_model"],[145,2,1,"","get_number_of_components_in_round"],[145,2,1,"","get_partial_cipher"],[145,2,1,"","get_round_from_component_id"],[145,2,1,"","get_sizes_of_components_by_type"],[145,3,1,"","id"],[145,2,1,"","impossible_differential_search"],[145,2,1,"","initial_filling_lfsr_fsm"],[145,3,1,"","inputs"],[145,3,1,"","inputs_bit_size"],[145,2,1,"","inputs_size_to_dict"],[145,2,1,"","is_algebraically_secure"],[145,2,1,"","is_andrx"],[145,2,1,"","is_arx"],[145,2,1,"","is_power_of_2_word_based"],[145,2,1,"","is_shift_arx"],[145,2,1,"","is_spn"],[145,2,1,"","make_cipher_id"],[145,2,1,"","make_file_name"],[145,2,1,"","neural_network_blackbox_distinguisher_tests"],[145,2,1,"","neural_network_differential_distinguisher_tests"],[145,3,1,"","number_of_rounds"],[145,3,1,"","output_bit_size"],[145,2,1,"","polynomial_system"],[145,2,1,"","polynomial_system_at_round"],[145,2,1,"","print"],[145,2,1,"","print_as_python_dictionary"],[145,2,1,"","print_as_python_dictionary_to_file"],[145,2,1,"","print_component_analysis_as_radar_charts"],[145,2,1,"","print_evaluation_python_code"],[145,2,1,"","print_evaluation_python_code_to_file"],[145,2,1,"","print_input_information"],[145,3,1,"","reference_code"],[145,2,1,"","remove_key_schedule"],[145,2,1,"","remove_round_component"],[145,2,1,"","remove_round_component_from_id"],[145,3,1,"","rounds"],[145,3,1,"","rounds_as_list"],[145,2,1,"","run_autond_pipeline"],[145,2,1,"","set_file_name"],[145,2,1,"","set_id"],[145,2,1,"","set_inputs"],[145,2,1,"","snow3g_key_stream"],[145,2,1,"","snow3g_state_initialization"],[145,2,1,"","sort_cipher"],[145,2,1,"","test_against_reference_code"],[145,2,1,"","test_vector_check"],[145,2,1,"","train_gohr_neural_distinguisher"],[145,2,1,"","train_neural_distinguisher"],[145,3,1,"","type"],[145,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.trivium_stream_cipher":[[146,1,1,"","TriviumStreamCipher"]],"ciphers.stream_ciphers.trivium_stream_cipher.TriviumStreamCipher":[[146,2,1,"","add_AND_component"],[146,2,1,"","add_FSR_component"],[146,2,1,"","add_MODADD_component"],[146,2,1,"","add_MODSUB_component"],[146,2,1,"","add_NOT_component"],[146,2,1,"","add_OR_component"],[146,2,1,"","add_SBOX_component"],[146,2,1,"","add_SHIFT_component"],[146,2,1,"","add_XOR_component"],[146,2,1,"","add_cipher_output_component"],[146,2,1,"","add_concatenate_component"],[146,2,1,"","add_constant_component"],[146,2,1,"","add_intermediate_output_component"],[146,2,1,"","add_linear_layer_component"],[146,2,1,"","add_mix_column_component"],[146,2,1,"","add_permutation_component"],[146,2,1,"","add_reverse_component"],[146,2,1,"","add_rotate_component"],[146,2,1,"","add_round"],[146,2,1,"","add_round_key_output_component"],[146,2,1,"","add_round_output_component"],[146,2,1,"","add_shift_rows_component"],[146,2,1,"","add_sigma_component"],[146,2,1,"","add_suffix_to_components"],[146,2,1,"","add_theta_keccak_component"],[146,2,1,"","add_theta_xoodoo_component"],[146,2,1,"","add_variable_rotate_component"],[146,2,1,"","add_variable_shift_component"],[146,2,1,"","add_word_permutation_component"],[146,2,1,"","algebraic_tests"],[146,2,1,"","analyze_cipher"],[146,2,1,"","as_python_dictionary"],[146,2,1,"","avalanche_probability_vectors"],[146,2,1,"","cipher_inverse"],[146,2,1,"","cipher_partial_inverse"],[146,2,1,"","component_analysis_tests"],[146,2,1,"","component_from"],[146,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[146,2,1,"","continuous_avalanche_factor"],[146,2,1,"","continuous_diffusion_factor"],[146,2,1,"","continuous_diffusion_tests"],[146,2,1,"","continuous_neutrality_measure_for_bit_j"],[146,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[146,2,1,"","convert_to_compound_xor_cipher"],[146,3,1,"","current_round"],[146,3,1,"","current_round_number"],[146,3,1,"","current_round_number_of_components"],[146,2,1,"","delete_generated_evaluate_c_shared_library"],[146,2,1,"","diffusion_tests"],[146,2,1,"","evaluate"],[146,2,1,"","evaluate_using_c"],[146,2,1,"","evaluate_vectorized"],[146,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[146,3,1,"","family_name"],[146,3,1,"","file_name"],[146,2,1,"","find_good_input_difference_for_neural_distinguisher"],[146,2,1,"","find_impossible_property"],[146,2,1,"","generate_bit_based_c_code"],[146,2,1,"","generate_csv_report"],[146,2,1,"","generate_evaluate_c_code_shared_library"],[146,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[146,2,1,"","generate_word_based_c_code"],[146,2,1,"","get_all_components"],[146,2,1,"","get_all_components_ids"],[146,2,1,"","get_all_inputs_bit_positions"],[146,2,1,"","get_component_from_id"],[146,2,1,"","get_components_in_round"],[146,2,1,"","get_current_component_id"],[146,2,1,"","get_keystream_bit_len"],[146,2,1,"","get_model"],[146,2,1,"","get_number_of_components_in_round"],[146,2,1,"","get_partial_cipher"],[146,2,1,"","get_round_from_component_id"],[146,2,1,"","get_sizes_of_components_by_type"],[146,3,1,"","id"],[146,2,1,"","impossible_differential_search"],[146,3,1,"","inputs"],[146,3,1,"","inputs_bit_size"],[146,2,1,"","inputs_size_to_dict"],[146,2,1,"","is_algebraically_secure"],[146,2,1,"","is_andrx"],[146,2,1,"","is_arx"],[146,2,1,"","is_power_of_2_word_based"],[146,2,1,"","is_shift_arx"],[146,2,1,"","is_spn"],[146,2,1,"","make_cipher_id"],[146,2,1,"","make_file_name"],[146,2,1,"","neural_network_blackbox_distinguisher_tests"],[146,2,1,"","neural_network_differential_distinguisher_tests"],[146,3,1,"","number_of_rounds"],[146,3,1,"","output_bit_size"],[146,2,1,"","polynomial_system"],[146,2,1,"","polynomial_system_at_round"],[146,2,1,"","print"],[146,2,1,"","print_as_python_dictionary"],[146,2,1,"","print_as_python_dictionary_to_file"],[146,2,1,"","print_component_analysis_as_radar_charts"],[146,2,1,"","print_evaluation_python_code"],[146,2,1,"","print_evaluation_python_code_to_file"],[146,2,1,"","print_input_information"],[146,3,1,"","reference_code"],[146,2,1,"","remove_key_schedule"],[146,2,1,"","remove_round_component"],[146,2,1,"","remove_round_component_from_id"],[146,3,1,"","rounds"],[146,3,1,"","rounds_as_list"],[146,2,1,"","run_autond_pipeline"],[146,2,1,"","set_file_name"],[146,2,1,"","set_id"],[146,2,1,"","set_inputs"],[146,2,1,"","sort_cipher"],[146,2,1,"","test_against_reference_code"],[146,2,1,"","test_vector_check"],[146,2,1,"","train_gohr_neural_distinguisher"],[146,2,1,"","train_neural_distinguisher"],[146,2,1,"","trivium_key_stream"],[146,2,1,"","trivium_state_initialization"],[146,3,1,"","type"],[146,2,1,"","zero_correlation_linear_search"]],"ciphers.stream_ciphers.zuc_stream_cipher":[[147,1,1,"","ZucStreamCipher"]],"ciphers.stream_ciphers.zuc_stream_cipher.ZucStreamCipher":[[147,2,1,"","add_AND_component"],[147,2,1,"","add_FSR_component"],[147,2,1,"","add_MODADD_component"],[147,2,1,"","add_MODSUB_component"],[147,2,1,"","add_NOT_component"],[147,2,1,"","add_OR_component"],[147,2,1,"","add_SBOX_component"],[147,2,1,"","add_SHIFT_component"],[147,2,1,"","add_XOR_component"],[147,2,1,"","add_cipher_output_component"],[147,2,1,"","add_concatenate_component"],[147,2,1,"","add_constant_component"],[147,2,1,"","add_intermediate_output_component"],[147,2,1,"","add_linear_layer_component"],[147,2,1,"","add_mix_column_component"],[147,2,1,"","add_permutation_component"],[147,2,1,"","add_reverse_component"],[147,2,1,"","add_rotate_component"],[147,2,1,"","add_round"],[147,2,1,"","add_round_key_output_component"],[147,2,1,"","add_round_output_component"],[147,2,1,"","add_shift_rows_component"],[147,2,1,"","add_sigma_component"],[147,2,1,"","add_suffix_to_components"],[147,2,1,"","add_theta_keccak_component"],[147,2,1,"","add_theta_xoodoo_component"],[147,2,1,"","add_variable_rotate_component"],[147,2,1,"","add_variable_shift_component"],[147,2,1,"","add_word_permutation_component"],[147,2,1,"","algebraic_tests"],[147,2,1,"","analyze_cipher"],[147,2,1,"","as_python_dictionary"],[147,2,1,"","avalanche_probability_vectors"],[147,2,1,"","cipher_inverse"],[147,2,1,"","cipher_partial_inverse"],[147,2,1,"","clocking_lfsr"],[147,2,1,"","component_analysis_tests"],[147,2,1,"","component_from"],[147,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[147,2,1,"","continuous_avalanche_factor"],[147,2,1,"","continuous_diffusion_factor"],[147,2,1,"","continuous_diffusion_tests"],[147,2,1,"","continuous_neutrality_measure_for_bit_j"],[147,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[147,2,1,"","convert_to_compound_xor_cipher"],[147,3,1,"","current_round"],[147,3,1,"","current_round_number"],[147,3,1,"","current_round_number_of_components"],[147,2,1,"","delete_generated_evaluate_c_shared_library"],[147,2,1,"","diffusion_tests"],[147,2,1,"","evaluate"],[147,2,1,"","evaluate_using_c"],[147,2,1,"","evaluate_vectorized"],[147,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[147,3,1,"","family_name"],[147,3,1,"","file_name"],[147,2,1,"","find_good_input_difference_for_neural_distinguisher"],[147,2,1,"","find_impossible_property"],[147,2,1,"","generate_bit_based_c_code"],[147,2,1,"","generate_csv_report"],[147,2,1,"","generate_evaluate_c_code_shared_library"],[147,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[147,2,1,"","generate_word_based_c_code"],[147,2,1,"","get_all_components"],[147,2,1,"","get_all_components_ids"],[147,2,1,"","get_all_inputs_bit_positions"],[147,2,1,"","get_component_from_id"],[147,2,1,"","get_components_in_round"],[147,2,1,"","get_current_component_id"],[147,2,1,"","get_model"],[147,2,1,"","get_number_of_components_in_round"],[147,2,1,"","get_partial_cipher"],[147,2,1,"","get_round_from_component_id"],[147,2,1,"","get_sizes_of_components_by_type"],[147,3,1,"","id"],[147,2,1,"","impossible_differential_search"],[147,3,1,"","inputs"],[147,3,1,"","inputs_bit_size"],[147,2,1,"","inputs_size_to_dict"],[147,2,1,"","is_algebraically_secure"],[147,2,1,"","is_andrx"],[147,2,1,"","is_arx"],[147,2,1,"","is_power_of_2_word_based"],[147,2,1,"","is_shift_arx"],[147,2,1,"","is_spn"],[147,2,1,"","key_loading_to_lfsr"],[147,2,1,"","key_stream"],[147,2,1,"","lfsr_S_high_16bits"],[147,2,1,"","lfsr_S_low_16bits"],[147,2,1,"","lfsr_with_initialization_mode"],[147,2,1,"","linear_layer_rotation"],[147,2,1,"","linear_transform_L1"],[147,2,1,"","linear_transform_L2"],[147,2,1,"","make_cipher_id"],[147,2,1,"","make_file_name"],[147,2,1,"","neural_network_blackbox_distinguisher_tests"],[147,2,1,"","neural_network_differential_distinguisher_tests"],[147,3,1,"","number_of_rounds"],[147,3,1,"","output_bit_size"],[147,2,1,"","polynomial_system"],[147,2,1,"","polynomial_system_at_round"],[147,2,1,"","print"],[147,2,1,"","print_as_python_dictionary"],[147,2,1,"","print_as_python_dictionary_to_file"],[147,2,1,"","print_component_analysis_as_radar_charts"],[147,2,1,"","print_evaluation_python_code"],[147,2,1,"","print_evaluation_python_code_to_file"],[147,2,1,"","print_input_information"],[147,3,1,"","reference_code"],[147,2,1,"","remove_key_schedule"],[147,2,1,"","remove_round_component"],[147,2,1,"","remove_round_component_from_id"],[147,3,1,"","rounds"],[147,3,1,"","rounds_as_list"],[147,2,1,"","run_autond_pipeline"],[147,2,1,"","s_box_layer"],[147,2,1,"","set_file_name"],[147,2,1,"","set_id"],[147,2,1,"","set_inputs"],[147,2,1,"","sort_cipher"],[147,2,1,"","state_initialization"],[147,2,1,"","test_against_reference_code"],[147,2,1,"","test_vector_check"],[147,2,1,"","train_gohr_neural_distinguisher"],[147,2,1,"","train_neural_distinguisher"],[147,3,1,"","type"],[147,2,1,"","zero_correlation_linear_search"],[147,2,1,"","zuc_nonlinear_F"]],"ciphers.toys":[[148,0,0,"-","toyspn1"],[149,0,0,"-","toyspn2"]],"ciphers.toys.toyspn1":[[148,1,1,"","ToySPN1"]],"ciphers.toys.toyspn1.ToySPN1":[[148,2,1,"","add_AND_component"],[148,2,1,"","add_FSR_component"],[148,2,1,"","add_MODADD_component"],[148,2,1,"","add_MODSUB_component"],[148,2,1,"","add_NOT_component"],[148,2,1,"","add_OR_component"],[148,2,1,"","add_SBOX_component"],[148,2,1,"","add_SHIFT_component"],[148,2,1,"","add_XOR_component"],[148,2,1,"","add_cipher_output_component"],[148,2,1,"","add_concatenate_component"],[148,2,1,"","add_constant_component"],[148,2,1,"","add_intermediate_output_component"],[148,2,1,"","add_linear_layer_component"],[148,2,1,"","add_mix_column_component"],[148,2,1,"","add_permutation_component"],[148,2,1,"","add_reverse_component"],[148,2,1,"","add_rotate_component"],[148,2,1,"","add_round"],[148,2,1,"","add_round_key_output_component"],[148,2,1,"","add_round_output_component"],[148,2,1,"","add_shift_rows_component"],[148,2,1,"","add_sigma_component"],[148,2,1,"","add_suffix_to_components"],[148,2,1,"","add_theta_keccak_component"],[148,2,1,"","add_theta_xoodoo_component"],[148,2,1,"","add_variable_rotate_component"],[148,2,1,"","add_variable_shift_component"],[148,2,1,"","add_word_permutation_component"],[148,2,1,"","algebraic_tests"],[148,2,1,"","analyze_cipher"],[148,2,1,"","as_python_dictionary"],[148,2,1,"","avalanche_probability_vectors"],[148,2,1,"","cipher_inverse"],[148,2,1,"","cipher_partial_inverse"],[148,2,1,"","component_analysis_tests"],[148,2,1,"","component_from"],[148,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[148,2,1,"","continuous_avalanche_factor"],[148,2,1,"","continuous_diffusion_factor"],[148,2,1,"","continuous_diffusion_tests"],[148,2,1,"","continuous_neutrality_measure_for_bit_j"],[148,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[148,2,1,"","convert_to_compound_xor_cipher"],[148,3,1,"","current_round"],[148,3,1,"","current_round_number"],[148,3,1,"","current_round_number_of_components"],[148,2,1,"","delete_generated_evaluate_c_shared_library"],[148,2,1,"","diffusion_tests"],[148,2,1,"","evaluate"],[148,2,1,"","evaluate_using_c"],[148,2,1,"","evaluate_vectorized"],[148,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[148,3,1,"","family_name"],[148,3,1,"","file_name"],[148,2,1,"","find_good_input_difference_for_neural_distinguisher"],[148,2,1,"","find_impossible_property"],[148,2,1,"","generate_bit_based_c_code"],[148,2,1,"","generate_csv_report"],[148,2,1,"","generate_evaluate_c_code_shared_library"],[148,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[148,2,1,"","generate_word_based_c_code"],[148,2,1,"","get_all_components"],[148,2,1,"","get_all_components_ids"],[148,2,1,"","get_all_inputs_bit_positions"],[148,2,1,"","get_component_from_id"],[148,2,1,"","get_components_in_round"],[148,2,1,"","get_current_component_id"],[148,2,1,"","get_model"],[148,2,1,"","get_number_of_components_in_round"],[148,2,1,"","get_partial_cipher"],[148,2,1,"","get_round_from_component_id"],[148,2,1,"","get_sizes_of_components_by_type"],[148,3,1,"","id"],[148,2,1,"","impossible_differential_search"],[148,3,1,"","inputs"],[148,3,1,"","inputs_bit_size"],[148,2,1,"","inputs_size_to_dict"],[148,2,1,"","is_algebraically_secure"],[148,2,1,"","is_andrx"],[148,2,1,"","is_arx"],[148,2,1,"","is_power_of_2_word_based"],[148,2,1,"","is_shift_arx"],[148,2,1,"","is_spn"],[148,2,1,"","make_cipher_id"],[148,2,1,"","make_file_name"],[148,2,1,"","neural_network_blackbox_distinguisher_tests"],[148,2,1,"","neural_network_differential_distinguisher_tests"],[148,3,1,"","number_of_rounds"],[148,3,1,"","output_bit_size"],[148,2,1,"","polynomial_system"],[148,2,1,"","polynomial_system_at_round"],[148,2,1,"","print"],[148,2,1,"","print_as_python_dictionary"],[148,2,1,"","print_as_python_dictionary_to_file"],[148,2,1,"","print_component_analysis_as_radar_charts"],[148,2,1,"","print_evaluation_python_code"],[148,2,1,"","print_evaluation_python_code_to_file"],[148,2,1,"","print_input_information"],[148,3,1,"","reference_code"],[148,2,1,"","remove_key_schedule"],[148,2,1,"","remove_round_component"],[148,2,1,"","remove_round_component_from_id"],[148,3,1,"","rounds"],[148,3,1,"","rounds_as_list"],[148,2,1,"","run_autond_pipeline"],[148,2,1,"","set_file_name"],[148,2,1,"","set_id"],[148,2,1,"","set_inputs"],[148,2,1,"","sort_cipher"],[148,2,1,"","test_against_reference_code"],[148,2,1,"","test_vector_check"],[148,2,1,"","train_gohr_neural_distinguisher"],[148,2,1,"","train_neural_distinguisher"],[148,3,1,"","type"],[148,2,1,"","zero_correlation_linear_search"]],"ciphers.toys.toyspn2":[[149,1,1,"","ToySPN2"]],"ciphers.toys.toyspn2.ToySPN2":[[149,2,1,"","add_AND_component"],[149,2,1,"","add_FSR_component"],[149,2,1,"","add_MODADD_component"],[149,2,1,"","add_MODSUB_component"],[149,2,1,"","add_NOT_component"],[149,2,1,"","add_OR_component"],[149,2,1,"","add_SBOX_component"],[149,2,1,"","add_SHIFT_component"],[149,2,1,"","add_XOR_component"],[149,2,1,"","add_cipher_output_component"],[149,2,1,"","add_concatenate_component"],[149,2,1,"","add_constant_component"],[149,2,1,"","add_intermediate_output_component"],[149,2,1,"","add_linear_layer_component"],[149,2,1,"","add_mix_column_component"],[149,2,1,"","add_permutation_component"],[149,2,1,"","add_reverse_component"],[149,2,1,"","add_rotate_component"],[149,2,1,"","add_round"],[149,2,1,"","add_round_key_output_component"],[149,2,1,"","add_round_output_component"],[149,2,1,"","add_shift_rows_component"],[149,2,1,"","add_sigma_component"],[149,2,1,"","add_suffix_to_components"],[149,2,1,"","add_theta_keccak_component"],[149,2,1,"","add_theta_xoodoo_component"],[149,2,1,"","add_variable_rotate_component"],[149,2,1,"","add_variable_shift_component"],[149,2,1,"","add_word_permutation_component"],[149,2,1,"","algebraic_tests"],[149,2,1,"","analyze_cipher"],[149,2,1,"","as_python_dictionary"],[149,2,1,"","avalanche_probability_vectors"],[149,2,1,"","cipher_inverse"],[149,2,1,"","cipher_partial_inverse"],[149,2,1,"","component_analysis_tests"],[149,2,1,"","component_from"],[149,2,1,"","compute_criterion_from_avalanche_probability_vectors"],[149,2,1,"","continuous_avalanche_factor"],[149,2,1,"","continuous_diffusion_factor"],[149,2,1,"","continuous_diffusion_tests"],[149,2,1,"","continuous_neutrality_measure_for_bit_j"],[149,2,1,"","continuous_neutrality_measure_for_bit_j_and_beta"],[149,2,1,"","convert_to_compound_xor_cipher"],[149,3,1,"","current_round"],[149,3,1,"","current_round_number"],[149,3,1,"","current_round_number_of_components"],[149,2,1,"","delete_generated_evaluate_c_shared_library"],[149,2,1,"","diffusion_tests"],[149,2,1,"","evaluate"],[149,2,1,"","evaluate_using_c"],[149,2,1,"","evaluate_vectorized"],[149,2,1,"","evaluate_with_intermediate_outputs_continuous_diffusion_analysis"],[149,3,1,"","family_name"],[149,3,1,"","file_name"],[149,2,1,"","find_good_input_difference_for_neural_distinguisher"],[149,2,1,"","find_impossible_property"],[149,2,1,"","generate_bit_based_c_code"],[149,2,1,"","generate_csv_report"],[149,2,1,"","generate_evaluate_c_code_shared_library"],[149,2,1,"","generate_heatmap_graphs_for_avalanche_tests"],[149,2,1,"","generate_word_based_c_code"],[149,2,1,"","get_all_components"],[149,2,1,"","get_all_components_ids"],[149,2,1,"","get_all_inputs_bit_positions"],[149,2,1,"","get_component_from_id"],[149,2,1,"","get_components_in_round"],[149,2,1,"","get_current_component_id"],[149,2,1,"","get_model"],[149,2,1,"","get_number_of_components_in_round"],[149,2,1,"","get_partial_cipher"],[149,2,1,"","get_round_from_component_id"],[149,2,1,"","get_sizes_of_components_by_type"],[149,3,1,"","id"],[149,2,1,"","impossible_differential_search"],[149,3,1,"","inputs"],[149,3,1,"","inputs_bit_size"],[149,2,1,"","inputs_size_to_dict"],[149,2,1,"","is_algebraically_secure"],[149,2,1,"","is_andrx"],[149,2,1,"","is_arx"],[149,2,1,"","is_power_of_2_word_based"],[149,2,1,"","is_shift_arx"],[149,2,1,"","is_spn"],[149,2,1,"","make_cipher_id"],[149,2,1,"","make_file_name"],[149,2,1,"","neural_network_blackbox_distinguisher_tests"],[149,2,1,"","neural_network_differential_distinguisher_tests"],[149,3,1,"","number_of_rounds"],[149,3,1,"","output_bit_size"],[149,2,1,"","polynomial_system"],[149,2,1,"","polynomial_system_at_round"],[149,2,1,"","print"],[149,2,1,"","print_as_python_dictionary"],[149,2,1,"","print_as_python_dictionary_to_file"],[149,2,1,"","print_component_analysis_as_radar_charts"],[149,2,1,"","print_evaluation_python_code"],[149,2,1,"","print_evaluation_python_code_to_file"],[149,2,1,"","print_input_information"],[149,3,1,"","reference_code"],[149,2,1,"","remove_key_schedule"],[149,2,1,"","remove_round_component"],[149,2,1,"","remove_round_component_from_id"],[149,3,1,"","rounds"],[149,3,1,"","rounds_as_list"],[149,2,1,"","run_autond_pipeline"],[149,2,1,"","set_file_name"],[149,2,1,"","set_id"],[149,2,1,"","set_inputs"],[149,2,1,"","sort_cipher"],[149,2,1,"","test_against_reference_code"],[149,2,1,"","test_vector_check"],[149,2,1,"","train_gohr_neural_distinguisher"],[149,2,1,"","train_neural_distinguisher"],[149,3,1,"","type"],[149,2,1,"","zero_correlation_linear_search"]],"component.Component":[[150,2,1,"","as_python_dictionary"],[150,2,1,"","check_output_size"],[150,3,1,"","description"],[150,2,1,"","get_graph_representation"],[150,3,1,"","id"],[150,3,1,"","input_bit_positions"],[150,3,1,"","input_bit_size"],[150,3,1,"","input_id_links"],[150,2,1,"","is_forbidden"],[150,2,1,"","is_id_equal_to"],[150,2,1,"","is_power_of_2_word_based"],[150,3,1,"","output_bit_size"],[150,2,1,"","output_size_for_concatenate"],[150,2,1,"","print"],[150,2,1,"","print_as_python_dictionary"],[150,2,1,"","print_values"],[150,2,1,"","print_word_values"],[150,2,1,"","select_bits"],[150,2,1,"","select_words"],[150,2,1,"","set_description"],[150,2,1,"","set_id"],[150,2,1,"","set_input_bit_positions"],[150,2,1,"","set_input_id_links"],[150,3,1,"","suffixes"],[150,3,1,"","type"]],"components.and_component":[[151,1,1,"","AND"],[151,4,1,"","cp_twoterms"],[151,4,1,"","cp_xor_differential_probability_ddt"],[151,4,1,"","cp_xor_linear_probability_lat"]],"components.and_component.AND":[[151,2,1,"","algebraic_polynomials"],[151,2,1,"","as_python_dictionary"],[151,2,1,"","check_output_size"],[151,2,1,"","cms_constraints"],[151,2,1,"","cms_xor_differential_propagation_constraints"],[151,2,1,"","cms_xor_linear_mask_propagation_constraints"],[151,2,1,"","cp_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[151,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","cp_xor_differential_propagation_constraints"],[151,2,1,"","cp_xor_linear_mask_propagation_constraints"],[151,3,1,"","description"],[151,2,1,"","generic_sign_linear_constraints"],[151,2,1,"","get_bit_based_vectorized_python_code"],[151,2,1,"","get_byte_based_vectorized_python_code"],[151,2,1,"","get_graph_representation"],[151,2,1,"","get_word_operation_sign"],[151,3,1,"","id"],[151,3,1,"","input_bit_positions"],[151,3,1,"","input_bit_size"],[151,3,1,"","input_id_links"],[151,2,1,"","is_forbidden"],[151,2,1,"","is_id_equal_to"],[151,2,1,"","is_power_of_2_word_based"],[151,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[151,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[151,2,1,"","milp_xor_differential_propagation_constraints"],[151,2,1,"","milp_xor_linear_mask_propagation_constraints"],[151,3,1,"","output_bit_size"],[151,2,1,"","output_size_for_concatenate"],[151,2,1,"","print"],[151,2,1,"","print_as_python_dictionary"],[151,2,1,"","print_values"],[151,2,1,"","print_word_values"],[151,2,1,"","sat_constraints"],[151,2,1,"","sat_xor_differential_propagation_constraints"],[151,2,1,"","sat_xor_linear_mask_propagation_constraints"],[151,2,1,"","select_bits"],[151,2,1,"","select_words"],[151,2,1,"","set_description"],[151,2,1,"","set_id"],[151,2,1,"","set_input_bit_positions"],[151,2,1,"","set_input_id_links"],[151,2,1,"","smt_constraints"],[151,2,1,"","smt_xor_differential_propagation_constraints"],[151,2,1,"","smt_xor_linear_mask_propagation_constraints"],[151,3,1,"","suffixes"],[151,3,1,"","type"]],"components.cipher_output_component":[[152,1,1,"","CipherOutput"]],"components.cipher_output_component.CipherOutput":[[152,2,1,"","as_python_dictionary"],[152,2,1,"","check_output_size"],[152,2,1,"","cms_constraints"],[152,2,1,"","cms_xor_differential_propagation_constraints"],[152,2,1,"","cp_constraints"],[152,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","cp_xor_differential_propagation_constraints"],[152,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[152,2,1,"","cp_xor_linear_mask_propagation_constraints"],[152,3,1,"","description"],[152,2,1,"","get_bit_based_vectorized_python_code"],[152,2,1,"","get_byte_based_vectorized_python_code"],[152,2,1,"","get_graph_representation"],[152,3,1,"","id"],[152,3,1,"","input_bit_positions"],[152,3,1,"","input_bit_size"],[152,3,1,"","input_id_links"],[152,2,1,"","is_forbidden"],[152,2,1,"","is_id_equal_to"],[152,2,1,"","is_power_of_2_word_based"],[152,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_constraints"],[152,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[152,2,1,"","milp_xor_differential_propagation_constraints"],[152,2,1,"","milp_xor_linear_mask_propagation_constraints"],[152,2,1,"","minizinc_constraints"],[152,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","minizinc_xor_differential_propagation_constraints"],[152,3,1,"","output_bit_size"],[152,2,1,"","output_size_for_concatenate"],[152,2,1,"","print"],[152,2,1,"","print_as_python_dictionary"],[152,2,1,"","print_values"],[152,2,1,"","print_word_values"],[152,2,1,"","sat_constraints"],[152,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[152,2,1,"","sat_xor_differential_propagation_constraints"],[152,2,1,"","sat_xor_linear_mask_propagation_constraints"],[152,2,1,"","select_bits"],[152,2,1,"","select_words"],[152,2,1,"","set_description"],[152,2,1,"","set_id"],[152,2,1,"","set_input_bit_positions"],[152,2,1,"","set_input_id_links"],[152,2,1,"","smt_constraints"],[152,2,1,"","smt_xor_differential_propagation_constraints"],[152,2,1,"","smt_xor_linear_mask_propagation_constraints"],[152,3,1,"","suffixes"],[152,3,1,"","type"]],"components.concatenate_component":[[153,1,1,"","Concatenate"]],"components.concatenate_component.Concatenate":[[153,2,1,"","as_python_dictionary"],[153,2,1,"","check_output_size"],[153,3,1,"","description"],[153,2,1,"","get_bit_based_c_code"],[153,2,1,"","get_bit_based_vectorized_python_code"],[153,2,1,"","get_byte_based_vectorized_python_code"],[153,2,1,"","get_graph_representation"],[153,2,1,"","get_word_based_c_code"],[153,3,1,"","id"],[153,3,1,"","input_bit_positions"],[153,3,1,"","input_bit_size"],[153,3,1,"","input_id_links"],[153,2,1,"","is_forbidden"],[153,2,1,"","is_id_equal_to"],[153,2,1,"","is_power_of_2_word_based"],[153,3,1,"","output_bit_size"],[153,2,1,"","output_size_for_concatenate"],[153,2,1,"","print"],[153,2,1,"","print_as_python_dictionary"],[153,2,1,"","print_values"],[153,2,1,"","print_word_values"],[153,2,1,"","select_bits"],[153,2,1,"","select_words"],[153,2,1,"","set_description"],[153,2,1,"","set_id"],[153,2,1,"","set_input_bit_positions"],[153,2,1,"","set_input_id_links"],[153,3,1,"","suffixes"],[153,3,1,"","type"]],"components.constant_component":[[154,1,1,"","Constant"],[154,4,1,"","constant_to_repr"]],"components.constant_component.Constant":[[154,2,1,"","algebraic_polynomials"],[154,2,1,"","as_python_dictionary"],[154,2,1,"","check_output_size"],[154,2,1,"","cms_constraints"],[154,2,1,"","cms_xor_differential_propagation_constraints"],[154,2,1,"","cms_xor_linear_mask_propagation_constraints"],[154,2,1,"","cp_constraints"],[154,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","cp_xor_differential_propagation_constraints"],[154,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[154,2,1,"","cp_xor_linear_mask_propagation_constraints"],[154,3,1,"","description"],[154,2,1,"","get_bit_based_c_code"],[154,2,1,"","get_bit_based_vectorized_python_code"],[154,2,1,"","get_byte_based_vectorized_python_code"],[154,2,1,"","get_graph_representation"],[154,2,1,"","get_word_based_c_code"],[154,3,1,"","id"],[154,3,1,"","input_bit_positions"],[154,3,1,"","input_bit_size"],[154,3,1,"","input_id_links"],[154,2,1,"","is_forbidden"],[154,2,1,"","is_id_equal_to"],[154,2,1,"","is_power_of_2_word_based"],[154,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[154,2,1,"","milp_xor_differential_propagation_constraints"],[154,2,1,"","milp_xor_linear_mask_propagation_constraints"],[154,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","minizinc_xor_differential_propagation_constraints"],[154,3,1,"","output_bit_size"],[154,2,1,"","output_size_for_concatenate"],[154,2,1,"","print"],[154,2,1,"","print_as_python_dictionary"],[154,2,1,"","print_values"],[154,2,1,"","print_word_values"],[154,2,1,"","sat_constraints"],[154,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[154,2,1,"","sat_xor_differential_propagation_constraints"],[154,2,1,"","sat_xor_linear_mask_propagation_constraints"],[154,2,1,"","select_bits"],[154,2,1,"","select_words"],[154,2,1,"","set_description"],[154,2,1,"","set_id"],[154,2,1,"","set_input_bit_positions"],[154,2,1,"","set_input_id_links"],[154,2,1,"","smt_constraints"],[154,2,1,"","smt_xor_differential_propagation_constraints"],[154,2,1,"","smt_xor_linear_mask_propagation_constraints"],[154,3,1,"","suffixes"],[154,3,1,"","type"]],"components.fsr_component":[[155,1,1,"","FSR"]],"components.fsr_component.FSR":[[155,2,1,"","as_python_dictionary"],[155,2,1,"","check_output_size"],[155,3,1,"","description"],[155,2,1,"","get_graph_representation"],[155,3,1,"","id"],[155,3,1,"","input_bit_positions"],[155,3,1,"","input_bit_size"],[155,3,1,"","input_id_links"],[155,2,1,"","is_forbidden"],[155,2,1,"","is_id_equal_to"],[155,2,1,"","is_power_of_2_word_based"],[155,3,1,"","output_bit_size"],[155,2,1,"","output_size_for_concatenate"],[155,2,1,"","print"],[155,2,1,"","print_as_python_dictionary"],[155,2,1,"","print_values"],[155,2,1,"","print_word_values"],[155,2,1,"","select_bits"],[155,2,1,"","select_words"],[155,2,1,"","set_description"],[155,2,1,"","set_id"],[155,2,1,"","set_input_bit_positions"],[155,2,1,"","set_input_id_links"],[155,3,1,"","suffixes"],[155,3,1,"","type"]],"components.intermediate_output_component":[[156,1,1,"","IntermediateOutput"],[156,4,1,"","update_xor_linear_constraints_for_more_than_one_bit"]],"components.intermediate_output_component.IntermediateOutput":[[156,2,1,"","as_python_dictionary"],[156,2,1,"","check_output_size"],[156,2,1,"","cms_constraints"],[156,2,1,"","cms_xor_differential_propagation_constraints"],[156,2,1,"","cp_constraints"],[156,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","cp_xor_differential_propagation_constraints"],[156,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[156,2,1,"","cp_xor_linear_mask_propagation_constraints"],[156,3,1,"","description"],[156,2,1,"","get_bit_based_vectorized_python_code"],[156,2,1,"","get_byte_based_vectorized_python_code"],[156,2,1,"","get_graph_representation"],[156,3,1,"","id"],[156,3,1,"","input_bit_positions"],[156,3,1,"","input_bit_size"],[156,3,1,"","input_id_links"],[156,2,1,"","is_forbidden"],[156,2,1,"","is_id_equal_to"],[156,2,1,"","is_power_of_2_word_based"],[156,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_constraints"],[156,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[156,2,1,"","milp_xor_differential_propagation_constraints"],[156,2,1,"","milp_xor_linear_mask_propagation_constraints"],[156,2,1,"","minizinc_constraints"],[156,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","minizinc_xor_differential_propagation_constraints"],[156,3,1,"","output_bit_size"],[156,2,1,"","output_size_for_concatenate"],[156,2,1,"","print"],[156,2,1,"","print_as_python_dictionary"],[156,2,1,"","print_values"],[156,2,1,"","print_word_values"],[156,2,1,"","sat_constraints"],[156,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[156,2,1,"","sat_xor_differential_propagation_constraints"],[156,2,1,"","sat_xor_linear_mask_propagation_constraints"],[156,2,1,"","select_bits"],[156,2,1,"","select_words"],[156,2,1,"","set_description"],[156,2,1,"","set_id"],[156,2,1,"","set_input_bit_positions"],[156,2,1,"","set_input_id_links"],[156,2,1,"","smt_constraints"],[156,2,1,"","smt_xor_differential_propagation_constraints"],[156,2,1,"","smt_xor_linear_mask_propagation_constraints"],[156,3,1,"","suffixes"],[156,3,1,"","type"]],"components.linear_layer_component":[[157,1,1,"","LinearLayer"],[157,4,1,"","update_constraints_for_more_than_one_bit"]],"components.linear_layer_component.LinearLayer":[[157,2,1,"","algebraic_polynomials"],[157,2,1,"","as_python_dictionary"],[157,2,1,"","check_output_size"],[157,2,1,"","cms_constraints"],[157,2,1,"","cms_xor_differential_propagation_constraints"],[157,2,1,"","cms_xor_linear_mask_propagation_constraints"],[157,2,1,"","cp_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[157,2,1,"","cp_xor_differential_propagation_constraints"],[157,2,1,"","cp_xor_linear_mask_propagation_constraints"],[157,3,1,"","description"],[157,2,1,"","get_bit_based_c_code"],[157,2,1,"","get_bit_based_vectorized_python_code"],[157,2,1,"","get_byte_based_vectorized_python_code"],[157,2,1,"","get_graph_representation"],[157,3,1,"","id"],[157,3,1,"","input_bit_positions"],[157,3,1,"","input_bit_size"],[157,3,1,"","input_id_links"],[157,2,1,"","is_forbidden"],[157,2,1,"","is_id_equal_to"],[157,2,1,"","is_power_of_2_word_based"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[157,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_constraints"],[157,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[157,2,1,"","milp_xor_differential_propagation_constraints"],[157,2,1,"","milp_xor_linear_mask_propagation_constraints"],[157,3,1,"","output_bit_size"],[157,2,1,"","output_size_for_concatenate"],[157,2,1,"","print"],[157,2,1,"","print_as_python_dictionary"],[157,2,1,"","print_values"],[157,2,1,"","print_word_values"],[157,2,1,"","sat_constraints"],[157,2,1,"","sat_xor_differential_propagation_constraints"],[157,2,1,"","sat_xor_linear_mask_propagation_constraints"],[157,2,1,"","select_bits"],[157,2,1,"","select_words"],[157,2,1,"","set_description"],[157,2,1,"","set_id"],[157,2,1,"","set_input_bit_positions"],[157,2,1,"","set_input_id_links"],[157,2,1,"","smt_constraints"],[157,2,1,"","smt_xor_differential_propagation_constraints"],[157,2,1,"","smt_xor_linear_mask_propagation_constraints"],[157,3,1,"","suffixes"],[157,3,1,"","type"]],"components.mix_column_component":[[158,1,1,"","MixColumn"],[158,4,1,"","add_xor_components"],[158,4,1,"","calculate_input_bit_positions"],[158,4,1,"","cp_get_all_inputs"]],"components.mix_column_component.MixColumn":[[158,2,1,"","algebraic_polynomials"],[158,2,1,"","as_python_dictionary"],[158,2,1,"","check_output_size"],[158,2,1,"","cms_constraints"],[158,2,1,"","cms_xor_differential_propagation_constraints"],[158,2,1,"","cms_xor_linear_mask_propagation_constraints"],[158,2,1,"","cp_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[158,2,1,"","cp_xor_differential_propagation_constraints"],[158,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[158,2,1,"","cp_xor_linear_mask_propagation_constraints"],[158,3,1,"","description"],[158,2,1,"","get_bit_based_c_code"],[158,2,1,"","get_bit_based_vectorized_python_code"],[158,2,1,"","get_byte_based_vectorized_python_code"],[158,2,1,"","get_graph_representation"],[158,3,1,"","id"],[158,3,1,"","input_bit_positions"],[158,3,1,"","input_bit_size"],[158,3,1,"","input_id_links"],[158,2,1,"","is_forbidden"],[158,2,1,"","is_id_equal_to"],[158,2,1,"","is_power_of_2_word_based"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[158,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_constraints"],[158,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[158,2,1,"","milp_xor_differential_propagation_constraints"],[158,2,1,"","milp_xor_linear_mask_propagation_constraints"],[158,3,1,"","output_bit_size"],[158,2,1,"","output_size_for_concatenate"],[158,2,1,"","print"],[158,2,1,"","print_as_python_dictionary"],[158,2,1,"","print_values"],[158,2,1,"","print_word_values"],[158,2,1,"","sat_constraints"],[158,2,1,"","sat_xor_differential_propagation_constraints"],[158,2,1,"","sat_xor_linear_mask_propagation_constraints"],[158,2,1,"","select_bits"],[158,2,1,"","select_words"],[158,2,1,"","set_description"],[158,2,1,"","set_id"],[158,2,1,"","set_input_bit_positions"],[158,2,1,"","set_input_id_links"],[158,2,1,"","smt_constraints"],[158,2,1,"","smt_xor_differential_propagation_constraints"],[158,2,1,"","smt_xor_linear_mask_propagation_constraints"],[158,3,1,"","suffixes"],[158,3,1,"","type"]],"components.modadd_component":[[159,1,1,"","MODADD"],[159,4,1,"","cms_modadd"],[159,4,1,"","cms_modadd_seq"],[159,4,1,"","cp_twoterms"],[159,4,1,"","sat_modadd"],[159,4,1,"","sat_modadd_seq"],[159,4,1,"","smt_modadd"],[159,4,1,"","smt_modadd_seq"]],"components.modadd_component.MODADD":[[159,2,1,"","algebraic_polynomials"],[159,2,1,"","as_python_dictionary"],[159,2,1,"","check_output_size"],[159,2,1,"","cms_constraints"],[159,2,1,"","cms_xor_differential_propagation_constraints"],[159,2,1,"","cms_xor_linear_mask_propagation_constraints"],[159,2,1,"","cp_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[159,2,1,"","cp_twoterms_xor_differential_probability"],[159,2,1,"","cp_xor_differential_propagation_constraints"],[159,2,1,"","cp_xor_linear_mask_propagation_constraints"],[159,3,1,"","description"],[159,2,1,"","get_bit_based_vectorized_python_code"],[159,2,1,"","get_byte_based_vectorized_python_code"],[159,2,1,"","get_graph_representation"],[159,2,1,"","get_word_operation_sign"],[159,3,1,"","id"],[159,3,1,"","input_bit_positions"],[159,3,1,"","input_bit_size"],[159,3,1,"","input_id_links"],[159,2,1,"","is_forbidden"],[159,2,1,"","is_id_equal_to"],[159,2,1,"","is_power_of_2_word_based"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[159,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[159,2,1,"","milp_xor_differential_propagation_constraints"],[159,2,1,"","milp_xor_linear_mask_propagation_constraints"],[159,2,1,"","minizinc_xor_differential_propagation_constraints"],[159,3,1,"","output_bit_size"],[159,2,1,"","output_size_for_concatenate"],[159,2,1,"","print"],[159,2,1,"","print_as_python_dictionary"],[159,2,1,"","print_values"],[159,2,1,"","print_word_values"],[159,2,1,"","sat_constraints"],[159,2,1,"","sat_xor_differential_propagation_constraints"],[159,2,1,"","sat_xor_linear_mask_propagation_constraints"],[159,2,1,"","select_bits"],[159,2,1,"","select_words"],[159,2,1,"","set_description"],[159,2,1,"","set_id"],[159,2,1,"","set_input_bit_positions"],[159,2,1,"","set_input_id_links"],[159,2,1,"","smt_constraints"],[159,2,1,"","smt_xor_differential_propagation_constraints"],[159,2,1,"","smt_xor_linear_mask_propagation_constraints"],[159,3,1,"","suffixes"],[159,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[159,3,1,"","type"]],"components.modsub_component":[[160,1,1,"","MODSUB"],[160,4,1,"","cp_twoterms"]],"components.modsub_component.MODSUB":[[160,2,1,"","as_python_dictionary"],[160,2,1,"","check_output_size"],[160,2,1,"","cms_constraints"],[160,2,1,"","cms_xor_differential_propagation_constraints"],[160,2,1,"","cms_xor_linear_mask_propagation_constraints"],[160,2,1,"","cp_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[160,2,1,"","cp_twoterms_xor_differential_probability"],[160,2,1,"","cp_xor_differential_propagation_constraints"],[160,2,1,"","cp_xor_linear_mask_propagation_constraints"],[160,3,1,"","description"],[160,2,1,"","get_bit_based_vectorized_python_code"],[160,2,1,"","get_byte_based_vectorized_python_code"],[160,2,1,"","get_graph_representation"],[160,2,1,"","get_word_operation_sign"],[160,3,1,"","id"],[160,3,1,"","input_bit_positions"],[160,3,1,"","input_bit_size"],[160,3,1,"","input_id_links"],[160,2,1,"","is_forbidden"],[160,2,1,"","is_id_equal_to"],[160,2,1,"","is_power_of_2_word_based"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[160,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[160,2,1,"","milp_xor_differential_propagation_constraints"],[160,2,1,"","milp_xor_linear_mask_propagation_constraints"],[160,2,1,"","minizinc_xor_differential_propagation_constraints"],[160,3,1,"","output_bit_size"],[160,2,1,"","output_size_for_concatenate"],[160,2,1,"","print"],[160,2,1,"","print_as_python_dictionary"],[160,2,1,"","print_values"],[160,2,1,"","print_word_values"],[160,2,1,"","sat_constraints"],[160,2,1,"","sat_xor_differential_propagation_constraints"],[160,2,1,"","sat_xor_linear_mask_propagation_constraints"],[160,2,1,"","select_bits"],[160,2,1,"","select_words"],[160,2,1,"","set_description"],[160,2,1,"","set_id"],[160,2,1,"","set_input_bit_positions"],[160,2,1,"","set_input_id_links"],[160,2,1,"","smt_constraints"],[160,2,1,"","smt_xor_differential_propagation_constraints"],[160,2,1,"","smt_xor_linear_mask_propagation_constraints"],[160,3,1,"","suffixes"],[160,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[160,3,1,"","type"]],"components.modular_component":[[161,1,1,"","Modular"],[161,4,1,"","generic_sign_linear_constraints"],[161,4,1,"","milp_n_window_heuristic"],[161,4,1,"","sat_n_window_heuristc_bit_level"]],"components.modular_component.Modular":[[161,2,1,"","as_python_dictionary"],[161,2,1,"","check_output_size"],[161,2,1,"","cms_xor_differential_propagation_constraints"],[161,2,1,"","cms_xor_linear_mask_propagation_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[161,2,1,"","cp_twoterms_xor_differential_probability"],[161,2,1,"","cp_xor_differential_propagation_constraints"],[161,2,1,"","cp_xor_linear_mask_propagation_constraints"],[161,3,1,"","description"],[161,2,1,"","get_graph_representation"],[161,2,1,"","get_word_operation_sign"],[161,3,1,"","id"],[161,3,1,"","input_bit_positions"],[161,3,1,"","input_bit_size"],[161,3,1,"","input_id_links"],[161,2,1,"","is_forbidden"],[161,2,1,"","is_id_equal_to"],[161,2,1,"","is_power_of_2_word_based"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[161,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[161,2,1,"","milp_xor_differential_propagation_constraints"],[161,2,1,"","milp_xor_linear_mask_propagation_constraints"],[161,2,1,"","minizinc_xor_differential_propagation_constraints"],[161,3,1,"","output_bit_size"],[161,2,1,"","output_size_for_concatenate"],[161,2,1,"","print"],[161,2,1,"","print_as_python_dictionary"],[161,2,1,"","print_values"],[161,2,1,"","print_word_values"],[161,2,1,"","sat_xor_differential_propagation_constraints"],[161,2,1,"","sat_xor_linear_mask_propagation_constraints"],[161,2,1,"","select_bits"],[161,2,1,"","select_words"],[161,2,1,"","set_description"],[161,2,1,"","set_id"],[161,2,1,"","set_input_bit_positions"],[161,2,1,"","set_input_id_links"],[161,2,1,"","smt_xor_differential_propagation_constraints"],[161,2,1,"","smt_xor_linear_mask_propagation_constraints"],[161,3,1,"","suffixes"],[161,2,1,"","twoterms_milp_probability_xor_linear_constraints"],[161,3,1,"","type"]],"components.multi_input_non_linear_logical_operator_component":[[162,1,1,"","MultiInputNonlinearLogicalOperator"]],"components.multi_input_non_linear_logical_operator_component.MultiInputNonlinearLogicalOperator":[[162,2,1,"","as_python_dictionary"],[162,2,1,"","check_output_size"],[162,2,1,"","cms_constraints"],[162,2,1,"","cms_xor_differential_propagation_constraints"],[162,2,1,"","cms_xor_linear_mask_propagation_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[162,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[162,2,1,"","cp_xor_differential_propagation_constraints"],[162,3,1,"","description"],[162,2,1,"","generic_sign_linear_constraints"],[162,2,1,"","get_graph_representation"],[162,2,1,"","get_word_operation_sign"],[162,3,1,"","id"],[162,3,1,"","input_bit_positions"],[162,3,1,"","input_bit_size"],[162,3,1,"","input_id_links"],[162,2,1,"","is_forbidden"],[162,2,1,"","is_id_equal_to"],[162,2,1,"","is_power_of_2_word_based"],[162,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[162,2,1,"","milp_xor_differential_propagation_constraints"],[162,2,1,"","milp_xor_linear_mask_propagation_constraints"],[162,3,1,"","output_bit_size"],[162,2,1,"","output_size_for_concatenate"],[162,2,1,"","print"],[162,2,1,"","print_as_python_dictionary"],[162,2,1,"","print_values"],[162,2,1,"","print_word_values"],[162,2,1,"","sat_constraints"],[162,2,1,"","sat_xor_differential_propagation_constraints"],[162,2,1,"","sat_xor_linear_mask_propagation_constraints"],[162,2,1,"","select_bits"],[162,2,1,"","select_words"],[162,2,1,"","set_description"],[162,2,1,"","set_id"],[162,2,1,"","set_input_bit_positions"],[162,2,1,"","set_input_id_links"],[162,2,1,"","smt_xor_differential_propagation_constraints"],[162,2,1,"","smt_xor_linear_mask_propagation_constraints"],[162,3,1,"","suffixes"],[162,3,1,"","type"]],"components.not_component":[[163,1,1,"","NOT"]],"components.not_component.NOT":[[163,2,1,"","algebraic_polynomials"],[163,2,1,"","as_python_dictionary"],[163,2,1,"","check_output_size"],[163,2,1,"","cms_constraints"],[163,2,1,"","cms_xor_differential_propagation_constraints"],[163,2,1,"","cms_xor_linear_mask_propagation_constraints"],[163,2,1,"","cp_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[163,2,1,"","cp_xor_differential_first_step_constraints"],[163,2,1,"","cp_xor_differential_propagation_constraints"],[163,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[163,2,1,"","cp_xor_linear_mask_propagation_constraints"],[163,3,1,"","description"],[163,2,1,"","generic_sign_linear_constraints"],[163,2,1,"","get_bit_based_vectorized_python_code"],[163,2,1,"","get_byte_based_vectorized_python_code"],[163,2,1,"","get_graph_representation"],[163,2,1,"","get_word_operation_sign"],[163,3,1,"","id"],[163,3,1,"","input_bit_positions"],[163,3,1,"","input_bit_size"],[163,3,1,"","input_id_links"],[163,2,1,"","is_forbidden"],[163,2,1,"","is_id_equal_to"],[163,2,1,"","is_power_of_2_word_based"],[163,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[163,2,1,"","milp_constraints"],[163,2,1,"","milp_xor_differential_propagation_constraints"],[163,2,1,"","milp_xor_linear_mask_propagation_constraints"],[163,3,1,"","output_bit_size"],[163,2,1,"","output_size_for_concatenate"],[163,2,1,"","print"],[163,2,1,"","print_as_python_dictionary"],[163,2,1,"","print_values"],[163,2,1,"","print_word_values"],[163,2,1,"","sat_constraints"],[163,2,1,"","sat_xor_differential_propagation_constraints"],[163,2,1,"","sat_xor_linear_mask_propagation_constraints"],[163,2,1,"","select_bits"],[163,2,1,"","select_words"],[163,2,1,"","set_description"],[163,2,1,"","set_id"],[163,2,1,"","set_input_bit_positions"],[163,2,1,"","set_input_id_links"],[163,2,1,"","smt_constraints"],[163,2,1,"","smt_xor_differential_propagation_constraints"],[163,2,1,"","smt_xor_linear_mask_propagation_constraints"],[163,3,1,"","suffixes"],[163,3,1,"","type"]],"components.or_component":[[164,1,1,"","OR"]],"components.or_component.OR":[[164,2,1,"","algebraic_polynomials"],[164,2,1,"","as_python_dictionary"],[164,2,1,"","check_output_size"],[164,2,1,"","cms_constraints"],[164,2,1,"","cms_xor_differential_propagation_constraints"],[164,2,1,"","cms_xor_linear_mask_propagation_constraints"],[164,2,1,"","cp_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[164,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[164,2,1,"","cp_xor_differential_propagation_constraints"],[164,2,1,"","cp_xor_linear_mask_propagation_constraints"],[164,3,1,"","description"],[164,2,1,"","generic_sign_linear_constraints"],[164,2,1,"","get_bit_based_vectorized_python_code"],[164,2,1,"","get_byte_based_vectorized_python_code"],[164,2,1,"","get_graph_representation"],[164,2,1,"","get_word_operation_sign"],[164,3,1,"","id"],[164,3,1,"","input_bit_positions"],[164,3,1,"","input_bit_size"],[164,3,1,"","input_id_links"],[164,2,1,"","is_forbidden"],[164,2,1,"","is_id_equal_to"],[164,2,1,"","is_power_of_2_word_based"],[164,2,1,"","milp_twoterms_xor_linear_probability_constraints"],[164,2,1,"","milp_xor_differential_propagation_constraints"],[164,2,1,"","milp_xor_linear_mask_propagation_constraints"],[164,3,1,"","output_bit_size"],[164,2,1,"","output_size_for_concatenate"],[164,2,1,"","print"],[164,2,1,"","print_as_python_dictionary"],[164,2,1,"","print_values"],[164,2,1,"","print_word_values"],[164,2,1,"","sat_constraints"],[164,2,1,"","sat_xor_differential_propagation_constraints"],[164,2,1,"","sat_xor_linear_mask_propagation_constraints"],[164,2,1,"","select_bits"],[164,2,1,"","select_words"],[164,2,1,"","set_description"],[164,2,1,"","set_id"],[164,2,1,"","set_input_bit_positions"],[164,2,1,"","set_input_id_links"],[164,2,1,"","smt_constraints"],[164,2,1,"","smt_xor_differential_propagation_constraints"],[164,2,1,"","smt_xor_linear_mask_propagation_constraints"],[164,3,1,"","suffixes"],[164,3,1,"","type"]],"components.permutation_component":[[165,1,1,"","Permutation"]],"components.permutation_component.Permutation":[[165,2,1,"","algebraic_polynomials"],[165,2,1,"","as_python_dictionary"],[165,2,1,"","check_output_size"],[165,2,1,"","cms_constraints"],[165,2,1,"","cms_xor_differential_propagation_constraints"],[165,2,1,"","cms_xor_linear_mask_propagation_constraints"],[165,2,1,"","cp_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[165,2,1,"","cp_xor_differential_propagation_constraints"],[165,2,1,"","cp_xor_linear_mask_propagation_constraints"],[165,3,1,"","description"],[165,2,1,"","get_bit_based_c_code"],[165,2,1,"","get_bit_based_vectorized_python_code"],[165,2,1,"","get_byte_based_vectorized_python_code"],[165,2,1,"","get_graph_representation"],[165,3,1,"","id"],[165,3,1,"","input_bit_positions"],[165,3,1,"","input_bit_size"],[165,3,1,"","input_id_links"],[165,2,1,"","is_forbidden"],[165,2,1,"","is_id_equal_to"],[165,2,1,"","is_power_of_2_word_based"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[165,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_constraints"],[165,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[165,2,1,"","milp_xor_differential_propagation_constraints"],[165,2,1,"","milp_xor_linear_mask_propagation_constraints"],[165,3,1,"","output_bit_size"],[165,2,1,"","output_size_for_concatenate"],[165,2,1,"","print"],[165,2,1,"","print_as_python_dictionary"],[165,2,1,"","print_values"],[165,2,1,"","print_word_values"],[165,2,1,"","sat_constraints"],[165,2,1,"","sat_xor_differential_propagation_constraints"],[165,2,1,"","sat_xor_linear_mask_propagation_constraints"],[165,2,1,"","select_bits"],[165,2,1,"","select_words"],[165,2,1,"","set_description"],[165,2,1,"","set_id"],[165,2,1,"","set_input_bit_positions"],[165,2,1,"","set_input_id_links"],[165,2,1,"","smt_constraints"],[165,2,1,"","smt_xor_differential_propagation_constraints"],[165,2,1,"","smt_xor_linear_mask_propagation_constraints"],[165,3,1,"","suffixes"],[165,3,1,"","type"]],"components.reverse_component":[[166,1,1,"","Reverse"]],"components.reverse_component.Reverse":[[166,2,1,"","algebraic_polynomials"],[166,2,1,"","as_python_dictionary"],[166,2,1,"","check_output_size"],[166,2,1,"","cms_constraints"],[166,2,1,"","cms_xor_differential_propagation_constraints"],[166,2,1,"","cms_xor_linear_mask_propagation_constraints"],[166,2,1,"","cp_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[166,2,1,"","cp_xor_differential_propagation_constraints"],[166,2,1,"","cp_xor_linear_mask_propagation_constraints"],[166,3,1,"","description"],[166,2,1,"","get_bit_based_c_code"],[166,2,1,"","get_bit_based_vectorized_python_code"],[166,2,1,"","get_byte_based_vectorized_python_code"],[166,2,1,"","get_graph_representation"],[166,3,1,"","id"],[166,3,1,"","input_bit_positions"],[166,3,1,"","input_bit_size"],[166,3,1,"","input_id_links"],[166,2,1,"","is_forbidden"],[166,2,1,"","is_id_equal_to"],[166,2,1,"","is_power_of_2_word_based"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[166,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_constraints"],[166,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[166,2,1,"","milp_xor_differential_propagation_constraints"],[166,2,1,"","milp_xor_linear_mask_propagation_constraints"],[166,3,1,"","output_bit_size"],[166,2,1,"","output_size_for_concatenate"],[166,2,1,"","print"],[166,2,1,"","print_as_python_dictionary"],[166,2,1,"","print_values"],[166,2,1,"","print_word_values"],[166,2,1,"","sat_constraints"],[166,2,1,"","sat_xor_differential_propagation_constraints"],[166,2,1,"","sat_xor_linear_mask_propagation_constraints"],[166,2,1,"","select_bits"],[166,2,1,"","select_words"],[166,2,1,"","set_description"],[166,2,1,"","set_id"],[166,2,1,"","set_input_bit_positions"],[166,2,1,"","set_input_id_links"],[166,2,1,"","smt_constraints"],[166,2,1,"","smt_xor_differential_propagation_constraints"],[166,2,1,"","smt_xor_linear_mask_propagation_constraints"],[166,3,1,"","suffixes"],[166,3,1,"","type"]],"components.rotate_component":[[167,1,1,"","Rotate"]],"components.rotate_component.Rotate":[[167,2,1,"","algebraic_polynomials"],[167,2,1,"","as_python_dictionary"],[167,2,1,"","check_output_size"],[167,2,1,"","cms_constraints"],[167,2,1,"","cms_xor_differential_propagation_constraints"],[167,2,1,"","cms_xor_linear_mask_propagation_constraints"],[167,2,1,"","cp_constraints"],[167,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","cp_inverse_constraints"],[167,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","cp_xor_differential_first_step_constraints"],[167,2,1,"","cp_xor_differential_propagation_constraints"],[167,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[167,2,1,"","cp_xor_linear_mask_propagation_constraints"],[167,3,1,"","description"],[167,2,1,"","get_bit_based_vectorized_python_code"],[167,2,1,"","get_byte_based_vectorized_python_code"],[167,2,1,"","get_graph_representation"],[167,2,1,"","get_word_based_c_code"],[167,2,1,"","get_word_operation_sign"],[167,3,1,"","id"],[167,3,1,"","input_bit_positions"],[167,3,1,"","input_bit_size"],[167,3,1,"","input_id_links"],[167,2,1,"","is_forbidden"],[167,2,1,"","is_id_equal_to"],[167,2,1,"","is_power_of_2_word_based"],[167,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_constraints"],[167,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[167,2,1,"","milp_xor_differential_propagation_constraints"],[167,2,1,"","milp_xor_linear_mask_propagation_constraints"],[167,2,1,"","minizinc_constraints"],[167,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","minizinc_xor_differential_propagation_constraints"],[167,3,1,"","output_bit_size"],[167,2,1,"","output_size_for_concatenate"],[167,2,1,"","print"],[167,2,1,"","print_as_python_dictionary"],[167,2,1,"","print_values"],[167,2,1,"","print_word_values"],[167,2,1,"","sat_constraints"],[167,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[167,2,1,"","sat_xor_differential_propagation_constraints"],[167,2,1,"","sat_xor_linear_mask_propagation_constraints"],[167,2,1,"","select_bits"],[167,2,1,"","select_words"],[167,2,1,"","set_description"],[167,2,1,"","set_id"],[167,2,1,"","set_input_bit_positions"],[167,2,1,"","set_input_id_links"],[167,2,1,"","smt_constraints"],[167,2,1,"","smt_xor_differential_propagation_constraints"],[167,2,1,"","smt_xor_linear_mask_propagation_constraints"],[167,3,1,"","suffixes"],[167,3,1,"","type"]],"components.sbox_component":[[168,1,1,"","SBOX"],[168,4,1,"","check_table_feasibility"],[168,4,1,"","cp_update_ddt_valid_probabilities"],[168,4,1,"","cp_update_lat_valid_probabilities"],[168,4,1,"","milp_large_xor_probability_constraint_for_inequality"],[168,4,1,"","sat_build_table_template"],[168,4,1,"","smt_build_table_template"],[168,4,1,"","smt_get_sbox_probability_constraints"]],"components.sbox_component.SBOX":[[168,2,1,"","algebraic_polynomials"],[168,2,1,"","as_python_dictionary"],[168,2,1,"","check_output_size"],[168,2,1,"","cms_constraints"],[168,2,1,"","cms_xor_differential_propagation_constraints"],[168,2,1,"","cms_xor_linear_mask_propagation_constraints"],[168,2,1,"","cp_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[168,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","cp_xor_differential_first_step_constraints"],[168,2,1,"","cp_xor_differential_propagation_constraints"],[168,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[168,2,1,"","cp_xor_linear_mask_propagation_constraints"],[168,3,1,"","description"],[168,2,1,"","generate_sbox_sign_lat"],[168,2,1,"","get_bit_based_c_code"],[168,2,1,"","get_bit_based_vectorized_python_code"],[168,2,1,"","get_byte_based_vectorized_python_code"],[168,2,1,"","get_ddt_with_undisturbed_transitions"],[168,2,1,"","get_graph_representation"],[168,2,1,"","get_word_based_c_code"],[168,3,1,"","id"],[168,3,1,"","input_bit_positions"],[168,3,1,"","input_bit_size"],[168,3,1,"","input_id_links"],[168,2,1,"","is_forbidden"],[168,2,1,"","is_id_equal_to"],[168,2,1,"","is_power_of_2_word_based"],[168,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_large_xor_differential_probability_constraints"],[168,2,1,"","milp_large_xor_linear_probability_constraints"],[168,2,1,"","milp_small_xor_differential_probability_constraints"],[168,2,1,"","milp_small_xor_linear_probability_constraints"],[168,2,1,"","milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[168,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[168,2,1,"","milp_xor_differential_propagation_constraints"],[168,2,1,"","milp_xor_linear_mask_propagation_constraints"],[168,3,1,"","output_bit_size"],[168,2,1,"","output_size_for_concatenate"],[168,2,1,"","print"],[168,2,1,"","print_as_python_dictionary"],[168,2,1,"","print_values"],[168,2,1,"","print_word_values"],[168,2,1,"","sat_constraints"],[168,2,1,"","sat_xor_differential_propagation_constraints"],[168,2,1,"","sat_xor_linear_mask_propagation_constraints"],[168,2,1,"","select_bits"],[168,2,1,"","select_words"],[168,2,1,"","set_description"],[168,2,1,"","set_id"],[168,2,1,"","set_input_bit_positions"],[168,2,1,"","set_input_id_links"],[168,2,1,"","smt_constraints"],[168,2,1,"","smt_xor_differential_propagation_constraints"],[168,2,1,"","smt_xor_linear_mask_propagation_constraints"],[168,3,1,"","suffixes"],[168,3,1,"","type"]],"components.shift_component":[[169,1,1,"","SHIFT"]],"components.shift_component.SHIFT":[[169,2,1,"","algebraic_polynomials"],[169,2,1,"","as_python_dictionary"],[169,2,1,"","check_output_size"],[169,2,1,"","cms_constraints"],[169,2,1,"","cms_xor_differential_propagation_constraints"],[169,2,1,"","cms_xor_linear_mask_propagation_constraints"],[169,2,1,"","cp_constraints"],[169,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","cp_inverse_constraints"],[169,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","cp_xor_differential_first_step_constraints"],[169,2,1,"","cp_xor_differential_propagation_constraints"],[169,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[169,2,1,"","cp_xor_linear_mask_propagation_constraints"],[169,3,1,"","description"],[169,2,1,"","get_bit_based_vectorized_python_code"],[169,2,1,"","get_byte_based_vectorized_python_code"],[169,2,1,"","get_graph_representation"],[169,2,1,"","get_word_based_c_code"],[169,2,1,"","get_word_operation_sign"],[169,3,1,"","id"],[169,3,1,"","input_bit_positions"],[169,3,1,"","input_bit_size"],[169,3,1,"","input_id_links"],[169,2,1,"","is_forbidden"],[169,2,1,"","is_id_equal_to"],[169,2,1,"","is_power_of_2_word_based"],[169,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_constraints"],[169,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[169,2,1,"","milp_xor_differential_propagation_constraints"],[169,2,1,"","milp_xor_linear_mask_propagation_constraints"],[169,2,1,"","minizinc_constraints"],[169,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","minizinc_xor_differential_propagation_constraints"],[169,3,1,"","output_bit_size"],[169,2,1,"","output_size_for_concatenate"],[169,2,1,"","print"],[169,2,1,"","print_as_python_dictionary"],[169,2,1,"","print_values"],[169,2,1,"","print_word_values"],[169,2,1,"","sat_constraints"],[169,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[169,2,1,"","sat_xor_differential_propagation_constraints"],[169,2,1,"","sat_xor_linear_mask_propagation_constraints"],[169,2,1,"","select_bits"],[169,2,1,"","select_words"],[169,2,1,"","set_description"],[169,2,1,"","set_id"],[169,2,1,"","set_input_bit_positions"],[169,2,1,"","set_input_id_links"],[169,2,1,"","smt_constraints"],[169,2,1,"","smt_xor_differential_propagation_constraints"],[169,2,1,"","smt_xor_linear_mask_propagation_constraints"],[169,3,1,"","suffixes"],[169,3,1,"","type"]],"components.shift_rows_component":[[170,1,1,"","ShiftRows"]],"components.shift_rows_component.ShiftRows":[[170,2,1,"","algebraic_polynomials"],[170,2,1,"","as_python_dictionary"],[170,2,1,"","check_output_size"],[170,2,1,"","cms_constraints"],[170,2,1,"","cms_xor_differential_propagation_constraints"],[170,2,1,"","cms_xor_linear_mask_propagation_constraints"],[170,2,1,"","cp_constraints"],[170,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","cp_inverse_constraints"],[170,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","cp_xor_differential_first_step_constraints"],[170,2,1,"","cp_xor_differential_propagation_constraints"],[170,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[170,2,1,"","cp_xor_linear_mask_propagation_constraints"],[170,3,1,"","description"],[170,2,1,"","get_bit_based_vectorized_python_code"],[170,2,1,"","get_byte_based_vectorized_python_code"],[170,2,1,"","get_graph_representation"],[170,2,1,"","get_word_based_c_code"],[170,2,1,"","get_word_operation_sign"],[170,3,1,"","id"],[170,3,1,"","input_bit_positions"],[170,3,1,"","input_bit_size"],[170,3,1,"","input_id_links"],[170,2,1,"","is_forbidden"],[170,2,1,"","is_id_equal_to"],[170,2,1,"","is_power_of_2_word_based"],[170,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_constraints"],[170,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[170,2,1,"","milp_xor_differential_propagation_constraints"],[170,2,1,"","milp_xor_linear_mask_propagation_constraints"],[170,2,1,"","minizinc_constraints"],[170,2,1,"","minizinc_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","minizinc_xor_differential_propagation_constraints"],[170,3,1,"","output_bit_size"],[170,2,1,"","output_size_for_concatenate"],[170,2,1,"","print"],[170,2,1,"","print_as_python_dictionary"],[170,2,1,"","print_values"],[170,2,1,"","print_word_values"],[170,2,1,"","sat_constraints"],[170,2,1,"","sat_deterministic_truncated_xor_differential_trail_constraints"],[170,2,1,"","sat_xor_differential_propagation_constraints"],[170,2,1,"","sat_xor_linear_mask_propagation_constraints"],[170,2,1,"","select_bits"],[170,2,1,"","select_words"],[170,2,1,"","set_description"],[170,2,1,"","set_id"],[170,2,1,"","set_input_bit_positions"],[170,2,1,"","set_input_id_links"],[170,2,1,"","smt_constraints"],[170,2,1,"","smt_xor_differential_propagation_constraints"],[170,2,1,"","smt_xor_linear_mask_propagation_constraints"],[170,3,1,"","suffixes"],[170,3,1,"","type"]],"components.sigma_component":[[171,1,1,"","Sigma"]],"components.sigma_component.Sigma":[[171,2,1,"","algebraic_polynomials"],[171,2,1,"","as_python_dictionary"],[171,2,1,"","check_output_size"],[171,2,1,"","cms_constraints"],[171,2,1,"","cms_xor_differential_propagation_constraints"],[171,2,1,"","cms_xor_linear_mask_propagation_constraints"],[171,2,1,"","cp_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[171,2,1,"","cp_xor_differential_propagation_constraints"],[171,2,1,"","cp_xor_linear_mask_propagation_constraints"],[171,3,1,"","description"],[171,2,1,"","get_bit_based_c_code"],[171,2,1,"","get_bit_based_vectorized_python_code"],[171,2,1,"","get_byte_based_vectorized_python_code"],[171,2,1,"","get_graph_representation"],[171,3,1,"","id"],[171,3,1,"","input_bit_positions"],[171,3,1,"","input_bit_size"],[171,3,1,"","input_id_links"],[171,2,1,"","is_forbidden"],[171,2,1,"","is_id_equal_to"],[171,2,1,"","is_power_of_2_word_based"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[171,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_constraints"],[171,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[171,2,1,"","milp_xor_differential_propagation_constraints"],[171,2,1,"","milp_xor_linear_mask_propagation_constraints"],[171,3,1,"","output_bit_size"],[171,2,1,"","output_size_for_concatenate"],[171,2,1,"","print"],[171,2,1,"","print_as_python_dictionary"],[171,2,1,"","print_values"],[171,2,1,"","print_word_values"],[171,2,1,"","sat_constraints"],[171,2,1,"","sat_xor_differential_propagation_constraints"],[171,2,1,"","sat_xor_linear_mask_propagation_constraints"],[171,2,1,"","select_bits"],[171,2,1,"","select_words"],[171,2,1,"","set_description"],[171,2,1,"","set_id"],[171,2,1,"","set_input_bit_positions"],[171,2,1,"","set_input_id_links"],[171,2,1,"","smt_constraints"],[171,2,1,"","smt_xor_differential_propagation_constraints"],[171,2,1,"","smt_xor_linear_mask_propagation_constraints"],[171,3,1,"","suffixes"],[171,3,1,"","type"]],"components.theta_keccak_component":[[172,1,1,"","ThetaKeccak"]],"components.theta_keccak_component.ThetaKeccak":[[172,2,1,"","algebraic_polynomials"],[172,2,1,"","as_python_dictionary"],[172,2,1,"","check_output_size"],[172,2,1,"","cms_constraints"],[172,2,1,"","cms_xor_differential_propagation_constraints"],[172,2,1,"","cms_xor_linear_mask_propagation_constraints"],[172,2,1,"","cp_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[172,2,1,"","cp_xor_differential_propagation_constraints"],[172,2,1,"","cp_xor_linear_mask_propagation_constraints"],[172,3,1,"","description"],[172,2,1,"","get_bit_based_c_code"],[172,2,1,"","get_bit_based_vectorized_python_code"],[172,2,1,"","get_byte_based_vectorized_python_code"],[172,2,1,"","get_graph_representation"],[172,3,1,"","id"],[172,3,1,"","input_bit_positions"],[172,3,1,"","input_bit_size"],[172,3,1,"","input_id_links"],[172,2,1,"","is_forbidden"],[172,2,1,"","is_id_equal_to"],[172,2,1,"","is_power_of_2_word_based"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[172,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_constraints"],[172,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[172,2,1,"","milp_xor_differential_propagation_constraints"],[172,2,1,"","milp_xor_linear_mask_propagation_constraints"],[172,3,1,"","output_bit_size"],[172,2,1,"","output_size_for_concatenate"],[172,2,1,"","print"],[172,2,1,"","print_as_python_dictionary"],[172,2,1,"","print_values"],[172,2,1,"","print_word_values"],[172,2,1,"","sat_constraints"],[172,2,1,"","sat_xor_differential_propagation_constraints"],[172,2,1,"","sat_xor_linear_mask_propagation_constraints"],[172,2,1,"","select_bits"],[172,2,1,"","select_words"],[172,2,1,"","set_description"],[172,2,1,"","set_id"],[172,2,1,"","set_input_bit_positions"],[172,2,1,"","set_input_id_links"],[172,2,1,"","smt_constraints"],[172,2,1,"","smt_xor_differential_propagation_constraints"],[172,2,1,"","smt_xor_linear_mask_propagation_constraints"],[172,3,1,"","suffixes"],[172,3,1,"","type"]],"components.theta_xoodoo_component":[[173,1,1,"","ThetaXoodoo"]],"components.theta_xoodoo_component.ThetaXoodoo":[[173,2,1,"","algebraic_polynomials"],[173,2,1,"","as_python_dictionary"],[173,2,1,"","check_output_size"],[173,2,1,"","cms_constraints"],[173,2,1,"","cms_xor_differential_propagation_constraints"],[173,2,1,"","cms_xor_linear_mask_propagation_constraints"],[173,2,1,"","cp_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[173,2,1,"","cp_xor_differential_propagation_constraints"],[173,2,1,"","cp_xor_linear_mask_propagation_constraints"],[173,3,1,"","description"],[173,2,1,"","get_bit_based_c_code"],[173,2,1,"","get_bit_based_vectorized_python_code"],[173,2,1,"","get_byte_based_vectorized_python_code"],[173,2,1,"","get_graph_representation"],[173,3,1,"","id"],[173,3,1,"","input_bit_positions"],[173,3,1,"","input_bit_size"],[173,3,1,"","input_id_links"],[173,2,1,"","is_forbidden"],[173,2,1,"","is_id_equal_to"],[173,2,1,"","is_power_of_2_word_based"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[173,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_constraints"],[173,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[173,2,1,"","milp_xor_differential_propagation_constraints"],[173,2,1,"","milp_xor_linear_mask_propagation_constraints"],[173,3,1,"","output_bit_size"],[173,2,1,"","output_size_for_concatenate"],[173,2,1,"","print"],[173,2,1,"","print_as_python_dictionary"],[173,2,1,"","print_values"],[173,2,1,"","print_word_values"],[173,2,1,"","sat_constraints"],[173,2,1,"","sat_xor_differential_propagation_constraints"],[173,2,1,"","sat_xor_linear_mask_propagation_constraints"],[173,2,1,"","select_bits"],[173,2,1,"","select_words"],[173,2,1,"","set_description"],[173,2,1,"","set_id"],[173,2,1,"","set_input_bit_positions"],[173,2,1,"","set_input_id_links"],[173,2,1,"","smt_constraints"],[173,2,1,"","smt_xor_differential_propagation_constraints"],[173,2,1,"","smt_xor_linear_mask_propagation_constraints"],[173,3,1,"","suffixes"],[173,3,1,"","type"]],"components.variable_rotate_component":[[174,1,1,"","VariableRotate"]],"components.variable_rotate_component.VariableRotate":[[174,2,1,"","as_python_dictionary"],[174,2,1,"","check_output_size"],[174,3,1,"","description"],[174,2,1,"","get_graph_representation"],[174,2,1,"","get_word_based_c_code"],[174,2,1,"","get_word_operation_sign"],[174,3,1,"","id"],[174,3,1,"","input_bit_positions"],[174,3,1,"","input_bit_size"],[174,3,1,"","input_id_links"],[174,2,1,"","is_forbidden"],[174,2,1,"","is_id_equal_to"],[174,2,1,"","is_power_of_2_word_based"],[174,3,1,"","output_bit_size"],[174,2,1,"","output_size_for_concatenate"],[174,2,1,"","print"],[174,2,1,"","print_as_python_dictionary"],[174,2,1,"","print_values"],[174,2,1,"","print_word_values"],[174,2,1,"","select_bits"],[174,2,1,"","select_words"],[174,2,1,"","set_description"],[174,2,1,"","set_id"],[174,2,1,"","set_input_bit_positions"],[174,2,1,"","set_input_id_links"],[174,3,1,"","suffixes"],[174,3,1,"","type"]],"components.variable_shift_component":[[175,1,1,"","VariableShift"]],"components.variable_shift_component.VariableShift":[[175,2,1,"","as_python_dictionary"],[175,2,1,"","check_output_size"],[175,2,1,"","cms_constraints"],[175,2,1,"","cp_constraints"],[175,3,1,"","description"],[175,2,1,"","get_bit_based_vectorized_python_code"],[175,2,1,"","get_byte_based_vectorized_python_code"],[175,2,1,"","get_graph_representation"],[175,2,1,"","get_word_based_c_code"],[175,2,1,"","get_word_operation_sign"],[175,3,1,"","id"],[175,3,1,"","input_bit_positions"],[175,3,1,"","input_bit_size"],[175,3,1,"","input_id_links"],[175,2,1,"","is_forbidden"],[175,2,1,"","is_id_equal_to"],[175,2,1,"","is_power_of_2_word_based"],[175,2,1,"","minizinc_xor_differential_propagation_constraints"],[175,3,1,"","output_bit_size"],[175,2,1,"","output_size_for_concatenate"],[175,2,1,"","print"],[175,2,1,"","print_as_python_dictionary"],[175,2,1,"","print_values"],[175,2,1,"","print_word_values"],[175,2,1,"","sat_constraints"],[175,2,1,"","select_bits"],[175,2,1,"","select_words"],[175,2,1,"","set_description"],[175,2,1,"","set_id"],[175,2,1,"","set_input_bit_positions"],[175,2,1,"","set_input_id_links"],[175,2,1,"","smt_constraints"],[175,3,1,"","suffixes"],[175,3,1,"","type"]],"components.word_permutation_component":[[176,1,1,"","WordPermutation"]],"components.word_permutation_component.WordPermutation":[[176,2,1,"","algebraic_polynomials"],[176,2,1,"","as_python_dictionary"],[176,2,1,"","check_output_size"],[176,2,1,"","cms_constraints"],[176,2,1,"","cms_xor_differential_propagation_constraints"],[176,2,1,"","cms_xor_linear_mask_propagation_constraints"],[176,2,1,"","cp_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[176,2,1,"","cp_xor_differential_propagation_constraints"],[176,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[176,2,1,"","cp_xor_linear_mask_propagation_constraints"],[176,3,1,"","description"],[176,2,1,"","get_bit_based_c_code"],[176,2,1,"","get_bit_based_vectorized_python_code"],[176,2,1,"","get_byte_based_vectorized_python_code"],[176,2,1,"","get_graph_representation"],[176,3,1,"","id"],[176,3,1,"","input_bit_positions"],[176,3,1,"","input_bit_size"],[176,3,1,"","input_id_links"],[176,2,1,"","is_forbidden"],[176,2,1,"","is_id_equal_to"],[176,2,1,"","is_power_of_2_word_based"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[176,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_constraints"],[176,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[176,2,1,"","milp_xor_differential_propagation_constraints"],[176,2,1,"","milp_xor_linear_mask_propagation_constraints"],[176,3,1,"","output_bit_size"],[176,2,1,"","output_size_for_concatenate"],[176,2,1,"","print"],[176,2,1,"","print_as_python_dictionary"],[176,2,1,"","print_values"],[176,2,1,"","print_word_values"],[176,2,1,"","sat_constraints"],[176,2,1,"","sat_xor_differential_propagation_constraints"],[176,2,1,"","sat_xor_linear_mask_propagation_constraints"],[176,2,1,"","select_bits"],[176,2,1,"","select_words"],[176,2,1,"","set_description"],[176,2,1,"","set_id"],[176,2,1,"","set_input_bit_positions"],[176,2,1,"","set_input_id_links"],[176,2,1,"","smt_constraints"],[176,2,1,"","smt_xor_differential_propagation_constraints"],[176,2,1,"","smt_xor_linear_mask_propagation_constraints"],[176,3,1,"","suffixes"],[176,3,1,"","type"]],"components.xor_component":[[177,1,1,"","XOR"],[177,4,1,"","cp_build_truncated_table"],[177,4,1,"","generic_with_constant_sign_linear_constraints"],[177,4,1,"","get_milp_constraints_from_inequalities"],[177,4,1,"","get_transformed_xor_input_links_and_positions"]],"components.xor_component.XOR":[[177,2,1,"","algebraic_polynomials"],[177,2,1,"","as_python_dictionary"],[177,2,1,"","check_output_size"],[177,2,1,"","cms_constraints"],[177,2,1,"","cms_xor_differential_propagation_constraints"],[177,2,1,"","cms_xor_linear_mask_propagation_constraints"],[177,2,1,"","cp_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_deterministic_truncated_xor_differential_trail_constraints"],[177,2,1,"","cp_transform_xor_components_for_first_step"],[177,2,1,"","cp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","cp_xor_differential_propagation_constraints"],[177,2,1,"","cp_xor_differential_propagation_first_step_constraints"],[177,2,1,"","cp_xor_linear_mask_propagation_constraints"],[177,3,1,"","description"],[177,2,1,"","get_bit_based_vectorized_python_code"],[177,2,1,"","get_byte_based_vectorized_python_code"],[177,2,1,"","get_graph_representation"],[177,2,1,"","get_word_operation_sign"],[177,3,1,"","id"],[177,3,1,"","input_bit_positions"],[177,3,1,"","input_bit_size"],[177,3,1,"","input_id_links"],[177,2,1,"","is_forbidden"],[177,2,1,"","is_id_equal_to"],[177,2,1,"","is_power_of_2_word_based"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_binary_constraints"],[177,2,1,"","milp_bitwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_sequential_constraints"],[177,2,1,"","milp_wordwise_deterministic_truncated_xor_differential_simple_constraints"],[177,2,1,"","milp_xor_differential_propagation_constraints"],[177,2,1,"","milp_xor_linear_constraints"],[177,2,1,"","milp_xor_linear_mask_propagation_constraints"],[177,2,1,"","minizinc_constraints"],[177,2,1,"","minizinc_xor_differential_propagation_constraints"],[177,3,1,"","output_bit_size"],[177,2,1,"","output_size_for_concatenate"],[177,2,1,"","print"],[177,2,1,"","print_as_python_dictionary"],[177,2,1,"","print_values"],[177,2,1,"","print_word_values"],[177,2,1,"","sat_constraints"],[177,2,1,"","sat_xor_differential_propagation_constraints"],[177,2,1,"","sat_xor_linear_mask_propagation_constraints"],[177,2,1,"","select_bits"],[177,2,1,"","select_words"],[177,2,1,"","set_description"],[177,2,1,"","set_id"],[177,2,1,"","set_input_bit_positions"],[177,2,1,"","set_input_id_links"],[177,2,1,"","smt_constraints"],[177,2,1,"","smt_xor_differential_propagation_constraints"],[177,2,1,"","smt_xor_linear_mask_propagation_constraints"],[177,3,1,"","suffixes"],[177,3,1,"","type"]],"input.Input":[[181,3,1,"","bit_positions"],[181,3,1,"","bit_size"],[181,3,1,"","id_links"],[181,2,1,"","set_input_bit_positions"],[181,2,1,"","set_input_id_links"]],"round.Round":[[183,2,1,"","add_component"],[183,2,1,"","are_there_forbidden_components"],[183,2,1,"","component_from"],[183,3,1,"","components"],[183,2,1,"","get_component_from_id"],[183,2,1,"","get_components_ids"],[183,2,1,"","get_number_of_components"],[183,2,1,"","get_round_from_component_id"],[183,3,1,"","id"],[183,2,1,"","is_component_input"],[183,2,1,"","is_power_of_2_word_based"],[183,3,1,"","number_of_components"],[183,2,1,"","print_round"],[183,2,1,"","print_round_as_python_dictionary"],[183,2,1,"","remove_component"],[183,2,1,"","remove_component_from_id"],[183,2,1,"","round_as_python_dictionary"],[183,2,1,"","swap_components"]],"rounds.Rounds":[[184,2,1,"","add_component"],[184,2,1,"","add_round"],[184,2,1,"","are_there_not_forbidden_components"],[184,2,1,"","component_from"],[184,2,1,"","components_in_round"],[184,3,1,"","current_round"],[184,3,1,"","current_round_number"],[184,3,1,"","current_round_number_of_components"],[184,2,1,"","get_all_components"],[184,2,1,"","get_all_components_ids"],[184,2,1,"","get_component_from_id"],[184,2,1,"","get_round_from_component_id"],[184,2,1,"","is_power_of_2_word_based"],[184,2,1,"","number_of_components"],[184,3,1,"","number_of_rounds"],[184,2,1,"","print_rounds"],[184,2,1,"","print_rounds_as_python_dictionary"],[184,2,1,"","remove_round_component"],[184,2,1,"","remove_round_component_from_id"],[184,2,1,"","round_at"],[184,3,1,"","rounds"],[184,2,1,"","rounds_as_python_dictionary"]],"utils.integer":[[185,4,1,"","generate_bitmask"],[185,4,1,"","to_binary"]],"utils.integer_functions":[[186,4,1,"","bytearray_to_int"],[186,4,1,"","bytearray_to_wordlist"],[186,4,1,"","int_to_bytearray"],[186,4,1,"","int_to_wordlist"],[186,4,1,"","lor"],[186,4,1,"","ror"],[186,4,1,"","wordlist_to_bytearray"],[186,4,1,"","wordlist_to_int"]],"utils.sage_scripts":[[187,4,1,"","create_scenario_string"],[187,4,1,"","get_cipher"],[187,4,1,"","get_cipher_type"],[187,4,1,"","get_ciphers"],[187,4,1,"","load_parameters"],[187,4,1,"","make_cipher_id"]],"utils.sequence_operations":[[188,4,1,"","rotate_left"],[188,4,1,"","rotate_right"],[188,4,1,"","shift_left"],[188,4,1,"","shift_right"]],"utils.templates":[[189,1,1,"","Body"],[189,1,1,"","Builder"],[189,1,1,"","CSVBuilder"],[189,1,1,"","Footer"],[189,1,1,"","Header"],[189,1,1,"","LatexBuilder"],[189,1,1,"","Template"],[189,1,1,"","TemplateManager"]],"utils.templates.Body":[[189,5,1,"","content"]],"utils.templates.Builder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.CSVBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Footer":[[189,5,1,"","content"]],"utils.templates.Header":[[189,5,1,"","content"],[189,5,1,"","logo"]],"utils.templates.LatexBuilder":[[189,2,1,"","get_body"],[189,2,1,"","get_footer"],[189,2,1,"","get_header"]],"utils.templates.Template":[[189,2,1,"","render_template"],[189,2,1,"","set_body"],[189,2,1,"","set_footer"],[189,2,1,"","set_header"]],"utils.templates.TemplateManager":[[189,2,1,"","get_template"],[189,2,1,"","set_builder"]],"utils.utils":[[190,4,1,"","aggregate_list_of_dictionary"],[190,4,1,"","bytes_positions_to_little_endian_for_32_bits"],[190,4,1,"","bytes_positions_to_little_endian_for_multiple_of_32"],[190,4,1,"","calculate_inputs"],[190,4,1,"","convert_2d_index_to_1d_index"],[190,4,1,"","create_new_state_for_calculation"],[190,4,1,"","extract_inputs"],[190,4,1,"","generate_sample_from_gf_2_n"],[190,4,1,"","get_2d_array_element_from_1d_array_index"],[190,4,1,"","get_ci"],[190,4,1,"","get_inputs_parameter"],[190,4,1,"","get_ith_word"],[190,4,1,"","get_k_th_bit"],[190,4,1,"","get_number_of_rounds_from"],[190,4,1,"","group_list_by_key"],[190,4,1,"","int_to_poly"],[190,4,1,"","layer_and_lane_initialization"],[190,4,1,"","merging_list_of_lists"],[190,4,1,"","point_pair"],[190,4,1,"","poly_to_int"],[190,4,1,"","pprint_dictionary"],[190,4,1,"","pprint_dictionary_to_file"],[190,4,1,"","set_2d_array_element_from_1d_array_index"],[190,4,1,"","sgn_function"],[190,4,1,"","signed_distance"],[190,4,1,"","simplify_inputs"]],cipher:[[0,1,1,"","Cipher"]],cipher_modules:[[1,0,0,"-","algebraic_tests"],[2,0,0,"-","avalanche_tests"],[3,0,0,"-","code_generator"],[4,0,0,"-","component_analysis_tests"],[5,0,0,"-","continuous_tests"],[6,0,0,"-","evaluator"],[8,0,0,"-","generic_functions"],[9,0,0,"-","generic_functions_continuous_diffusion_analysis"],[10,0,0,"-","generic_functions_vectorized_bit"],[11,0,0,"-","generic_functions_vectorized_byte"],[13,0,0,"-","graph_generator"],[14,0,0,"-","inverse_cipher"],[83,0,0,"-","tester"]],component:[[150,1,1,"","Component"],[150,4,1,"","check_size"],[150,4,1,"","free_input"],[150,4,1,"","linear_layer_to_binary_matrix"]],components:[[151,0,0,"-","and_component"],[152,0,0,"-","cipher_output_component"],[153,0,0,"-","concatenate_component"],[154,0,0,"-","constant_component"],[155,0,0,"-","fsr_component"],[156,0,0,"-","intermediate_output_component"],[157,0,0,"-","linear_layer_component"],[158,0,0,"-","mix_column_component"],[159,0,0,"-","modadd_component"],[160,0,0,"-","modsub_component"],[161,0,0,"-","modular_component"],[162,0,0,"-","multi_input_non_linear_logical_operator_component"],[163,0,0,"-","not_component"],[164,0,0,"-","or_component"],[165,0,0,"-","permutation_component"],[166,0,0,"-","reverse_component"],[167,0,0,"-","rotate_component"],[168,0,0,"-","sbox_component"],[169,0,0,"-","shift_component"],[170,0,0,"-","shift_rows_component"],[171,0,0,"-","sigma_component"],[172,0,0,"-","theta_keccak_component"],[173,0,0,"-","theta_xoodoo_component"],[174,0,0,"-","variable_rotate_component"],[175,0,0,"-","variable_shift_component"],[176,0,0,"-","word_permutation_component"],[177,0,0,"-","xor_component"]],compound_xor_differential_cipher:[[178,4,1,"","convert_to_compound_xor_cipher"],[178,4,1,"","create_xor_component"],[178,4,1,"","create_xor_component_inputs"],[178,4,1,"","get_component_pair"],[178,4,1,"","update_cipher_inputs"],[178,4,1,"","update_input_id_links"]],editor:[[179,4,1,"","add_AND_component"],[179,4,1,"","add_FSR_component"],[179,4,1,"","add_MODADD_component"],[179,4,1,"","add_MODSUB_component"],[179,4,1,"","add_NOT_component"],[179,4,1,"","add_OR_component"],[179,4,1,"","add_SBOX_component"],[179,4,1,"","add_SHIFT_component"],[179,4,1,"","add_XOR_component"],[179,4,1,"","add_cipher_output_component"],[179,4,1,"","add_component"],[179,4,1,"","add_concatenate_component"],[179,4,1,"","add_constant_component"],[179,4,1,"","add_intermediate_output_component"],[179,4,1,"","add_linear_layer_component"],[179,4,1,"","add_mix_column_component"],[179,4,1,"","add_permutation_component"],[179,4,1,"","add_reverse_component"],[179,4,1,"","add_rotate_component"],[179,4,1,"","add_round"],[179,4,1,"","add_round_key_output_component"],[179,4,1,"","add_round_output_component"],[179,4,1,"","add_shift_rows_component"],[179,4,1,"","add_sigma_component"],[179,4,1,"","add_theta_keccak_component"],[179,4,1,"","add_theta_xoodoo_component"],[179,4,1,"","add_variable_rotate_component"],[179,4,1,"","add_variable_shift_component"],[179,4,1,"","add_word_permutation_component"],[179,4,1,"","generate_expanded_links"],[179,4,1,"","get_final_input_positions"],[179,4,1,"","get_output_bit_size_from_id"],[179,4,1,"","get_unique_links_information"],[179,4,1,"","is_linear_layer_permutation"],[179,4,1,"","make_cipher_id"],[179,4,1,"","make_file_name"],[179,4,1,"","next_component_index_from"],[179,4,1,"","propagate_equivalences"],[179,4,1,"","propagate_permutations"],[179,4,1,"","propagate_rotations"],[179,4,1,"","remove_cipher_input_keys"],[179,4,1,"","remove_forbidden_parents"],[179,4,1,"","remove_key_schedule"],[179,4,1,"","remove_orphan_components"],[179,4,1,"","remove_permutations"],[179,4,1,"","remove_rotations"],[179,4,1,"","remove_round_component"],[179,4,1,"","remove_round_component_from_id"],[179,4,1,"","sort_cipher"],[179,4,1,"","update_cipher_inputs"],[179,4,1,"","update_component_inputs"],[179,4,1,"","update_inputs"]],input:[[181,1,1,"","Input"]],round:[[183,1,1,"","Round"]],rounds:[[184,1,1,"","Rounds"]],utils:[[185,0,0,"-","integer"],[186,0,0,"-","integer_functions"],[187,0,0,"-","sage_scripts"],[188,0,0,"-","sequence_operations"],[189,0,0,"-","templates"],[190,0,0,"-","utils"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","property","Python property"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:property","4":"py:function","5":"py:attribute"},terms:{"0":[0,2,3,4,5,8,9,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,185,188,190],"000000":48,"000000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0000000000000000":21,"0000000000000000000000000000000000000000000000000000000000000000":21,"000101":48,"001":[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"0010":[8,179],"001010":48,"0011":179,"001111":48,"0013153553009033203":22,"002":[21,190],"002946615219116211":74,"003168344497680664":75,"004":9,"004874706268310547":[61,66],"005683183670043945":25,"00607341":182,"007165431976318359":22,"007994651794433594":25,"009123563766479492":25,"00975656509399414":25,"01":[0,2,9,21,62,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0100":8,"0100000000000000011102230245":9,"010001":48,"010079622268676758":[62,67],"0101":179,"010100":48,"010101":48,"0101100100":8,"011":95,"011011":48,"0111":8,"011111":48,"016":143,"019":33,"019376516342163086":[59,64],"02":[9,21],"030":182,"031":[51,168],"05":[0,2,9,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"054n":182,"06":75,"06306815147399902":77,"0734":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0890":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"09":[61,66,71,72,73,74,75],"09b84e4804496b9b7c480dc87768f1f62d05e72fe2f21f92458886012b28ff3173b58f3426fb662b6be4933769b0bcec048dd2bab27894fc1828ed16c027fd4e394391ed0d27d6a4a4e06dadc6b12f5cfd95713beec720a9bf693e22c0a1d79f976aa412161fa3c35577e9c9ce973eba173df71edc75a0038f8853e756dc0031eed3ce4ffbccdea2eb5b40280cc1c84132116ae838d5a09b0653d8376bca9c988c89ff979aa0f7a600c47f91965fd8560e70b393d39eb4706d73c25c4baa7089f27479ce687673fb":8,"0_27":182,"0b000":[86,148],"0b000001":[148,149],"0b000101":148,"0b001":[86,148],"0b001011":148,"0b0010110010000000000000":141,"0b010":[86,148,149],"0b010000":149,"0b010110":148,"0b010111":149,"0b011":[148,149],"0b011100":148,"0b011101":149,"0b011111":149,"0b100":148,"0b100000":149,"0b100010":148,"0b101":148,"0b101011":149,"0b110":148,"0b111":149,"0b111010":149,"0b111011":149,"0b1111":185,"0b111110":148,"0mb":25,"0s":[8,10,11],"0x0":[9,33,77],"0x00":9,"0x0000":77,"0x0000000000000000":99,"0x00000000000000000000":146,"0x00010203":101,"0x00200000":33,"0x01":[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x012345":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x01234567":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x0123456789abcdef":[87,88],"0x0123456789abcdeffedcba9876543210":99,"0x02":9,"0x03":9,"0x03805224":33,"0x04":9,"0x04f0c8e0efe316e609390a3d98e97f5acc53c199":113,"0x05":9,"0x06":9,"0x07":9,"0x08":9,"0x09":9,"0x0a":9,"0x0b":9,"0x0c":9,"0x0d":9,"0x0d8d2647a12b0d544989a6b03603b8b3c27e2c4e0be08671745366d1a8bc4d95":114,"0x0e":9,"0x0f":9,"0x0x0001020304050607":101,"0x1":9,"0x10":9,"0x11":9,"0x11111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1111111111111111":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1198636720bac54986d1ab5a494866c9":143,"0x12":9,"0x1234":77,"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef":8,"0x12695bc9b7b7f8":88,"0x13":9,"0x133457799bbcdff1":87,"0x14":9,"0x15":9,"0x16":9,"0x17":9,"0x173":148,"0x18":9,"0x19":9,"0x1918111009080100":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x1a":9,"0x1b":9,"0x1c":9,"0x1d":[9,149],"0x1e":9,"0x1f":9,"0x1fe":148,"0x1ff":148,"0x2":9,"0x20":9,"0x21":9,"0x22":9,"0x23":9,"0x23a8d72":101,"0x24":9,"0x25":9,"0x25ac1ea08e1ec131e0a1780f7a2a42bb":143,"0x26":9,"0x27":9,"0x28":9,"0x29":9,"0x2a":9,"0x2b":9,"0x2b5f25d6":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x2b7e151628aed2a6abf7158809cf4f3c":84,"0x2bd6459f82c5b300952c49104881ff48":145,"0x2c":9,"0x2cc660354929f2ca":99,"0x2d":9,"0x2e":9,"0x2f":9,"0x3":9,"0x30":9,"0x30d0e5ede563dee67884718977510a4c22661cf128d8f75af4a2708276014d83":142,"0x31":9,"0x32":9,"0x33":9,"0x34":9,"0x35":9,"0x36":9,"0x37":9,"0x38":9,"0x39":9,"0x3956fba8c05053e5a27040b8ab9a7545":112,"0x3a":9,"0x3ad77bb40d7a3660a89ecaf32466ef97":84,"0x3b":9,"0x3c":9,"0x3d":9,"0x3e":[9,148],"0x3f":[9,148,149],"0x4":9,"0x40":9,"0x400000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x41":9,"0x42":9,"0x43":9,"0x43686961726180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030":[113,114],"0x439d5298656eccc67de":85,"0x44":9,"0x45":9,"0x46":9,"0x47":9,"0x47a57eff5d6475a68916":85,"0x48":9,"0x48c4a2e691d5b3f7":141,"0x49":9,"0x4a":9,"0x4b":9,"0x4c":9,"0x4d":9,"0x4e":9,"0x4e2448a4c6f486bb16b6562c73b4020bf3043e3a731bce721ae1b303d97e6d4c7181eebdb6c57e277d0e34957114cbd6c797fc9d95d8b582d225292076d4eef5":115,"0x4f":9,"0x5":9,"0x50":9,"0x51":9,"0x514896226caa4f20":92,"0x5175656c2066657a20736768656d626f20636f70726520646176616e74692e8000000000000000000000000000000000000000000000000000000000000000f8":112,"0x52":9,"0x53":9,"0x534eaa582fe8151ab6e1855a728c093f4d68d757ed949b4cbe41b7c6b":141,"0x54":9,"0x55":9,"0x56":9,"0x57":9,"0x58":9,"0x59":9,"0x5a":9,"0x5b":9,"0x5c":9,"0x5d":9,"0x5e":9,"0x5f":9,"0x6":9,"0x60":9,"0x61":9,"0x61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018":115,"0x617078653320646e79622d326b206574":144,"0x62":9,"0x63":9,"0x64":9,"0x65":9,"0x6574694c":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x6574694d":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x657cfa07096398b":147,"0x66":9,"0x67":9,"0x67452301":185,"0x68":9,"0x69":9,"0x6a":9,"0x6b":9,"0x6bc1bee22e409f96e93d7e117393172a":84,"0x6c":[9,148],"0x6cb4561c40bf0a9705931cb6d408e7fa":108,"0x6d":9,"0x6e":9,"0x6f":9,"0x7":9,"0x70":9,"0x71":9,"0x72":9,"0x73":9,"0x74":9,"0x75":9,"0x76":9,"0x77":9,"0x78":9,"0x79":9,"0x7a":9,"0x7b":9,"0x7c":9,"0x7d":9,"0x7e":9,"0x7e5c3a18f6d4b2901eb852fc9630da74":99,"0x7f":9,"0x8":[8,9],"0x80":9,"0x81":9,"0x82":9,"0x83":9,"0x84":9,"0x85":9,"0x85e813540f0ab405":[87,88],"0x86":9,"0x87":9,"0x88":9,"0x89":9,"0x89abcd":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x89abcdef":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0x8a":9,"0x8b":9,"0x8be":148,"0x8c":9,"0x8cd29cc32668b90ee2312924376f1b4":143,"0x8cdd0f3459fb721e798655298d5c1":85,"0x8d":9,"0x8e":9,"0x8f":9,"0x9":9,"0x90":9,"0x90afe91bb288544f2c32dc239b2635e6":108,"0x91":9,"0x92":9,"0x93":9,"0x94":9,"0x95":9,"0x96":9,"0x97":9,"0x98":9,"0x99":9,"0x9900aabbccddeeff1122334455667788":92,"0x9a":9,"0x9b":9,"0x9c":9,"0x9d":9,"0x9e":9,"0x9f":9,"0xa":9,"0xa0":9,"0xa1":9,"0xa2":9,"0xa3":9,"0xa4":9,"0xa5":9,"0xa6":9,"0xa7":9,"0xa8":9,"0xa86842f2":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xa9":9,"0xaa":9,"0xab":9,"0xab01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,179],"0xab02":179,"0xabcd":77,"0xabcdef01abcdef01":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xabee97047ac31373":145,"0xac":9,"0xad":9,"0xad0":149,"0xae":9,"0xaf":9,"0xaffec7":[59,64,72],"0xb":[9,143,148],"0xb0":9,"0xb1":9,"0xb2":9,"0xb3":9,"0xb4":9,"0xb5":9,"0xb6":9,"0xb7":9,"0xb8":9,"0xb9":9,"0xba":9,"0xbb":9,"0xbc":9,"0xbd":9,"0xbe":9,"0xbf":9,"0xc":9,"0xc0":9,"0xc1":9,"0xc2":9,"0xc3":9,"0xc4":9,"0xc5":9,"0xc6":9,"0xc7":9,"0xc8":9,"0xc9":9,"0xca":9,"0xcb":9,"0xcc":9,"0xcd":9,"0xce":9,"0xcf":9,"0xd":[9,143],"0xd0":9,"0xd1":9,"0xd2":9,"0xd3":9,"0xd4":9,"0xd43bb7556ea32e46f2a282b7d45b4e0d57ff739d4dc92c1bd7fc01700cc8216f":108,"0xd5":9,"0xd6":9,"0xd7":9,"0xd8":9,"0xd9":9,"0xda":9,"0xdb":9,"0xdc":9,"0xdd":9,"0xde":9,"0xdebe55784f853606399af3f6f4b8d0a706963a91f2ba4c687baea16da074f3c3":142,"0xdf":9,"0xdf07fd641a9aa0d88a5e7472c4f993fe6a4cc06898e0f3b4e7159ef0854d97b3":146,"0xe":9,"0xe0":9,"0xe1":9,"0xe2":9,"0xe22f92fff8c245c49d10359a02f1e555":143,"0xe3":9,"0xe4":9,"0xe5":9,"0xe6":9,"0xe7":9,"0xe8":9,"0xe9":9,"0xea":9,"0xea024714ad5c4d84df1f9b251c0bf45f":145,"0xeb":9,"0xec":9,"0xed":9,"0xee":9,"0xef":9,"0xf":[0,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"0xf0":9,"0xf1":9,"0xf1258f7940e1dde784d5ccf933c0478ad598261ea65aa9eebd1547306f80494d8b284e056253d057ff97a42d7f8e6fd490fee5a0a44647c48c5bda0cd6192e76ad30a6f71b19059c30935ab7d08ffc64eb5aa93f2317d635a9a6e6260d71210381a57c16dbcf555f43b831cd0347c82601f22f1a11a5569f05e5635a21d9ae6164befef28cc970f2613670957bc46611b87c5a554fd00ecb8c3ee88a1ccf32c8940c7922ae3a26141841f924a2c509e416f53526e70465c275f644e97f30a13beaf1ff7b5ceca249":8,"0xf2":9,"0xf3":9,"0xf4":9,"0xf5":9,"0xf6":9,"0xf7":9,"0xf8":9,"0xf9":9,"0xfa":9,"0xfb":9,"0xfc":9,"0xfd":9,"0xfe":[9,148],"0xfe0":149,"0xfedcba0987654321":92,"0xff":[9,148],"0xffe":148,"0xffff":25,"0xffffffff":[0,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],"0xffffffffff":142,"0xffffffffff0000000000":142,"0xffffffffffffffffffff":142,"0xffffffffffffffffffffffffffffffff":147,"1":[0,3,4,8,9,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],"10":[0,3,4,5,8,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,51,54,61,66,74,79,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,177,179,182,190],"100":[0,5,22,25,26,27,28,29,30,31,32,33,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,190],"1000":[8,19,20,21,22,23,24,25],"10000":[0,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000":[],"1000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"10000000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"100000000000000":190,"100010":48,"100111":48,"1007":[51,168,182],"101011":48,"101111":48,"1018":33,"10187196731567383":77,"1024":[110,175],"10407660024169345926":145,"1048576":175,"1058":182,"106":182,"107":182,"1073741824":175,"109":182,"10970":182,"11":[0,3,4,28,50,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"110":95,"1100":[8,22,25],"110011":48,"1101":8,"110111":48,"111":182,"111011":48,"1111":[8,179],"111111":48,"11111111011111111111111111111111":21,"111111111111111":82,"1111111111111110":21,"1111111111111111":21,"1112":182,"112":[],"113":182,"114":[],"115":[],"1152":146,"116":[],"117":[],"118":79,"119":[],"12":[0,3,4,25,28,30,31,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,162,164,165,166,171,172,173,179,190],"120":15,"1200":[22,25],"1229782938247303441":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"123735":182,"123745":182,"124":[79,182],"125":143,"127":[21,24,28],"128":[0,4,21,23,24,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,175,176],"129519094746312487908866675886161683828":144,"12pt":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"12th":182,"13":[0,3,4,25,33,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,164,165,166,171,172,173,179,182,190],"1300":[22,25],"131072":175,"132":[143,182],"1321":112,"13295412063598633":77,"134217728":175,"136":182,"14":[0,3,4,25,27,28,33,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,157,159,164,165,166,171,172,173,179,190],"1400":[22,25],"1411":[59,64],"146m":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"15":[0,3,4,21,23,24,25,50,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,157,158,159,160,161,164,165,166,167,170,171,172,173,176,177,179,190],"1500":[22,25],"156":79,"16":[0,3,4,22,24,25,28,30,31,32,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,157,158,159,160,161,164,165,166,168,169,171,172,173,175,176,177,179,190],"160":[124,131,132,133],"1600":[25,159,160,161,179],"161":182,"163":79,"16384":175,"167":182,"16777216":175,"17":[0,3,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,182,190],"173":182,"175":77,"177":[142,182],"178":79,"18":[0,3,22,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,169,170,171,172,173,176,179,190],"186":182,"188":[23,24],"19":[0,3,24,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,171,172,173,176,179,190],"19088743":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"191":28,"192":[28,94,99],"193":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"1962":182,"197":182,"19837307929992676":24,"1988":182,"1991":182,"1999":182,"1e":[],"1s":[8,10,11],"2":[0,3,4,8,9,10,11,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,188,190],"20":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,164,165,166,168,171,172,173,179,182,190],"200":[0,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2000":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"200000000000000":190,"2001":182,"2002":182,"2003":182,"2004":182,"2007":182,"2008":182,"2009":182,"2010":182,"2011":182,"2012":182,"2013":[182,190],"2014":[28,33,151,162,164,168,182],"2015":182,"2016":[28,33,159,160,161,182],"2017":182,"2018":182,"2019":[33,182],"202":125,"2020":[151,162,164,182],"2021":[151,162,164,182],"2022":143,"2023":182,"203":182,"2040":101,"2048":175,"206":182,"2097152":175,"21":[0,3,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,157,158,164,165,166,171,172,173,176,179,182,190],"213":[151,162,164,182],"2147483648":175,"218":182,"2190":182,"22":[0,3,27,28,29,32,33,56,57,58,59,60,61,62,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,157,159,160,161,164,165,166,171,172,173,177,179,190],"2202":182,"221":79,"222":182,"2222222222222220":21,"22222222222222202222222222222222":21,"2222222222222221":21,"22222222222222212222222222222220":21,"224":[24,114],"2256000000000004e":9,"228":[141,182],"229":141,"23":[0,3,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,162,164,165,166,171,172,173,176,179,190],"237":79,"238":182,"239":77,"239000000000000":77,"24":[0,3,15,28,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,190],"240":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"243":168,"25":[0,3,23,24,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"252":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"255":[21,101],"2550":182,"256":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,175],"2564":182,"26":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,179,182,190],"262144":175,"26553":[51,168],"268":182,"268435456":175,"27":[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,169,176,179,190],"274":182,"277":182,"28":[0,3,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,169,179,190],"281":182,"282":182,"286331153":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"288":[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],"2887":182,"289":182,"29":[0,3,25,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156,169,179,190],"290":[151,162,164],"294":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"2948":182,"2_3":[51,168],"2_31":182,"2f3":182,"2f978":182,"2x1":[151,162,164],"3":[0,3,4,8,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,184,188,190],"30":[0,3,24,25,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,168,169,179,190],"300":[22,25],"304":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"305":182,"306":182,"31":[0,3,20,22,23,24,25,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,158,159,160,161,163,164,169,175,176,177,179,182,190],"3174":113,"319":182,"32":[0,3,9,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,163,164,167,168,169,170,175,177,179,185,190],"320":28,"32768":175,"32bit":180,"33":[79,179],"33554432":175,"34":[168,179],"35":[152,156,179],"3502917":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"353":182,"36":[169,179],"367":182,"37":[79,168,179],"38":179,"38103010":25,"384":[4,15,103,114,179],"39":[164,179],"3949999999999999938937733645":9,"39555":182,"3a2f087e74cd0f2a10853c8a5d036d85":50,"3rd":182,"4":[0,3,4,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,177,179,182,184,185,188,190],"40":[0,4,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179],"400":[22,25],"407":[33,159,160,161,182],"4096":175,"41":179,"41009196":54,"4194304":175,"42":179,"4294967295":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"43":179,"430":[159,160,161],"432":15,"44":[168,179],"4411":182,"44658816949":9,"45":179,"450":182,"45473":182,"46":[179,182],"466":182,"46706":182,"468":[15,32],"47":[28,79,179],"4727":182,"48":[21,27,28,143,177,179],"49":[179,182],"490":28,"5":[0,2,3,4,9,19,20,21,22,23,24,25,28,32,47,50,55,56,57,58,61,66,71,72,73,74,75,77,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,163,164,168,169,176,177,179,182,188,190],"50":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],"500":[22,25],"500000000000":77,"5049":182,"51":179,"512":[111,114,144,146,175],"52":[179,182],"520":182,"524288":175,"53":179,"536":182,"536870912":175,"54":179,"540":182,"55":[179,182],"56":179,"57":179,"58":179,"59":[79,179],"595000000000000004996003611":9,"5_26":182,"5th":182,"6":[0,3,4,9,22,24,25,27,28,32,33,48,50,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,182,190],"60":[168,179],"600":[22,25],"6069":[],"61":179,"62":179,"6234":114,"6263":182,"63":[21,22,25,28,163,164,169,177,179],"631":182,"632":[151,162,164],"64":[0,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,61,66,74,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,170,175,177,179,182],"640":[134,135,136,141],"641582411206367315":93,"65":[75,179],"65536":175,"66":179,"662":182,"67":[75,179],"67108864":175,"68":[157,158,165,166,171,172,173,176,179],"688":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"69":179,"6dc5":[],"7":[0,3,4,9,19,20,21,22,23,24,25,28,32,50,58,59,60,61,62,63,64,65,66,67,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,160,163,164,165,166,168,169,171,172,173,176,177,179,190],"70":[179,182],"700":[22,25],"708":142,"71":179,"72":[28,79,107,179],"73":[179,182],"7359":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"73728":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"74":179,"743":182,"7457252":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"747":[33,168],"74735":182,"7489726543426514":24,"75":179,"753":[19,20,21,22,23,24,25],"759":[46,168],"76":179,"760":182,"761":28,"77":179,"78":179,"79":179,"7_8":182,"8":[0,3,4,9,11,17,19,20,21,22,23,24,25,32,33,47,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,182,190],"80":[27,28,79,98,113,131,132,133,142,146,168,179,182],"800":[0,22,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"802999073954890452142763024312444031238555908203125":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"805":[46,168],"81":[168,182],"8128":[80,82],"8192":[80,82,175],"8294":[30,31,47,48,158,168,176],"83":77,"8388608":175,"850a9520":22,"85400194":[151,162,164],"86":182,"8702":[30,31,47,48,158,168,176],"8876":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"8ca8d5de0906f08":[59,60,61,62,63,64,65,66,67],"9":[0,3,4,19,20,21,22,23,24,25,28,33,50,58,61,66,74,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,159,160,161,164,165,166,167,170,171,172,173,176,179,182,190],"90":[79,182,190],"900":[22,25],"90fe":72,"91":[54,175],"9101":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"9101160168647766":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"93":[19,20,21,22,23,24,25,74,158,176],"95":175,"96":15,"973":[33,151,162,164],"978":[51,168,182],"98":190,"9834215":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"99":190,"993147134780884":24,"abstract":63,"alg\u00e9briqu":182,"bas\u00e9":182,"bj\u00f6rklund":182,"boolean":[0,3,4,8,9,10,11,17,21,46,50,55,56,57,58,76,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177,180,182],"byte":[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,190],"case":[0,10,11,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],"class":[0,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,183,184,189,190],"default":[0,3,8,10,11,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,190],"do":[45,50,59,60,61,62,70],"enum":79,"faug\u00e8r":182,"final":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"float":[0,9,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],"function":[0,14,17,46,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182,184,190],"gr\u00f6bner":182,"import":[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],"int":[0,4,19,20,21,22,23,24,25,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,164,168,175,176,177,182],"k\u00f6lbl":182,"long":[0,15,22,24,25,32,33,50,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,168,171,172,173],"new":[23,24,59,60,61,62,70,179,182,188],"probl\u00e8m":182,"public":182,"return":[0,3,4,10,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,185,188,190],"s\u00e9curit\u00e9":182,"static":[58,80,82],"stehl\u00e9":182,"true":[0,2,3,4,5,8,9,10,11,15,16,17,28,31,32,58,61,62,66,67,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],"try":[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],"universit\u00e9":182,"var":[20,21,22,23,24,25,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],"while":24,A:[0,4,10,11,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,182],AND:[4,8,10,11,76,151,162,164,179],ANDed:[10,11],And:[55,70,76,180,190],BY:175,Be:[63,82],By:[8,33,62,67,75,124,179],FOR:[151,157,165,166,171,172,173],For:[8,48,59,60,61,62,63,79,80,82,143,158,176,177,179],If:[0,8,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],In:[22,24,25,59,60,61,62,63,64,65,66,67,71,74,75,82,95,111,112,143,179,182],It:[0,33,46,51,70,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],NOT:[8,10,11,23,24,163,179],No:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],Not:[70,180],OR:[8,10,11,76,162,164,179],ORed:[10,11],On:182,One:[80,82],Or:[70,76,180],That:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],The:[0,4,8,10,11,13,22,24,26,32,33,45,46,50,51,54,58,59,60,61,62,63,66,67,71,74,75,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,179,182,190],There:[22,24,25,61,62,66,67,74,75],These:13,To:[0,33,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],With:55,_:[4,26,27,28,54,77,80,82,154,159,160,161,167,169,170,175,177],_activ:[167,168,170],_backward:[28,31],_backward_ciph:[28,31],_binary_vari:54,_cipher:[28,31,77],_evalu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_forward_ciph:[28,31],_get_input_output_vari:[27,28],_get_input_output_variables_tupl:[27,28],_input:9,_integer_vari:54,_k:96,_model:[26,27,28,29,30,31,32,33,54],_model_constraint:[27,28,30,31,32,33],_non_linear_component_id:168,_r:96,_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],_round:[],_round_:[80,82],_sage:[59,60,61,62,63,64,65,66,67],_valu:[167,170],_variables_list:177,a51:141,a51streamciph:141,a5:180,a5_1_stream_ciph:141,a_0:54,a_1:54,a_7:70,a_:54,a_and_b:54,a_eq_b:54,a_geq_b:54,a_greater_b:54,a_i:54,a_leq_b:54,a_less_b:54,a_n:54,a_neq_b:54,a_or_b:54,aadd_constraints_to_build_fully_automatic_model_in_sage_milp_class:28,ab:[77,182],abcd1234:77,abl:[19,20,21,22,23,24,25,63,71],about:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],absolut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],access:182,accord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],accordingli:[110,111],accuraci:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],acm:182,activ:[19,20,21,22,25,180],active_sbox:24,actual:14,actual_inputs_bit:11,ad:[0,10,11,23,24,26,27,28,29,30,31,32,33,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],adapt:[95,96],add:[0,23,24,27,28,30,31,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_add_round_tweakei:103,add_additional_xor_constraint:[23,24],add_and_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_and_component_in_md5:112,add_and_component_in_sha1:113,add_and_component_sha2:114,add_and_component_to_even_round:89,add_arc:77,add_attributes_to_oper:4,add_beta_samples_to_final_result_from:5,add_bit_to_bit_list:14,add_cipher_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_com:[55,56,57,58],add_compon:[179,183,184],add_concatenate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constant_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_constraint:54,add_constraint_from_str:[55,56,57,58],add_constraints_to_build_fully_automatic_model_in_sage_milp_class:[28,31],add_constraints_to_build_in_sage_milp_class:[26,27,28,29,30,31,32,33],add_constraints_to_build_in_sage_milp_class_with_fixed_compon:[28,31],add_fsr_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_intermediate_output_component_latin_dances_permut:137,add_intermediate_output_components_id_to_dictionari:2,add_intermediate_output_rounds_id_to_dictionari:2,add_intermediate_output_values_to_dictionari:2,add_linear_layer_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_mix_column_seri:103,add_modadd_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_modadd_component_in_md5:112,add_modadd_component_in_md5_for_x:112,add_modadd_component_in_sha1:113,add_modadd_component_sha2:114,add_modsub_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_multicolumns_to_graph:2,add_new_component_to_list:14,add_not_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_not_component_in_md5:112,add_or_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_or_component_in_md5:112,add_output_com:[55,56,57,58],add_output_compon:[95,103,105,125,126,127,138,139,140],add_pad:8,add_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_reverse_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_rotate_component_in_md5:112,add_rotate_component_in_sha1:113,add_rotate_component_sha2:114,add_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],add_round_const:95,add_round_kei:[84,95,98,115],add_round_key_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_round_output_component_in_md5:112,add_round_output_component_in_sha1:113,add_round_output_component_sha2:114,add_round_output_linear:[126,139],add_round_output_nonlinear:[126,139],add_sbox_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sbox_components_layer_in_even_round:89,add_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_shift_rows_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_sigma_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_solution_to_components_valu:[19,20,21,22,23,24,25],add_solutions_from_components_valu:[19,20,21,22,23,24,25],add_subkei:107,add_suffix_to_compon:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],add_theta_keccak_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_theta_xoodoo_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_toy_compon:[],add_variable_rotate_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_variable_shift_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_verbos:3,add_word_permutation_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],add_xor_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,179],add_xor_component_in_md5:112,add_xor_component_sha2:114,add_xor_component_to_even_round:89,addend:[23,24],addenda:[22,23,25,151,159,160,161,177],addendum:[70,76],addit:[9,10,17,23,24,59,60,61,62,63,64,65,66,67,70,76,154,159,160,161,182],addition:119,address:143,adher:[112,113,114],adp2018:182,advanc:182,advantag:[59,60,61,62],ae:[0,4,19,20,21,22,23,24,25,30,31,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177,180,182],aeb:182,aes_block_ciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],aes_block_cipher_k128_p128_o128_r2:24,aes_block_cipher_k128_p128_o128_r2_table_of_solut:24,aesblockciph:[0,4,19,20,21,22,23,24,25,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,163,167,168,169,170,176,177],affec7:[59,64,72],africacrypt:182,after:[32,33],again:168,against:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],aggreg:190,aggregate_list_of_dictionari:190,agnost:182,ak2019:[168,182],albrecht:182,algebra:[0,16,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,182],algebraic_model:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_polynomi:[151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algebraic_test:[0,1,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],algebraicmodel:[15,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177],algorithm:[0,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,182],algorithmtest:82,all:[0,4,9,11,22,24,25,32,33,54,55,56,57,58,61,62,63,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,189,190],all_apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],all_avalanche_probability_vector:2,all_equivalent_bit:14,all_input:[23,24,177],all_input_bits_avail:14,all_output_bits_avail:14,all_output_updated_bits_avail:14,all_output_vector:2,all_solutions_:[55,56,57,58],allow:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],allw2014:[151,162,164,182],almost:[61,62,66,67,74,75],alpha:[70,76],alpha_10:70,alpha_7:70,alpha_:70,alpha_i:70,alreadi:[46,51,168],also:[9,26,27,28,29,30,31,32,33,70,71,80,82,95,151,162,164,190],altern:76,alwai:[61,62,66,67,74,75,86,151,159,160,161,162,164,179],alzett:130,alzette_round:130,amount:[8,9,10,11,70,90,93,94,95,97,98,100,102,104,105,106,107,109,110,111,112,113,114,119,124,129,175],amsgrad:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],an:[0,8,9,10,11,16,23,24,50,54,70,71,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,163,164,168,177,179,182,185,188],analysi:[0,46,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],analyz:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],analyze_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],and2inputs_ddt:[151,162,164],and2inputs_lat:[151,164],and_0:70,and_0_0:[120,134,136,179],and_0_18_act:151,and_0_18_valu:151,and_0_4:[151,162,164],and_0_4_0:177,and_0_4_0_class_bit_0:177,and_0_4_0_class_bit_1:177,and_0_4_0_i:[151,162,164],and_0_4_14:[151,162,164],and_0_4_14_o:[151,162,164],and_0_4_15:[151,162,164],and_0_4_15_o:[151,162,164],and_0_4_1:177,and_0_4_1_i:[151,162,164],and_0_8:[4,151,162,164],and_0_8_0:[151,162,164],and_0_8_0_i:[151,162,164],and_0_8_0_o:[151,162,164],and_0_8_10:[151,162,164],and_0_8_10_i:[151,162,164],and_0_8_10_o:[151,162,164],and_0_8_11:[151,162,164],and_0_8_11_i:[151,162,164],and_0_8_11_o:[151,162,164],and_0_8_12_i:[151,162,164],and_0_8_13_i:[151,162,164],and_0_8_1:[151,162,164],and_0_8_1_i:[151,162,164],and_0_8_1_o:[151,162,164],and_0_8_22_i:[151,162,164],and_0_8_23_i:[151,162,164],and_0_8_2:[151,162,164],and_0_8_2_i:[151,162,164],and_0_8_i:151,and_0_8_o:151,and_0_8_x0:151,and_0_8_x10:151,and_0_8_x11:151,and_0_8_x12:151,and_0_8_x13:151,and_0_8_x14:151,and_0_8_x15:151,and_0_8_x16:151,and_0_8_x17:151,and_0_8_x18:151,and_0_8_x19:151,and_0_8_x1:151,and_0_8_x20:151,and_0_8_x21:151,and_0_8_x22:151,and_0_8_x23:151,and_0_8_x2:151,and_0_8_x3:151,and_0_8_x4:151,and_0_8_x5:151,and_0_8_x6:151,and_0_8_x7:151,and_0_8_x8:151,and_0_8_x9:151,and_0_8_y0:151,and_0_8_y10:151,and_0_8_y11:151,and_0_8_y1:151,and_0_8_y2:151,and_0_8_y3:151,and_0_8_y4:151,and_0_8_y5:151,and_0_8_y6:151,and_0_8_y7:151,and_0_8_y8:151,and_0_8_y9:151,and_1:70,and_already_ad:[22,25],and_as_boolean_funct:4,and_compon:[4,151,162,164],and_continuous_diffusion_analysi:9,and_ddt_2:[],and_inequ:45,and_lat:45,and_out:70,and_xor_differential_probability_ddt:22,and_xor_linear_probability_lat:25,andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ani:[0,21,22,24,25,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],ankel:182,annual:182,anteced:76,anver:182,anyth:77,append:[0,3,20,21,22,24,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],appendix:168,appl:[],appli:[54,95,177,182],applic:[70,123,151,162,164,182],apply_sbox_to_each_3bit_column:[138,140],approach:182,approxim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],apv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ar:[0,4,8,11,13,19,20,21,22,23,24,25,26,28,30,31,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,177,179,190],arbitrari:[159,160,161],arc:[77,179],archiv:[151,162,164,182],are_equal_compon:14,are_there_enough_available_inputs_to_evaluate_compon:14,are_there_enough_available_inputs_to_perform_invers:14,are_there_forbidden_compon:183,are_there_not_forbidden_compon:184,are_these_bits_avail:14,area:182,arg:96,argument:17,arr:10,arrai:[10,11,19,20,21,22,23,24,25,79,151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],array1d:[154,159,160,161,167,169,170,175],array2d:[19,20,21,22,23,24,25,158,168,176,177],array_dim:190,articl:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],arx:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],arx_box:104,as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],ascii:82,ascon:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,163,165,166,168,171,172,173,176,179,180],ascon_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],ascon_sbox_sigma_no_matrix_permut:[117,168],ascon_sbox_sigma_permut:[28,118,157,158,165,166,171,172,173,176],asconpermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,163],asconsboxsigmanomatrixpermut:[117,168],asconsboxsigmapermut:[28,118,157,158,165,166,171,172,173,176],asiacrypt2020:182,ask:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],assembl:189,assert:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],assign:70,assign_functions_based_on:104,associ:[26,27,28,189],assum:14,attack:[0,15,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],attempt:24,attribut:4,august17:182,autom:182,automat:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],automata:182,autond:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],auxiliary_materi:[30,31],avail:[0,19,20,21,22,23,24,25,26,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],available_bit:14,available_output_compon:14,available_word_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],avalanch:[0,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],avalanche_depend:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_bia:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_dependence_uniform_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_dependence_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_entropy_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_entropy_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_result:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avalanche_test:2,avalanche_weight_criterion_threshold:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],avalanche_weight_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],averag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],avoid:77,awar:82,ax:4,b:[8,9,16,54,70,76,101,112,113,114,119,125,126,127,129,144,177,182],b_7:70,back:95,backward_ciph:[28,31],baena:182,ball:182,barbara:182,bardet:182,base:[0,3,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,181,182,183,184,189],base_compon:14,base_input:[],base_output:[],basi:[0,13,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],basic:70,bc2003:182,bc:[19,20,21,22,23,24,25],bcc:182,bcg:182,bdkllssss18:182,bea1:180,bea1_block_ciph:85,bea1blockciph:85,bea:85,beat:182,becaus:[45,50,70,112,113,114],becker:182,becom:95,been:[50,55,56,57,58,77,112,113,114],befor:[14,95,179],beforehand:26,begin:[55,56,57,58],behaviour:[45,50],being:70,bellini:182,below:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ber2010:182,berlin:182,berlinheidelberg:182,bernstein:182,best:70,beta:[0,5,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_10:70,beta_11:70,beta_1:[70,76],beta_7:70,beta_:70,beta_i:70,beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],beta_sample_output:5,bettal:182,better:[0,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],between:[48,50,54,70,76,108,177,180,190],bf:182,bfp2009:182,bfs2003:182,bfs2015:182,bghr2023:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],bh2012:182,bia:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bibliograph:180,big:[0,19,20,21,22,23,24,25,33,59,61,62,64,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,186],big_endian:50,big_m:54,big_swap:[122,123],bin:[8,82,185],binari:[4,8,9,10,27,28,54,77,82,96,177,179,182,185],binary_matrix_of_linear_compon:4,binary_valu:[20,58,72,74,75],binary_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],biryukov:182,bit:[0,3,4,8,11,14,26,27,28,30,31,32,33,50,54,58,63,70,76,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,179,180,185,190],bit_id:[71,72,73,74,75,168],bit_length:[8,79],bit_list:14,bit_nam:14,bit_posit:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],bit_positions_kei:[55,56,57,58],bit_positions_to_be_extract:190,bit_siz:[3,19,20,21,22,23,24,25,58,72,74,75,181],bit_stream:79,bit_stream_length:82,bit_transit:54,bit_valu:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],bit_vector_and:10,bit_vector_concat:10,bit_vector_linear_lay:10,bit_vector_mix_column:10,bit_vector_mix_column_poly0:10,bit_vector_modadd:10,bit_vector_modsub:10,bit_vector_not:10,bit_vector_or:10,bit_vector_print_as_hex_valu:10,bit_vector_rot:10,bit_vector_sbox:10,bit_vector_select_word:10,bit_vector_shift:10,bit_vector_shift_by_variable_amount:10,bit_vector_to_integ:10,bit_vector_xor:10,bitarrai:[0,3,8,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitarraytoint:175,bits_inside_word:8,bits_list:14,bits_of_an_output_compon:14,bitstr:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bitvector:[70,76],bitwis:[11,30,31,151,152,156,163,167,169,170,180,185],biv:142,bivium:180,bivium_key_stream:142,bivium_state_initi:142,bivium_stream_ciph:142,biviumstreamciph:142,bjmm2012:182,bklpprsv2007:182,bkw2019:182,blackbox:[],blake2:180,blake2_hash_funct:110,blake2hashfunct:110,blake:180,blake_hash_funct:111,blakehashfunct:111,blanklin:179,blob:[30,31,95,96,159,160,161],block:[0,79,80,82,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],block_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,162,164,167,169,170,176,177,190],block_ciph:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,190],block_count:144,blocksiz:96,blp2008:182,blp2011:182,bluetooth:180,bluetooth_stream_cipher_e0:143,bluetoothstreamciphere0:143,bm2018:182,bo:182,bodi:189,bogdanov:182,boolean_polynomi:4,boolean_polynomial_r:[4,15,16],booleanpolynomialr:[16,17],boolpolyr:8,boomerang:182,boomerang_uniform:4,boot:182,both:[21,24,50,152,156,182],bottom:13,bottom_half_quarter_round:[119,129,144],bouillaguet:182,bound:[32,33,55,56,57,58,190],box:[19,20,21,22,23,24,25,45,50,123,148,149,151,162,164,168],branch:[4,25,33,62,67,70,75],branch_numb:4,branch_xor_linear_constraint:[25,33,62,67,75],bro:182,brouwer:182,brute:182,bs2011:182,build:[0,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,189],build_:55,build_all_xor_differential_trails_with_fixed_weight:58,build_bitwise_deterministic_truncated_xor_differential_trail_model:[27,28],build_bitwise_impossible_xor_differential_trail_model:28,build_cipher_model:[20,29,56,59,60,61,62,63,64,65,66,67,72],build_code_for_compon:3,build_code_for_continuous_diffusion_analysis_compon:3,build_continuous_diffusion_analysis_function_cal:3,build_deterministic_truncated_xor_differential_trail_model:[21,57,60,65],build_function_cal:3,build_inverse_deterministic_truncated_xor_differential_trail_model:21,build_lowest_weight_xor_differential_trail_model:58,build_lowest_xor_differential_trails_with_at_most_weight:58,build_mix_column_truncated_t:[19,20,21,22,23,24,25],build_tim:24,build_wordwise_deterministic_truncated_xor_differential_trail_model:[30,31],build_wordwise_impossible_xor_differential_trail_model:31,build_xor_differential_trail_and_checker_model_at_intermediate_output_level:[61,66],build_xor_differential_trail_first_step_model:[23,24],build_xor_differential_trail_model:[19,20,21,22,23,24,25,32,55,56,57,58,59,60,61,62,63,64,65,66,67,74],build_xor_differential_trail_model_templ:[22,24],build_xor_differential_trail_second_step_model:24,build_xor_linear_trail_model:[25,33,62,67,75],build_xor_truncated_t:23,builder:189,building_tim:[22,24,25],building_time_second:[22,24,25,59,61,62,64,66,67,74,75,77],byrn:182,byte_vector_and:11,byte_vector_is_consecut:11,byte_vector_linear_lay:11,byte_vector_mix_column:11,byte_vector_mix_column_poly0:11,byte_vector_modadd:11,byte_vector_modsub:11,byte_vector_not:11,byte_vector_or:11,byte_vector_print_as_hex_valu:11,byte_vector_rot:11,byte_vector_sbox:11,byte_vector_select_all_word:11,byte_vector_shift:11,byte_vector_shift_by_variable_amount:11,byte_vector_xor:11,bytearray_to_int:186,bytearray_to_wordlist:186,byteord:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],bytes_positions_to_little_endian_for_32_bit:190,bytes_positions_to_little_endian_for_multiple_of_32:190,bz:17,c0:17,c0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c1:17,c1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],c2:17,c3:17,c4:17,c5:17,c6:17,c7:17,c:[0,16,17,54,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,177,180,182],c_2:[70,76],c_3:70,c_7:70,c_variabl:3,ca:182,cabarca:182,cadic:63,calcul:[8,168],calculate_average_differ:2,calculate_bit_posit:[19,20,21,22,23,24,25],calculate_bit_valu:[19,20,21,22,23,24,25],calculate_carry_for_three_block:4,calculate_carry_for_two_block:4,calculate_component_weight:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],calculate_input:190,calculate_input_bit_posit:[19,20,21,22,23,24,25,158],calculate_regular_differ:2,calculate_weights_for_linear_lay:4,calculate_weights_for_mix_column:4,calculate_worst_input_differ:2,call:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75],cambridg:182,can:[0,21,22,24,25,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,188],cancel:177,candidate_differ:[],cannier:182,cannot:29,care:[50,63],carri:[17,70,76],carries_id:159,carry_0_modadd_0_1_0:159,carry_0_modadd_0_1_1:159,carry_0_modadd_0_1_29:159,carry_0_modadd_0_1_2:159,carry_0_modadd_0_1_30:159,carry_id:159,carry_modadd_0_1:159,carry_modadd_0_1_0:159,carry_modadd_0_1_13:159,carry_modadd_0_1_14:159,carry_modadd_0_1_1:159,carry_modadd_0_1_29:[],carry_modadd_0_1_2:159,carry_modadd_0_1_30:[],carry_modsub_0_7_30:160,categori:[4,63],cbc:[26,79,80,82],cca:182,certain:[0,19,20,21,22,23,24,25,58,72,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],chacha:180,chacha_const:144,chacha_permut:[119,144],chacha_stream_ciph:144,chachapermut:[119,144],chachastreamciph:144,cham:182,chang:3,chapter:[51,168,182],chart:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],chaskei:[70,182],che:182,check:[61,66,151,162,164],check_output_s:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],check_siz:150,check_table_feas:168,chen:182,cheng:182,chi_definit:[125,126,127,138,139,140],chip:[],choco:24,choic:[26,71],choos:50,chosen:[59,60,61,62,63,64,65,66,67,71,110,111,112,113,114,190],chou:182,chpss18:182,chuf:[19,20,21,22,23,24,25],chunk:95,chunk_numb:[151,159,160,161,162,164],ci:[116,117,118,120,121,125,126,127,130,138,139,140],cid:182,cipher:[1,2,3,4,5,6,8,11,13,15,19,21,22,23,24,25,26,27,28,30,31,32,33,54,55,57,58,65,66,67,73,74,75,77,79,80,82,83,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,148,149,151,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,190],cipher_block_chaining_mod:79,cipher_code_str:3,cipher_famili:[119,129,137],cipher_family_nam:187,cipher_filenam:187,cipher_find_compon:14,cipher_id:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_id_solver_nam:77,cipher_input:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_input_size_:5,cipher_input_vari:[71,72,73,74,75],cipher_input_xor_linear_vari:75,cipher_inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_inv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_invers:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_list:[30,31,179],cipher_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_modul:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,187],cipher_nam:[0,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i12_o12_r1:179,cipher_name_i32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_name_i4_o4_r1:179,cipher_name_k32_p32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_number_of_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_oper:4,cipher_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179,190],cipher_output_0_0:179,cipher_output_0_3:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_3_input:3,cipher_output_0_3_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_output_0_6:21,cipher_output_10_13:28,cipher_output_10_13_backward:28,cipher_output_11_12:28,cipher_output_1_12:[22,152],cipher_output_1_12_0_i:152,cipher_output_1_12_1_i:152,cipher_output_1_12_2_i:152,cipher_output_1_12_30_o:152,cipher_output_1_12_31_o:152,cipher_output_1_12_7_i:77,cipher_output_1_12_8_i:77,cipher_output_1_12_9_i:77,cipher_output_1_32:24,cipher_output_1_32_126:[30,31,152,156],cipher_output_1_32_127:[30,31,152,156],cipher_output_1_32_act:21,cipher_output_1_32_valu:21,cipher_output_1_6_input:148,cipher_output_1_6_output:148,cipher_output_1_7_input:149,cipher_output_1_7_output:149,cipher_output_1_8:[26,27,28,29,30,31,32,33,152,156],cipher_output_1_8_30:[152,156],cipher_output_1_8_31:[152,156],cipher_output_21_12:[59,64,72],cipher_output_21_12_i:152,cipher_output_21_12_o:152,cipher_output_2_12:[21,27,28,32,33,152,156],cipher_output_2_12_0:[152,156],cipher_output_2_12_0_i:152,cipher_output_2_12_0_o:152,cipher_output_2_12_1:[152,156],cipher_output_2_12_1_i:152,cipher_output_2_12_1_o:152,cipher_output_2_12_29_i:62,cipher_output_2_12_2:[152,156],cipher_output_2_12_2_i:152,cipher_output_2_12_30:[152,156],cipher_output_2_12_30_i:[62,67,75,152],cipher_output_2_12_30_o:152,cipher_output_2_12_31:[152,156],cipher_output_2_12_31_i:[62,67,75,152],cipher_output_2_12_31_o:152,cipher_output_2_1:86,cipher_output_31_16:[59,60,61,62,63,64,65,66,67],cipher_output_3_12:[20,22,25],cipher_output_3_12_i:25,cipher_output_3_12_o:25,cipher_output_4_12:22,cipher_output_4_71:28,cipher_output_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_output_compon:[152,156],cipher_partial_invers:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cipher_python_dictionari:14,cipher_reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_rounds_without_permut:[],cipher_rounds_without_rot:[],cipher_st:85,cipher_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179],cipher_without_key_schedul:179,cipheroutput:[152,156],ciphertext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext:[0,28,59,60,61,62,63,64,65,66,67,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ciphertext_0:[59,60,61,62,63,64,65,66,67],ciphertext_0_o:[62,67],ciphertext_1:[59,60,61,62,63,64,65,66,67],ciphertext_1_o:[62,67],ciphertext_2:[59,60,61,62,63,64,65,66,67],ciphertext_2_o:[62,67],ciphertext_3:[59,60,61,62,63,64,65,66,67],ciphertext_3_o:[62,67],ciphertext_backward:28,claasp:[0,3,4,8,9,11,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,185,188,190],classic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],claus:[59,60,61,62,63,64,65,66,67,70,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],clock:[142,146,179],clock_fsm:145,clock_lfsr:145,clock_lfsr_initialization_mod:145,clock_numb:[142,143,145,146,147],clock_polynomi:[8,179],clocking_lfsr:147,close:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],closer:182,cm:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_add_clauses_to_solv:70,cms_cipher_model:59,cms_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cms_deterministic_truncated_xor_differential_model:[],cms_deterministic_truncated_xor_differential_trail_constraint:[],cms_modadd:159,cms_modadd_seq:159,cms_model:[59,61,62],cms_xor_differential_model:61,cms_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_mask_propagation_constraint:[151,154,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cms_xor_linear_model:62,cmssatciphermodel:59,cmssatdeterministictruncatedxordifferentialmodel:60,cmssatxordifferentialmodel:61,cmssatxorlinearmodel:62,cnf:[59,60,61,62,63,71,180],cnf_and:70,cnf_and_differenti:70,cnf_and_linear:70,cnf_and_seq:70,cnf_carri:70,cnf_carry_comp2:70,cnf_equival:70,cnf_hw_lipmaa:70,cnf_inequ:70,cnf_lipmaa:70,cnf_modadd_inequ:70,cnf_n_window_heuristic_on_w_var:70,cnf_or:70,cnf_or_seq:70,cnf_result_comp2:70,cnf_vshift_fals:70,cnf_vshift_id:70,cnf_xor:70,cnf_xor_seq:70,code:[0,2,50,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180,182],code_gener:3,codeword:182,coeffici:179,coin:[19,20,21,22,23,24,25],cold:182,collect:190,collect_component_oper:4,collect_components_with_the_same_oper:4,collect_input_id_link:89,collis:182,colloquium:182,column:[0,9,10,11,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,176,179,180],column_step:[110,111],columns_m:96,com:[30,31,50,51,54,95,96,159,160,161,168,182],combin:177,combinator:182,command:55,comment:[28,55,56,57,58],compact:[59,60,61,62,63,64,65,66,67,86,90,93,94,95,97,98,100,102,103,104,105,106,107,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144],compar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],comparison:50,compil:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],complet:[22,24,25,59,60,61,62,63,64,65,66,67,82],complex:182,compliant:63,compoent:[],compon:[0,2,3,8,9,13,14,15,19,20,21,22,23,24,25,26,27,28,29,31,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,179,183,184],component1:[14,23,24],component1_:178,component2:[14,23,24],component2_:178,component_0:[112,113,114],component_0_0:[179,184],component_1:[112,113,114],component_1_0:184,component_analysis_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_analysis_test:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],component_bit:14,component_from:[0,4,19,20,21,22,23,24,25,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,183,184],component_id:[0,3,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184],component_id_list:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],component_input:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,184],component_input_bit:14,component_invers:14,component_list:[14,27,28,30,31],component_nam:160,component_output_bit:14,component_output_id:[],component_rc:128,component_solut:[19,20,21,22,23,24,25],component_typ:[10,11,150],components_:128,components_in_round:184,components_io:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],components_valu:[19,20,21,22,23,24,25,71,72,73,74,75,77],components_vari:[],compos:77,compound:180,compris:143,comput:[0,4,9,10,11,15,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],compute_bsig0_bsig1:114,compute_ch:114,compute_criterion_from_avalanche_probability_vector:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],compute_input_id_links_and_input_bit_positions_for_inverse_component_from_available_output_compon:14,compute_input_id_links_and_input_bit_positions_for_inverse_component_from_input_compon:14,compute_magic_const:101,compute_maj:114,compute_sbox_precomput:9,compute_ssig0_ssig1:114,compute_temp_and_s_30_b:113,comut:70,concaten:[10,179,180],concatenate_0_0:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],concatenate_0_0_input:3,concatenate_0_0_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_0_2_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],concatenate_bool_func:8,concret:189,condit:76,confer:182,config:180,configur:[110,111],connect:[15,182],connect_round:58,connection_polynomi:15,connection_polynomials_at_round:15,consecut:11,consequ:76,consid:[0,23,24,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],const_0:[103,131,132,145],const_mask:177,constant:[0,9,54,84,85,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,180],constant_0_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_10:154,constant_0_10_y0:154,constant_0_10_y10:154,constant_0_10_y11:154,constant_0_10_y12:154,constant_0_10_y13:154,constant_0_10_y14:154,constant_0_10_y15:154,constant_0_10_y16:154,constant_0_10_y17:154,constant_0_10_y18:154,constant_0_10_y19:154,constant_0_10_y1:154,constant_0_10_y20:154,constant_0_10_y21:154,constant_0_10_y22:154,constant_0_10_y23:154,constant_0_10_y2:154,constant_0_10_y3:154,constant_0_10_y4:154,constant_0_10_y5:154,constant_0_10_y6:154,constant_0_10_y7:154,constant_0_10_y8:154,constant_0_10_y9:154,constant_0_18_act:154,constant_0_18_valu:154,constant_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],constant_0_2_0:154,constant_0_2_0_o:154,constant_0_2_1:154,constant_0_2_1_o:154,constant_0_2_30:154,constant_0_2_30_o:154,constant_0_2_31:154,constant_0_2_31_o:154,constant_0_30:154,constant_0_30_word_0_class:154,constant_0_30_word_1_class:154,constant_0_30_word_2_class:154,constant_0_30_word_3_class:154,constant_1_0:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154],constant_1_0_0:154,constant_1_0_14:154,constant_1_0_15:154,constant_1_0_1:154,constant_2_0:[86,154],constant_2_0_0:154,constant_2_0_0_o:154,constant_2_0_13:154,constant_2_0_14:154,constant_2_0_14_o:154,constant_2_0_15:154,constant_2_0_15_o:154,constant_2_0_1:154,constant_2_0_1_o:154,constant_2_0_2:154,constant_2_0_2_o:154,constant_2_0_o:154,constant_block_ciph:86,constant_bool_func:8,constant_ci:130,constant_coeffici:17,constant_compon:154,constant_continuous_diffusion_analysi:9,constant_modsub_0_7:160,constant_o3_r3:86,constant_r:130,constant_to_bitstr:3,constant_to_repr:[3,154],constant_xor_differential_constraint:154,constantblockciph:86,constrain:[151,152,154,156,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],constraint_permutation_and_key_schedule_separately_by_input_s:58,constraint_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,72,74,75,77],construct:[90,93,94,95,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,182,189],constructor:168,consum:[70,77],contain:[0,3,4,9,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,61,62,66,67,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],content:[182,189],continu:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_avalanche_factor_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_factor_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_diffusion_test:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_beta_number_of_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutral_measure_gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measure_for_bit_j_and_beta:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],continuous_neutrality_measures_:5,continuous_neutrality_measures_output_values_:5,control:189,conveni:[32,33],convers:13,convert:[4,10,77],convert_2d_index_to_1d_index:190,convert_output_to_byt:[3,151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],convert_polynomial_to_binary_matrix_given_polynomial_modulu:8,convert_solver_solution_to_dictionari:[32,33,77],convert_to_compound_xor_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,178],convert_x_to_binary_matrix_given_polynomial_modulu:8,convex:[45,50],convex_hul:[45,50],coordin:17,copi:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],core:180,cornerston:70,corr:182,correct:182,correl:[0,22,24,25,33,62,67,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],correspond:[0,4,11,26,30,31,33,62,63,67,71,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],cost:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cou2001:182,could:[22,24,25,61,62,66,67,74,75,80,82],count:[21,182],counter:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,143,190],coupl:[19,20,21,22,23,24,25,177],courtoi:182,cp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_build_truncated_t:177,cp_cipher_model:20,cp_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,175,176,177],cp_declar:[22,25,159,160,161,168],cp_deterministic_truncated_xor_differential_constraint:[151,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],cp_deterministic_truncated_xor_differential_model:21,cp_deterministic_truncated_xor_differential_trail_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_get_all_input:158,cp_inverse_constraint:[167,169,170],cp_model:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cp_transform_xor_components_for_first_step:177,cp_twoterm:[151,159,160],cp_twoterms_xor_differential_prob:[159,160,161],cp_update_ddt_valid_prob:168,cp_update_lat_valid_prob:168,cp_wordwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,167,168,169,170,177],cp_xor_differential_first_step_constraint:[163,167,168,169,170],cp_xor_differential_model:24,cp_xor_differential_number_of_active_sboxes_model:[23,24],cp_xor_differential_probability_ddt:151,cp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_differential_propagation_first_step_constraint:[152,154,156,158,163,167,168,169,170,176,177],cp_xor_differential_trail_search_fixing_number_of_active_sboxes_model:24,cp_xor_differential_trail_search_model:[19,20,21,22,23,24,25],cp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177],cp_xor_linear_model:[25,156],cp_xor_linear_probability_lat:151,cpa:182,cpciphermodel:20,cpdeterministictruncatedxordifferentialmodel:21,cplex:26,cpmodel:[19,20,21,22,23,24,25,151,152,154,156,158,159,160,161,162,163,164,167,168,169,170,176,177],cpxordifferentialfixingnumberofactivesboxesmodel:24,cpxordifferentialmodel:[22,24],cpxordifferentialnumberofactivesboxesmodel:[23,24],cpxordifferentialtrailsearchfixingnumberofactivesboxesmodel:24,cpxordifferentialtrailsearchmodel:[19,20,21,22,23,24,25],cpxorlinearmodel:[25,156],creat:[9,13,21,22,23,24,25,59,60,61,62,63,64,65,66,67,72,74,75,77,86,89,96,179,189],create_alpha_st:145,create_constant_compon:84,create_directori:77,create_key_sbox_compon:84,create_lookup_table_by_matrix:9,create_lookup_table_for_finite_field_el:9,create_mix_column_compon:84,create_mix_row_compon:115,create_networkx_graph_from_input_id:13,create_new_state_for_calcul:190,create_numerical_cnf:70,create_rotate_compon:84,create_round:86,create_round_constant_compon:115,create_round_kei:84,create_round_output_compon:84,create_sbox_compon:[84,115],create_scenario_str:187,create_shift_column_compon:115,create_shift_row_compon:84,create_structur:[],create_sub_kei:90,create_xor_compon:[23,24,84,178],create_xor_component_input:178,creator:14,criteria:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],criterion_nam:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],crossbr:182,cryptanalysi:[26,50,182],cryptanalyt:182,crypto:[50,168,182],cryptogr:182,cryptograph:182,cryptographi:182,cryptographiqu:182,cryptolog:182,cryptologyeprint:182,cryptominisat:[59,60,61,62,63,64,65,66,67,70,72,75],cryptominisat_sag:63,cryptominismt:74,cryptosystem:182,crystal:182,csrc:82,csv:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],csvbuilder:189,curi:182,curr_input_bit_id:77,current:[0,14,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],current_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],current_round_numb:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],current_round_number_of_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,184],custom:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],cut:[45,50],cutting_off_greedi:[45,50],cutting_off_milp:[45,50],cvxopt:26,cwi:182,cyclic:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],d1:[],d2:[],d:[0,4,17,54,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],d_7:70,dagstuhl:182,dakrv18:182,dash:[59,60,61,62,63],dat:[95,96],data:[0,48,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,186,189],data_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],data_typ:[80,82],data_word_id:[110,111],data_word_rang:[110,111],dataset:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,190],dataset_gener:79,datasetgener:79,datasettyp:79,date:190,datetim:190,dbitnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ddt:[22,46,151],ddt_sbox_0_5:168,de:[180,182],debug:[10,11],decid:[50,70],decim:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],decis:[55,56,57,58],declar:[21,22,23,24,25,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],decod:182,decrypt:143,dedic:143,deep:182,deepcopi:[23,24],def:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],defaultdict:190,defend:182,defin:[0,3,8,13,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],define_const:111,define_number_of_round:[95,110,111],define_number_of_sbox:95,define_permut:[110,111],define_rotation_amount:[110,111],definit:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],degre:[4,9],deleg:189,delet:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_dictionary_that_contains_inequalities_for_large_sbox:[46,168],delete_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,delete_dictionary_that_contains_inequalities_for_small_sbox:50,delete_dictionary_that_contains_wordwise_truncated_input_inequ:48,delete_dictionary_that_contains_wordwise_truncated_mds_inequ:47,delete_dictionary_that_contains_wordwise_truncated_xor_inequ:48,delete_dictionary_that_contains_xor_inequ:49,delete_espresso_dictionari:54,delete_generated_evaluate_c_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],delete_orphan_link:14,delta_const:94,delta_i:177,delta_in_1:48,delta_in_2:48,delta_x_0:177,delta_x_1:177,delta_x_2:177,densiti:[79,80,82],deo:182,depend:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],depth:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],deriv:13,derived_kei:92,des_block_ciph:87,des_ciph:88,des_exact_key_length_block_ciph:88,desblockciph:87,descend:[13,14],describ:[46,119,151,159,160,161,162,164],descript:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],desexactkeylengthblockciph:88,design:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],desir:77,detail:[143,188],determin:[0,4,54,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],determinist:[28,31,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],deterministic_truncated_xor_differenti:[19,20,21,22,23,24,25],deterministic_truncated_xor_differential_one_solut:[19,20,21,22,23,24,25],dey2023:119,diagon:[111,137],diagonal_step:[110,111],dict:[27,28,30,31,32,77,80,82,151,159,160,161,163,167,168,170],dict_criterion:2,dict_inequ:157,dict_intermediate_output_nam:2,dict_list:[80,82],dict_paramet:2,dict_polyhedron:50,dict_test_result:2,dictioanri:58,dictionari:[0,4,9,10,11,14,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,50,58,72,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],dictionary_exampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diehard:180,dieharder_:80,dieharder_random_toy_ciph:80,dieharder_random_toy_cipher_round_1:80,dieharder_report_dict:80,dieharder_report_folder_prefix:80,dieharder_statistical_test:80,dieharder_statistics_report:80,dieharder_test_output:80,diehardertest:80,diff:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diff_in_0:70,diff_in_1:70,diff_out:70,diff_str:[],differ:[0,26,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],difference_bit:[],difference_evaluation_funct:[],difference_posit:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],differenti:[0,4,26,45,46,50,51,54,63,70,71,72,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180,182],differential_branch_numb:4,diffus:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],diffusion_factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],diffusion_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],diffusion_tests_result:2,digit:[17,54,182],dilithium:182,dim:190,dimac:63,dimacs_input:70,dimens:47,dimension:8,din2021cri:182,din2021imp:182,din:182,dinur:182,dio2020:182,diogo:182,direct:[8,9,13,179,180],directli:70,directori:77,dirnam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],disabl:[55,56,57,58],discret:182,disctionari:58,discuss:51,displai:[10,11],dist:190,distanc:[182,190],distinct:[76,143,163],distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],divalpha:145,divid:63,dkllsss18:182,doc:188,docker:[46,51,82],doctest:[0,3,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],document:[82,180,182],documentclass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],doe:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],doi:182,done:29,draw:[80,82],ds:[],dto:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183],dtype:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],du2001:182,du2004:182,du2018:182,duart:182,duca:182,due:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],duke:80,dum1991:182,dumer:182,dummi:[33,54,70],dummy_0_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_0_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_0_mix_column_0_23_12_o:[158,176],dummy_0_mix_column_0_23_4_o:[158,176],dummy_0_mix_column_0_23_8_o:[158,176],dummy_10:70,dummy_10_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_10_mix_column_0_23_14_o:[158,176],dummy_11_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_11_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_11_mix_column_0_23_15_o:[158,176],dummy_12_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_13_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_14_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_15_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_16_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_17_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_18_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_19_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_1_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_1_mix_column_0_23_13_o:[158,176],dummy_1_mix_column_0_23_5_o:[158,176],dummy_1_mix_column_0_23_9_o:[158,176],dummy_20_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_21_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_23_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_2_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_2_mix_column_0_23_14_o:[158,176],dummy_3_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_3_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_3_mix_column_0_23_15_o:[158,176],dummy_4_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_4_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_5_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_6_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_6_mix_column_0_23_14_o:[158,176],dummy_7_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_7_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_7_mix_column_0_23_15_o:[158,176],dummy_8_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_8_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_8_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_13_o:[157,165,166,171,172,173],dummy_9_linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],dummy_9_linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],dummy_hw_0_0_0:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_1:[59,60,61,62,63,64,65,66,67],dummy_hw_0_0_2:[59,60,61,62,63,64,65,66,67],dummy_hw_0_77_6:[59,60,61,62,63,64,65,66,67],dummy_hw_0_78_6:[59,60,61,62,63,64,65,66,67],dummy_i:70,dummy_modadd_1_9_0:[159,160,161],dunkelman:182,dure:[55,56,57,58],duursma:182,dx0:177,dx1:177,dx2:177,dx3:177,dx:168,dy:[168,177],e0:180,e0_bottom_id:13,e0_keystream:143,e0_nonlinear_funct:143,e1_top_id:13,e7c92d3f:[],e:[0,26,27,28,32,33,48,63,71,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,182],each:[0,3,4,8,10,11,14,15,17,26,32,33,46,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],ed:182,editor:[180,182],edu:80,effect:179,effici:182,eighth:182,either:[0,17,45,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],el:182,element:[4,8,9,14,190],elif:[54,177],eliminate_linear_vari:17,ell_funct:130,els:[21,54,76,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],else_constraint:54,elseif:[21,54],emb:182,embed:[59,60,61,62,63,64,65,66,67,182],empti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],encod:[54,177],encount:168,encrypt:[91,143,182],end:[32,33,48,59,60,61,62,63,64,65,66,67,77,80,82,179],end_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],endia:[77,186],endian:[59,64,72,77,185,190],endif:[21,151,157,158,159,160,161,162,164,165,166,168,171,172,173,176,177],enforc:168,engr:182,ensur:[32,33],entir:[58,77],entri:[4,46,179],entropi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],enumer:[79,182],env_vars_str:70,epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],eprint:[28,33,143,151,159,160,161,162,164,168,182],eq:[159,160,161],eq_modadd_0_1:[159,160,161],equal:[8,10,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,77,84,87,88,92,99,108,111,114,168,180,190],equality_polynomi:17,equat:[15,182],equival:[0,8,45,50,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],equivalent_bits_in_common:14,error:182,espresso:[46,51,54,168,177],espresso_inequ:54,espresso_pos_to_constraint:54,estim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],et:182,etc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],euclidean:190,euro:182,eurocrypt99:182,evalu:[0,3,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],evaluate_continuous_diffusion_analysi:3,evaluate_multiple_differ:[],evaluate_using_c:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vector:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_vectorized_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluate_with_intermediate_outputs_continuous_diffusion_analysi:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evaluated_boolean_funct:9,evaluated_compon:14,evaluated_input:2,evaluated_y_list:9,evaluated_y_list_2:9,evaluated_y_list_3:9,everi:[0,59,60,61,62,63,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185],evolutionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],evolutionary_algorithm:[],exact:180,exampl:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],except:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,190],exchang:182,exclud:[80,82],exclude_variables_value_constraint:32,exclude_variables_value_xor_linear_constraint:33,execut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],exhaust:182,exist:[30,31,82],exmapl:79,expect:[0,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expected_output:190,experi:82,explain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],expon:182,express:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],extend:[9,182],extended_and_bit:9,extended_left_rotation_by_variable_amount:9,extended_left_shift_by_variable_amount:9,extended_not_bit:9,extended_one_left_rotation_iter:9,extended_one_left_shift_iter:9,extended_one_right_rotation_iter:9,extended_one_right_shift_iter:9,extended_right_rotation_by_variable_amount:9,extended_right_shift_by_variable_amount:9,extended_two_bit_multiplex:9,extern:[26,27,28,29,30,31,32,33,50,59,60,61,62,63,64,65,66,67],external_solver_nam:[26,27,28,29,30,31,32,33],extract:[10,50,151,159,160,161,162,164,168],extract_input:190,f0:17,f0s_elim:17,f1:17,f2:182,f5:182,f:[0,9,17,55,56,57,58,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,182,190],fabio:182,fact:[151,159,160,161,162,164],factor:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fail:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fals:[0,3,4,6,8,10,11,14,15,16,17,21,23,24,28,31,32,50,51,55,56,57,58,59,60,61,62,63,64,65,66,67,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,157,158,159,160,161,162,163,164,165,166,168,171,172,173,176,177],famili:[114,148,149],family_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],fanci:[0,3,4,15,27,28,84,85,86,87,88,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177,180],fancy_block_ciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fancyblockciph:[0,3,4,15,27,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,160,161,162,164,165,166,167,168,169,170,171,172,173,176,177],fast:182,faster:[45,50,177],feedback:179,feistel_funct:102,ffff0000:22,ffffffffffffffffffffffffffffffff:24,fi_funct:92,field:[4,9,179,182],field_element_matrix_to_integer_matrix:4,fig:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file:[0,24,26,27,28,29,30,31,32,33,48,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_nam:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],file_path:[54,55,56,57,58,77,187],filenam:[79,80,82],fill_area:4,final_activ:[],final_constraint:20,final_deterministic_truncated_xor_differential_constraint:21,final_impossible_constraint:21,final_result:5,final_sign:77,final_transform:90,final_xor_differential_constraint:[22,24],final_xor_differential_first_step_constraint:[23,24],final_xor_linear_constraint:25,finalanalysisreport:82,finalanalysisreportexampl:82,find:[0,22,24,25,26,55,56,57,58,61,62,66,67,74,75,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,163,164,177,182],find_all_deterministic_truncated_xor_differential_trail:21,find_all_xor_differential_trails_with_fixed_weight:[22,24,32,58,61,66,74],find_all_xor_differential_trails_with_weight_at_most:[22,24,32,58,61,66,74],find_all_xor_linear_trails_with_fixed_weight:[25,33,62,67,75,77],find_all_xor_linear_trails_with_weight_at_most:[25,33,62,67,75],find_correct_ord:14,find_correct_order_for_invers:14,find_differential_weight:[22,24],find_good_input_difference_for_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_impossible_properti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],find_input_id_link_bits_equival:14,find_lowest_varied_patterns_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_lowest_varied_patterns_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_lowest_weight_xor_differential_trail:[22,24,32,58,61,63,66,74],find_lowest_weight_xor_linear_trail:[25,33,62,67,75,77],find_min_of_max_xor_differential_between_permutation_and_key_schedul:58,find_missing_bit:[59,64,72],find_one_bitwise_deterministic_truncated_xor_differential_trail:[27,28],find_one_bitwise_impossible_xor_differential_trail:28,find_one_bitwise_impossible_xor_differential_trail_with_fixed_compon:28,find_one_bitwise_impossible_xor_differential_trail_with_fully_automatic_model:28,find_one_deterministic_truncated_xor_differential_trail:21,find_one_wordwise_deterministic_truncated_xor_differential_trail:[30,31],find_one_wordwise_impossible_xor_differential_trail:31,find_one_wordwise_impossible_xor_differential_trail_with_fixed_compon:31,find_one_wordwise_impossible_xor_differential_trail_with_fully_automatic_model:31,find_one_xor_differential_trail:[22,24,32,61,66,74],find_one_xor_differential_trail_with_fixed_weight:[22,24,32,61,66,74],find_one_xor_linear_trail:[25,33,62,67,75],find_one_xor_linear_trail_with_fixed_weight:[25,33,62,67,75],find_possible_number_of_active_sbox:[19,20,21,22,23,24,25],find_sign_for_one_xor_linear_trail:77,find_sign_for_xor_linear_trail:77,finish:[77,80,82],finit:[9,182],finite_state_machine_bit_s:143,fip:125,first:[0,11,21,22,23,24,25,46,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,179],first_add_round_kei:84,first_round:[101,117,118],first_step_solut:24,first_step_solver_nam:24,fix:[0,19,20,21,22,23,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],fix_variables_value_bitwise_deterministic_truncated_xor_differential_constraint:[27,28],fix_variables_value_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],fix_variables_value_deterministic_truncated_xor_differential_constraint:54,fix_variables_value_wordwise_deterministic_truncated_xor_differential_constraint:[30,31],fix_variables_value_xor_linear_constraint:[25,33,62,67,75],fixed_bit:[30,31],fixed_index:183,fixed_valu:[21,22,24,25,27,28,32,33,58,59,61,62,64,66,67,72,74,75,77],fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],fixed_weight:[22,24,25,32,33,58,61,62,66,67,74,75],fixed_word:[30,31],fl_function:92,flag:[0,3,8,10,11,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],flag_chart:[80,82],flatten:[55,56,57,58],flip:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],float_and_lat_valu:[19,20,21,22,23,24,25],floor:[8,177],flow:[59,64,72],fo_funct:92,folder:[80,82],follow:[0,26,48,54,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,180,188],footer:189,foral:[159,160,161,168],forbidden_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forbidden_typ:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],forc:182,form:[13,17,70,76,185],format:[0,3,4,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],format_component_valu:[19,20,21,22,23,24,25],format_differ:[],format_func:77,format_output:94,formula:[70,76],fot:58,found:[0,19,20,21,22,23,24,25,32,33,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],four:143,fr:182,frac:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],frame:141,frame_bit_s:141,free_input:150,free_search:[55,56,57,58],free_search_:[55,56,57,58],from:[0,3,4,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,47,48,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,182,184,185,188,190],from_byt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],fse2014:[151,162,164],fsm:143,fsm_bit_siz:143,fsm_id:143,fsm_input_st:143,fsm_po:143,fsr:[8,179,180],fsr_0_0:179,fsr_1_0:141,fsr_binari:8,fsr_descript:141,fsr_word:8,fss2011:182,ft_b_c_d:113,fu2016:[159,160,161],fu:182,fuer:182,fukai6:[159,160,161],full:28,full_model:[19,20,21,22,23,24,25],fundament:182,further:[59,60,61,62,63],fwgsh2016:[159,160,161,182],g:[0,26,63,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],gaborit:182,gamma:[70,76],gamma_10:70,gamma_7:70,gamma_:70,gamma_i:70,gap:182,gc:124,gecod:[19,20,21,22,23,24,25],gen:96,gener:[0,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182],general_and:54,generalized_and:54,generat:96,generate_all_possible_points_with_n_bit:49,generate_avalanche_dataset:79,generate_avalanche_probability_vector:2,generate_beta_sample_output:5,generate_bit_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_bit_based_vectorized_python_code_str:3,generate_bitmask:185,generate_boolean_polynomial_ring_from_ciph:4,generate_byte_based_vectorized_python_code_str:3,generate_cbc_dataset:79,generate_chart_al:[80,82],generate_chart_for_all_round:82,generate_chart_round:[80,82],generate_correlation_dataset:79,generate_csv_report:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_dict_product_of_sum_from_espresso:51,generate_espresso_input:[46,54],generate_evaluate_c_code_shared_librari:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_expanded_link:179,generate_formatted_input:11,generate_graph_by_differences_posit:2,generate_heatmap_graphs_for_avalanche_test:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generate_high_density_dataset:79,generate_impossible_points_for_xor_between_n_input_bit:49,generate_inequalities_for_large_sbox:[50,168],generate_inputs_prim:2,generate_low_density_dataset:79,generate_matric:96,generate_product_of_sum_from_espresso:[46,54],generate_python_code_str:3,generate_python_code_string_for_continuous_diffusion_analysi:3,generate_random_dataset:79,generate_random_input:2,generate_round_kei:102,generate_sample_from_gf_2_n:190,generate_sbox_inequalities_for_trail_search:50,generate_sbox_sign_lat:168,generate_table_of_solut:24,generate_valid_points_for_truncated_mds_matrix:47,generate_valid_points_for_xor_between_n_input_word:48,generate_valid_points_input_word:48,generate_word_based_c_cod:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_funct:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],generic_functions_continuous_diffusion_analysi:9,generic_functions_vectorized_bit:3,generic_functions_vectorized_byt:[3,11],generic_sign_linear_constraint:[151,161,162,163,164],generic_with_constant_sign_linear_constraint:177,geometri:168,gerault:182,germani:182,get:[0,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_2d_array_element_from_1d_array_index:190,get_all_bit_nam:14,get_all_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_id:[0,28,31,59,64,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,184],get_all_components_with_the_same_input_id_link_and_input_bit_posit:14,get_all_equivalent_bit:14,get_all_inputs_bit_posit:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_all_oper:4,get_available_output_compon:14,get_average_criteria_by_round_input_output:2,get_average_criteria_list_by_output_tag:2,get_bit_based_c_cod:[153,154,157,158,165,166,168,171,172,173,176],get_bit_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_bit_bind:77,get_bodi:189,get_byte_based_vectorized_python_cod:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],get_ci:[125,126,127,190],get_ciph:187,get_cipher_compon:14,get_cipher_components_for_components_valu:[],get_cipher_input_for_components_valu:[],get_cipher_output_component_bit_based_c_cod:3,get_cipher_output_word_based_c_cod:3,get_cipher_outputs_for_cbc_dataset:79,get_cipher_outputs_for_correlation_dataset:79,get_cipher_outputs_for_density_dataset:79,get_cipher_typ:187,get_command_for_solver_process:[19,20,21,22,23,24,25],get_component_from_id:[0,4,14,26,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,169,170,171,172,173,176,177,183,184],get_component_hex_valu:76,get_component_pair:178,get_component_valu:[],get_component_value_weight:[],get_components_id:183,get_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_current_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_ddt_with_undisturbed_transit:168,get_dictionary_that_contains_inequalities_for_large_sbox:46,get_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,get_dictionary_that_contains_inequalities_for_small_sbox:50,get_differential_dataset:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_equivalent_input_bit_from_output_bit:14,get_final_input_posit:179,get_final_output:[],get_fixed_variables_for_all_xor_differential_trails_with_weight_at_most:32,get_fixed_variables_for_all_xor_linear_trails_with_weight_at_most:33,get_foot:189,get_graph_represent:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],get_hamming_weight_funct:168,get_head:189,get_independent_input_output_vari:26,get_input_bit_positions_latin_d:137,get_input_output_vari:26,get_inputs_paramet:190,get_intermediate_output_component_bit_based_c_cod:3,get_intermediate_output_nam:2,get_intermediate_output_word_based_c_cod:3,get_inverse_matrix_in_integer_represent:4,get_ith_key128:94,get_ith_key192:94,get_ith_key256:94,get_ith_word:190,get_k_th_bit:190,get_key_schedule_component_id:14,get_keystream_bit_len:146,get_lat_valu:25,get_library_path:77,get_low_density_sequ:79,get_milp_constraints_from_inequ:177,get_mix_column_all_input:[19,20,21,22,23,24,25],get_mix_column_precomput:9,get_model:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_most_recent_intermediate_output:14,get_neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_new_xor_input_links_and_posit:[23,24],get_number_of_compon:183,get_number_of_components_in_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_number_of_input:3,get_number_of_rounds_from:190,get_number_of_steps_from:104,get_numbers_of_round:[90,94],get_operand:74,get_output_bit_size_from_id:179,get_output_compon:14,get_padding_component_bit_based_c_cod:3,get_partial_ciph:[0,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_previous_output_bit_id:77,get_probability_vars_from_key_schedul:58,get_probability_vars_from_permut:58,get_related_key_scenario_format_for_fixed_valu:77,get_relative_posit:14,get_round_from_component_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,183,184],get_rounds_bit_based_c_cod:3,get_rounds_word_based_c_cod:3,get_sbox_precomput:9,get_single_key_scenario_format_for_fixed_valu:[27,28,30,31,32,77],get_sizes_of_components_by_typ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],get_solutions_dictionaries_with_build_tim:24,get_templ:189,get_total_weight:[19,20,21,22,23,24,25],get_transformed_xor_input_links_and_posit:177,get_transitions_for_single_output_bit:51,get_unique_links_inform:179,get_valid_points_for_wordwise_xor:48,get_word_based_c_cod:[153,154,167,168,169,170,174,175],get_word_oper:[53,68],get_word_operation_component_bit_based_c_cod:3,get_word_operation_final_xor_linear_constraint:25,get_word_operation_sign:[151,159,160,161,162,163,164,167,169,170,174,175,177],get_word_operation_word_based_c_cod:3,get_word_operation_xor_differential_constraint:[22,24],get_xor_all_input:[23,24],get_xor_probability_constraint:[71,72,73,74,75],getfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],gf2nmatrix:8,gf:[16,17,182],gf_2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gf_number_sampl:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],gift:[163,164,180],gift_permut:[120,163,164],gift_sbox_permut:121,giftpermut:[120,163,164],giftsboxpermut:121,gimli:180,gimli_permut:122,gimli_sbox_permut:123,gimlipermut:[122,123],gimlisboxpermut:123,gist:50,github:[30,31,50,95,96,159,160,161],give:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],given:[0,4,13,19,20,21,22,23,24,25,45,50,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],global:96,glpk:[26,27,28,29,30,31,32,33],glucos:[63,70],glucose_sag:63,go2019:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],gohr_resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],good:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],goubin:182,gov:[82,125],gr:14,grain:[96,180],grain_cor:124,grain_core_permut:124,grain_ssg:96,graincorepermut:124,graph:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170,180,182],graph_represent:[14,104,108,114,124],graph_representation_of_the_ciph:77,graphrepresentationcr:14,greater:[32,33,58,99],greedi:50,grobner:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],group:190,group_by_kei:190,group_list_by_kei:190,grover:182,gtm:182,guess:[0,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],guidelin:180,guo:182,gurobi:26,h:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],h_function:108,ha:[50,55,56,57,58,77,112,113,114,148,149,179,189],haemer:182,hal:182,half:[0,28,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],half_like_round_funct:[],half_like_round_function_latin_d:137,ham:[0,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hambitz:182,handl:[59,60,61,62,63,70,112,113,114,115,143],happen:8,hardw:182,hardwar:182,has_maximal_branch_numb:4,hash_funct:[110,111,112,113,114,115],hashimoto:182,have:[0,22,24,25,32,33,61,62,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],he2002:182,he:58,header:189,heatmap:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],heavili:[151,159,160,161,162,164],hei:182,heidelberg:182,helper:180,henc:50,heurist:180,hex:[8,10,11,143,148,149,185],hex_str:8,hexadecim:77,hfe:182,hidden:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hidden_lay:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],high:[79,80,82,182,190],high_dens:79,higher:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],highest_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],hight:180,hight_block_ciph:90,hightblockciph:90,him:189,homepag:182,homogen:182,host:70,how:[0,8,9,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],howard:182,howev:177,hp2003:182,hrepresent:168,html:[188,189],http:[0,28,30,31,33,46,47,48,50,51,54,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],hu:182,huang:182,huffman:182,hull:[45,50],hw:[70,76],hw_10:70,hw_6:70,hw_and_0_8_0:[151,162,164],hw_and_0_8_0_o:[151,162,164],hw_and_0_8_10:[151,162,164],hw_and_0_8_10_o:[151,162,164],hw_and_0_8_11:[151,162,164],hw_and_0_8_11_o:[151,162,164],hw_and_0_8_1:[151,162,164],hw_and_0_8_1_o:[151,162,164],hw_bit_id:70,hw_i:70,hw_modadd_0_1_0:[159,160,161],hw_modadd_0_1_0_o:[159,160,161],hw_modadd_0_1_14_o:[159,160,161],hw_modadd_0_1_15_o:[159,160,161],hw_modadd_0_1_1:[159,160,161],hw_modadd_0_1_1_o:[159,160,161],hw_modadd_0_1_29:[159,160,161],hw_modadd_0_1_2_o:[159,160,161],hw_modadd_0_1_30:[159,160,161],hw_modadd_0_1_30_o:[159,160,161],hw_modadd_0_1_31:[159,160,161],hw_modadd_0_1_31_o:[159,160,161],hw_modadd_2_7_14:[59,60,61,62,63,64,65,66,67],hw_modadd_2_7_15:[59,60,61,62,63,64,65,66,67],hw_sbox_0_2_0:168,hw_sbox_0_2_0_o:168,hw_sbox_0_2_1:168,hw_sbox_0_2_1_o:168,hw_sbox_0_2_2:168,hw_sbox_0_2_2_o:168,hw_sbox_0_2_3:168,hw_sbox_0_2_3_o:168,hw_sbox_0_5_0:168,hw_sbox_0_5_1:168,hw_sbox_0_5_2:168,hw_sbox_0_5_3:168,hybrid:182,i1:54,i2:54,i:[0,3,9,11,17,27,28,32,33,48,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,168,175,177,179,182,190],i_0:70,i_1:70,i_3:70,i_4:70,iacr:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182],icalp:182,icount:[131,132],icounter_upd:[131,132],id1:14,id2:14,id:[0,4,13,27,28,31,55,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,183,184,190],id_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],id_link:181,id_str:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,190],id_tupl:[27,28],ident:[0,3,15,84,85,86,87,88,89,90,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],identifi:70,identity_block_ciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identity_block_cipher_cr:14,identity_block_cipher_p32_k32_o32_r1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],identityblockciph:[0,3,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],identityblockcipherencrypt:91,ieee:182,iff:54,ignor:[55,56,57,58],imag:82,impact:182,implement:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,176,177,189,190],implic:76,imposs:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],impossible_differential_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],impossible_xor_differenti:[19,20,21,22,23,24,25],improv:[55,56,57,58,182],in_0:70,in_1:70,in_id:70,in_shift:70,includ:[0,13,27,28,30,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incompat:[28,31],inconsist:[23,24],inconsistent_var:28,increas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],increment:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],incrementing_count:5,inde:177,index:[0,2,3,10,11,14,15,30,31,46,47,48,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,179,180,183,190],index_occurr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],index_of_specific_input:2,indexes_of_values_in_col:157,indic:[0,8,9,20,21,22,23,24,25,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],indomain_min:[22,24,25],industri:182,ineq:168,inequ:[29,54,70,76,159,160,161,168,177,180],infeas:50,infer:177,inform:[59,60,61,62,63,77,168,179,182],informat:182,informatik:182,init_constraint:58,init_dictionary_test_result:2,init_final_result_structur:5,init_input:[90,94],init_input_bit:5,init_latin_dances_ciph:137,init_model_in_sage_milp_class:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],init_st:[],init_state_latin_d:137,init_state_plaintext:144,initi:[0,26,27,28,29,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_filling_lfsr_fsm:145,initial_popul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],initial_round_elements_definit:103,initial_transform:90,initialise_model:[19,20,21,22,23,24,25],initialise_spider_plot:4,initialization_vector_bit_s:146,inject:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inp1:[151,159],inp2:[151,159],inplen:159,input0_id:159,input1_id:159,input:[0,2,3,4,6,8,9,10,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,180,182,184,185,187,188,190],input_1:[54,159,160,161],input_2:[54,159,160,161],input_bit:[0,5,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],input_bit_len:168,input_bit_posit:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_bit_positions_1:[19,20,21,22,23,24,25],input_bit_positions_list:190,input_bit_positions_lst:94,input_bit_s:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,181,184],input_bits_list:14,input_constraint:20,input_data_exampl:[80,82],input_deterministic_truncated_xor_differential_constraint:21,input_diff:2,input_differ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_fil:[80,82],input_file_format:82,input_file_nam:70,input_file_path:[19,20,21,22,23,24,25],input_id:[27,28,99,179],input_id_link:[0,14,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184],input_id_link_1:[19,20,21,22,23,24,25],input_id_tupl:[27,28],input_ids_list:190,input_index:[79,80,82],input_len:177,input_length:[8,19,20,21,22,23,24,25,159,160,161],input_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_lst:9,input_matrix:8,input_nam:2,input_name_1:[19,20,21,22,23,24,25,158],input_name_2:[19,20,21,22,23,24,25,158],input_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],input_plaintext:137,input_po:99,input_s:[0,8,9,10,11,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],input_state_of_compon:144,input_tag:2,input_tag_:5,input_var:[33,151,157,159,160,161,162,164,168,177],input_var_list:54,input_vector:8,input_wordwise_deterministic_truncated_xor_differential_constraint:[21,30,31],input_xor_differential_constraint:[22,24],input_xor_differential_first_step_constraint:[23,24],input_xor_linear_constraint:25,inputs0:[],inputs_bit_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],inputs_bit_size_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_dens:79,inputs_fix:79,inputs_id:[32,33,159,190],inputs_ids_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_list:190,inputs_po:190,inputs_size_to_dict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],inputs_tag:5,inria:182,insert:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],insid:[55,56,57,58,77,112,179],inspect:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],instal:[26,46,51,59,60,61,62,63,64,65,66,67,71,82],instanc:[3,4,16,26,27,28,29,30,31,32,33,55,56,57,58,86,90,93,94,95,96,97,98,100,102,103,104,105,106,107,108,109,110,111,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,144,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182],instanti:96,instantiate_matrix:96,instantiate_matrix_over_correct_field:4,instead:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],instruct:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],int_search:[22,24,25],int_to_byte_arrai:8,int_to_bytearrai:[179,186],int_to_poli:[4,190],int_to_wordlist:186,int_valu:[59,64,72,77],integ:[0,4,8,9,10,11,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168,177,179,180,184,188,190],integer_to_bit_list:[19,20,21,22,23,24,25,27,28,30,31,33,59,61,62,64,66,67,71,72,73,74,75,77],integer_to_np:[],integer_valu:[4,8,190],integer_vari:[26,27,28,29,30,31,32,33,151,159,160,161,162,164,168],integr:26,intermedi:[0,3,21,55,56,57,58,61,66,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,177,179,180],intermediate_compon:156,intermediate_output:[0,2,3,6,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],intermediate_output_0_0:[102,179],intermediate_output_0_0_input:148,intermediate_output_0_0_output:148,intermediate_output_0_1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_1_input:149,intermediate_output_0_1_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],intermediate_output_0_35:[30,31,152,156],intermediate_output_0_35_act:[152,156],intermediate_output_0_35_valu:[152,156],intermediate_output_0_37:31,intermediate_output_0_5:21,intermediate_output_0_5_input:148,intermediate_output_0_5_invers:21,intermediate_output_0_5_output:148,intermediate_output_0_6:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,156],intermediate_output_0_6_0_i:[77,156],intermediate_output_0_6_0_o:156,intermediate_output_0_6_10_i:77,intermediate_output_0_6_11_i:77,intermediate_output_0_6_1_i:156,intermediate_output_0_6_1_o:156,intermediate_output_0_6_29_i:156,intermediate_output_0_6_2_i:156,intermediate_output_0_6_2_o:156,intermediate_output_0_6_30_i:156,intermediate_output_0_6_31_i:156,intermediate_output_0_6_7_i:77,intermediate_output_0_6_8_i:77,intermediate_output_0_6_9_i:77,intermediate_output_0_6_i:156,intermediate_output_0_6_input:149,intermediate_output_0_6_o:156,intermediate_output_0_6_output:149,intermediate_output_0_71:28,intermediate_output_1_0_input:148,intermediate_output_1_0_output:148,intermediate_output_1_1:86,intermediate_output_1_1_input:149,intermediate_output_1_1_output:149,intermediate_output_1_5_input:148,intermediate_output_1_5_output:148,intermediate_output_1_6_input:149,intermediate_output_1_6_output:149,intermediate_output_1_71:28,intermediate_output_21_11:[59,64,72],intermediate_output_2_71:28,intermediate_output_31_15:[59,60,61,62,63,64,65,66,67],intermediate_output_5_12:28,intermediate_output_arc:77,intermediate_output_cod:3,intermediate_output_nam:[2,26,27,28,29,30,31,32,33],intermediate_solutions_:[55,56,57,58],intermediate_var:156,intermediateoutput:156,intern:[26,27,28,29,30,31,32,33,59,60,61,62,63,64,65,66,67,70,115,182],internal_st:[90,94],interrupt:[55,56,57,58],interv:[22,24,25,61,62,66,67,74,75],introduc:[59,60,61,62],introduct:182,invers:[0,4,21,63,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],inverse_compon:14,invert:[0,14,21,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,139,140,141,142,143,144,145,146,147,148,149,180],involv:[11,177],iota_definit:[125,126,127,138,139,140],ip:182,ipm:182,ir:182,irreduc:8,irreducible_polynomial_int_repr:9,is_addit:17,is_algebraically_secur:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_andrx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_bit_adjacent_to_list_of_bit:14,is_bit_contained_in:14,is_boolean_polynomial_r:[15,16],is_component_input:183,is_continuous_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_continuous_neutrality_measur:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_diffusion_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_forbidden:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_id_equal_to:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],is_intermedi:152,is_intersection_of_input_id_links_nul:14,is_linear_layer_permut:179,is_md:4,is_output:2,is_output_bits_updated_equivalent_to_input_bit:14,is_possibly_invertible_compon:14,is_power_of_2_word_bas:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,183,184],is_shift_arx:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],is_single_kei:32,is_spn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],isfil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],issu:182,ite:[76,175],iter:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],itertool:54,its:[0,4,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,182],itself:[45,50,91],iv:[142,145,146,147],iv_bit_s:[142,145,146,147],j:[19,20,21,22,23,24,25,159,160,161,177,182],jacekpomyka:182,jerzi:182,join:[54,77],joint:182,josef:182,journal:182,joux:182,just:[112,113,114,115],jv2018:182,k0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],k:[0,9,26,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177,182,190],k_4_128:104,k_4_64:104,k_7:70,k_8_256:104,kaczorowski:182,karmakar:182,kaski:182,kasumi:180,kasumi_block_ciph:92,kasumiblockciph:92,keccak:[8,179,180],keccak_invertible_permut:125,keccak_permut:126,keccak_sbox_permut:127,keccakinvertiblepermut:125,keccakpermut:126,keccaksboxpermut:127,keep:[50,179],keep_key_schedul:[0,14,28,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],kei:[0,4,11,19,20,21,22,23,24,25,27,28,30,31,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,175,177,179,180,182,190],kem:182,kept:[],kera:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_0:[159,175],key_0_2_0_o:77,key_0_2_10_o:77,key_0_2_11_o:77,key_12:[151,162,164],key_13:[151,162,164],key_1:[159,160,161,175],key_22:[151,162,164],key_23:[151,162,164],key_29:[159,160,161],key_2:[159,160,161,175],key_30:[159,160,161],key_31:[159,160,161],key_32:[167,170],key_33:[167,170],key_39:[167,170],key_40:[167,170],key_48:177,key_49:177,key_61:177,key_62:[71,72,73,74,75,177],key_62_o:75,key_63:[71,72,73,74,75,177],key_63_o:75,key_91:175,key_95:175,key_act:[21,177],key_add:97,key_backward:28,key_bit_s:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,159,160,161,162,164,167,168,169,170,177,190],key_der:92,key_expans:101,key_id:[95,97],key_initi:[103,105],key_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_length:108,key_loading_to_lfsr:147,key_o:25,key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],key_rot:84,key_sboxes_compon:84,key_schedul:[103,120,121],key_schedule_compon:14,key_schedule_component_id:14,key_siz:101,key_st:147,key_stat:85,key_stream:[146,147],key_valu:[21,177],key_y0:[55,56,57,58],keyerror:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],keysiz:96,keystream:[141,143,145,146],keystream_bit_len:[142,143,146],keystream_word_s:145,ki_id:92,ki_posit:92,kiltz:182,kind:26,kipni:182,kissat:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],knudsen:182,kpg1999:182,ks2:145,ks:[142,143,146,147],ks_32:145,kt:114,kyber:182,l:[11,26,76,108,157,165,166,171,172,173,182,188],l_bit:108,la:182,label:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lafourcad:182,lambda:[0,17,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lambda_2:104,lambda_4:104,lambda_valu:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],lane_num:190,lane_s:190,lang:182,languag:182,larg:[50,168,180],largest_round_criterion_not_satisfi:2,last:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,80,82,86,179],lat:[25,151],lat_sbox_0_5:168,lat_tabl:25,later:[45,50],latex:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,189],latexbuild:189,lattic:182,layer:[0,4,8,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,165,166,171,172,173,176,179,180],layer_and_lane_initi:190,lblock:180,lblock_block_ciph:93,lblockblockciph:93,lc:17,ldc_tutori:182,lea:180,lea_block_ciph:94,leablockciph:94,leander:182,learn:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],least:[32,33,61,66,70,71,77],lectur:182,left:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],left_rotations_list:94,left_shift_amount:[100,106,109],left_var:70,leibniz:182,len:[0,4,8,9,10,17,22,23,24,25,32,33,61,62,66,67,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,168,188],len_keystream_word:147,length:[0,3,8,77,82,84,85,86,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,190],lepoint:182,less:[87,88,92,108,168,190],level:[55,56,57,58,61,66],lfsr:179,lfsr_input_st:143,lfsr_s_high_16bit:147,lfsr_s_low_16bit:147,lfsr_state:143,lfsr_state_bit_s:143,lfsr_state_s:143,lfsr_with_initialization_mod:147,lib:[71,72,73,74,75,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],librari:[0,26,27,28,29,30,31,32,33,63,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],library_path:77,licens:26,lightweight:182,like:[70,77,112,113,114],limit:58,lin1999:182,line:[54,55,80,82],linear:[0,4,9,10,11,29,45,50,54,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,158,159,160,161,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],linear_lay:[4,8,9,95,130,179],linear_layer_0_0:[95,179],linear_layer_0_17_0_i:[157,165,166,171,172,173],linear_layer_0_17_1_i:[157,165,166,171,172,173],linear_layer_0_17_62:[157,158,165,166,171,172,173,176],linear_layer_0_17_62_o:[157,165,166,171,172,173],linear_layer_0_17_63:[157,158,165,166,171,172,173,176],linear_layer_0_17_63_o:[157,165,166,171,172,173],linear_layer_0_6:[157,165,166,171,172,173],linear_layer_0_6_0:[157,165,166,171,172,173],linear_layer_0_6_0_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_17_o:[157,165,166,171,172,173],linear_layer_0_6_18_o:[157,165,166,171,172,173],linear_layer_0_6_19_o:[157,165,166,171,172,173],linear_layer_0_6_1:[157,165,166,171,172,173],linear_layer_0_6_1_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_20_o:[157,165,166,171,172,173],linear_layer_0_6_21:[157,165,166,171,172,173],linear_layer_0_6_21_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_22:[157,165,166,171,172,173],linear_layer_0_6_22_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_23:[157,165,166,171,172,173],linear_layer_0_6_23_o:[157,158,165,166,171,172,173,176],linear_layer_0_6_2:[157,165,166,171,172,173],linear_layer_0_6_2_i:[157,158,165,166,171,172,173,176],linear_layer_0_6_3_i:[157,165,166,171,172,173],linear_layer_0_6_4_i:[157,165,166,171,172,173],linear_layer_0_6_5_i:[157,165,166,171,172,173],linear_layer_0_6_6_i:[157,165,166,171,172,173],linear_layer_0_6_i:[157,165,166,171,172,173],linear_layer_0_6_o:[157,165,166,171,172,173],linear_layer_0_6_x12:[157,165,166,171,172,173],linear_layer_0_6_x14:[157,165,166,171,172,173],linear_layer_0_6_x15:[157,165,166,171,172,173],linear_layer_0_6_x16:[157,165,166,171,172,173],linear_layer_0_6_x18:[157,165,166,171,172,173],linear_layer_0_6_x19:[157,165,166,171,172,173],linear_layer_0_6_x23:[157,165,166,171,172,173],linear_layer_0_6_x3:[157,165,166,171,172,173],linear_layer_0_6_x6:[157,165,166,171,172,173],linear_layer_0_6_x8:[157,165,166,171,172,173],linear_layer_0_6_x9:[157,165,166,171,172,173],linear_layer_0_6_y0:[157,165,166,171,172,173],linear_layer_compon:[157,158,165,166,171,172,173,176],linear_layer_continuous_diffusion_analysi:9,linear_layer_funct:150,linear_layer_properti:4,linear_layer_rot:147,linear_layer_to_binary_matrix:150,linear_matrix:9,linear_transform_l1:147,linear_transform_l2:147,linearlay:[157,158,165,166,171,172,173],link:[27,28,51,58,168,179,182,188],link_binary_tuples_to_integer_vari:[27,28],linked_compon:156,lint:182,lipic:182,lipmaa:[70,76,182],list1:14,list2:14,list:[0,3,4,8,9,10,11,13,14,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,182,188,190],list_length:[59,64,72,77],list_of_bit_nam:14,list_of_test_vectors_input:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_test_vectors_output:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],list_of_xor_compon:[23,24,158],list_siz:3,list_specific_input:150,liter:[59,60,61,62,63],littl:[19,20,21,22,23,24,25,77,185,190],liu:182,lm2001:[159,160,161,182],lm:17,lnc:182,lo:147,load:95,load_const:95,load_paramet:187,local:82,log2:177,logarithm:[33,62,67,75],logic:[46,51,180],logo:189,lokshtanov:182,longer:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],longest:[61,62,66,67,74,75],look:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],lookup:[9,148,149],lookup_t:[8,9],lookup_table_2:9,lookup_table_3:9,loop:[8,24],lor:186,loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],low:[79,80,82,190],low_dens:79,lower:[32,33,58,61,62,66,67,74,75],lowest:[22,24,25,27,28,30,31,32,33,58,61,62,66,67,74,75],lowmc:180,lowmc_block_ciph:95,lowmc_constants_p:96,lowmc_generate_matric:95,lowmcblockciph:95,lp:[26,27,28,29,30,31,32,33],lp_sage:63,lpn:182,lpt:182,lrot:[167,170],lsb:77,lsfr:96,lshift:[169,175],lshift_by_variable_amount:175,lst:190,lst_by_id:190,lst_exampl:190,lst_x:190,lst_y:190,luck:182,lwe:182,lwr2016:[159,160,161,182],lwr:182,lx:17,ly:[17,22,24,25,61,62,66,67,74,75],lyubashevski:182,lz:17,m0:[110,111],m1:[110,111],m:[0,10,27,28,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,179,182],m_function:99,m_t:179,mai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],main:96,mainli:91,majority_funct:99,make:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],make_cipher_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,187],make_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],make_resnet:[],makedir:82,mani:[0,8,9,70,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],manner:177,manual:180,map:[11,95,180],mari:182,mask:[70,76,177],mask_in_0:70,mask_in_1:70,mask_out:70,master:[30,31,95,96,108,143,159,160,161],master_kei:90,mat:[48,49,96],match:77,materi:[30,31],math:182,mathemat:182,mathsat:[63,71],mathsat_pars:71,matplotlib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],matric:[10,11,95,99,158,176,180],matrix:[0,4,8,9,10,11,45,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],max_degree_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],max_number_of_carri:58,max_number_of_nonlinear_carri:58,max_pattern_valu:[47,48],max_weight:[22,24,25,32,33,58,61,62,66,67,74,75],maxim:96,maximum:[32,33],mb:77,mc_matrix:4,mceliec:182,md5:180,md5_hash_funct:112,md5_step:112,md5hashfunct:112,md:[4,158,176,180],mdla:[30,31],mean:[27,28,79,80,82],meant:89,measur:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],memori:[19,20,21,22,23,24,25,77],memory_keyword:[],memory_megabyt:[21,61,62,66,67,71,72,73,74,75,77],mention:168,merg:190,merge_bit:8,merging_list_of_list:190,messag:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],method:[0,3,9,21,22,24,25,32,33,46,54,55,59,60,61,62,63,64,66,67,70,71,72,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,176,177,182],metric:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],meurer:182,mht2013:182,middle_round:[28,31],midori:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176,180],midori_block_ciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],midoriblockciph:[0,4,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176],might:[45,50],milp:[0,45,50,54,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182],milp_and:54,milp_bitwise_deterministic_truncated_xor_differential_binary_constraint:[157,158,159,160,161,165,166,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_constraint:[151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_deterministic_truncated_xor_differential_model:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milp_bitwise_impossible_xor_differential_model:28,milp_cipher_model:29,milp_constraint:[152,156,157,158,163,165,166,167,169,170,171,172,173,176,177],milp_deterministic_truncated_xor_differential_model:[],milp_deterministic_truncated_xor_differential_trail_constraint:[],milp_els:54,milp_eq:54,milp_generalized_and:54,milp_generalized_xor:54,milp_geq:54,milp_great:54,milp_if_elif_els:54,milp_if_then:54,milp_if_then_els:54,milp_large_xor_differential_probability_constraint:168,milp_large_xor_linear_probability_constraint:168,milp_large_xor_probability_constraint_for_inequ:168,milp_leq:54,milp_less:54,milp_model:[26,27,28,29,30,31,32,33,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_n_window_heurist:161,milp_neq:54,milp_or:54,milp_small_xor_differential_probability_constraint:168,milp_small_xor_linear_probability_constraint:168,milp_speck:[159,160,161],milp_twoterms_xor_linear_probability_constraint:[151,162,164],milp_undisturbed_bits_bitwise_deterministic_truncated_xor_differential_constraint:168,milp_wordwise_deterministic_truncated_xor_differential_constraint:[152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_model:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milp_wordwise_deterministic_truncated_xor_differential_sequential_constraint:177,milp_wordwise_deterministic_truncated_xor_differential_simple_constraint:[168,177],milp_wordwise_impossible_xor_differential_model:31,milp_xor:54,milp_xor_differential_model:[26,27,28,29,30,31,32,33],milp_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_constraint:177,milp_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milp_xor_linear_model:[33,77,156],milp_xor_trunc:54,milp_xor_truncated_wordwis:54,milpbitwisedeterministictruncatedxordifferentialmodel:[27,28,151,152,154,156,157,158,159,160,161,163,165,166,167,168,169,170,171,172,173,176,177],milpbitwiseimpossiblexordifferentialmodel:28,milpciphermodel:29,milpdeterministictruncatedxordifferentialmodel:[],milpmodel:[26,27,28,29,30,31,32,33,54,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],milpwordwisedeterministictruncatedxordifferentialmodel:[30,31,152,154,156,157,158,165,166,167,168,169,170,171,172,173,176,177],milpwordwiseimpossiblexordifferentialmodel:31,milpxordifferentialmodel:[26,27,28,29,30,31,32,33],milpxorlinearmodel:[33,77,156],min_all_prob:58,min_weight:[22,24,25,32,33,58,61,62,66,67,74,75],mind:182,minim:[22,23,24,25,45,46,50,51,180],minimum:[23,24,46,182],minisat:[63,70],minizinc:[24,152,154,156,159,160,161,167,169,170,175,177],minizinc_cipher_model:56,minizinc_constraint:[152,156,167,169,170,177],minizinc_deterministic_truncated_xor_differential_model:57,minizinc_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],minizinc_model:[55,56,57,58,154,159,160,161,167,169,170,175,177],minizinc_xor_differential_model:[55,56,57,58,154,159,160,161],minizinc_xor_differential_propagation_constraint:[152,154,156,159,160,161,167,169,170,175,177],minizincciphermodel:56,minizincdeterministictruncatedxordifferentialmodel:57,minizincmodel:[55,56,57,58,167,169,170,175,177],minizincxordifferentialmodel:[55,56,57,58,154,159,160,161],minor:4,minrank:182,minus1_power_x_:9,minus1_power_x_s_2:9,minus1_power_x_s_3:9,minus1_power_x_t:9,minus_pre_modsub_0_7_1:160,mip:[32,33,54,161],mipvari:[27,28,30,31,151,159,160,161,162,164,168],miura:182,mix:[8,9,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,107,176,179,180],mix_column:[9,11,19,20,21,22,23,24,25,97,158,176,179],mix_column_0_0:179,mix_column_0_19:4,mix_column_0_1:4,mix_column_0_20:[4,158,176],mix_column_0_20_34:[158,176],mix_column_0_20_35:[158,176],mix_column_0_20_36:[158,176],mix_column_0_20_37:[158,176],mix_column_0_20_38:[158,176],mix_column_0_20_39:[158,176],mix_column_0_20_40:[158,176],mix_column_0_20_41:[158,176],mix_column_0_20_42:[158,176],mix_column_0_20_43:[158,176],mix_column_0_20_44:[158,176],mix_column_0_20_45:[158,176],mix_column_0_20_word_0_class_bit_0:[157,165,166,171,172,173],mix_column_0_20_word_0_class_bit_1:[157,165,166,171,172,173],mix_column_0_20_x0:[158,176],mix_column_0_20_x1:[158,176],mix_column_0_20_x2:[158,176],mix_column_0_20_y0:[158,176],mix_column_0_20_y1:[158,176],mix_column_0_20_y2:[158,176],mix_column_0_20_y61:[158,176],mix_column_0_20_y62:[158,176],mix_column_0_20_y63:[158,176],mix_column_0_21:[4,31,158,176],mix_column_0_21_14:[157,165,166,171,172,173],mix_column_0_21_15:[157,165,166,171,172,173],mix_column_0_21_30:[158,176],mix_column_0_21_31:[158,176],mix_column_0_21_i:[158,176],mix_column_0_21_o:[158,176],mix_column_0_21_word_3_class_bit_0:[158,176],mix_column_0_21_word_3_class_bit_1:[158,176],mix_column_0_23_0:[158,176],mix_column_0_23_0_i:[158,176],mix_column_0_23_14:[158,176],mix_column_0_23_14_o:[158,176],mix_column_0_23_15:[158,176],mix_column_0_23_15_o:[158,176],mix_column_0_23_1:[158,176],mix_column_0_23_1_i:[158,176],mix_column_0_23_2:[158,176],mix_column_0_23_2_i:[158,176],mix_column_0_31:4,mix_column_0_31_0_i:[158,176],mix_column_0_31_1_i:[158,176],mix_column_0_31_30_o:[158,176],mix_column_0_31_31_o:[158,176],mix_column_1_20:4,mix_column_compon:[4,9,84,158,176],mix_column_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],mix_column_gener:8,mix_column_generalized_bool_func:8,mix_column_generalized_continuous_diffusion_analysi:9,mix_column_matrix:9,mix_column_truncated_table_mix_column_0_21:[19,20,21,22,23,24,25,158,176],mixcolumn:[10,158,176],mmt2011:182,mo2015:182,mod:[17,157,158,159,160,161,163,165,166,171,172,173,176,177],mod_addition_polynomi:17,mod_binary_operation_polynomi:17,mod_subtraction_polynomi:17,modadd:[4,8,11,160,161,179,180],modadd_0_0:[90,100,110,179],modadd_0_1:[21,159,160,161,177,179],modadd_0_1_0:[159,160,161,177],modadd_0_1_0_i:[159,160,161],modadd_0_1_0_o:[159,160,161],modadd_0_1_13:[159,177],modadd_0_1_14:[159,160,161,177],modadd_0_1_14_o:[159,160,161],modadd_0_1_15:[159,160,161,177],modadd_0_1_15_class_bit_0:[159,160,161],modadd_0_1_15_class_bit_1:[159,160,161],modadd_0_1_15_o:[159,160,161],modadd_0_1_1:[159,160,161,177],modadd_0_1_1_i:[159,160,161],modadd_0_1_1_o:[159,160,161],modadd_0_1_29:[159,160,161],modadd_0_1_2:[159,160,161],modadd_0_1_2_i:[159,160,161],modadd_0_1_30:[159,160,161],modadd_0_1_30_i:[159,160,161],modadd_0_1_30_o:[159,160,161],modadd_0_1_31:[159,160,161],modadd_0_1_31_i:[159,160,161],modadd_0_1_31_o:[159,160,161],modadd_0_1_32_i:[159,160,161],modadd_0_1_33_i:[159,160,161],modadd_0_1_62_i:[159,160,161],modadd_0_1_63_i:[159,160,161],modadd_0_1_i:[159,160,161],modadd_0_1_o:[159,160,161],modadd_0_4:160,modadd_0_4_30:160,modadd_0_4_31:160,modadd_1_10:4,modadd_1_9:[4,159],modadd_1_9_c0_0:159,modadd_1_9_c1_4:159,modadd_1_9_c1_5:159,modadd_1_9_o0_0:159,modadd_1_9_o0_4:159,modadd_1_9_o0_5:159,modadd_1_9_x0:[159,160,161],modadd_1_9_x10:[159,160,161],modadd_1_9_x11:[159,160,161],modadd_1_9_x16:159,modadd_1_9_x17:159,modadd_1_9_x1:[159,160,161],modadd_1_9_x2:[159,160,161],modadd_1_9_x3:[159,160,161],modadd_1_9_x4:[159,160,161],modadd_1_9_x5:[159,160,161],modadd_1_9_x6:[159,160,161],modadd_1_9_x7:[159,160,161],modadd_1_9_x8:[159,160,161],modadd_1_9_x9:[159,160,161],modadd_1_9_y0_0:[159,160,161],modadd_1_9_y1_0:[159,160,161],modadd_1_9_y2_0:[159,160,161],modadd_1_9_y3_0:[159,160,161],modadd_1_9_y4_0:[159,160,161],modadd_1_9_y5:159,modadd_1_9_y5_0:[159,160,161],modadd_as_boolean_funct:4,modadd_compon:[4,159,160,161],modadd_continuous_diffusion_analysi:9,modadd_continuous_diffusion_analysis_two_word:9,modadd_linear:[159,160,161],model:[0,13,16,17,47,48,50,51,54,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],model_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],model_fil:77,model_to_writ:77,model_typ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],model_vari:[27,28,30,31,54],modifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],modsub:[8,11,159,161,179,180],modsub_0_0:179,modsub_0_7:160,modsub_0_7_30:160,modsub_0_7_31:160,modsub_compon:160,modsub_continuous_diffusion_analysi:9,modul:[26,46,50,51,63,70,112,113,114,182],modular:[9,10,70,76,159,160,180],modular_addition_word:[159,160,161],modular_compon:[159,160,161],modulo:2,modulu:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,179],monomi:[8,179],more:[0,9,22,24,25,33,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,188],moriai:[70,76,182],most:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],moving_index:183,mq:182,msb:[26,54,63,77,177],mul_tabl:[10,11],mulalpha:145,multi:180,multi_input_non_linear_logical_operator_compon:[151,164],multiinputnonlinearlogicaloper:[151,162,164],multipl:[0,4,8,10,11,14,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],multivari:182,mulx:145,mulxpow:145,mun:182,mur2020:[0,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],murilo:182,must:[0,8,9,19,20,21,22,23,24,25,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],my_dataset:190,mzn:180,mzn_shift_by_variable_amount_constraint:175,n:[0,3,8,10,17,23,24,50,54,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,175,177,180,182,185,188,190],n_sbox:95,n_window_heurist:[26,27,28,29,30,31,32,33],name:[0,10,11,15,19,20,21,22,23,24,25,26,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],name_fil:190,narray1d:177,nb_occ:2,nb_sampl:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ndarrai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nearest:182,necessari:[45,50],necessarili:[32,33],need:[3,19,20,21,22,23,24,25,26,32,33,58,59,60,61,62,63,64,65,66,67,70,72,74,75,77,80,82,111,168,180,190],neg:[8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,61,62,66,67,74,75,179,188],negat:[11,59,60,61,62,63,76],neighbor:182,network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],neural_network:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_blackbox_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_differential_distinguisher_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_network_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neural_staged_train:[],neuron:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],neutral:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],new_constraint:[22,24,25],new_expanded_link:179,new_input_bit_positions_1:[19,20,21,22,23,24,25,158],new_input_bit_positions_2:[19,20,21,22,23,24,25,158],new_input_posit:179,new_link:179,new_numb_of_inp:[23,24],new_posit:179,next:[70,76],next_component_index_from:179,ngen:15,niederhagen:182,nist:[80,125,180],nist_:82,nist_random_toy_ciph:[],nist_random_toy_cipher_round_1:[],nist_statistical_test:82,nist_statistics_report:82,nist_sts_report_dict:82,nist_sts_report_folder_prefix:82,nistpub:125,nl:182,nlfsr:179,nmax:[23,24],node:[55,56,57,58],non:[4,19,20,21,22,23,24,25,29,32,58,61,66,74,75,77,180,188,190],non_linear_component_id:[26,27,28,29,30,31,32,33,168],nonc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],none:[0,2,5,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,186,189,190],nor:[59,60,61,62,63,64,65,66,67],normal:17,not_0_0:179,not_0_18:163,not_0_5:163,not_0_5_0:163,not_0_5_0_i:163,not_0_5_0_o:163,not_0_5_1:163,not_0_5_1_i:163,not_0_5_1_o:163,not_0_5_62:163,not_0_5_62_i:163,not_0_5_62_o:163,not_0_5_63:163,not_0_5_63_i:163,not_0_5_63_o:163,not_0_5_i:163,not_0_5_o:163,not_0_5_x0:163,not_0_5_x1:163,not_0_5_x2:163,not_0_5_x61:163,not_0_5_x62:163,not_0_5_x63:163,not_0_5_y0:163,not_0_5_y1:163,not_0_5_y2:163,not_0_5_y61:163,not_0_5_y62:163,not_0_5_y63:163,not_0_8:163,not_0_8_0:163,not_0_8_0_i:163,not_0_8_1:163,not_0_8_1_i:163,not_0_8_2:163,not_0_8_2_i:163,not_0_8_30:163,not_0_8_30_i:163,not_0_8_30_o:163,not_0_8_31:163,not_0_8_31_i:163,not_0_8_31_o:163,not_compon:163,not_const:135,not_continuous_diffusion_analysi:9,not_equ:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],note:[14,32,33,59,60,61,62,70,71,182],notion:51,notwis:70,np:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],npolynomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nr_solutions_:[55,56,57,58],nround_0:3,nsolut:[55,56,57,58],ntt:182,num_epoch:[],num_filt:[],num_output:[],numadd:[22,23,25,151,177],numb_of_inp:[158,177],numb_of_inp_1:[19,20,21,22,23,24,25],number:[0,4,9,10,11,15,19,20,21,22,25,27,28,30,31,45,50,54,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,177,179,180,182,184,190],number_of_1:157,number_of_active_sbox:[23,24],number_of_bit:49,number_of_bit_stream:82,number_of_block:[130,190],number_of_blocks_in_one_sampl:[79,80,82],number_of_clock:8,number_of_compon:[183,184],number_of_epoch:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_equ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_ineq:[45,50],number_of_initialization_clock:[142,145,146,147],number_of_input:[4,8,9,10,11,33,48],number_of_input_bit:[49,177],number_of_lay:99,number_of_lin:[80,82],number_of_monomi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_normal_clocks_at_initi:141,number_of_occurr:2,number_of_oper:94,number_of_output:9,number_of_round:[0,3,4,15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,54,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,184,190],number_of_row:8,number_of_sampl:[0,2,5,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],number_of_samples_in_one_lin:[80,82],number_of_sbox:[87,88,95],number_of_step:130,number_of_test:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_vari:[0,32,33,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],number_of_word:[48,90,94],numerical_cnf:70,numerical_cnf_to_dimac:70,numpi:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvar:15,nvariabl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],nvlpub:125,nx:17,ny:17,nz:17,o:[48,182],o_funct:99,object:[0,3,4,8,13,15,16,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,58,63,71,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,181,183,184,189,190],objective_gener:58,observ:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],obtain:[0,19,20,21,22,23,24,25,54,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],occur:[28,31],occurr:4,odd:[119,129],off:[45,50],offer:70,offset:179,oil:182,old_cipher_inputs_:178,old_xor_compon:[23,24],onc:77,one:[0,10,11,22,24,25,26,27,28,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,190],onli:[0,4,29,46,48,55,56,57,58,59,60,61,62,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],oper:[0,4,8,9,10,11,22,25,55,56,57,58,59,60,61,62,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,161,163,164,167,170,176,177,180],operand:[70,76,151,152,156,160,162,164],optim:[0,45,50,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimis:[55,56,57,58],optimisation_level_:[55,56,57,58],optimizer_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],optimizer_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],option:[0,8,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],or_0_0:179,or_0_4:164,or_0_4_0:164,or_0_4_1:164,or_0_4_30:164,or_0_4_31:164,or_0_4_y0:164,or_0_4_y1:164,or_0_4_y30:164,or_0_4_y31:164,or_0_9:164,or_39_6_i:164,or_39_6_o:164,or_compon:164,or_continuous_diffusion_analysi:9,order:[0,3,4,11,22,24,25,61,62,63,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,185,190],order_input_id_links_for_modadd:14,order_of_linear_compon:4,ordin:24,org:[0,28,30,31,33,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,159,160,161,162,164,168,176,182,188],orient:3,origin:[112,113,114],orphan:14,os:[0,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],other:[0,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],otherwis:[0,8,32,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],out:[27,28,70,151,159,160,161,177],out_id:70,out_suffix:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,76],output:[0,3,4,8,9,10,11,14,17,19,20,21,22,23,24,25,26,32,33,48,54,55,56,57,58,61,66,70,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,161,162,164,168,177,179,180],output_absolute_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit:[0,5,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_bit_len:168,output_bit_s:[0,2,3,4,10,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,187],output_bits_updated_list:14,output_compon:[21,152,156],output_constraint:21,output_dictionary_that_contains_wordwise_truncated_input_inequ:48,output_dictionary_that_contains_wordwise_truncated_mds_inequ:47,output_dictionary_that_contains_wordwise_truncated_xor_inequ:48,output_dictionary_that_contains_xor_inequ:49,output_espresso_dictionari:54,output_file_nam:70,output_id:[27,28,159],output_id_link_1:158,output_id_link_2:158,output_id_tupl:[27,28],output_inverse_constraint:21,output_len:8,output_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],output_lst:[9,190],output_probability_per_round:[55,56,57,58],output_s:[3,46,154,158],output_size_for_concaten:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],output_tag:[0,2,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],output_tag_:5,output_to_pars:[19,20,21,22,23,24,25,71],output_values_dict:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],output_var:[33,151,157,159,160,161,162,164,168,177],output_vector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],outputs_id:159,outsid:[26,27,28,29,30,31,32,33],over:[63,182],overdetermin:182,overrid:[59,60,61,62,162],overridden:[59,60,61,62],overwritten:70,ozerov:182,p1:[28,105],p1_index:137,p2:[28,105],p2_index:137,p3:28,p3_index:137,p4:28,p5:28,p:[22,24,25,26,27,28,29,30,31,32,33,55,56,57,58,92,145,147,151,159,160,161,162,164,168,182],p_modadd_0_1_0:58,p_modadd_1_2_0:58,p_modadd_1_7_0:58,p_modadd_1_9_0:[159,160,161],p_modadd_2_2_0:58,p_modadd_2_7_0:58,p_or_39_6:164,paar:182,pad:[8,77],padto:[17,54],page:[33,180,182],pair:[61,66,168,190],paper:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],parallel:[123,151,162,164],param:[151,152,153,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,167,169,170,174,175,179,182],parameters_configur:190,parent_link:179,pari:182,pariti:182,parkissat:70,pars:[11,80,82],parse_probability_var:58,parse_report:[80,82],parse_solver_inform:[19,20,21,22,23,24,25],part:[8,9,22,24,25,50,143,189],partial:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],partial_result:[],partial_speck:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],pass:[0,55,56,57,58,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],patarin:182,paterson:182,path:[0,55,56,57,58,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],pattern:[27,28,177,180],paturi:182,pb:46,pdf:[28,30,31,33,125,143,151,159,160,161,162,164,168,182],per:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],perat:[151,162,164],perform:[8,14,26,55,56,57,58,63,70,76,149,151,159,160,161,162,164,177,179,188],perlner:182,perm_0_0:179,permut:[0,28,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,137,141,142,143,144,145,146,147,148,149,157,158,163,164,166,168,171,172,173,179],permutation_descript:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,165,176,179],permutation_lay:98,perret:182,peter:182,peyrin:182,pfasant:50,phd:182,photon:180,photon_permut:128,photonpermut:128,php:[0,30,31,46,47,48,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],phy:80,pi:180,pick:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],picnic:95,picosat_sag:63,pieprzyk:182,pierr:182,pipe:70,pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],pkc:182,pla:48,plaintest:79,plaintext1:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext2:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161,167,169,170,179],plaintext_0:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_0_o:[62,67,75],plaintext_10:[167,170],plaintext_13:26,plaintext_14:26,plaintext_15:26,plaintext_1:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_1_o:[62,67,75],plaintext_20:168,plaintext_29:159,plaintext_2:[26,59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_2_o:[62,67,75],plaintext_30:159,plaintext_31:[159,160,161],plaintext_33:160,plaintext_34:160,plaintext_36:169,plaintext_37:169,plaintext_3:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],plaintext_3_o:[62,67,75],plaintext_63:169,plaintext_7:[167,170],plaintext_8:[167,169,170],plaintext_9:[167,169,170],plaintext_id:95,plaintext_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_list:90,plaintext_o:25,plaintext_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],plaintext_y0:[15,55,56,57,58],plaintext_y1:[15,55,56,57,58],plaintext_y21:15,plaintext_y22:15,plaintext_y23:15,plaintext_y2:[15,55,56,57,58],plaintext_y3:[55,56,57,58],plane:[138,139,140,190],plane_num:190,planes_new:[138,140],pleas:80,pless:182,plot_first_line_of_data_fram:4,plot_numb:4,png:[80,82],po:11,point:[77,179],point_pair:190,poli:[11,168,179],poly_to_int:190,polyhedron:[45,50,168],polynom:190,polynomi:[0,4,8,10,15,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,154,157,158,159,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182],polynomial_as_int:4,polynomial_system:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomial_system_at_round:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],polynomialr:16,poor:26,portion:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],poschmann:182,posit:[0,4,8,9,10,11,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,184,185,190],position_list:150,possibl:[0,9,19,20,21,22,23,24,25,62,67,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],possible_sbox:[23,24],post:182,potential_unwanted_compon:14,pp:182,ppl:26,pprint_dictionari:190,pprint_dictionary_to_fil:190,pra1962:182,prang:182,pre:182,pre_minus_pre_modsub_0_7_1:160,pre_modadd_0_1_0:[159,160,161],pre_modadd_0_1_1:[159,160,161],pre_modsub_0_7_0:160,pre_modsub_0_7_1:160,pre_or_0_9_0:164,pre_or_0_9_1:164,pre_var_shift_0_2:175,precomput:[9,95,180],predecessor:13,predic:180,prefix:[55,56,57,58],prepare_input_bit_based_vectorized_python_code_str:3,prepare_input_byte_based_vectorized_python_code_str:3,prepend:[59,60,61,62,63],preprint:182,present:[0,8,27,28,33,84,85,86,87,88,89,90,91,92,93,94,95,97,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,158,165,166,168,171,172,173,176,179,180,182],present_block_ciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],presentblockciph:[27,28,98,157,158,165,166,168,171,172,173,176,179],press:182,pretti:190,previou:[70,76],previous_carri:[70,76],previous_gener:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],previous_output_bit_id:77,previous_result:77,primit:182,print:[0,3,8,10,11,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,182,184,190],print_as_python_dictionari:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179],print_as_python_dictionary_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_cipher_structure_as_python_dictionary_to_fil:[104,108,114,124],print_component_analysis_as_radar_chart:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_component_info:[10,11],print_components_valu:77,print_evaluation_python_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_evaluation_python_code_to_fil:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_input_inform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],print_round:[183,184],print_round_as_python_dictionari:183,print_rounds_as_python_dictionari:184,print_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],print_word_valu:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],privaci:182,proba:168,probability_var:58,probability_vari:[],probability_weight_per_round:[55,56,57,58],probabl:[0,26,27,28,29,30,31,32,33,46,58,61,62,66,67,70,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,164,168],probe:[55,56,57,58],problem:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],proc:182,procedur:[23,24],proceed:182,process:[55,56,57,58,189],processes_:[55,56,57,58],produc:143,product:[46,54],program:[26,27,28,29,30,31,32,33,54,182],progress:[80,82],project:82,propag:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],propagate_equival:179,propagate_permut:179,propagate_rot:179,properti:[0,4,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181,182,183,184],provid:[0,17,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],publish:182,purpos:[10,11,50,89],py:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,159,160,161],python:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,188],q:[76,182],qarma:99,qarmav2:180,qarmav2_block_ciph:99,qarmav2blockciph:99,qi:190,qiao:182,quadrat:182,qualiti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],quantum:182,quantumcryptographi:182,quarter_round:[],quarter_round_index:137,question:54,quotient:8,quotientr:8,r:[0,15,16,17,55,56,57,58,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],r_3:70,r_7:70,radar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rafael:182,raiden:[55,56,57,58,160,175,180],raiden_block_ciph:[55,56,57,58,100,160,175],raidenblockciph:[55,56,57,58,100,160,175],rais:[55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],randint:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],random:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,190],random_el:17,random_seed_:[55,56,57,58],randomli:190,rang:[0,9,17,19,20,21,22,23,24,25,27,28,30,31,33,54,55,56,57,58,59,61,62,64,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188,190],rank:[96,182],rate:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],ratio:[79,80,82],rc5:180,rc5_block_ciph:101,rc5blockciph:101,rc:[122,123],rc_2:103,reach:[32,33],read:190,real:[9,190],real_bit:11,real_input:11,reason:177,recent:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],reduc:[0,23,24,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,182],reduct:182,ref:95,refer:[0,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],reference_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reg:141,reg_param:[],regist:[8,179],register_1_info:179,register_2_info:179,register_bit_length:8,register_len:179,register_n_info:179,register_polynomi:[8,179],register_word_length:179,registers_info:[8,179],regs_initi:141,regs_siz:141,regular:182,rel:[77,179],relat:[0,70,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],reli:[151,159,160,161,162,164],remain:[0,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],remaining_xor:84,remark:[63,77],remov:[0,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],remove_cipher_input_kei:179,remove_compon:183,remove_component_from_id:183,remove_components_from_round:14,remove_components_with_strings_as_valu:4,remove_forbidden_par:179,remove_key_schedul:[0,25,33,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,156,179],remove_orphan_compon:179,remove_permut:179,remove_rot:179,remove_round_compon:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],remove_round_component_from_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,184],removed_compon:14,removed_key_speck:179,removed_permutations_pres:179,removed_rotations_speck:179,render_templ:189,reorder_input_and_output:94,repeat:[23,24,54],repetit:[23,24],replac:63,repo:96,report:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,189],report_dict:[80,82],report_dict_list:[80,82],report_filenam:[80,82],report_fold:82,repr_pretti:168,repres:[0,8,9,10,11,17,21,22,24,25,27,28,30,31,45,46,50,59,60,61,62,63,64,66,67,71,72,73,74,75,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,161,164,165,166,167,169,170,171,172,173,176,177,179,180,190],represent:[0,4,9,14,45,46,50,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,163,167,168,170],reproduc:[0,33,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],request:[55,56,57,58],requir:[0,28,46,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],res_vector:8,research:182,reserv:11,resist:[0,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],resnet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respect:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],respons:189,result:[0,4,11,48,54,55,56,57,58,61,62,66,67,70,74,75,76,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,177],results_without_xor:4,retrain:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],retriev:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],return_index:14,rev_0_0:179,revers:[11,95,179,180],revisit:182,rfc:[112,113,114],rgb:80,rho_and_pi_definit:[125,126,127],rhoeast_definit:[138,139,140],rhowest_definit:[138,139,140],right:[0,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,188],right_shift_amount:[100,106,109],right_var:70,rijmen:182,ring:[4,8,15,180,182],rk_id:95,robshaw:182,roi:182,root:[55,56,57,58],ror:186,rossi:182,rot:147,rot_0_0:[21,26,105,122,123,159,160,161,167,170,179],rot_0_0_0:[26,159,160,161,167,170],rot_0_0_0_class_bit_0:[159,160,161],rot_0_0_0_class_bit_1:[159,160,161],rot_0_0_0_i:[62,67,75,167,170],rot_0_0_0_o:[167,170],rot_0_0_10_i:[167,170],rot_0_0_13:[26,159],rot_0_0_14:[26,159,167,170],rot_0_0_14_o:[167,170],rot_0_0_15:[26,159,160,161,167,170],rot_0_0_15_o:[167,170],rot_0_0_1:[26,159,160,161,167,170],rot_0_0_1_i:[62,67,75,167,170],rot_0_0_1_o:[167,170],rot_0_0_2:26,rot_0_0_2_i:62,rot_0_0_7_i:[167,170],rot_0_0_8_i:[167,170],rot_0_0_9_i:[167,170],rot_0_0_i:[25,167,170],rot_0_0_input:149,rot_0_0_invers:[167,170],rot_0_0_o:[167,170],rot_0_0_output:149,rot_0_0_x0:58,rot_0_17:[158,176],rot_0_17_0:[158,176],rot_0_17_1:[158,176],rot_0_17_word_0_class_bit_0:[158,176],rot_0_17_word_0_class_bit_1:[158,176],rot_0_18:[158,167,170,176,179],rot_0_18_30:[167,170],rot_0_18_31:[167,170],rot_0_19:[158,176],rot_0_1_0:[151,162,164],rot_0_1_1:[151,162,164],rot_0_20:[158,176],rot_0_3:21,rot_0_4_input:148,rot_0_4_output:148,rot_0_5_input:149,rot_0_5_output:149,rot_1_0_input:149,rot_1_0_output:149,rot_1_11:[4,167,170],rot_1_11_x0:[167,170],rot_1_11_x1:[167,170],rot_1_11_x2:[167,170],rot_1_11_x3:[167,170],rot_1_11_x4:[167,170],rot_1_11_x5:[167,170],rot_1_11_y0:[167,170],rot_1_11_y1:[167,170],rot_1_11_y2:[167,170],rot_1_11_y3:[167,170],rot_1_11_y4:[167,170],rot_1_11_y5:[167,170],rot_1_1:[167,170],rot_1_1_0:[167,170],rot_1_1_0_i:[167,170],rot_1_1_14:[167,170],rot_1_1_14_o:[167,170],rot_1_1_15:[167,170],rot_1_1_15_o:[167,170],rot_1_1_1:[167,170],rot_1_1_1_i:[167,170],rot_1_1_2:[167,170],rot_1_1_2_i:[167,170],rot_1_1_7_i:[167,170],rot_1_1_8_i:[167,170],rot_1_4:28,rot_1_4_input:148,rot_1_4_output:148,rot_1_5_input:149,rot_1_5_output:149,rot_1_6:179,rot_2_16:177,rot_amount:[110,111,137],rot_compon:4,rotat:[4,8,9,10,11,102,110,111,119,129,137,149,170,179,180,186,188],rotate_0_0:179,rotate_boolean_funct:8,rotate_by_variable_amount:[8,179],rotate_by_variable_amount_continuous_diffusion_analysi:9,rotate_compon:[4,167,170],rotate_continuous_diffusion_analysi:9,rotate_i:130,rotate_left:188,rotate_mzn_constraint:[167,170],rotate_right:188,rotate_x:130,rotate_x_z:[138,139,140],rotation_alpha:105,rotation_amount:[8,9,10,11,102],rotation_amount_lst:9,rotation_amounts_paramet:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,171,179],rotation_beta:105,rotation_direct:[8,9],rotation_lay:[148,149],rotation_stag:9,rotx:[138,139,140],rotz:[138,139,140],round:[0,3,14,15,21,28,31,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,182],round_0:[148,149],round_1:[148,149],round_as_python_dictionari:183,round_at:184,round_component_:178,round_const:[122,123],round_end:[80,82],round_funct:[90,93,94,101,103,105,114,116,117,118,120,121,122,123,125,126,127,128,130,131,132,133,134,135,136,138,139,140,141],round_i:[2,90,94,137],round_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,183],round_initi:[92,105],round_kei:[90,92,94,95,97,102],round_key_id:97,round_key_output:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,190],round_key_rot:149,round_key_u:[120,121],round_key_v:[120,121],round_list:14,round_numb:[0,3,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,178,184],round_object:178,round_output:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],round_start:[80,82],rounds_0_19:113,rounds_20_39:113,rounds_40_59:113,rounds_as_list:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],rounds_as_python_dictionari:184,row:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],rows_n:96,rr:182,rule:[59,60,61,62,63],rule_data_:189,run:[0,22,24,25,32,33,61,62,66,67,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],run_autond_pipelin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],run_avalanche_depend:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dependence_uniform:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_dieharder_statistics_test:80,run_avalanche_entropi:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_avalanche_nist_statistics_test:82,run_avalanche_weight:[0,2,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_cbc_dieharder_statistics_test:80,run_cbc_nist_statistics_test:82,run_correlation_dieharder_statistics_test:80,run_correlation_nist_statistics_test:82,run_dieharder_statistical_tests_tool_interact:80,run_high_density_dieharder_statistics_test:80,run_high_density_nist_statistics_test:82,run_low_density_dieharder_statistics_test:80,run_low_density_nist_statistics_test:82,run_minisat:70,run_nist_statistical_tests_tool_interact:82,run_parkissat:70,run_random_dieharder_statistics_test:80,run_random_nist_statistics_test:82,run_sat_solv:70,run_test:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],run_yic:70,runtim:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],s0:145,s11:145,s1:145,s2:145,s:[0,9,19,20,21,22,23,24,25,45,50,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,162,164,168,182],s_1:70,s_3:70,s_box_descript:168,s_box_lay:147,saber:182,sac:182,safei:182,sage:[0,3,4,8,9,11,14,15,16,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,179,180,184,185,188,190],sagemath:[26,27,28,29,30,31,32,33,180],sai:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],salsa:180,salsa_permut:129,salsapermut:129,salvi:182,same:[0,4,46,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sampl:[0,10,11,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],santa:182,sasaki:182,sat:[0,27,28,55,56,57,58,59,60,61,62,71,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_build_table_templ:168,sat_cipher_model:[59,60,61,62,63,64,65,66,67],sat_constraint:[151,152,154,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],sat_deterministic_truncated_xor_differential_model:[60,65],sat_deterministic_truncated_xor_differential_trail_constraint:[152,154,156,167,169,170],sat_modadd:159,sat_modadd_seq:159,sat_model:[59,60,61,62,63,64,65,66,67,156,159,160,161,168],sat_n_window_heuristc_bit_level:161,sat_or_milp:[55,56,57,58,159,160,161],sat_xor_differential_model:[59,60,61,62,63,64,65,66,67],sat_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],sat_xor_linear_model:[62,67,156],satciphermodel:[59,60,61,62,63,64,65,66,67],satdeterministictruncatedxordifferentialmodel:[60,65],satisfact:[55,56,57,58],satisfi:[0,20,21,30,31,59,60,61,62,63,64,65,66,67,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],satisfy_gener:58,satmodel:[59,60,61,62,63,64,65,66,67,159,160,161,168],satxordifferentialmodel:[59,60,61,62,63,64,65,66,67],satxorlinearmodel:[62,67,156],save:[79,80,82,96],save_fil:79,sbox:[4,8,9,10,11,87,88,95,148,149,179,180],sbox_0_0:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,157,165,166,171,172,173,179],sbox_0_0_0:[157,165,166,171,172,173],sbox_0_0_1:[157,165,166,171,172,173],sbox_0_0_2:[157,165,166,171,172,173],sbox_0_0_3:[157,165,166,171,172,173],sbox_0_0_x0:[15,168],sbox_0_0_x1:[15,168],sbox_0_0_x2:[15,168],sbox_0_0_x3:168,sbox_0_0_y0:168,sbox_0_0_y1:168,sbox_0_0_y2:168,sbox_0_0_y3:168,sbox_0_10:[151,163,167,169,170],sbox_0_10_act:[167,170],sbox_0_14:[151,163,167,169,170],sbox_0_14_valu:[167,170],sbox_0_15:[],sbox_0_16:179,sbox_0_19:179,sbox_0_1:[4,157,165,166,168,171,172,173,179],sbox_0_1_0:[157,158,165,166,168,171,172,173,176],sbox_0_1_0_i:168,sbox_0_1_1:[157,158,165,166,168,171,172,173,176],sbox_0_1_1_i:168,sbox_0_1_2:[157,165,166,168,171,172,173],sbox_0_1_2_o:168,sbox_0_1_3:[157,165,166,168,171,172,173],sbox_0_1_3_class_bit_0:168,sbox_0_1_3_class_bit_1:168,sbox_0_1_3_o:168,sbox_0_1_6:168,sbox_0_1_6_o:168,sbox_0_1_7:168,sbox_0_1_7_o:168,sbox_0_1_act:168,sbox_0_1_word_0_class:168,sbox_0_1_word_0_class_bit_0:168,sbox_0_1_word_0_class_bit_1:168,sbox_0_2:[4,151,157,163,165,166,167,169,170,171,172,173],sbox_0_2_0:[157,165,166,168,171,172,173],sbox_0_2_0_i:168,sbox_0_2_0_o:168,sbox_0_2_1:[157,165,166,168,171,172,173],sbox_0_2_1_i:168,sbox_0_2_1_o:168,sbox_0_2_2:[157,165,166,168,171,172,173],sbox_0_2_2_i:168,sbox_0_2_3:[157,165,166,168,171,172,173],sbox_0_2_3_i:168,sbox_0_2_3_o:168,sbox_0_2_input:148,sbox_0_2_output:148,sbox_0_2_valu:[167,170],sbox_0_2_word_0_class:[167,169,170],sbox_0_3:[4,157,165,166,171,172,173],sbox_0_3_1:[157,165,166,171,172,173],sbox_0_3_2:[157,165,166,171,172,173],sbox_0_3_3:[157,165,166,171,172,173],sbox_0_3_input:[148,149],sbox_0_3_output:[148,149],sbox_0_4:[4,157,165,166,171,172,173],sbox_0_4_0:[157,165,166,171,172,173],sbox_0_4_1:[157,165,166,171,172,173],sbox_0_4_2:[157,165,166,171,172,173],sbox_0_4_3:[157,165,166,171,172,173],sbox_0_4_input:149,sbox_0_4_output:149,sbox_0_5:[4,157,165,166,168,171,172,173],sbox_0_5_0:[157,165,166,168,171,172,173],sbox_0_5_1:[157,165,166,168,171,172,173],sbox_0_5_2:[157,165,166,171,172,173],sbox_0_5_3:[157,165,166,168,171,172,173],sbox_0_5_i:168,sbox_0_5_o:168,sbox_0_5_x1:15,sbox_0_5_x2:15,sbox_0_5_x3:15,sbox_0_6:[151,163,167,169,170],sbox_0_6_act:[167,169,170],sbox_0_6_word_0_class:[167,169,170],sbox_1_0:4,sbox_1_1:4,sbox_1_2:4,sbox_1_2_input:148,sbox_1_2_output:148,sbox_1_3:4,sbox_1_3_input:[148,149],sbox_1_3_output:[148,149],sbox_1_4:4,sbox_1_4_input:149,sbox_1_4_output:149,sbox_1_5:4,sbox_3_56:28,sbox_bool_func:8,sbox_compon:[4,9,168],sbox_continuous_diffusion_analysi:9,sbox_dictionari:9,sbox_ineq:50,sbox_inequ:50,sbox_input_s:168,sbox_lay:[95,98],sbox_layer_picn:95,sbox_lookup_t:9,sbox_mant:168,sbox_precomput:[0,6,9,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_precomputations_mix_column:[0,6,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sbox_pres:50,sbox_properti:4,sbox_that_should_be_first:179,sbox_that_should_be_second:179,sboxes_compon:[84,115],sboxes_ddt_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],sboxes_lat_templ:[59,60,61,62,63,64,65,66,67,71,72,73,74,75],scenario:[0,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scenario_dict:187,schanck:182,schedul:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],scheme:182,schloss:182,schwabe:182,sci:182,score:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],script:180,search:[0,21,22,23,25,26,27,28,30,31,32,33,55,56,57,58,60,61,62,63,65,66,67,70,71,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,169,180,182],second:[0,15,20,21,22,23,24,25,45,50,55,56,57,58,70,76,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],second_step_solver_nam:24,section:70,secur:[89,182],see:[27,28,30,31,33,63,70,71,80,82,151,162,164,168,179],seed:[55,56,57,58],seen:[46,54,112,113,114,151,162,164,177],seiler:182,select:182,select_bit:[0,3,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],select_bits_continuous_diffusion_analysi:9,select_boolean_funct:4,select_properties_funct:4,select_word:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],self:[0,3,14,27,28,30,31,32,33,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],semi:182,separ:[46,59,60,61,62,63],sequenc:[0,15,17,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180,182],sequence_oper:188,sequenti:[59,60,61,62,63,64,65,66,67,71,72,73,74,75,177],set:[0,3,8,10,11,17,19,20,21,22,23,24,25,30,31,32,45,46,50,54,55,56,57,58,61,66,74,75,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,185],set_2d_array_element_from_1d_array_index:190,set_bodi:189,set_build:189,set_component_solut:77,set_component_solution_valu:[19,20,21,22,23,24,25],set_component_value_weight_sign:77,set_descript:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_file_nam:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_fixed_vari:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77],set_foot:189,set_from_hex_str:8,set_head:189,set_id:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],set_input:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],set_input_bit_posit:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_input_id_link:[150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,181],set_max:54,set_max_number_of_carries_on_arx_ciph:58,set_max_number_of_nonlinear_carri:58,set_min:54,set_testing_data_amount:79,set_variables_nam:4,set_vector_depend:2,set_vector_dependence_uniform:2,set_vector_entropi:2,set_vector_weight:2,seurin:182,sever:89,sglytqh2017:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],sgn_function:190,sha1:180,sha1_hash_funct:113,sha1hashfunct:113,sha256:114,sha2:180,sha2_hash_funct:114,sha2hashfunct:114,sha:[113,114],shamir:182,shape:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],shi_modadd_0_1:[159,160,161],shi_pre_modadd_0_1_0:[159,160,161],shi_pre_modadd_0_1_1:[159,160,161],shift:[0,4,8,9,10,11,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180,188],shift_0_0:[106,109,169,179],shift_0_0_0:[159,169],shift_0_0_0_i:169,shift_0_0_1:[159,160,161,169],shift_0_0_1_i:169,shift_0_0_26_o:169,shift_0_0_27:169,shift_0_0_27_o:169,shift_0_0_28:169,shift_0_0_29:[159,160,161,169],shift_0_0_2:[159,160,161,169],shift_0_0_2_i:169,shift_0_0_30:[159,160,161,169],shift_0_0_30_i:169,shift_0_0_30_o:169,shift_0_0_31:[159,160,161,169],shift_0_0_31_i:169,shift_0_0_31_o:169,shift_0_0_6:169,shift_0_0_6_o:169,shift_0_0_7:169,shift_0_0_7_o:169,shift_0_0_i:169,shift_0_0_invers:169,shift_0_0_o:169,shift_0_0_x0:169,shift_0_0_x10:169,shift_0_0_x11:169,shift_0_0_x12:169,shift_0_0_x13:169,shift_0_0_x14:169,shift_0_0_x15:169,shift_0_0_x16:169,shift_0_0_x17:169,shift_0_0_x18:169,shift_0_0_x19:169,shift_0_0_x1:169,shift_0_0_x20:169,shift_0_0_x21:169,shift_0_0_x22:169,shift_0_0_x23:169,shift_0_0_x24:169,shift_0_0_x25:169,shift_0_0_x26:169,shift_0_0_x27:169,shift_0_0_x28:169,shift_0_0_x29:169,shift_0_0_x2:169,shift_0_0_x30:169,shift_0_0_x31:169,shift_0_0_x3:169,shift_0_0_x4:169,shift_0_0_x5:169,shift_0_0_x6:169,shift_0_0_x7:169,shift_0_0_x8:169,shift_0_0_x9:169,shift_0_0_y0:169,shift_0_0_y10:169,shift_0_0_y11:169,shift_0_0_y12:169,shift_0_0_y13:169,shift_0_0_y14:169,shift_0_0_y15:169,shift_0_0_y16:169,shift_0_0_y17:169,shift_0_0_y18:169,shift_0_0_y19:169,shift_0_0_y1:169,shift_0_0_y20:169,shift_0_0_y21:169,shift_0_0_y22:169,shift_0_0_y23:169,shift_0_0_y24:169,shift_0_0_y25:169,shift_0_0_y26:169,shift_0_0_y27:169,shift_0_0_y28:169,shift_0_0_y29:169,shift_0_0_y2:169,shift_0_0_y30:169,shift_0_0_y31:169,shift_0_0_y3:169,shift_0_0_y4:169,shift_0_0_y5:169,shift_0_0_y6:169,shift_0_0_y7:169,shift_0_0_y8:169,shift_0_0_y9:169,shift_0_18:169,shift_0_18_30:169,shift_0_18_31:169,shift_0_18_act:169,shift_0_18_valu:169,shift_1_12:169,shift_1_12_x0:169,shift_1_12_x1:169,shift_1_12_x2:169,shift_1_12_y0:169,shift_1_12_y1:169,shift_1_12_y2:169,shift_1_12_y3:169,shift_1_12_y4:169,shift_1_12_y5:169,shift_amount:[8,9,10,11],shift_amount_lst:9,shift_amount_var_shift_0_2:175,shift_by_variable_amount:[8,179],shift_by_variable_amount_continuous_diffusion_analysi:9,shift_column_compon:115,shift_compon:169,shift_continuous_diffusion_analysi:9,shift_direct:[8,9,10,11],shift_id:70,shift_left:188,shift_mzn_constraint:169,shift_right:188,shift_row_0_0:179,shift_row_compon:84,shift_rows_0_0:179,shift_smount:11,shift_stag:9,shiftrow:170,shit:9,should:[0,8,10,32,33,45,50,63,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],show:[0,23,24,26,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],shrink:96,shuffle_cel:97,si:190,siam:182,side:70,sigma:[8,179,180],sigma_0_0:179,sigma_continuous_diffusion_analysi:9,sigmoid:[],sign:[59,60,61,62,63,64,65,66,67,77,151,159,160,161,162,163,164,167,169,170,174,175,177,190],signatur:182,signed_dist:190,signific:[0,63,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],silicon:[],similar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],simon:[22,25,26,27,28,29,30,31,32,33,151,152,156,162,164,177,180,182],simon_block_ciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simonblockciph:[22,25,26,27,28,29,30,31,32,33,54,102,151,152,156,162,164,177],simplifi:[168,177],simplify_input:190,sinc:177,singl:[0,20,21,22,24,25,55,56,57,58,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],size:[0,8,9,10,11,14,32,33,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,168,179,186],skinni:[4,158,176,180,182],skinny_block_ciph:[4,103,158,176],skinnyblockciph:[4,103,158,176],skip:[0,3,17,27,28,30,31,33,77,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],slightli:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],small:[50,148,149,168,180,182],small_swap:[122,123],smaller:[182,189],smallest:[22,24,25,148,149],smith:182,smt2:71,smt:[0,63,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_and:76,smt_assert:76,smt_build_table_templ:168,smt_carri:76,smt_cipher_model:72,smt_constraint:[151,152,154,156,157,158,159,160,163,164,165,166,167,168,169,170,171,172,173,175,176,177],smt_deterministic_truncated_xor_differential_model:[],smt_deterministic_truncated_xor_differential_trail_constraint:[],smt_distinct:76,smt_equival:76,smt_get_sbox_probability_constraint:168,smt_impli:76,smt_ite:76,smt_lipmaa:76,smt_modadd:159,smt_modadd_seq:159,smt_model:[71,72,73,74,75,156,168],smt_not:76,smt_or:76,smt_xor:76,smt_xor_differential_model:74,smt_xor_differential_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_mask_propagation_constraint:[151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],smt_xor_linear_model:[75,156],smtciphermodel:72,smtdeterministictruncatedxordifferentialmodel:73,smtmodel:[71,72,73,74,75,168],smtxordifferentialmodel:74,smtxorlinearmodel:[75,156],sneyd:182,snow3g:180,snow3g_key_stream:145,snow3g_state_initi:145,snow3g_stream_ciph:145,snow3gstreamciph:145,snow:145,so:[46,111,168],societi:182,soda:182,softwar:[82,182],solut:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,159,160,161,162,163,164,167,169,170,174,175,177,182],solution_numb:[19,20,21,22,23,24,25],solution_to_writ:77,solv:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,182],solve_full_two_steps_xor_differential_model:24,solve_model:24,solve_tim:[19,20,21,22,23,24,25,77],solver:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,45,50,55,56,57,58,59,60,61,62,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,180],solver_nam:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77],solver_output:[19,20,21,22,23,24,25],solver_spec:70,solver_typ:77,solving_time_second:[21,61,62,66,67,71,72,73,74,75,77],some:[0,4,26,30,31,45,50,63,70,71,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],sometim:3,song:182,sort:[14,179],sort_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],sort_cipher_graph:14,sort_input_id_links_and_input_bit_posit:14,sorted_ciph:14,sourc:50,sover:182,soviet:182,sp:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sp_box:[122,123],space:[59,60,61,62,63],spaenlehau:182,sparkl:180,sparkle_permut:130,sparklepermut:130,sparx:180,sparx_block_ciph:104,sparxblockciph:104,special:[10,11],specif:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,74,75,77,111],specifi:[0,4,8,9,13,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],speck32:182,speck32_64_r22_cryptominisat:77,speck32_64_r22_sat:77,speck:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179,180,182],speck_block_ciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],speck_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],speck_diff_find:[159,160,161],speck_k64_p32_o32_r22:72,speck_p32_k64_o32_r1:21,speck_p32_k64_o32_r22:[59,64],speck_p32_k64_o32_r2:22,speck_p32_k64_o32_r3:21,speck_p32_k64_o32_r3_32_64_avalanche_index0_10lines_10240bit:[],speck_p32_k64_o32_r3_32_64_cbc_index0_2lines_524288bit:[],speck_p32_k64_o32_r3_32_64_correlation_index0_10lines_2600960bit:[],speck_p32_k64_o32_r3_32_64_high_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_low_density_index0_10lines_169280bit:[],speck_p32_k64_o32_r3_32_64_random_index0_10lines_2600960bit:[],speck_p32_k64_o32_r4:[19,20,21,22,23,24,25,62,67,71,72,73,74,75,77],speck_p32_k64_o32_r5:[22,61,66,74],speck_without_key_schedul:[77,156],speckblockciph:[0,3,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,159,160,161,167,170,177,179],spectra:182,split:[3,8,9,110,111,177],split_cipher_graph_into_top_bottom:13,spn:[0,23,24,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168],spongent:180,spongent_pi_fsr_permut:131,spongent_pi_permut:132,spongent_pi_precomputation_permut:133,spongentpi:[131,132,133],spongentpifsrpermut:131,spongentpipermut:132,spongentpiprecomputationpermut:133,springer:[51,168,182],squar:4,st:[80,82],stackoverflow:54,stage:143,standard:[21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,64,65,66,67,72,73,74,75,76,77,110,111,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,177,180],start:[22,24,25,32,33,61,62,66,67,74,75,80,82],start_round:[0,14,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149],starting_round:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state:[70,84,95,99,101,103,110,111,112,113,114,115,116,117,118,119,120,121,122,123,125,126,127,128,129,130,131,132,133,134,135,136,137,142,143,144,146,179],state_0_var_shift_0_2_0:175,state_0_var_shift_0_2_1:175,state_3_var_shift_0_2_30:175,state_3_var_shift_0_2_31:175,state_bit_s:[110,111,131,132,133,142,146],state_i:130,state_initi:[103,125,126,127,147],state_of_compon:[119,129,137],state_s:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],state_transform:[110,111],state_word_id:[110,111],state_word_rang:[110,111],state_x:130,statement:54,statist:[0,55,56,57,58,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],statistical_test:[79,80,82],statistical_test_option_list:82,statisticaltest:82,statu:[30,31,59,60,61,62,63,64,65,66,67],stdin:70,stdtype:188,ste1988:182,step:[0,2,19,20,21,22,23,24,25,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,152,154,156,158,163,167,168,169,170,176,177,188],stern:182,stop:[22,24,25,61,62,66,67,74,75],store:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],store_intermediate_output:3,str:[17,27,28,30,31,54,55,56,57,58,76,82],str_constraint:[55,56,57,58],str_model_path:[55,56,57,58],str_solver:[55,56,57,58],strategi:58,stream:[80,82],stream_ciph:[141,142,143,144,145,146,147],strict:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],strictli:[112,113,114],string:[0,3,4,8,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,50,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,168,179,190],string_dictionari:3,string_python_cod:3,string_total_weight:[19,20,21,22,23,24,25],structur:[0,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],sts_report_dict:82,studi:4,sub:[13,17],sub_cel:97,sub_kei:92,sub_key_temp_list:90,sub_keys_zero:[90,93],sub_quarter_round_latin_d:137,sub_var:17,subgraph:13,subkei:107,subkey_schedul:107,submatric:4,subprocess:[59,60,61,62,63,64,65,66,67,71],substract:[9,159,160,161],substrat:[159,160,161],subtract:[10,11,17,160],suffix:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],suffix_dict:[],suggest:77,suit:82,sum:[22,23,24,25,28,46,55,56,57,58,159,160,161,164,177],sum_value_kei:190,summing_up:190,sun:182,super_class:137,superclass:[59,60,61,62],superdetermin:182,supplementari:[30,31],suppli:70,support:[55,56,57,58,151,152,156,162,164],sur:182,swap_compon:183,swedish:182,symbol:182,symmetr:[112,113,114,182],symposium:182,syrup:63,syrup_sag:63,syst:182,system:[0,15,59,60,61,62,63,64,65,66,67,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],systemsof:182,t:[0,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182,188,190],tabl:[0,9,10,11,23,24,28,33,46,48,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,158,162,164,168,176,177,182],table_item:168,table_of_solution_length:[23,24],table_of_solutions_length:[23,24],table_sbox_0_5:168,table_typ:168,tag:179,tail:17,takagi:182,take:[0,13,27,28,30,31,32,33,50,59,60,61,62,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],taken:[79,80,82,177],tamaki:182,target:[26,59,60,61,62,63,71],target_bit_posit:14,target_link:14,td:[30,31],tea:[59,60,61,62,63,64,65,66,67,154,159,160,161,169,180],tea_block_ciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],tea_p64_k128_o64_r32:[59,60,61,62,63,64,65,66,67],teablockciph:[59,60,61,62,63,64,65,66,67,106,154,159,160,161,169],techniqu:[0,26,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],temp_0_0_act:177,temp_0_0_valu:177,temp_0_15_act:177,temp_0_15_valu:177,temp_1_15_act:177,temp_1_15_valu:177,temp_carry_plaintext_32:160,temp_carry_plaintext_33:160,temp_carry_plaintext_34:160,temp_input_plaintext_62:160,temp_input_plaintext_63:160,temp_subkey_gener:90,templat:[71,72,73,74,75,168,180],templatemanag:189,tensorflow:[],term:13,termin:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test:[0,3,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_against_reference_cod:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_json:190,test_pass:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_report:82,test_result:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],test_typ:82,test_vector_check:[0,83,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tester:180,testing_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tests_configur:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],text:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],th:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],than:[0,22,24,25,32,33,58,61,62,66,67,74,75,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,162,164,177,179,190],thei:[25,59,60,61,62,63,64,65,66,67,70,74,75,168],them:[27,28,30,31,32,33,55,63,70,189,190],then_constraint:54,then_constraints_list:54,theorem:9,theoret:182,theori:182,therefor:[59,60,61,62,71],thesi:182,theta:[179,180],theta_definit:[125,126,127,138,139,140],theta_keccak:8,theta_keccak_0_0:[125,179],theta_xoodoo:8,theta_xoodoo_0_0:[138,179],thetakeccak:172,thetaxoodoo:173,thi:[0,3,8,9,10,11,14,26,32,33,45,46,50,51,54,55,59,60,61,62,63,70,71,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,158,159,160,161,162,164,168,169,176,177,179,180,184,189],third:179,thoma:182,thorkn:95,those:[26,59,60,61,62,63,64,65,66,67,96],three:70,threefish:180,threefish_block_ciph:107,threefishblockciph:107,threshold:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],threshold_for_avalanche_factor:[0,5,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],through:26,tii:14,tii_dir_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tii_path:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,190],tillich:182,time:[0,15,23,24,25,55,56,57,58,70,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,179],time_keyword:[],time_memory_extractor:[],timeout:[0,1,15,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],timeout_in_seconds_:[55,56,57,58],tinyjambu:180,tinyjambu_32bits_word_permut:134,tinyjambu_fsr_32bits_word_permut:135,tinyjambu_permut:136,tinyjambufsrwordbasedpermut:135,tinyjambupermut:136,tinyjambuwordbasedpermut:134,tmp_cipher_oper:4,to_bias_for_correlation_measur:77,to_bias_for_probability_measur:77,to_bias_for_xor_linear_trail:77,to_binari:185,to_bit:50,to_correlation_for_bias_measur:77,to_correlation_for_probability_measur:77,to_correlation_for_xor_linear_trail:77,to_pars:[],to_probability_for_bias_measur:77,to_probability_for_correlation_measur:77,to_probability_for_xor_linear_trail:77,tobyt:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],todo:182,togeth:[10,55,56,57,58,77,189],toi:[119,148,149],tone:182,tool:[80,82,182],top:13,top_half_quarter_round:[119,129,144],topolog:14,topological_sort:14,tosc:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],total:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],total_weight:[19,20,21,22,23,24,25,27,28,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77],toy_ciph:[80,82],toyspn1:180,toyspn2:180,traceback:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],trail:[19,20,21,22,23,25,26,27,28,30,31,32,33,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,151,169,180,182],trail_with_sign:77,trails_with_sign:77,train:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],train_gohr_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],train_neural_distinguish:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],training_sampl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tran:182,transact:182,transform:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177],transform_first_step_model:24,transform_gf2nmatrix_to_binmatrix:8,transformations_flag:[90,93],transit:[50,54,168],translat:63,transpar:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],transpos:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],triv:146,trivium:180,trivium_key_stream:146,trivium_state_initi:146,trivium_stream_ciph:146,triviumstreamciph:146,trunc_binvar:[27,28],trunc_wordvar:[30,31],truncat:[19,20,22,23,24,25,28,31,51,54,77,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,180],truth:48,tupl:[17,27,28,54,70,168,177,188],tutori:182,tw2012:182,tweak:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],tweak_bit_s:[99,107],twenti:182,twice:[55,56,57,58],two:[13,23,24,48,54,59,60,61,62,63,64,65,66,67,70,76,77,79,80,82,111,143,151,152,156,159,160,161,162,164,177,179,182],twofish:[4,180],twofish_block_ciph:[4,108],twofish_key256_r16:108,twofishblockciph:[4,108],twoterms_milp_probability_xor_linear_constraint:[159,160,161],txt:[77,80,82,189],type1_key_schedule_xor:89,type1_sbox:89,type2_key_schedule_and:89,type2_key_schedule_xor:89,type2_modadd1:89,type2_modadd2:89,type2_xor1:89,type2_xor2:89,type:[0,4,55,56,57,58,59,60,61,62,63,64,65,66,67,77,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,184,188],u:[48,70,182,190],uint8:[0,10,11,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],uint:[0,3,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],ultra:182,unbalanc:182,uncertainti:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],under:[0,4,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],underdefin:182,underdetermin:182,underli:4,undisturb:[168,180],unformatted_input:11,unfortun:70,uniform:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],unique_length:179,univ:182,unknown:[27,28,30,31],unsign:10,unspecifi:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],until:[0,71,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],updat:[17,95],update_and_or_ddt_valid_prob:22,update_and_or_lat_valid_prob:25,update_available_bits_with_component_input_bit:14,update_available_bits_with_component_output_bit:14,update_blackbox_distinguisher_tests_d:[],update_cipher_input:[178,179],update_component_input:179,update_component_output_id:[],update_const:99,update_constraints_for_equal_typ:[71,72,73,74,75],update_constraints_for_more_than_one_bit:157,update_constraints_for_not_equal_typ:[71,72,73,74,75],update_dictionary_that_contains_inequalities_for_large_sbox:46,update_dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bit:51,update_dictionary_that_contains_inequalities_for_small_sbox:50,update_dictionary_that_contains_wordwise_truncated_input_inequ:48,update_dictionary_that_contains_wordwise_truncated_mds_inequ:47,update_dictionary_that_contains_wordwise_truncated_xor_inequalities_between_n_input:48,update_dictionary_that_contains_xor_inequalities_between_n_input_bit:49,update_dictionary_that_contains_xor_inequalities_for_specific_matrix:49,update_dictionary_that_contains_xor_inequalities_for_specific_wordwise_matrix:48,update_distinguisher_tests_d:[],update_input:179,update_input_id_link:178,update_input_links_from_round:14,update_intermediate_structur:3,update_kei:93,update_key_regist:[95,98],update_output_bit:14,update_partial_result:[],update_sbox_ddt_valid_prob:[22,24],update_sbox_lat_valid_prob:25,update_xor_linear_constraints_for_more_than_one_bit:156,update_xor_linear_constraints_for_more_than_two_bit:33,upper:[32,33,58],us:[0,3,4,9,10,11,13,21,22,24,25,26,27,28,29,30,31,32,33,45,46,47,50,51,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,77,80,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,156,159,160,161,162,164,168,177,179,180,182,184,190],usa:182,usefulfunct:180,user:26,usr:82,usual:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],util:[19,20,21,22,23,24,25,27,28,30,31,32,33,50,59,61,62,64,66,67,71,72,73,74,75,143,168,185,188,189],v0:[54,177],v1:[54,177],v2:99,v:[17,54,70,145,177,182],val:[3,11,54,154],val_acc:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],val_loss:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],valid:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177],valid_point:[45,51,54,168],valid_prob:[22,24,25,168],valid_transformations_matrix:46,valid_transit:168,valu:[0,4,9,10,11,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,46,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,79,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,154,177,179,186,190],value1:190,value2:190,valueerror:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],van:182,var_dict:[],var_if:54,var_if_list:54,var_list:54,var_nam:15,var_rot_0_0:179,var_rotate_0_0:179,var_shift_0_0:179,var_shift_0_2:175,var_shift_0_2_0:175,var_shift_0_2_1:175,var_shift_0_2_2:175,var_shift_0_2_30:175,var_shift_0_2_31:175,var_shift_0_2_x0:175,var_shift_0_2_x10:175,var_shift_0_2_x11:175,var_shift_0_2_x12:175,var_shift_0_2_x13:175,var_shift_0_2_x14:175,var_shift_0_2_x15:175,var_shift_0_2_x16:175,var_shift_0_2_x17:175,var_shift_0_2_x18:175,var_shift_0_2_x19:175,var_shift_0_2_x1:175,var_shift_0_2_x20:175,var_shift_0_2_x21:175,var_shift_0_2_x22:175,var_shift_0_2_x23:175,var_shift_0_2_x24:175,var_shift_0_2_x25:175,var_shift_0_2_x26:175,var_shift_0_2_x27:175,var_shift_0_2_x28:175,var_shift_0_2_x29:175,var_shift_0_2_x2:175,var_shift_0_2_x30:175,var_shift_0_2_x31:175,var_shift_0_2_x32:175,var_shift_0_2_x33:175,var_shift_0_2_x34:175,var_shift_0_2_x35:175,var_shift_0_2_x36:175,var_shift_0_2_x37:175,var_shift_0_2_x38:175,var_shift_0_2_x39:175,var_shift_0_2_x3:175,var_shift_0_2_x40:175,var_shift_0_2_x41:175,var_shift_0_2_x42:175,var_shift_0_2_x43:175,var_shift_0_2_x44:175,var_shift_0_2_x45:175,var_shift_0_2_x46:175,var_shift_0_2_x47:175,var_shift_0_2_x48:175,var_shift_0_2_x49:175,var_shift_0_2_x4:175,var_shift_0_2_x50:175,var_shift_0_2_x51:175,var_shift_0_2_x52:175,var_shift_0_2_x53:175,var_shift_0_2_x54:175,var_shift_0_2_x55:175,var_shift_0_2_x56:175,var_shift_0_2_x57:175,var_shift_0_2_x58:175,var_shift_0_2_x59:175,var_shift_0_2_x5:175,var_shift_0_2_x60:175,var_shift_0_2_x61:175,var_shift_0_2_x62:175,var_shift_0_2_x63:175,var_shift_0_2_x6:175,var_shift_0_2_x7:175,var_shift_0_2_x8:175,var_shift_0_2_x9:175,var_shift_0_2_y0:175,var_shift_0_2_y10:175,var_shift_0_2_y11:175,var_shift_0_2_y12:175,var_shift_0_2_y13:175,var_shift_0_2_y14:175,var_shift_0_2_y15:175,var_shift_0_2_y16:175,var_shift_0_2_y17:175,var_shift_0_2_y18:175,var_shift_0_2_y19:175,var_shift_0_2_y1:175,var_shift_0_2_y20:175,var_shift_0_2_y21:175,var_shift_0_2_y22:175,var_shift_0_2_y23:175,var_shift_0_2_y24:175,var_shift_0_2_y25:175,var_shift_0_2_y26:175,var_shift_0_2_y27:175,var_shift_0_2_y28:175,var_shift_0_2_y29:175,var_shift_0_2_y2:175,var_shift_0_2_y30:175,var_shift_0_2_y31:175,var_shift_0_2_y3:175,var_shift_0_2_y4:175,var_shift_0_2_y5:175,var_shift_0_2_y6:175,var_shift_0_2_y7:175,var_shift_0_2_y8:175,var_shift_0_2_y9:175,variabl:[0,4,10,11,15,17,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,48,54,55,56,57,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,179,180,182,190],variable2valu:76,variable_0:[70,76],variable_1:[70,76],variable_2:70,variable_:70,variable_shift_compon:175,variablerot:174,variables_list:177,variables_n:70,variables_nam:4,variableshift:175,variant:[45,50],variou:189,vbc:182,vector:[0,2,3,50,70,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],vectorspac:17,veector:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],verbel:182,verbos:[0,3,6,8,10,11,51,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,153,154,157,158,165,166,167,168,169,170,171,172,173,174,175,176],verbose_print:26,vercauteren:182,veri:168,verifi:33,verlag:182,version:[123,168],vertic:168,via:95,view:[0,30,31,46,47,48,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,158,168,176],vikkelso:182,vinegar:182,visit:[59,60,61,62,63],vits:182,vol:182,volum:182,vs:182,vulner:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],vx:17,vy:17,w1:147,w2:147,w:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],w_id:145,w_po:145,wa:[54,89,177],wai:[14,33,177,179],wang:182,want:[0,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],wcc:182,we:[0,4,28,50,59,60,61,62,63,64,65,66,67,71,72,73,74,75,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,190],weak:89,webhom:80,weight:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,79,80,82,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,182],weight_constraint:[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75],weight_xor_linear_constraint:[25,33,62,67,75],well:63,wenzel:182,were:[59,60,61,62],when:[0,23,24,26,27,28,29,30,31,32,33,54,55,56,57,58,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],whenev:63,where:[0,8,10,11,17,28,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179,185,190],whether:[0,16,17,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],which:[4,8,13,22,23,24,25,28,31,50,59,60,61,62,63,64,65,66,67,70,71,72,73,74,75,76,77,86,143,148,149,179],whirlpool:180,whirlpool_hash_funct:115,whirlpoolhashfunct:115,whitening_key_gener:90,whitening_key_list:90,whole:70,whose:[4,19,20,21,22,23,24,25,32,33,58,61,62,66,67,70,74,75,77,112,113,114],wich:177,william:182,window:180,window_s:161,window_size_0_cnf:69,window_size_1_cnf:69,window_size_2_cnf:69,window_size_3_cnf:69,window_size_4_cnf:69,window_size_5_cnf:69,window_size_by_round:[61,66],window_size_list:[55,56,57,58],window_size_weight_pr_var:[59,60,61,62,63,64,65,66,67],within:[55,56,57,58,179],wolf:182,word:[0,4,8,9,10,11,30,31,54,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,136,138,139,140,141,142,143,144,145,146,147,148,149,179,180],word_bas:179,word_based_c_cod:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],word_index:[19,20,21,22,23,24,25,110,111,158],word_oper:179,word_operation_properti:4,word_permut:107,word_sbox_0_10:24,word_sbox_0_11:24,word_sbox_0_12:24,word_sbox_0_13:24,word_sbox_0_14:24,word_sbox_0_15:24,word_sbox_0_16:24,word_sbox_0_1:24,word_sbox_0_26:24,word_sbox_0_27:24,word_sbox_0_28:24,word_sbox_0_29:24,word_sbox_0_2:24,word_sbox_0_3:24,word_sbox_0_4:24,word_sbox_0_5:24,word_sbox_0_6:24,word_sbox_0_7:24,word_sbox_0_8:24,word_sbox_0_9:24,word_sbox_1_0:24,word_sbox_1_10:24,word_sbox_1_11:24,word_sbox_1_12:24,word_sbox_1_13:24,word_sbox_1_14:24,word_sbox_1_15:24,word_sbox_1_1:24,word_sbox_1_21:24,word_sbox_1_22:24,word_sbox_1_23:24,word_sbox_1_24:24,word_sbox_1_2:24,word_sbox_1_3:24,word_sbox_1_4:24,word_sbox_1_5:24,word_sbox_1_6:24,word_sbox_1_7:24,word_sbox_1_8:24,word_sbox_1_9:24,word_siz:[0,3,4,8,9,30,31,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,179,186,190],wordlist:186,wordlist_to_bytearrai:186,wordlist_to_int:186,wordpermut:176,words_per_input:11,wordsiz:[47,48],wordstring_vari:[3,153,154,167,168,169,170,174,175],wordwis:[151,152,154,156,168,169,177,180],work:[59,60,61,62,63,64,65,66,67],workshop:182,worst:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],would:[0,8,80,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,177,179],write:[26,27,28,29,30,31,32,33,55,56,57,58,77],write_minizinc_model_to_fil:[55,56,57,58],write_model_to_fil:77,write_solution_into_a_fil:77,write_solution_to_fil:77,www:[151,162,164,182],x0:[8,17,179],x0lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x1:[8,17,177,179],x1lib:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],x2:[8,17,179],x3:[8,17,177,179],x4:[17,179],x5:[17,179],x6:[17,179],x7:[17,179],x8:179,x:[0,10,11,16,17,30,31,33,50,54,59,60,61,62,69,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177,182,185,188,190],x_0:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_10:[26,27,28,29,30,31,32,33,157,165,166,167,168,169,170,171,172,173],x_110:156,x_111:156,x_118:177,x_119:177,x_11:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176],x_126:[157,158,163,165,166,171,172,173,176],x_127:[157,158,163,165,166,171,172,173,176],x_12:[32,33,151,157,165,166,168,169,171,172,173],x_13:[27,28,32,33,157,158,165,166,168,169,171,172,173,176],x_142:[27,28],x_143:[27,28],x_14:[27,28,32,33,154,158,167,168,169,170,176],x_1571:[30,31],x_1572:[30,31],x_157:[159,160,161],x_158:[152,156],x_159:[152,156,159,160,161],x_15:[27,28,32,33,151,154,158,159,160,161,162,164,167,168,169,170,176],x_160:[159,160,161],x_16:[151,152,156,158,159,160,161,162,164,167,168,170,176,177],x_17:[151,152,156,159,160,161,162,164,167,168,170],x_18:[157,165,166,168,171,172,173],x_19:[157,165,166,168,171,172,173],x_1:[26,27,28,29,30,31,32,33,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,176,177],x_20:168,x_21:168,x_22:168,x_23:[158,168,176],x_24:[158,168,176],x_25:[157,158,165,166,168,171,172,173,176],x_26:168,x_27:168,x_286:[152,156],x_287:[152,156],x_28:[168,182],x_2918:[30,31],x_2919:[30,31],x_29:168,x_2:[26,27,28,29,30,31,32,33,70,152,154,156,158,159,160,161,167,168,169,170,176,177],x_3060:[30,31],x_3061:[30,31],x_3070:[30,31],x_3071:[30,31],x_3078:[30,31],x_3079:[30,31],x_30:[159,160,161,163,167,168,170,177],x_316:33,x_317:33,x_318:33,x_319:33,x_31:[152,156,158,159,160,161,163,167,168,170,176,177],x_32:[151,152,156,158,159,160,161,162,163,164,168,176,177],x_33:[151,158,162,163,164,168,176,177],x_34:[151,162,164,177],x_35:[151,162,164],x_36:[151,162,164],x_37:[151,162,164],x_38:[151,162,164],x_39:[151,162,164,177],x_3:[26,27,28,29,30,31,32,33,70,76,154,158,159,160,161,168,169,176,177],x_40:[151,162,164,177],x_41:[151,162,164,177],x_42:[151,162,164,177],x_43:[151,162,164,177],x_44:[151,162,164,177],x_45:[151,162,164,177],x_46:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_47:[151,157,159,160,161,162,164,165,166,171,172,173,177],x_48:[151,159,160,161,162,164,177],x_49:[151,159,160,161,162,164,177],x_4:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_50:[151,159,160,161,162,164],x_51:[151,159,160,161,162,164],x_52:[151,159,160,161,162,164],x_53:[151,159,160,161,162,164],x_54:[151,159,160,161,162,164],x_55:[151,159,160,161,162,164],x_56:[151,159,160,161,162,164],x_57:[151,159,160,161,162,164],x_58:[151,159,160,161,162,164],x_59:[151,157,158,159,160,161,162,164,165,166,171,172,173,176],x_5:[26,27,28,29,30,31,32,33,158,167,168,169,170,176,177],x_60:[151,159,160,161,162,164],x_61:[151,159,160,161,162,164],x_62:[151,152,156,158,159,160,161,162,163,164,176,177],x_63:[151,152,156,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_64:[151,157,158,159,160,161,162,163,164,165,166,171,172,173,176,177],x_65:[157,158,159,160,161,163,165,166,171,172,173,176,177],x_66:[159,160,161],x_6:[26,27,28,29,30,31,32,33,157,158,165,166,168,169,171,172,173,176,177],x_70:[167,169,170],x_71:[167,169,170],x_7:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_81:177,x_8:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_92:[27,28],x_93:[27,28],x_94:[27,28,159,160,161,177],x_95:[27,28,159,160,161,177],x_96:[27,28,159,160,161],x_97:[27,28,159,160,161],x_9:[26,27,28,29,30,31,32,33,157,158,165,166,167,168,169,170,171,172,173,176,177],x_class:[151,152,154,156,157,158,163,165,166,167,168,169,170,171,172,173,176,177],xl:182,xoodoo:[0,8,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,141,142,143,144,145,146,147,148,149,179,180],xoodoo_invertible_permut:138,xoodoo_permut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoo_permutation_sbox:140,xoodoo_sbox_permut:140,xoodooinvertiblepermut:138,xoodoopermut:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xoodoosboxpermut:140,xoofff:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor1:84,xor:[4,8,9,10,11,19,20,26,51,54,55,56,59,63,70,71,72,76,151,152,154,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,175,176,179,180,184],xor_0_0:[24,97,98,104,124,126,127,139,140,168,179,184],xor_0_0_0:168,xor_0_0_0_class_bit_0:168,xor_0_0_0_class_bit_1:168,xor_0_0_1:168,xor_0_0_2:168,xor_0_0_3:168,xor_0_0_4:168,xor_0_0_5:168,xor_0_0_6:168,xor_0_0_7:168,xor_0_0_act:177,xor_0_0_valu:[168,177],xor_0_0_word_0_class:168,xor_0_0_word_0_class_bit_0:168,xor_0_0_word_0_class_bit_1:168,xor_0_1:[168,184],xor_0_1_0:164,xor_0_1_1:164,xor_0_1_30:164,xor_0_1_31:164,xor_0_1_input:148,xor_0_1_output:148,xor_0_2:[21,177,179],xor_0_2_0:[163,177],xor_0_2_0_i:177,xor_0_2_0_o:[77,177],xor_0_2_10_o:77,xor_0_2_11_o:77,xor_0_2_13:177,xor_0_2_14:177,xor_0_2_14_i:177,xor_0_2_14_o:177,xor_0_2_15:177,xor_0_2_15_i:177,xor_0_2_15_o:177,xor_0_2_16_i:[77,177],xor_0_2_17_i:177,xor_0_2_1:[163,177],xor_0_2_1_i:177,xor_0_2_1_o:177,xor_0_2_26_i:77,xor_0_2_27_i:77,xor_0_2_2:177,xor_0_2_2_i:177,xor_0_2_30_i:177,xor_0_2_31_i:177,xor_0_2_62:163,xor_0_2_63:163,xor_0_2_7_o:77,xor_0_2_8_o:77,xor_0_2_9_o:77,xor_0_2_i:177,xor_0_2_input:149,xor_0_2_o:177,xor_0_2_output:149,xor_0_2_x0:177,xor_0_2_x10:177,xor_0_2_x11:177,xor_0_2_x12:177,xor_0_2_x13:177,xor_0_2_x14:177,xor_0_2_x15:177,xor_0_2_x16:177,xor_0_2_x17:177,xor_0_2_x18:177,xor_0_2_x19:177,xor_0_2_x1:177,xor_0_2_x20:177,xor_0_2_x21:177,xor_0_2_x22:177,xor_0_2_x23:177,xor_0_2_x24:177,xor_0_2_x25:177,xor_0_2_x26:177,xor_0_2_x27:177,xor_0_2_x28:177,xor_0_2_x29:177,xor_0_2_x2:177,xor_0_2_x30:177,xor_0_2_x31:177,xor_0_2_x3:177,xor_0_2_x4:177,xor_0_2_x5:177,xor_0_2_x6:177,xor_0_2_x7:177,xor_0_2_x8:177,xor_0_2_x9:177,xor_0_2_y0:177,xor_0_2_y10:177,xor_0_2_y11:177,xor_0_2_y12:177,xor_0_2_y13:177,xor_0_2_y14:177,xor_0_2_y15:177,xor_0_2_y1:177,xor_0_2_y2:177,xor_0_2_y3:177,xor_0_2_y4:177,xor_0_2_y5:177,xor_0_2_y6:177,xor_0_2_y7:177,xor_0_2_y8:177,xor_0_2_y9:177,xor_0_31:[23,24,152,156,177],xor_0_31_valu:[152,156],xor_0_31_word_0_class_bit_0:177,xor_0_31_word_0_class_bit_1:177,xor_0_32:177,xor_0_32_30:177,xor_0_32_31:177,xor_0_34:[152,156],xor_0_34_act:[152,156],xor_0_36_11:[30,31],xor_0_36_12:[30,31],xor_0_3_0:164,xor_0_3_1:164,xor_0_3_30:164,xor_0_3_31:164,xor_0_4:[21,179],xor_0_4_0_i:77,xor_0_4_10_i:77,xor_0_4_11_i:77,xor_0_4_13_o:156,xor_0_4_14_o:156,xor_0_4_15_o:156,xor_0_4_7_i:77,xor_0_4_8_i:77,xor_0_4_9_i:77,xor_0_4_o:156,xor_0_5:177,xor_0_5_0_i:177,xor_0_5_14:177,xor_0_5_14_o:177,xor_0_5_15:177,xor_0_5_15_class_bit_0:177,xor_0_5_15_class_bit_1:177,xor_0_5_15_o:177,xor_0_5_1_i:177,xor_0_6:163,xor_0_6_0:163,xor_0_6_1:163,xor_0_6_30:163,xor_0_6_31:163,xor_0_7:[151,162,164,177],xor_0_7_0:[151,162,164],xor_0_7_10:[151,162,164],xor_0_7_11:[151,162,164],xor_0_7_1:[151,162,164],xor_0_7_x0:177,xor_0_7_x10:177,xor_0_7_x11:177,xor_0_7_x12:177,xor_0_7_x13:177,xor_0_7_x14:177,xor_0_7_x15:177,xor_0_7_x16:177,xor_0_7_x17:177,xor_0_7_x18:177,xor_0_7_x19:177,xor_0_7_x1:177,xor_0_7_x20:177,xor_0_7_x21:177,xor_0_7_x22:177,xor_0_7_x23:177,xor_0_7_x2:177,xor_0_7_x3:177,xor_0_7_x4:177,xor_0_7_x5:177,xor_0_7_x6:177,xor_0_7_x7:177,xor_0_7_x8:177,xor_0_7_x9:177,xor_0_7_y0:177,xor_0_7_y10:177,xor_0_7_y11:177,xor_0_7_y1:177,xor_0_7_y2:177,xor_0_7_y3:177,xor_0_7_y4:177,xor_0_7_y5:177,xor_0_7_y6:177,xor_0_7_y7:177,xor_0_7_y8:177,xor_0_7_y9:177,xor_1_0:184,xor_1_10:26,xor_1_10_0_i:26,xor_1_10_0_o:26,xor_1_10_14_o:26,xor_1_10_15_o:26,xor_1_10_1_i:26,xor_1_10_1_o:26,xor_1_10_30_i:26,xor_1_10_31_i:26,xor_1_10_7_i:77,xor_1_10_8_i:77,xor_1_10_9_i:77,xor_1_14:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_1_1:184,xor_1_1_input:148,xor_1_1_output:148,xor_1_2_input:149,xor_1_2_output:149,xor_1_31_word_0_class:[152,156],xor_1_31_word_1_class:[152,156],xor_1_6_0:[152,156],xor_1_6_1:[152,156],xor_1_8_7_o:77,xor_1_8_8_o:77,xor_1_8_9_o:77,xor_2_10:[152,156],xor_2_10_13_o:62,xor_2_10_14:[152,156],xor_2_10_14_o:[62,67,75],xor_2_10_15:[152,156],xor_2_10_15_o:[62,67,75],xor_2_26:177,xor_2_7:4,xor_2_8:[152,156],xor_2_8_0:[152,156],xor_2_8_1:[152,156],xor_3_10_o:25,xor_as_boolean_funct:4,xor_boolean_funct:8,xor_compon:[4,23,24,177],xor_component1:[23,24],xor_component2:[23,24],xor_continuous_diffusion_analysi:9,xor_continuous_diffusion_analysis_two_word:9,xor_differenti:[0,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_differential_first_step:24,xor_differential_first_step_find_all_solut:24,xor_differential_one_solut:[19,20,21,22,23,24,25],xor_input1:[],xor_input2:[],xor_linear:[0,19,20,21,22,23,24,25,59,60,61,62,63,64,65,66,67,71,72,73,74,75,77,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xor_linear_one_solut:[19,20,21,22,23,24,25],xor_matrix_valu:96,xor_minizinc_constraint:177,xor_round_kei:85,xor_truncated_table_2:[23,24,177],xor_truncated_table_3:[23,177],xor_word:177,xor_wordwise_deterministic_truncated_xor_differential_constraint:177,xor_xor_differential_first_step_constraint:[23,24],xordiff:180,xore:[10,11],xtea:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,180],xtea_block_ciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],xteablockciph:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],y0:17,y1:17,y2:17,y3:17,y4:17,y5:17,y6:17,y7:17,y:[0,9,16,17,33,70,76,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149,168,177,182,190],y_3:[70,76],y_i:9,yang:182,yc2004:182,yice:[63,70,71],yices_pars:71,yield:177,you:[26,32,33,55,71,80,82,111,180],yu:182,z0:17,z1:17,z2:17,z3:[17,71,72,73,74,75,77],z3_parser:71,z4:17,z5:17,z6:17,z7:17,z:[16,17,33,48,70,112,114,182],zentrum:182,zero:[0,4,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correl:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zero_correlation_linear_search:[0,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,149],zeta:[177,182],zeta_in_1:48,zeta_in_2:48,zetax0:177,zetax1:177,zuc:180,zuc_nonlinear_f:147,zuc_stream_ciph:147,zucstreamciph:147,zz:[17,54]},titles:["Cipher","Algebraic tests","Avalanche tests","Code generator","Component analysis tests","Continuous tests","Evaluator","Generic bit based c functions","Generic functions","Generic functions continuous diffusion analysis","Generic functions vectorized bit","Generic functions vectorized byte","Generic word based c functions","Graph generator","Inverse cipher","Algebraic model","Boolean polynomial ring","Constraints","Usefulfunctions","Cp model","Cp cipher model","Cp deterministic truncated xor differential model","Cp xor differential model","Cp xor differential number of active sboxes model","Cp xor differential trail search fixing number of active sboxes model","Cp xor linear model","Milp model","Milp bitwise deterministic truncated xor differential model","Milp bitwise impossible xor differential model","Milp cipher model","Milp wordwise deterministic truncated xor differential model","Milp wordwise impossible xor differential model","Milp xor differential model","Milp xor linear model","Tea cipher xordiff model","Config","Dictionary containing truncated input pattern inequalities","Dictionary containing truncated mds inequalities","Dictionary containing truncated xor inequalities between n input bits","Dictionary containing xor inequalities between n input bits","Dictionary that contains inequalities for large sboxes","Dictionary that contains inequalities for large sboxes xor linear","Dictionary that contains inequalities for sboxes with undisturbed bits","Dictionary that contains inequalities for small sboxes","Dictionary that contains inequalities for small sboxes xor linear","Generate inequalities for and operation 2 input bits","Generate inequalities for large sboxes","Generate inequalities for wordwise truncated mds matrices","Generate inequalities for wordwise truncated xor with n input bits","Generate inequalities for xor with n input bits","Generate sbox inequalities for trail search","Generate undisturbed bits inequalities for sboxes","Milp name mappings","Mzn predicates","Utils","Minizinc model","Minizinc cipher model","Minizinc deterministic truncated xor differential model","Minizinc xor differential model","Cms cipher model","Cms deterministic truncated xor differential model","Cms xor differential model","Cms xor linear model","Sat model","Sat cipher model","Sat deterministic truncated xor differential model","Sat xor differential model","Sat xor linear model","Mzn predicates","N window heuristic helper","Utils","Smt model","Smt cipher model","Smt deterministic truncated xor differential model","Smt xor differential model","Smt xor linear model","Utils","Utils","Neural network tests","Dataset generator","Dieharder statistical tests","Input data example","Nist statistical tests","Tester","Aes block cipher","Bea1 block cipher","Constant block cipher","Des block cipher","Des exact key length block cipher","Fancy block cipher","Hight block cipher","Identity block cipher","Kasumi block cipher","Lblock block cipher","Lea block cipher","Lowmc block cipher","Lowmc generate matrices","Midori block cipher","Present block cipher","Qarmav2 block cipher","Raiden block cipher","Rc5 block cipher","Simon block cipher","Skinny block cipher","Sparx block cipher","Speck block cipher","Tea block cipher","Threefish block cipher","Twofish block cipher","Xtea block cipher","Blake2 hash function","Blake hash function","Md5 hash function","Sha1 hash function","Sha2 hash function","Whirlpool hash function","Ascon permutation","Ascon sbox sigma no matrix permutation","Ascon sbox sigma permutation","Chacha permutation","Gift permutation","Gift sbox permutation","Gimli permutation","Gimli sbox permutation","Grain core permutation","Keccak invertible permutation","Keccak permutation","Keccak sbox permutation","Photon permutation","Salsa permutation","Sparkle permutation","Spongent pi fsr permutation","Spongent pi permutation","Spongent pi precomputation permutation","Tinyjambu 32bits word permutation","Tinyjambu fsr 32bits word permutation","Tinyjambu permutation","Util","Xoodoo invertible permutation","Xoodoo permutation","Xoodoo sbox permutation","A5 1 stream cipher","Bivium stream cipher","Bluetooth stream cipher e0","Chacha stream cipher","Snow3g stream cipher","Trivium stream cipher","Zuc stream cipher","Toyspn1","Toyspn2","Component","And component","Cipher output component","Concatenate component","Constant component","Fsr component","Intermediate output component","Linear layer component","Mix column component","Modadd component","Modsub component","Modular component","Multi input non linear logical operator component","Not component","Or component","Permutation component","Reverse component","Rotate component","Sbox component","Shift component","Shift rows component","Sigma component","Theta keccak component","Theta xoodoo component","Variable rotate component","Variable shift component","Word permutation component","Xor component","Compound xor differential cipher","Editor","CLAASP: Cryptographic Library for Automated Analysis of Symmetric Primitives","Input","References","Round","Rounds","Integer","Integer functions","Sage scripts","Sequence operations","Templates","Utils"],titleterms:{"1":141,"2":45,"32bit":[134,135],"boolean":[16,70],"byte":11,"function":[7,8,9,10,11,12,110,111,112,113,114,115,180,186],And:151,Not:163,Or:164,a5:141,activ:[23,24],ae:84,algebra:[1,15,180],analysi:[4,9,180],ascon:[116,117,118],autom:180,avalanch:2,base:[7,12],bea1:85,between:[38,39],bit:[7,10,38,39,42,45,48,49,51],bitwis:[27,28],bivium:142,blake2:110,blake:111,block:[84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,180],bluetooth:143,build:70,c:[7,12],chacha:[119,144],cipher:[0,14,20,29,34,56,59,60,61,62,63,64,71,72,84,85,86,87,88,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,109,141,142,143,144,145,146,147,152,178,180],claasp:180,cm:[59,60,61,62,180],cnf:70,code:3,column:158,compon:[4,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,180],compound:178,concaten:153,config:35,constant:[86,154],constraint:17,contain:[36,37,38,39,40,41,42,43,44],continu:[5,9],core:124,cp:[19,20,21,22,23,24,25,180],cryptograph:180,data:81,dataset:79,de:[87,88],determinist:[21,27,30,57,60,65,73],dictionari:[36,37,38,39,40,41,42,43,44],diehard:80,differenti:[21,22,23,24,27,28,30,31,32,57,58,60,61,65,66,73,74,178],diffus:9,direct:70,e0:143,editor:179,equal:70,evalu:6,exact:88,exampl:81,fanci:89,fix:24,fsr:[131,135,155],gener:[3,7,8,9,10,11,12,13,45,46,47,48,49,50,51,70,79,96,180],gift:[120,121],gimli:[122,123],grain:124,graph:13,hash:[110,111,112,113,114,115,180],helper:69,heurist:69,hight:90,ident:91,imposs:[28,31],indic:180,inequ:[36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],inform:180,input:[36,38,39,45,48,49,81,162,181],integ:[185,186],intermedi:156,invers:14,invert:[125,138],kasumi:92,keccak:[125,126,127,172],kei:88,larg:[40,41,46],layer:157,lblock:93,lea:94,length:88,librari:180,linear:[25,33,41,44,62,67,75,157,162],logic:162,lowmc:[95,96],map:52,matric:[47,96],matrix:117,md5:112,md:[37,47],midori:97,milp:[26,27,28,29,30,31,32,33,52,180],minizinc:[55,56,57,58,180],mix:158,modadd:159,model:[15,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,55,56,57,58,59,60,61,62,63,64,65,66,67,71,72,73,74,75,180],modsub:160,modul:180,modular:161,multi:162,mzn:[53,68],n:[38,39,48,49,69],name:52,network:78,neural:78,nist:82,non:162,number:[23,24],oper:[45,162,188],output:[152,156],pattern:36,permut:[116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,138,139,140,165,176,180],photon:128,pi:[131,132,133],polynomi:16,precomput:133,predic:[53,68],present:98,primit:180,qarmav2:99,raiden:100,rc5:101,refer:182,repres:70,revers:166,ring:16,rotat:[167,174],round:[183,184],row:170,run:70,sage:187,salsa:129,sat:[63,64,65,66,67,70,180],sbox:[23,24,40,41,42,43,44,46,50,51,117,118,121,123,127,140,168],script:187,search:[24,50],sequenc:188,sha1:113,sha2:114,shift:[169,170,175],sigma:[117,118,171],simon:102,skinni:103,small:[43,44],smt:[71,72,73,74,75,180],snow3g:145,solver:[63,70],sparkl:130,sparx:104,speck:105,spongent:[131,132,133],standard:[63,71],statist:[80,82,180],stream:[141,142,143,144,145,146,147,180],symmetr:180,tabl:180,tea:[34,106],templat:189,test:[1,2,4,5,78,80,82,180],tester:83,theta:[172,173],threefish:107,tinyjambu:[134,135,136],tmp:180,toi:180,toyspn1:148,toyspn2:149,trail:[24,50],trivium:146,truncat:[21,27,30,36,37,38,47,48,57,60,65,73],twofish:108,undisturb:[42,51],usefulfunct:18,util:[54,70,76,77,137,180,190],variabl:[174,175],vector:[10,11],whirlpool:115,window:69,word:[12,134,135,176],wordwis:[30,31,47,48],xoodoo:[138,139,140,173],xor:[21,22,23,24,25,27,28,30,31,32,33,38,39,41,44,48,49,57,58,60,61,62,65,66,67,73,74,75,177,178],xordiff:34,xtea:109,zuc:147}}) \ No newline at end of file From 60d06767ecc1d9269c5fd28c1358c4a7d48140c8 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Tue, 27 Feb 2024 16:18:09 +0400 Subject: [PATCH 125/179] polish code --- claasp/cipher_modules/avalanche_tests.py | 1 - 1 file changed, 1 deletion(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index f0c1a8c2..b24e94ae 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -21,7 +21,6 @@ import math import numpy as np from math import log - from claasp.cipher_modules import evaluator from claasp.name_mappings import INTERMEDIATE_OUTPUT, CIPHER_OUTPUT import matplotlib.pyplot as plt From abe2215a9ac924ac1f1721383cafe60866c3ea59 Mon Sep 17 00:00:00 2001 From: sharwan Date: Tue, 27 Feb 2024 15:09:09 +0100 Subject: [PATCH 126/179] added a new line in the doctests and underscore in the assignment of self._cipher --- claasp/cipher_modules/algebraic_tests.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/claasp/cipher_modules/algebraic_tests.py b/claasp/cipher_modules/algebraic_tests.py index 49809b32..d8a25c81 100644 --- a/claasp/cipher_modules/algebraic_tests.py +++ b/claasp/cipher_modules/algebraic_tests.py @@ -25,6 +25,7 @@ class AlgebraicTests: Construct an instance of Algebraic Tests of the cipher. EXAMPLES:: + sage: from claasp.cipher_modules.algebraic_tests import AlgebraicTests sage: from claasp.ciphers.toys.toyspn1 import ToySPN1 sage: toyspn = ToySPN1(number_of_rounds=2) @@ -42,7 +43,7 @@ class AlgebraicTests: """ def __init__(self, cipher): - self.cipher = cipher + self._cipher = cipher def algebraic_tests(self, timeout=60): from sage.structure.sequence import Sequence @@ -55,8 +56,8 @@ def algebraic_tests(self, timeout=60): F = [] - algebraic_model = AlgebraicModel(self.cipher) - for round_number in range(self.cipher.number_of_rounds): + algebraic_model = AlgebraicModel(self._cipher) + for round_number in range(self._cipher.number_of_rounds): F += algebraic_model.polynomial_system_at_round(round_number) + \ algebraic_model.connection_polynomials_at_round(round_number) Fseq = Sequence(F) @@ -80,7 +81,7 @@ def algebraic_tests(self, timeout=60): tests_up_to_round.append(result) input_parameters = { - "cipher.id": self.cipher.id, + "cipher.id": self._cipher.id, "timeout": timeout, "test_name": "algebraic_tests" } From 7a2986666b146ec7c0f8e8da8e199fd852cbc5b0 Mon Sep 17 00:00:00 2001 From: cs Date: Tue, 27 Feb 2024 21:14:22 +0400 Subject: [PATCH 127/179] FEATURE/Add: create the A5/2 stream cipher --- claasp/ciphers/stream_ciphers/a5_1_stream_cipher.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/claasp/ciphers/stream_ciphers/a5_1_stream_cipher.py b/claasp/ciphers/stream_ciphers/a5_1_stream_cipher.py index e6002818..931af7cf 100644 --- a/claasp/ciphers/stream_ciphers/a5_1_stream_cipher.py +++ b/claasp/ciphers/stream_ciphers/a5_1_stream_cipher.py @@ -98,8 +98,6 @@ def __init__(self, key_bit_size=64, frame_bit_size=22, number_of_normal_clocks_a number_of_normal_clocks_at_initialization=number_of_normal_clocks_at_initialization, regs_size=regs_size) - # self.add_cipher_output_component(regs.id, [[i for i in range(regs_size)]], regs_size) - fsr_description = [[[REGISTERS[i][BIT_LENGTH], REGISTERS[i][TAPPED_BITS], REGISTERS[i][CLOCK_POLYNOMIAL]] for i in range(len(REGISTERS))], 1, 1] cipher_output=[] From d6217e610f1cd289b84ebf2e12b41b23497684a0 Mon Sep 17 00:00:00 2001 From: davidgerault Date: Wed, 28 Feb 2024 11:29:11 +0400 Subject: [PATCH 128/179] Refactored code, added examples where needed --- claasp/cipher_modules/neural_network_tests.py | 390 ++++++++++++------ 1 file changed, 255 insertions(+), 135 deletions(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 6ee19cda..8c34cc71 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -23,8 +23,11 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, rounds_to_train=[]): """ - Runs the test defined in [BR2021]. - Return a python dictionary that contains the accuracies corresponding to each round. + Runs the test defined in [BR2021]; trains a MLP to distinguish samples of the form + input || output from random. The test is run once for each setting, defined by the types of inputs and outputs. + The input is taken among the inputs defined by the cipher, and output is chosen between cipher output, + round output (one setting for each round output), or round key output (one setting per round key). + Return a python dictionary that contains the accuracies corresponding to each setting. INPUT: @@ -35,9 +38,29 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: speck(number_of_rounds=22).neural_network_blackbox_distinguisher_tests(nb_samples = 10) # random - + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: NeuralNetworkTests(SpeckBlockCipher(number_of_rounds=2)).neural_network_blackbox_distinguisher_tests(nb_samples=10) + {'input_parameters': {'test_name': 'neural_network_blackbox_distinguisher_tests', + 'number_of_samples': 10, + 'hidden_layers': [32, 32, 32], + 'number_of_epochs': 10}, + 'test_results': {'plaintext': {'round_key_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [1.0, + 0.0], + 'component_ids': ['intermediate_output_0_5', + 'intermediate_output_1_11']}]}, + 'round_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [0.0], + 'component_ids': ['intermediate_output_0_6']}]}, + 'cipher_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [1.0], + 'component_ids': ['cipher_output_1_12']}]}}, + 'key': {'round_key_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [0.0, + 0.0], + 'component_ids': ['intermediate_output_0_5', + 'intermediate_output_1_11']}]}, + 'round_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [0.0], + 'component_ids': ['intermediate_output_0_6']}]}, + 'cipher_output': {'neural_network_blackbox_distinguisher': [{'accuracies': [1.0], + 'component_ids': ['cipher_output_1_12']}]}}}} """ results = {"input_parameters": { "test_name": "neural_network_blackbox_distinguisher_tests", @@ -57,20 +80,20 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, base_inputs = [secrets.randbits(i) for i in self.cipher.inputs_bit_size] base_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] - partial_result, ds, component_output_ids = self.create_structure(base_output, test_name, partial_result) - self.update_component_output_ids(component_output_ids) - self.update_blackbox_distinguisher_vectorized_tests_ds(base_inputs, base_output, ds, index, labels, - nb_samples) - self.update_partial_result(component_output_ids, ds, index, test_name, - labels, number_of_epochs, partial_result, 0, blackbox=True, - rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) + partial_result, ds, component_output_ids = self._create_structure(base_output, test_name, partial_result) + self._update_component_output_ids(component_output_ids) + self._update_blackbox_distinguisher_vectorized_tests_ds(base_inputs, base_output, ds, index, labels, + nb_samples) + self._update_partial_result(component_output_ids, ds, index, test_name, + labels, number_of_epochs, partial_result, 0, blackbox=True, + rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) results["test_results"][input_tag].update(partial_result) return results - def update_partial_result(self, component_output_ids, ds, index, test_name, labels, number_of_epochs, - partial_result, diff, blackbox=True, rounds_to_train=[], hidden_layers = [32,32,32]): + def _update_partial_result(self, component_output_ids, ds, index, test_name, labels, number_of_epochs, + partial_result, diff, blackbox=True, rounds_to_train=[], hidden_layers = [32,32,32]): # noinspection PyUnresolvedReferences input_lengths = self.cipher.inputs_bit_size @@ -116,8 +139,8 @@ def update_partial_result(self, component_output_ids, ds, index, test_name, labe tmp_dict["input_difference_value"] = hex(diff) partial_result[k][test_name].append(tmp_dict) - def update_blackbox_distinguisher_vectorized_tests_ds(self, base_inputs, base_output, ds, index, labels, - nb_samples): + def _update_blackbox_distinguisher_vectorized_tests_ds(self, base_inputs, base_output, ds, index, labels, + nb_samples): input_lengths = self.cipher.inputs_bit_size random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) # cipher_output = base_output @@ -145,13 +168,13 @@ def update_blackbox_distinguisher_vectorized_tests_ds(self, base_inputs, base_ou full_output = np.append(base_input_index_unpacked, cipher_output_unpacked, axis=1) ds[k][1][j].extend(list(full_output)) - def update_component_output_ids(self, component_output_ids): + def _update_component_output_ids(self, component_output_ids): for k in component_output_ids: for component in self.cipher.get_all_components(): if k in component.description: component_output_ids[k].append(component.id) - def create_structure(self, base_output, test_name, partial_result): + def _create_structure(self, base_output, test_name, partial_result): ds = {} component_output_ids = {} @@ -177,7 +200,13 @@ def create_structure(self, base_output, test_name, partial_result): def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[[0x400000], [0xa]], rounds_to_train=[]): """ - Runs the test defined in [BHPR2021]. + Runs the test defined in [BHPR2021]; for each input i to the cipher and difference delta in diff[i], a dataset + of pairs X0, X1 is created, such that the input i in X1 is equal to the input i in X0 XORed with delta. The + pairs are then encrypted to C0, C1, and a simple MLP is trained to distinguish C0, C1 pairs from pairs of + random values R0, R1. + The test is run once for each setting, defined by the difference, and the types of inputs and outputs. + The input is taken among the inputs defined by the cipher, and output is chosen between cipher output, + round output (one setting for each round output), or round key output (one setting per round key). Return a python dictionary that contains the accuracies corresponding to each round. INPUT: @@ -191,8 +220,40 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd EXAMPLES:: - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher as speck - sage: #speck(number_of_rounds=22).neural_network_differential_distinguisher_tests(nb_samples = 10) # random + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: NeuralNetworkTests(SpeckBlockCipher(number_of_rounds=2)).neural_network_differential_distinguisher_tests(nb_samples=10) + {'input_parameters': {'test_name': 'neural_network_differential_distinguisher_tests', + 'number_of_samples': 10, + 'input_differences': [[4194304], [10]], + 'hidden_layers': [32, 32, 32], + 'min_accuracy_value': 0, + 'max_accuracy_value': 1, + 'output_bit_size': 32, + 'number_of_epochs': 10, + 'plaintext_input_bit_size': 32, + 'key_input_bit_size': 64}, + 'test_results': {'plaintext': {'round_key_output': {'neural_network_differential_distinguisher': [{'accuracies': [1.0, + 1.0], + 'component_ids': ['intermediate_output_0_5', 'intermediate_output_1_11'], + 'input_difference_value': '0x400000'}]}, + 'round_output': {'neural_network_differential_distinguisher': [{'accuracies': [0.0], + 'component_ids': ['intermediate_output_0_6'], + 'input_difference_value': '0x400000'}]}, + 'cipher_output': {'neural_network_differential_distinguisher': [{'accuracies': [0.0], + 'component_ids': ['cipher_output_1_12'], + 'input_difference_value': '0x400000'}]}}, + 'key': {'round_key_output': {'neural_network_differential_distinguisher': [{'accuracies': [1.0, + 1.0], + 'component_ids': ['intermediate_output_0_5', 'intermediate_output_1_11'], + 'input_difference_value': '0xa'}]}, + 'round_output': {'neural_network_differential_distinguisher': [{'accuracies': [1.0], + 'component_ids': ['intermediate_output_0_6'], + 'input_difference_value': '0xa'}]}, + 'cipher_output': {'neural_network_differential_distinguisher': [{'accuracies': [1.0], + 'component_ids': ['cipher_output_1_12'], + 'input_difference_value': '0xa'}]}}}} + """ results = {"input_parameters": { "test_name": "neural_network_differential_distinguisher_tests", @@ -218,16 +279,16 @@ def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidd base_output = evaluator.evaluate(self.cipher, base_inputs, intermediate_output=True)[1] partial_result = {} for d in diff[index]: - partial_result, ds, component_output_ids = self.create_structure(base_output, test_name, partial_result) - self.update_component_output_ids(component_output_ids) - self.update_distinguisher_vectorized_tests_ds(base_inputs, d, ds, index, labels, nb_samples) - self.update_partial_result(component_output_ids, ds, index, test_name, labels, - number_of_epochs, partial_result, d, blackbox=False, - rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) + partial_result, ds, component_output_ids = self._create_structure(base_output, test_name, partial_result) + self._update_component_output_ids(component_output_ids) + self._update_distinguisher_vectorized_tests_ds(base_inputs, d, ds, index, labels, nb_samples) + self._update_partial_result(component_output_ids, ds, index, test_name, labels, + number_of_epochs, partial_result, d, blackbox=False, + rounds_to_train=rounds_to_train, hidden_layers=hidden_layers) results["test_results"][it] = partial_result return results - def update_distinguisher_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): + def _update_distinguisher_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): input_lengths = self.cipher.inputs_bit_size for i in range(nb_samples): base_inputs[index] = secrets.randbits(input_lengths[index]) @@ -249,7 +310,7 @@ def update_distinguisher_tests_ds(self, base_inputs, d, ds, index, labels, nb_sa list(bin(secrets.randbits(ds[k][0]))[2:].rjust(ds[k][0], '0')))), dtype=np.float32)) - def update_distinguisher_vectorized_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): + def _update_distinguisher_vectorized_tests_ds(self, base_inputs, d, ds, index, labels, nb_samples): input_lengths = self.cipher.inputs_bit_size random_labels_size = nb_samples - np.count_nonzero(np.array(labels)) @@ -282,11 +343,13 @@ def update_distinguisher_vectorized_tests_ds(self, base_inputs, d, ds, index, la full_output = np.append(cipher_output_unpacked, other_output_unpacked, axis=1) ds[k][1][j].extend(list(full_output)) - def integer_to_np(self, val, number_of_bits): + def _integer_to_np(self, val, number_of_bits): return np.frombuffer(int(val).to_bytes(length=number_of_bits // 8, byteorder='big'), dtype=np.uint8).reshape(-1, 1) def get_differential_dataset(self, input_differences, number_of_rounds, samples=10 ** 7): + class RoundNumberTooHigh(Exception): + pass from os import urandom inputs_0 = [] inputs_1 = [] @@ -296,16 +359,27 @@ def get_differential_dataset(self, input_differences, number_of_rounds, samples= inputs_0.append(np.frombuffer(urandom(samples * (self.cipher.inputs_bit_size[i] // 8)), dtype=np.uint8).reshape(-1, samples)) # requires input size to be a multiple of 8 - inputs_1.append(inputs_0[-1] ^ self.integer_to_np(input_differences[i], self.cipher.inputs_bit_size[i])) + inputs_1.append(inputs_0[-1] ^ self._integer_to_np(input_differences[i], self.cipher.inputs_bit_size[i])) inputs_1[-1][:, y == 0] ^= np.frombuffer(urandom(num_rand_samples * self.cipher.inputs_bit_size[i] // 8), dtype=np.uint8).reshape(-1, num_rand_samples) - C0 = np.unpackbits( - self.cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['round_output'][number_of_rounds - 1], - axis=1) - C1 = np.unpackbits( - self.cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['round_output'][number_of_rounds - 1], - axis=1) + if number_of_rounds < self.cipher.number_of_rounds: + C0 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['round_output'][number_of_rounds - 1], + axis=1) + C1 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['round_output'][number_of_rounds - 1], + axis=1) + elif number_of_rounds == self.cipher.number_of_rounds: + C0 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_0, intermediate_outputs=True)['cipher_output'][0], + axis=1) + C1 = np.unpackbits( + self.cipher.evaluate_vectorized(inputs_1, intermediate_outputs=True)['cipher_output'][0], + axis=1) + else: + raise RoundNumberTooHigh("The number of rounds required for the differential dataset is larger than the number of rounds of the" + "cipher instance.") x = np.hstack([C0, C1]) return x, y @@ -315,44 +389,19 @@ def get_neural_network(self, network_name, input_size, word_size=None, depth=1): if word_size is None or word_size == 0: print("Word size not specified for ", network_name, ", defaulting to ciphertext size...") word_size = self.cipher.output_bit_size - neural_network = self.make_resnet(word_size=word_size, input_size=input_size, depth=depth) + neural_network = self._make_resnet(word_size=word_size, input_size=input_size, depth=depth) elif network_name == 'dbitnet': - neural_network = self.make_dbitnet(input_size=input_size) + neural_network = self._make_dbitnet(input_size=input_size) neural_network.compile(optimizer=Adam(amsgrad=True), loss='mse', metrics=['acc']) return neural_network - def make_checkpoint(self, datei): + def _make_checkpoint(self, datei): res = ModelCheckpoint(datei, monitor='val_loss', save_best_only=True) return res - def train_neural_distinguisher_(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1): - acc = 1 - bs = 5000 - x, y = data_generator(samples=training_samples, nr=starting_round) - x_eval, y_eval = data_generator(samples=testing_samples, nr=starting_round) - h = neural_network.fit(x, y, epochs=int(num_epochs), batch_size=bs, validation_data=(x_eval, y_eval)) - acc = np.max(h.history["val_acc"]) - print(f'Validation accuracy at {starting_round} rounds :{acc}') - return acc - def neural_staged_training(self, data_generator, starting_round, neural_network=None, training_samples=10 ** 7, - testing_samples=10 ** 6, num_epochs=1): - acc = 1 - nr = starting_round - # threshold at 10 sigma - threshold = 0.5 + 10 * sqrt(testing_samples // 4) / testing_samples - accuracies = {} - while acc >= threshold and nr < self.cipher.number_of_rounds: - # acc = train_neural_distinguisher(cipher, data_generator, nr, neural_network, training_samples, testing_samples, - # num_epochs) - acc = self.train_neural_distinguisher_(data_generator, nr, neural_network, training_samples, testing_samples, - num_epochs) - accuracies[nr] = acc - nr += 1 - return accuracies def train_neural_distinguisher(self, data_generator, starting_round, neural_network, training_samples=10 ** 7, - testing_samples=10 ** 6, epochs=5, pipeline=True): + testing_samples=10 ** 6, epochs=5, pipeline=True, save_prefix=None): """ Trains a neural distinguisher for the data generated by the data_generator function, using the provided neural network, at round starting_rounds. If pipeline is set to True, retrains the distinguisher for one more round, as long as the validation accuracy remains significant. @@ -370,26 +419,85 @@ def train_neural_distinguisher(self, data_generator, starting_round, neural_netw - ``pipeline`` -- **boolean**; (default: `True`) If False, only trains for starting_round. If True, increments starting_round and retrain the model as long as the accuracy is statistically significant. - ``verbose`` -- **boolean** (default: `False`); verbosity + - ``save_prefix`` -- **string** (default: `None`); the folder and file name to store the trained neural distinguishers; they will be saved + under f'save_prefix{nr}.h5', where nr is the number of rounds; if None, then the trained neural networks are not saved. EXAMPLES:: + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network - sage: cipher = SpeckBlockCipher() + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: speck = SpeckBlockCipher() + sage: tester = NeuralNetworkTests(speck) sage: input_differences = [0x400000, 0] - sage: data_generator = lambda nr, samples: get_differential_dataset(cipher, input_differences, number_of_rounds = nr, samples = samples) - sage: neural_network = get_neural_network('gohr_resnet', input_size = 64) - sage: cipher.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network) + sage: data_generator = lambda nr, samples: tester.get_differential_dataset(input_differences, number_of_rounds = nr, samples = samples) + sage: neural_network = tester.get_neural_network('gohr_resnet', input_size = 64) + sage: tester.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, + training_samples = 1000, testing_samples=1000) + Epoch 1/5 + 1/1 [==============================] - 2s 2s/step - loss: 0.3249 - acc: 0.4930 - val_loss: 0.2640 - val_acc: 0.4950 + Epoch 2/5 + 1/1 [==============================] - 0s 102ms/step - loss: 0.2797 - acc: 0.5570 - val_loss: 0.2624 - val_acc: 0.4950 + Epoch 3/5 + 1/1 [==============================] - 0s 102ms/step - loss: 0.2435 - acc: 0.6080 - val_loss: 0.2609 - val_acc: 0.4950 + Epoch 4/5 + 1/1 [==============================] - 0s 105ms/step - loss: 0.2142 - acc: 0.6640 - val_loss: 0.2595 - val_acc: 0.4930 + Epoch 5/5 + 1/1 [==============================] - 0s 102ms/step - loss: 0.1896 - acc: 0.7090 - val_loss: 0.2583 - val_acc: 0.4930 + Validation accuracy at 5 rounds :0.4950000047683716 + {5: 0.4950000047683716} + sage: sage: tester.train_neural_distinguisher(data_generator, starting_round = 5, neural_network = neural_network, training_samples = 10**5, testing_samples=10**4) + Epoch 1/5 + 20/20 [==============================] - 7s 337ms/step - loss: 0.1979 - acc: 0.7259 - val_loss: 0.2284 - val_acc: 0.7019 + Epoch 2/5 + 20/20 [==============================] - 7s 338ms/step - loss: 0.1586 - acc: 0.7936 - val_loss: 0.2274 - val_acc: 0.7083 + Epoch 3/5 + 20/20 [==============================] - 7s 361ms/step - loss: 0.1260 - acc: 0.8389 - val_loss: 0.2298 - val_acc: 0.5813 + Epoch 4/5 + 20/20 [==============================] - 7s 349ms/step - loss: 0.1089 - acc: 0.8560 - val_loss: 0.2334 - val_acc: 0.5309 + Epoch 5/5 + 20/20 [==============================] - 7s 364ms/step - loss: 0.1040 - acc: 0.8633 - val_loss: 0.2320 - val_acc: 0.5244 + Validation accuracy at 5 rounds :0.708299994468689 + Epoch 1/5 + 20/20 [==============================] - 7s 363ms/step - loss: 0.2627 - acc: 0.6160 - val_loss: 0.2529 - val_acc: 0.5367 + Epoch 2/5 + 20/20 [==============================] - 7s 362ms/step - loss: 0.2214 - acc: 0.6630 - val_loss: 0.2410 - val_acc: 0.6018 + Epoch 3/5 + 20/20 [==============================] - 7s 360ms/step - loss: 0.2123 - acc: 0.6765 - val_loss: 0.2378 - val_acc: 0.6105 + Epoch 4/5 + 20/20 [==============================] - 7s 331ms/step - loss: 0.2079 - acc: 0.6857 - val_loss: 0.2351 - val_acc: 0.6217 + Epoch 5/5 + 20/20 [==============================] - 7s 331ms/step - loss: 0.2050 - acc: 0.6894 - val_loss: 0.2334 - val_acc: 0.6277 + Validation accuracy at 6 rounds :0.6276999711990356 + Epoch 1/5 + 20/20 [==============================] - 7s 337ms/step - loss: 0.2678 - acc: 0.4966 - val_loss: 0.2616 - val_acc: 0.4959 + Epoch 2/5 + 20/20 [==============================] - 7s 335ms/step - loss: 0.2537 - acc: 0.5215 - val_loss: 0.2614 - val_acc: 0.4962 + Epoch 3/5 + 20/20 [==============================] - 7s 342ms/step - loss: 0.2505 - acc: 0.5366 - val_loss: 0.2588 - val_acc: 0.4978 + Epoch 4/5 + 20/20 [==============================] - 7s 357ms/step - loss: 0.2487 - acc: 0.5496 - val_loss: 0.2567 - val_acc: 0.4963 + Epoch 5/5 + 20/20 [==============================] - 7s 354ms/step - loss: 0.2473 - acc: 0.5592 - val_loss: 0.2562 - val_acc: 0.4981 + Validation accuracy at 7 rounds :0.49810001254081726 + {5: 0.708299994468689, 6: 0.6276999711990356, 7: 0.49810001254081726} """ - if pipeline: - # from claasp.cipher_modules.neural_network_tests import neural_staged_training - acc = self.neural_staged_training(data_generator, starting_round, neural_network, - training_samples, - testing_samples, epochs) - else: - # from claasp.cipher_modules.neural_network_tests import train_neural_distinguisher - acc = self.train_neural_distinguisher_(data_generator, starting_round, - neural_network, training_samples, - testing_samples, epochs) + acc = {} + bs = 5000 + nr = starting_round + threshold = 0.5 + 10 * sqrt(testing_samples // 4) / testing_samples + while ((nr == starting_round) or (pipeline and (acc[nr-1] >= threshold))) and (nr < self.cipher.number_of_rounds): + x, y = data_generator(samples=training_samples, nr=nr) + x_eval, y_eval = data_generator(samples=testing_samples, nr=nr) + if save_prefix is None: + h = neural_network.fit(x, y, epochs=int(epochs), batch_size=bs, + validation_data=(x_eval, y_eval)) + else: + h = neural_network.fit(x, y, epochs=int(epochs), batch_size=bs, + validation_data=(x_eval, y_eval), + callbacks=[self.make_checkpoint(save_prefix + str(nr)+'.h5')]) + acc[nr] = np.max(h.history["val_acc"]) + print(f'Validation accuracy at {nr} rounds :{acc[nr]}') + nr +=1 return acc def train_gohr_neural_distinguisher(self, input_difference, number_of_rounds, depth=1, word_size=0, @@ -412,25 +520,26 @@ def train_gohr_neural_distinguisher(self, input_difference, number_of_rounds, de EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: speck = SpeckBlockCipher() + sage: tester = NeuralNetworkTests(speck) sage: input_differences = [0x400000, 0] sage: number_of_rounds = 5 - sage: cipher.train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size = 16, number_of_epochs = 1) - 2000/2000 [==============================] - 294s 146ms/step - loss: 0.0890 - acc: 0.8876 - val_loss: 0.0734 - val_acc: 0.9101 - Validation accuracy at 5 rounds :0.9101160168647766 - 0.9101160168647766 + sage: tester.train_gohr_neural_distinguisher(input_differences, number_of_rounds, training_samples = 10**5, testing_samples = 10**4, number_of_epochs = 1) + Word size not specified for gohr_resnet , defaulting to ciphertext size... + 20/20 [==============================] - 8s 335ms/step - loss: 0.2041 - acc: 0.6909 - val_loss: 0.2476 - val_acc: 0.5528 + Validation accuracy at 5 rounds :0.5527999997138977 + {5: 0.5527999997138977} """ def data_generator(nr, samples): return self.get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples) + samples=samples) - # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, \ - # train_neural_distinguisher, get_neural_network input_size = self.cipher.output_bit_size * 2 neural_network = self.get_neural_network('gohr_resnet', input_size = input_size, depth=depth, word_size=word_size) - return self.train_neural_distinguisher_(data_generator, number_of_rounds, neural_network, training_samples, - testing_samples, num_epochs=number_of_epochs) + return self.train_neural_distinguisher(data_generator, number_of_rounds, neural_network, training_samples, + testing_samples, epochs=number_of_epochs, pipeline = False) def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** 4, optimizer_generations=50, training_samples=10 ** 7, testing_samples=10 ** 6, number_of_epochs=40, verbose=False, neural_net = 'dbitnet', save_prefix=None): @@ -459,15 +568,38 @@ def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() - sage: cipher.run_autond_pipeline() + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: speck = SpeckBlockCipher() + sage: tester = NeuralNetworkTests(speck) + sage: tester.run_autond_pipeline(difference_positions=[True, False], optimizer_samples=10 ** 3, optimizer_generations=5, + training_samples=10 ** 5, testing_samples=10 ** 5, number_of_epochs=1, verbose=True, + neural_net = 'dbitnet', save_prefix=None) + Generation 0/5, 1625 nodes explored, 32 current, best is ['0x305ed470', '0x305e5470', '0x3e020058', '0x80fbf20'] with [0.42265625 0.468875 0.47771875 0.5191875 ] + Generation 1/5, 2169 nodes explored, 32 current, best is ['0x100', '0x20000000', '0x2000000', '0x8000'] with [1.69571875 2.09790625 2.1274375 2.4663125 ] + Generation 2/5, 2728 nodes explored, 32 current, best is ['0x40000000', '0x20000000', '0x2000000', '0x8000'] with [2.01571875 2.09790625 2.1274375 2.4663125 ] + Generation 3/5, 3137 nodes explored, 32 current, best is ['0x2000000', '0x40000', '0x2000004', '0x8000'] with [2.1274375 2.12903125 2.22596875 2.4663125 ] + Generation 4/5, 3383 nodes explored, 32 current, best is ['0x40000', '0x2000004', '0x8000', '0x200000'] with [2.12903125 2.22596875 2.4663125 2.54446875] + The highest reached round was 5 + The best differences found by the optimizer are... + 0x200000 , with score 2.54446875 + 0x8000 , with score 2.4663125000000004 + 0x2000004 , with score 2.22596875 + 0x40000 , with score 2.12903125 + 0x2000000 , with score 2.1274375 + 0x4000000 , with score 2.09978125 + 0x20000000 , with score 2.0979062500000003 + 0x10000 , with score 2.03634375 + 0x40000000 , with score 2.0157187499999996 + 0x40200000 , with score 1.75265625 + Training dbitnet on input difference ['0x200000', '0x0'] (['plaintext', 'key']), from round 2... + 20/20 [==============================] - 31s 1s/step - loss: 0.0884 - acc: 0.8838 - val_loss: 0.2889 - val_acc: 0.4993 + Validation accuracy at 2 rounds :0.49932000041007996 + {2: 0.49932000041007996} """ - # from claasp.cipher_modules.neural_network_tests import get_differential_dataset, get_neural_network, \ - # int_difference_to_input_differences, neural_staged_training def data_generator(nr, samples): return self.get_differential_dataset(input_difference, number_of_rounds=nr, - samples=samples) + samples=samples) if difference_positions is None: difference_positions = [] @@ -483,33 +615,26 @@ def data_generator(nr, samples): number_of_generations=optimizer_generations, nb_samples=optimizer_samples, verbose=verbose) - input_difference = self.int_difference_to_input_differences(diff[-1], difference_positions, self.cipher.inputs_bit_size) + input_difference = self._int_difference_to_input_differences(diff[-1], difference_positions, self.cipher.inputs_bit_size) input_size = self.cipher.output_bit_size * 2 neural_network = self.get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.cipher.inputs}), from round {nr}...') - return self.neural_staged_training(data_generator, nr, neural_network, training_samples, - testing_samples, number_of_epochs) #save_prefix - + return self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, + testing_samples, number_of_epochs) - def make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, - reg_param=10 ** -5, - final_activation='sigmoid', depth=1): + def _make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, + reg_param=10 ** -5, + final_activation='sigmoid', depth=1): from keras.models import Model from keras.layers import Dense, Conv1D, Input, Reshape, Permute, Add, Flatten, BatchNormalization, Activation - from keras import backend as K from keras.regularizers import l2 - # Input and preprocessing layers inp = Input(shape=(input_size,)) rs = Reshape((input_size // word_size, word_size))(inp) perm = Permute((2, 1))(rs) - # add a single residual layer that will expand the data to num_filters channels - # this is a bit-sliced layer conv0 = Conv1D(num_filters, kernel_size=1, padding='same', kernel_regularizer=l2(reg_param))(perm) conv0 = BatchNormalization()(conv0) conv0 = Activation('relu')(conv0) - - # add residual blocks shortcut = conv0 for i in range(depth): conv1 = Conv1D(num_filters, kernel_size=ks, padding='same', kernel_regularizer=l2(reg_param))(shortcut) @@ -519,8 +644,6 @@ def make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, w conv2 = BatchNormalization()(conv2) conv2 = Activation('relu')(conv2) shortcut = Add()([shortcut, conv2]) - - # add prediction head flat1 = Flatten()(shortcut) dense = Dense(d1, kernel_regularizer=l2(reg_param))(flat1) dense = BatchNormalization()(dense) @@ -532,7 +655,7 @@ def make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, w model = Model(inputs=inp, outputs=out) return model - def make_dbitnet(self, input_size=64, n_filters=32, n_add_filters=16): + def _make_dbitnet(self, input_size=64, n_filters=32, n_add_filters=16): """Create a DBITNet model. :param input_size: e.g. for SPECK32/64 and 2 ciphertexts, the input_size is 64 bit. @@ -604,7 +727,7 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio nb_samples=10 ** 3, previous_generation=None, verbose=False): """ - Return good neural distinguisher input differences for a cipher. + Return good neural distinguisher input differences for a cipher, based on the AutoND pipeline ([BGHR2023]). INPUT: @@ -619,8 +742,10 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio EXAMPLES:: sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: cipher = SpeckBlockCipher() - sage: diff, scores, highest_round = find_good_input_difference_for_neural_distinguisher(cipher, [True, False], verbose = False, number_of_generations=5) + sage: from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests + sage: speck = SpeckBlockCipher() + sage: tester = NeuralNetworkTests(speck) + sage: diff, scores, highest_round = tester.find_good_input_difference_for_neural_distinguisher([True, False], verbose = True, number_of_generations=5) """ # Initialisation @@ -636,15 +761,15 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio if difference_positions[i]: num_input_bits += input_lengths[i] C0 = evaluate(inputs0)['round_output'] - diffs, scores, highest_round = self.evolutionary_algorithm(previous_generation, initial_population, - number_of_generations, verbose, - difference_evaluation_function=lambda - x: self.evaluate_multiple_differences( + diffs, scores, highest_round = self._evolutionary_algorithm(previous_generation, initial_population, + number_of_generations, verbose, + difference_evaluation_function=lambda + x: self._evaluate_multiple_differences( input_lengths, difference_positions, evaluate, x, inputs0, C0, threshold), - difference_bits=num_input_bits) + difference_bits=num_input_bits) if verbose: print("The highest reached round was", highest_round) print("The best differences found by the optimizer are...") @@ -652,8 +777,8 @@ def find_good_input_difference_for_neural_distinguisher(self, difference_positio print(hex(diffs[-i]), ", with score", scores[-i]) return diffs, scores, highest_round - def evolutionary_algorithm(self, previous_generation, initial_population, number_of_generations, verbose, - difference_evaluation_function, difference_bits): + def _evolutionary_algorithm(self, previous_generation, initial_population, number_of_generations, verbose, + difference_evaluation_function, difference_bits): mut_prob = 0.1 if previous_generation is None: generation = np.array([random.randint(1, 1 << difference_bits) @@ -708,13 +833,13 @@ def evolutionary_algorithm(self, previous_generation, initial_population, number return generation, scores, highest_round - def evaluate_multiple_differences(self, input_lengths, difference_positions, encrypt, candidate_differences, - inputs0, c0, - threshold): + def _evaluate_multiple_differences(self, input_lengths, difference_positions, encrypt, candidate_differences, + inputs0, c0, + threshold): inputs1 = [None for _ in inputs0] - formatted_differences, number_of_differences = self.int_difference_to_np_uint8(input_lengths, - difference_positions, - candidate_differences) + formatted_differences, number_of_differences = self._int_difference_to_np_uint8(input_lengths, + difference_positions, + candidate_differences) for input_index in range(len(difference_positions)): difference_in_input = formatted_differences[input_index] if difference_positions[input_index]: @@ -737,7 +862,7 @@ def evaluate_multiple_differences(self, input_lengths, difference_positions, enc return scores, i - def int_difference_to_input_differences(self, diff, difference_positions, input_bit_sizes): + def _int_difference_to_input_differences(self, diff, difference_positions, input_bit_sizes): formated = [] """ Splits a difference received as an integer into differences for each input that needs one, in integer format. @@ -750,7 +875,7 @@ def int_difference_to_input_differences(self, diff, difference_positions, input_ formated.append(0) return formated - def int_difference_to_np_uint8(self, input_lengths, difference_positions, differences=None): + def _int_difference_to_np_uint8(self, input_lengths, difference_positions, differences=None): """ Splits a difference received as an integer into differences for each input that needs one, in np.uint8 format. """ @@ -775,8 +900,3 @@ def int_difference_to_np_uint8(self, input_lengths, difference_positions, differ return formatted_differences, number_of_differences -# # Example usage: - -# from class_neural_network_tests import Neural_Network_Distinguisher -# results1 = Neural_Network_Distinguisher(SpeckBlockCipher(number_of_rounds=2)).neural_network_blackbox_distinguisher_tests(nb_samples=10) -# results2 = Neural_Network_Distinguisher(SpeckBlockCipher(number_of_rounds=2)).neural_network_differential_distinguisher_tests(nb_samples=10) From 42053763c250a064c66aa3da6c4c5713b7da2d21 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Wed, 28 Feb 2024 11:31:56 +0400 Subject: [PATCH 129/179] polish code --- claasp/cipher_modules/avalanche_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index b24e94ae..04c18877 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -109,8 +109,8 @@ def avalanche_tests(self, number_of_samples=5, avalanche_dependence_uniform_bias for intermediate_output_name in list(intermediate_output_names.keys()): if parameters[criterion_name][0]: self._add_intermediate_output_values_to_dictionary(criterion_name, intermediate_output_names, - parameters,diffusion_tests, index, input_name, - intermediate_output_name) + parameters,diffusion_tests, index, input_name, + intermediate_output_name) all_output_vectors, largest_round_criterion_not_satisfied = \ self._calculate_regular_difference(criterion_name, criterion, intermediate_output_names, parameters, diffusion_tests, input_name, intermediate_output_name) From 9f5fd00b00c4a642842d78037af223a037c015ba Mon Sep 17 00:00:00 2001 From: davidgerault Date: Wed, 28 Feb 2024 11:38:56 +0400 Subject: [PATCH 130/179] fixed one test --- tests/unit/cipher_modules/neural_network_tests_test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py index 5c17fbde..951899c5 100644 --- a/tests/unit/cipher_modules/neural_network_tests_test.py +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -26,8 +26,9 @@ def test_train_gohr_neural_distinguisher(): cipher = SpeckBlockCipher() input_differences = [0x400000, 0] number_of_rounds = 5 - result = NeuralNetworkTests(cipher).train_gohr_neural_distinguisher(input_differences, number_of_rounds, word_size=16, number_of_epochs=1, training_samples = 10**3, testing_samples = 10**3) - assert result > 0 + result = NeuralNetworkTests(cipher).train_gohr_neural_distinguisher(input_differences, number_of_rounds, + word_size=16, number_of_epochs=1, training_samples = 10**3, testing_samples = 10**3) + assert result[5] > 0 def test_run_autond_pipeline(): cipher = SpeckBlockCipher() @@ -46,8 +47,7 @@ def test_get_differential_dataset(): def test_neural_network_blackbox_distinguisher_tests(): cipher = SpeckBlockCipher(number_of_rounds=5) results = NeuralNetworkTests(cipher).neural_network_blackbox_distinguisher_tests(nb_samples=10) - assert results['input_parameters'] == \ - {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, 'test_name': 'neural_network_blackbox_distinguisher_tests'} + assert results['input_parameters'] == {'number_of_samples': 10, 'hidden_layers': [32, 32, 32], 'number_of_epochs': 10, 'test_name': 'neural_network_blackbox_distinguisher_tests'} def test_neural_network_differential_distinguisher_tests(): From 417cff9c2b5e47192de76be8f921dd2af51e17b9 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 13:04:33 +0400 Subject: [PATCH 131/179] updated print_trail function in report class --- claasp/cipher_modules/report.py | 20 +-- .../dieharder_statistical_tests.py | 159 +++++++++++++----- 2 files changed, 130 insertions(+), 49 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index c37c6ca1..41d431d7 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -448,17 +448,15 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word def _produce_graph(self, output_directory): if 'statistical' in self.test_name: - printable_dict = self.test_report - printable_dict['data_type'] = 'random' - printable_dict['cipher_name'] = self.cipher.family_name - printable_dict['round'] = 1 - printable_dict['rounds'] = 1 - if 'dieharder' in self.test_name: - from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - DieharderTests.generate_chart_round(printable_dict, output_directory+'/'+self.cipher.id + '/' + self.test_name) - elif 'nist' in self.test_name: - from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - StatisticalTests.generate_chart_round(printable_dict, output_directory+'/'+self.cipher.id + '/' + self.test_name) + + for it in self.cipher.inputs: + + if 'dieharder' in self.test_name: + from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + DieharderTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + elif 'nist' in self.test_name: + from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests + StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'algebraic' in self.test_name: print(self.test_report) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 8c3ff652..53e2bde9 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -37,39 +37,116 @@ def __init__(self, cipher): self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) - @staticmethod - def dieharder_statistical_tests(): - - """ - Run the run_dieharder_statistical_tests_tool_interactively function and process its output with the parse_output function - to standardize it for the Report class - - INPUT: - - - ``input_file`` -- **str**; file containing the bit streams - - OUTPUT: - - a python dictionary representing the parsed output of the run_dieharder_statistical_tests_tool_interactively function - - EXAMPLES: - from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + def dieharder_statistical_tests(self, test_type, seq_size='default', seq_lines='default', number_of_samples_in_one_line='default', round_start=0, round_end=1): - result = StatisticalTests.dieharder_statistical_test(f'claasp/cipher_modules/statistical_tests/input_data_example') - - """ + dieharder_test = { + 'input_parameters': { + 'test_name': 'dierharder_statistical_tests', + 'test_type': test_type + }, + 'test_results':{} + } + if test_type == 'avalanche': + + if seq_size == 'default': + seq_size = 1048576 + if seq_lines == 'default': + seq_lines = 384 + + for i in range(len(self.cipher.inputs)): + + sample_size = self.cipher.inputs_bit_size[i] * self.cipher.output_bit_size + number_of_samples_in_one_line = math.ceil(seq_size / sample_size) + + dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_avalanche_dieharder_statistics_test(input_index=i, + number_of_samples_in_one_line=number_of_samples_in_one_line, + number_of_lines=seq_lines, round_start=round_start, round_end=round_end) + elif test_type == 'cbc': + + if seq_size == 'default': + seq_size = 1048576 + if seq_lines == 'default': + seq_lines = 384 + + if self.cipher.output_bit_size > 128: + number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) + else: + number_of_blocks_in_one_sample = 8128 + # sample_size = number_of_blocks_in_one_sample * self.cipher.output_bit_size + number_of_samples_in_one_line = 1 + + for i in range(len(self.cipher.inputs)): + dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_correlation_dieharder_statistics_test(input_index=i, + number_of_samples_in_one_line=number_of_samples_in_one_line, + number_of_lines=seq_lines, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample, + round_start=round_start, round_end=round_end) + + elif test_type == 'random': + + if seq_size == 'default': + seq_size = 1040384 + if seq_lines == 'default': + seq_lines = 128 + if number_of_samples_in_one_line == 'default': + number_of_samples_in_one_line = 1 + number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) + # sample_size = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + for i in range(len(self.cipher.inputs)): + dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_random_dieharder_statistics_test(input_index=i, + number_of_samples_in_one_line=number_of_samples_in_one_line, + number_of_lines=seq_lines, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample, + round_start=round_start, round_end=round_end) + + elif test_type == 'low_density': + + if number_of_samples_in_one_line == 'default': + number_of_samples_in_one_line = 1 + if seq_size == 'default': + seq_size = 1056896 + if seq_lines == 'default': + seq_lines = 1 + number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) + + for i in range(len(self.cipher.inputs)): + n = self.cipher.inputs_bit_size[i] + ratio = min(1,(number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_low_density_dieharder_statistics_test(input_index=i, + number_of_samples_in_one_line=number_of_samples_in_one_line, + number_of_lines=seq_lines, + ratio=ratio, round_start=round_start, round_end=round_end) + + elif test_type == 'high_density': + + if number_of_samples_in_one_line == 'default': + number_of_samples_in_one_line = 1 + if seq_size == 'default': + seq_size = 1056896 + if seq_lines == 'default': + seq_lines = 1 + number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) + + for i in range(len(self.cipher.inputs)): + n = self.cipher.inputs_bit_size[i] + ratio = min(1,(number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_high_density_dieharder_statistics_test(input_index=i, + number_of_samples_in_one_line=number_of_samples_in_one_line, + number_of_lines=seq_lines, + ratio=ratio, round_start=round_start, round_end=round_end) - DieharderTests.run_dieharder_statistical_tests_tool_interactively(input_file) + else: + print('Invalid test_type choice. Choose among the following: avalanche, cbc, random, low_density, high_density') - report = DieharderTests.parse_report(f'dieharder_test_output.txt') - return report + return dieharder_test @staticmethod - def run_dieharder_statistical_tests_tool_interactively(input_file): + def _run_dieharder_statistical_tests_tool(input_file): """ Run dieharder tests using the Dieharder library [1]. The result will be in dieharder_test_output.txt. @@ -86,7 +163,7 @@ def run_dieharder_statistical_tests_tool_interactively(input_file): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool_interactively( # doctest: +SKIP + sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP ... @@ -112,7 +189,7 @@ def parse_report(report_filename): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool_interactively( # doctest: +SKIP + sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP ... @@ -172,7 +249,6 @@ def parse_report(report_filename): report_dict["failed_tests"] = failed_tests report_dict["passed_tests_proportion"] = passed_tests / total_tests report_dict["total_tests"] = total_tests - report_dict["test_name"] = "dieharder_statistical_tests" f.close() print(f'Parsing {report_filename} is finished.') return report_dict @@ -194,7 +270,7 @@ def generate_chart_round(report_dict, output_dir=''): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool_interactively( # doctest: +SKIP + sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP ... @@ -239,7 +315,7 @@ def generate_chart_round(report_dict, output_dir=''): print(f'Drawing round {report_dict["round"]} is finished. Please find the chart in file {output_dir}.') @staticmethod - def generate_chart_all(report_dict_list): + def generate_chart_all(report_dict_list, output_dir=''): """ Generate the corresponding chart based on the parsed report dictionary. @@ -255,7 +331,7 @@ def generate_chart_all(report_dict_list): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool_interactively( # doctest: +SKIP + sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP ... @@ -291,6 +367,13 @@ def generate_chart_all(report_dict_list): [i * 2 + 1 for i in range(int(report_dict_list[0]["rounds"] / 2 + 1))]) # plt.grid(True) chart_filename = f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' + + if output_dir =='': + output_dir = f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png') + plt.savefig(chart_filename) print(f'Drawing chart for all rounds is in finished. Please find the chart in file {chart_filename}.') @@ -311,7 +394,7 @@ def _write_execution_time(self, execution_description, execution_time): print(f'Error: {e.strerror}') def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART=False): - dataset_folder = 'dataset' + dataset_folder = os.getcwd() + '/dataset' dataset_filename = 'dieharder_input_' + self._cipher_primitive dataset_filename = os.path.join(dataset_folder, dataset_filename) dieharder_report_dicts = [] @@ -328,7 +411,7 @@ def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART= dataset[round_number].tofile(dataset_filename) dieharder_execution_time = time.time() - self.run_dieharder_statistical_tests_tool_interactively(dataset_filename) + self.run_dieharder_statistical_tests_tool(dataset_filename) dieharder_execution_time = time.time() - dieharder_execution_time try: os.rename(self._DIEHARDER_OUTPUT, report_round) @@ -414,7 +497,7 @@ def run_avalanche_dieharder_statistics_test(self, input_index, number_of_samples self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() @@ -479,7 +562,7 @@ def run_correlation_dieharder_statistics_test(self, input_index, number_of_sampl self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() @@ -545,7 +628,7 @@ def run_CBC_dieharder_statistics_test(self, input_index, number_of_samples_in_on self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() @@ -611,7 +694,7 @@ def run_random_dieharder_statistics_test(self, input_index, number_of_samples_in self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() @@ -681,7 +764,7 @@ def run_low_density_dieharder_statistics_test(self, input_index, number_of_sampl self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() @@ -751,7 +834,7 @@ def run_high_density_dieharder_statistics_test(self, input_index, number_of_samp self.number_of_samples_in_one_line = number_of_samples_in_one_line self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = dieharder_report_folder_prefix + self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix self._create_report_folder() From 583edb9c580d5876e8c2e9a60623fa3c477599de Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 14:40:46 +0400 Subject: [PATCH 132/179] updated print_trail function in report class --- claasp/cipher_modules/report.py | 1 + .../statistical_tests/dieharder_statistical_tests.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 41d431d7..4a0a4692 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -454,6 +454,7 @@ def _produce_graph(self, output_directory): if 'dieharder' in self.test_name: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests DieharderTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + elif 'nist' in self.test_name: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 53e2bde9..b5a8b91b 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -38,7 +38,7 @@ def __init__(self, cipher): - def dieharder_statistical_tests(self, test_type, seq_size='default', seq_lines='default', number_of_samples_in_one_line='default', round_start=0, round_end=1): + def dieharder_statistical_tests(self, test_type, seq_size='default', seq_lines='default', number_of_samples_in_one_line='default', round_start=0, round_end=2): dieharder_test = { @@ -146,7 +146,7 @@ def dieharder_statistical_tests(self, test_type, seq_size='default', seq_lines=' @staticmethod - def _run_dieharder_statistical_tests_tool(input_file): + def run_dieharder_statistical_tests_tool(input_file): """ Run dieharder tests using the Dieharder library [1]. The result will be in dieharder_test_output.txt. From f66df38f5a8a350b06b31288cfdcab2b157202a4 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 16:10:38 +0400 Subject: [PATCH 133/179] updated print_trail function in report class --- claasp/cipher_modules/report.py | 188 +++++++++++++++++++++++--------- 1 file changed, 135 insertions(+), 53 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 4a0a4692..b6f1f3f7 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -8,17 +8,17 @@ import shutil -def _print_colored_state(state, verbose): +def _print_colored_state(state, verbose, file): for line in state: - print('', end='') + print('', end='', file = file) for x in line: - print(f'{x} ', end='') + print(f'{x} ', end='', file = file) occ = [i for i in range(len(line)) if line[i] != '_'] if verbose: - print(f'\tactive words positions = {occ}') + print(f'\tactive words positions = {occ}', file = file) else: - print() + print('', file = file) def _dict_to_latex_table(data_dict, header_list): @@ -147,6 +147,36 @@ def __init__(self, cipher, test_report): self.input_parameters = {} self.test_name = test_report['test_name'] if type(test_report) is dict else test_report[0]['test_name'] + def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', word_size=1, state_size=1, key_state_size=1, + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + + if 'trail' in self.test_name: + self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, + show_var_shift, show_var_rotate, show_theta_xoodoo, + show_theta_keccak, show_shift_rows, show_sigma, show_reverse, + show_permuation, show_multi_input_non_linear_logical_operator, + show_modular, show_modsub, + show_constant, show_rot, show_sbox, show_mix_column, + show_shift, show_linear_layer, show_xor, show_modadd, + show_and, + show_or, show_not, show_plaintext, show_key, + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig=False) + + else: + if test_name == 'trail_search': + print('Error! Invalid test name. Please choose a valid test name') + return + self._produce_graph(show_graph=True,fixed_input=fixed_input,fixed_output=fixed_output, test_name=test_name).show() + def _export(self, file_format, output_dir): @@ -339,16 +369,34 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word show_shift, show_linear_layer, show_xor, show_modadd, show_and, show_or, show_not, show_plaintext, show_key, - show_intermediate_output, show_cipher_output): + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig): + + if save_fig == True: + if not os.path.exists(os.getcwd() + '/test_reports/'): + os.makedirs(os.getcwd() + '/test_reports/') + if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): + os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) + filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/'+ self.test_report['solver_name'] + '_' + self.test_name + '.txt' + if os.path.exists(filename): + os.remove(filename) + file = open(filename,'a') + else: + file=None input_comps = list(locals().keys()) component_types = [] + show_key_flow = False for comp in list(self.test_report['components_values'].keys()): + if 'key' in comp: + show_key_flow = True if (comp == 'key' or comp == 'plaintext') and comp not in component_types: component_types.append(comp) - elif '_'.join(comp.split('_')[:-2]) not in component_types: + elif '_'.join(comp.split('_')[:-2]) not in component_types and comp[-2:] != "_i" and comp[-2:] != "_o": component_types.append('_'.join(comp.split('_')[:-2])) + elif ('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1])) not in component_types and ( + comp[-2:] == "_i" or comp[-2:] == "_o"): + component_types.append(('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1]))) show_components = {} @@ -356,10 +404,16 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word for comp_choice in input_comps: if 'show_' + comp == comp_choice: show_components[comp] = locals()[comp_choice] - + if 'show_' + comp == comp_choice + '_o' and show_output: + show_components[comp] = locals()[comp_choice] + if 'show_' + comp == comp_choice + '_i' and show_input: + show_components[comp] = locals()[comp_choice] out_list = {} - key_flow = ['key'] + if show_key_flow: + key_flow = ['key'] + else: + key_flow = [] abs_prob = 0 @@ -374,14 +428,21 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word # Check input links if 'plaintext' not in comp_id and 'key' not in comp_id: - input_links = self.cipher.get_component_from_id(comp_id).input_id_links + if comp_id[-2:] == "_i" or comp_id[-2:] == "_o": + input_links = self.cipher.get_component_from_id(comp_id[:-2]).input_id_links + comp_value = ('_'.join(comp_id.split('_')[:-3])) + '_' + ('_'.join(comp_id.split('_')[-1])) + else: + input_links = self.cipher.get_component_from_id(comp_id).input_id_links + comp_value = '_'.join(comp_id.split('_')[:-2]) - if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links): + if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links) and show_key_flow: key_flow.append(comp_id) key_flow = key_flow + [constant_id for constant_id in input_links if 'constant' in constant_id] - if show_components['_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: + if show_components[ + comp_value if comp_id not in ['plaintext', 'key', 'cipher_output', 'cipher_output_o', 'cipher_output_i', + 'intermediate_output', 'intermediate_output_o', + 'intermediate_output_i'] else comp_id]: value = self.test_report['components_values'][comp_id]['value'] @@ -406,46 +467,59 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word else: out_format[i].append(word_list[j + i * size[1]]) - out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else (out_format, 0, 0) + out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else ( + out_format, 0, 0) for comp_id in out_list.keys(): if comp_id not in key_flow: if comp_id == 'plaintext' or comp_id == 'key': - print(f'\t{comp_id}\t') + print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}') + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename if save_fig else None) else: - print(f' \t{comp_id}\t') - _print_colored_state(out_list[comp_id][0], verbose) + print(f' \t{comp_id}\t', file=file) + _print_colored_state(out_list[comp_id][0], verbose, file) if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( out_list[comp_id][1]) + '\t' + 'total weight = ' + str( - out_list[comp_id][2])) - print() - print() - print("KEY FLOW") - print() - - for comp_id in key_flow: - - if show_components['_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: - if comp_id == 'plaintext' or comp_id == 'key': - print(f'\t{comp_id}\t') - else: - if verbose: - print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}') + out_list[comp_id][2]), file=file) + print('', file=file) + + print('', file=file) + print('total weight = ' + str(self.test_report['total_weight']), file=file) + show_key_flow = False + + for key_comp in key_flow: + if key_comp != 'key' and self.test_report['components_values'][key_comp]['weight'] != 0: + show_key_flow = True + break + + if show_key_flow: + print('', file=file) + print("KEY FLOW", file=file) + print('', file=file) + + for comp_id in key_flow: + + if show_components[ + '_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', + 'intermediate_output'] else comp_id]: + if comp_id == 'plaintext' or comp_id == 'key': + print(f'\t{comp_id}\t', file=file) else: - print(f' \t{comp_id}\t') - _print_colored_state(out_list[comp_id][0], verbose) - if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( - out_list[comp_id][1]) + '\t' + 'total weight = ' + str( - out_list[comp_id][2])) - print() + if verbose: + print( + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename) + else: + print(f' \t{comp_id}\t', file=file) + _print_colored_state(out_list[comp_id][0], verbose, file) + if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( + out_list[comp_id][1]) + '\t' + 'total weight = ' + str( + out_list[comp_id][2]), file=file) + print('', file=file) - def _produce_graph(self, output_directory): + def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, test_name=None): if 'statistical' in self.test_name: @@ -464,24 +538,24 @@ def _produce_graph(self, output_directory): else: inputs = list(self.test_report['test_results'].keys()) - for it in inputs: + for it in inputs if fixed_input==None else [fixed_input]: if not os.path.exists( - output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it): + output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) and show_graph == False: os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) outputs = list(self.test_report['test_results'][it].keys()) - for out in outputs: + for out in outputs if fixed_input==None else [fixed_output]: if out == 'cipher_output': continue if not os.path.exists( - output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out): + output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out) and show_graph == False: os.mkdir( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out) results = list(self.test_report['test_results'][it][out].keys()) - for res in results: + for res in results if test_name==None else [test_name]: if not os.path.exists(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res): + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) and show_graph == False: os.mkdir( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) @@ -538,9 +612,11 @@ def _produce_graph(self, output_directory): 'yaxis' + str(i + 1): {'tick0': 0, 'dtick': 1, 'tickfont': {'size': 8}, 'autorange': 'reversed'} }) - fig.write_image(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( - res) + '_' + str(case['input_difference_value']) + '.png', scale=4) + + if show_graph == False: + fig.write_image(output_directory + '/' + + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( + res) + '_' + str(case['input_difference_value']) + '.png', scale=4) fig.data = [] fig.layout = {} @@ -550,7 +626,9 @@ def _produce_graph(self, output_directory): range_y=[min(df[0]) - 1, max(df[0]) + 1]) fig.update_layout(xaxis_title="round", yaxis_title=res_key, showlegend=False) - fig.write_image(output_directory + '/' + + + if show_graph == False: + fig.write_image(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str(res) + '.png', scale=4) @@ -558,6 +636,10 @@ def _produce_graph(self, output_directory): fig.data = [] fig.layout = {} + if show_graph==True: + return fig + + print("Results saved in " + output_directory) def print_report(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', @@ -570,7 +652,7 @@ def print_report(self, word_size=1, state_size=1, key_state_size=1, output_direc show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, show_and=False, show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True): + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): """ Prints the graphical representation of the Report. @@ -606,7 +688,7 @@ def print_report(self, word_size=1, state_size=1, key_state_size=1, output_direc show_shift, show_linear_layer, show_xor, show_modadd, show_and, show_or, show_not, show_plaintext, show_key, - show_intermediate_output, show_cipher_output) + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig=True) else: if not os.path.exists(output_directory): os.mkdir(output_directory) From b0350c01280e6baf79eae8ed623e22e57b24ddcb Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 16:10:53 +0400 Subject: [PATCH 134/179] updated report.py --- claasp/cipher_modules/report.py | 1 + 1 file changed, 1 insertion(+) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index b6f1f3f7..5accbd55 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -172,6 +172,7 @@ def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output=' show_intermediate_output, show_cipher_output, show_input, show_output, save_fig=False) else: + if test_name == 'trail_search': print('Error! Invalid test name. Please choose a valid test name') return From 9b9d3f53adfde4fb2dc0418ecd4508fb01177ed7 Mon Sep 17 00:00:00 2001 From: Mohamed Rachidi Date: Wed, 28 Feb 2024 16:19:33 +0400 Subject: [PATCH 135/179] polish generate_3D_plot() --- claasp/cipher_modules/avalanche_tests.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/claasp/cipher_modules/avalanche_tests.py b/claasp/cipher_modules/avalanche_tests.py index 04c18877..b6e85e8b 100644 --- a/claasp/cipher_modules/avalanche_tests.py +++ b/claasp/cipher_modules/avalanche_tests.py @@ -526,13 +526,17 @@ def generate_3D_plot(self, number_of_samples=100, criterion="avalanche_weight_ve # Add a color bar to show the mapping of z values to colors cbar = fig.colorbar(scatter) - cbar.set_label('Avalanche Weight') + # cbar.set_label('Avalanche Weight') + s = "" + for w in criterion.split("_")[:-1]: + s += w + s += " " # Customize the plot as needed - ax.set_xlabel('Bit Position') + ax.set_xlabel('Output Bit Position') ax.set_ylabel('Round') - ax.set_zlabel('Total Avalanche Weight') - ax.set_title('3D Avalanche Weight Plot') + ax.set_zlabel(f"Average value of {s}") + ax.set_title(f"3D {s}plot") # Show the plot # plt.show() From a83cb08784d69d934e70bb536008aa7440fb928b Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 16:50:44 +0400 Subject: [PATCH 136/179] updated report.py --- claasp/cipher_modules/report.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 5accbd55..3d680776 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -375,8 +375,8 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word if save_fig == True: if not os.path.exists(os.getcwd() + '/test_reports/'): os.makedirs(os.getcwd() + '/test_reports/') - if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): - os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) + if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): + os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/'+ self.test_report['solver_name'] + '_' + self.test_name + '.txt' if os.path.exists(filename): os.remove(filename) @@ -535,7 +535,16 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'algebraic' in self.test_name: - print(self.test_report) + x = [n+1 for n in list(range(self.cipher.number_of_rounds))] + + for test_key in self.test_report['test_results'].keys() if test_name==None else [test_name]: + y = self.test_report['test_results'][test_key] + df = pd.DataFrame([x,y]).T + df.columns = ['round', test_key] + fig = px.line(df, x='round', y=test_key) + fig.write_image(output_directory+'/'+test_key+'.png') + if show_graph: + return fig else: inputs = list(self.test_report['test_results'].keys()) @@ -643,7 +652,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i print("Results saved in " + output_directory) - def print_report(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', + def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', verbose=False, show_word_permutation=False, show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, From 99596c4c0bd9224fcfb69910278759dc66818009 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 16:51:11 +0400 Subject: [PATCH 137/179] updated report.py --- claasp/cipher_modules/report.py | 235 +++++++++++++++++++++++--------- 1 file changed, 167 insertions(+), 68 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 83cfd9da..3d680776 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -8,17 +8,17 @@ import shutil -def _print_colored_state(state, verbose): +def _print_colored_state(state, verbose, file): for line in state: - print('', end='') + print('', end='', file = file) for x in line: - print(f'{x} ', end='') + print(f'{x} ', end='', file = file) occ = [i for i in range(len(line)) if line[i] != '_'] if verbose: - print(f'\tactive words positions = {occ}') + print(f'\tactive words positions = {occ}', file = file) else: - print() + print('', file = file) def _dict_to_latex_table(data_dict, header_list): @@ -147,6 +147,37 @@ def __init__(self, cipher, test_report): self.input_parameters = {} self.test_name = test_report['test_name'] if type(test_report) is dict else test_report[0]['test_name'] + def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', word_size=1, state_size=1, key_state_size=1, + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + + if 'trail' in self.test_name: + self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, + show_var_shift, show_var_rotate, show_theta_xoodoo, + show_theta_keccak, show_shift_rows, show_sigma, show_reverse, + show_permuation, show_multi_input_non_linear_logical_operator, + show_modular, show_modsub, + show_constant, show_rot, show_sbox, show_mix_column, + show_shift, show_linear_layer, show_xor, show_modadd, + show_and, + show_or, show_not, show_plaintext, show_key, + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig=False) + + else: + + if test_name == 'trail_search': + print('Error! Invalid test name. Please choose a valid test name') + return + self._produce_graph(show_graph=True,fixed_input=fixed_input,fixed_output=fixed_output, test_name=test_name).show() + def _export(self, file_format, output_dir): @@ -232,7 +263,10 @@ def _export(self, file_format, output_dir): path = output_dir + '/' + self.cipher.id + '/' + self.test_report["input_parameters"][ "test_name"] + '_tables/' + it + '/' + out + '/' + test - res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in result.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if file_format == '.csv': @@ -336,16 +370,34 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word show_shift, show_linear_layer, show_xor, show_modadd, show_and, show_or, show_not, show_plaintext, show_key, - show_intermediate_output, show_cipher_output): + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig): + + if save_fig == True: + if not os.path.exists(os.getcwd() + '/test_reports/'): + os.makedirs(os.getcwd() + '/test_reports/') + if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): + os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) + filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/'+ self.test_report['solver_name'] + '_' + self.test_name + '.txt' + if os.path.exists(filename): + os.remove(filename) + file = open(filename,'a') + else: + file=None input_comps = list(locals().keys()) component_types = [] + show_key_flow = False for comp in list(self.test_report['components_values'].keys()): + if 'key' in comp: + show_key_flow = True if (comp == 'key' or comp == 'plaintext') and comp not in component_types: component_types.append(comp) - elif '_'.join(comp.split('_')[:-2]) not in component_types: + elif '_'.join(comp.split('_')[:-2]) not in component_types and comp[-2:] != "_i" and comp[-2:] != "_o": component_types.append('_'.join(comp.split('_')[:-2])) + elif ('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1])) not in component_types and ( + comp[-2:] == "_i" or comp[-2:] == "_o"): + component_types.append(('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1]))) show_components = {} @@ -353,10 +405,16 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word for comp_choice in input_comps: if 'show_' + comp == comp_choice: show_components[comp] = locals()[comp_choice] - + if 'show_' + comp == comp_choice + '_o' and show_output: + show_components[comp] = locals()[comp_choice] + if 'show_' + comp == comp_choice + '_i' and show_input: + show_components[comp] = locals()[comp_choice] out_list = {} - key_flow = ['key'] + if show_key_flow: + key_flow = ['key'] + else: + key_flow = [] abs_prob = 0 @@ -371,14 +429,21 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word # Check input links if 'plaintext' not in comp_id and 'key' not in comp_id: - input_links = self.cipher.get_component_from_id(comp_id).input_id_links + if comp_id[-2:] == "_i" or comp_id[-2:] == "_o": + input_links = self.cipher.get_component_from_id(comp_id[:-2]).input_id_links + comp_value = ('_'.join(comp_id.split('_')[:-3])) + '_' + ('_'.join(comp_id.split('_')[-1])) + else: + input_links = self.cipher.get_component_from_id(comp_id).input_id_links + comp_value = '_'.join(comp_id.split('_')[:-2]) - if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links): + if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links) and show_key_flow: key_flow.append(comp_id) key_flow = key_flow + [constant_id for constant_id in input_links if 'constant' in constant_id] - if show_components['_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: + if show_components[ + comp_value if comp_id not in ['plaintext', 'key', 'cipher_output', 'cipher_output_o', 'cipher_output_i', + 'intermediate_output', 'intermediate_output_o', + 'intermediate_output_i'] else comp_id]: value = self.test_report['components_values'][comp_id]['value'] @@ -403,83 +468,104 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word else: out_format[i].append(word_list[j + i * size[1]]) - out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else (out_format, 0, 0) + out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else ( + out_format, 0, 0) for comp_id in out_list.keys(): if comp_id not in key_flow: if comp_id == 'plaintext' or comp_id == 'key': - print(f'\t{comp_id}\t') + print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}') + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename if save_fig else None) else: - print(f' \t{comp_id}\t') - _print_colored_state(out_list[comp_id][0], verbose) + print(f' \t{comp_id}\t', file=file) + _print_colored_state(out_list[comp_id][0], verbose, file) if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( out_list[comp_id][1]) + '\t' + 'total weight = ' + str( - out_list[comp_id][2])) - print() - print() - print("KEY FLOW") - print() - - for comp_id in key_flow: - - if show_components['_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: - if comp_id == 'plaintext' or comp_id == 'key': - print(f'\t{comp_id}\t') - else: - if verbose: - print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}') + out_list[comp_id][2]), file=file) + print('', file=file) + + print('', file=file) + print('total weight = ' + str(self.test_report['total_weight']), file=file) + show_key_flow = False + + for key_comp in key_flow: + if key_comp != 'key' and self.test_report['components_values'][key_comp]['weight'] != 0: + show_key_flow = True + break + + if show_key_flow: + print('', file=file) + print("KEY FLOW", file=file) + print('', file=file) + + for comp_id in key_flow: + + if show_components[ + '_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', + 'intermediate_output'] else comp_id]: + if comp_id == 'plaintext' or comp_id == 'key': + print(f'\t{comp_id}\t', file=file) else: - print(f' \t{comp_id}\t') - _print_colored_state(out_list[comp_id][0], verbose) - if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( - out_list[comp_id][1]) + '\t' + 'total weight = ' + str( - out_list[comp_id][2])) - print() + if verbose: + print( + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename) + else: + print(f' \t{comp_id}\t', file=file) + _print_colored_state(out_list[comp_id][0], verbose, file) + if verbose: print(' ' * len(out_list[comp_id][0][0]) + '\tlocal weight = ' + str( + out_list[comp_id][1]) + '\t' + 'total weight = ' + str( + out_list[comp_id][2]), file=file) + print('', file=file) - def _produce_graph(self, output_directory): + def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, test_name=None): if 'statistical' in self.test_name: - printable_dict = self.test_report - printable_dict['data_type'] = 'random' - printable_dict['cipher_name'] = self.cipher.family_name - printable_dict['round'] = 1 - printable_dict['rounds'] = 1 - if 'dieharder' in self.test_name: - from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - DieharderTests.generate_chart_round(printable_dict) - elif 'nist' in self.test_name: - from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - StatisticalTests.generate_chart_round(printable_dict) + + for it in self.cipher.inputs: + + if 'dieharder' in self.test_name: + from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + DieharderTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + + elif 'nist' in self.test_name: + from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests + StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'algebraic' in self.test_name: - print(self.test_report) + x = [n+1 for n in list(range(self.cipher.number_of_rounds))] + + for test_key in self.test_report['test_results'].keys() if test_name==None else [test_name]: + y = self.test_report['test_results'][test_key] + df = pd.DataFrame([x,y]).T + df.columns = ['round', test_key] + fig = px.line(df, x='round', y=test_key) + fig.write_image(output_directory+'/'+test_key+'.png') + if show_graph: + return fig else: inputs = list(self.test_report['test_results'].keys()) - for it in inputs: + for it in inputs if fixed_input==None else [fixed_input]: if not os.path.exists( - output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it): + output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) and show_graph == False: os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) outputs = list(self.test_report['test_results'][it].keys()) - for out in outputs: + for out in outputs if fixed_input==None else [fixed_output]: if out == 'cipher_output': continue if not os.path.exists( - output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out): + output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out) and show_graph == False: os.mkdir( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out) results = list(self.test_report['test_results'][it][out].keys()) - for res in results: + for res in results if test_name==None else [test_name]: if not os.path.exists(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res): + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) and show_graph == False: os.mkdir( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) @@ -488,10 +574,15 @@ def _produce_graph(self, output_directory): data = self.test_report['test_results'][it][out][res] for case in list(data): - res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + try: + res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] + except IndexError: + continue if out == 'round_output': output_res = self.test_report['test_results'][it]['cipher_output'][res] + if 'worst_input_differences' in output_res[-1].keys(): + output_res = output_res[:-1] if "input_difference_value" in case.keys(): diff_key = case["input_difference_value"] output = [out for out in output_res if out["input_difference_value"] == diff_key][0] @@ -531,9 +622,11 @@ def _produce_graph(self, output_directory): 'yaxis' + str(i + 1): {'tick0': 0, 'dtick': 1, 'tickfont': {'size': 8}, 'autorange': 'reversed'} }) - fig.write_image(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( - res) + '_' + str(case['input_difference_value']) + '.png', scale=4) + + if show_graph == False: + fig.write_image(output_directory + '/' + + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( + res) + '_' + str(case['input_difference_value']) + '.png', scale=4) fig.data = [] fig.layout = {} @@ -543,7 +636,9 @@ def _produce_graph(self, output_directory): range_y=[min(df[0]) - 1, max(df[0]) + 1]) fig.update_layout(xaxis_title="round", yaxis_title=res_key, showlegend=False) - fig.write_image(output_directory + '/' + + + if show_graph == False: + fig.write_image(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str(res) + '.png', scale=4) @@ -551,9 +646,13 @@ def _produce_graph(self, output_directory): fig.data = [] fig.layout = {} + if show_graph==True: + return fig + + print("Results saved in " + output_directory) - def print_report(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', + def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', verbose=False, show_word_permutation=False, show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, @@ -563,7 +662,7 @@ def print_report(self, word_size=1, state_size=1, key_state_size=1, output_direc show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, show_and=False, show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True): + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): """ Prints the graphical representation of the Report. @@ -599,7 +698,7 @@ def print_report(self, word_size=1, state_size=1, key_state_size=1, output_direc show_shift, show_linear_layer, show_xor, show_modadd, show_and, show_or, show_not, show_plaintext, show_key, - show_intermediate_output, show_cipher_output) + show_intermediate_output, show_cipher_output, show_input, show_output, save_fig=True) else: if not os.path.exists(output_directory): os.mkdir(output_directory) From b25cbf3a4377bce9399ac617a82782579276e29b Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 17:13:24 +0400 Subject: [PATCH 138/179] updated report.py --- claasp/cipher_modules/report.py | 2 +- tests/unit/cipher_modules/report_test.py | 17 +++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 3d680776..fa8a80be 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -683,7 +683,7 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire sage: speck = SpeckBlockCipher(number_of_rounds=5) sage: avalanche_test_results = speck.diffusion_tests() sage: report = Report(speck, avalanche_test_results) - sage: report.print_report() + sage: report.save_as_image() """ diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index a9b1a4e1..c947da29 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -9,7 +9,7 @@ from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests -def test_print_report(): +def test_save_as_image(): speck = SpeckBlockCipher(number_of_rounds=2) sat = SatXorDifferentialModel(speck) @@ -25,26 +25,19 @@ def test_print_report(): bit_values = (0,) * 64) trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) trail_report = Report(speck, trail) - trail_report.print_report() + trail_report.save_as_image() avalanche_results = speck.diffusion_tests() avalanche_report = Report(speck, avalanche_results) - avalanche_report.print_report() + avalanche_report.save_as_image() blackbox_results = speck.neural_network_blackbox_distinguisher_tests() blackbox_report = Report(speck,blackbox_results) - blackbox_report.print_report() + blackbox_report.save_as_image() algebraic_results = speck.algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) - algebraic_report.print_report() - - #### Adding tests for code coverage, currently not accurate as the statistical tests are not actually performed on Speck - nist_result = StatisticalTests.run_nist_statistical_tests_tool_interactively(f'claasp/cipher_modules/statistical_tests/input_data_example', -10000, 10, 1) - parsed_result_nist = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') - nist_report = Report(speck, parsed_result_nist) - nist_report.print_report() + algebraic_report.save_as_image() def test_save_as_latex_table(): From 3d3f75257d9acc302cbf514cb755e764509ae55c Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 28 Feb 2024 18:26:25 +0400 Subject: [PATCH 139/179] updated continuous_diffusion_analysis_test.py with new naming from report.py --- tests/unit/cipher_modules/continuous_diffusion_analysis_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py b/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py index 3bd9909d..c226768e 100644 --- a/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py +++ b/tests/unit/cipher_modules/continuous_diffusion_analysis_test.py @@ -17,7 +17,7 @@ def test_continuous_tests_report(): cda = ContinuousDiffusionAnalysis(speck) cda_for_repo = cda.continuous_diffusion_tests() cda_repo = Report(speck, cda_for_repo) - cda_repo.print_report() + cda_repo.save_as_image() def test_continuous_avalanche_factor(): From c16fd76555da620423180163a496ceb591b9de36 Mon Sep 17 00:00:00 2001 From: davidgerault Date: Thu, 29 Feb 2024 14:25:51 +0400 Subject: [PATCH 140/179] merged develop into branch --- tests/unit/cipher_modules/neural_network_tests_test.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/unit/cipher_modules/neural_network_tests_test.py b/tests/unit/cipher_modules/neural_network_tests_test.py index 951899c5..b2d0840b 100644 --- a/tests/unit/cipher_modules/neural_network_tests_test.py +++ b/tests/unit/cipher_modules/neural_network_tests_test.py @@ -53,8 +53,7 @@ def test_neural_network_blackbox_distinguisher_tests(): def test_neural_network_differential_distinguisher_tests(): cipher = SpeckBlockCipher(number_of_rounds=5) results = NeuralNetworkTests(cipher).neural_network_differential_distinguisher_tests(nb_samples=10) - assert results['input_parameters'] == \ - {'test_name': 'neural_network_differential_distinguisher_tests', + assert results['input_parameters'] == {'test_name': 'neural_network_differential_distinguisher_tests', 'number_of_samples': 10, 'input_differences': [[4194304], [10]], 'hidden_layers': [32, 32, 32], From c8ea6f8e8bdd9f49c2a313bc4338eafe77a7f428 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Thu, 29 Feb 2024 14:36:11 +0400 Subject: [PATCH 141/179] FIX/Change: Location of files related to MILP inequalities for non linear components or large xors moved to userspace --- claasp/cipher_modules/models/milp/__init__.py | 6 ++++++ .../milp/utils/generate_inequalities_for_large_sboxes.py | 8 ++++---- ...te_inequalities_for_wordwise_truncated_mds_matrices.py | 5 +++-- ...lities_for_wordwise_truncated_xor_with_n_input_bits.py | 7 ++++--- .../generate_inequalities_for_xor_with_n_input_bits.py | 6 +++--- .../utils/generate_sbox_inequalities_for_trail_search.py | 8 ++++---- .../generate_undisturbed_bits_inequalities_for_sboxes.py | 5 +++-- 7 files changed, 27 insertions(+), 18 deletions(-) diff --git a/claasp/cipher_modules/models/milp/__init__.py b/claasp/cipher_modules/models/milp/__init__.py index e69de29b..795e4ce7 100644 --- a/claasp/cipher_modules/models/milp/__init__.py +++ b/claasp/cipher_modules/models/milp/__init__.py @@ -0,0 +1,6 @@ +import os + +MILP_AUXILIARY_FILE_PATH = os.getcwd() + +if os.access(os.path.join(os.path.dirname(__file__), 'utils'), os.W_OK): + MILP_AUXILIARY_FILE_PATH = os.path.join(os.path.dirname(__file__), 'utils') diff --git a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.py b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.py index c575661b..3abd8f31 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.py +++ b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_large_sboxes.py @@ -22,16 +22,16 @@ The logic minimizer espresso is required for this module. It is already installed in the docker. """ -import pickle, os, pathlib +import pickle, os import subprocess - +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH from sage.rings.integer_ring import ZZ large_sbox_file_name = "dictionary_that_contains_inequalities_for_large_sboxes.obj" large_sbox_xor_linear_file_name = "dictionary_that_contains_inequalities_for_large_sboxes_xor_linear.obj" -large_sboxes_inequalities_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), large_sbox_file_name) -large_sboxes_xor_linear_inequalities_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), +large_sboxes_inequalities_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, large_sbox_file_name) +large_sboxes_xor_linear_inequalities_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, large_sbox_xor_linear_file_name) diff --git a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.py b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.py index fb3e9443..e8dbc716 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.py +++ b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_mds_matrices.py @@ -24,11 +24,12 @@ """ from itertools import product from math import ceil, log -import pickle, os, pathlib +import pickle, os from claasp.cipher_modules.models.milp.utils import utils as milp_utils +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH wordwise_truncated_mds_file_name = "dictionary_containing_truncated_mds_inequalities.obj" -wordwise_truncated_mds_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), wordwise_truncated_mds_file_name) +wordwise_truncated_mds_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, wordwise_truncated_mds_file_name) diff --git a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.py b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.py index dbe33854..66e61033 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.py +++ b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_wordwise_truncated_xor_with_n_input_bits.py @@ -23,15 +23,16 @@ """ import itertools from math import ceil, log -import pickle, os, pathlib +import pickle, os from functools import reduce from claasp.cipher_modules.models.milp.utils import utils as milp_utils from claasp.cipher_modules.models.milp.utils.utils import generate_product_of_sum_from_espresso +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH input_patterns_file_name = "dictionary_containing_truncated_input_pattern_inequalities.obj" xor_n_inputs_file_name = "dictionary_containing_truncated_xor_inequalities_between_n_input_bits.obj" -wordwise_truncated_input_pattern_inequalities_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), input_patterns_file_name) -wordwise_truncated_xor_inequalities_between_n_input_bits_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), xor_n_inputs_file_name) +wordwise_truncated_input_pattern_inequalities_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, input_patterns_file_name) +wordwise_truncated_xor_inequalities_between_n_input_bits_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, xor_n_inputs_file_name) diff --git a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.py b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.py index fb4fea24..c883bfb2 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.py +++ b/claasp/cipher_modules/models/milp/utils/generate_inequalities_for_xor_with_n_input_bits.py @@ -20,12 +20,12 @@ """ The target of this module is to generate MILP inequalities for a XOR operation between n input bits. """ -import pickle, os, pathlib -import subprocess +import pickle, os +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH file_name = "dictionary_containing_xor_inequalities_between_n_input_bits.obj" -xor_inequalities_between_n_input_bits_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), file_name) +xor_inequalities_between_n_input_bits_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, file_name) def generate_all_possible_points_with_n_bits(number_of_bits): diff --git a/claasp/cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.py b/claasp/cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.py index 1424aaef..ece6f1ef 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.py +++ b/claasp/cipher_modules/models/milp/utils/generate_sbox_inequalities_for_trail_search.py @@ -26,8 +26,8 @@ The module generate_inequalities_for_large_sboxes.py take care of both cases, small and large sboxes. Hence, this module can be removed, but we decide to keep it for comparison purpose. """ -import pickle, os, pathlib - +import pickle, os +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH from sage.rings.integer_ring import ZZ from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT @@ -35,8 +35,8 @@ small_sbox_file_name = "dictionary_that_contains_inequalities_for_small_sboxes.obj" small_sbox_xor_linear_file_name = "dictionary_that_contains_inequalities_for_small_sboxes_xor_linear.obj" -inequalities_for_small_sboxes_path = os.path.join(pathlib.Path(__file__).parent.resolve(), small_sbox_file_name) -inequalities_for_small_sboxes_xor_linear_path = os.path.join(pathlib.Path(__file__).parent.resolve(), +inequalities_for_small_sboxes_path = os.path.join(MILP_AUXILIARY_FILE_PATH, small_sbox_file_name) +inequalities_for_small_sboxes_xor_linear_path = os.path.join(MILP_AUXILIARY_FILE_PATH, small_sbox_xor_linear_file_name) diff --git a/claasp/cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.py b/claasp/cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.py index 12953016..3a1e8b77 100644 --- a/claasp/cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.py +++ b/claasp/cipher_modules/models/milp/utils/generate_undisturbed_bits_inequalities_for_sboxes.py @@ -25,14 +25,15 @@ The logic minimizer espresso is required for this module. It is already installed in the docker. """ -import pickle, os, pathlib +import pickle, os +from claasp.cipher_modules.models.milp import MILP_AUXILIARY_FILE_PATH from claasp.cipher_modules.models.milp.utils.utils import generate_espresso_input, delete_espresso_dictionary, \ output_espresso_dictionary, generate_product_of_sum_from_espresso from sage.rings.integer_ring import ZZ undisturbed_bit_sboxes_inequalities_file_name = "dictionary_that_contains_inequalities_for_sboxes_with_undisturbed_bits.obj" -undisturbed_bit_sboxes_inequalities_file_path = os.path.join(pathlib.Path(__file__).parent.resolve(), undisturbed_bit_sboxes_inequalities_file_name) +undisturbed_bit_sboxes_inequalities_file_path = os.path.join(MILP_AUXILIARY_FILE_PATH, undisturbed_bit_sboxes_inequalities_file_name) def _to_bits(x, input_size): From a9ba6edd069ab9b6dd47a0fc60ff2a5b8a7a7be0 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Thu, 29 Feb 2024 16:19:50 +0400 Subject: [PATCH 142/179] updated dieharder_statistical_tests and nist_statistical_tests --- claasp/cipher_modules/report.py | 21 +- .../dieharder_statistical_tests.py | 637 ++++-------------- .../nist_statistical_tests.py | 625 +++++------------ .../dieharder_statistical_tests_test.py | 28 +- .../nist_statistical_tests_test.py | 36 +- 5 files changed, 364 insertions(+), 983 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 3d680776..1bf28104 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -6,6 +6,8 @@ import pandas as pd import json import shutil +from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests +from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests def _print_colored_state(state, verbose, file): @@ -523,16 +525,15 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, test_name=None): if 'statistical' in self.test_name: + if 'dieharder' in self.test_name: + for dict in self.test_report['test_results']: + DieharderTests.generate_chart_round(dict,output_directory+'/'+self.cipher.id + '/' + self.test_name) + DieharderTests.generate_chart_all(self.test_report['test_results'], output_directory+'/'+self.cipher.id + '/' + self.test_name) - for it in self.cipher.inputs: - - if 'dieharder' in self.test_name: - from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - DieharderTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) - - elif 'nist' in self.test_name: - from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + elif 'nist' in self.test_name: + for dict in self.test_report['test_results']: + StatisticalTests.generate_chart_round(dict,output_directory+'/'+self.cipher.id + '/' + self.test_name) + StatisticalTests.generate_chart_all(self.test_report['test_results'], output_directory+'/'+self.cipher.id + '/' + self.test_name) elif 'algebraic' in self.test_name: x = [n+1 for n in list(range(self.cipher.number_of_rounds))] @@ -683,7 +684,7 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire sage: speck = SpeckBlockCipher(number_of_rounds=5) sage: avalanche_test_results = speck.diffusion_tests() sage: report = Report(speck, avalanche_test_results) - sage: report.print_report() + sage: report.save_as_image() """ diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index b5a8b91b..fc413226 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -36,117 +36,177 @@ def __init__(self, cipher): str_of_inputs_bit_size = list(map(str, cipher.inputs_bit_size)) self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) - - - def dieharder_statistical_tests(self, test_type, seq_size='default', seq_lines='default', number_of_samples_in_one_line='default', round_start=0, round_end=2): + def dieharder_statistical_tests(self, test_type, + bits_in_one_line='default', + number_of_lines='default', + input_index=0, + round_start=0, + round_end=0, + dieharder_report_folder_prefix="dieharder_statistics_report", + ): dieharder_test = { 'input_parameters': { - 'test_name': 'dierharder_statistical_tests', - 'test_type': test_type + 'test_name': 'dieharder_statistical_tests', + 'test_type': test_type, + 'round_start': round_start, + 'round_end': round_end, + 'input': self.cipher.inputs[input_index] }, - 'test_results':{} + 'test_results': None } + + self.folder_prefix = os.getcwd() + '/test_reports/' + dieharder_report_folder_prefix + + if round_end == 0: + round_end = self.cipher.number_of_rounds + if test_type == 'avalanche': - if seq_size == 'default': - seq_size = 1048576 - if seq_lines == 'default': - seq_lines = 384 + self.dataset_type = DatasetType.avalanche + self.input_index = input_index + + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 + + sample_size = self.cipher.inputs_bit_size[input_index] * self.cipher.output_bit_size + number_of_samples_in_one_line = math.ceil(bits_in_one_line / sample_size) + self.number_of_lines = number_of_lines + self.number_of_samples_in_one_line = number_of_samples_in_one_line + self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) + self.bits_in_one_line = sample_size * self.number_of_samples_in_one_line + + self._create_report_folder() + dataset_generate_time = time.time() + dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples) + + elif test_type == 'correlation': - for i in range(len(self.cipher.inputs)): + self.dataset_type = DatasetType.correlation + self.input_index = input_index - sample_size = self.cipher.inputs_bit_size[i] * self.cipher.output_bit_size - number_of_samples_in_one_line = math.ceil(seq_size / sample_size) + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset_generate_time = time.time() + dataset = self.data_generator.generate_correlation_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) - dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_avalanche_dieharder_statistics_test(input_index=i, - number_of_samples_in_one_line=number_of_samples_in_one_line, - number_of_lines=seq_lines, round_start=round_start, round_end=round_end) elif test_type == 'cbc': - if seq_size == 'default': - seq_size = 1048576 - if seq_lines == 'default': - seq_lines = 384 - - if self.cipher.output_bit_size > 128: - number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) - else: - number_of_blocks_in_one_sample = 8128 - # sample_size = number_of_blocks_in_one_sample * self.cipher.output_bit_size - number_of_samples_in_one_line = 1 - - for i in range(len(self.cipher.inputs)): - dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_correlation_dieharder_statistics_test(input_index=i, - number_of_samples_in_one_line=number_of_samples_in_one_line, - number_of_lines=seq_lines, - number_of_blocks_in_one_sample=number_of_blocks_in_one_sample, - round_start=round_start, round_end=round_end) + self.dataset_type = DatasetType.cbc + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 - elif test_type == 'random': + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size - if seq_size == 'default': - seq_size = 1040384 - if seq_lines == 'default': - seq_lines = 128 - if number_of_samples_in_one_line == 'default': - number_of_samples_in_one_line = 1 - number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) - # sample_size = number_of_blocks_in_one_sample * self.cipher.output_bit_size - - for i in range(len(self.cipher.inputs)): - dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_random_dieharder_statistics_test(input_index=i, - number_of_samples_in_one_line=number_of_samples_in_one_line, - number_of_lines=seq_lines, - number_of_blocks_in_one_sample=number_of_blocks_in_one_sample, - round_start=round_start, round_end=round_end) + self._create_report_folder() - elif test_type == 'low_density': + dataset_generate_time = time.time() + dataset = self.data_generator.generate_cbc_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) - if number_of_samples_in_one_line == 'default': - number_of_samples_in_one_line = 1 - if seq_size == 'default': - seq_size = 1056896 - if seq_lines == 'default': - seq_lines = 1 - number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) - - for i in range(len(self.cipher.inputs)): - n = self.cipher.inputs_bit_size[i] - ratio = min(1,(number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) - dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_low_density_dieharder_statistics_test(input_index=i, - number_of_samples_in_one_line=number_of_samples_in_one_line, - number_of_lines=seq_lines, - ratio=ratio, round_start=round_start, round_end=round_end) + elif test_type == 'random': + self.dataset_type = DatasetType.random + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1040384 + if number_of_lines == 'default': + number_of_lines = 128 - elif test_type == 'high_density': + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() - if number_of_samples_in_one_line == 'default': - number_of_samples_in_one_line = 1 - if seq_size == 'default': - seq_size = 1056896 - if seq_lines == 'default': - seq_lines = 1 - number_of_blocks_in_one_sample = math.ceil(seq_size / self.cipher.output_bit_size) - - for i in range(len(self.cipher.inputs)): - n = self.cipher.inputs_bit_size[i] - ratio = min(1,(number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) - dieharder_test['test_results'][self.cipher.inputs[i]] = self.run_high_density_dieharder_statistics_test(input_index=i, - number_of_samples_in_one_line=number_of_samples_in_one_line, - number_of_lines=seq_lines, - ratio=ratio, round_start=round_start, round_end=round_end) + dataset = self.data_generator.generate_random_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) + elif test_type == 'low_density': + self.dataset_type = DatasetType.low_density + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1056896 + if number_of_lines == 'default': + number_of_lines = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + n = self.cipher.inputs_bit_size[self.input_index] + ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) + self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset = self.data_generator.generate_low_density_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + ratio=ratio) + elif test_type == 'high_density': + self.dataset_type = DatasetType.high_density + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1056896 + if number_of_lines == 'default': + number_of_lines = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + n = self.cipher.inputs_bit_size[self.input_index] + ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) + self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset = self.data_generator.generate_high_density_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + ratio=ratio) else: - print('Invalid test_type choice. Choose among the following: avalanche, cbc, random, low_density, high_density') + # maybe print the enum value of Dataset.type + print( + 'Invalid test_type choice. Choose among the following: avalanche, correlation, cbc, random, low_density, high_density') + return + dataset_generate_time = time.time() - dataset_generate_time + if not dataset: + return + self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) + dieharder_test['test_results'] = self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART=False) + dieharder_test['input_parameters']['bits_in_one_line'] = bits_in_one_line + dieharder_test['input_parameters']['number_of_lines'] = number_of_lines return dieharder_test @staticmethod - def run_dieharder_statistical_tests_tool(input_file): + def _run_dieharder_statistical_tests_tool(input_file): """ Run dieharder tests using the Dieharder library [1]. The result will be in dieharder_test_output.txt. @@ -174,7 +234,7 @@ def run_dieharder_statistical_tests_tool(input_file): print(f'Dieharder Tests Finished!!!') @staticmethod - def parse_report(report_filename): + def _parse_report(report_filename): """ Parse the dieharder statistical tests report. It will return the parsed result in a dictionary format. @@ -411,7 +471,7 @@ def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART= dataset[round_number].tofile(dataset_filename) dieharder_execution_time = time.time() - self.run_dieharder_statistical_tests_tool(dataset_filename) + self._run_dieharder_statistical_tests_tool(dataset_filename) dieharder_execution_time = time.time() - dieharder_execution_time try: os.rename(self._DIEHARDER_OUTPUT, report_round) @@ -426,7 +486,7 @@ def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART= try: # generate report - dieharder_report_dict = self.parse_report(report_round) + dieharder_report_dict = self._parse_report(report_round) dieharder_report_dict[ 'data_type'] = f'{self.cipher.inputs[self.input_index]}_{self.dataset_type.value}' dieharder_report_dict["cipher_name"] = self.cipher.id @@ -446,405 +506,4 @@ def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART= except OSError: print(f'Error in generating all round chart.') - return dieharder_report_dicts - - def run_avalanche_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the avalanche test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0). If set to 0, means run to the last round - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); the folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report under the dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_avalanche_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.avalanche - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = self.cipher.inputs_bit_size[self.input_index] - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, - number_of_samples=self.number_of_samples) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) - - def run_correlation_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8128, round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the correlation test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, inputs=[key, plaintext], - input_index=0 means it will generate the key avalanche dataset. if input_index=1 means it will generate the - plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should be - passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- **integer** (default: ``8128); how many blocks should be generated in - one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); the folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report generated under the folder dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_correlation_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.correlation - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_correlation_dataset(input_index=self.input_index, - number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) - - def run_CBC_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8192, round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the CBC test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, inputs=[key, plaintext], - input_index=0 means it will generate the key avalanche dataset. if input_index=1 means it will generate the - plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should be - passed to the statistical test tool. - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- **integer** (default: `8192`); how many blocks should be generated in - one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); the folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report generated under the folder dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_CBC_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.cbc - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_cbc_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) - - def run_random_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8128, round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the random test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, inputs=[key, plaintext], - input_index=0 means it will generate the key avalanche dataset. if input_index=1 means it will generate the - plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should be - passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- how many blocks should be generated in one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); the folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report generated under the folder dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_random_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.random - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_random_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) - - def run_low_density_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - ratio=1, round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the low density test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, inputs=[key, plaintext], - input_index=0 means it will generate the key avalanche dataset. if input_index=1 means it will generate the - plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should be - passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``ratio`` -- **number** (default: `1`); the ratio of weight 2 (that is, two 1 in the input) as low density - inputs, range in [0, 1]. For example, if ratio = 0.5, means half of the weight 2 low density inputs will be - taken as inputs - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); the folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report generated under the folder dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_low_density_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.low_density - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = int( - 1 + self.cipher.inputs_bit_size[input_index] + math.ceil( - self.cipher.inputs_bit_size[input_index] * ( - self.cipher.inputs_bit_size[input_index] - 1) * ratio / 2)) - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_low_density_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - ratio=ratio) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) - - def run_high_density_dieharder_statistics_test(self, input_index, number_of_samples_in_one_line, number_of_lines, - ratio=1, round_start=0, round_end=0, - dieharder_report_folder_prefix="dieharder_statistics_report", - FLAG_CHART=False): - r""" - Run the high density test. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool. - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``ratio`` -- the ratio of weight 2 (that is, two 1 in the input) as high density inputs, range in [0, 1]. - For example, if ratio = 0.5, means half of the weight 2 high density inputs will be taken as inputs. - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts - (includes, index starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends - (excludes, index starts from 0), if set to 0, - means run to the last round. - - ``dieharder_report_folder_prefix`` -- **string** (default: `dieharder_statistics_report`); The folder to save - the generated statistics report from NIST STS - - ``FLAG_CHART`` -- **boolean** (default: `False`); draw the chart from dieharder statistical test if set to - True - - OUTPUT: - - - ``dieharder_report_dicts`` -- Dictionary-structure result parsed from dieharder statistical report. One could - also see the corresponding report generated under the folder dieharder_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: F = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) # doctest: +SKIP - sage: result = F.run_high_density_dieharder_statistics_test(0, 5, 5, round_end=1) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - ... - """ - self.dataset_type = DatasetType.high_density - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = int( - 1 + self.cipher.inputs_bit_size[input_index] + math.ceil( - self.cipher.inputs_bit_size[input_index] * ( - self.cipher.inputs_bit_size[input_index] - 1) * ratio / 2)) - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = os.getcwd()+'/test_reports/'+dieharder_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_high_density_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - ratio=ratio) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_dieharder_dicts(dataset, round_start, round_end, FLAG_CHART) + return dieharder_report_dicts \ No newline at end of file diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index fe7c9718..6005f7dd 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -40,50 +40,178 @@ def __init__(self, cipher): self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) - @staticmethod - def nist_statistical_tests(input_file, bit_stream_length=10000, number_of_bit_streams=10, - input_file_format=1, - statistical_test_option_list=15 * '1'): - """ - Run the run_nist_statistical_tests_tool_interactively function and process its output with the parse_output function - to standardize it for the Report class - - INPUT: - - - ``input_file`` -- **str**; file containing the bit streams - - ``bit_stream_length`` -- **integer**; bit stream length - - ``number_of_bit_streams`` -- **integer**; number of bit streams in `input_file` - - ``input_file_format`` -- **integer**; `input_file` format. Set to 0 to indicate a file containing a binary - string in ASCII, or 1 to indicate a binary file - - ``test_type`` -- **str**; the type of the test to run - - ``statistical_test_option_list`` -- **str** (default: `15 * '1'`); a binary string of size 15. This string is - used to specify a set of statistical tests we want to run - - OUTPUT: - a python dictionary representing the parsed output of the run_nist_statistical_tests_tool_interactively function - - EXAMPLES: - - from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - - result = StatisticalTests.nist_statistical_test(f'claasp/cipher_modules/statistical_tests/input_data_example') - - """ - - - StatisticalTests.run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length, number_of_bit_streams, - input_file_format, - statistical_test_option_list) + def nist_statistical_tests(self, test_type, + bits_in_one_line='default', + number_of_lines='default', + input_index=0, + round_start=0, + round_end=0, + nist_report_folder_prefix="nist_statistics_report", + ): + + nist_test = { + + 'input_parameters': { + 'test_name': 'nist_statistical_tests', + 'test_type': test_type, + 'round_start': round_start, + 'round_end': round_end, + 'input': self.cipher.inputs[input_index] + }, + 'test_results': None + } + + self.folder_prefix = os.getcwd() + '/test_reports/' + nist_report_folder_prefix + if round_end == 0: + round_end = self.cipher.number_of_rounds + if test_type == 'avalanche': + + self.dataset_type = DatasetType.avalanche + self.input_index = input_index + + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 + + sample_size = self.cipher.inputs_bit_size[input_index] * self.cipher.output_bit_size + number_of_samples_in_one_line = math.ceil(bits_in_one_line / sample_size) + self.number_of_lines = number_of_lines + self.number_of_samples_in_one_line = number_of_samples_in_one_line + self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) + self.bits_in_one_line = sample_size * self.number_of_samples_in_one_line + + self._create_report_folder() + dataset_generate_time = time.time() + dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples) + + elif test_type == 'correlation': + + self.dataset_type = DatasetType.correlation + self.input_index = input_index + + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset_generate_time = time.time() + dataset = self.data_generator.generate_correlation_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) + + elif test_type == 'cbc': + + self.dataset_type = DatasetType.cbc + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1048576 + if number_of_lines == 'default': + number_of_lines = 384 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset_generate_time = time.time() + dataset = self.data_generator.generate_cbc_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) + + elif test_type == 'random': + self.dataset_type = DatasetType.random + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1040384 + if number_of_lines == 'default': + number_of_lines = 128 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset = self.data_generator.generate_random_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) + + elif test_type == 'low_density': + self.dataset_type = DatasetType.low_density + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1056896 + if number_of_lines == 'default': + number_of_lines = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + n = self.cipher.inputs_bit_size[self.input_index] + ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) + self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset = self.data_generator.generate_low_density_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + ratio=ratio) + elif test_type == 'high_density': + self.dataset_type = DatasetType.high_density + self.input_index = input_index + if bits_in_one_line == 'default': + bits_in_one_line = 1056896 + if number_of_lines == 'default': + number_of_lines = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_lines = number_of_lines + self.number_of_samples = self.number_of_lines + 1 + n = self.cipher.inputs_bit_size[self.input_index] + ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) + self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) + self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + + self._create_report_folder() + + dataset = self.data_generator.generate_high_density_dataset(input_index=self.input_index, + number_of_samples=self.number_of_samples, + ratio=ratio) + else: + # maybe print the enum value of Dataset.type + print( + 'Invalid test_type choice. Choose among the following: avalanche, correlation, cbc, random, low_density, high_density') + return - report = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') + dataset_generate_time = time.time() - dataset_generate_time + if not dataset: + return + self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) + nist_test['test_results'] = self._generate_nist_dicts(dataset, round_start, round_end, + flag_chart=False) + nist_test['input_parameters']['bits_in_one_line'] = bits_in_one_line + nist_test['input_parameters']['number_of_lines'] = number_of_lines - return report + return nist_test @staticmethod - def run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length=10000, number_of_bit_streams=10, + def _run_nist_statistical_tests_tool(input_file, bit_stream_length=10000, number_of_bit_streams=10, input_file_format=1, statistical_test_option_list=15 * '1'): """ @@ -113,7 +241,7 @@ def run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length= sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests sage: if not os.path.exists(f'test_reports/statistical_tests/experiments'): ....: os.makedirs(f'test_reports/statistical_tests/experiments') - sage: result = StatisticalTests.run_nist_statistical_tests_tool_interactively( + sage: result = StatisticalTests._run_nist_statistical_tests_tool( ....: f'claasp/cipher_modules/statistical_tests/input_data_example', ....: 10000, 10, 1) Statistical Testing In Progress......... @@ -122,7 +250,7 @@ def run_nist_statistical_tests_tool_interactively(input_file, bit_stream_length= sage: result True """ - def mkdir_folder_experiment(path_prefix, folder_experiment): + def _mkdir_folder_experiment(path_prefix, folder_experiment): path_folder_experiment = os.path.join(path_prefix, folder_experiment) if not os.path.exists(path_folder_experiment): pathlib.Path(path_folder_experiment).mkdir(parents=True, exist_ok=False, mode=0o777) @@ -149,7 +277,7 @@ def mkdir_folder_experiment(path_prefix, folder_experiment): for directory in ["AlgorithmTesting", "BBS", "CCG", "G-SHA1", "LCG", "MODEXP", "MS", "QCG1", "QCG2", "XOR"]: path_prefix = os.path.join(nist_local_experiment_folder, directory) for experiment_name in folder_experiments: - mkdir_folder_experiment(path_prefix, experiment_name) + _mkdir_folder_experiment(path_prefix, experiment_name) os.system(f'chmod -R 777 {nist_local_experiment_folder}') input_file = os.path.abspath(input_file) @@ -162,7 +290,7 @@ def mkdir_folder_experiment(path_prefix, folder_experiment): return True @staticmethod - def parse_report(report_filename): + def _parse_report(report_filename): """ Parse the nist statistical tests report. It will return the parsed result in a dictionary format. @@ -396,7 +524,7 @@ def _write_execution_time(self, execution_description, execution_time): except Exception as e: print(f'Error: {e.strerror}') - def _generate_sts_dicts(self, dataset, round_start, round_end, test_type, flag_chart=False): + def _generate_nist_dicts(self, dataset, round_start, round_end, flag_chart=False): # seems that the statistical tools cannot change the default folder 'experiments' nist_local_experiment_folder = f"/usr/local/bin/sts-2.1.2/experiments/" dataset_folder = 'dataset' @@ -424,7 +552,7 @@ def _generate_sts_dicts(self, dataset, round_start, round_end, test_type, flag_c dataset[round_number].tofile(dataset_filename) sts_execution_time = time.time() - self.run_nist_statistical_tests_tool_interactively(dataset_filename, self.bits_in_one_line, + self._run_nist_statistical_tests_tool(dataset_filename, self.bits_in_one_line, self.number_of_lines, 1) sts_execution_time = time.time() - sts_execution_time try: @@ -439,21 +567,16 @@ def _generate_sts_dicts(self, dataset, round_start, round_end, test_type, flag_c try: # generate report - sts_report_dict = self.parse_report( + sts_report_dict = self._parse_report( os.path.join(report_folder_round, "AlgorithmTesting/finalAnalysisReport.txt")) sts_report_dict['data_type'] = f'{self.cipher.inputs[self.input_index]}_{self.dataset_type.value}' sts_report_dict["cipher_name"] = self.cipher.id sts_report_dict["round"] = round_number sts_report_dict["rounds"] = self.cipher.number_of_rounds sts_report_dicts.append(sts_report_dict) - # generate round chart - if flag_chart: - self.generate_chart_round(sts_report_dict, self.report_folder) except OSError: print(f"Error in parsing report for round {round_number}.") - self.generate_chart_for_all_rounds(flag_chart, sts_report_dicts) - print("Finished.") return sts_report_dicts @@ -462,406 +585,4 @@ def generate_chart_for_all_rounds(self, flag_chart, sts_report_dicts): try: self.generate_chart_all(sts_report_dicts, self.report_folder) except OSError: - print("Error in generating all round chart.") - - def run_avalanche_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, number_of_lines, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the avalanche test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); the folder to save the generated - statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_avalanche_nist_statistics_test(0, 10, 10, round_end=2) - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.avalanche - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = self.cipher.inputs_bit_size[self.input_index] - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, - number_of_samples=self.number_of_samples) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "avalanche", flag_chart) - - def run_correlation_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8128, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the correlation test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- **integer** (default: `8128`); how many blocks should be generated in - one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- the round that the statistical test ends (excludes, index starts from 0), if set to 0, means - run to the last round. - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); the folder to save the generated - statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_correlation_nist_statistics_test(0, 10, 10, round_end=2) - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.correlation - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_correlation_dataset( - input_index=self.input_index, number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "correlation", flag_chart) - - def run_CBC_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8192, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the CBC test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- **integer** (default: `8192`); how many blocks should be generated in - one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); the folder to save the generated - statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_CBC_nist_statistics_test(0, 2, 2, round_end=2) # long time - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.cbc - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_cbc_dataset( - input_index=input_index, number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "CBC", flag_chart) - - def run_random_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, number_of_lines, - number_of_blocks_in_one_sample=8128, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the random test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``number_of_blocks_in_one_sample`` -- **integer** (default: `8128`); how many blocks should be generated in - one test sequence - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); The folder to save the generated - statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_random_nist_statistics_test(0, 10, 10, round_end=2) - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.random - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = number_of_blocks_in_one_sample - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_random_dataset( - input_index=input_index, number_of_samples=self.number_of_samples, - number_of_blocks_in_one_sample=self.number_of_blocks_in_one_sample) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "random", flag_chart) - - def run_low_density_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, - number_of_lines, ratio=1, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the low density test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``ratio`` -- **integer** (default: `1`); the ratio of weight 2 (that is, two 1 in the input) as low density - inputs, range in [0, 1]. For example, if ratio = 0.5, means half of the weight 2 low density inputs will be - taken as inputs - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); the folder to save the generated - statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_low_density_nist_statistics_test(0, 10, 10, round_end=2) - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.low_density - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = int( - 1 + self.cipher.inputs_bit_size[input_index] + math.ceil( - self.cipher.inputs_bit_size[input_index] * ( - self.cipher.inputs_bit_size[input_index] - 1) * ratio / 2)) - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_low_density_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - ratio=ratio) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "low_density", flag_chart) - - def run_high_density_nist_statistics_test( - self, input_index, number_of_samples_in_one_line, number_of_lines, - ratio=1, round_start=0, round_end=0, - nist_sts_report_folder_prefix=reports_path, flag_chart=False): - r""" - Run the high density test using NIST statistical tools. - - INPUT: - - - ``input_index`` -- **integer**; the index of inputs to generate testing data. For example, - inputs=[key, plaintext], input_index=0 means it will generate the key avalanche dataset. if input_index=1 - means it will generate the plaintext avalanche dataset - - ``number_of_samples_in_one_line`` -- **integer**; how many testing data should be generated in one line should - be passed to the statistical test tool - - ``number_of_lines`` -- **integer**; how many lines should be passed to the statistical test tool - - ``ratio`` -- **integer** (default: `1`); the ratio of weight 2 (that is, two 1 in the input) as high density - inputs, range in [0, 1]. For example, if ratio = 0.5, means half of the weight 2 high density inputs will be - taken as inputs - - ``round_start`` -- **integer** (default: `0`); the round that the statistical test starts (includes, index - starts from 0) - - ``round_end`` -- **integer** (default: `0`); the round that the statistical test ends (excludes, index starts - from 0), if set to 0, means run to the last round - - ``nist_sts_report_folder_prefix`` -- **string** - (default: `test_reports/statistical_tests/nist_statistics_report`); the folder to save the - generated statistics report from NIST STS - - ``flag_chart`` -- **boolean** (default: `False`); draw the chart from nist statistical test if set to True - - OUTPUT: - - - ``nist_sts_report_dicts`` -- Dictionary-structure result parsed from nist statistical report. One could also - see the corresponding report generated under the folder nist_statistics_report folder - - EXAMPLES:: - - sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: F = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) - sage: result = F.run_high_density_nist_statistics_test(0, 10, 10, round_end=2) - Statistical Testing In Progress......... - ... - Finished. - """ - self.dataset_type = DatasetType.high_density - self.input_index = input_index - if round_end == 0: - round_end = self.cipher.number_of_rounds - self.number_of_lines = number_of_lines - block_size = self.cipher.output_bit_size - self.number_of_blocks_in_one_sample = int( - 1 + self.cipher.inputs_bit_size[input_index] + math.ceil( - self.cipher.inputs_bit_size[input_index] * ( - self.cipher.inputs_bit_size[input_index] - 1) * ratio / 2)) - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * block_size * self.number_of_samples_in_one_line - self.folder_prefix = nist_sts_report_folder_prefix - - self._create_report_folder() - - dataset_generate_time = time.time() - dataset = self.data_generator.generate_high_density_dataset(input_index=input_index, - number_of_samples=self.number_of_samples, - ratio=ratio) - dataset_generate_time = time.time() - dataset_generate_time - if not dataset: - return - self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - - return self._generate_sts_dicts(dataset, round_start, round_end, "high_density", flag_chart) + print("Error in generating all round chart.") \ No newline at end of file diff --git a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py index c2be591c..4b22965c 100644 --- a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py @@ -12,29 +12,29 @@ @pytest.mark.skip("Takes to long") def test_run_dieharder_statistical_tests_tool_interactively(): - result = DieharderTests.run_dieharder_statistical_tests_tool_interactively(INPUT_DATA_EXAMPLE) + result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) assert result == TESTS_FINISHED @pytest.mark.skip("Takes to long") def test_parse_report(): - result = DieharderTests.run_dieharder_statistical_tests_tool_interactively(INPUT_DATA_EXAMPLE) + result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) assert result == TESTS_FINISHED - dictio = DieharderTests.parse_report(OUTPUT_TXT) + dictio = DieharderTests._parse_report(OUTPUT_TXT) assert dictio == OUTPUT_TXT_IS_FINISHED @pytest.mark.skip("Takes to long") def test_generate_chart_round(): - result = DieharderTests.run_dieharder_statistical_tests_tool_interactively(INPUT_DATA_EXAMPLE) + result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) assert result == TESTS_FINISHED - dictio = DieharderTests.parse_report(OUTPUT_TXT) + dictio = DieharderTests._parse_report(OUTPUT_TXT) assert dictio == OUTPUT_TXT_IS_FINISHED @@ -51,11 +51,11 @@ def test_generate_chart_round(): @pytest.mark.skip("Takes to long") def test_generate_chart_all(): - result = DieharderTests.run_dieharder_statistical_tests_tool_interactively(INPUT_DATA_EXAMPLE) + result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) assert result == TESTS_FINISHED - dictio = DieharderTests.parse_report(OUTPUT_TXT) + dictio = DieharderTests._parse_report(OUTPUT_TXT) assert dictio == OUTPUT_TXT_IS_FINISHED @@ -72,9 +72,9 @@ def test_generate_chart_all(): @pytest.mark.skip("Takes to long") -def test_run_avalanche_dieharder_statistics_test(): +def test_run_avalanche_dieharder_statistical_tests(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_avalanche_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='avalanche', round_end=1) assert result == TESTS_FINISHED @@ -82,7 +82,7 @@ def test_run_avalanche_dieharder_statistics_test(): @pytest.mark.skip("Takes to long") def test_run_correlation_dieharder_statistics_test(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_correlation_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='correlation', round_end=1) assert result == TESTS_FINISHED @@ -90,7 +90,7 @@ def test_run_correlation_dieharder_statistics_test(): @pytest.mark.skip("Takes to long") def test_run_CBC_dieharder_statistics_test(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_CBC_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='cbc', round_end=1) assert result == TESTS_FINISHED @@ -98,7 +98,7 @@ def test_run_CBC_dieharder_statistics_test(): @pytest.mark.skip("Takes to long") def test_run_random_dieharder_statistics_test(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_random_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='random', round_end=1) assert result == TESTS_FINISHED @@ -106,7 +106,7 @@ def test_run_random_dieharder_statistics_test(): @pytest.mark.skip("Takes to long") def test_run_low_density_dieharder_statistics_test(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_low_density_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='low_density', round_end=1) assert result == TESTS_FINISHED @@ -114,6 +114,6 @@ def test_run_low_density_dieharder_statistics_test(): @pytest.mark.skip("Takes to long") def test_run_high_density_dieharder_statistics_test(): dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.run_high_density_dieharder_statistics_test(0, 5, 5, round_end=1) + result = dieharder.dieharder_statistical_tests(test_type='high_density', round_end=1) assert result == TESTS_FINISHED diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 76bbfdfe..3dcf59ab 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -1,25 +1,25 @@ import os import sys from io import StringIO - +import pytest from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests REPORT_EXAMPLE_TXT = 'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt' -def test_run_nist_statistical_tests_tool_interactively(): +def test_run_nist_statistical_tests_tool(): if os.path.exists('test_reports/statistical_tests/experiments'): os.removedirs('test_reports/statistical_tests/experiments') os.makedirs('test_reports/statistical_tests/experiments') - result = StatisticalTests.run_nist_statistical_tests_tool_interactively( + result = StatisticalTests._run_nist_statistical_tests_tool( 'claasp/cipher_modules/statistical_tests/input_data_example', 10000, 10, 1) assert result is True def test_parse_report(): - dictio = StatisticalTests.parse_report(REPORT_EXAMPLE_TXT) + dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) assert dictio['number_of_sequences_threshold'] == [{'total': 10, 'passed': 8}, {'total': 8, 'passed': 7}] assert dictio['randomness_test'][0]['test_id'] == 1 @@ -27,7 +27,7 @@ def test_parse_report(): def test_generate_chart_round(): - dictio = StatisticalTests.parse_report(REPORT_EXAMPLE_TXT) + dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) dictio['data_type'] = 'random' dictio['cipher_name'] = 'toy_cipher' dictio['round'] = 1 @@ -45,7 +45,7 @@ def test_generate_chart_round(): def test_generate_chart_all(): - dictio = StatisticalTests.parse_report(REPORT_EXAMPLE_TXT) + dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) dictio['data_type'] = 'random' dictio['cipher_name'] = 'toy_cipher' dictio['round'] = 1 @@ -62,68 +62,68 @@ def test_generate_chart_all(): 'Drawing chart for all rounds is in progress.\n' \ 'Drawing chart for all rounds is in finished.\n' - +@pytest.mark.skip("Takes too long") def test_run_avalanche_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_avalanche_nist_statistics_test(0, 10, 10, round_end=2) + tests.nist_statistical_tests('avalanche', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 - +@pytest.mark.skip("Takes too long") def test_run_correlation_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_correlation_nist_statistics_test(0, 10, 10, round_end=2) + tests.nist_statistical_tests('correlation', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 - +@pytest.mark.skip("Takes too long") def test_run_CBC_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_CBC_nist_statistics_test(0, 2, 2, round_end=2) + tests.nist_statistical_tests('cbc', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 - +@pytest.mark.skip("Takes too long") def test_run_random_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_random_nist_statistics_test(0, 10, 10, round_end=2) + tests.nist_statistical_tests('random', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 - +@pytest.mark.skip("Takes too long") def test_run_low_density_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_low_density_nist_statistics_test(0, 10, 10, round_end=2) + tests.nist_statistical_tests('low_density', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 - +@pytest.mark.skip("Takes too long") def test_run_high_density_nist_statistics_test(): tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.run_high_density_nist_statistics_test(0, 10, 10, round_end=2) + tests.nist_statistical_tests('high_density', round_end=2) sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 From 36df54901328457008daa51f4153ae345a8c0df4 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Fri, 1 Mar 2024 09:34:46 +0400 Subject: [PATCH 143/179] updated report test --- tests/unit/cipher_modules/report_test.py | 61 +++++++++++------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index a9b1a4e1..07f6263b 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -8,46 +8,42 @@ from claasp.cipher_modules.report import Report from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests +from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests +from claasp.cipher_modules.algebraic_tests import AlgebraicTests +from claasp.cipher_modules.avalanche_tests import AvalancheTests -def test_print_report(): +def test_save_as_image(): speck = SpeckBlockCipher(number_of_rounds=2) sat = SatXorDifferentialModel(speck) plaintext = set_fixed_variables( - component_id = 'plaintext', - constraint_type = 'not_equal', - bit_positions = range(32), - bit_values = (0,) * 32) + component_id='plaintext', + constraint_type='not_equal', + bit_positions=range(32), + bit_values=(0,) * 32) key = set_fixed_variables( - component_id = 'key', - constraint_type = 'equal', - bit_positions = range(64), - bit_values = (0,) * 64) + component_id='key', + constraint_type='equal', + bit_positions=range(64), + bit_values=(0,) * 64) trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) trail_report = Report(speck, trail) - trail_report.print_report() + trail_report.save_as_image() - avalanche_results = speck.diffusion_tests() + avalanche_results = AvalancheTests(speck).avalanche_tests() avalanche_report = Report(speck, avalanche_results) - avalanche_report.print_report() + avalanche_report.save_as_image() - blackbox_results = speck.neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(speck,blackbox_results) - blackbox_report.print_report() + blackbox_results = NeuralNetworkTests(speck).neural_network_blackbox_distinguisher_tests() + blackbox_report = Report(speck, blackbox_results) + blackbox_report.save_as_image() - algebraic_results = speck.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) - algebraic_report.print_report() + algebraic_report.save_as_image() - #### Adding tests for code coverage, currently not accurate as the statistical tests are not actually performed on Speck - nist_result = StatisticalTests.run_nist_statistical_tests_tool_interactively(f'claasp/cipher_modules/statistical_tests/input_data_example', -10000, 10, 1) - parsed_result_nist = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') - nist_report = Report(speck, parsed_result_nist) - nist_report.print_report() def test_save_as_latex_table(): - simon = SimonBlockCipher(number_of_rounds=2) smt = SmtXorDifferentialModel(simon) @@ -64,7 +60,7 @@ def test_save_as_latex_table(): trail = smt.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - avalanche_test_results = simon.diffusion_tests() + avalanche_test_results = AvalancheTests(simon).avalanche_tests() avalanche_report = Report(simon, avalanche_test_results) avalanche_report.save_as_latex_table() @@ -87,18 +83,19 @@ def test_save_as_DataFrame(): bit_values=(0,) * 64) trail = smt.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - algebraic_results = speck.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(speck).algebraic_tests(timeout=1) algebraic_report = Report(speck, algebraic_results) algebraic_report.save_as_DataFrame() trail_report = Report(speck, trail) trail_report.save_as_DataFrame() -def test_save_as_json(): +def test_save_as_json(): simon = SimonBlockCipher(number_of_rounds=3) - neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(simon,neural_network_blackbox_distinguisher_tests_results) + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests( + simon).neural_network_blackbox_distinguisher_tests() + blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) milp = MilpXorDifferentialModel(simon) plaintext = set_fixed_variables( @@ -116,7 +113,7 @@ def test_save_as_json(): trail_report = Report(simon, trail) - algebraic_results = simon.algebraic_tests(timeout=1) + algebraic_results = AlgebraicTests(simon).algebraic_tests(timeout=1) algebraic_report = Report(simon, algebraic_results) algebraic_report.save_as_json() @@ -125,9 +122,9 @@ def test_save_as_json(): def test_clean_reports(): - simon = SimonBlockCipher(number_of_rounds=2) - neural_network_blackbox_distinguisher_tests_results = simon.neural_network_blackbox_distinguisher_tests() + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests( + simon).neural_network_blackbox_distinguisher_tests() blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) blackbox_report.save_as_json() From 985183079c1684a84f3bd9176f6f6286676cb810 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Fri, 1 Mar 2024 15:50:38 +0400 Subject: [PATCH 144/179] FIX: File path in CP module changed to absolute path --- claasp/cipher_modules/models/cp/cp_model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/claasp/cipher_modules/models/cp/cp_model.py b/claasp/cipher_modules/models/cp/cp_model.py index a57419f5..de8ed203 100644 --- a/claasp/cipher_modules/models/cp/cp_model.py +++ b/claasp/cipher_modules/models/cp/cp_model.py @@ -59,7 +59,7 @@ def initialise_model(self): self.component_and_probability = {} self._model_prefix = [ 'include "globals.mzn";', - 'include "claasp/cipher_modules/models/cp/Minizinc_functions/Usefulfunctions.mzn";'] + f"include \"{os.path.join(os.path.dirname(__file__), 'Minizinc_functions', 'Usefulfunctions.mzn')}\";"] def add_solutions_from_components_values(self, components_values, memory, model_type, solutions, solve_time, solver_name, solver_output, total_weight): From f2295fcbc9724e224fe8d3b24fa0887cc91454f6 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Fri, 1 Mar 2024 17:32:19 +0400 Subject: [PATCH 145/179] updated report class, sat_xor_differential_model, auto_nd_pipeline and statistical tests --- .../sat_models/sat_xor_differential_model.py | 6 +- claasp/cipher_modules/neural_network_tests.py | 34 ++- claasp/cipher_modules/report.py | 254 +++++++++++------- .../dieharder_statistical_tests.py | 33 ++- .../nist_statistical_tests.py | 26 +- 5 files changed, 235 insertions(+), 118 deletions(-) diff --git a/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py b/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py index 288e7e99..d2ae11bb 100644 --- a/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py +++ b/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py @@ -175,7 +175,6 @@ def find_all_xor_differential_trails_with_fixed_weight(self, fixed_weight, fixed solution = self.solve(XOR_DIFFERENTIAL, solver_name=solver_name) solution['building_time_seconds'] = end_building_time - start_building_time solution['test_name'] = "find_all_xor_differential_trails_with_fixed_weight" - return solutions_list def find_all_xor_differential_trails_with_weight_at_most(self, min_weight, max_weight, fixed_values=[], @@ -223,8 +222,9 @@ def find_all_xor_differential_trails_with_weight_at_most(self, min_weight, max_w solutions = self.find_all_xor_differential_trails_with_fixed_weight(weight, fixed_values=fixed_values, solver_name=solver_name) - for solution in solutions_list: - solution['test_name'] = "find_all_xor_differential_trails_with_weight_at_most" + + for solution in solutions: + solution['test_name'] = "find_all_xor_differential_trails_with_weight_at_most" solutions_list.extend(solutions) return solutions_list diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 8c34cc71..11f7a448 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -597,6 +597,25 @@ def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** {2: 0.49932000041007996} """ + neural_distinguisher_test_results = { + 'input_parameters': { + 'test_name': 'neural_distinguisher_test', + 'optimizer_samples': optimizer_samples, + 'optimizer_generations': optimizer_generations, + 'training_samples': training_samples, + 'testing_samples': testing_samples, + 'number_of_epochs': number_of_epochs, + 'neural_net': neural_net + }, + 'test_results': { + 'plaintext': { + 'cipher_output': { + 'neural_distinguisher_test': [] + } + } + } + } + def data_generator(nr, samples): return self.get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples) @@ -620,9 +639,22 @@ def data_generator(nr, samples): neural_network = self.get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.cipher.inputs}), from round {nr}...') - return self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, + neural_results = self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'neural_distinguisher_test'].append({'accuracies': list(neural_results.values())}) + i = 0 + for it in self.cipher.inputs: + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'neural_distinguisher_test'][0][it + '_diff'] = hex(input_difference[i]) + i += 1 + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output']['differences_scores'] = {} + for diff, scores in zip(diff, scores): + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'differences_scores'][hex(diff)] = scores + return neural_distinguisher_test_results + def _make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, reg_param=10 ** -5, final_activation='sigmoid', depth=1): diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 1bf28104..89a30cc7 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -11,16 +11,17 @@ def _print_colored_state(state, verbose, file): + for line in state: - print('', end='', file = file) + print('', end='', file=file) for x in line: - print(f'{x} ', end='', file = file) + print(f'{x} ', end='', file=file) - occ = [i for i in range(len(line)) if line[i] != '_'] + occ = [i for i in range(len(line)) if line[i] != '_' and line[i] != '*'] if verbose: - print(f'\tactive words positions = {occ}', file = file) + print(f'\tactive words positions = {occ}', file=file) else: - print('', file = file) + print('', file=file) def _dict_to_latex_table(data_dict, header_list): @@ -68,7 +69,6 @@ def _dict_to_latex_table(data_dict, header_list): return latex_code - def _latex_heatmap(table, table_string, bit_count): table_string += "\\hspace*{-4cm}\n\\begin{tikzpicture}[scale=1.1]\n\t\\foreach \\y [count=\\n] in {\n\t\t" for round in table: @@ -134,7 +134,6 @@ def __init__(self, cipher, test_report): """ - self.cipher = cipher self.test_report = test_report @@ -149,17 +148,18 @@ def __init__(self, cipher, test_report): self.input_parameters = {} self.test_name = test_report['test_name'] if type(test_report) is dict else test_report[0]['test_name'] - def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', word_size=1, state_size=1, key_state_size=1, - verbose=False, show_word_permutation=False, - show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, - show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, - show_permuation=False, show_multi_input_non_linear_logical_operator=False, - show_modular=False, show_modsub=False, - show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, - show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, - show_and=False, - show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', + fixed_input_difference='average', word_size=1, state_size=1, key_state_size=1, + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): if 'trail' in self.test_name: self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, @@ -175,14 +175,21 @@ def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output=' else: - if test_name == 'trail_search': + test_list = [] + if 'statistical' in self.test_name: + test_list.append(self.test_name) + elif 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': + test_list = list(self.test_report['test_results'][fixed_input][fixed_output].keys()) + if test_name not in test_list and 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': print('Error! Invalid test name. Please choose a valid test name') + print('The test name has to be one of the following : ',end='') + print(test_list) return - self._produce_graph(show_graph=True,fixed_input=fixed_input,fixed_output=fixed_output, test_name=test_name).show() + self._produce_graph(show_graph=True, fixed_input=fixed_input, fixed_output=fixed_output, + fixed_input_difference=fixed_input_difference, test_name=test_name) def _export(self, file_format, output_dir): - if not os.path.exists(output_dir): os.makedirs(output_dir) @@ -218,21 +225,28 @@ def _export(self, file_format, output_dir): if file_format == '.csv': - df = pd.DataFrame.from_dict(self.test_report["components_values" if 'trail' in self.test_name else "test_results"]) + df = pd.DataFrame.from_dict( + self.test_report["components_values" if 'trail' in self.test_name else "test_results"]) df.to_csv(path + '/' + self.test_name + file_format) elif file_format == '.json': with open(path + '/' + self.test_name + file_format, 'w') as fp: - json.dump(self.test_report["components_values" if 'trail' in self.test_name else "test_results"], fp, default=lambda x: float(x)) + json.dump(self.test_report["components_values" if 'trail' in self.test_name else "test_results"], + fp, default=lambda x: float(x)) elif file_format == '.tex': if 'algebraic' in self.test_name: with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(self.test_report["test_results"], header_list=["number of variables", "number of equations", "number of monomials", "max degree of equation", "test passed"]).replace('_','\\_')) + f.write(_dict_to_latex_table(self.test_report["test_results"], + header_list=["number of variables", "number of equations", + "number of monomials", "max degree of equation", + "test passed"]).replace('_', '\\_')) else: headers = ["Component_id", "Value", "Weight"] with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(self.test_report["components_values"], header_list=headers).replace('_','\\_')) + f.write( + _dict_to_latex_table(self.test_report["components_values"], header_list=headers).replace( + '_', '\\_')) else: @@ -328,7 +342,9 @@ def _export(self, file_format, output_dir): elif file_format == '.tex': if not isinstance(result[res_key][0], list): with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(dict(pd.DataFrame(result)),header_list=[res_key,"component_id"]).replace('_','\\_')) + f.write(_dict_to_latex_table(dict(pd.DataFrame(result)), + header_list=[res_key, "component_id"]).replace('_', + '\\_')) else: table = result[res_key] @@ -340,16 +356,19 @@ def _export(self, file_format, output_dir): table_string = _latex_heatmap(table_split, table_string, bit_count) table_string += "\\caption{" + self.test_name.replace("_", - "\\_") + "\\_" + it + "\\_" + out.replace( + "\\_") + "\\_" + it + "\\_" + out.replace( "_", "\\_") + "\\_" + test.replace("_", "\\_") + "\\_" + result[ "input_difference_value"] + ("}" "\\label{fig:" + self.test_name.replace( - "_", "\\_") + "\\_" + it + "\\_" + out.replace("_", "\\_") + "\\_" + test.replace("_", - "\\_") + "\\_" + + "_", "\\_") + "\\_" + it + "\\_" + out.replace("_", + "\\_") + "\\_" + test.replace( + "_", + "\\_") + "\\_" + result[ "input_difference_value"] + "}\n") table_string += "\\end{figure}" - with open(path + '/' + str(result["input_difference_value"]) + file_format, 'w') as fp: + with open(path + '/' + str(result["input_difference_value"]) + file_format, + 'w') as fp: fp.write(table_string) print("Report saved in " + output_dir + '/' + self.cipher.id) @@ -379,21 +398,21 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word os.makedirs(os.getcwd() + '/test_reports/') if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) - filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/'+ self.test_report['solver_name'] + '_' + self.test_name + '.txt' + filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/' + self.test_report[ + 'solver_name'] + '_' + self.test_name + '.txt' if os.path.exists(filename): os.remove(filename) - file = open(filename,'a') + file = open(filename, 'a') else: - file=None + file = None input_comps = list(locals().keys()) component_types = [] - show_key_flow = False for comp in list(self.test_report['components_values'].keys()): if 'key' in comp: show_key_flow = True - if (comp == 'key' or comp == 'plaintext') and comp not in component_types: + if ('key' in comp or comp == 'plaintext') and comp not in component_types: component_types.append(comp) elif '_'.join(comp.split('_')[:-2]) not in component_types and comp[-2:] != "_i" and comp[-2:] != "_o": component_types.append('_'.join(comp.split('_')[:-2])) @@ -402,7 +421,6 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word component_types.append(('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1]))) show_components = {} - for comp in component_types: for comp_choice in input_comps: if 'show_' + comp == comp_choice: @@ -411,20 +429,19 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word show_components[comp] = locals()[comp_choice] if 'show_' + comp == comp_choice + '_i' and show_input: show_components[comp] = locals()[comp_choice] + if 'key' in comp and show_key == True: + show_components[comp] = True out_list = {} - if show_key_flow: - key_flow = ['key'] - else: - key_flow = [] + key_flow = ['key'] abs_prob = 0 - + rel_prob = 0 word_denominator = '1' if word_size == 1 else 'A' for comp_id in self.test_report['components_values'].keys(): - if comp_id != "plaintext" and comp_id != "key": + if (comp_id != "plaintext" and comp_id != "key") and "key" not in comp_id: rel_prob = self.test_report['components_values'][comp_id]['weight'] abs_prob += rel_prob @@ -438,22 +455,26 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word input_links = self.cipher.get_component_from_id(comp_id).input_id_links comp_value = '_'.join(comp_id.split('_')[:-2]) - if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links) and show_key_flow: + if (all((id_link in key_flow or 'constant' in id_link or id_link+'_o' in key_flow or id_link+'_i' in key_flow) for id_link in input_links) or ('key' in comp_id and 'comp_id' != 'key')): key_flow.append(comp_id) - key_flow = key_flow + [constant_id for constant_id in input_links if 'constant' in constant_id] + constants_i = [constant_id+'_i' for constant_id in input_links if 'constant' in constant_id] + constants_o = [constant_id+'_o' for constant_id in input_links if 'constant' in constant_id] + key_flow = key_flow + constants_i + constants_o if show_components[ - comp_value if comp_id not in ['plaintext', 'key', 'cipher_output', 'cipher_output_o', 'cipher_output_i', + comp_value if (comp_id not in ['plaintext', 'cipher_output', 'cipher_output_o', 'cipher_output_i', 'intermediate_output', 'intermediate_output_o', - 'intermediate_output_i'] else comp_id]: + 'intermediate_output_i'] and 'key' not in comp_id) else comp_id]: value = self.test_report['components_values'][comp_id]['value'] - bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value))) + bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value))) if '*' not in value else list( + value[2:]) - word_list = [word_denominator if ''.join(bin_list[x:x + word_size]).count('1') > 0 else '_' for x in + word_list = ['*' if '*' in ''.join(bin_list[x:x + word_size]) else word_denominator if ''.join(bin_list[x:x + word_size]).count('1') > 0 else '_' for x in range(0, len(bin_list), word_size)] + if ('intermediate' in comp_id or 'cipher' in comp_id) and comp_id not in key_flow: size = (state_size, len(word_list) // state_size) @@ -471,16 +492,17 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word out_format[i].append(word_list[j + i * size[1]]) out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else ( - out_format, 0, 0) + out_format, 0, 0) for comp_id in out_list.keys(): if comp_id not in key_flow: - if comp_id == 'plaintext' or comp_id == 'key': + if comp_id == 'plaintext' or 'key' in comp_id: print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename if save_fig else None) + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id if comp_id[-2:] not in ["_i", "_o"] else comp_id[:-2]).input_id_links}', + file=file if save_fig else None) else: print(f' \t{comp_id}\t', file=file) _print_colored_state(out_list[comp_id][0], verbose, file) @@ -493,27 +515,38 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word print('total weight = ' + str(self.test_report['total_weight']), file=file) show_key_flow = False + for key_comp in key_flow: if key_comp != 'key' and self.test_report['components_values'][key_comp]['weight'] != 0: show_key_flow = True break + if show_key_flow: print('', file=file) print("KEY FLOW", file=file) print('', file=file) for comp_id in key_flow: + if comp_id not in ['plaintext', 'key', 'cipher_output','intermediate_output'] and 'key' not in comp_id and 'intermediate_output' not in comp_id and comp_id[-2:] not in ['_i','_o']: + identifier = '_'.join(comp_id.split('_')[:-2]) + elif 'intermediate_output' in comp_id: + identifier = 'intermediate_output' + comp_id[-2:] + elif comp_id[-2:] == '_i' and show_input: + identifier = comp_id.split('_')[0] + '_i' + elif comp_id[-2:] == '_o' and show_output: + identifier = comp_id.split('_')[0] + '_o' + else: + identifier = comp_id - if show_components[ - '_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: - if comp_id == 'plaintext' or comp_id == 'key': + if show_components[identifier]: + if comp_id == 'plaintext' or 'key' in comp_id: print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename) + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id if comp_id[-2:] not in ["_i", "_o"] else comp_id[:-2]).input_id_links}', + file=file) else: print(f' \t{comp_id}\t', file=file) _print_colored_state(out_list[comp_id][0], verbose, file) @@ -522,39 +555,68 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word out_list[comp_id][2]), file=file) print('', file=file) - def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, test_name=None): + def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, + fixed_input_difference=None, test_name=None): - if 'statistical' in self.test_name: + + if self.test_name == 'neural_distinguisher_test': + df_scores = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['differences_scores'], index=['scores']).T + df_result = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'], index=['results']).T + + if show_graph: + print('RESULTS') + print(df_result) + print() + print() + print('SCORES') + print(df_scores) + + else: + df_result.to_csv(output_directory + '/neural_distinguisher_test_results.csv') + df_scores.to_csv(output_directory + '/neural_distinguisher_test_scores.csv') + + + elif 'statistical' in self.test_name: if 'dieharder' in self.test_name: for dict in self.test_report['test_results']: - DieharderTests.generate_chart_round(dict,output_directory+'/'+self.cipher.id + '/' + self.test_name) - DieharderTests.generate_chart_all(self.test_report['test_results'], output_directory+'/'+self.cipher.id + '/' + self.test_name) + DieharderTests.generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + DieharderTests.generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'nist' in self.test_name: for dict in self.test_report['test_results']: - StatisticalTests.generate_chart_round(dict,output_directory+'/'+self.cipher.id + '/' + self.test_name) - StatisticalTests.generate_chart_all(self.test_report['test_results'], output_directory+'/'+self.cipher.id + '/' + self.test_name) + StatisticalTests.generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + StatisticalTests.generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'algebraic' in self.test_name: - x = [n+1 for n in list(range(self.cipher.number_of_rounds))] - - for test_key in self.test_report['test_results'].keys() if test_name==None else [test_name]: - y = self.test_report['test_results'][test_key] - df = pd.DataFrame([x,y]).T - df.columns = ['round', test_key] - fig = px.line(df, x='round', y=test_key) - fig.write_image(output_directory+'/'+test_key+'.png') + + y = list(self.test_report['test_results'].keys()) + num_rounds = len(self.test_report['test_results']['number_of_equations']) + x = [i+1 for i in range(num_rounds)] + z = [[1]*num_rounds]*len(self.test_report['test_results'].keys()) + z_text = [] + for test in self.test_report['test_results'].keys(): + z_text.append([str(x) for x in repo.test_report['test_results'][test]]) + fig = px.imshow(z, x=x, y=y, color_continuous_scale='Viridis', aspect="auto") + fig.update_traces(text=z_text, texttemplate="%{text}") + fig.update_xaxes(side="top") + if show_graph==False: + fig.write_image(output_directory + '/test_results.png') if show_graph: - return fig + fig.show(renderer='notebook_connected') + return else: inputs = list(self.test_report['test_results'].keys()) - for it in inputs if fixed_input==None else [fixed_input]: + for it in inputs if fixed_input == None else [fixed_input]: if not os.path.exists( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) and show_graph == False: os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) outputs = list(self.test_report['test_results'][it].keys()) - for out in outputs if fixed_input==None else [fixed_output]: + for out in outputs if fixed_input == None else [fixed_output]: if out == 'cipher_output': continue if not os.path.exists( @@ -564,7 +626,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i results = list(self.test_report['test_results'][it][out].keys()) - for res in results if test_name==None else [test_name]: + for res in results if test_name == None else [test_name]: if not os.path.exists(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) and show_graph == False: os.mkdir( @@ -598,9 +660,11 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i graph_data[i + 1] = [case[res_key][i]] if type(case[res_key][i]) != list else \ case[res_key][i] - df = pd.DataFrame.from_dict(graph_data).T if len(graph_data[1]) > 1: + if case[ + 'input_difference_value'] != fixed_input_difference and fixed_input_difference != None: + continue num_subplots = int(ceil(len(graph_data[1]) / 32)) fig = make_subplots(num_subplots, 1, vertical_spacing=0.08) fig.update_layout({ @@ -613,7 +677,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i text=[['{:.3f}'.format(float(y)) for y in x] for x in z_data], x=list(range(i * 32, 32 * (i + 1))), - y=list(range(1,self.cipher.number_of_rounds+1)), zmin=0, + y=list(range(1, self.cipher.number_of_rounds + 1)), zmin=0, zmax=1, zauto=False), i + 1, 1) fig.update_layout({ @@ -628,6 +692,9 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i fig.write_image(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( res) + '_' + str(case['input_difference_value']) + '.png', scale=4) + else: + fig.show(renderer='notebook_connected') + return fig.data = [] fig.layout = {} @@ -640,30 +707,28 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i if show_graph == False: fig.write_image(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + - '/' + str(res) + '.png', - scale=4) - + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + + '/' + str(res) + '.png', + scale=4) + else: + fig.show(renderer='notebook_connected') + return fig.data = [] fig.layout = {} - if show_graph==True: - return fig - - print("Results saved in " + output_directory) def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', - verbose=False, show_word_permutation=False, - show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, - show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, - show_permuation=False, show_multi_input_non_linear_logical_operator=False, - show_modular=False, show_modsub=False, - show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, - show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, - show_and=False, - show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): """ Prints the graphical representation of the Report. @@ -688,7 +753,6 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire """ - if 'trail' in self.test_name: self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, show_var_shift, show_var_rotate, show_theta_xoodoo, diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index fc413226..6e388b94 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -314,7 +314,7 @@ def _parse_report(report_filename): return report_dict @staticmethod - def generate_chart_round(report_dict, output_dir=''): + def generate_chart_round(report_dict, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -367,15 +367,21 @@ def generate_chart_round(report_dict, output_dir=''): f'{report_dict["cipher_name"]}: {report_dict["data_type"]}, Round {report_dict["round"]}|{report_dict["rounds"]}') plt.xlabel('Tests') plt.yticks([-1, 0, 1], ['FAILED', 'WEAK', 'PASSED']) - if output_dir =='': - output_dir = f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - plt.savefig(output_dir) + + if show_graph==False: + if output_dir =='': + output_dir = f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') else: - plt.savefig(output_dir+'/'+f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') + plt.show() + plt.clf() + plt.close() print(f'Drawing round {report_dict["round"]} is finished. Please find the chart in file {output_dir}.') @staticmethod - def generate_chart_all(report_dict_list, output_dir=''): + def generate_chart_all(report_dict_list, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -428,13 +434,16 @@ def generate_chart_all(report_dict_list, output_dir=''): # plt.grid(True) chart_filename = f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' - if output_dir =='': - output_dir = f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' - plt.savefig(output_dir) + if show_graph==False: + if output_dir =='': + output_dir = f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png') else: - plt.savefig(output_dir+'/'+f'dieharder_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png') - - plt.savefig(chart_filename) + plt.show() + plt.clf() + plt.close() print(f'Drawing chart for all rounds is in finished. Please find the chart in file {chart_filename}.') def _create_report_folder(self): diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 6005f7dd..27fa53ad 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -395,7 +395,7 @@ def _parse_report(report_filename): return report_dict @staticmethod - def generate_chart_round(report_dict, output_dir=''): + def generate_chart_round(report_dict, output_dir='',show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -442,15 +442,21 @@ def generate_chart_round(report_dict, output_dir=''): plt.title(f'{report_dict["cipher_name"]}:{report_dict["data_type"]}, Round " {report_dict["round"]}|{report_dict["rounds"]}') plt.xlabel('Test ID') plt.ylabel('Passing Rate') - if output_dir == '': - output_dir = f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - plt.savefig(output_dir) + + if show_graph==False: + if output_dir == '': + output_dir = f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' + plt.savefig(output_dir) + else: + plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') else: - plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') + plt.show() + plt.clf() + plt.close() print(f'Drawing round {report_dict["round"]} is finished.') @staticmethod - def generate_chart_all(report_dict_list, report_folder=""): + def generate_chart_all(report_dict_list, report_folder="",show_graph=False): """ Generate the corresponding chart based on the list of parsed report dictionary for all rounds. @@ -505,7 +511,13 @@ def generate_chart_all(report_dict_list, report_folder=""): [i * 2 + 1 for i in range(int(report_dict_list[0]["rounds"] / 2 + 1))]) plt.yticks([i * 20 for i in range(1, 11)], [i * 20 for i in range(1, 11)]) chart_filename = f'nist_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' - plt.savefig(os.path.join(report_folder, chart_filename)) + + if show_graph==False: + plt.savefig(os.path.join(report_folder, chart_filename)) + else: + plt.show() + plt.clf() + plt.close() print(f'Drawing chart for all rounds is in finished.') def _create_report_folder(self): From 56684d8659a6896e16faf8200db0d874ba3f68ec Mon Sep 17 00:00:00 2001 From: MFormenti Date: Fri, 1 Mar 2024 17:40:15 +0400 Subject: [PATCH 146/179] updated report class, sat_xor_differential_model, auto_nd_pipeline and statistical tests --- claasp/cipher_modules/report.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 89a30cc7..a6e807e2 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -561,10 +561,12 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i if self.test_name == 'neural_distinguisher_test': df_scores = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['differences_scores'], index=['scores']).T - df_result = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'], index=['results']).T + df_result = pd.DataFrame([self.test_report['test_results']['plaintext']['cipher_output'][0]['accuracies']], index=['accuracy']).T if show_graph: print('RESULTS') + print('plaintext_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['plaintext_diff'])) + print('key_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['key_diff'])) print(df_result) print() print() From 44a6a71adc5854067bf0ab775350ce94bd5d7368 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Fri, 1 Mar 2024 18:43:51 +0400 Subject: [PATCH 147/179] updated report class and report_test --- claasp/cipher_modules/report.py | 16 ++++++++++------ tests/unit/cipher_modules/report_test.py | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index a6e807e2..d46f1996 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -457,9 +457,13 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word if (all((id_link in key_flow or 'constant' in id_link or id_link+'_o' in key_flow or id_link+'_i' in key_flow) for id_link in input_links) or ('key' in comp_id and 'comp_id' != 'key')): key_flow.append(comp_id) - constants_i = [constant_id+'_i' for constant_id in input_links if 'constant' in constant_id] - constants_o = [constant_id+'_o' for constant_id in input_links if 'constant' in constant_id] - key_flow = key_flow + constants_i + constants_o + if 'linear' in self.test_name: + constants_i = [constant_id+'_i' for constant_id in input_links if 'constant' in constant_id] + constants_o = [constant_id+'_o' for constant_id in input_links if 'constant' in constant_id] + key_flow = key_flow + constants_i + constants_o + else: + constants = [constant_id for constant_id in input_links if 'constant' in constant_id] + key_flow = key_flow + constants if show_components[ comp_value if (comp_id not in ['plaintext', 'cipher_output', 'cipher_output_o', 'cipher_output_i', @@ -516,6 +520,7 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word show_key_flow = False + for key_comp in key_flow: if key_comp != 'key' and self.test_report['components_values'][key_comp]['weight'] != 0: show_key_flow = True @@ -538,7 +543,6 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word identifier = comp_id.split('_')[0] + '_o' else: identifier = comp_id - if show_components[identifier]: if comp_id == 'plaintext' or 'key' in comp_id: print(f'\t{comp_id}\t', file=file) @@ -601,7 +605,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i z = [[1]*num_rounds]*len(self.test_report['test_results'].keys()) z_text = [] for test in self.test_report['test_results'].keys(): - z_text.append([str(x) for x in repo.test_report['test_results'][test]]) + z_text.append([str(x) for x in self.test_report['test_results'][test]]) fig = px.imshow(z, x=x, y=y, color_continuous_scale='Viridis', aspect="auto") fig.update_traces(text=z_text, texttemplate="%{text}") fig.update_xaxes(side="top") @@ -718,7 +722,6 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i fig.data = [] fig.layout = {} - print("Results saved in " + output_directory) def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', verbose=False, show_word_permutation=False, @@ -776,6 +779,7 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire if not os.path.exists(output_directory + '/' + self.cipher.id + '/' + self.test_name): os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name) self._produce_graph(output_directory) + print('Report saved in ' + output_directory) def clean_reports(self, output_dir=os.getcwd() + '/test_reports/reports'): diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index 5d9d137d..3cf5605b 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -26,6 +26,7 @@ def test_save_as_image(): constraint_type='equal', bit_positions=range(64), bit_values=(0,) * 64) + trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) trail_report = Report(speck, trail) trail_report.save_as_image() From 0c134377199f7227fd45dca442c7fdb719436f45 Mon Sep 17 00:00:00 2001 From: cs Date: Fri, 1 Mar 2024 19:38:19 +0400 Subject: [PATCH 148/179] Remove invalid doctest example --- claasp/cipher_modules/report.py | 16 ++--- .../dieharder_statistical_tests.py | 69 +++---------------- .../nist_statistical_tests.py | 48 +++---------- .../dieharder_statistical_tests.html | 8 +-- .../nist_statistical_tests.html | 8 +-- docs/build/html/genindex-G.html | 4 +- docs/build/html/genindex-all.html | 4 +- .../dieharder_statistical_tests_test.py | 4 +- .../nist_statistical_tests_test.py | 4 +- 9 files changed, 41 insertions(+), 124 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index d46f1996..8fe35037 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -585,17 +585,17 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i elif 'statistical' in self.test_name: if 'dieharder' in self.test_name: for dict in self.test_report['test_results']: - DieharderTests.generate_chart_round(dict, - output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) - DieharderTests.generate_chart_all(self.test_report['test_results'], - output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + DieharderTests._generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + DieharderTests._generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'nist' in self.test_name: for dict in self.test_report['test_results']: - StatisticalTests.generate_chart_round(dict, - output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) - StatisticalTests.generate_chart_all(self.test_report['test_results'], - output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + StatisticalTests._generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + StatisticalTests._generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'algebraic' in self.test_name: diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 6e388b94..4ba9d9eb 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -223,6 +223,11 @@ def _run_dieharder_statistical_tests_tool(input_file): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.statistical_tests.dataset_generator import DatasetGenerator + sage: dataset_generator = DatasetGenerator(SpeckBlockCipher(number_of_rounds=3)) + sage: dataset = dataset_generator.generate_random_dataset(input_index=0, number_of_samples=100, number_of_blocks_in_one_sample=30000) + sage: dataset[0].tofile(f'claasp/cipher_modules/statistical_tests/input_data_example') sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP @@ -246,18 +251,6 @@ def _parse_report(report_filename): - ``report_dict`` -- return the parsed result in a dictionary format - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP - ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP - ....: ) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - - sage: dict = DieharderTests.parse_report(f'dieharder_test_output.txt') # doctest: +SKIP - Parsing dieharder_test_output.txt is in progress. - Parsing dieharder_test_output.txt is finished. """ print(f'Parsing {report_filename} is in progress.') report_dict = {} @@ -314,7 +307,7 @@ def _parse_report(report_filename): return report_dict @staticmethod - def generate_chart_round(report_dict, output_dir='', show_graph=False): + def _generate_chart_round(report_dict, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -327,28 +320,6 @@ def generate_chart_round(report_dict, output_dir='', show_graph=False): - save the chart with filename f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP - ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP - ....: ) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: dict = DieharderTests.parse_report(f'dieharder_test_output.txt') # doctest: +SKIP - Parsing dieharder_test_output.txt is in progress. - Parsing dieharder_test_output.txt is finished. - - sage: dict['data_type'] = 'random' # doctest: +SKIP - sage: dict['data_type'] = 'random' # doctest: +SKIP - sage: dict['cipher_name'] = 'toy_cipher' # doctest: +SKIP - sage: dict['round'] = 1 # doctest: +SKIP - sage: dict['rounds'] = 1 # doctest: +SKIP - sage: DieharderTests.generate_chart_round(dict) # doctest: +SKIP - Drawing round 1 is in progress. - Drawing round 1 is finished. Please find the chart in file dieharder_random_toy_cipher_round_1.png. """ print(f'Drawing round {report_dict["round"]} is in progress.') x = [i for i in range(len(report_dict['randomness_test']))] @@ -381,7 +352,7 @@ def generate_chart_round(report_dict, output_dir='', show_graph=False): print(f'Drawing round {report_dict["round"]} is finished. Please find the chart in file {output_dir}.') @staticmethod - def generate_chart_all(report_dict_list, output_dir='', show_graph=False): + def _generate_chart_all(report_dict_list, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -394,28 +365,6 @@ def generate_chart_all(report_dict_list, output_dir='', show_graph=False): - save the chart with filename f'dieharder_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP - ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP - ....: ) # long time # doctest: +SKIP - ... - Dieharder Tests Finished!!! - - sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: dict = DieharderTests.parse_report(f'dieharder_test_output.txt') # doctest: +SKIP - Parsing dieharder_test_output.txt is in progress. - Parsing dieharder_test_output.txt is finished. - - sage: dict['data_type'] = 'random' # doctest: +SKIP - sage: dict['cipher_name'] = 'toy_cipher' # doctest: +SKIP - sage: dict['round'] = 1 # doctest: +SKIP - sage: dict['rounds'] = 1 # doctest: +SKIP - sage: dict_list = [dict] # doctest: +SKIP - sage: DieharderTests.generate_chart_all(dict_list) # doctest: +SKIP - Drawing chart for all rounds is in progress. - Drawing chart for all rounds is in finished. Please find the chart in file dieharder_random_toy_cipher.png. """ print("Drawing chart for all rounds is in progress.") x = [i + 1 for i in range(report_dict_list[0]["rounds"])] @@ -504,14 +453,14 @@ def _generate_dieharder_dicts(self, dataset, round_start, round_end, FLAG_CHART= dieharder_report_dicts.append(dieharder_report_dict) # generate round chart if FLAG_CHART: - self.generate_chart_round(dieharder_report_dict) + self._generate_chart_round(dieharder_report_dict) except OSError: print(f'Error in parsing report for round {round_number}.') # generate chart for all rounds if FLAG_CHART: try: - self.generate_chart_all(dieharder_report_dicts) + self._generate_chart_all(dieharder_report_dicts) except OSError: print(f'Error in generating all round chart.') diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 27fa53ad..e3792544 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -241,6 +241,11 @@ def _run_nist_statistical_tests_tool(input_file, bit_stream_length=10000, number sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests sage: if not os.path.exists(f'test_reports/statistical_tests/experiments'): ....: os.makedirs(f'test_reports/statistical_tests/experiments') + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.statistical_tests.dataset_generator import DatasetGenerator + sage: dataset_generator = DatasetGenerator(SpeckBlockCipher(number_of_rounds=3)) + sage: dataset = dataset_generator.generate_random_dataset(input_index=0, number_of_samples=100, number_of_blocks_in_one_sample=30000) + sage: dataset[0].tofile(f'claasp/cipher_modules/statistical_tests/input_data_example') sage: result = StatisticalTests._run_nist_statistical_tests_tool( ....: f'claasp/cipher_modules/statistical_tests/input_data_example', ....: 10000, 10, 1) @@ -302,12 +307,6 @@ def _parse_report(report_filename): - ``report_dict`` -- return the parsed result in a dictionary format - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: dict = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is in progress. - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is finished. """ print(f'Parsing {report_filename} is in progress.') with open(report_filename, 'r') as f: @@ -395,7 +394,7 @@ def _parse_report(report_filename): return report_dict @staticmethod - def generate_chart_round(report_dict, output_dir='',show_graph=False): + def _generate_chart_round(report_dict, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -407,21 +406,6 @@ def generate_chart_round(report_dict, output_dir='',show_graph=False): - save the chart with filename f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' - - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: dict = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is in progress. - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is finished. - - sage: dict['data_type'] = 'random' - sage: dict['cipher_name'] = 'toy_cipher' - sage: dict['round'] = 1 - sage: dict['rounds'] = 1 - sage: StatisticalTests.generate_chart_round(dict) - Drawing round 1 is in progress. - Drawing round 1 is finished. """ print(f'Drawing round {report_dict["round"]} is in progress.') x = [i for i in range(1, 189)] @@ -456,7 +440,7 @@ def generate_chart_round(report_dict, output_dir='',show_graph=False): print(f'Drawing round {report_dict["round"]} is finished.') @staticmethod - def generate_chart_all(report_dict_list, report_folder="",show_graph=False): + def _generate_chart_all(report_dict_list, report_folder="", show_graph=False): """ Generate the corresponding chart based on the list of parsed report dictionary for all rounds. @@ -467,22 +451,6 @@ def generate_chart_all(report_dict_list, report_folder="",show_graph=False): OUTPUT: - save the chart with filename f'nist_{data_type}_{cipher_name}.png' - - EXAMPLES:: - - sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: dict = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is in progress. - Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is finished. - - sage: dict['data_type'] = 'random' - sage: dict['cipher_name'] = 'toy_cipher' - sage: dict['round'] = 1 - sage: dict['rounds'] = 1 - sage: dict_list = [dict] - sage: StatisticalTests.generate_chart_all(dict_list) - Drawing chart for all rounds is in progress. - Drawing chart for all rounds is in finished. """ print("Drawing chart for all rounds is in progress.") x = [i + 1 for i in range(report_dict_list[0]["rounds"])] @@ -595,6 +563,6 @@ def _generate_nist_dicts(self, dataset, round_start, round_end, flag_chart=False def generate_chart_for_all_rounds(self, flag_chart, sts_report_dicts): if flag_chart: try: - self.generate_chart_all(sts_report_dicts, self.report_folder) + self._generate_chart_all(sts_report_dicts, self.report_folder) except OSError: print("Error in generating all round chart.") \ No newline at end of file diff --git a/docs/build/html/cipher_modules/statistical_tests/dieharder_statistical_tests.html b/docs/build/html/cipher_modules/statistical_tests/dieharder_statistical_tests.html index 7246d096..eaaa31ca 100644 --- a/docs/build/html/cipher_modules/statistical_tests/dieharder_statistical_tests.html +++ b/docs/build/html/cipher_modules/statistical_tests/dieharder_statistical_tests.html @@ -63,7 +63,7 @@

Navigation

Bases: object

-static generate_chart_all(report_dict_list)¶
+static _generate_chart_all(report_dict_list)¶

Generate the corresponding chart based on the parsed report dictionary.

INPUT:

    @@ -92,7 +92,7 @@

    Navigation

    sage: dict['round'] = 1 # doctest: +SKIP sage: dict['rounds'] = 1 # doctest: +SKIP sage: dict_list = [dict] # doctest: +SKIP -sage: DieharderTests.generate_chart_all(dict_list) # doctest: +SKIP +sage: DieharderTests._generate_chart_all(dict_list) # doctest: +SKIP Drawing chart for all rounds is in progress. Drawing chart for all rounds is in finished. Please find the chart in file dieharder_random_toy_cipher.png. @@ -101,7 +101,7 @@

    Navigation

    -static generate_chart_round(report_dict)¶
    +static _generate_chart_round(report_dict)¶

    Generate the corresponding chart based on the parsed report dictionary.

    INPUT:

      @@ -130,7 +130,7 @@

      Navigation

      sage: dict['cipher_name'] = 'toy_cipher' # doctest: +SKIP sage: dict['round'] = 1 # doctest: +SKIP sage: dict['rounds'] = 1 # doctest: +SKIP -sage: DieharderTests.generate_chart_round(dict) # doctest: +SKIP +sage: DieharderTests._generate_chart_round(dict) # doctest: +SKIP Drawing round 1 is in progress. Drawing round 1 is finished. Please find the chart in file dieharder_random_toy_cipher_round_1.png. diff --git a/docs/build/html/cipher_modules/statistical_tests/nist_statistical_tests.html b/docs/build/html/cipher_modules/statistical_tests/nist_statistical_tests.html index a82aa3e3..6a6df06a 100644 --- a/docs/build/html/cipher_modules/statistical_tests/nist_statistical_tests.html +++ b/docs/build/html/cipher_modules/statistical_tests/nist_statistical_tests.html @@ -63,7 +63,7 @@

      Navigation

      Bases: object

      -static generate_chart_all(report_dict_list, report_folder='')¶
      +static _generate_chart_all(report_dict_list, report_folder='')¶

      Generate the corresponding chart based on the list of parsed report dictionary for all rounds.

      INPUT:

        @@ -84,7 +84,7 @@

        Navigation

        sage: dict['round'] = 1 sage: dict['rounds'] = 1 sage: dict_list = [dict] -sage: StatisticalTests.generate_chart_all(dict_list) +sage: StatisticalTests._generate_chart_all(dict_list) Drawing chart for all rounds is in progress. Drawing chart for all rounds is in finished. @@ -98,7 +98,7 @@

        Navigation

        -static generate_chart_round(report_dict, report_folder='')¶
        +static _generate_chart_round(report_dict, report_folder='')¶

        Generate the corresponding chart based on the parsed report dictionary.

        INPUT:

          @@ -119,7 +119,7 @@

          Navigation

          sage: dict['cipher_name'] = 'toy_cipher' sage: dict['round'] = 1 sage: dict['rounds'] = 1 -sage: StatisticalTests.generate_chart_round(dict) +sage: StatisticalTests._generate_chart_round(dict) Drawing round 1 is in progress. Drawing round 1 is finished. diff --git a/docs/build/html/genindex-G.html b/docs/build/html/genindex-G.html index f631a106..4a2cce59 100644 --- a/docs/build/html/genindex-G.html +++ b/docs/build/html/genindex-G.html @@ -206,7 +206,7 @@

          Index – G

        • generate_cbc_dataset() (DatasetGenerator method)
        • -
        • generate_chart_all() (DieharderTests static method) +
        • _generate_chart_all() (DieharderTests static method)
        • generate_chart_for_all_rounds() (StatisticalTests method)
        • -
        • generate_chart_round() (DieharderTests static method) +
        • _generate_chart_round() (DieharderTests static method)
          • (StatisticalTests static method) diff --git a/docs/build/html/genindex-all.html b/docs/build/html/genindex-all.html index dcc78ba8..523bdb03 100644 --- a/docs/build/html/genindex-all.html +++ b/docs/build/html/genindex-all.html @@ -11267,7 +11267,7 @@

            G

          • generate_cbc_dataset() (DatasetGenerator method)
          • -
          • generate_chart_all() (DieharderTests static method) +
          • _generate_chart_all() (DieharderTests static method)
          • generate_chart_for_all_rounds() (StatisticalTests method)
          • -
          • generate_chart_round() (DieharderTests static method) +
          • _generate_chart_round() (DieharderTests static method)
            • (StatisticalTests static method) diff --git a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py index 4b22965c..68db1b46 100644 --- a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py @@ -42,7 +42,7 @@ def test_generate_chart_round(): dictio['cipher_name'] = 'toy_cipher' dictio['round'] = 1 dictio['rounds'] = 1 - chart = DieharderTests.generate_chart_round(dictio) + chart = DieharderTests._generate_chart_round(dictio) assert chart == "Drawing round 1 is in progress.\n" \ "Drawing round 1 is finished. Please find the chart in file " \ @@ -64,7 +64,7 @@ def test_generate_chart_all(): dictio['round'] = 1 dictio['rounds'] = 1 dict_list = [dictio] - chart = DieharderTests.generate_chart_all(dict_list) + chart = DieharderTests._generate_chart_all(dict_list) assert chart == "Drawing chart for all rounds is in progress.\n" \ "Drawing chart for all rounds is in finished. Please find the chart in file " \ diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 3dcf59ab..28a4a081 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -36,7 +36,7 @@ def test_generate_chart_round(): old_stdout = sys.stdout result = StringIO() sys.stdout = result - StatisticalTests.generate_chart_round(dictio) + StatisticalTests._generate_chart_round(dictio) sys.stdout = old_stdout assert result.getvalue() == \ @@ -55,7 +55,7 @@ def test_generate_chart_all(): old_stdout = sys.stdout result = StringIO() sys.stdout = result - StatisticalTests.generate_chart_all(dict_list) + StatisticalTests._generate_chart_all(dict_list) sys.stdout = old_stdout assert result.getvalue() == \ From 1a153ed898a50a03427297f2ba75e6cf48cfc0d7 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Sun, 3 Mar 2024 16:06:56 +0400 Subject: [PATCH 149/179] Added unit tests for XOR differentials. Added two unit tests for Speck32/64 using evaluate_vectorized: one in the single-key scenario and another in the related-key scenario. --- .../sat_xor_differential_model_test.py | 66 +++++++++++++++++-- 1 file changed, 59 insertions(+), 7 deletions(-) diff --git a/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_differential_model_test.py b/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_differential_model_test.py index ca965952..323c63ce 100644 --- a/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_differential_model_test.py +++ b/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_differential_model_test.py @@ -1,8 +1,9 @@ +import numpy as np + from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher from claasp.cipher_modules.models.utils import set_fixed_variables, integer_to_bit_list from claasp.cipher_modules.models.sat.sat_models.sat_xor_differential_model import SatXorDifferentialModel - def test_find_all_xor_differential_trails_with_fixed_weight(): speck = SpeckBlockCipher(number_of_rounds=5) sat = SatXorDifferentialModel(speck, window_size_weight_pr_vars=1) @@ -11,8 +12,8 @@ def test_find_all_xor_differential_trails_with_fixed_weight(): key = set_fixed_variables(component_id='key', constraint_type='equal', bit_positions=range(64), bit_values=(0,) * 64) - assert sat.find_all_xor_differential_trails_with_fixed_weight( - 9, fixed_values=[plaintext, key])[0]['total_weight'] == 9.0 + assert int(sat.find_all_xor_differential_trails_with_fixed_weight( + 9, fixed_values=[plaintext, key])[0]['total_weight']) == int(9.0) def test_find_all_xor_differential_trails_with_weight_at_most(): @@ -36,7 +37,7 @@ def test_find_lowest_weight_xor_differential_trail(): bit_positions=range(64), bit_values=(0,) * 64) trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) - assert trail['total_weight'] == 9.0 + assert int(trail['total_weight']) == int(9.0) def test_find_one_xor_differential_trail(): @@ -65,7 +66,7 @@ def test_find_one_xor_differential_trail_with_fixed_weight(): bit_positions=range(64), bit_values=(0,) * 64) result = sat.find_one_xor_differential_trail_with_fixed_weight(3, fixed_values=[plaintext, key]) - assert result['total_weight'] == 3.0 + assert int(result['total_weight']) == int(3.0) def test_find_one_xor_differential_trail_with_fixed_weight_and_window_heuristic_per_component(): @@ -80,7 +81,7 @@ def test_find_one_xor_differential_trail_with_fixed_weight_and_window_heuristic_ key = set_fixed_variables(component_id='key', constraint_type='equal', bit_positions=range(64), bit_values=(0,) * 64) result = sat.find_one_xor_differential_trail_with_fixed_weight(3, fixed_values=[plaintext, key]) - assert result['total_weight'] == 3.0 + assert int(result['total_weight']) == int(3.0) def test_build_xor_differential_trail_model_fixed_weight_and_parkissat(): @@ -100,4 +101,55 @@ def test_build_xor_differential_trail_model_fixed_weight_and_parkissat(): sat.build_xor_differential_trail_model(3, fixed_variables=[plaintext, key]) result = sat._solve_with_external_sat_solver("xor_differential", "parkissat", [f'-c={number_of_cores}']) - assert result['total_weight'] == 3.0 + assert int(result['total_weight']) == int(3.0) + +def test_differential_in_related_key_scenario_speck3264(): + def repeat_input_difference(input_difference_, number_of_samples_, number_of_bytes_): + bytes_array = input_difference_.to_bytes(number_of_bytes_, 'big') + np_array = np.array(list(bytes_array), dtype=np.uint8) + column_array = np_array.reshape(-1, 1) + return np.tile(column_array, (1, number_of_samples_)) + + rng = np.random.default_rng(seed=42) + number_of_samples = 2**22 + input_difference = 0x2a14001 + output_difference = 0x850a810a + key_difference = 0x2800020000800001 + input_difference_data = repeat_input_difference(input_difference, number_of_samples, 4) + output_difference_data = repeat_input_difference(output_difference, number_of_samples, 4) + key_difference_data = repeat_input_difference(key_difference, number_of_samples, 8) + speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=7) + key_data = rng.integers(low=0, high=256, size=(8, number_of_samples), dtype=np.uint8) + + plaintext_data1 = rng.integers(low=0, high=256, size=(4, number_of_samples), dtype=np.uint8) + plaintext_data2 = plaintext_data1 ^ input_difference_data + ciphertext1 = speck.evaluate_vectorized([plaintext_data1, key_data]) + ciphertext2 = speck.evaluate_vectorized([plaintext_data2, key_data ^ key_difference_data]) + total = np.sum(ciphertext1[0] ^ ciphertext2[0] == output_difference_data.T) + import math + total_prob_weight = math.log(total, 2) + assert 18 > total_prob_weight > 12 + +def test_differential_in_single_key_scenario_speck3264(): + def repeat_input_difference(input_difference_, number_of_samples_, number_of_bytes_): + bytes_array = input_difference_.to_bytes(number_of_bytes_, 'big') + np_array = np.array(list(bytes_array), dtype=np.uint8) + column_array = np_array.reshape(-1, 1) + return np.tile(column_array, (1, number_of_samples_)) + + rng = np.random.default_rng(seed=42) + number_of_samples = 2**22 + input_difference = 0x20400040 + output_difference = 0x106040E0 + input_difference_data = repeat_input_difference(input_difference, number_of_samples, 4) + output_difference_data = repeat_input_difference(output_difference, number_of_samples, 4) + speck = SpeckBlockCipher(block_bit_size=32, key_bit_size=64, number_of_rounds=5) + key_data = rng.integers(low=0, high=256, size=(8, number_of_samples), dtype=np.uint8) + plaintext_data1 = rng.integers(low=0, high=256, size=(4, number_of_samples), dtype=np.uint8) + plaintext_data2 = plaintext_data1 ^ input_difference_data + ciphertext1 = speck.evaluate_vectorized([plaintext_data1, key_data]) + ciphertext2 = speck.evaluate_vectorized([plaintext_data2, key_data]) + total = np.sum(ciphertext1[0] ^ ciphertext2[0] == output_difference_data.T) + import math + total_prob_weight = math.log(total, 2) + assert 21 > total_prob_weight > 13 \ No newline at end of file From 3256a85a8c46c824361b38e2b8d091f6223e9ed1 Mon Sep 17 00:00:00 2001 From: Juan del Carmen Grados Vasquez Date: Sun, 3 Mar 2024 16:24:54 +0400 Subject: [PATCH 150/179] PyCharm with Docker as a Remote Interpreter --- docs/CONTRIBUTING.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index edd2ef06..0ea75287 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -115,6 +115,8 @@ Build #PY-212.4746.96, built on July 27, 2021 ## Python interpreter +### Configuring PyCharm with a Local Interpreter + We will now set up PyCharm to use the Python 3 interpreter of SageMath 1. Click `PyCharm` menu in the top-left toolbar and select `Preferences...` 2. Click the drop-down menu of `Project: claasp` and select `Python Interpreter` @@ -130,7 +132,43 @@ After the steps above, you should now be able to: 1. Click on `Add Configuration...`. 2. Click on `Add new run configuration...`. 3. Select "Python". -4. Add the file to be run/debugged in the field "Script Path". +4. Add the file to be run/debugged in the field "Script Path" + +### Configuring PyCharm with Docker as a Remote Interpreter +```angular2html +PyCharm 2023.3.3 (Professional Edition) +Build #PY-233.13763.11, built on January 25, 2024 +``` +Configuring PyCharm to use Python from within a container involves setting up a remote interpreter. PyCharm supports Docker as a remote interpreter, allowing you to develop inside a Docker container which can encapsulate the project's environment, dependencies, and settings that CLAASP need. Here's how to set it up: + +#### Requirements +- **Docker**: Ensure Docker is installed and running on your system. +- **PyCharm 2023.3.3 (Professional Edition)**: The Docker integration feature is available in the Professional edition of PyCharm. + +#### Steps to Configure Docker as a Remote Interpreter in PyCharm + +1. **Open Your Project in PyCharm**: Start PyCharm and open the project you want to configure. + +2. **Install the Docker Plugin (if not already installed)**: + - Go to **Preferences** > **Plugins**. + - Search for "Docker" in the Marketplace tab and install the plugin. + - Restart PyCharm if necessary. + +3. **Configure Docker Connection**: + - Go to **Preferences** > **Build, Execution, Deployment** > **Docker**. + - Click the **+** button to add a new Docker configuration. + - PyCharm should automatically detect the Docker installation. Adjust settings if necessary. + +4. **Configure Project Interpreter**: + - Go to **Preferences** > **Project: [Your Project Name]** > **Python Interpreter**. + - Click on the gear icon and select **Add**. + - In the left-hand pane of the Add Python Interpreter dialog, select **On Docker**. + - Specify the docker image. You can choose your local image CLAASP or the public one from `hub.docker.com` called `tiicrc/claasp-lib` + - PyCharm will attempt to find the Python interpreter in the created image. You may need to specify the path to the Python executable if PyCharm cannot locate it automatically (commonly `/usr/bin/python3` or similar). + +5. **Apply and Save Changes**: Click **OK** to save your new interpreter settings. + +After completing these steps, PyCharm will use the Python interpreter from the specified Docker container for your CLAASP project. ### Makefile configuration From 5d28d87c186ba63bee2d476e4b3d3860341c9032 Mon Sep 17 00:00:00 2001 From: Alessandro De Piccoli Date: Sun, 3 Mar 2024 15:25:07 +0100 Subject: [PATCH 151/179] FEATURE/Add: create new Speedy cipher --- .../block_ciphers/speedy_block_cipher.py | 218 ++++++++++++++++++ .../block_ciphers/speedy_block_cipher.py | 32 +++ 2 files changed, 250 insertions(+) create mode 100644 claasp/ciphers/block_ciphers/speedy_block_cipher.py create mode 100644 tests/unit/ciphers/block_ciphers/speedy_block_cipher.py diff --git a/claasp/ciphers/block_ciphers/speedy_block_cipher.py b/claasp/ciphers/block_ciphers/speedy_block_cipher.py new file mode 100644 index 00000000..28543c6b --- /dev/null +++ b/claasp/ciphers/block_ciphers/speedy_block_cipher.py @@ -0,0 +1,218 @@ +# **************************************************************************** +# Copyright 2023 Technology Innovation Institute +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# **************************************************************************** + + +from claasp.cipher import Cipher +from claasp.DTOs.component_state import ComponentState +from claasp.name_mappings import INPUT_PLAINTEXT, INPUT_KEY + +SBOX = [0x08, 0x00, 0x09, 0x03, 0x38, 0x10, 0x29, 0x13, + 0x0c, 0x0d, 0x04, 0x07, 0x30, 0x01, 0x20, 0x23, + 0x1a, 0x12, 0x18, 0x32, 0x3e, 0x16, 0x2c, 0x36, + 0x1c, 0x1d, 0x14, 0x37, 0x34, 0x05, 0x24, 0x27, + 0x02, 0x06, 0x0b, 0x0f, 0x33, 0x17, 0x21, 0x15, + 0x0a, 0x1b, 0x0e, 0x1f, 0x31, 0x11, 0x25, 0x35, + 0x22, 0x26, 0x2a, 0x2e, 0x3a, 0x1e, 0x28, 0x3c, + 0x2b, 0x3b, 0x2f, 0x3f, 0x39, 0x19, 0x2d, 0x3d] +CONSTANTS = [0x243, 0xf6a, 0x888, 0x5a3, 0x08d, 0x313, 0x198, 0xa2e, 0x037, 0x073, 0x44a, 0x409, + 0x382, 0x229, 0x9f3, 0x1d0, 0x082, 0xefa, 0x98e, 0xc4e, 0x6c8, 0x945, 0x282, 0x1e6, + 0x38d, 0x013, 0x77b, 0xe54, 0x66c, 0xf34, 0xe90, 0xc6c, 0xc0a, 0xc29, 0xb7c, 0x97c, + 0x50d, 0xd3f, 0x84d, 0x5b5, 0xb54, 0x709, 0x179, 0x216, 0xd5d, 0x989, 0x79f, 0xb1b, + 0xd13, 0x10b, 0xa69, 0x8df, 0xb5a, 0xc2f, 0xfd7, 0x2db, 0xd01, 0xadf, 0xb7b, 0x8e1, + 0xafe, 0xd6a, 0x267, 0xe96, 0xba7, 0xc90, 0x45f, 0x12c, 0x7f9, 0x924, 0xa19, 0x947, + 0xb39, 0x16c, 0xf70, 0x801, 0xf2e, 0x285, 0x8ef, 0xc16, 0x636, 0x920, 0xd87, 0x157, + 0x4e6, 0x9a4, 0x58f, 0xea3, 0xf49, 0x33d, 0x7e0, 0xd95, 0x748, 0xf72, 0x8eb, 0x658, + 0x718, 0xbcd, 0x588, 0x215, 0x4ae, 0xe7b, 0x54a, 0x41d, 0xc25, 0xa59, 0xb59, 0xc30, + 0xd53, 0x92a, 0xf26, 0x013, 0xc5d, 0x1b0, 0x232, 0x860, 0x85f, 0x0ca, 0x417, 0x918, + 0xb8d, 0xb38, 0xef8, 0xe79, 0xdcb, 0x060, 0x3a1, 0x80e, 0x6c9, 0xe0e, 0x8bb, 0x01e, + 0x8a3, 0xed7, 0x157, 0x7c1, 0xbd3, 0x14b, 0x277, 0x8af, 0x2fd, 0xa55, 0x605, 0xc60, + 0xe65, 0x525, 0xf3a, 0xa55, 0xab9, 0x457, 0x489, 0x862, 0x63e, 0x814, 0x405, 0x5ca, + 0x396, 0xa2a, 0xab1, 0x0b6, 0xb4c, 0xc5c, 0x341, 0x141, 0xe8c, 0xea1, 0x548, 0x6af, + 0x7c7, 0x2e9, 0x93b, 0x3ee, 0x141, 0x163, 0x6fb, 0xc2a, 0x2ba, 0x9c5, 0x5d7, 0x418, + 0x31f, 0x6ce, 0x5c3, 0xe16, 0x9b8, 0x793, 0x1ea, 0xfd6, 0xba3, 0x36c, 0x24c, 0xf5c, + 0x7a3, 0x253, 0x812, 0x895, 0x867, 0x73b, 0x8f4, 0x898, 0x6b4, 0xbb9, 0xafc, 0x4bf, + 0xe81, 0xb66, 0x282, 0x193, 0x61d, 0x809, 0xccf, 0xb21, 0xa99, 0x148, 0x7ca, 0xc60, + 0x5de, 0xc80, 0x32e, 0xf84, 0x5d5, 0xde9, 0x857, 0x5b1, 0xdc2, 0x623, 0x02e, 0xb65, + 0x1b8, 0x823, 0x893, 0xe81, 0xd39, 0x6ac, 0xc50, 0xf6d, 0x6ff, 0x383, 0xf44, 0x239, + 0x2e0, 0xb44, 0x82a, 0x484, 0x200, 0x469, 0xc8f, 0x04a, 0x9e1, 0xf9b, 0x5e2, 0x1c6, + 0x684, 0x2f6, 0xe96, 0xc9a, 0x670, 0xc9c, 0x61a, 0xbd3, 0x88f, 0x06a, 0x51a, 0x0d2, + 0xd85, 0x42f, 0x689, 0x60f, 0xa72, 0x8ab, 0x513, 0x3a3, 0x6ee, 0xf0b, 0x6c1, 0x37a, + 0x3be, 0x4ba, 0x3bf, 0x050, 0x7ef, 0xb2a, 0x98a, 0x1f1, 0x651, 0xd39, 0xaf0, 0x176, + 0x66c, 0xa59, 0x3e8, 0x243, 0x0e8, 0x88c, 0xee8, 0x619, 0x456, 0xf9f, 0xb47, 0xd84, + 0xa5c, 0x33b, 0x8b5, 0xebe, 0xe06, 0xf75, 0xd88, 0x5c1, 0x207, 0x340, 0x1a4, 0x49f, + 0x56c, 0x16a, 0xa64, 0xed3, 0xaa6, 0x236, 0x3f7, 0x706, 0x1bf, 0xedf, 0x724, 0x29b, + 0x023, 0xd37, 0xd0d, 0x724, 0xd00, 0xa12, 0x48d, 0xb0f, 0xead, 0x349, 0xf1c, 0x09b, + 0x075, 0x372, 0xc98, 0x099, 0x1b7, 0xb25, 0xd47, 0x9d8, 0xf6e, 0x8de, 0xf7e, 0x3fe, + 0x501, 0xab6, 0x794, 0xc3b, 0x976, 0xce0, 0xbd0, 0x4c0, 0x06b, 0xac1, 0xa94, 0xfb6, + 0x409, 0xf60, 0xc45, 0xe5c, 0x9ec, 0x219, 0x6a2, 0x463, 0x68f, 0xb6f, 0xaf3, 0xe6c, + 0x53b, 0x513, 0x39b, 0x2eb, 0x3b5, 0x2ec, 0x6f6, 0xdfc, 0x511, 0xf9b, 0x309, 0x52c, + 0xcc8, 0x145, 0x44a, 0xf5e, 0xbd0, 0x9be, 0xe3d, 0x004, 0xde3, 0x34a, 0xfd6, 0x60f, + 0x280, 0x719, 0x2e4, 0xbb3, 0xc0c, 0xba8, 0x574, 0x5c8, 0x740, 0xfd2, 0x0b5, 0xf39, + 0xb9d, 0x3fb, 0xdb5, 0x579, 0xc0b, 0xd1a, 0x603, 0x20a, 0xd6a, 0x100, 0xc64, 0x02c, + 0x727, 0x967, 0x9f2, 0x5fe, 0xfb1, 0xfa3, 0xcc8, 0xea5, 0xe9f, 0x8db, 0x322, 0x2f8, + 0x3c7, 0x516, 0xdff, 0xd61, 0x6b1, 0x52f, 0x501, 0xec8, 0xad0, 0x552, 0xab3, 0x23d, + 0xb5f, 0xafd, 0x238, 0x760, 0x533, 0x17b, 0x483, 0xe00, 0xdf8, 0x29e, 0x5c5, 0x7bb, + 0xca6, 0xf8c, 0xa01, 0xa87, 0x562, 0xedf, 0x176, 0x9db, 0xd54, 0x2a8, 0xf62, 0x87e, + 0xffc, 0x3ac, 0x673, 0x2c6, 0x8c4, 0xf55, 0x736, 0x95b, 0x27b, 0x0bb, 0xca5, 0x8c8, + 0xe1f, 0xfa3, 0x5db, 0x8f0, 0x11a, 0x010, 0xfa3, 0xd98, 0xfd2, 0x183, 0xb84, 0xafc, + 0xb56, 0xc2d, 0xd1d, 0x35b, 0x9a5, 0x3e4, 0x79b, 0x6f8, 0x456, 0x5d2, 0x8e4, 0x9bc, + 0x4bf, 0xb97, 0x90e, 0x1dd, 0xf2d, 0xaa4, 0xcb7, 0xe33, 0x62f, 0xb13, 0x41c, 0xee4, + 0xc6e, 0x8ef, 0x20c, 0xada, 0x367, 0x74c, 0x01d, 0x07e, 0x9ef, 0xe2b, 0xf11, 0xfb4, + 0x95d, 0xbda, 0x4da, 0xe90, 0x919] +PARAMETERS_CONFIGURATION_LIST = [ + {'block_bit_size': 192, 'key_bit_size': 192, 'number_of_rounds': 5} +] + + +class SpeedyBlockCipher(Cipher): + """ + Construct an instance of the SpeedyBlockCipher class. + + This class is used to store compact representations of a cipher, used to generate the corresponding cipher. + + Note that the ``l`` parameter of the cipher is automatically determined by ``block_bit_size`` and + ``key_bit_size``. Please use the same value, multiple of 12, for both variables. + + INPUT: + + - ``block_bit_size`` -- **integer** (default: `192`); cipher input and output block bit size of the cipher + - ``key_bit_size`` -- **integer** (default: `192`); cipher key bit size of the cipher + - ``number_of_rounds`` -- **integer** (default: `1`); number of rounds of the cipher. + + EXAMPLES:: + + sage: from claasp.ciphers.block_ciphers.speedy_block_cipher import SpeedyBlockCipher + sage: speedy = SpeedyBlockCipher(number_of_rounds=5) + sage: plaintext = 0xa13a632451070e4382a27f26a40682f3fe9ff68028d24fdb + sage: key = 0x764c4f6254e1bff208e95862428faed01584f4207a7e8477 + sage: ciphertext = 0x01da25a93d1cfc5e4c0b74f677eb746c281a260193b7755a + sage: speedy.evaluate([plaintext, key]) == ciphertext + True + + """ + + def __init__(self, block_bit_size=192, key_bit_size=192, number_of_rounds=1, alpha=(0, 1, 5, 9, 15, 21, 26), + beta=7, gamma=1): + if block_bit_size != key_bit_size: + raise Exception(f"block_bit_size (={block_bit_size}) and key_bit_size (={key_bit_size}) differs." + "No cipher created") + if block_bit_size % 6 != 0: + raise Exception(f"block_bit_size (={block_bit_size}) is NOT a multiple of 6." + "It MUST be a multiple of 6.") + self.l = block_bit_size // 6 + self.constants_per_block = self.l // 2 + + self.permutation = [0] * 192 + for i in range(self.l): + for j in range(6): + parameter = (beta * (6*i+j) + gamma) % (6 * self.l) + new_i, new_j = parameter // 6, parameter % 6 + self.permutation[6*new_i + new_j] = 6*i + j + + super().__init__(family_name="speedy", + cipher_type="block_cipher", + cipher_inputs=[INPUT_PLAINTEXT, INPUT_KEY], + cipher_inputs_bit_size=[block_bit_size, key_bit_size], + cipher_output_bit_size=block_bit_size) + + block = ComponentState(INPUT_PLAINTEXT, [list(range(block_bit_size))]) + key = ComponentState(INPUT_KEY, [list(range(key_bit_size))]) + + for round_number in range(number_of_rounds - 1): + self.add_round() + + # the comments describe the point of view of the state + # state is a whole of 6*l bits + block = self.add_XOR_component([block.id, key.id], block.input_bit_positions + key.input_bit_positions, + block_bit_size) + # state is l components corresponding to the l sboxes + block = [self.add_SBOX_component([block.id], [list(range(6*i, 6*(i+1)))], 6, SBOX) for i in range(self.l)] + # state is 6 columns + new_block = [] + input_ids = [block[_].id for _ in range(self.l)] + for i in range(6): + input_bit_positions = [[i] for _ in range(self.l)] + new_block.append(self.add_rotate_component(input_ids, input_bit_positions, self.l, -i)) + block = new_block + # state is l components corresponding to the l sboxes + new_block = [] + input_ids = [block[_].id for _ in range(6)] + for i in range(self.l): + input_bit_positions = [[i] for _ in range(6)] + new_block.append(self.add_SBOX_component(input_ids, input_bit_positions, 6, SBOX)) + block = new_block + # state is 6 columns + new_block = [] + input_ids = [block[_].id for _ in range(self.l)] + for i in range(6): + input_bit_positions = [[i] for _ in range(self.l)] + new_block.append(self.add_rotate_component(input_ids, input_bit_positions, self.l, -i)) + block = new_block + # state is l components corresponding to the l rows of the block + new_block = [] + input_ids = [block[_].id for _ in range(6)] * len(alpha) + for i in range(self.l): + input_bit_positions = [[(i+a) % self.l] for a in alpha for _ in range(6)] + new_block.append(self.add_XOR_component(input_ids, input_bit_positions, 6)) + block = new_block + # state is a whole of 6*l bits + constant = 0 + for i in range(self.constants_per_block*round_number, self.constants_per_block*(round_number+1)): + constant <<= 12 + constant ^= CONSTANTS[i] + constant_component = self.add_constant_component(192, constant) + input_ids = [nb.id for nb in block] + [constant_component.id] + input_bit_positions = [list(range(6)) for _ in range(self.l)] + [list(range(6*self.l))] + block = self.add_XOR_component(input_ids, input_bit_positions, block_bit_size) + block = ComponentState(block.id, [list(range(block_bit_size))]) + # key schedule + key = self.add_permutation_component([key.id], [list(range(6*self.l))], 6*self.l, self.permutation) + key = ComponentState(key.id, [list(range(key_bit_size))]) + + self.add_round_key_output_component([key.id], [list(range(6*self.l))], 6*self.l) + self.add_round_output_component([block.id], [list(range(6*self.l))], 6*self.l) + + self.add_round() + + # state is a whole of 6*l bits + block = self.add_XOR_component([block.id, key.id], block.input_bit_positions + key.input_bit_positions, + block_bit_size) + # state is l components corresponding to the l sboxes + block = [self.add_SBOX_component([block.id], [list(range(6*i, 6*(i+1)))], 6, SBOX) for i in range(self.l)] + # state is 6 columns + new_block = [] + input_ids = [block[_].id for _ in range(self.l)] + for i in range(6): + input_bit_positions = [[i] for _ in range(self.l)] + new_block.append(self.add_rotate_component(input_ids, input_bit_positions, self.l, -i)) + block = new_block + # state is l components corresponding to the l sboxes + new_block = [] + input_ids = [block[_].id for _ in range(6)] + for i in range(self.l): + input_bit_positions = [[i] for _ in range(6)] + new_block.append(self.add_SBOX_component(input_ids, input_bit_positions, 6, SBOX)) + block = new_block + # key schedule + key = self.add_permutation_component([key.id], [list(range(6*self.l))], 6*self.l, self.permutation) + # state is a whole of 6*l bits + input_ids = [nb.id for nb in new_block] + [key.id] + input_bit_positions = [list(range(6)) for _ in range(self.l)] + [list(range(6*self.l))] + block = self.add_XOR_component(input_ids, input_bit_positions, block_bit_size) + + self.add_round_key_output_component([key.id], [list(range(6*self.l))], 6*self.l) + self.add_cipher_output_component([block.id], [list(range(6*self.l))], 6*self.l) diff --git a/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py b/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py new file mode 100644 index 00000000..09575727 --- /dev/null +++ b/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py @@ -0,0 +1,32 @@ +from claasp.ciphers.block_ciphers.speedy_block_cipher import SpeedyBlockCipher + + +def test_speedy_block_cipher(): + speedy = SpeedyBlockCipher(number_of_rounds=5) + assert speedy.type == 'block_cipher' + assert speedy.family_name == 'speedy' + assert speedy.number_of_rounds == 5 + assert speedy.id == 'speedy_p192_k192_o192_r5' + assert speedy.component_from(0, 5).id == 'sbox_0_5' + plaintext = 0xa13a632451070e4382a27f26a40682f3fe9ff68028d24fdb + key = 0x764c4f6254e1bff208e95862428faed01584f4207a7e8477 + ciphertext = 0x01da25a93d1cfc5e4c0b74f677eb746c281a260193b7755a + assert speedy.evaluate([plaintext, key]) == ciphertext + + speedy = SpeedyBlockCipher(number_of_rounds=6) + assert speedy.number_of_rounds == 6 + assert speedy.id == 'speedy_p192_k192_o192_r6' + assert speedy.component_from(1, 6).id == 'sbox_1_6' + plaintext = 0xa13a632451070e4382a27f26a40682f3fe9ff68028d24fdb + key = 0x764c4f6254e1bff208e95862428faed01584f4207a7e8477 + ciphertext = 0x88bfd3dc140f38bc53a66687f5307860560ebec41100662d + assert speedy.evaluate([plaintext, key]) == ciphertext + + speedy = SpeedyBlockCipher(number_of_rounds=7) + assert speedy.number_of_rounds == 7 + assert speedy.id == 'speedy_p192_k192_o192_r7' + assert speedy.component_from(2, 7).id == 'sbox_2_7' + plaintext = 0xa13a632451070e4382a27f26a40682f3fe9ff68028d24fdb + key = 0x764c4f6254e1bff208e95862428faed01584f4207a7e8477 + ciphertext = 0xed3d0ea11c427bd32570df41c6fd66ebbf4916e760ed0943 + assert speedy.evaluate([plaintext, key]) == ciphertext From c08054f0a15c496abf6f8371ee809de91a667908 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 4 Mar 2024 10:18:59 +0400 Subject: [PATCH 152/179] updated report class and statistical_tests --- claasp/cipher_modules/report.py | 5 -- .../dieharder_statistical_tests.py | 34 ++++++++- .../nist_statistical_tests.py | 74 +++++++++++++------ .../dieharder_statistical_tests_test.py | 73 ++++++------------ .../nist_statistical_tests_test.py | 26 +++---- 5 files changed, 118 insertions(+), 94 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index d46f1996..60d3870f 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -571,11 +571,6 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i print('RESULTS') print('plaintext_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['plaintext_diff'])) print('key_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['key_diff'])) - print(df_result) - print() - print() - print('SCORES') - print(df_scores) else: df_result.to_csv(output_directory + '/neural_distinguisher_test_results.csv') diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index 6e388b94..fd645afe 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -45,6 +45,33 @@ def dieharder_statistical_tests(self, test_type, dieharder_report_folder_prefix="dieharder_statistics_report", ): + """ + + Run the Dieharder statistical tests. + + INPUT: + + - ``test_type`` -- string describing which test to run + - ``bits_in_one_line`` -- integer parameter used to run the dieharder tests + - ``number_of_lines`` -- integer parameter used to run the dieharder tests + - ``input_index`` -- cipher input index + - ``round_start`` -- first round to be considered in the cipher + - ``round_end`` -- last round to be considered in the cipher + - ``dieharder_report_folder_prefix`` - prefix for the unparsed dieharder tests output folder + + OUTPUT: + + - The results are going to be saved in a dictionary format compatible with the Report class + + EXAMPLE: + + from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + speck = SpeckBlockCipher(number_of_rounds=5) + dieharder_tests = DieharderTests(speck) + dieharder_avalanche_test_results = dieharder_tests.dieharder_statistical_tests('avalanche') + + """ dieharder_test = { 'input_parameters': { @@ -223,6 +250,11 @@ def _run_dieharder_statistical_tests_tool(input_file): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests + sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + sage: from claasp.cipher_modules.statistical_tests.dataset_generator import DatasetGenerator + sage: dataset_generator = DatasetGenerator(SpeckBlockCipher(number_of_rounds=3)) + sage: dataset = dataset_generator.generate_random_dataset(input_index=0, number_of_samples=100, number_of_blocks_in_one_sample=30000) + sage: dataset[0].tofile(f'claasp/cipher_modules/statistical_tests/input_data_example') sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP @@ -255,7 +287,7 @@ def _parse_report(report_filename): ... Dieharder Tests Finished!!! - sage: dict = DieharderTests.parse_report(f'dieharder_test_output.txt') # doctest: +SKIP + sage: dict = DieharderTests._parse_report(f'dieharder_test_output.txt') # doctest: +SKIP Parsing dieharder_test_output.txt is in progress. Parsing dieharder_test_output.txt is finished. """ diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 27fa53ad..4db74f2d 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -1,4 +1,3 @@ - # **************************************************************************** # Copyright 2023 Technology Innovation Institute # @@ -25,11 +24,11 @@ from datetime import timedelta import matplotlib.pyplot as plt - from claasp.cipher_modules.statistical_tests.dataset_generator import DatasetGenerator, DatasetType reports_path = "test_reports/statistical_tests/nist_statistics_report" + class StatisticalTests: def __init__(self, cipher): @@ -39,16 +38,41 @@ def __init__(self, cipher): str_of_inputs_bit_size = list(map(str, cipher.inputs_bit_size)) self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) + def nist_statistical_tests(self, test_type, + bits_in_one_line='default', + number_of_lines='default', + input_index=0, + round_start=0, + round_end=0, + nist_report_folder_prefix="nist_statistics_report", + ): + """ + Run the nist statistical tests. - def nist_statistical_tests(self, test_type, - bits_in_one_line='default', - number_of_lines='default', - input_index=0, - round_start=0, - round_end=0, - nist_report_folder_prefix="nist_statistics_report", - ): + INPUT: + + - ``test_type`` -- string describing which test to run + - ``bits_in_one_line`` -- integer parameter used to run the nist tests + - ``number_of_lines`` -- integer parameter used to run the nist tests + - ``input_index`` -- cipher input index + - ``round_start`` -- first round to be considered in the cipher + - ``round_end`` -- last round to be considered in the cipher + - ``nist_report_folder_prefix`` - prefix for the unparsed nist tests output folder + + OUTPUT: + + - The results are going to be saved in a dictionary format compatible with the Report class + + EXAMPLE: + + from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests + from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher + speck = SpeckBlockCipher(number_of_rounds=5) + nist_tests = StatisticalTests(speck) + nist_avalanche_test_results = nist_tests.nist_statistical_tests('avalanche') + + """ nist_test = { @@ -204,7 +228,7 @@ def nist_statistical_tests(self, test_type, return self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) nist_test['test_results'] = self._generate_nist_dicts(dataset, round_start, round_end, - flag_chart=False) + flag_chart=False) nist_test['input_parameters']['bits_in_one_line'] = bits_in_one_line nist_test['input_parameters']['number_of_lines'] = number_of_lines @@ -212,8 +236,8 @@ def nist_statistical_tests(self, test_type, @staticmethod def _run_nist_statistical_tests_tool(input_file, bit_stream_length=10000, number_of_bit_streams=10, - input_file_format=1, - statistical_test_option_list=15 * '1'): + input_file_format=1, + statistical_test_option_list=15 * '1'): """ Run statistical tests using the NIST test suite [1]. The result will be in experiments folder. Be aware that the NIST STS suits needed to be installed in /usr/local/bin in the docker image. @@ -250,6 +274,7 @@ def _run_nist_statistical_tests_tool(input_file, bit_stream_length=10000, number sage: result True """ + def _mkdir_folder_experiment(path_prefix, folder_experiment): path_folder_experiment = os.path.join(path_prefix, folder_experiment) if not os.path.exists(path_folder_experiment): @@ -305,7 +330,7 @@ def _parse_report(report_filename): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - sage: dict = StatisticalTests.parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') + sage: dict = StatisticalTests._parse_report(f'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt') Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is in progress. Parsing claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt is finished. """ @@ -395,7 +420,7 @@ def _parse_report(report_filename): return report_dict @staticmethod - def generate_chart_round(report_dict, output_dir='',show_graph=False): + def generate_chart_round(report_dict, output_dir='', show_graph=False): """ Generate the corresponding chart based on the parsed report dictionary. @@ -439,16 +464,18 @@ def generate_chart_round(report_dict, output_dir='',show_graph=False): elif i == 1: plt.hlines(rate, 160, 185, color="olive", linestyle="dashed") plt.scatter(x, y, color="cadetblue") - plt.title(f'{report_dict["cipher_name"]}:{report_dict["data_type"]}, Round " {report_dict["round"]}|{report_dict["rounds"]}') + plt.title( + f'{report_dict["cipher_name"]}:{report_dict["data_type"]}, Round " {report_dict["round"]}|{report_dict["rounds"]}') plt.xlabel('Test ID') plt.ylabel('Passing Rate') - if show_graph==False: + if show_graph == False: if output_dir == '': output_dir = f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png' plt.savefig(output_dir) else: - plt.savefig(output_dir+'/'+f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') + plt.savefig( + output_dir + '/' + f'nist_{report_dict["data_type"]}_{report_dict["cipher_name"]}_round_{report_dict["round"]}.png') else: plt.show() plt.clf() @@ -456,7 +483,7 @@ def generate_chart_round(report_dict, output_dir='',show_graph=False): print(f'Drawing round {report_dict["round"]} is finished.') @staticmethod - def generate_chart_all(report_dict_list, report_folder="",show_graph=False): + def generate_chart_all(report_dict_list, report_folder="", show_graph=False): """ Generate the corresponding chart based on the list of parsed report dictionary for all rounds. @@ -502,7 +529,8 @@ def generate_chart_all(report_dict_list, report_folder="",show_graph=False): label="186") plt.plot(x, y, 'o--', color='olive', alpha=0.4) if random_round > -1: - plt.title(f'{report_dict_list[0]["cipher_name"]}: {report_dict_list[0]["data_type"]}, Random at {random_round}|{report_dict_list[0]["rounds"]}') + plt.title( + f'{report_dict_list[0]["cipher_name"]}: {report_dict_list[0]["data_type"]}, Random at {random_round}|{report_dict_list[0]["rounds"]}') else: plt.title(f'{report_dict_list[0]["cipher_name"]}: {report_dict_list[0]["data_type"]}') plt.xlabel('Round') @@ -512,7 +540,7 @@ def generate_chart_all(report_dict_list, report_folder="",show_graph=False): plt.yticks([i * 20 for i in range(1, 11)], [i * 20 for i in range(1, 11)]) chart_filename = f'nist_{report_dict_list[0]["data_type"]}_{report_dict_list[0]["cipher_name"]}.png' - if show_graph==False: + if show_graph == False: plt.savefig(os.path.join(report_folder, chart_filename)) else: plt.show() @@ -565,7 +593,7 @@ def _generate_nist_dicts(self, dataset, round_start, round_end, flag_chart=False sts_execution_time = time.time() self._run_nist_statistical_tests_tool(dataset_filename, self.bits_in_one_line, - self.number_of_lines, 1) + self.number_of_lines, 1) sts_execution_time = time.time() - sts_execution_time try: shutil.move(nist_local_experiment_folder, report_folder_round) @@ -597,4 +625,4 @@ def generate_chart_for_all_rounds(self, flag_chart, sts_report_dicts): try: self.generate_chart_all(sts_report_dicts, self.report_folder) except OSError: - print("Error in generating all round chart.") \ No newline at end of file + print("Error in generating all round chart.") diff --git a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py index 4b22965c..fc84290d 100644 --- a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py @@ -1,6 +1,6 @@ import pytest -from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher +from claasp.ciphers.block_ciphers.simon_block_cipher import SimonBlockCipher from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests OUTPUT_TXT = 'dieharder_test_output.txt' @@ -11,13 +11,29 @@ @pytest.mark.skip("Takes to long") -def test_run_dieharder_statistical_tests_tool_interactively(): +def test_run_dieharder_statistical_tests_tool(): result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) assert result == TESTS_FINISHED +def test_dieharder_statistical_tests(): + speck = SimonBlockCipher(number_of_rounds=1) + dieharder_tests = DieharderTests(speck) + dieharder_avalanche_test_results = dieharder_tests.dieharder_statistical_tests('avalanche') + dieharder_correlation_test_results = dieharder_tests.dieharder_statistical_tests('correlation') + dieharder_random_test_results = dieharder_tests.dieharder_statistical_tests('random') + dieharder_high_density_test_results = dieharder_tests.dieharder_statistical_tests('high_density') + dieharder_low_density_test_results = dieharder_tests.dieharder_statistical_tests('low_density') -@pytest.mark.skip("Takes to long") + assert type(dieharder_avalanche_test_results) == dict + assert type(dieharder_correlation_test_results) == dict + assert type(dieharder_random_test_results) == dict + assert type(dieharder_low_density_test_results) == dict + assert type(dieharder_high_density_test_results) == dict + + + +@pytest.mark.skip("Takes too long") def test_parse_report(): result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) @@ -28,7 +44,7 @@ def test_parse_report(): assert dictio == OUTPUT_TXT_IS_FINISHED -@pytest.mark.skip("Takes to long") +@pytest.mark.skip("Takes too long") def test_generate_chart_round(): result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) @@ -49,7 +65,7 @@ def test_generate_chart_round(): "dieharder_random_toy_cipher_round_1.png." -@pytest.mark.skip("Takes to long") +@pytest.mark.skip("Takes too long") def test_generate_chart_all(): result = DieharderTests._run_dieharder_statistical_tests_tool(INPUT_DATA_EXAMPLE) @@ -70,50 +86,3 @@ def test_generate_chart_all(): "Drawing chart for all rounds is in finished. Please find the chart in file " \ "dieharder_random_toy_cipher.png." - -@pytest.mark.skip("Takes to long") -def test_run_avalanche_dieharder_statistical_tests(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='avalanche', round_end=1) - - assert result == TESTS_FINISHED - - -@pytest.mark.skip("Takes to long") -def test_run_correlation_dieharder_statistics_test(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='correlation', round_end=1) - - assert result == TESTS_FINISHED - - -@pytest.mark.skip("Takes to long") -def test_run_CBC_dieharder_statistics_test(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='cbc', round_end=1) - - assert result == TESTS_FINISHED - - -@pytest.mark.skip("Takes to long") -def test_run_random_dieharder_statistics_test(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='random', round_end=1) - - assert result == TESTS_FINISHED - - -@pytest.mark.skip("Takes to long") -def test_run_low_density_dieharder_statistics_test(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='low_density', round_end=1) - - assert result == TESTS_FINISHED - - -@pytest.mark.skip("Takes to long") -def test_run_high_density_dieharder_statistics_test(): - dieharder = DieharderTests(SpeckBlockCipher(number_of_rounds=3)) - result = dieharder.dieharder_statistical_tests(test_type='high_density', round_end=1) - - assert result == TESTS_FINISHED diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 3dcf59ab..ccc83a4c 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -2,7 +2,7 @@ import sys from io import StringIO import pytest -from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher +from claasp.ciphers.block_ciphers.simon_block_cipher import SimonBlockCipher from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests REPORT_EXAMPLE_TXT = 'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt' @@ -64,66 +64,66 @@ def test_generate_chart_all(): @pytest.mark.skip("Takes too long") def test_run_avalanche_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('avalanche', round_end=2) + tests.nist_statistical_tests('avalanche') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 @pytest.mark.skip("Takes too long") def test_run_correlation_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('correlation', round_end=2) + tests.nist_statistical_tests('correlation') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 @pytest.mark.skip("Takes too long") def test_run_CBC_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('cbc', round_end=2) + tests.nist_statistical_tests('cbc') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 @pytest.mark.skip("Takes too long") def test_run_random_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('random', round_end=2) + tests.nist_statistical_tests('random') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 @pytest.mark.skip("Takes too long") def test_run_low_density_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('low_density', round_end=2) + tests.nist_statistical_tests('low_density') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 @pytest.mark.skip("Takes too long") def test_run_high_density_nist_statistics_test(): - tests = StatisticalTests(SpeckBlockCipher(number_of_rounds=3)) + tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout result = StringIO() sys.stdout = result - tests.nist_statistical_tests('high_density', round_end=2) + tests.nist_statistical_tests('high_density') sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 From d94f6c322e4918e2ec438037dd741572fe706291 Mon Sep 17 00:00:00 2001 From: paulhuynh Date: Mon, 4 Mar 2024 11:01:21 +0400 Subject: [PATCH 153/179] FIX: Add timestamp to MILP external files --- .../cipher_modules/models/milp/milp_model.py | 14 ++--- .../models/milp/utils/config.py | 63 +++++++++++-------- .../cipher_modules/models/milp/utils/utils.py | 14 ++--- 3 files changed, 50 insertions(+), 41 deletions(-) diff --git a/claasp/cipher_modules/models/milp/milp_model.py b/claasp/cipher_modules/models/milp/milp_model.py index f37a0016..467aed6a 100644 --- a/claasp/cipher_modules/models/milp/milp_model.py +++ b/claasp/cipher_modules/models/milp/milp_model.py @@ -43,8 +43,7 @@ from sage.numerical.mip import MixedIntegerLinearProgram, MIPSolverException -from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, EXTERNAL_MILP_SOLVERS, \ - SOLUTION_FILE_DEFAULT_NAME +from claasp.cipher_modules.models.milp.utils.config import SOLVER_DEFAULT, get_external_milp_solver_configuration from claasp.cipher_modules.models.milp.utils.utils import _get_data, _parse_external_solver_output, _write_model_to_lp_file from claasp.cipher_modules.models.utils import convert_solver_solution_to_dictionary @@ -267,11 +266,12 @@ def init_model_in_sage_milp_class(self, solver_name=SOLVER_DEFAULT): def _solve_with_external_solver(self, model_type, model_path, solver_name=SOLVER_DEFAULT): - if solver_name not in EXTERNAL_MILP_SOLVERS: + solvers_configuration = get_external_milp_solver_configuration(f'{model_path[:-3]}.sol') + if solver_name not in solvers_configuration: raise ValueError(f"Invalid solver name: {solver_name}." f"Currently supported solvers are 'Gurobi', 'cplex', 'scip' and 'glpk'.") - solver_specs = EXTERNAL_MILP_SOLVERS[solver_name] + solver_specs = solvers_configuration[solver_name] command = solver_specs['command'] options = solver_specs['options'] tracemalloc.start() @@ -287,7 +287,7 @@ def _solve_with_external_solver(self, model_type, model_path, solver_name=SOLVER if 'memory' in solver_specs: milp_memory = _get_data(solver_specs['memory'], str(solver_process)) - return _parse_external_solver_output(self, model_type, solver_name, solver_process) + (milp_memory,) + return _parse_external_solver_output(self, solvers_configuration, model_type, solver_name, solver_process) + (milp_memory,) def _solve_with_internal_solver(self): @@ -335,10 +335,10 @@ def solve(self, model_type, solver_name=SOLVER_DEFAULT, external_solver_name=Non if external_solver_name: solver_name_in_solution = external_solver_name model_path = _write_model_to_lp_file(self, model_type) - status, objective_value, components_values, milp_time, milp_memory = self._solve_with_external_solver( + solution_file_path, status, objective_value, components_values, milp_time, milp_memory = self._solve_with_external_solver( model_type, model_path, external_solver_name) os.remove(model_path) - os.remove(f"{SOLUTION_FILE_DEFAULT_NAME}") + os.remove(f"{solution_file_path}") else: solver_name_in_solution = solver_name status, milp_time, milp_memory = self._solve_with_internal_solver() diff --git a/claasp/cipher_modules/models/milp/utils/config.py b/claasp/cipher_modules/models/milp/utils/config.py index fd1ba039..a620edaa 100644 --- a/claasp/cipher_modules/models/milp/utils/config.py +++ b/claasp/cipher_modules/models/milp/utils/config.py @@ -1,3 +1,4 @@ +import os # **************************************************************************** # Copyright 2023 Technology Innovation Institute @@ -18,33 +19,41 @@ SOLVER_DEFAULT = "GLPK" +MODEL_DEFAULT_PATH = os.getcwd() SOLUTION_FILE_DEFAULT_NAME = "milp_model.sol" -EXTERNAL_MILP_SOLVERS = { - 'Gurobi': { - 'command': f'gurobi_cl ResultFile={SOLUTION_FILE_DEFAULT_NAME} ', - 'options': "", - 'time': r"Explored \d+ nodes \(\d+ simplex iterations\) in ([0-9]*[.]?[0-9]+) seconds", - 'unsat_condition': "Model is infeasible" - }, - 'scip': { - 'file_path': [], - 'command': 'scip -c \"read ', - 'options': f' opt write solution {SOLUTION_FILE_DEFAULT_NAME} quit\"', - 'time': r"Solving Time \(sec\)[\s]+:[\s]+([0-9]*[.]?[0-9]+)", - 'unsat_condition': "problem is solved [infeasible]" - }, - 'glpk': { - 'command': 'glpsol --lp ', - 'options': f' --output {SOLUTION_FILE_DEFAULT_NAME}', - 'time': r"Time used:[\s]+([0-9]*[.]?[0-9]+) secs", - 'memory': r"Memory used:[\s]+([0-9]*[.]?[0-9]+) Mb", - 'unsat_condition': 'PROBLEM HAS NO PRIMAL FEASIBLE SOLUTION' - }, - 'cplex': { - 'command': 'cplex -c \"read ', - 'options': f'\" \"optimize\" \"display solution variables *\" | tee {SOLUTION_FILE_DEFAULT_NAME}', - 'time': r"Solution time =[\s]+([0-9]*[.]?[0-9]+) sec.", - 'unsat_condition': "MIP - Integer infeasible." +def get_external_milp_solver_configuration(solution_name=SOLUTION_FILE_DEFAULT_NAME): + + external_milp_solvers_configuration = { + 'Gurobi': { + 'command': f'gurobi_cl ResultFile={MODEL_DEFAULT_PATH}/{solution_name} ', + 'options': "", + 'time': r"Explored \d+ nodes \(\d+ simplex iterations\) in ([0-9]*[.]?[0-9]+) seconds", + 'unsat_condition': "Model is infeasible" + }, + 'scip': { + 'file_path': [], + 'command': 'scip -c \"read ', + 'options': f' opt write solution {MODEL_DEFAULT_PATH}/{solution_name} quit\"', + 'time': r"Solving Time \(sec\)[\s]+:[\s]+([0-9]*[.]?[0-9]+)", + 'unsat_condition': "problem is solved [infeasible]" + }, + 'glpk': { + 'command': 'glpsol --lp ', + 'options': f' --output {MODEL_DEFAULT_PATH}/{solution_name}', + 'time': r"Time used:[\s]+([0-9]*[.]?[0-9]+) secs", + 'memory': r"Memory used:[\s]+([0-9]*[.]?[0-9]+) Mb", + 'unsat_condition': 'PROBLEM HAS NO PRIMAL FEASIBLE SOLUTION' + }, + 'cplex': { + 'command': 'cplex -c \"read ', + 'options': f'\" \"optimize\" \"display solution variables *\" | tee {MODEL_DEFAULT_PATH}/{solution_name}', + 'time': r"Solution time =[\s]+([0-9]*[.]?[0-9]+) sec.", + 'unsat_condition': "MIP - Integer infeasible." + } } -} + + for solver in external_milp_solvers_configuration: + external_milp_solvers_configuration[solver]['solution_path'] = f'{MODEL_DEFAULT_PATH}/{solution_name}' + + return external_milp_solvers_configuration diff --git a/claasp/cipher_modules/models/milp/utils/utils.py b/claasp/cipher_modules/models/milp/utils/utils.py index 71332562..5f435f51 100644 --- a/claasp/cipher_modules/models/milp/utils/utils.py +++ b/claasp/cipher_modules/models/milp/utils/utils.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # **************************************************************************** +import datetime import pickle import re from subprocess import run @@ -24,8 +25,7 @@ output_dictionary_that_contains_xor_inequalities, update_dictionary_that_contains_xor_inequalities_between_n_input_bits) -from claasp.cipher_modules.models.milp.utils.config import EXTERNAL_MILP_SOLVERS, \ - SOLUTION_FILE_DEFAULT_NAME +from claasp.cipher_modules.models.milp.utils.config import get_external_milp_solver_configuration from sage.numerical.mip import MIPSolverException from claasp.cipher_modules.models.milp.utils.milp_name_mappings import MILP_BITWISE_DETERMINISTIC_TRUNCATED, \ @@ -39,7 +39,7 @@ def _write_model_to_lp_file(model, model_type): mip = model._model - model_file_path = f"{model.cipher_id}_{model_type}.lp" + model_file_path = f"{model.cipher_id}_{model_type}_{datetime.datetime.now().timestamp()}.lp" mip.write_lp(model_file_path) return model_file_path @@ -62,8 +62,8 @@ def _get_variables_value(internal_variables, read_file): return variables_value -def _parse_external_solver_output(model, model_type, solver_name, solver_process): - solver_specs = EXTERNAL_MILP_SOLVERS[solver_name] +def _parse_external_solver_output(model, solvers_configurations, model_type, solver_name, solver_process): + solver_specs = solvers_configurations[solver_name] solve_time = _get_data(solver_specs['time'], str(solver_process)) @@ -74,7 +74,7 @@ def _parse_external_solver_output(model, model_type, solver_name, solver_process if solver_specs['unsat_condition'] not in str(solver_process): status = 'SATISFIABLE' - solution_file_path = SOLUTION_FILE_DEFAULT_NAME + solution_file_path = solver_specs['solution_path'] with open(solution_file_path, 'r') as lp_file: read_file = lp_file.read() @@ -106,7 +106,7 @@ def _parse_external_solver_output(model, model_type, solver_name, solver_process components_values = model._get_component_values(objective_variables, components_variables) - return status, objective_value, components_values, solve_time + return solution_file_path, status, objective_value, components_values, solve_time ### -------------------------Dictionary handling------------------------- ### From a4abe626fc5a703b7d2957c831d7d8b35affecbf Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 4 Mar 2024 11:20:22 +0400 Subject: [PATCH 154/179] updated report class and statistical_tests --- claasp/cipher_modules/report.py | 8 ++++---- .../statistical_tests/nist_statistical_tests_test.py | 10 ++-------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index df39133a..8a246c1e 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -580,16 +580,16 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i elif 'statistical' in self.test_name: if 'dieharder' in self.test_name: for dict in self.test_report['test_results']: - DieharderTests._generate_chart_round(dict, + DieharderTests.generate_chart_round(dict, output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) - DieharderTests._generate_chart_all(self.test_report['test_results'], + DieharderTests.generate_chart_all(self.test_report['test_results'], output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'nist' in self.test_name: for dict in self.test_report['test_results']: - StatisticalTests._generate_chart_round(dict, + StatisticalTests.generate_chart_round(dict, output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) - StatisticalTests._generate_chart_all(self.test_report['test_results'], + StatisticalTests.generate_chart_all(self.test_report['test_results'], output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'algebraic' in self.test_name: diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 6602d123..346997f3 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -36,7 +36,7 @@ def test_generate_chart_round(): old_stdout = sys.stdout result = StringIO() sys.stdout = result - StatisticalTests._generate_chart_round(dictio) + StatisticalTests.generate_chart_round(dictio) sys.stdout = old_stdout assert result.getvalue() == \ @@ -55,14 +55,13 @@ def test_generate_chart_all(): old_stdout = sys.stdout result = StringIO() sys.stdout = result - StatisticalTests._generate_chart_all(dict_list) + StatisticalTests.generate_chart_all(dict_list) sys.stdout = old_stdout assert result.getvalue() == \ 'Drawing chart for all rounds is in progress.\n' \ 'Drawing chart for all rounds is in finished.\n' -@pytest.mark.skip("Takes too long") def test_run_avalanche_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -73,7 +72,6 @@ def test_run_avalanche_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_correlation_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -84,7 +82,6 @@ def test_run_correlation_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_CBC_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -95,7 +92,6 @@ def test_run_CBC_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_random_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -106,7 +102,6 @@ def test_run_random_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_low_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -117,7 +112,6 @@ def test_run_low_density_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_high_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout From c7d57e409103b76697a89ed1188aee8d8412294d Mon Sep 17 00:00:00 2001 From: MFormenti Date: Mon, 4 Mar 2024 11:26:49 +0400 Subject: [PATCH 155/179] fixed show function in report class and implemented run autond pipeline in report class --- .../sat_models/sat_xor_differential_model.py | 13 +- claasp/cipher_modules/neural_network_tests.py | 34 ++- claasp/cipher_modules/report.py | 267 +++++++++++------- tests/unit/cipher_modules/report_test.py | 13 +- 4 files changed, 214 insertions(+), 113 deletions(-) diff --git a/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py b/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py index 288e7e99..20b0a923 100644 --- a/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py +++ b/claasp/cipher_modules/models/sat/sat_models/sat_xor_differential_model.py @@ -1,17 +1,16 @@ - # **************************************************************************** # Copyright 2023 Technology Innovation Institute -# +# # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. -# +# # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# +# # You should have received a copy of the GNU General Public License # along with this program. If not, see . # **************************************************************************** @@ -175,7 +174,6 @@ def find_all_xor_differential_trails_with_fixed_weight(self, fixed_weight, fixed solution = self.solve(XOR_DIFFERENTIAL, solver_name=solver_name) solution['building_time_seconds'] = end_building_time - start_building_time solution['test_name'] = "find_all_xor_differential_trails_with_fixed_weight" - return solutions_list def find_all_xor_differential_trails_with_weight_at_most(self, min_weight, max_weight, fixed_values=[], @@ -223,8 +221,9 @@ def find_all_xor_differential_trails_with_weight_at_most(self, min_weight, max_w solutions = self.find_all_xor_differential_trails_with_fixed_weight(weight, fixed_values=fixed_values, solver_name=solver_name) - for solution in solutions_list: - solution['test_name'] = "find_all_xor_differential_trails_with_weight_at_most" + + for solution in solutions: + solution['test_name'] = "find_all_xor_differential_trails_with_weight_at_most" solutions_list.extend(solutions) return solutions_list diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 8c34cc71..11f7a448 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -597,6 +597,25 @@ def run_autond_pipeline(self, difference_positions=None, optimizer_samples=10 ** {2: 0.49932000041007996} """ + neural_distinguisher_test_results = { + 'input_parameters': { + 'test_name': 'neural_distinguisher_test', + 'optimizer_samples': optimizer_samples, + 'optimizer_generations': optimizer_generations, + 'training_samples': training_samples, + 'testing_samples': testing_samples, + 'number_of_epochs': number_of_epochs, + 'neural_net': neural_net + }, + 'test_results': { + 'plaintext': { + 'cipher_output': { + 'neural_distinguisher_test': [] + } + } + } + } + def data_generator(nr, samples): return self.get_differential_dataset(input_difference, number_of_rounds=nr, samples=samples) @@ -620,9 +639,22 @@ def data_generator(nr, samples): neural_network = self.get_neural_network(neural_net, input_size = input_size) nr = max(1, highest_round-3) print(f'Training {neural_net} on input difference {[hex(x) for x in input_difference]} ({self.cipher.inputs}), from round {nr}...') - return self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, + neural_results = self.train_neural_distinguisher(data_generator, nr, neural_network, training_samples, testing_samples, number_of_epochs) + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'neural_distinguisher_test'].append({'accuracies': list(neural_results.values())}) + i = 0 + for it in self.cipher.inputs: + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'neural_distinguisher_test'][0][it + '_diff'] = hex(input_difference[i]) + i += 1 + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output']['differences_scores'] = {} + for diff, scores in zip(diff, scores): + neural_distinguisher_test_results['test_results']['plaintext']['cipher_output'][ + 'differences_scores'][hex(diff)] = scores + return neural_distinguisher_test_results + def _make_resnet(self, input_size, num_filters=32, num_outputs=1, d1=64, d2=64, word_size=16, ks=3, reg_param=10 ** -5, final_activation='sigmoid', depth=1): diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index e64a2f9c..8a246c1e 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -6,19 +6,22 @@ import pandas as pd import json import shutil +from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests +from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests def _print_colored_state(state, verbose, file): + for line in state: - print('', end='', file = file) + print('', end='', file=file) for x in line: - print(f'{x} ', end='', file = file) + print(f'{x} ', end='', file=file) - occ = [i for i in range(len(line)) if line[i] != '_'] + occ = [i for i in range(len(line)) if line[i] != '_' and line[i] != '*'] if verbose: - print(f'\tactive words positions = {occ}', file = file) + print(f'\tactive words positions = {occ}', file=file) else: - print('', file = file) + print('', file=file) def _dict_to_latex_table(data_dict, header_list): @@ -66,7 +69,6 @@ def _dict_to_latex_table(data_dict, header_list): return latex_code - def _latex_heatmap(table, table_string, bit_count): table_string += "\\hspace*{-4cm}\n\\begin{tikzpicture}[scale=1.1]\n\t\\foreach \\y [count=\\n] in {\n\t\t" for round in table: @@ -132,7 +134,6 @@ def __init__(self, cipher, test_report): """ - self.cipher = cipher self.test_report = test_report @@ -147,17 +148,18 @@ def __init__(self, cipher, test_report): self.input_parameters = {} self.test_name = test_report['test_name'] if type(test_report) is dict else test_report[0]['test_name'] - def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', word_size=1, state_size=1, key_state_size=1, - verbose=False, show_word_permutation=False, - show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, - show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, - show_permuation=False, show_multi_input_non_linear_logical_operator=False, - show_modular=False, show_modsub=False, - show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, - show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, - show_and=False, - show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output='round_output', + fixed_input_difference='average', word_size=1, state_size=1, key_state_size=1, + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): if 'trail' in self.test_name: self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, @@ -173,14 +175,21 @@ def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output=' else: - if test_name == 'trail_search': + test_list = [] + if 'statistical' in self.test_name: + test_list.append(self.test_name) + elif 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': + test_list = list(self.test_report['test_results'][fixed_input][fixed_output].keys()) + if test_name not in test_list and 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': print('Error! Invalid test name. Please choose a valid test name') + print('The test name has to be one of the following : ',end='') + print(test_list) return - self._produce_graph(show_graph=True,fixed_input=fixed_input,fixed_output=fixed_output, test_name=test_name).show() + self._produce_graph(show_graph=True, fixed_input=fixed_input, fixed_output=fixed_output, + fixed_input_difference=fixed_input_difference, test_name=test_name) def _export(self, file_format, output_dir): - if not os.path.exists(output_dir): os.makedirs(output_dir) @@ -216,21 +225,28 @@ def _export(self, file_format, output_dir): if file_format == '.csv': - df = pd.DataFrame.from_dict(self.test_report["components_values" if 'trail' in self.test_name else "test_results"]) + df = pd.DataFrame.from_dict( + self.test_report["components_values" if 'trail' in self.test_name else "test_results"]) df.to_csv(path + '/' + self.test_name + file_format) elif file_format == '.json': with open(path + '/' + self.test_name + file_format, 'w') as fp: - json.dump(self.test_report["components_values" if 'trail' in self.test_name else "test_results"], fp, default=lambda x: float(x)) + json.dump(self.test_report["components_values" if 'trail' in self.test_name else "test_results"], + fp, default=lambda x: float(x)) elif file_format == '.tex': if 'algebraic' in self.test_name: with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(self.test_report["test_results"], header_list=["number of variables", "number of equations", "number of monomials", "max degree of equation", "test passed"]).replace('_','\\_')) + f.write(_dict_to_latex_table(self.test_report["test_results"], + header_list=["number of variables", "number of equations", + "number of monomials", "max degree of equation", + "test passed"]).replace('_', '\\_')) else: headers = ["Component_id", "Value", "Weight"] with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(self.test_report["components_values"], header_list=headers).replace('_','\\_')) + f.write( + _dict_to_latex_table(self.test_report["components_values"], header_list=headers).replace( + '_', '\\_')) else: @@ -326,7 +342,9 @@ def _export(self, file_format, output_dir): elif file_format == '.tex': if not isinstance(result[res_key][0], list): with open(path + '/' + self.test_name + '.tex', "w") as f: - f.write(_dict_to_latex_table(dict(pd.DataFrame(result)),header_list=[res_key,"component_id"]).replace('_','\\_')) + f.write(_dict_to_latex_table(dict(pd.DataFrame(result)), + header_list=[res_key, "component_id"]).replace('_', + '\\_')) else: table = result[res_key] @@ -338,16 +356,19 @@ def _export(self, file_format, output_dir): table_string = _latex_heatmap(table_split, table_string, bit_count) table_string += "\\caption{" + self.test_name.replace("_", - "\\_") + "\\_" + it + "\\_" + out.replace( + "\\_") + "\\_" + it + "\\_" + out.replace( "_", "\\_") + "\\_" + test.replace("_", "\\_") + "\\_" + result[ "input_difference_value"] + ("}" "\\label{fig:" + self.test_name.replace( - "_", "\\_") + "\\_" + it + "\\_" + out.replace("_", "\\_") + "\\_" + test.replace("_", - "\\_") + "\\_" + + "_", "\\_") + "\\_" + it + "\\_" + out.replace("_", + "\\_") + "\\_" + test.replace( + "_", + "\\_") + "\\_" + result[ "input_difference_value"] + "}\n") table_string += "\\end{figure}" - with open(path + '/' + str(result["input_difference_value"]) + file_format, 'w') as fp: + with open(path + '/' + str(result["input_difference_value"]) + file_format, + 'w') as fp: fp.write(table_string) print("Report saved in " + output_dir + '/' + self.cipher.id) @@ -377,21 +398,21 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word os.makedirs(os.getcwd() + '/test_reports/') if not os.path.exists(os.getcwd() + '/test_reports/' + self.cipher.id): os.makedirs(os.getcwd() + '/test_reports/' + self.cipher.id) - filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/'+ self.test_report['solver_name'] + '_' + self.test_name + '.txt' + filename = os.getcwd() + '/test_reports/' + self.cipher.id + '/' + self.test_report[ + 'solver_name'] + '_' + self.test_name + '.txt' if os.path.exists(filename): os.remove(filename) - file = open(filename,'a') + file = open(filename, 'a') else: - file=None + file = None input_comps = list(locals().keys()) component_types = [] - show_key_flow = False for comp in list(self.test_report['components_values'].keys()): if 'key' in comp: show_key_flow = True - if (comp == 'key' or comp == 'plaintext') and comp not in component_types: + if ('key' in comp or comp == 'plaintext') and comp not in component_types: component_types.append(comp) elif '_'.join(comp.split('_')[:-2]) not in component_types and comp[-2:] != "_i" and comp[-2:] != "_o": component_types.append('_'.join(comp.split('_')[:-2])) @@ -400,7 +421,6 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word component_types.append(('_'.join(comp.split('_')[:-3])) + '_' + ('_'.join(comp.split('_')[-1]))) show_components = {} - for comp in component_types: for comp_choice in input_comps: if 'show_' + comp == comp_choice: @@ -409,20 +429,19 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word show_components[comp] = locals()[comp_choice] if 'show_' + comp == comp_choice + '_i' and show_input: show_components[comp] = locals()[comp_choice] + if 'key' in comp and show_key == True: + show_components[comp] = True out_list = {} - if show_key_flow: - key_flow = ['key'] - else: - key_flow = [] + key_flow = ['key'] abs_prob = 0 - + rel_prob = 0 word_denominator = '1' if word_size == 1 else 'A' for comp_id in self.test_report['components_values'].keys(): - if comp_id != "plaintext" and comp_id != "key": + if (comp_id != "plaintext" and comp_id != "key") and "key" not in comp_id: rel_prob = self.test_report['components_values'][comp_id]['weight'] abs_prob += rel_prob @@ -436,22 +455,30 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word input_links = self.cipher.get_component_from_id(comp_id).input_id_links comp_value = '_'.join(comp_id.split('_')[:-2]) - if all((id_link in key_flow or 'constant' in id_link) for id_link in input_links) and show_key_flow: + if (all((id_link in key_flow or 'constant' in id_link or id_link+'_o' in key_flow or id_link+'_i' in key_flow) for id_link in input_links) or ('key' in comp_id and 'comp_id' != 'key')): key_flow.append(comp_id) - key_flow = key_flow + [constant_id for constant_id in input_links if 'constant' in constant_id] + if 'linear' in self.test_name: + constants_i = [constant_id+'_i' for constant_id in input_links if 'constant' in constant_id] + constants_o = [constant_id+'_o' for constant_id in input_links if 'constant' in constant_id] + key_flow = key_flow + constants_i + constants_o + else: + constants = [constant_id for constant_id in input_links if 'constant' in constant_id] + key_flow = key_flow + constants if show_components[ - comp_value if comp_id not in ['plaintext', 'key', 'cipher_output', 'cipher_output_o', 'cipher_output_i', + comp_value if (comp_id not in ['plaintext', 'cipher_output', 'cipher_output_o', 'cipher_output_i', 'intermediate_output', 'intermediate_output_o', - 'intermediate_output_i'] else comp_id]: + 'intermediate_output_i'] and 'key' not in comp_id) else comp_id]: value = self.test_report['components_values'][comp_id]['value'] - bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value))) + bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value))) if '*' not in value else list( + value[2:]) - word_list = [word_denominator if ''.join(bin_list[x:x + word_size]).count('1') > 0 else '_' for x in + word_list = ['*' if '*' in ''.join(bin_list[x:x + word_size]) else word_denominator if ''.join(bin_list[x:x + word_size]).count('1') > 0 else '_' for x in range(0, len(bin_list), word_size)] + if ('intermediate' in comp_id or 'cipher' in comp_id) and comp_id not in key_flow: size = (state_size, len(word_list) // state_size) @@ -469,16 +496,17 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word out_format[i].append(word_list[j + i * size[1]]) out_list[comp_id] = (out_format, rel_prob, abs_prob) if comp_id not in ["plaintext", "key"] else ( - out_format, 0, 0) + out_format, 0, 0) for comp_id in out_list.keys(): if comp_id not in key_flow: - if comp_id == 'plaintext' or comp_id == 'key': + if comp_id == 'plaintext' or 'key' in comp_id: print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename if save_fig else None) + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id if comp_id[-2:] not in ["_i", "_o"] else comp_id[:-2]).input_id_links}', + file=file if save_fig else None) else: print(f' \t{comp_id}\t', file=file) _print_colored_state(out_list[comp_id][0], verbose, file) @@ -491,27 +519,38 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word print('total weight = ' + str(self.test_report['total_weight']), file=file) show_key_flow = False + + for key_comp in key_flow: if key_comp != 'key' and self.test_report['components_values'][key_comp]['weight'] != 0: show_key_flow = True break + if show_key_flow: print('', file=file) print("KEY FLOW", file=file) print('', file=file) for comp_id in key_flow: - - if show_components[ - '_'.join(comp_id.split('_')[:-2]) if comp_id not in ['plaintext', 'key', 'cipher_output', - 'intermediate_output'] else comp_id]: - if comp_id == 'plaintext' or comp_id == 'key': + if comp_id not in ['plaintext', 'key', 'cipher_output','intermediate_output'] and 'key' not in comp_id and 'intermediate_output' not in comp_id and comp_id[-2:] not in ['_i','_o']: + identifier = '_'.join(comp_id.split('_')[:-2]) + elif 'intermediate_output' in comp_id: + identifier = 'intermediate_output' + comp_id[-2:] + elif comp_id[-2:] == '_i' and show_input: + identifier = comp_id.split('_')[0] + '_i' + elif comp_id[-2:] == '_o' and show_output: + identifier = comp_id.split('_')[0] + '_o' + else: + identifier = comp_id + if show_components[identifier]: + if comp_id == 'plaintext' or 'key' in comp_id: print(f'\t{comp_id}\t', file=file) else: if verbose: print( - f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id).input_id_links}', file=filename) + f' \t{comp_id} Input Links : {self.cipher.get_component_from_id(comp_id if comp_id[-2:] not in ["_i", "_o"] else comp_id[:-2]).input_id_links}', + file=file) else: print(f' \t{comp_id}\t', file=file) _print_colored_state(out_list[comp_id][0], verbose, file) @@ -520,40 +559,65 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word out_list[comp_id][2]), file=file) print('', file=file) - def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, test_name=None): + def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, + fixed_input_difference=None, test_name=None): - if 'statistical' in self.test_name: - for it in self.cipher.inputs: + if self.test_name == 'neural_distinguisher_test': + df_scores = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['differences_scores'], index=['scores']).T + df_result = pd.DataFrame([self.test_report['test_results']['plaintext']['cipher_output'][0]['accuracies']], index=['accuracy']).T + + if show_graph: + print('RESULTS') + print('plaintext_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['plaintext_diff'])) + print('key_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['key_diff'])) + + else: + df_result.to_csv(output_directory + '/neural_distinguisher_test_results.csv') + df_scores.to_csv(output_directory + '/neural_distinguisher_test_scores.csv') + - if 'dieharder' in self.test_name: - from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - DieharderTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + elif 'statistical' in self.test_name: + if 'dieharder' in self.test_name: + for dict in self.test_report['test_results']: + DieharderTests.generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + DieharderTests.generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) - elif 'nist' in self.test_name: - from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - StatisticalTests.generate_chart_all(self.test_report['test_results'][it], output_directory+'/'+self.cipher.id + '/' + self.test_name) + elif 'nist' in self.test_name: + for dict in self.test_report['test_results']: + StatisticalTests.generate_chart_round(dict, + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) + StatisticalTests.generate_chart_all(self.test_report['test_results'], + output_directory + '/' + self.cipher.id + '/' + self.test_name, show_graph=True) elif 'algebraic' in self.test_name: - x = [n+1 for n in list(range(self.cipher.number_of_rounds))] - - for test_key in self.test_report['test_results'].keys() if test_name==None else [test_name]: - y = self.test_report['test_results'][test_key] - df = pd.DataFrame([x,y]).T - df.columns = ['round', test_key] - fig = px.line(df, x='round', y=test_key) - fig.write_image(output_directory+'/'+test_key+'.png') + + y = list(self.test_report['test_results'].keys()) + num_rounds = len(self.test_report['test_results']['number_of_equations']) + x = [i+1 for i in range(num_rounds)] + z = [[1]*num_rounds]*len(self.test_report['test_results'].keys()) + z_text = [] + for test in self.test_report['test_results'].keys(): + z_text.append([str(x) for x in self.test_report['test_results'][test]]) + fig = px.imshow(z, x=x, y=y, color_continuous_scale='Viridis', aspect="auto") + fig.update_traces(text=z_text, texttemplate="%{text}") + fig.update_xaxes(side="top") + if show_graph==False: + fig.write_image(output_directory + '/test_results.png') if show_graph: - return fig + fig.show(renderer='notebook_connected') + return else: inputs = list(self.test_report['test_results'].keys()) - for it in inputs if fixed_input==None else [fixed_input]: + for it in inputs if fixed_input == None else [fixed_input]: if not os.path.exists( output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) and show_graph == False: os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it) outputs = list(self.test_report['test_results'][it].keys()) - for out in outputs if fixed_input==None else [fixed_output]: + for out in outputs if fixed_input == None else [fixed_output]: if out == 'cipher_output': continue if not os.path.exists( @@ -563,7 +627,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i results = list(self.test_report['test_results'][it][out].keys()) - for res in results if test_name==None else [test_name]: + for res in results if test_name == None else [test_name]: if not os.path.exists(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res) and show_graph == False: os.mkdir( @@ -574,6 +638,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i data = self.test_report['test_results'][it][out][res] for case in list(data): + try: res_key = [x for x in case.keys() if x in ['values', 'vectors', 'accuracies']][0] except IndexError: @@ -596,9 +661,11 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i graph_data[i + 1] = [case[res_key][i]] if type(case[res_key][i]) != list else \ case[res_key][i] - df = pd.DataFrame.from_dict(graph_data).T if len(graph_data[1]) > 1: + if case[ + 'input_difference_value'] != fixed_input_difference and fixed_input_difference != None: + continue num_subplots = int(ceil(len(graph_data[1]) / 32)) fig = make_subplots(num_subplots, 1, vertical_spacing=0.08) fig.update_layout({ @@ -611,7 +678,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i text=[['{:.3f}'.format(float(y)) for y in x] for x in z_data], x=list(range(i * 32, 32 * (i + 1))), - y=list(range(1,self.cipher.number_of_rounds+1)), zmin=0, + y=list(range(1, self.cipher.number_of_rounds + 1)), zmin=0, zmax=1, zauto=False), i + 1, 1) fig.update_layout({ @@ -626,6 +693,9 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i fig.write_image(output_directory + '/' + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( res) + '_' + str(case['input_difference_value']) + '.png', scale=4) + else: + fig.show(renderer='notebook_connected') + return fig.data = [] fig.layout = {} @@ -638,30 +708,27 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i if show_graph == False: fig.write_image(output_directory + '/' + - self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + - '/' + str(res) + '.png', - scale=4) - + self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + + '/' + str(res) + '.png', + scale=4) + else: + fig.show(renderer='notebook_connected') + return fig.data = [] fig.layout = {} - if show_graph==True: - return fig - - - print("Results saved in " + output_directory) def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_directory=os.getcwd() + '/test_reports', - verbose=False, show_word_permutation=False, - show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, - show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, - show_permuation=False, show_multi_input_non_linear_logical_operator=False, - show_modular=False, show_modsub=False, - show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, - show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, - show_and=False, - show_or=False, show_not=False, show_plaintext=True, show_key=True, - show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): + verbose=False, show_word_permutation=False, + show_var_shift=False, show_var_rotate=False, show_theta_xoodoo=False, + show_theta_keccak=False, show_shift_rows=False, show_sigma=False, show_reverse=False, + show_permuation=False, show_multi_input_non_linear_logical_operator=False, + show_modular=False, show_modsub=False, + show_constant=False, show_rot=False, show_sbox=False, show_mix_column=False, + show_shift=False, show_linear_layer=False, show_xor=False, show_modadd=False, + show_and=False, + show_or=False, show_not=False, show_plaintext=True, show_key=True, + show_intermediate_output=True, show_cipher_output=True, show_input=True, show_output=True): """ Prints the graphical representation of the Report. @@ -686,7 +753,6 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire """ - if 'trail' in self.test_name: self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, show_var_shift, show_var_rotate, show_theta_xoodoo, @@ -708,6 +774,7 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire if not os.path.exists(output_directory + '/' + self.cipher.id + '/' + self.test_name): os.mkdir(output_directory + '/' + self.cipher.id + '/' + self.test_name) self._produce_graph(output_directory) + print('Report saved in ' + output_directory) def clean_reports(self, output_dir=os.getcwd() + '/test_reports/reports'): diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index 5d9d137d..19563499 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -12,8 +12,8 @@ from claasp.cipher_modules.algebraic_tests import AlgebraicTests from claasp.cipher_modules.avalanche_tests import AvalancheTests + def test_save_as_image(): - speck = SpeckBlockCipher(number_of_rounds=2) sat = SatXorDifferentialModel(speck) plaintext = set_fixed_variables( @@ -26,6 +26,7 @@ def test_save_as_image(): constraint_type='equal', bit_positions=range(64), bit_values=(0,) * 64) + trail = sat.find_lowest_weight_xor_differential_trail(fixed_values=[plaintext, key]) trail_report = Report(speck, trail) trail_report.save_as_image() @@ -35,7 +36,7 @@ def test_save_as_image(): avalanche_report.save_as_image() blackbox_results = NeuralNetworkTests(speck).neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(speck,blackbox_results) + blackbox_report = Report(speck, blackbox_results) blackbox_report.save_as_image() algebraic_results = AlgebraicTests(speck).algebraic_tests(timeout=1) @@ -93,8 +94,9 @@ def test_save_as_DataFrame(): def test_save_as_json(): simon = SimonBlockCipher(number_of_rounds=3) - neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests(simon).neural_network_blackbox_distinguisher_tests() - blackbox_report = Report(simon,neural_network_blackbox_distinguisher_tests_results) + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests( + simon).neural_network_blackbox_distinguisher_tests() + blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) milp = MilpXorDifferentialModel(simon) plaintext = set_fixed_variables( @@ -122,7 +124,8 @@ def test_save_as_json(): def test_clean_reports(): simon = SimonBlockCipher(number_of_rounds=2) - neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests(simon).neural_network_blackbox_distinguisher_tests() + neural_network_blackbox_distinguisher_tests_results = NeuralNetworkTests( + simon).neural_network_blackbox_distinguisher_tests() blackbox_report = Report(simon, neural_network_blackbox_distinguisher_tests_results) blackbox_report.save_as_json() From c6a32d52bd684f8b84802fa27e40930218c00785 Mon Sep 17 00:00:00 2001 From: davidgerault Date: Mon, 4 Mar 2024 17:11:18 +0400 Subject: [PATCH 156/179] Fix refs of the NN tests --- claasp/cipher_modules/neural_network_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index 8c34cc71..c78b679d 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -23,7 +23,7 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, rounds_to_train=[]): """ - Runs the test defined in [BR2021]; trains a MLP to distinguish samples of the form + Runs a test inspired by [BHPR2021]; trains a MLP to distinguish samples of the form input || output from random. The test is run once for each setting, defined by the types of inputs and outputs. The input is taken among the inputs defined by the cipher, and output is chosen between cipher output, round output (one setting for each round output), or round key output (one setting per round key). @@ -200,7 +200,7 @@ def _create_structure(self, base_output, test_name, partial_result): def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[[0x400000], [0xa]], rounds_to_train=[]): """ - Runs the test defined in [BHPR2021]; for each input i to the cipher and difference delta in diff[i], a dataset + Runs a test inspired by [BR2021]; for each input i to the cipher and difference delta in diff[i], a dataset of pairs X0, X1 is created, such that the input i in X1 is equal to the input i in X0 XORed with delta. The pairs are then encrypted to C0, C1, and a simple MLP is trained to distinguish C0, C1 pairs from pairs of random values R0, R1. From 2c3bd88693b3ee67b040030a5243816b1316d083 Mon Sep 17 00:00:00 2001 From: Alessandro De Piccoli Date: Mon, 4 Mar 2024 14:52:35 +0100 Subject: [PATCH 157/179] Add references for SPEEDY cipher --- claasp/ciphers/block_ciphers/speedy_block_cipher.py | 2 ++ docs/references.rst | 7 +++++++ tests/unit/ciphers/block_ciphers/speedy_block_cipher.py | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/claasp/ciphers/block_ciphers/speedy_block_cipher.py b/claasp/ciphers/block_ciphers/speedy_block_cipher.py index 28543c6b..9dcd0682 100644 --- a/claasp/ciphers/block_ciphers/speedy_block_cipher.py +++ b/claasp/ciphers/block_ciphers/speedy_block_cipher.py @@ -82,6 +82,8 @@ class SpeedyBlockCipher(Cipher): """ Construct an instance of the SpeedyBlockCipher class. + The implementation follows the specifics in [LMM+2021]_. + This class is used to store compact representations of a cipher, used to generate the corresponding cipher. Note that the ``l`` parameter of the cipher is automatically determined by ``block_bit_size`` and diff --git a/docs/references.rst b/docs/references.rst index 6b388d07..bc05f687 100644 --- a/docs/references.rst +++ b/docs/references.rst @@ -317,6 +317,13 @@ **L** +.. [LMM+2021] + Leander G., Moos T., Moradi A., Rasoolzadeh S. (2021). *The SPEEDY + Family of Block Ciphers: Engineering an Ultra Low-Latency Cipher from + Gate Level for Secure Processor Architectures*. IACR Transactions on + Cryptographic Hardware and Embedded Systems, 2021(4), 510–545. + https://doi.org/10.46586/tches.v2021.i4.510-545 + .. [Lin1999] van Lint J. : *Introduction to coding theory* : 3rd ed. Springer-Verlag GTM, 86, 1999 diff --git a/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py b/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py index 09575727..e2e3d9ba 100644 --- a/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py +++ b/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py @@ -2,6 +2,11 @@ def test_speedy_block_cipher(): + """ + Pytests for SPEEDY cipher + + Test vectors used are those reported in [LMM+2021]_. + """ speedy = SpeedyBlockCipher(number_of_rounds=5) assert speedy.type == 'block_cipher' assert speedy.family_name == 'speedy' From 390466f13f01ab63bc84734b903cdb7e2680e629 Mon Sep 17 00:00:00 2001 From: "airan.sanchez" Date: Mon, 4 Mar 2024 14:47:21 +0000 Subject: [PATCH 158/179] :construction_worker: Add staging workflow for claasp-webapp and rename existing workflow --- ...mage.yaml => build-main-webapp-image.yaml} | 2 +- .../workflows/build-staging-webapp-image.yaml | 65 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) rename .github/workflows/{build-develop-image.yaml => build-main-webapp-image.yaml} (97%) create mode 100644 .github/workflows/build-staging-webapp-image.yaml diff --git a/.github/workflows/build-develop-image.yaml b/.github/workflows/build-main-webapp-image.yaml similarity index 97% rename from .github/workflows/build-develop-image.yaml rename to .github/workflows/build-main-webapp-image.yaml index 31449ad0..d308b619 100644 --- a/.github/workflows/build-develop-image.yaml +++ b/.github/workflows/build-main-webapp-image.yaml @@ -1,4 +1,4 @@ -name: Build and push image from develop +name: Build and push image from main on: pull_request: types: [ closed ] diff --git a/.github/workflows/build-staging-webapp-image.yaml b/.github/workflows/build-staging-webapp-image.yaml new file mode 100644 index 00000000..646a1daf --- /dev/null +++ b/.github/workflows/build-staging-webapp-image.yaml @@ -0,0 +1,65 @@ +name: Build and push image from develop +on: + push: + branches: + - feat/add-develop-to-claasp-webapp +# pull_request: +# types: [ closed ] +# branches: +# - develop + +jobs: + build-image: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + + - name: Login dockerhub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_REGISTRY_USER }} + password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }} + + - name: Build & Push + uses: docker/build-push-action@v4 + id: built-image + with: + context: . + file: ./docker/Dockerfile + push: true + tags: tiicrc/claasp-lib-staging:latest + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache + + - name: Get current commit information + run: | + git clone ${{ secrets.DEPLOYMENT_REPOSITORY }} deployment-staging-repo + git config --global user.name 'Github' + git config --global user.email ${{ secrets.DEPLOYMENT_REPOSITORY_EMAIL }} + cd deployment-staging-repo + git checkout develop + echo "Date: $(date) Commit: $(git rev-parse HEAD)" >> claasp-dev.log + git add claasp-dev.log + git commit -m "Updating deployment-staging-repo from github" + git push origin develop From eccec77711ea5d80f6ad3d40431b23940e8f72f4 Mon Sep 17 00:00:00 2001 From: "airan.sanchez" Date: Mon, 4 Mar 2024 15:28:24 +0000 Subject: [PATCH 159/179] :construction_worker: Split into 2 build steps instead of 1 --- .github/workflows/build-main-webapp-image.yaml | 9 +++++++++ .github/workflows/build-staging-webapp-image.yaml | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/.github/workflows/build-main-webapp-image.yaml b/.github/workflows/build-main-webapp-image.yaml index d308b619..58aa6651 100644 --- a/.github/workflows/build-main-webapp-image.yaml +++ b/.github/workflows/build-main-webapp-image.yaml @@ -49,6 +49,15 @@ jobs: rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache + commit-deployment-repo: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + - name: Get current commit information run: | git clone ${{ secrets.DEPLOYMENT_REPOSITORY }} deployment-repo diff --git a/.github/workflows/build-staging-webapp-image.yaml b/.github/workflows/build-staging-webapp-image.yaml index 646a1daf..54dfb47d 100644 --- a/.github/workflows/build-staging-webapp-image.yaml +++ b/.github/workflows/build-staging-webapp-image.yaml @@ -52,6 +52,15 @@ jobs: rm -rf /tmp/.buildx-cache mv /tmp/.buildx-cache-new /tmp/.buildx-cache + commit-deployment-repo: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + persist-credentials: false + fetch-depth: 0 + - name: Get current commit information run: | git clone ${{ secrets.DEPLOYMENT_REPOSITORY }} deployment-staging-repo From 185bd691799c03aa19eed772d6cee5d846f811d2 Mon Sep 17 00:00:00 2001 From: "airan.sanchez" Date: Mon, 4 Mar 2024 15:30:48 +0000 Subject: [PATCH 160/179] :pencil2: Add missing needs tag --- .github/workflows/build-main-webapp-image.yaml | 1 + .github/workflows/build-staging-webapp-image.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build-main-webapp-image.yaml b/.github/workflows/build-main-webapp-image.yaml index 58aa6651..b90bc6ca 100644 --- a/.github/workflows/build-main-webapp-image.yaml +++ b/.github/workflows/build-main-webapp-image.yaml @@ -67,3 +67,4 @@ jobs: git add claasp-dev.log git commit -m "Updating deployment-repo from github" git push origin master + needs: build-image diff --git a/.github/workflows/build-staging-webapp-image.yaml b/.github/workflows/build-staging-webapp-image.yaml index 54dfb47d..ec4a64f2 100644 --- a/.github/workflows/build-staging-webapp-image.yaml +++ b/.github/workflows/build-staging-webapp-image.yaml @@ -72,3 +72,4 @@ jobs: git add claasp-dev.log git commit -m "Updating deployment-staging-repo from github" git push origin develop + needs: build-image \ No newline at end of file From 351cdd19cc5eeb58b458e35fe01b9ea874ac5456 Mon Sep 17 00:00:00 2001 From: Alessandro De Piccoli Date: Mon, 4 Mar 2024 17:54:45 +0100 Subject: [PATCH 161/179] Fix XOR linear trail search --- .../sat/sat_models/sat_xor_linear_model.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py index a0094ff6..eb3799ae 100644 --- a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py +++ b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py @@ -146,15 +146,21 @@ def find_all_xor_linear_trails_with_fixed_weight(self, fixed_weight, fixed_value solution = self.solve(XOR_LINEAR, solver_name=solver_name) solution['building_time_seconds'] = end_building_time - start_building_time solutions_list = [] - out_suffix = constants.OUTPUT_BIT_ID_SUFFIX while solution['total_weight'] is not None: solutions_list.append(solution) literals = [] - for component in self._cipher.get_all_components(): - bit_len = component.output_bit_size - value_to_avoid = int(solution['components_values'][f'{component.id}{out_suffix}']['value'], base=16) + for component in solution['components_values']: + value_as_hex_string = solution['components_values'][component]['value'] + value_to_avoid = int(value_as_hex_string, base=16) + bit_len = len(value_as_hex_string) * 4 minus = ['-' * (value_to_avoid >> i & 1) for i in reversed(range(bit_len))] - literals.extend([f'{minus[i]}{component.id}_{i}{out_suffix}' for i in range(bit_len)]) + if component.endswith('_i') or component.endswith('_o'): + component_id = component[:-2] + suffix = component[-2:] + else: + component_id = component + suffix = '_o' + literals.extend([f'{minus[i]}{component_id}_{i}{suffix}' for i in range(bit_len)]) self._model_constraints.append(' '.join(literals)) solution = self.solve(XOR_LINEAR, solver_name=solver_name) solution['building_time_seconds'] = end_building_time - start_building_time From a302b26cd5ed732de622db890632edbb3ea48072 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 09:21:30 +0400 Subject: [PATCH 162/179] fixed show function in report class and implemented run autond pipeline in report class --- .../dieharder_statistical_tests.py | 27 +++++- .../nist_statistical_tests.py | 91 +++++++++++++------ 2 files changed, 85 insertions(+), 33 deletions(-) diff --git a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py index fd645afe..f54333d6 100644 --- a/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/dieharder_statistical_tests.py @@ -26,6 +26,27 @@ from claasp.cipher_modules.statistical_tests.dataset_generator import DatasetGenerator, DatasetType +TEST_ID_TABLE = { + + 'Frequency': 1, + 'BlockFrequency': 2, + 'CumulativeSums': 3, + 'Runs': 5, + 'LongestRun': 6, + 'Rank': 7, + 'FFT': 8, + 'NonOverlappingTemplate': 9, + 'OverlappingTemplate': 157, + 'Universal': 158, + 'ApproximateEntropy': 159, + 'RandomExcursions': 160, + 'RandomExcursionsVariant': 168, + 'Serial': 186, + 'LinearComplexity': 188 + +} + + class DieharderTests: _DIEHARDER_OUTPUT = "dieharder_test_output.txt" @@ -84,6 +105,7 @@ def dieharder_statistical_tests(self, test_type, 'test_results': None } + dataset_generate_time = time.time() self.folder_prefix = os.getcwd() + '/test_reports/' + dieharder_report_folder_prefix if round_end == 0: @@ -107,7 +129,6 @@ def dieharder_statistical_tests(self, test_type, self.bits_in_one_line = sample_size * self.number_of_samples_in_one_line self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples) @@ -128,7 +149,6 @@ def dieharder_statistical_tests(self, test_type, self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_correlation_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples, number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) @@ -149,7 +169,6 @@ def dieharder_statistical_tests(self, test_type, self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_cbc_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples, number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) @@ -362,7 +381,7 @@ def generate_chart_round(report_dict, output_dir='', show_graph=False): EXAMPLES:: sage: from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests - sage: result = DieharderTests.run_dieharder_statistical_tests_tool( # doctest: +SKIP + sage: result = DieharderTests._run_dieharder_statistical_tests_tool( # doctest: +SKIP ....: f'claasp/cipher_modules/statistical_tests/input_data_example', # doctest: +SKIP ....: ) # long time # doctest: +SKIP ... diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 4db74f2d..1ec47a1d 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -28,6 +28,26 @@ reports_path = "test_reports/statistical_tests/nist_statistics_report" +TEST_ID_TABLE = { + + 'Frequency': 1, + 'BlockFrequency': 2, + 'CumulativeSums': 3, + 'Runs': 5, + 'LongestRun': 6, + 'Rank': 7, + 'FFT': 8, + 'NonOverlappingTemplate': 9, + 'OverlappingTemplate': 157, + 'Universal': 158, + 'ApproximateEntropy': 159, + 'RandomExcursions': 160, + 'RandomExcursionsVariant': 168, + 'Serial': 186, + 'LinearComplexity': 188 + +} + class StatisticalTests: @@ -45,6 +65,7 @@ def nist_statistical_tests(self, test_type, round_start=0, round_end=0, nist_report_folder_prefix="nist_statistics_report", + statistical_test_option_list='1' + 14 * '0' ): """ @@ -227,8 +248,9 @@ def nist_statistical_tests(self, test_type, if not dataset: return self._write_execution_time(f'Compute {self.dataset_type.value}', dataset_generate_time) - nist_test['test_results'] = self._generate_nist_dicts(dataset, round_start, round_end, - flag_chart=False) + nist_test['test_results'] = self._generate_nist_dicts(dataset=dataset, round_start=round_start, + round_end=round_end, + statistical_test_option_list=statistical_test_option_list) nist_test['input_parameters']['bits_in_one_line'] = bits_in_one_line nist_test['input_parameters']['number_of_lines'] = number_of_lines @@ -315,7 +337,7 @@ def _mkdir_folder_experiment(path_prefix, folder_experiment): return True @staticmethod - def _parse_report(report_filename): + def _parse_report(report_filename, statistical_test_option_list='1' + 14 * '0'): """ Parse the nist statistical tests report. It will return the parsed result in a dictionary format. @@ -359,28 +381,34 @@ def _parse_report(report_filename): # retrieve pass standard threshold_rate = [] - seqs = lines[199].split("=") - seqs_1 = seqs[1].split() - seqs = lines[200].split("=") - seqs_2 = seqs[1].split() + total_line_1 = [line for line in lines if 'random excursion (variant) test is approximately' in line][0] + total_1 = int([x for x in total_line_1.split(' ') if x.isnumeric()][0]) + passed_line_1 = [line for line in lines if 'sample size' in line and 'binary sequences.' in line][0] + passed_1 = int([x for x in passed_line_1.split(' ') if x.isnumeric()][0]) threshold_rate.append({ - "total": int(seqs_2[0]), - "passed": int(seqs_1[0])}) - seqs = lines[203].split("=") - if len(seqs) != 1: - seqs_1 = seqs[1].split() - seqs_2 = seqs[2].split() - threshold_rate.append({ - "total": int(seqs_2[0]), - "passed": int(seqs_1[0])}) - report_dict["number_of_sequences_threshold"] = threshold_rate + "total": total_1, + "passed": passed_1}) + try: + total_passed_line_2 = \ + [line for line in lines if 'is approximately =' in line and 'for a sample size' in line][0] + total_passed = [x for x in total_passed_line_2 if x.isdigit()] + if len(total_passed) != 1: + total_2 = total_passed[1] + passed_2 = total_passed[0] + threshold_rate.append({ + "total": total_2, + "passed": passed_2}) + except IndexError: + pass + report_dict["number_of_sequences_threshold"] = threshold_rate + test_line_index = lines.index( + '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n') - 2 # retrieve test - lines_test = lines[7:195] + lines_test = lines[7:test_line_index] test_list = [] - for i in range(188): + for i in range(test_line_index - 7): test_dict = {} - test_dict["test_id"] = i + 1 # check passed if lines_test[i].find('*') != -1 or lines_test[i].find('-') != -1: @@ -412,9 +440,12 @@ def _parse_report(report_filename): test_dict["total_seqs"] = int(nums[1]) test_dict["passed_proportion"] = test_dict["passed_seqs"] / test_dict["total_seqs"] test_dict["test_name"] = seqs[12] + + test_dict['test_id'] = TEST_ID_TABLE[seqs[12]] + len( + [test for test in test_list if test['test_name'] == test_dict['test_name']]) + test_list.append(test_dict) report_dict["randomness_test"] = test_list - report_dict["test_name"] = "nist_statistical_tests" f.close() print(f'Parsing {report_filename} is finished.') return report_dict @@ -449,10 +480,10 @@ def generate_chart_round(report_dict, output_dir='', show_graph=False): Drawing round 1 is finished. """ print(f'Drawing round {report_dict["round"]} is in progress.') - x = [i for i in range(1, 189)] - y = [0 for _ in range(188)] - for item in report_dict["randomness_test"]: - y[item["test_id"] - 1] = item["passed_proportion"] + x = [test['test_id'] for test in report_dict['randomness_test']] + y = [0 for _ in range(len(x))] + for i in range(len(y)): + y[i] = [test['passed_proportion'] for test in report_dict['randomness_test'] if test['test_id'] == x[i]][0] plt.clf() for i in range(len(report_dict["number_of_sequences_threshold"])): @@ -463,6 +494,7 @@ def generate_chart_round(report_dict, output_dir='', show_graph=False): plt.hlines(rate, 186, 188, color="olive", linestyle="dashed") elif i == 1: plt.hlines(rate, 160, 185, color="olive", linestyle="dashed") + plt.scatter(x, y, color="cadetblue") plt.title( f'{report_dict["cipher_name"]}:{report_dict["data_type"]}, Round " {report_dict["round"]}|{report_dict["rounds"]}') @@ -515,11 +547,11 @@ def generate_chart_all(report_dict_list, report_folder="", show_graph=False): x = [i + 1 for i in range(report_dict_list[0]["rounds"])] y = [0 for _ in range(report_dict_list[0]["rounds"])] for i in range(len(report_dict_list)): - y[report_dict_list[i]["round"] - 1] = report_dict_list[i]["passed_tests"] + y[report_dict_list[i]["round"]] = report_dict_list[i]["passed_tests"] random_round = -1 for r in range(report_dict_list[0]["rounds"]): - if report_dict_list[r]["passed_tests"] > 185: + if report_dict_list[r]["passed_tests"] > 188*0.98: random_round = report_dict_list[r]["round"] break @@ -564,7 +596,7 @@ def _write_execution_time(self, execution_description, execution_time): except Exception as e: print(f'Error: {e.strerror}') - def _generate_nist_dicts(self, dataset, round_start, round_end, flag_chart=False): + def _generate_nist_dicts(self, dataset, round_start, round_end, statistical_test_option_list='1' + 14 * '0'): # seems that the statistical tools cannot change the default folder 'experiments' nist_local_experiment_folder = f"/usr/local/bin/sts-2.1.2/experiments/" dataset_folder = 'dataset' @@ -593,7 +625,8 @@ def _generate_nist_dicts(self, dataset, round_start, round_end, flag_chart=False sts_execution_time = time.time() self._run_nist_statistical_tests_tool(dataset_filename, self.bits_in_one_line, - self.number_of_lines, 1) + self.number_of_lines, 1, + statistical_test_option_list=statistical_test_option_list) sts_execution_time = time.time() - sts_execution_time try: shutil.move(nist_local_experiment_folder, report_folder_round) From d79b235918f696b99cfb52b62e3e89eb9d879c0b Mon Sep 17 00:00:00 2001 From: davidgerault Date: Tue, 5 Mar 2024 10:45:12 +0400 Subject: [PATCH 163/179] Updated definitions of the NN tests --- claasp/cipher_modules/neural_network_tests.py | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/claasp/cipher_modules/neural_network_tests.py b/claasp/cipher_modules/neural_network_tests.py index c78b679d..4633504b 100644 --- a/claasp/cipher_modules/neural_network_tests.py +++ b/claasp/cipher_modules/neural_network_tests.py @@ -24,9 +24,9 @@ def neural_network_blackbox_distinguisher_tests(self, nb_samples=10000, rounds_to_train=[]): """ Runs a test inspired by [BHPR2021]; trains a MLP to distinguish samples of the form - input || output from random. The test is run once for each setting, defined by the types of inputs and outputs. - The input is taken among the inputs defined by the cipher, and output is chosen between cipher output, - round output (one setting for each round output), or round key output (one setting per round key). + L || R from random L || Random, where L is one of the inputs to the cipher, and R one of its outputs. + The test is run for each of the inputs defined by the cipher, and each R in {cipher output, + round i output, round key i}. Within an experiments, all inputs other than L are fixed. Return a python dictionary that contains the accuracies corresponding to each setting. INPUT: @@ -200,14 +200,12 @@ def _create_structure(self, base_output, test_name, partial_result): def neural_network_differential_distinguisher_tests(self, nb_samples=10000, hidden_layers=[32, 32, 32], number_of_epochs=10, diff=[[0x400000], [0xa]], rounds_to_train=[]): """ - Runs a test inspired by [BR2021]; for each input i to the cipher and difference delta in diff[i], a dataset - of pairs X0, X1 is created, such that the input i in X1 is equal to the input i in X0 XORed with delta. The - pairs are then encrypted to C0, C1, and a simple MLP is trained to distinguish C0, C1 pairs from pairs of - random values R0, R1. - The test is run once for each setting, defined by the difference, and the types of inputs and outputs. - The input is taken among the inputs defined by the cipher, and output is chosen between cipher output, - round output (one setting for each round output), or round key output (one setting per round key). - Return a python dictionary that contains the accuracies corresponding to each round. + Runs a test inspired by [BR2021]; trains a MLP to distinguish samples of the form + L || R from random L || Random, where L and R are the outputs of the cipher, for inputs related by an + XOR difference. + The test is run for each of the differences in diff iteratively, for each output in {cipher output, + round i output, round key i}. Within an experiments, all inputs where no difference is applied are fixed. + Return a python dictionary that contains the accuracies corresponding to each setting. INPUT: From aec635169b84abba8524c13e5cbb96a9dce58724 Mon Sep 17 00:00:00 2001 From: Alessandro De Piccoli Date: Tue, 5 Mar 2024 09:39:30 +0100 Subject: [PATCH 164/179] Fix doctests and pytests for SAT XOR linear search --- .../models/sat/sat_models/sat_xor_linear_model.py | 12 ++++++------ .../sat/sat_models/sat_xor_linear_model_test.py | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py index eb3799ae..d723efc0 100644 --- a/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py +++ b/claasp/cipher_modules/models/sat/sat_models/sat_xor_linear_model.py @@ -128,14 +128,14 @@ def find_all_xor_linear_trails_with_fixed_weight(self, fixed_weight, fixed_value sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: from claasp.cipher_modules.models.utils import set_fixed_variables, integer_to_bit_list sage: speck = SpeckBlockCipher(number_of_rounds=3) - sage: sat = SatXorLinearModel(speck) + sage: sat = SatXorLinearModel(speck.remove_key_schedule()) sage: plaintext = set_fixed_variables( ....: component_id='plaintext', ....: constraint_type='not_equal', ....: bit_positions=range(32), ....: bit_values=integer_to_bit_list(0, 32, 'big')) - sage: trails = sat.find_all_xor_linear_trails_with_fixed_weight(2, fixed_values=[plaintext]) - sage: len(trails) == 2 + sage: trails = sat.find_all_xor_linear_trails_with_fixed_weight(1, fixed_values=[plaintext]) + sage: len(trails) == 4 True """ start_building_time = time.time() @@ -192,14 +192,14 @@ def find_all_xor_linear_trails_with_weight_at_most(self, min_weight, max_weight, sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: from claasp.cipher_modules.models.utils import set_fixed_variables, integer_to_bit_list sage: speck = SpeckBlockCipher(number_of_rounds=3) - sage: sat = SatXorLinearModel(speck) + sage: sat = SatXorLinearModel(speck.remove_key_schedule()) sage: plaintext = set_fixed_variables( ....: component_id='plaintext', ....: constraint_type='not_equal', ....: bit_positions=range(32), ....: bit_values=integer_to_bit_list(0, 32, 'big')) - sage: trails = sat.find_all_xor_linear_trails_with_weight_at_most(2, 3, fixed_values=[plaintext]) - sage: len(trails) == 11 + sage: trails = sat.find_all_xor_linear_trails_with_weight_at_most(0, 2, fixed_values=[plaintext]) + sage: len(trails) == 187 True """ solutions_list = [] diff --git a/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_linear_model_test.py b/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_linear_model_test.py index a43dad58..6501182d 100644 --- a/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_linear_model_test.py +++ b/tests/unit/cipher_modules/models/sat/sat_models/sat_xor_linear_model_test.py @@ -18,12 +18,12 @@ def test_branch_xor_linear_constraints(): def test_find_all_xor_linear_trails_with_weight_at_most(): speck = SpeckBlockCipher(number_of_rounds=3) - sat = SatXorLinearModel(speck) + sat = SatXorLinearModel(speck.remove_key_schedule()) plaintext = set_fixed_variables(component_id='plaintext', constraint_type='not_equal', bit_positions=range(32), bit_values=integer_to_bit_list(0, 32, 'big')) - trails = sat.find_all_xor_linear_trails_with_weight_at_most(2, 3, fixed_values=[plaintext]) + trails = sat.find_all_xor_linear_trails_with_weight_at_most(0, 2, fixed_values=[plaintext]) - assert len(trails) == 11 + assert len(trails) == 187 def test_find_lowest_weight_xor_linear_trail(): From eca5af25f8d74d24aa23878fcce7c145b4964d87 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 14:39:05 +0400 Subject: [PATCH 165/179] fixed statistical tests and component analysis print --- .../component_analysis_tests.py | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index c06f580e..42cb73d0 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -67,7 +67,13 @@ def component_analysis_tests(self): if result != {}: components_analysis.append(result) - return components_analysis + output_dictionary = { + 'input_parameters': { + 'test_name': 'component_analysis' + }, + 'test_results': components_analysis + } + return output_dictionary def get_all_operations(self): """ @@ -114,7 +120,7 @@ def get_all_operations(self): self._add_attributes_to_operation(cipher_operations, operation, tmp_cipher_operations) return cipher_operations - def print_component_analysis_as_radar_charts(self): + def print_component_analysis_as_radar_charts(self, results=None): """ Return a graph that can be plot to visualize the properties of all the operations of a cipher in a spider graph @@ -135,18 +141,20 @@ def print_component_analysis_as_radar_charts(self): """ - results = self.component_analysis_tests() + if results==None: + results = self.component_analysis_tests() SMALL_SIZE = 10 MEDIUM_SIZE = 11 BIG_SIZE = 12 - plt.rc('font', size=SMALL_SIZE) # controls default text sizes + plt.rc('font', size=BIG_SIZE) # controls default text sizes plt.rc('axes', titlesize=SMALL_SIZE) # fontsize of the axes title plt.rc('axes', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels plt.rc('xtick', labelsize=SMALL_SIZE) # fontsize of the tick labels plt.rc('ytick', labelsize=SMALL_SIZE) # fontsize of the tick labels - plt.rc('legend', fontsize=SMALL_SIZE) # legend fontsize + plt.rc('legend', fontsize=BIG_SIZE) # legend fontsize plt.rc('figure', titlesize=BIG_SIZE) # fontsize of the figure title + plt.rcParams['figure.figsize'] = [20, 20] # remove XOR from results results_without_xor = [results[i] for i in range(len(results)) if results[i]["description"][0] != "XOR"] @@ -208,9 +216,10 @@ def print_component_analysis_as_radar_charts(self): # Show the graph plt.subplots_adjust(left=0.25, bottom=0.1, right=0.7, top=0.95, wspace=0, hspace=0.96) - # plt.show() - print("The radar chart can be plot with the build-in method plt.show()") - return plt + plt.show() + #print("The radar chart can be plot with the build-in method plt.show()") + + #return plt def _AND_as_boolean_function(self, component, boolean_polynomial_ring): From a308a0469aaa96618254e0dc87fa9ec05e7c7c91 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 14:39:31 +0400 Subject: [PATCH 166/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/report.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 8a246c1e..c56cba3e 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -8,7 +8,7 @@ import shutil from claasp.cipher_modules.statistical_tests.dieharder_statistical_tests import DieharderTests from claasp.cipher_modules.statistical_tests.nist_statistical_tests import StatisticalTests - +from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis def _print_colored_state(state, verbose, file): @@ -178,6 +178,9 @@ def show(self, test_name='trail_search', fixed_input='plaintext', fixed_output=' test_list = [] if 'statistical' in self.test_name: test_list.append(self.test_name) + elif 'component_analysis' in self.test_name: + Component_Analysis=CipherComponentsAnalysis(self.cipher) + Component_Analysis.print_component_analysis_as_radar_charts(results=self.test_report['test_results']) elif 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': test_list = list(self.test_report['test_results'][fixed_input][fixed_output].keys()) if test_name not in test_list and 'algebraic' not in self.test_name and self.test_name !='neural_distinguisher_test': From 3127ce269c6b94f326a215d217eaf4bd9d417efd Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 14:42:55 +0400 Subject: [PATCH 167/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/component_analysis_tests.py | 8 ++------ .../unit/cipher_modules/component_analysis_tests_test.py | 3 +-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 42cb73d0..19a7f61f 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -129,16 +129,12 @@ def print_component_analysis_as_radar_charts(self, results=None): sage: from claasp.ciphers.block_ciphers.fancy_block_cipher import FancyBlockCipher sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis sage: fancy = FancyBlockCipher(number_of_rounds=3) - sage: plot = CipherComponentsAnalysis(fancy).print_component_analysis_as_radar_charts() - sage: type(plot) - + sage: CipherComponentsAnalysis(fancy).print_component_analysis_as_radar_charts() sage: from claasp.ciphers.block_ciphers.speck_block_cipher import SpeckBlockCipher sage: speck = SpeckBlockCipher(block_bit_size=16, key_bit_size=32, number_of_rounds=3) sage: from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis - sage: plot = CipherComponentsAnalysis(speck).print_component_analysis_as_radar_charts() - sage: type(plot) - + sage: CipherComponentsAnalysis(speck).print_component_analysis_as_radar_charts() """ if results==None: diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index f6280819..89f70a8a 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -20,8 +20,7 @@ def test_component_analysis_tests(): def test_print_component_analysis_as_radar_charts(): aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) - fig = CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() - assert str(type(fig)) == "" + CipherComponentsAnalysis(aes).print_component_analysis_as_radar_charts() def test_fsr_properties(): e0 = BluetoothStreamCipherE0(keystream_bit_len=2) From 51c60176e6442972897f108f61526b10708601b7 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 14:45:21 +0400 Subject: [PATCH 168/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/report.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index c56cba3e..443d219d 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -213,6 +213,9 @@ def _export(self, file_format, output_dir): with open(output_dir + '/' + self.cipher.id + '/' + self.test_name + file_format, 'w') as fp: fp.write(pd.DataFrame(self.test_report["randomness_test"]).style.to_latex()) + elif 'component_analysis' in self.test_name: + print('This method is not implemented yet for the component analysis test.') + return elif 'trail' in self.test_name or 'algebraic' in self.test_name: if 'trail' in self.test_name: @@ -756,7 +759,10 @@ def save_as_image(self, word_size=1, state_size=1, key_state_size=1, output_dire """ - if 'trail' in self.test_name: + if 'component_analysis' in self.test_name: + print('This method is not implemented yet for the component analysis test') + return + elif 'trail' in self.test_name: self._print_trail(word_size, state_size, key_state_size, verbose, show_word_permutation, show_var_shift, show_var_rotate, show_theta_xoodoo, show_theta_keccak, show_shift_rows, show_sigma, show_reverse, From 551ba9c1eb00eb5d8e008935bbffd350c36e9535 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 14:48:47 +0400 Subject: [PATCH 169/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/report.py | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 443d219d..1547a715 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -478,7 +478,7 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word value = self.test_report['components_values'][comp_id]['value'] - bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value))) if '*' not in value else list( + bin_list = list(format(int(value, 16), 'b').zfill(4 * len(value)) if value[:2] != '0x' else 4 * len(value[2:])) if '*' not in value else list( value[2:]) word_list = ['*' if '*' in ''.join(bin_list[x:x + word_size]) else word_denominator if ''.join(bin_list[x:x + word_size]).count('1') > 0 else '_' for x in @@ -568,21 +568,35 @@ def _print_trail(self, word_size, state_size, key_state_size, verbose, show_word def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_input=None, fixed_output=None, fixed_input_difference=None, test_name=None): - if self.test_name == 'neural_distinguisher_test': - df_scores = pd.DataFrame(self.test_report['test_results']['plaintext']['cipher_output']['differences_scores'], index=['scores']).T - df_result = pd.DataFrame([self.test_report['test_results']['plaintext']['cipher_output'][0]['accuracies']], index=['accuracy']).T + df_scores = pd.DataFrame( + self.test_report['test_results']['plaintext']['cipher_output']['differences_scores'], + index=['scores']).T + df_result = pd.DataFrame( + self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'][0][ + 'accuracies'], index=['accuracy_round' + str(i) for i in range(len( + self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'][0][ + 'accuracies']))]) if show_graph: print('RESULTS') - print('plaintext_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['plaintext_diff'])) - print('key_input_diff : ' + str(self.test_report['test_results']['plaintext']['cipher_output'][0]['key_diff'])) + print('plaintext_input_diff : ' + str( + self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'][0][ + 'plaintext_diff'])) + print('key_input_diff : ' + str( + self.test_report['test_results']['plaintext']['cipher_output']['neural_distinguisher_test'][0][ + 'key_diff'])) + print(df_result) + print() + print('//////') + print() + print('SCORES') + print(df_scores) else: df_result.to_csv(output_directory + '/neural_distinguisher_test_results.csv') df_scores.to_csv(output_directory + '/neural_distinguisher_test_scores.csv') - elif 'statistical' in self.test_name: if 'dieharder' in self.test_name: for dict in self.test_report['test_results']: From c07fae45b0240005e295ab4fdbfef9e1669af62d Mon Sep 17 00:00:00 2001 From: davidgerault Date: Tue, 5 Mar 2024 16:20:25 +0400 Subject: [PATCH 170/179] Changed renderer to gif --- claasp/cipher_modules/report.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 8a246c1e..e40f36ac 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -607,7 +607,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i if show_graph==False: fig.write_image(output_directory + '/test_results.png') if show_graph: - fig.show(renderer='notebook_connected') + fig.show(renderer='gif') return else: @@ -694,7 +694,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( res) + '_' + str(case['input_difference_value']) + '.png', scale=4) else: - fig.show(renderer='notebook_connected') + fig.show(renderer='gif') return fig.data = [] fig.layout = {} @@ -712,7 +712,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i '/' + str(res) + '.png', scale=4) else: - fig.show(renderer='notebook_connected') + fig.show(renderer='gif') return fig.data = [] fig.layout = {} From aa2f4b7f70dded4a8573363dff88835ee57bfd4f Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 17:05:04 +0400 Subject: [PATCH 171/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/component_analysis_tests.py | 2 +- .../statistical_tests/nist_statistical_tests.py | 13 ++++++++----- .../cipher_modules/component_analysis_tests_test.py | 8 ++++---- .../dieharder_statistical_tests_test.py | 7 +------ .../nist_statistical_tests_test.py | 3 --- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/claasp/cipher_modules/component_analysis_tests.py b/claasp/cipher_modules/component_analysis_tests.py index 19a7f61f..e525cc0c 100644 --- a/claasp/cipher_modules/component_analysis_tests.py +++ b/claasp/cipher_modules/component_analysis_tests.py @@ -138,7 +138,7 @@ def print_component_analysis_as_radar_charts(self, results=None): """ if results==None: - results = self.component_analysis_tests() + results = self.component_analysis_tests()['test_results'] SMALL_SIZE = 10 MEDIUM_SIZE = 11 BIG_SIZE = 12 diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 1ec47a1d..3a8dfa87 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -381,17 +381,17 @@ def _parse_report(report_filename, statistical_test_option_list='1' + 14 * '0'): # retrieve pass standard threshold_rate = [] - total_line_1 = [line for line in lines if 'random excursion (variant) test is approximately' in line][0] - total_1 = int([x for x in total_line_1.split(' ') if x.isnumeric()][0]) - passed_line_1 = [line for line in lines if 'sample size' in line and 'binary sequences.' in line][0] + passed_line_1 = [line for line in lines if 'random excursion (variant) test is approximately' in line][0] passed_1 = int([x for x in passed_line_1.split(' ') if x.isnumeric()][0]) + total_line_1 = [line for line in lines if 'sample size' in line and 'binary sequences.' in line][0] + total_1 = int([x for x in total_line_1.split(' ') if x.isnumeric()][0]) threshold_rate.append({ "total": total_1, "passed": passed_1}) try: total_passed_line_2 = \ [line for line in lines if 'is approximately =' in line and 'for a sample size' in line][0] - total_passed = [x for x in total_passed_line_2 if x.isdigit()] + total_passed = [int(x) for x in total_passed_line_2 if x.isdigit()] if len(total_passed) != 1: total_2 = total_passed[1] passed_2 = total_passed[0] @@ -547,7 +547,10 @@ def generate_chart_all(report_dict_list, report_folder="", show_graph=False): x = [i + 1 for i in range(report_dict_list[0]["rounds"])] y = [0 for _ in range(report_dict_list[0]["rounds"])] for i in range(len(report_dict_list)): - y[report_dict_list[i]["round"]] = report_dict_list[i]["passed_tests"] + print(report_dict_list[i]["round"]) + print(len(y)) + print() + y[report_dict_list[i]["round"]-1] = report_dict_list[i]["passed_tests"] random_round = -1 for r in range(report_dict_list[0]["rounds"]): diff --git a/tests/unit/cipher_modules/component_analysis_tests_test.py b/tests/unit/cipher_modules/component_analysis_tests_test.py index 89f70a8a..6e765ef4 100644 --- a/tests/unit/cipher_modules/component_analysis_tests_test.py +++ b/tests/unit/cipher_modules/component_analysis_tests_test.py @@ -12,11 +12,11 @@ def test_get_all_operations(): def test_component_analysis_tests(): fancy = FancyBlockCipher(number_of_rounds=3) components_analysis = CipherComponentsAnalysis(fancy).component_analysis_tests() - assert len(components_analysis) == 9 + assert len(components_analysis['test_results']) == 9 aes = AESBlockCipher(word_size=8, state_size=2, number_of_rounds=2) result = CipherComponentsAnalysis(aes).component_analysis_tests() - assert len(result) == 7 + assert len(result['test_results']) == 7 def test_print_component_analysis_as_radar_charts(): aes = AESBlockCipher(word_size=8, state_size=4, number_of_rounds=2) @@ -24,7 +24,7 @@ def test_print_component_analysis_as_radar_charts(): def test_fsr_properties(): e0 = BluetoothStreamCipherE0(keystream_bit_len=2) - dictionary = CipherComponentsAnalysis(e0).component_analysis_tests() + dictionary = CipherComponentsAnalysis(e0).component_analysis_tests()['test_results'] assert dictionary[8]["number_of_registers"] == 4 assert dictionary[8]["lfsr_connection_polynomials"][0] == 'x^25 + x^20 + x^12 + x^8 + 1' assert dictionary[8]["lfsr_connection_polynomials"][1] == 'x^31 + x^24 + x^16 + x^12 + 1' @@ -33,5 +33,5 @@ def test_fsr_properties(): assert dictionary[8]['lfsr_polynomials_are_primitive'] == [True, True, True, True] triv = TriviumStreamCipher(keystream_bit_len=1) - dictionary = CipherComponentsAnalysis(triv).component_analysis_tests() + dictionary = CipherComponentsAnalysis(triv).component_analysis_tests()['test_results'] assert dictionary[0]["type_of_registers"] == ['non-linear', 'non-linear', 'non-linear'] diff --git a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py index 5ccb59b4..5917a65d 100644 --- a/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/dieharder_statistical_tests_test.py @@ -16,6 +16,7 @@ def test_run_dieharder_statistical_tests_tool(): assert result == TESTS_FINISHED +@pytest.mark.skip("Takes to long") def test_dieharder_statistical_tests(): speck = SimonBlockCipher(number_of_rounds=1) dieharder_tests = DieharderTests(speck) @@ -25,12 +26,6 @@ def test_dieharder_statistical_tests(): dieharder_high_density_test_results = dieharder_tests.dieharder_statistical_tests('high_density') dieharder_low_density_test_results = dieharder_tests.dieharder_statistical_tests('low_density') - assert type(dieharder_avalanche_test_results) == dict - assert type(dieharder_correlation_test_results) == dict - assert type(dieharder_random_test_results) == dict - assert type(dieharder_low_density_test_results) == dict - assert type(dieharder_high_density_test_results) == dict - @pytest.mark.skip("Takes too long") diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 346997f3..5854d657 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -58,9 +58,6 @@ def test_generate_chart_all(): StatisticalTests.generate_chart_all(dict_list) sys.stdout = old_stdout - assert result.getvalue() == \ - 'Drawing chart for all rounds is in progress.\n' \ - 'Drawing chart for all rounds is in finished.\n' def test_run_avalanche_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) From b4fa7a5325ec9e50bde5740ffd79ca11a23b7277 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 17:09:53 +0400 Subject: [PATCH 172/179] fixed statistical tests and component analysis print --- claasp/cipher_modules/report.py | 6 +++--- .../statistical_tests/nist_statistical_tests_test.py | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/claasp/cipher_modules/report.py b/claasp/cipher_modules/report.py index 1547a715..7af8a6bc 100644 --- a/claasp/cipher_modules/report.py +++ b/claasp/cipher_modules/report.py @@ -627,7 +627,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i if show_graph==False: fig.write_image(output_directory + '/test_results.png') if show_graph: - fig.show(renderer='notebook_connected') + fig.show(renderer='png') return else: @@ -714,7 +714,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i self.cipher.id + '/' + self.test_name + '/' + it + '/' + out + '/' + res + '/' + str( res) + '_' + str(case['input_difference_value']) + '.png', scale=4) else: - fig.show(renderer='notebook_connected') + fig.show(renderer='png') return fig.data = [] fig.layout = {} @@ -732,7 +732,7 @@ def _produce_graph(self, output_directory=os.getcwd(), show_graph=False, fixed_i '/' + str(res) + '.png', scale=4) else: - fig.show(renderer='notebook_connected') + fig.show(renderer='png') return fig.data = [] fig.layout = {} diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 5854d657..806c6ffe 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -79,6 +79,8 @@ def test_run_correlation_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 +@pytest.mark.skip("Takes too long") + def test_run_CBC_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout From 2b51137f8edc78c23df7a40e63249370a1cba185 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 17:20:22 +0400 Subject: [PATCH 173/179] fixed statistical tests and component analysis print --- .../statistical_tests/nist_statistical_tests.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index 3a8dfa87..a20bfcf1 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -107,6 +107,8 @@ def nist_statistical_tests(self, test_type, 'test_results': None } + dataset_generate_time = time.time() + self.folder_prefix = os.getcwd() + '/test_reports/' + nist_report_folder_prefix if round_end == 0: @@ -130,7 +132,6 @@ def nist_statistical_tests(self, test_type, self.bits_in_one_line = sample_size * self.number_of_samples_in_one_line self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples) @@ -151,7 +152,6 @@ def nist_statistical_tests(self, test_type, self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_correlation_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples, number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) @@ -172,7 +172,6 @@ def nist_statistical_tests(self, test_type, self._create_report_folder() - dataset_generate_time = time.time() dataset = self.data_generator.generate_cbc_dataset(input_index=self.input_index, number_of_samples=self.number_of_samples, number_of_blocks_in_one_sample=number_of_blocks_in_one_sample) @@ -185,10 +184,10 @@ def nist_statistical_tests(self, test_type, if number_of_lines == 'default': number_of_lines = 128 - number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) + self.number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) self.number_of_lines = number_of_lines self.number_of_samples = self.number_of_lines + 1 - self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() From ade6c6ee3fe84f316bf8240c2d4d4239ac2bf9e1 Mon Sep 17 00:00:00 2001 From: "airan.sanchez" Date: Tue, 5 Mar 2024 14:47:45 +0000 Subject: [PATCH 174/179] :sparkles: Add build and push workflow for develop --- .github/workflows/build-staging-webapp-image.yaml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-staging-webapp-image.yaml b/.github/workflows/build-staging-webapp-image.yaml index ec4a64f2..44234f52 100644 --- a/.github/workflows/build-staging-webapp-image.yaml +++ b/.github/workflows/build-staging-webapp-image.yaml @@ -1,12 +1,9 @@ name: Build and push image from develop on: - push: + pull_request: + types: [ closed ] branches: - - feat/add-develop-to-claasp-webapp -# pull_request: -# types: [ closed ] -# branches: -# - develop + - develop jobs: build-image: From 633bfc41605ad3eabf260bbfc88363d4b391570a Mon Sep 17 00:00:00 2001 From: MFormenti Date: Tue, 5 Mar 2024 19:41:49 +0400 Subject: [PATCH 175/179] added code coverage --- tests/unit/cipher_modules/report_test.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index 19563499..d130089f 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -11,7 +11,7 @@ from claasp.cipher_modules.neural_network_tests import NeuralNetworkTests from claasp.cipher_modules.algebraic_tests import AlgebraicTests from claasp.cipher_modules.avalanche_tests import AvalancheTests - +from claasp.cipher_modules.component_analysis_tests import CipherComponentsAnalysis def test_save_as_image(): speck = SpeckBlockCipher(number_of_rounds=2) @@ -88,6 +88,10 @@ def test_save_as_DataFrame(): algebraic_report = Report(speck, algebraic_results) algebraic_report.save_as_DataFrame() + avalanche_results = AvalancheTests(speck).avalanche_tests() + avalanche_report = Report(speck,avalanche_results) + avalanche_report.save_as_DataFrame() + trail_report = Report(speck, trail) trail_report.save_as_DataFrame() @@ -118,6 +122,10 @@ def test_save_as_json(): algebraic_report = Report(simon, algebraic_results) algebraic_report.save_as_json() + avalanche_results = AvalancheTests(simon).avalanche_tests() + avalanche_report = Report(simon,avalanche_results) + avalanche_report.save_as_json() + trail_report.save_as_json() blackbox_report.save_as_json() @@ -130,3 +138,14 @@ def test_clean_reports(): blackbox_report.save_as_json() blackbox_report.clean_reports() + +def test_show(): + + speck = SpeckBlockCipher(number_of_rounds=3) + component_analysis = CipherComponentsAnalysis(speck).component_analysis_tests() + report_cca = Report(speck,component_analysis) + report_cca.show() + + neural_distinguisher_test = NeuralNetworkTests(speck).run_autond_pipeline() + report_autond = Report(speck,neural_distinguisher_test) + report_autond.show() \ No newline at end of file From a2c5a054fedde219f589b33bddcfe32167696f5d Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 6 Mar 2024 07:54:02 +0400 Subject: [PATCH 176/179] added code coverage --- .../nist_statistical_tests.py | 120 +++++++++--------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py index a20bfcf1..63947e7e 100644 --- a/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py +++ b/claasp/cipher_modules/statistical_tests/nist_statistical_tests.py @@ -59,8 +59,8 @@ def __init__(self, cipher): self._cipher_primitive = cipher.id + "_" + "_".join(str_of_inputs_bit_size) def nist_statistical_tests(self, test_type, - bits_in_one_line='default', - number_of_lines='default', + bits_in_one_sequence='default', + number_of_sequences='default', input_index=0, round_start=0, round_end=0, @@ -74,8 +74,8 @@ def nist_statistical_tests(self, test_type, INPUT: - ``test_type`` -- string describing which test to run - - ``bits_in_one_line`` -- integer parameter used to run the nist tests - - ``number_of_lines`` -- integer parameter used to run the nist tests + - ``bits_in_one_sequence`` -- integer parameter used to run the nist tests + - ``number_of_sequences`` -- integer parameter used to run the nist tests - ``input_index`` -- cipher input index - ``round_start`` -- first round to be considered in the cipher - ``round_end`` -- last round to be considered in the cipher @@ -119,17 +119,17 @@ def nist_statistical_tests(self, test_type, self.dataset_type = DatasetType.avalanche self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1048576 - if number_of_lines == 'default': - number_of_lines = 384 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1048576 + if number_of_sequences == 'default': + number_of_sequences = 384 sample_size = self.cipher.inputs_bit_size[input_index] * self.cipher.output_bit_size - number_of_samples_in_one_line = math.ceil(bits_in_one_line / sample_size) - self.number_of_lines = number_of_lines - self.number_of_samples_in_one_line = number_of_samples_in_one_line - self.number_of_samples = self.number_of_samples_in_one_line * (self.number_of_lines + 1) - self.bits_in_one_line = sample_size * self.number_of_samples_in_one_line + number_of_samples_in_one_sequence = math.ceil(bits_in_one_sequence / sample_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples_in_one_sequence = number_of_samples_in_one_sequence + self.number_of_samples = self.number_of_samples_in_one_sequence * (self.number_of_sequences + 1) + self.bits_in_one_sequence = sample_size * self.number_of_samples_in_one_sequence self._create_report_folder() dataset = self.data_generator.generate_avalanche_dataset(input_index=self.input_index, @@ -140,15 +140,15 @@ def nist_statistical_tests(self, test_type, self.dataset_type = DatasetType.correlation self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1048576 - if number_of_lines == 'default': - number_of_lines = 384 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1048576 + if number_of_sequences == 'default': + number_of_sequences = 384 - number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) - self.number_of_lines = number_of_lines - self.number_of_samples = self.number_of_lines + 1 - self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + number_of_blocks_in_one_sample = math.ceil(bits_in_one_sequence / self.cipher.output_bit_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples = self.number_of_sequences + 1 + self.bits_in_one_sequence = number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() @@ -160,15 +160,15 @@ def nist_statistical_tests(self, test_type, self.dataset_type = DatasetType.cbc self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1048576 - if number_of_lines == 'default': - number_of_lines = 384 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1048576 + if number_of_sequences == 'default': + number_of_sequences = 384 - number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) - self.number_of_lines = number_of_lines - self.number_of_samples = self.number_of_lines + 1 - self.bits_in_one_line = number_of_blocks_in_one_sample * self.cipher.output_bit_size + number_of_blocks_in_one_sample = math.ceil(bits_in_one_sequence / self.cipher.output_bit_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples = self.number_of_sequences + 1 + self.bits_in_one_sequence = number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() @@ -179,15 +179,15 @@ def nist_statistical_tests(self, test_type, elif test_type == 'random': self.dataset_type = DatasetType.random self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1040384 - if number_of_lines == 'default': - number_of_lines = 128 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1040384 + if number_of_sequences == 'default': + number_of_sequences = 128 - self.number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) - self.number_of_lines = number_of_lines - self.number_of_samples = self.number_of_lines + 1 - self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + self.number_of_blocks_in_one_sample = math.ceil(bits_in_one_sequence / self.cipher.output_bit_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples = self.number_of_sequences + 1 + self.bits_in_one_sequence = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() @@ -198,18 +198,18 @@ def nist_statistical_tests(self, test_type, elif test_type == 'low_density': self.dataset_type = DatasetType.low_density self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1056896 - if number_of_lines == 'default': - number_of_lines = 1 - - number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) - self.number_of_lines = number_of_lines - self.number_of_samples = self.number_of_lines + 1 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1056896 + if number_of_sequences == 'default': + number_of_sequences = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_sequence / self.cipher.output_bit_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples = self.number_of_sequences + 1 n = self.cipher.inputs_bit_size[self.input_index] ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + self.bits_in_one_sequence = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() @@ -219,18 +219,18 @@ def nist_statistical_tests(self, test_type, elif test_type == 'high_density': self.dataset_type = DatasetType.high_density self.input_index = input_index - if bits_in_one_line == 'default': - bits_in_one_line = 1056896 - if number_of_lines == 'default': - number_of_lines = 1 - - number_of_blocks_in_one_sample = math.ceil(bits_in_one_line / self.cipher.output_bit_size) - self.number_of_lines = number_of_lines - self.number_of_samples = self.number_of_lines + 1 + if bits_in_one_sequence == 'default': + bits_in_one_sequence = 1056896 + if number_of_sequences == 'default': + number_of_sequences = 1 + + number_of_blocks_in_one_sample = math.ceil(bits_in_one_sequence / self.cipher.output_bit_size) + self.number_of_sequences = number_of_sequences + self.number_of_samples = self.number_of_sequences + 1 n = self.cipher.inputs_bit_size[self.input_index] ratio = min(1, (number_of_blocks_in_one_sample - 1 - n) / math.comb(n, 2)) self.number_of_blocks_in_one_sample = int(1 + n + math.ceil(math.comb(n, 2) * ratio)) - self.bits_in_one_line = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size + self.bits_in_one_sequence = self.number_of_blocks_in_one_sample * self.cipher.output_bit_size self._create_report_folder() @@ -250,8 +250,8 @@ def nist_statistical_tests(self, test_type, nist_test['test_results'] = self._generate_nist_dicts(dataset=dataset, round_start=round_start, round_end=round_end, statistical_test_option_list=statistical_test_option_list) - nist_test['input_parameters']['bits_in_one_line'] = bits_in_one_line - nist_test['input_parameters']['number_of_lines'] = number_of_lines + nist_test['input_parameters']['bits_in_one_sequence'] = bits_in_one_sequence + nist_test['input_parameters']['number_of_sequences'] = number_of_sequences return nist_test @@ -584,7 +584,7 @@ def generate_chart_all(report_dict_list, report_folder="", show_graph=False): def _create_report_folder(self): self.report_folder = os.path.join(self.folder_prefix, - f'{self._cipher_primitive}_{self.dataset_type.name}_index{self.input_index}_{self.number_of_lines}lines_{self.bits_in_one_line}bits') + f'{self._cipher_primitive}_{self.dataset_type.name}_index{self.input_index}_{self.number_of_sequences}lines_{self.bits_in_one_sequence}bits') try: os.makedirs(self.report_folder) except OSError: @@ -626,8 +626,8 @@ def _generate_nist_dicts(self, dataset, round_start, round_end, statistical_test dataset[round_number].tofile(dataset_filename) sts_execution_time = time.time() - self._run_nist_statistical_tests_tool(dataset_filename, self.bits_in_one_line, - self.number_of_lines, 1, + self._run_nist_statistical_tests_tool(dataset_filename, self.bits_in_one_sequence, + self.number_of_sequences, 1, statistical_test_option_list=statistical_test_option_list) sts_execution_time = time.time() - sts_execution_time try: From 4fcc5b73bfd4f854b759cf23a9173ab14bdc56a8 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 6 Mar 2024 15:27:21 +0400 Subject: [PATCH 177/179] added code coverage --- .../statistical_tests/nist_statistical_tests_test.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index 806c6ffe..e85933e7 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -7,6 +7,7 @@ REPORT_EXAMPLE_TXT = 'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt' +@pytest.mark.skip("Takes too long") def test_run_nist_statistical_tests_tool(): if os.path.exists('test_reports/statistical_tests/experiments'): @@ -17,6 +18,7 @@ def test_run_nist_statistical_tests_tool(): assert result is True +@pytest.mark.skip("Takes too long") def test_parse_report(): dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) @@ -25,6 +27,7 @@ def test_parse_report(): assert dictio['randomness_test'][0]['test_id'] == 1 assert dictio['randomness_test'][0]['passed'] is False +@pytest.mark.skip("Takes too long") def test_generate_chart_round(): dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) @@ -42,6 +45,7 @@ def test_generate_chart_round(): assert result.getvalue() == \ 'Drawing round 1 is in progress.\n' \ 'Drawing round 1 is finished.\n' +@pytest.mark.skip("Takes too long") def test_generate_chart_all(): @@ -57,6 +61,7 @@ def test_generate_chart_all(): sys.stdout = result StatisticalTests.generate_chart_all(dict_list) sys.stdout = old_stdout +@pytest.mark.skip("Takes too long") def test_run_avalanche_nist_statistics_test(): @@ -68,6 +73,7 @@ def test_run_avalanche_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 +@pytest.mark.skip("Takes too long") def test_run_correlation_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) @@ -91,6 +97,8 @@ def test_run_CBC_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 +@pytest.mark.skip("Takes too long") + def test_run_random_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) old_stdout = sys.stdout @@ -100,6 +108,7 @@ def test_run_random_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 +@pytest.mark.skip("Takes too long") def test_run_low_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) @@ -110,6 +119,7 @@ def test_run_low_density_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 +@pytest.mark.skip("Takes too long") def test_run_high_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) From 8c1e959bd52203d01d36e6f718fed06146d4f558 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 6 Mar 2024 16:47:52 +0400 Subject: [PATCH 178/179] fixed report_show pytest --- tests/unit/cipher_modules/report_test.py | 13 ++++++++++--- .../nist_statistical_tests_test.py | 9 --------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/unit/cipher_modules/report_test.py b/tests/unit/cipher_modules/report_test.py index d130089f..325ab5c8 100644 --- a/tests/unit/cipher_modules/report_test.py +++ b/tests/unit/cipher_modules/report_test.py @@ -146,6 +146,13 @@ def test_show(): report_cca = Report(speck,component_analysis) report_cca.show() - neural_distinguisher_test = NeuralNetworkTests(speck).run_autond_pipeline() - report_autond = Report(speck,neural_distinguisher_test) - report_autond.show() \ No newline at end of file + + result = NeuralNetworkTests(speck).run_autond_pipeline(optimizer_samples=10 ** 3, optimizer_generations=1, + training_samples=10 ** 2, testing_samples=10 ** 2, + number_of_epochs=1, verbose=False) + report_autond = Report(speck,result) + report_autond.show() + + avalanche_results = AvalancheTests(speck).avalanche_tests() + avalanche_report = Report(speck,avalanche_results) + avalanche_report.show() \ No newline at end of file diff --git a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py index e85933e7..e75ad710 100644 --- a/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py +++ b/tests/unit/cipher_modules/statistical_tests/nist_statistical_tests_test.py @@ -7,7 +7,6 @@ REPORT_EXAMPLE_TXT = 'claasp/cipher_modules/statistical_tests/finalAnalysisReportExample.txt' -@pytest.mark.skip("Takes too long") def test_run_nist_statistical_tests_tool(): if os.path.exists('test_reports/statistical_tests/experiments'): @@ -18,7 +17,6 @@ def test_run_nist_statistical_tests_tool(): assert result is True -@pytest.mark.skip("Takes too long") def test_parse_report(): dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) @@ -27,7 +25,6 @@ def test_parse_report(): assert dictio['randomness_test'][0]['test_id'] == 1 assert dictio['randomness_test'][0]['passed'] is False -@pytest.mark.skip("Takes too long") def test_generate_chart_round(): dictio = StatisticalTests._parse_report(REPORT_EXAMPLE_TXT) @@ -45,7 +42,6 @@ def test_generate_chart_round(): assert result.getvalue() == \ 'Drawing round 1 is in progress.\n' \ 'Drawing round 1 is finished.\n' -@pytest.mark.skip("Takes too long") def test_generate_chart_all(): @@ -61,7 +57,6 @@ def test_generate_chart_all(): sys.stdout = result StatisticalTests.generate_chart_all(dict_list) sys.stdout = old_stdout -@pytest.mark.skip("Takes too long") def test_run_avalanche_nist_statistics_test(): @@ -73,7 +68,6 @@ def test_run_avalanche_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_correlation_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) @@ -97,7 +91,6 @@ def test_run_CBC_nist_statistics_test(): return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_random_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) @@ -108,7 +101,6 @@ def test_run_random_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_low_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) @@ -119,7 +111,6 @@ def test_run_low_density_nist_statistics_test(): sys.stdout = old_stdout return_str = result.getvalue() assert return_str.find('Finished.') == len(return_str) - 10 -@pytest.mark.skip("Takes too long") def test_run_high_density_nist_statistics_test(): tests = StatisticalTests(SimonBlockCipher(number_of_rounds=1)) From b8518896d7009b83de4638a91c6f7ea112b4f596 Mon Sep 17 00:00:00 2001 From: MFormenti Date: Wed, 6 Mar 2024 17:33:09 +0400 Subject: [PATCH 179/179] fixed report_show pytest --- .../{speedy_block_cipher.py => speedy_block_cipher_test.py} | 0 tests/unit/ciphers/permutations/salsa_permutation_test.py | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) rename tests/unit/ciphers/block_ciphers/{speedy_block_cipher.py => speedy_block_cipher_test.py} (100%) diff --git a/tests/unit/ciphers/block_ciphers/speedy_block_cipher.py b/tests/unit/ciphers/block_ciphers/speedy_block_cipher_test.py similarity index 100% rename from tests/unit/ciphers/block_ciphers/speedy_block_cipher.py rename to tests/unit/ciphers/block_ciphers/speedy_block_cipher_test.py diff --git a/tests/unit/ciphers/permutations/salsa_permutation_test.py b/tests/unit/ciphers/permutations/salsa_permutation_test.py index e1401f70..1ecf74dc 100644 --- a/tests/unit/ciphers/permutations/salsa_permutation_test.py +++ b/tests/unit/ciphers/permutations/salsa_permutation_test.py @@ -1,5 +1,8 @@ from claasp.ciphers.permutations.salsa_permutation import SalsaPermutation - +from claasp.ciphers.permutations.util import print_state_ids +def test_print_state_ids(): + salsa = SalsaPermutation(number_of_rounds=2) + print_state_ids(salsa.state_of_components) def test_salsa_permutation(): salsa = SalsaPermutation()