aboutsummaryrefslogtreecommitdiff
path: root/test/ec/test_countermeasures.py
diff options
context:
space:
mode:
authorJ08nY2025-03-10 18:13:21 +0100
committerJ08nY2025-03-10 18:13:21 +0100
commit65cf6216291214c1a62dfcd41cbe2ca47464bf46 (patch)
tree04a7eae9e1dd73e778ee672605e257492c437bfb /test/ec/test_countermeasures.py
parentd171c72d2983d0cdb77f0d83bc4c2f472701ddcc (diff)
downloadpyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.tar.gz
pyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.tar.zst
pyecsca-65cf6216291214c1a62dfcd41cbe2ca47464bf46.zip
Diffstat (limited to 'test/ec/test_countermeasures.py')
-rw-r--r--test/ec/test_countermeasures.py79
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