aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJ08nY2023-08-31 16:19:36 +0200
committerJ08nY2023-08-31 16:19:36 +0200
commit937a799a0b30e8b8ce907ec2dda36b2366ae1869 (patch)
treeaab75b7396db5ea24e9caeeefeedc8187c0c4fe3
parent013bba7e45705b6961183b62012a98287468e647 (diff)
downloadpyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.tar.gz
pyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.tar.zst
pyecsca-937a799a0b30e8b8ce907ec2dda36b2366ae1869.zip
Further ZVP precomp.
-rw-r--r--pyecsca/sca/re/zvp.py10
-rw-r--r--test/sca/perf_zvp.py2
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