aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sca
diff options
context:
space:
mode:
authorJ08nY2024-01-26 18:58:53 +0100
committerJ08nY2024-01-26 18:58:53 +0100
commit30cfd49b2b3a6a5180819a20d004b22e37e3fb77 (patch)
treeb343c13e52411e9d281c7b289415db8d390ff43c /test/sca
parentd3230129f0720e756b113f80ed77f652ad32b44e (diff)
downloadpyecsca-30cfd49b2b3a6a5180819a20d004b22e37e3fb77.tar.gz
pyecsca-30cfd49b2b3a6a5180819a20d004b22e37e3fb77.tar.zst
pyecsca-30cfd49b2b3a6a5180819a20d004b22e37e3fb77.zip
Add tests for DPA and CPA.
Diffstat (limited to 'test/sca')
-rw-r--r--test/sca/test_attacks.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/test/sca/test_attacks.py b/test/sca/test_attacks.py
new file mode 100644
index 0000000..e213ecf
--- /dev/null
+++ b/test/sca/test_attacks.py
@@ -0,0 +1,46 @@
+import pytest
+
+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
+
+
+@pytest.fixture()
+def mult(secp128r1):
+ return LTRMultiplier(
+ secp128r1.curve.coordinate_model.formulas["add-2015-rcb"],
+ secp128r1.curve.coordinate_model.formulas["dbl-2015-rcb"],
+ )
+
+
+@pytest.fixture()
+def target(secp128r1, mult):
+ target = LeakageTarget(
+ secp128r1.curve.model, secp128r1.curve.coordinate_model, mult, HammingWeight()
+ )
+ target.set_params(secp128r1)
+ return target
+
+
+def test_dpa(secp128r1, mult, target):
+ 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(500, scalar)
+ dpa = DPA(points, traces, mult, secp128r1)
+ res = dpa.perform(3, pub)
+ assert res == 5
+
+
+def test_cpa(secp128r1, mult, target):
+ 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