From 8b9bf1bcbc963b432bcd44c781b60a7267007d96 Mon Sep 17 00:00:00 2001 From: J08nY Date: Sat, 18 Oct 2025 21:21:27 +0200 Subject: Add point blinding countermeasure. --- test/ec/test_countermeasures.py | 30 +++++++++++++++++++++++++++++- test/sca/test_rpa.py | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) (limited to 'test') diff --git a/test/ec/test_countermeasures.py b/test/ec/test_countermeasures.py index 946261c..c3a6ee3 100644 --- a/test/ec/test_countermeasures.py +++ b/test/ec/test_countermeasures.py @@ -9,6 +9,7 @@ from pyecsca.ec.countermeasures import ( MultiplicativeSplitting, EuclideanSplitting, BrumleyTuveri, + PointBlinding, ) from pyecsca.ec.mod import mod from pyecsca.ec.mult import * @@ -246,6 +247,27 @@ def test_brumley_tuveri(mults, secp128r1, num): assert raw.equals(masked) +@pytest.mark.parametrize( + "num", + [ + 3253857902090173296443513219124437746, + 1234567893141592653589793238464338327, + ], +) +def test_point_blinding(mults, secp128r1, num): + mult = copy(mults[0]) + mult.init(secp128r1, secp128r1.generator) + raw = mult.multiply(num) + + neg = secp128r1.curve.coordinate_model.formulas["neg"] + + for mult in mults: + pb = PointBlinding(mult, mult, neg=neg) + pb.init(secp128r1, secp128r1.generator) + masked = pb.multiply(num) + assert raw.equals(masked) + + @pytest.mark.parametrize( "scalar", [ @@ -264,6 +286,7 @@ def test_brumley_tuveri(mults, secp128r1, num): MultiplicativeSplitting, EuclideanSplitting, BrumleyTuveri, + PointBlinding, ), repeat=2, ), @@ -279,15 +302,20 @@ def test_combination(scalar, one, two, secp128r1): mult.init(secp128r1, secp128r1.generator) raw = mult.multiply(scalar) - add = mult.formulas["add"] + add = secp128r1.curve.coordinate_model.formulas["add-2015-rcb"] + neg = secp128r1.curve.coordinate_model.formulas["neg"] if one in (AdditiveSplitting, EuclideanSplitting): layer_one = one.from_single(mult, add=add) + elif one == PointBlinding: + layer_one = one.from_single(mult, neg=neg) else: layer_one = one.from_single(mult) if two in (AdditiveSplitting, EuclideanSplitting): kws = {"add": add} + elif two == PointBlinding: + kws = {"neg": neg} else: kws = {} diff --git a/test/sca/test_rpa.py b/test/sca/test_rpa.py index 01293af..e92ec44 100644 --- a/test/sca/test_rpa.py +++ b/test/sca/test_rpa.py @@ -153,7 +153,7 @@ def test_multiples_kind(rpa_params): def test_multiples_additive(rpa_params): - mults = multiples_computed(1454656138887897564, rpa_params, LTRMultiplier, lambda *args, **kwargs: AdditiveSplitting(LTRMultiplier(*args, **kwargs)), True, True, kind="precomp+necessary") + mults = multiples_computed(1454656138887897564, rpa_params, LTRMultiplier, lambda *args, **kwargs: AdditiveSplitting.from_single(LTRMultiplier(*args, **kwargs)), True, True, kind="precomp+necessary") assert mults is not None -- cgit v1.2.3-70-g09d2