From bb3ad6b5edafb26309514a0d59e9ba8bc2d5c19f Mon Sep 17 00:00:00 2001 From: J08nY Date: Wed, 6 Jan 2021 17:32:27 +0100 Subject: Fix Edwards yz/yzsquared to_model. Fixes #10. --- pyecsca/ec/curve.py | 5 ++++- pyecsca/ec/point.py | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'pyecsca/ec') diff --git a/pyecsca/ec/curve.py b/pyecsca/ec/curve.py index 7351583..e976289 100644 --- a/pyecsca/ec/curve.py +++ b/pyecsca/ec/curve.py @@ -167,7 +167,10 @@ class EllipticCurve(object): return False if self.is_neutral(point): return True - loc = {**self.parameters, **point.to_affine().coords} + if isinstance(point.coordinate_model, AffineCoordinateModel): + loc = {**self.parameters, **point.coords} + else: + loc = {**self.parameters, **point.to_affine().coords} return eval(compile(self.model.equation, "", mode="eval"), loc) def to_affine(self) -> "EllipticCurve": diff --git a/pyecsca/ec/point.py b/pyecsca/ec/point.py index 480c47f..a3c388e 100644 --- a/pyecsca/ec/point.py +++ b/pyecsca/ec/point.py @@ -103,8 +103,13 @@ class Point(object): result[var] = result[var].inverse() elif var == "Y": result[var] = self.coords["y"] - if isinstance(coordinate_model, EFDCoordinateModel) and coordinate_model.name == "inverted": - result[var] = result[var].inverse() + if isinstance(coordinate_model, EFDCoordinateModel): + if coordinate_model.name == "inverted": + result[var] = result[var].inverse() + elif coordinate_model.name == "yz": + result[var] = result[var] * curve.parameters["r"] + elif coordinate_model.name == "yzsquared": + result[var] = result[var] * curve.parameters["r"]**2 elif var.startswith("Z"): result[var] = Mod(1, curve.prime) elif var == "T": -- cgit v1.3.1