aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/ec
diff options
context:
space:
mode:
authorJ08nY2024-05-31 22:13:45 +0200
committerJ08nY2024-05-31 22:13:45 +0200
commite2bb0abbd98c7666b3604499272d1e40a8d3d7b7 (patch)
treeb5a584cd117dd151a3347f1f7c1b37c284ac0e56 /test/ec
parentead235fdff08f1f84550a72f2d8cefd113577584 (diff)
downloadpyecsca-e2bb0abbd98c7666b3604499272d1e40a8d3d7b7.tar.gz
pyecsca-e2bb0abbd98c7666b3604499272d1e40a8d3d7b7.tar.zst
pyecsca-e2bb0abbd98c7666b3604499272d1e40a8d3d7b7.zip
Add Ladder sort-of regression test.
Diffstat (limited to 'test/ec')
-rw-r--r--test/ec/test_mult.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/ec/test_mult.py b/test/ec/test_mult.py
index d5e3146..fb10b13 100644
--- a/test/ec/test_mult.py
+++ b/test/ec/test_mult.py
@@ -3,6 +3,7 @@ from typing import Sequence
import pytest
+from pyecsca.ec.mod import Mod
from pyecsca.ec.mult import (
DoubleAndAddMultiplier,
LTRMultiplier,
@@ -179,6 +180,41 @@ def test_ladder(curve25519):
@pytest.mark.parametrize(
+ "scalar,x,res",
+ [
+ (
+ 29893438142586401087946310744922998080771935139441267052026283852717044358472,
+ 48084050389777770101701157326923977117307187144965043058462938058489685090437,
+ 40694087602335028385342029955981451169449898924211721351135404099078471497195,
+ )
+ ],
+)
+def test_ladder_full(curve25519, scalar, x, res):
+ p = curve25519.curve.prime
+ point = Point(curve25519.curve.coordinate_model, X=Mod(x, p), Z=Mod(1, p))
+ result = Point(curve25519.curve.coordinate_model, X=Mod(res, p), Z=Mod(1, p))
+
+ mult = LadderMultiplier(
+ curve25519.curve.coordinate_model.formulas["ladd-1987-m"],
+ curve25519.curve.coordinate_model.formulas["dbl-1987-m"],
+ # complete=False
+ )
+ fixed = int(Mod(scalar, curve25519.order))
+
+ mult.init(curve25519, point)
+ computed = mult.multiply(fixed)
+
+ point_aff = list(curve25519.curve.affine_lift_x(Mod(x, p)))[0]
+ result_aff = list(curve25519.curve.affine_lift_x(Mod(res, p)))[0]
+ computed_aff = curve25519.curve.affine_multiply(point_aff, scalar)
+
+ scale = curve25519.curve.coordinate_model.formulas["scale"]
+ converted = scale(p, computed, **curve25519.curve.parameters)[0]
+ assert computed_aff.x == result_aff.x
+ assert converted.X == result.X
+
+
+@pytest.mark.parametrize(
"add,dbl,scale",
[
("add-1998-cmo-2", "dbl-1998-cmo-2", "z"),