aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/codegen/render.py
diff options
context:
space:
mode:
authorJ08nY2025-10-02 21:39:58 +0200
committerJ08nY2025-10-02 21:39:58 +0200
commite09d15a667a5cc0285319c17ce6de806b9681d06 (patch)
treeb954ad1ff125769a7fb0c829f3bc370336d27a71 /pyecsca/codegen/render.py
parentd22476cf8135282214e596ed47e2746c7f403735 (diff)
downloadpyecsca-codegen-e09d15a667a5cc0285319c17ce6de806b9681d06.tar.gz
pyecsca-codegen-e09d15a667a5cc0285319c17ce6de806b9681d06.tar.zst
pyecsca-codegen-e09d15a667a5cc0285319c17ce6de806b9681d06.zip
Render (some) assumptions.
Does some progress towards #5.
Diffstat (limited to 'pyecsca/codegen/render.py')
-rw-r--r--pyecsca/codegen/render.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/pyecsca/codegen/render.py b/pyecsca/codegen/render.py
index 9bc01b1..aa5d4d2 100644
--- a/pyecsca/codegen/render.py
+++ b/pyecsca/codegen/render.py
@@ -43,6 +43,7 @@ from pyecsca.ec.mult import (
from pyecsca.ec.op import OpType, CodeOp
from pyecsca.codegen.common import Platform, DeviceConfiguration
+from pyecsca.misc.utils import pexec
env = Environment(loader=PackageLoader("pyecsca.codegen"))
@@ -300,8 +301,20 @@ def render_formula_impl(formula: Formula, short_circuit: bool = False) -> str:
var = output[0]
num = int(output[1:]) - formula.output_index
renames[output] = "{}->{}".format(outputs[num], var)
+ ops = []
+ for assumption_str in formula.assumptions_str:
+ lhs, rhs = assumption_str.split(" == ")
+ if lhs in formula.parameters:
+ try:
+ code = CodeOp(pexec(assumption_str.replace("==", "=").replace("^", "**")))
+ ops.append(code)
+ except Exception as e:
+ raise ValueError("Could not parse assumption: {}".format(assumption_str)) from e
+ else:
+ raise ValueError("WIP: assumption not supported: {}".format(assumption_str))
+ ops.extend(formula.code)
namespace = transform_ops(
- formula.code,
+ ops,
formula.coordinate_model.curve_model.parameter_names,
formula.outputs,
renames,