aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--pyecsca/ec/formula/expand.py2
-rw-r--r--pyecsca/ec/formula/fliparoo.py6
-rw-r--r--pyecsca/ec/formula/graph.py4
-rw-r--r--pyecsca/ec/formula/partitions.py12
-rw-r--r--pyecsca/ec/formula/switch_sign.py4
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