aboutsummaryrefslogtreecommitdiff
path: root/test/sca/test_attacks.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/sca/test_attacks.py')
-rw-r--r--test/sca/test_attacks.py35
1 files changed, 25 insertions, 10 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