1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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)
|