aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorJ08nY2023-02-21 09:46:14 +0100
committerJ08nY2023-07-24 14:35:50 +0200
commit321d08429f0169a10ab8e8cdff54f8adb5d5639e (patch)
tree874f2db11a70e902506ab20199d901ef13c6aee0 /test
parentf5aaa6e0456628c4384ef498235549cc789ef9ca (diff)
downloadpyecsca-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.py33
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)