aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorvojtechsu2023-11-23 16:23:02 +0100
committerJ08nY2023-12-05 14:06:07 +0100
commit94073d82238cacbaa41ee9dcb9d8201fa69e569a (patch)
tree05a44e3140f503606d829c7700230a128569e2f4
parente4d1106a9e633467ce39ce0c7d0591ad431beeb8 (diff)
downloadpyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.tar.gz
pyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.tar.zst
pyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.zip
Change fliparoo generation to return chains
-rw-r--r--pyecsca/ec/formula_gen/fliparoo.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/pyecsca/ec/formula_gen/fliparoo.py b/pyecsca/ec/formula_gen/fliparoo.py
index 1a737c8..e9c4055 100644
--- a/pyecsca/ec/formula_gen/fliparoo.py
+++ b/pyecsca/ec/formula_gen/fliparoo.py
@@ -13,7 +13,7 @@ def greedy_fliparoo(formula, metric):
before_fliparoo_state = metric(before_fliparoo)
max_fliparood = before_fliparoo
max_fliparood_state = before_fliparoo_state
- for fliparood in generate_fliparood_formulas(before_fliparoo):
+ for _,fliparood in generate_fliparood_formulas(before_fliparoo):
after_fliparoo_state = metric(fliparood)
if after_fliparoo_state > max_fliparood_state:
max_fliparood = fliparood
@@ -36,33 +36,34 @@ def brute_force_fliparoo(formula, metric, depth):
def recursive_fliparoo(formula, depth=3):
- all_fliparoos = [(0, formula)]
+ all_fliparoos = [([], formula)]
counter = 0
while depth > counter:
counter += 1
flips = []
- for _, fliped_formula in all_fliparoos:
- for fliparood in generate_fliparood_formulas(fliped_formula):
- flips.append((counter, fliparood))
+ for chains, fliped_formula in all_fliparoos:
+ rename = counter==1 # rename ivs before first fliparoo
+ for chain,fliparood in generate_fliparood_formulas(fliped_formula, rename):
+ flips.append((chains+[chain], fliparood))
all_fliparoos.extend(flips)
return all_fliparoos
-def generate_fliparood_formulas(formula):
+def generate_fliparood_formulas(formula, rename = True):
Gr = EFDFormulaGraph()
- Gr.construct_graph(formula)
+ Gr.construct_graph(formula, rename)
chains = find_fliparoo_chains(Gr)
for chain in generate_subchains(chains):
if chain[0].is_mul:
- yield make_fliparoo(Gr, chain, 0).to_EFDFormula()
- yield make_fliparoo(Gr, chain, 1).to_EFDFormula()
+ yield chain, make_fliparoo(Gr, chain, 0).to_EFDFormula()
+ yield tuple(reversed(chain)), make_fliparoo(Gr, chain, 1).to_EFDFormula()
if chain[0].is_add or chain[0].is_sub:
try:
- yield make_fliparoo_sub(Gr, chain, 0).to_EFDFormula()
+ yield chain, make_fliparoo_sub(Gr, chain, 0).to_EFDFormula()
except BadFliparoo:
pass
try:
- yield make_fliparoo_sub(Gr, chain, 1).to_EFDFormula()
+ yield tuple(reversed(chain)), make_fliparoo_sub(Gr, chain, 1).to_EFDFormula()
except BadFliparoo:
pass