aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/ec/mult/binary.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/ec/mult/binary.py')
-rw-r--r--pyecsca/ec/mult/binary.py16
1 files changed, 4 insertions, 12 deletions
diff --git a/pyecsca/ec/mult/binary.py b/pyecsca/ec/mult/binary.py
index dda3388..6145828 100644
--- a/pyecsca/ec/mult/binary.py
+++ b/pyecsca/ec/mult/binary.py
@@ -4,7 +4,8 @@ from typing import Optional
from public import public
-from .base import ScalarMultiplier, ProcessingDirection, AccumulationOrder, ScalarMultiplicationAction
+from .base import ScalarMultiplier, ProcessingDirection, AccumulationOrder, ScalarMultiplicationAction, \
+ AccumulatorMultiplier
from ..formula import (
AdditionFormula,
DoublingFormula,
@@ -14,7 +15,7 @@ from ..point import Point
@public
-class DoubleAndAddMultiplier(ScalarMultiplier, ABC):
+class DoubleAndAddMultiplier(AccumulatorMultiplier, ScalarMultiplier, ABC):
"""
Classic double and add scalar multiplication algorithm.
@@ -27,7 +28,6 @@ class DoubleAndAddMultiplier(ScalarMultiplier, ABC):
optionals = {ScalingFormula}
always: bool
direction: ProcessingDirection
- accumulation_order: AccumulationOrder
complete: bool
def __init__(
@@ -41,10 +41,9 @@ class DoubleAndAddMultiplier(ScalarMultiplier, ABC):
complete: bool = True,
short_circuit: bool = True,
):
- super().__init__(short_circuit=short_circuit, add=add, dbl=dbl, scl=scl)
+ super().__init__(short_circuit=short_circuit, accumulation_order=accumulation_order, add=add, dbl=dbl, scl=scl)
self.always = always
self.direction = direction
- self.accumulation_order = accumulation_order
self.complete = complete
def __hash__(self):
@@ -58,13 +57,6 @@ class DoubleAndAddMultiplier(ScalarMultiplier, ABC):
def __repr__(self):
return f"{self.__class__.__name__}({tuple(self.formulas.values())}, short_circuit={self.short_circuit}, accumulation_order={self.accumulation_order}, always={self.always}, complete={self.complete})"
- 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
-
def _ltr(self, scalar: int) -> Point:
if self.complete:
q = self._point