diff options
| author | vojtechsu | 2023-11-23 16:23:02 +0100 |
|---|---|---|
| committer | J08nY | 2023-12-05 14:06:07 +0100 |
| commit | 94073d82238cacbaa41ee9dcb9d8201fa69e569a (patch) | |
| tree | 05a44e3140f503606d829c7700230a128569e2f4 | |
| parent | e4d1106a9e633467ce39ce0c7d0591ad431beeb8 (diff) | |
| download | pyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.tar.gz pyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.tar.zst pyecsca-94073d82238cacbaa41ee9dcb9d8201fa69e569a.zip | |
Change fliparoo generation to return chains
| -rw-r--r-- | pyecsca/ec/formula_gen/fliparoo.py | 23 |
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 |
