aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/ec/formula/code.py
diff options
context:
space:
mode:
authorJ08nY2024-01-26 18:29:04 +0100
committerJ08nY2024-01-26 18:29:04 +0100
commit4be1fda99b983ca0ee22fe47f8ccc311c86d7cfc (patch)
tree3215dbe35af367737b8ff44599f821af3fefd66f /pyecsca/ec/formula/code.py
parent63da9293c39817cd7fe746cbd31e42f13f831091 (diff)
downloadpyecsca-4be1fda99b983ca0ee22fe47f8ccc311c86d7cfc.tar.gz
pyecsca-4be1fda99b983ca0ee22fe47f8ccc311c86d7cfc.tar.zst
pyecsca-4be1fda99b983ca0ee22fe47f8ccc311c86d7cfc.zip
Move CodeFormulas.
Diffstat (limited to 'pyecsca/ec/formula/code.py')
-rw-r--r--pyecsca/ec/formula/code.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/pyecsca/ec/formula/code.py b/pyecsca/ec/formula/code.py
new file mode 100644
index 0000000..9d36d94
--- /dev/null
+++ b/pyecsca/ec/formula/code.py
@@ -0,0 +1,71 @@
+"""Provides a concrete class of a formula that has a constructor."""
+
+from .base import (
+ Formula,
+ AdditionFormula,
+ DoublingFormula,
+ LadderFormula,
+ TriplingFormula,
+ NegationFormula,
+ ScalingFormula,
+ DifferentialAdditionFormula,
+)
+
+
+class CodeFormula(Formula):
+ def __init__(self, name, code, coordinate_model, parameters, assumptions):
+ self.name = name
+ self.coordinate_model = coordinate_model
+ self.meta = {}
+ self.parameters = parameters
+ self.assumptions = assumptions
+ self.code = code
+ self.unified = False
+
+ def __hash__(self):
+ return hash(
+ (
+ self.name,
+ self.coordinate_model,
+ tuple(self.code),
+ tuple(self.parameters),
+ tuple(self.assumptions),
+ )
+ )
+
+ def __eq__(self, other):
+ if not isinstance(other, CodeFormula):
+ return False
+ return (
+ self.name == other.name
+ and self.coordinate_model == other.coordinate_model
+ and self.code == other.code
+ )
+
+
+class CodeAdditionFormula(AdditionFormula, CodeFormula):
+ pass
+
+
+class CodeDoublingFormula(DoublingFormula, CodeFormula):
+ pass
+
+
+class CodeLadderFormula(LadderFormula, CodeFormula):
+ pass
+
+
+class CodeTriplingFormula(TriplingFormula, CodeFormula):
+ pass
+
+
+class CodeNegationFormula(NegationFormula, CodeFormula):
+ pass
+
+
+class CodeScalingFormula(ScalingFormula, CodeFormula):
+ pass
+
+
+class CodeDifferentialAdditionFormula(DifferentialAdditionFormula, CodeFormula):
+ pass