aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/sca/attack
diff options
context:
space:
mode:
authorJ08nY2023-02-20 23:28:36 +0100
committerJ08nY2023-07-24 14:35:50 +0200
commit96d95c13fe9cdf72254c93406d723382b5e426fd (patch)
tree0c8c478266bd74035da68f17420ff5d24b76628c /pyecsca/sca/attack
parentd8ad9cfc06d0f399fadd9bf78048c4bcac98e8d1 (diff)
downloadpyecsca-96d95c13fe9cdf72254c93406d723382b5e426fd.tar.gz
pyecsca-96d95c13fe9cdf72254c93406d723382b5e426fd.tar.zst
pyecsca-96d95c13fe9cdf72254c93406d723382b5e426fd.zip
Add normal noise.
Diffstat (limited to 'pyecsca/sca/attack')
-rw-r--r--pyecsca/sca/attack/leakage_model.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/pyecsca/sca/attack/leakage_model.py b/pyecsca/sca/attack/leakage_model.py
index 8fdb2ca..84d927e 100644
--- a/pyecsca/sca/attack/leakage_model.py
+++ b/pyecsca/sca/attack/leakage_model.py
@@ -1,7 +1,26 @@
import abc
from typing import Literal, ClassVar
+from numpy.random import default_rng
+from public import public
+
+@public
+class NormalNoice:
+ """
+ https://www.youtube.com/watch?v=SAfq55aiqPc
+ """
+
+ def __init__(self, mean: float, sdev: float):
+ self.rng = default_rng()
+ self.mean = mean
+ self.sdev = sdev
+
+ def __call__(self, *args, **kwargs) -> float:
+ return args[0] + self.rng.normal(self.mean, self.sdev)
+
+
+@public
class LeakageModel(abc.ABC):
num_args: ClassVar[int]
@@ -10,6 +29,7 @@ class LeakageModel(abc.ABC):
raise NotImplementedError
+@public
class Identity(LeakageModel):
num_args = 1
@@ -17,6 +37,7 @@ class Identity(LeakageModel):
return int(args[0])
+@public
class Bit(LeakageModel):
num_args = 1
@@ -30,6 +51,7 @@ class Bit(LeakageModel):
return (int(args[0]) & self.mask) >> self.which # type: ignore
+@public
class Slice(LeakageModel):
num_args = 1
@@ -46,6 +68,7 @@ class Slice(LeakageModel):
return (int(args[0]) & self.mask) >> self.begin
+@public
class HammingWeight(LeakageModel):
num_args = 1
@@ -53,6 +76,7 @@ class HammingWeight(LeakageModel):
return int(args[0]).bit_count()
+@public
class HammingDistance(LeakageModel):
num_args = 2
@@ -60,6 +84,7 @@ class HammingDistance(LeakageModel):
return (int(args[0]) ^ int(args[1])).bit_count()
+@public
class BitLength(LeakageModel):
num_args = 1