diff options
| author | vojtechsu | 2023-11-23 16:25:40 +0100 |
|---|---|---|
| committer | J08nY | 2023-12-05 14:06:07 +0100 |
| commit | a5357921252b540a49fed3d1b952a23e9b393b34 (patch) | |
| tree | ef3398803253b2d9bc0bd84e02394c8b3fd899f9 /pyecsca/ec | |
| parent | 08df28ff26b659c8fbc1de11b1201a4ea1711454 (diff) | |
| download | pyecsca-a5357921252b540a49fed3d1b952a23e9b393b34.tar.gz pyecsca-a5357921252b540a49fed3d1b952a23e9b393b34.tar.zst pyecsca-a5357921252b540a49fed3d1b952a23e9b393b34.zip | |
Update tests
Diffstat (limited to 'pyecsca/ec')
| -rw-r--r-- | pyecsca/ec/formula_gen/formula_playground.ipynb | 82 | ||||
| -rw-r--r-- | pyecsca/ec/formula_gen/test.py | 8 |
2 files changed, 33 insertions, 57 deletions
diff --git a/pyecsca/ec/formula_gen/formula_playground.ipynb b/pyecsca/ec/formula_gen/formula_playground.ipynb index e84f139..9c406ca 100644 --- a/pyecsca/ec/formula_gen/formula_playground.ipynb +++ b/pyecsca/ec/formula_gen/formula_playground.ipynb @@ -8,7 +8,7 @@ "source": [ "from pyecsca.ec.model import ShortWeierstrassModel, MontgomeryModel, TwistedEdwardsModel\n", "from pyecsca.ec.formula_gen.test import load_efd_formulas, load_library_formulas\n", - "from pyecsca.ec.formula_gen.formula_graph import EFDFormulaGraph\n", + "from pyecsca.ec.formula_gen.formula_graph import EFDFormulaGraph, rename_ivs\n", "from pyecsca.ec.formula_gen.fliparoo import generate_fliparood_formulas, greedy_fliparoo, recursive_fliparoo\n", "import pyecsca.ec.formula_gen.metrics as metrics\n", "from pyecsca.ec.formula_gen.switch_sign import generate_switched_formulas\n", @@ -21,9 +21,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Draw formula\n", + "\"\"\" Draw formula \"\"\"\n", "coordinate_name = \"jacobian\"\n", - "model = ShortWeierstrassModel()\n", + "model = ShortWeierstrassModel\n", "name = \"add-1998-cmo-2\"\n", "formula = load_efd_formulas(coordinate_name,model)[name]\n", "graph = EFDFormulaGraph()\n", @@ -37,9 +37,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Draw all formulas\n", + "\"\"\" Draw all formulas \"\"\"\n", "coordinate_name = \"jacobian\"\n", - "model = ShortWeierstrassModel()\n", + "model = ShortWeierstrassModel\n", "for name, formula in load_efd_formulas(coordinate_name,model).items():\n", " graph = EFDFormulaGraph()\n", " graph.construct_graph(formula)\n", @@ -52,12 +52,12 @@ "metadata": {}, "outputs": [], "source": [ - "# Measure similarity of fliparood formulas\n", + "\"\"\"Measure similarity of fliparood formulas \"\"\"\n", "coordinate_name = \"jacobian\"\n", - "model = ShortWeierstrassModel()\n", + "model = ShortWeierstrassModel\n", "name = \"add-1998-cmo-2\"\n", "formula = load_efd_formulas(coordinate_name,model)[name]\n", - "for fliparood in generate_fliparood_formulas(formula):\n", + "for _,fliparood in generate_fliparood_formulas(formula):\n", " print(metrics.formula_similarity(formula,fliparood))" ] }, @@ -67,9 +67,9 @@ "metadata": {}, "outputs": [], "source": [ - "# Greedy fliparoo to connect two formulas\n", - "coordinate_name = \"jacobian\"\n", - "model = ShortWeierstrassModel()\n", + "\"\"\"Greedy fliparoo to connect two formulas \"\"\"\n", + "coordinate_name = \"jacobian-3\"\n", + "model = ShortWeierstrassModel\n", "name = \"add-1998-cmo-2\"\n", "formula = load_efd_formulas(coordinate_name,model)[name]\n", "lib_formula = load_library_formulas()[\"add-openssl-z256\"]\n", @@ -84,11 +84,11 @@ "metadata": {}, "outputs": [], "source": [ - "# Generate all fliparoos for all library formulas\n", + "\"\"\" Generate all fliparoos for efd formulas \"\"\"\n", "depth = 2\n", "fliparood = {}\n", - "libs = load_library_formulas()\n", - "for name, formula in tqdm(libs.items()):\n", + "efd = load_efd_formulas(\"projective\",ShortWeierstrassModel)\n", + "for name, formula in tqdm(efd.items()):\n", " fliparood[name] = recursive_fliparoo(formula,depth)\n" ] }, @@ -98,31 +98,12 @@ "metadata": {}, "outputs": [], "source": [ - "\"\"\" Connect the generated formulas to efd \"\"\"\n", - "neighborhoods = fliparood \n", - "for name,formulas in fliparood.items():\n", - " coordinates, model = libs[name].coordinate_model.name, libs[name].coordinate_model.curve_model\n", - " similarities = {}\n", - " for efd_name, efd_formula in load_efd_formulas(coordinates, model.__class__).items():\n", - " metric = lambda x: metrics.formula_similarity(x,efd_formula)[\"ivs\"]\n", - " flips, closest_fliparoo = max(formulas, key = lambda x: metric(x[1]))\n", - " similarities[efd_name] = flips, metric(closest_fliparoo)\n", - " closest_efd, (flips, sim) = max(similarities.items(), key = lambda x: x[1][1])\n", - " print(f\"{name}. Closest match: {closest_efd}, flips={flips}, similarity={sim}\")\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ + "\"\"\" Generate all switch-signed formulas for fliparoos formulas \"\"\"\n", "switch_signed = {}\n", "for name, fliparoo_neighborhood in tqdm(fliparood.items()):\n", - " neighb = list()\n", - " for flips,flip_f in fliparoo_neighborhood:\n", - " neighb.extend(generate_switched_formulas(flip_f))\n", - " switch_signed[name] = neighb" + " switch_signed[name] = list()\n", + " for chains,flip_f in fliparoo_neighborhood:\n", + " switch_signed[name].extend((chains,s,f) for s,f in generate_switched_formulas(flip_f))" ] }, { @@ -131,25 +112,18 @@ "metadata": {}, "outputs": [], "source": [ - "\"\"\" Connect the generated formulas to efd \"\"\"\n", - "neighborhoods = switch_signed \n", - "for name,formulas in tqdm(switch_signed.items()):\n", - " coordinates, model = libs[name].coordinate_model.name, libs[name].coordinate_model.curve_model\n", + "\"\"\" Match library formulas for the expanded efd formulas\"\"\"\n", + "expanded_efd = sum(map(list,switch_signed.values()),[]) \n", + "coordinates = \"projective\"\n", + "library_formulas = load_library_formulas(coordinates)\n", + "\n", + "for name,formula in tqdm(library_formulas.items()):\n", " similarities = {}\n", - " for efd_name, efd_formula in load_efd_formulas(coordinates, model.__class__).items():\n", - " metric = lambda x: metrics.formula_similarity(x,efd_formula)[\"ivs\"]\n", - " closest_switch_signed = max(formulas, key = metric)\n", - " similarities[efd_name] = metric(closest_switch_signed)\n", - " closest_efd, sim = max(similarities.items(), key = lambda x: x[1])\n", - " print(f\"{name}. Closest match: {closest_efd}, similarity={sim}\")" + " metric = lambda x: metrics.formula_similarity(x[2],formula)[\"ivs\"]\n", + " chains, switch, closest_efd = max(expanded_efd,key = metric)\n", + " similarity = metric(closest_efd)\n", + " print(f\"{name}. Closest match: {closest_efd.name}, similarity={similarity}, fliparoos={len(chains)}, switches={len(switch)}\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/pyecsca/ec/formula_gen/test.py b/pyecsca/ec/formula_gen/test.py index c5dda21..b9a79d7 100644 --- a/pyecsca/ec/formula_gen/test.py +++ b/pyecsca/ec/formula_gen/test.py @@ -27,12 +27,12 @@ def main(): def test_switch_sign(formula, library=False): - for switch_formula in generate_switched_formulas(formula): + for _, switch_formula in generate_switched_formulas(formula): test_formula(switch_formula, library) def test_fliparood_formula(formula, library=False): - for fliparood in generate_fliparood_formulas(formula): + for _,fliparood in generate_fliparood_formulas(formula): test_formula(fliparood, library) @@ -110,9 +110,11 @@ def load_efd_formulas(coordinate_name, model): from pathlib import Path -def load_library_formulas(): +def load_library_formulas(coordinates=None): libs_dict = {} for name, model, coords, _, formula_type in LIBRARY_FORMULAS: + if coordinates is not None and coordinates!=coords: + continue model = model() coordinate_model = model.coordinates[coords] lib_path = Path("../../../test/data/formulas") |
