diff options
| author | J08nY | 2023-02-21 09:46:14 +0100 |
|---|---|---|
| committer | J08nY | 2023-07-24 14:35:50 +0200 |
| commit | 321d08429f0169a10ab8e8cdff54f8adb5d5639e (patch) | |
| tree | 874f2db11a70e902506ab20199d901ef13c6aee0 /test | |
| parent | f5aaa6e0456628c4384ef498235549cc789ef9ca (diff) | |
| download | pyecsca-321d08429f0169a10ab8e8cdff54f8adb5d5639e.tar.gz pyecsca-321d08429f0169a10ab8e8cdff54f8adb5d5639e.tar.zst pyecsca-321d08429f0169a10ab8e8cdff54f8adb5d5639e.zip | |
Process OpResults better.
Diffstat (limited to 'test')
| -rw-r--r-- | test/sca/test_leakage_models.py | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/test/sca/test_leakage_models.py b/test/sca/test_leakage_models.py index d1e6fd1..e9da42c 100644 --- a/test/sca/test_leakage_models.py +++ b/test/sca/test_leakage_models.py @@ -1,9 +1,10 @@ from unittest import TestCase from pyecsca.ec.context import local, DefaultContext -from pyecsca.ec.formula import FormulaAction +from pyecsca.ec.formula import FormulaAction, OpResult from pyecsca.ec.mod import Mod from pyecsca.ec.mult import LTRMultiplier +from pyecsca.ec.op import OpType from pyecsca.ec.params import get_params from pyecsca.sca.attack.leakage_model import Identity, Bit, Slice, HammingWeight, HammingDistance, BitLength @@ -63,7 +64,7 @@ class ModelTraceTests(TestCase): self.neg = self.coords.formulas["neg"] self.scale = self.coords.formulas["z"] - def test_mult(self): + def test_mult_hw(self): scalar = 0x123456789 mult = LTRMultiplier( self.add, @@ -88,3 +89,31 @@ class ModelTraceTests(TestCase): ctx.actions.walk(callback) self.assertGreater(len(trace), 0) + + def test_mult_hd(self): + scalar = 0x123456789 + mult = LTRMultiplier( + self.add, + self.dbl, + self.scale, + always=True, + complete=False, + short_circuit=True, + ) + with local(DefaultContext()) as ctx: + mult.init(self.secp128r1, self.base) + mult.multiply(scalar) + + lm = HammingDistance() + trace = [] + + def callback(action): + if isinstance(action, FormulaAction): + for intermediate in action.op_results: + if intermediate.op == OpType.Mult: + values = list(map(lambda v: v.value if isinstance(v, OpResult) else v, intermediate.parents)) + leak = lm(*values) + trace.append(leak) + + ctx.actions.walk(callback) + self.assertGreater(len(trace), 0) |
