aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/ec/mult/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/ec/mult/base.py')
-rw-r--r--pyecsca/ec/mult/base.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/pyecsca/ec/mult/base.py b/pyecsca/ec/mult/base.py
index 027320c..a0584d1 100644
--- a/pyecsca/ec/mult/base.py
+++ b/pyecsca/ec/mult/base.py
@@ -206,3 +206,24 @@ class ScalarMultiplier(ABC):
:return: The resulting multiple.
"""
raise NotImplementedError
+
+
+@public
+class AccumulatorMultiplier(ScalarMultiplier, ABC):
+ """
+ A scalar multiplication algorithm mix-in class for a multiplier that accumulates.
+
+ :param accumulation_order: The order of accumulation of points.
+ """
+ accumulation_order: AccumulationOrder
+
+ def __init__(self, *args, accumulation_order: AccumulationOrder = AccumulationOrder.PeqPR, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.accumulation_order = accumulation_order
+
+ def _accumulate(self, p: Point, r: Point) -> Point:
+ if self.accumulation_order is AccumulationOrder.PeqPR:
+ p = self._add(p, r)
+ elif self.accumulation_order is AccumulationOrder.PeqRP:
+ p = self._add(r, p)
+ return p