diff options
| author | J08nY | 2023-02-20 20:31:29 +0100 |
|---|---|---|
| committer | J08nY | 2023-07-24 14:35:50 +0200 |
| commit | d8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1 (patch) | |
| tree | 9ec202b6a5370d6fcba1ca5a0cff828a5a790bf4 /test | |
| parent | 1b115ca3cb9ef43f163bbb4a8a27b92f87d8f520 (diff) | |
| download | pyecsca-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.py | 48 |
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) |
