aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/sca/test_attacks.py35
-rw-r--r--test/sca/test_zvp.py4
2 files changed, 27 insertions, 12 deletions
diff --git a/test/sca/test_attacks.py b/test/sca/test_attacks.py
index 8b9974b..b147dfe 100644
--- a/test/sca/test_attacks.py
+++ b/test/sca/test_attacks.py
@@ -1,10 +1,11 @@
import pytest
+import random
from pyecsca.ec.mult import LTRMultiplier
from pyecsca.sca.attack.DPA import DPA
from pyecsca.sca.attack.CPA import CPA
from pyecsca.sca.target import LeakageTarget
-from pyecsca.sca.attack import HammingWeight
+from pyecsca.sca.attack.leakage_model import HammingWeight, NormalNoice
@pytest.fixture()
@@ -24,25 +25,39 @@ def target(secp128r1, mult):
return target
-@pytest.mark.xfail(reason="May fail intermittently.")
-def test_dpa(secp128r1, mult, target):
+def test_dpa(secp128r1, mult, target, mocker):
+ random.seed(1337)
+
+ def randbelow(n):
+ return random.randrange(n)
+
+ mocker.patch("secrets.randbelow", randbelow)
scalar = 5
pub = secp128r1.curve.affine_multiply(
secp128r1.generator.to_affine(), scalar
).to_model(secp128r1.curve.coordinate_model, secp128r1.curve)
- points, traces = target.simulate_scalar_mult_traces(700, scalar)
+ points, traces = target.simulate_scalar_mult_traces(200, scalar)
dpa = DPA(points, traces, mult, secp128r1)
res = dpa.perform(3, pub)
assert res == 5
-@pytest.mark.xfail(reason="May fail intermittently.")
-def test_cpa(secp128r1, mult, target):
+def test_cpa(secp128r1, mult, target, mocker):
+ random.seed(1337)
+
+ def randbelow(n):
+ return random.randrange(n)
+
+ mocker.patch("secrets.randbelow", randbelow)
scalar = 5
pub = secp128r1.curve.affine_multiply(
secp128r1.generator.to_affine(), scalar
).to_model(secp128r1.curve.coordinate_model, secp128r1.curve)
- points, traces = target.simulate_scalar_mult_traces(100, scalar)
- cpa = CPA(points, traces, HammingWeight(), mult, secp128r1)
- res = cpa.perform(3, pub)
- assert res == 5
+ points, original_traces = target.simulate_scalar_mult_traces(100, scalar)
+
+ for _ in range(5):
+ noise = NormalNoice(0, 2)
+ traces = [noise(trace) for trace in original_traces]
+ cpa = CPA(points, traces, HammingWeight(), mult, secp128r1)
+ res = cpa.perform(3, pub)
+ assert res == 5
diff --git a/test/sca/test_zvp.py b/test/sca/test_zvp.py
index eaf1686..51b0327 100644
--- a/test/sca/test_zvp.py
+++ b/test/sca/test_zvp.py
@@ -126,7 +126,7 @@ def test_eliminate_y(secp128r1, formula):
unrolled = unroll_formula(formula)
unrolled = map_to_affine(formula, unrolled)
subbed = subs_curve_equation(unrolled[-1][1], secp128r1.curve)
- eliminated = eliminate_y(subbed, secp128r1.curve)
+ eliminated = eliminate_y(subbed, secp128r1.curve.model)
assert eliminated is not None
assert isinstance(eliminated, Poly)
y1, y2 = symbols("y1,y2")
@@ -140,7 +140,7 @@ def test_full(secp128r1, formula):
unrolled = map_to_affine(formula, unrolled)
subbed = subs_curve_equation(unrolled[-1][1], secp128r1.curve)
removed = remove_z(subbed)
- eliminated = eliminate_y(removed, secp128r1.curve)
+ eliminated = eliminate_y(removed, secp128r1.curve.model)
dlog = subs_dlog(eliminated, 3, secp128r1.curve)
assert dlog is not None
assert isinstance(dlog, Poly)