aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/ec/transformations.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/ec/transformations.py')
-rw-r--r--pyecsca/ec/transformations.py55
1 files changed, 41 insertions, 14 deletions
diff --git a/pyecsca/ec/transformations.py b/pyecsca/ec/transformations.py
index 986064b..0987235 100644
--- a/pyecsca/ec/transformations.py
+++ b/pyecsca/ec/transformations.py
@@ -22,8 +22,12 @@ def __M_map(params, param_names, map_parameters, map_point, model):
else:
neutral = map_point(param_one, param_other, params.curve.neutral, aff)
curve = EllipticCurve(model, aff, params.curve.prime, neutral, parameters)
- return DomainParameters(curve, map_point(param_one, param_other, params.generator, aff), params.order,
- params.cofactor)
+ return DomainParameters(
+ curve,
+ map_point(param_one, param_other, params.generator, aff),
+ params.order,
+ params.cofactor,
+ )
@public
@@ -35,7 +39,8 @@ def M2SW(params: DomainParameters) -> DomainParameters:
:return: The converted domain parameters.
"""
if not isinstance(params.curve.model, MontgomeryModel) or not isinstance(
- params.curve.coordinate_model, AffineCoordinateModel):
+ params.curve.coordinate_model, AffineCoordinateModel
+ ):
raise ValueError
def map_parameters(A, B):
@@ -48,7 +53,9 @@ def M2SW(params: DomainParameters) -> DomainParameters:
v = pt.y / B
return Point(aff, x=u, y=v)
- return __M_map(params, ("a", "b"), map_parameters, map_point, ShortWeierstrassModel())
+ return __M_map(
+ params, ("a", "b"), map_parameters, map_point, ShortWeierstrassModel()
+ )
@public
@@ -60,7 +67,8 @@ def M2TE(params: DomainParameters) -> DomainParameters:
:return: The converted domain parameters.
"""
if not isinstance(params.curve.model, MontgomeryModel) or not isinstance(
- params.curve.coordinate_model, AffineCoordinateModel):
+ params.curve.coordinate_model, AffineCoordinateModel
+ ):
raise ValueError
def map_parameters(A, B):
@@ -85,7 +93,8 @@ def TE2M(params: DomainParameters) -> DomainParameters:
:return: The converted domain parameters.
"""
if not isinstance(params.curve.model, TwistedEdwardsModel) or not isinstance(
- params.curve.coordinate_model, AffineCoordinateModel):
+ params.curve.coordinate_model, AffineCoordinateModel
+ ):
raise ValueError
def map_parameters(a, d):
@@ -110,16 +119,25 @@ def SW2M(params: DomainParameters) -> DomainParameters:
:return: The converted domain parameters.
"""
if not isinstance(params.curve.model, ShortWeierstrassModel) or not isinstance(
- params.curve.coordinate_model, AffineCoordinateModel):
+ params.curve.coordinate_model, AffineCoordinateModel
+ ):
raise ValueError
ax = symbols("α")
field = FF(params.curve.prime)
- rhs = Poly(ax ** 3 + field(int(params.curve.parameters["a"])) * ax + field(int(params.curve.parameters["b"])), ax, domain=field)
+ rhs = Poly(
+ ax ** 3
+ + field(int(params.curve.parameters["a"])) * ax
+ + field(int(params.curve.parameters["b"])),
+ ax,
+ domain=field,
+ )
roots = rhs.ground_roots()
if not roots:
- raise ValueError("Curve cannot be transformed to Montgomery model (x^3 + ax + b has no root).")
+ raise ValueError(
+ "Curve cannot be transformed to Montgomery model (x^3 + ax + b has no root)."
+ )
alpha = Mod(int(next(iter(roots.keys()))), params.curve.prime)
- beta = (3 * alpha**2 + params.curve.parameters["a"]).sqrt()
+ beta = (3 * alpha ** 2 + params.curve.parameters["a"]).sqrt()
def map_parameters(a, b):
A = (3 * alpha) / beta
@@ -143,16 +161,25 @@ def SW2TE(params: DomainParameters) -> DomainParameters:
:return: The converted domain parameters.
"""
if not isinstance(params.curve.model, ShortWeierstrassModel) or not isinstance(
- params.curve.coordinate_model, AffineCoordinateModel):
+ params.curve.coordinate_model, AffineCoordinateModel
+ ):
raise ValueError
ax = symbols("α")
field = FF(params.curve.prime)
- rhs = Poly(ax ** 3 + field(int(params.curve.parameters["a"])) * ax + field(int(params.curve.parameters["b"])), ax, domain=field)
+ rhs = Poly(
+ ax ** 3
+ + field(int(params.curve.parameters["a"])) * ax
+ + field(int(params.curve.parameters["b"])),
+ ax,
+ domain=field,
+ )
roots = rhs.ground_roots()
if not roots:
- raise ValueError("Curve cannot be transformed to Montgomery model (x^3 + ax + b has no root).")
+ raise ValueError(
+ "Curve cannot be transformed to Montgomery model (x^3 + ax + b has no root)."
+ )
alpha = Mod(int(next(iter(roots.keys()))), params.curve.prime)
- beta = (3 * alpha**2 + params.curve.parameters["a"]).sqrt()
+ beta = (3 * alpha ** 2 + params.curve.parameters["a"]).sqrt()
def map_parameters(a, b):
a = 3 * alpha + 2 * beta