diff options
| author | J08nY | 2024-07-12 14:39:29 +0200 |
|---|---|---|
| committer | J08nY | 2024-07-12 14:39:29 +0200 |
| commit | ee3f3db5008b982e7a1c12639dee0c9f98abddf5 (patch) | |
| tree | ea58df9406365fad86e1fe47905b915971233bb3 | |
| parent | bbef33efb9b37920e268124f443012cb85314a04 (diff) | |
| download | pyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.tar.gz pyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.tar.zst pyecsca-ee3f3db5008b982e7a1c12639dee0c9f98abddf5.zip | |
Less subs in assumption validation.
| -rw-r--r-- | pyecsca/ec/curve.py | 5 | ||||
| -rw-r--r-- | pyecsca/ec/formula/base.py | 11 |
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 |
