aboutsummaryrefslogtreecommitdiff
path: root/freezed_deps/ecdsa/curves.py
blob: 173a2cda88eebd14623d4d913c0e25491fdfbc72 (plain) (blame)
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
from __future__ import division

from . import der, ecdsa
from .util import orderlen


# orderlen was defined in this module previously, so keep it in __all__,
# will need to mark it as deprecated later
__all__ = ["UnknownCurveError", "orderlen", "Curve", "NIST192p",
           "NIST224p", "NIST256p", "NIST384p", "NIST521p", "curves",
           "find_curve", "SECP256k1", "BRAINPOOLP160r1", "BRAINPOOLP192r1",
           "BRAINPOOLP224r1", "BRAINPOOLP256r1", "BRAINPOOLP320r1",
           "BRAINPOOLP384r1", "BRAINPOOLP512r1"]


class UnknownCurveError(Exception):
    pass


class Curve:
    def __init__(self, name, curve, generator, oid, openssl_name=None):
        self.name = name
        self.openssl_name = openssl_name  # maybe None
        self.curve = curve
        self.generator = generator
        self.order = generator.order()
        self.baselen = orderlen(self.order)
        self.verifying_key_length = 2*self.baselen
        self.signature_length = 2*self.baselen
        self.oid = oid
        self.encoded_oid = der.encode_oid(*oid)

    def __repr__(self):
        return self.name


# the NIST curves
NIST192p = Curve("NIST192p", ecdsa.curve_192,
                 ecdsa.generator_192,
                 (1, 2, 840, 10045, 3, 1, 1), "prime192v1")


NIST224p = Curve("NIST224p", ecdsa.curve_224,
                 ecdsa.generator_224,
                 (1, 3, 132, 0, 33), "secp224r1")


NIST256p = Curve("NIST256p", ecdsa.curve_256,
                 ecdsa.generator_256,
                 (1, 2, 840, 10045, 3, 1, 7), "prime256v1")


NIST384p = Curve("NIST384p", ecdsa.curve_384,
                 ecdsa.generator_384,
                 (1, 3, 132, 0, 34), "secp384r1")


NIST521p = Curve("NIST521p", ecdsa.curve_521,
                 ecdsa.generator_521,
                 (1, 3, 132, 0, 35), "secp521r1")


SECP256k1 = Curve("SECP256k1", ecdsa.curve_secp256k1,
                  ecdsa.generator_secp256k1,
                  (1, 3, 132, 0, 10), "secp256k1")


BRAINPOOLP160r1 = Curve("BRAINPOOLP160r1",
                        ecdsa.curve_brainpoolp160r1,
                        ecdsa.generator_brainpoolp160r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 1),
                        "brainpoolP160r1")


BRAINPOOLP192r1 = Curve("BRAINPOOLP192r1",
                        ecdsa.curve_brainpoolp192r1,
                        ecdsa.generator_brainpoolp192r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 3),
                        "brainpoolP192r1")


BRAINPOOLP224r1 = Curve("BRAINPOOLP224r1",
                        ecdsa.curve_brainpoolp224r1,
                        ecdsa.generator_brainpoolp224r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 5),
                        "brainpoolP224r1")


BRAINPOOLP256r1 = Curve("BRAINPOOLP256r1",
                        ecdsa.curve_brainpoolp256r1,
                        ecdsa.generator_brainpoolp256r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 7),
                        "brainpoolP256r1")


BRAINPOOLP320r1 = Curve("BRAINPOOLP320r1",
                        ecdsa.curve_brainpoolp320r1,
                        ecdsa.generator_brainpoolp320r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 9),
                        "brainpoolP320r1")


BRAINPOOLP384r1 = Curve("BRAINPOOLP384r1",
                        ecdsa.curve_brainpoolp384r1,
                        ecdsa.generator_brainpoolp384r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 11),
                        "brainpoolP384r1")


BRAINPOOLP512r1 = Curve("BRAINPOOLP512r1",
                        ecdsa.curve_brainpoolp512r1,
                        ecdsa.generator_brainpoolp512r1,
                        (1, 3, 36, 3, 3, 2, 8, 1, 1, 13),
                        "brainpoolP512r1")


curves = [NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1,
          BRAINPOOLP160r1, BRAINPOOLP192r1, BRAINPOOLP224r1, BRAINPOOLP256r1,
          BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1]


def find_curve(oid_curve):
    for c in curves:
        if c.oid == oid_curve:
            return c
    raise UnknownCurveError("I don't know about the curve with oid %s."
                            "I only know about these: %s" %
                            (oid_curve, [c.name for c in curves]))