diff options
Diffstat (limited to 'pyecsca/ec')
| -rw-r--r-- | pyecsca/ec/curve.py | 2 | ||||
| -rw-r--r-- | pyecsca/ec/params.py | 31 |
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 |
