diff options
Diffstat (limited to 'pyecsca/ec/mult/base.py')
| -rw-r--r-- | pyecsca/ec/mult/base.py | 21 |
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 |
