aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/ec
diff options
context:
space:
mode:
authorvojtechsu2023-11-23 16:25:40 +0100
committerJ08nY2023-12-05 14:06:07 +0100
commita5357921252b540a49fed3d1b952a23e9b393b34 (patch)
treeef3398803253b2d9bc0bd84e02394c8b3fd899f9 /pyecsca/ec
parent08df28ff26b659c8fbc1de11b1201a4ea1711454 (diff)
downloadpyecsca-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.ipynb82
-rw-r--r--pyecsca/ec/formula_gen/test.py8
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")