diff options
| author | J08nY | 2023-08-31 16:19:36 +0200 |
|---|---|---|
| committer | J08nY | 2023-08-31 16:19:36 +0200 |
| commit | 937a799a0b30e8b8ce907ec2dda36b2366ae1869 (patch) | |
| tree | aab75b7396db5ea24e9caeeefeedc8187c0c4fe3 | |
| parent | 013bba7e45705b6961183b62012a98287468e647 (diff) | |
| download | pyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.tar.gz pyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.tar.zst pyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.zip | |
Further ZVP precomp.
| -rw-r--r-- | pyecsca/sca/re/zvp.py | 10 | ||||
| -rw-r--r-- | test/sca/perf_zvp.py | 2 |
2 files changed, 8 insertions, 4 deletions
diff --git a/pyecsca/sca/re/zvp.py b/pyecsca/sca/re/zvp.py index 93aab6f..892b0a8 100644 --- a/pyecsca/sca/re/zvp.py +++ b/pyecsca/sca/re/zvp.py @@ -154,16 +154,20 @@ def subs_dlog(poly: Poly, k: int, curve: EllipticCurve): u_powers.append(u_powers[i - 1] * u) v_powers.append(v_powers[i - 1] * v) + uv_factors = {} + for term in poly.terms(): + u_power = term[0][X2i] + v_power = max_degree - u_power + uv_factors[(u_power, v_power)] = u_powers[u_power] * v_powers[v_power] + res = 0 for term in poly.terms(): powers = list(term[0]) u_power = powers[X2i] - u_factor = u_powers[u_power] v_power = max_degree - u_power - v_factor = v_powers[v_power] powers[X2i] = 0 monom = Monomial(powers, gens).as_expr() * term[1] - res += Poly(monom, *new_gens, domain=poly.domain) * u_factor * v_factor + res += Poly(monom, *new_gens, domain=poly.domain) * uv_factors[(u_power, v_power)] return Poly(res, domain=poly.domain) diff --git a/test/sca/perf_zvp.py b/test/sca/perf_zvp.py index 09491cb..770863e 100644 --- a/test/sca/perf_zvp.py +++ b/test/sca/perf_zvp.py @@ -29,7 +29,7 @@ def main(profiler, mod, operations, directory): cfg.ec.mod_implementation = mod p128 = get_params("secg", "secp128r1", "projective") formula = p128.curve.coordinate_model.formulas["add-2016-rcb"] - unrolled = unroll_formula(formula, p128.curve.prime) + unrolled = unroll_formula(formula) poly = unrolled[7] k = 5 |
