aboutsummaryrefslogtreecommitdiff
path: root/pyecsca
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca')
-rw-r--r--pyecsca/ec/curve.py2
-rw-r--r--pyecsca/ec/params.py31
2 files changed, 20 insertions, 13 deletions
diff --git a/pyecsca/ec/curve.py b/pyecsca/ec/curve.py
index 5a99c92..e8ae66c 100644
--- a/pyecsca/ec/curve.py
+++ b/pyecsca/ec/curve.py
@@ -21,7 +21,7 @@ class EllipticCurve(object):
def __init__(self, model: CurveModel, coordinate_model: CoordinateModel,
prime: int, neutral: Point, parameters: MutableMapping[str, Union[Mod, int]]):
- if coordinate_model not in model.coordinates.values():
+ if coordinate_model not in model.coordinates.values() and not isinstance(coordinate_model, AffineCoordinateModel):
raise ValueError
if set(model.parameter_names).symmetric_difference(parameters.keys()):
raise ValueError
diff --git a/pyecsca/ec/params.py b/pyecsca/ec/params.py
index 7cf36a3..29d431d 100644
--- a/pyecsca/ec/params.py
+++ b/pyecsca/ec/params.py
@@ -103,19 +103,23 @@ def get_params(category: str, name: str, coords: str, infty: bool = True) -> Dom
param_names = ["a", "d"]
else:
raise ValueError("Unknown curve model.")
+ params = {name: Mod(int(curve["params"][name], 16), field) for name in param_names}
# Check coordinate model name and assumptions
- if coords not in model.coordinates:
- raise ValueError("Coordinate model not supported for curve.")
- coord_model = model.coordinates[coords]
- params = {name: Mod(int(curve["params"][name], 16), field) for name in param_names}
- for assumption in coord_model.assumptions:
- alocals: Dict[str, Union[Mod, int]] = {}
- compiled = compile(assumption, "", mode="exec")
- exec(compiled, None, alocals)
- for param, value in alocals.items():
- if params[param] != value:
- raise ValueError(f"Coordinate model {coord_model} has an unsatisifed assumption on the {param} parameter (= {value}).")
+ if coords == "affine":
+ coord_model = AffineCoordinateModel(model)
+ else:
+ if coords not in model.coordinates:
+ raise ValueError("Coordinate model not supported for curve.")
+ coord_model = model.coordinates[coords]
+ for assumption in coord_model.assumptions:
+ alocals: Dict[str, Union[Mod, int]] = {}
+ compiled = compile(assumption, "", mode="exec")
+ exec(compiled, None, alocals)
+ for param, value in alocals.items():
+ if params[param] != value:
+ raise ValueError(f"Coordinate model {coord_model} has an unsatisifed assumption on the {param} parameter (= {value}).")
+
# Construct the point at infinity
infinity: Point
if infty:
@@ -137,5 +141,8 @@ def get_params(category: str, name: str, coords: str, infty: bool = True) -> Dom
elliptic_curve = EllipticCurve(model, coord_model, field, infinity, params)
affine = Point(AffineCoordinateModel(model), x=Mod(int(curve["generator"]["x"], 16), field),
y=Mod(int(curve["generator"]["y"], 16), field))
- generator = Point.from_affine(coord_model, affine)
+ if not isinstance(coord_model, AffineCoordinateModel):
+ generator = Point.from_affine(coord_model, affine)
+ else:
+ generator = affine
return DomainParameters(elliptic_curve, generator, order, cofactor, name, category) \ No newline at end of file