diff options
| author | J08nY | 2024-01-31 14:50:03 +0100 |
|---|---|---|
| committer | J08nY | 2024-01-31 14:50:03 +0100 |
| commit | a47984dfe36f4ea4b91ee8a7825824d2bbdd9e13 (patch) | |
| tree | 3515c82f6a00cec3ba033f6edf069298a85deb86 | |
| parent | 5ecdcd1f6e3cfdab4780e1127a1f20ada032d891 (diff) | |
| download | pyecsca-a47984dfe36f4ea4b91ee8a7825824d2bbdd9e13.tar.gz pyecsca-a47984dfe36f4ea4b91ee8a7825824d2bbdd9e13.tar.zst pyecsca-a47984dfe36f4ea4b91ee8a7825824d2bbdd9e13.zip | |
Name expanded formulas based on transformations.
| -rw-r--r-- | pyecsca/ec/formula/expand.py | 2 | ||||
| -rw-r--r-- | pyecsca/ec/formula/fliparoo.py | 6 | ||||
| -rw-r--r-- | pyecsca/ec/formula/graph.py | 4 | ||||
| -rw-r--r-- | pyecsca/ec/formula/partitions.py | 12 | ||||
| -rw-r--r-- | pyecsca/ec/formula/switch_sign.py | 4 |
5 files changed, 15 insertions, 13 deletions
diff --git a/pyecsca/ec/formula/expand.py b/pyecsca/ec/formula/expand.py index bd8b236..a0c5427 100644 --- a/pyecsca/ec/formula/expand.py +++ b/pyecsca/ec/formula/expand.py @@ -9,7 +9,7 @@ from .partitions import reduce_all_adds, expand_all_muls, expand_all_nopower2_mu from .switch_sign import generate_switched_formulas -def reduce_with_similarity(formulas: List[Formula], norm): +def reduce_with_similarity(formulas: List[Formula], norm: Callable[[Formula], Any]) -> List[Formula]: efd = list(filter(lambda x: isinstance(x, EFDFormula), formulas)) reduced_efd = efd similarities = list(map(norm, efd)) diff --git a/pyecsca/ec/formula/fliparoo.py b/pyecsca/ec/formula/fliparoo.py index beddb9d..51bc940 100644 --- a/pyecsca/ec/formula/fliparoo.py +++ b/pyecsca/ec/formula/fliparoo.py @@ -238,9 +238,9 @@ def generate_fliparood_formulas( ) -> Iterator[CodeFormula]: graph = FormulaGraph(formula, rename) fliparoos = find_fliparoos(graph) - for fliparoo in fliparoos: - for flip_graph in generate_fliparood_graphs(fliparoo): - yield flip_graph.to_formula() + for i, fliparoo in enumerate(fliparoos): + for j, flip_graph in enumerate(generate_fliparood_graphs(fliparoo)): + yield flip_graph.to_formula(f"fliparoo[{i},{j}]") def generate_fliparood_graphs(fliparoo: Fliparoo) -> Iterator[FormulaGraph]: diff --git a/pyecsca/ec/formula/graph.py b/pyecsca/ec/formula/graph.py index 3520b6a..c335635 100644 --- a/pyecsca/ec/formula/graph.py +++ b/pyecsca/ec/formula/graph.py @@ -199,6 +199,7 @@ def formula_input_variables(formula: Formula) -> List[str]: class FormulaGraph: coordinate_model: Any + name: str shortname: str parameters: List[str] assumptions: List[Expression] @@ -208,6 +209,7 @@ class FormulaGraph: roots: List[Node] def __init__(self, formula: Formula, rename=True): + self.name = formula.name self.shortname = formula.shortname self.parameters = formula.parameters self.assumptions = formula.assumptions @@ -264,7 +266,7 @@ class FormulaGraph: assumptions = [deepcopy(assumption) for assumption in self.assumptions] for klass in CodeFormula.__subclasses__(): if klass.shortname == self.shortname: - return klass(name, code, self.coordinate_model, parameters, assumptions) + return klass(self.name if name is None else self.name + "-" + name, code, self.coordinate_model, parameters, assumptions) raise ValueError(f"Bad formula type: {self.shortname}") def networkx_graph(self) -> nx.DiGraph: diff --git a/pyecsca/ec/formula/partitions.py b/pyecsca/ec/formula/partitions.py index 50e0e6d..d31519f 100644 --- a/pyecsca/ec/formula/partitions.py +++ b/pyecsca/ec/formula/partitions.py @@ -16,7 +16,7 @@ def reduce_all_adds(formula: Formula, rename=True) -> CodeFormula: mul_fliparoos = find_constant_mul_fliparoos(graph) for mul_fliparoo in mul_fliparoos: reduce_mul_fliparoo(mul_fliparoo, copy=False) - return graph.to_formula() + return graph.to_formula("reduce_add") def expand_all_muls(formula: Formula, rename=True) -> CodeFormula: @@ -24,7 +24,7 @@ def expand_all_muls(formula: Formula, rename=True) -> CodeFormula: enodes = find_expansion_nodes(graph) for enode in enodes: expand_mul(graph, enode, copy=False) - return graph.to_formula() + return graph.to_formula("expand_mul") def expand_all_nopower2_muls(formula: Formula, rename=True) -> CodeFormula: @@ -32,7 +32,7 @@ def expand_all_nopower2_muls(formula: Formula, rename=True) -> CodeFormula: enodes = find_expansion_nodes(graph, nopower2=True) for enode in enodes: expand_mul(graph, enode, copy=False) - return graph.to_formula() + return graph.to_formula("expand_np2mul") def find_single_input_add_fliparoos(graph: FormulaGraph) -> List[AddFliparoo]: @@ -275,9 +275,9 @@ def compute_partitions(n: int) -> List[Partition]: def generate_partitioned_formulas(formula: Formula, rename=True): graph = FormulaGraph(formula, rename) enodes = find_expansion_nodes(graph) - for enode in enodes: - for part_graph in generate_all_node_partitions(graph, enode): - yield part_graph.to_formula() + for i, enode in enumerate(enodes): + for j, part_graph in enumerate(generate_all_node_partitions(graph, enode)): + yield part_graph.to_formula(f"partition[{i},{j}]") def generate_all_node_partitions( diff --git a/pyecsca/ec/formula/switch_sign.py b/pyecsca/ec/formula/switch_sign.py index 5a52ebc..f8f5f17 100644 --- a/pyecsca/ec/formula/switch_sign.py +++ b/pyecsca/ec/formula/switch_sign.py @@ -12,9 +12,9 @@ def generate_switched_formulas( formula: Formula, rename=True ) -> Iterator[CodeFormula]: graph = FormulaGraph(formula, rename) - for node_combination in subnode_lists(graph): + for i, node_combination in enumerate(subnode_lists(graph)): try: - yield switch_sign(graph, node_combination).to_formula() + yield switch_sign(graph, node_combination).to_formula(f"switch[{i}]") except BadSignSwitch: continue |
