diff options
| author | J08nY | 2025-03-10 18:13:21 +0100 |
|---|---|---|
| committer | J08nY | 2025-03-10 18:13:21 +0100 |
| commit | 65cf6216291214c1a62dfcd41cbe2ca47464bf46 (patch) | |
| tree | 04a7eae9e1dd73e778ee672605e257492c437bfb /test/ec | |
| parent | d171c72d2983d0cdb77f0d83bc4c2f472701ddcc (diff) | |
| download | pyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.tar.gz pyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.tar.zst pyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.zip | |
Diffstat (limited to 'test/ec')
| -rw-r--r-- | test/ec/test_countermeasures.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/test/ec/test_countermeasures.py b/test/ec/test_countermeasures.py new file mode 100644 index 0000000..35ac5e8 --- /dev/null +++ b/test/ec/test_countermeasures.py @@ -0,0 +1,79 @@ +import pytest + +from pyecsca.ec.mult import LTRMultiplier +from pyecsca.ec.countermeasures import GroupScalarRandomization, AdditiveSplitting, MultiplicativeSplitting, \ + EuclideanSplitting + + +@pytest.fixture(params=["add-1998-cmo-2", "add-2015-rcb"]) +def add(secp128r1, request): + return secp128r1.curve.coordinate_model.formulas[request.param] + + +@pytest.fixture(params=["dbl-1998-cmo-2", "dbl-2015-rcb"]) +def dbl(secp128r1, request): + return secp128r1.curve.coordinate_model.formulas[request.param] + +@pytest.fixture() +def mult(secp128r1, add, dbl): + return LTRMultiplier(add, dbl, complete=False) + +@pytest.mark.parametrize( + "num", [325385790209017329644351321912443757746, + 123456789314159265358979323846264338327, + 987654321314159265358979323846264338327, + 786877845665557891354654531354008066400] +) +def test_group_scalar_rand(mult, secp128r1, num): + mult.init(secp128r1, secp128r1.generator) + raw = mult.multiply(num) + + gsr = GroupScalarRandomization(mult) + gsr.init(secp128r1, secp128r1.generator) + masked = gsr.multiply(num) + assert raw.equals(masked) + +@pytest.mark.parametrize( + "num", [325385790209017329644351321912443757746, + 123456789314159265358979323846264338327, + 987654321314159265358979323846264338327, + 786877845665557891354654531354008066400] +) +def test_additive_splitting(mult, secp128r1, num): + mult.init(secp128r1, secp128r1.generator) + raw = mult.multiply(num) + + asplit = AdditiveSplitting(mult) + asplit.init(secp128r1, secp128r1.generator) + masked = asplit.multiply(num) + assert raw.equals(masked) + +@pytest.mark.parametrize( + "num", [325385790209017329644351321912443757746, + 123456789314159265358979323846264338327, + 987654321314159265358979323846264338327, + 786877845665557891354654531354008066400] +) +def test_multiplicative_splitting(mult, secp128r1, num): + mult.init(secp128r1, secp128r1.generator) + raw = mult.multiply(num) + + msplit = MultiplicativeSplitting(mult) + msplit.init(secp128r1, secp128r1.generator) + masked = msplit.multiply(num) + assert raw.equals(masked) + +@pytest.mark.parametrize( + "num", [325385790209017329644351321912443757746, + 123456789314159265358979323846264338327, + 987654321314159265358979323846264338327, + 786877845665557891354654531354008066400] +) +def test_euclidean_splitting(mult, secp128r1, num): + mult.init(secp128r1, secp128r1.generator) + raw = mult.multiply(num) + + esplit = EuclideanSplitting(mult) + esplit.init(secp128r1, secp128r1.generator) + masked = esplit.multiply(num) + assert raw.equals(masked)
\ No newline at end of file |
