aboutsummaryrefslogtreecommitdiffhomepage
path: root/test
diff options
context:
space:
mode:
authorJ08nY2023-02-20 20:31:29 +0100
committerJ08nY2023-07-24 14:35:50 +0200
commitd8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1 (patch)
tree9ec202b6a5370d6fcba1ca5a0cff828a5a790bf4 /test
parent1b115ca3cb9ef43f163bbb4a8a27b92f87d8f520 (diff)
downloadpyecsca-d8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1.tar.gz
pyecsca-d8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1.tar.zst
pyecsca-d8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1.zip
Add leakage models.
Diffstat (limited to 'test')
-rw-r--r--test/sca/test_leakage_models.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/test/sca/test_leakage_models.py b/test/sca/test_leakage_models.py
new file mode 100644
index 0000000..f951083
--- /dev/null
+++ b/test/sca/test_leakage_models.py
@@ -0,0 +1,48 @@
+from unittest import TestCase
+
+from pyecsca.ec.mod import Mod
+from pyecsca.sca.attack.leakage_model import Identity, Bit, Slice, HammingWeight, HammingDistance, BitLength
+
+
+class LeakageModelTests(TestCase):
+
+ def test_identity(self):
+ val = Mod(3, 7)
+ lm = Identity()
+ self.assertEqual(lm(val), 3)
+
+ def test_bit(self):
+ val = Mod(3, 7)
+ lm = Bit(0)
+ self.assertEqual(lm(val), 1)
+ lm = Bit(4)
+ self.assertEqual(lm(val), 0)
+ with self.assertRaises(ValueError):
+ Bit(-3)
+
+ def test_slice(self):
+ val = Mod(0b11110000, 0xf00)
+ lm = Slice(0, 4)
+ self.assertEqual(lm(val), 0)
+ lm = Slice(1, 5)
+ self.assertEqual(lm(val), 0b1000)
+ lm = Slice(4, 8)
+ self.assertEqual(lm(val), 0b1111)
+ with self.assertRaises(ValueError):
+ Slice(7, 1)
+
+ def test_hamming_weight(self):
+ val = Mod(0b11110000, 0xf00)
+ lm = HammingWeight()
+ self.assertEqual(lm(val), 4)
+
+ def test_hamming_distance(self):
+ a = Mod(0b11110000, 0xf00)
+ b = Mod(0b00010000, 0xf00)
+ lm = HammingDistance()
+ self.assertEqual(lm(a, b), 3)
+
+ def test_bit_length(self):
+ a = Mod(0b11110000, 0xf00)
+ lm = BitLength()
+ self.assertEqual(lm(a), 8)