aboutsummaryrefslogtreecommitdiff
path: root/pyecsca/ec/curve.py
blob: d4cef5dfa166ff35f3a6eb1261a25cbe9561f6dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from typing import Type, Mapping

from .point import Point
from .coordinates import CoordinateModel
from .model import CurveModel


class EllipticCurve(object):
    model: Type[CurveModel]
    coordinate_model: CoordinateModel
    parameters: Mapping[str, int]
    neutral: Point

    def __init__(self, model: Type[CurveModel], coordinate_model: CoordinateModel,
                 parameters: Mapping[str, int], neutral: Point):
        if coordinate_model not in model.coordinates.values():
            raise ValueError
        if set(model.parameter_names).symmetric_difference(parameters.keys()):
            raise ValueError
        if neutral.coordinate_model != coordinate_model:
            raise ValueError
        self.model = model
        self.coordinate_model = coordinate_model
        self.parameters = dict(parameters)
        self.neutral = neutral