aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJ08nY2024-07-12 14:39:29 +0200
committerJ08nY2024-07-12 14:39:29 +0200
commitee3f3db5008b982e7a1c12639dee0c9f98abddf5 (patch)
treeea58df9406365fad86e1fe47905b915971233bb3
parentbbef33efb9b37920e268124f443012cb85314a04 (diff)
downloadpyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.tar.gz
pyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.tar.zst
pyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.zip
Less subs in assumption validation.
-rw-r--r--pyecsca/ec/curve.py5
-rw-r--r--pyecsca/ec/formula/base.py11
2 files changed, 9 insertions, 7 deletions
diff --git a/pyecsca/ec/curve.py b/pyecsca/ec/curve.py
index fb3e763..f274683 100644
--- a/pyecsca/ec/curve.py
+++ b/pyecsca/ec/curve.py
@@ -119,8 +119,9 @@ class EllipticCurve:
assumption_string = unparse(assumption).strip()
lhs, rhs = assumption_string.split(" = ")
expr = sympify(f"{rhs} - {lhs}")
- for curve_param, value in self.parameters.items():
- expr = expr.subs(curve_param, value)
+ for symbol in expr.free_symbols:
+ if (value := self.parameters.get(str(symbol), None)) is not None:
+ expr = expr.subs(symbol, value)
if len(expr.free_symbols) > 0:
raise ValueError(
f"Missing necessary coordinate model parameter ({assumption_string})."
diff --git a/pyecsca/ec/formula/base.py b/pyecsca/ec/formula/base.py
index d4c5ec8..7e6c1ad 100644
--- a/pyecsca/ec/formula/base.py
+++ b/pyecsca/ec/formula/base.py
@@ -187,11 +187,12 @@ class Formula(ABC):
params[lhs] = SymbolicMod(expr, field)
else:
expr = sympify(f"{rhs} - {lhs}", evaluate=False)
- for curve_param, value in params.items():
- if isinstance(value, SymbolicMod):
- expr = expr.subs(curve_param, value.x)
- else:
- expr = expr.subs(curve_param, int(value))
+ for symbol in expr.free_symbols:
+ if (value := params.get(str(symbol), None)) is not None:
+ if isinstance(value, SymbolicMod):
+ expr = expr.subs(symbol, value.x)
+ else:
+ expr = expr.subs(symbol, int(value))
if (
len(expr.free_symbols) > 1
or (param := str(expr.free_symbols.pop())) not in self.parameters