diff options
| author | J08nY | 2024-01-26 18:58:53 +0100 |
|---|---|---|
| committer | J08nY | 2024-01-26 18:58:53 +0100 |
| commit | 30cfd49b2b3a6a5180819a20d004b22e37e3fb77 (patch) | |
| tree | b343c13e52411e9d281c7b289415db8d390ff43c /test/sca | |
| parent | d3230129f0720e756b113f80ed77f652ad32b44e (diff) | |
| download | pyecsca-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.py | 46 |
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 |
