diff options
| author | J08nY | 2024-05-31 22:13:45 +0200 |
|---|---|---|
| committer | J08nY | 2024-05-31 22:13:45 +0200 |
| commit | e2bb0abbd98c7666b3604499272d1e40a8d3d7b7 (patch) | |
| tree | b5a584cd117dd151a3347f1f7c1b37c284ac0e56 /test/ec | |
| parent | ead235fdff08f1f84550a72f2d8cefd113577584 (diff) | |
| download | pyecsca-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.py | 36 |
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"), |
