Skip to content

Commit a012d72

Browse files
authored
Merge pull request #61 from shrir/brainpool
Added support for Brainpool r1
2 parents e29ddec + 2a4c0a8 commit a012d72

File tree

5 files changed

+536
-9
lines changed

5 files changed

+536
-9
lines changed

speed.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def do(setup_statements, statement):
1414
break
1515
return x / number
1616

17-
prnt_form = ("{name:>10}{sep:1} {siglen:>6} {keygen:>9{form}}{unit:1} "
17+
prnt_form = ("{name:>16}{sep:1} {siglen:>6} {keygen:>9{form}}{unit:1} "
1818
"{keygen_inv:>9{form_inv}} {sign:>9{form}}{unit:1} "
1919
"{sign_inv:>9{form_inv}} {verify:>9{form}}{unit:1} "
2020
"{verify_inv:>9{form_inv}}")

src/ecdsa/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from .keys import SigningKey, VerifyingKey, BadSignatureError, BadDigestError,\
22
MalformedPointError
3-
from .curves import NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1
3+
from .curves import NIST192p, NIST224p, NIST256p, NIST384p, NIST521p,\
4+
SECP256k1, BRAINPOOLP160r1, BRAINPOOLP192r1, BRAINPOOLP224r1,\
5+
BRAINPOOLP256r1, BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1
46
from .der import UnexpectedDER
57

68
# This code comes from http://github.com/warner/python-ecdsa
@@ -13,5 +15,8 @@
1315

1416
_hush_pyflakes = [SigningKey, VerifyingKey, BadSignatureError, BadDigestError,
1517
MalformedPointError, UnexpectedDER,
16-
NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1]
18+
NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1,
19+
BRAINPOOLP160r1, BRAINPOOLP192r1, BRAINPOOLP224r1,
20+
BRAINPOOLP256r1, BRAINPOOLP320r1, BRAINPOOLP384r1,
21+
BRAINPOOLP512r1]
1722
del _hush_pyflakes

src/ecdsa/curves.py

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
# will need to mark it as deprecated later
99
__all__ = ["UnknownCurveError", "orderlen", "Curve", "NIST192p",
1010
"NIST224p", "NIST256p", "NIST384p", "NIST521p", "curves",
11-
"find_curve", "SECP256k1"]
11+
"find_curve", "SECP256k1", "BRAINPOOLP160r1", "BRAINPOOLP192r1",
12+
"BRAINPOOLP224r1", "BRAINPOOLP256r1" "BRAINPOOLP320r1",
13+
"BRAINPOOLP384r1", "BRAINPOOLP512r1"]
1214

1315

1416
class UnknownCurveError(Exception):
@@ -61,9 +63,46 @@ def __repr__(self):
6163
SECP256k1 = Curve("SECP256k1", ecdsa.curve_secp256k1,
6264
ecdsa.generator_secp256k1,
6365
(1, 3, 132, 0, 10), "secp256k1")
64-
65-
66-
curves = [NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1]
66+
BRAINPOOLP160r1 = Curve("BRAINPOOLP160r1",
67+
ecdsa.curve_brainpoolp160r1,
68+
ecdsa.generator_brainpoolp160r1,
69+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 1),
70+
"brainpoolP160r1")
71+
BRAINPOOLP192r1 = Curve("BRAINPOOLP192r1",
72+
ecdsa.curve_brainpoolp192r1,
73+
ecdsa.generator_brainpoolp192r1,
74+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 3),
75+
"brainpoolP192r1")
76+
BRAINPOOLP224r1 = Curve("BRAINPOOLP224r1",
77+
ecdsa.curve_brainpoolp224r1,
78+
ecdsa.generator_brainpoolp224r1,
79+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 5),
80+
"brainpoolP224r1")
81+
BRAINPOOLP256r1 = Curve("BRAINPOOLP256r1",
82+
ecdsa.curve_brainpoolp256r1,
83+
ecdsa.generator_brainpoolp256r1,
84+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 7),
85+
"brainpoolP256r1")
86+
BRAINPOOLP320r1 = Curve("BRAINPOOLP320r1",
87+
ecdsa.curve_brainpoolp320r1,
88+
ecdsa.generator_brainpoolp320r1,
89+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 9),
90+
"brainpoolP320r1")
91+
BRAINPOOLP384r1 = Curve("BRAINPOOLP384r1",
92+
ecdsa.curve_brainpoolp384r1,
93+
ecdsa.generator_brainpoolp384r1,
94+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 11),
95+
"brainpoolP384r1")
96+
BRAINPOOLP512r1 = Curve("BRAINPOOLP512r1",
97+
ecdsa.curve_brainpoolp512r1,
98+
ecdsa.generator_brainpoolp512r1,
99+
(1, 3, 36, 3, 3, 2, 8, 1, 1, 13),
100+
"brainpoolP512r1")
101+
102+
103+
curves = [NIST192p, NIST224p, NIST256p, NIST384p, NIST521p, SECP256k1,
104+
BRAINPOOLP160r1, BRAINPOOLP192r1, BRAINPOOLP224r1, BRAINPOOLP256r1,
105+
BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1]
67106

68107

69108
def find_curve(oid_curve):

src/ecdsa/ecdsa.py

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,3 +315,87 @@ def point_is_valid(generator, x, y):
315315

316316
curve_secp256k1 = ellipticcurve.CurveFp(_p, _a, _b)
317317
generator_secp256k1 = ellipticcurve.Point(curve_secp256k1, _Gx, _Gy, _r)
318+
319+
# Brainpool P-160-r1
320+
_a = 0x340E7BE2A280EB74E2BE61BADA745D97E8F7C300
321+
_b = 0x1E589A8595423412134FAA2DBDEC95C8D8675E58
322+
_p = 0xE95E4A5F737059DC60DFC7AD95B3D8139515620F
323+
_Gx = 0xBED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3
324+
_Gy = 0x1667CB477A1A8EC338F94741669C976316DA6321
325+
_q = 0xE95E4A5F737059DC60DF5991D45029409E60FC09
326+
327+
curve_brainpoolp160r1 = ellipticcurve.CurveFp(_p, _a, _b)
328+
generator_brainpoolp160r1 = ellipticcurve.Point(
329+
curve_brainpoolp160r1, _Gx, _Gy, _q)
330+
331+
# Brainpool P-192-r1
332+
_a = 0x6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF
333+
_b = 0x469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9
334+
_p = 0xC302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297
335+
_Gx = 0xC0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6
336+
_Gy = 0x14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F
337+
_q = 0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1
338+
339+
curve_brainpoolp192r1 = ellipticcurve.CurveFp(_p, _a, _b)
340+
generator_brainpoolp192r1 = ellipticcurve.Point(
341+
curve_brainpoolp192r1, _Gx, _Gy, _q)
342+
343+
# Brainpool P-224-r1
344+
_a = 0x68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43
345+
_b = 0x2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B
346+
_p = 0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF
347+
_Gx = 0x0D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D
348+
_Gy = 0x58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD
349+
_q = 0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F
350+
351+
curve_brainpoolp224r1 = ellipticcurve.CurveFp(_p, _a, _b)
352+
generator_brainpoolp224r1 = ellipticcurve.Point(
353+
curve_brainpoolp224r1, _Gx, _Gy, _q)
354+
355+
# Brainpool P-256-r1
356+
_a = 0x7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9
357+
_b = 0x26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6
358+
_p = 0xA9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377
359+
_Gx = 0x8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262
360+
_Gy = 0x547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997
361+
_q = 0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7
362+
363+
curve_brainpoolp256r1 = ellipticcurve.CurveFp(_p, _a, _b)
364+
generator_brainpoolp256r1 = ellipticcurve.Point(
365+
curve_brainpoolp256r1, _Gx, _Gy, _q)
366+
367+
# Brainpool P-320-r1
368+
_a = 0x3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4
369+
_b = 0x520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6
370+
_p = 0xD35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27
371+
_Gx = 0x43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611
372+
_Gy = 0x14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1
373+
_q = 0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311
374+
375+
curve_brainpoolp320r1 = ellipticcurve.CurveFp(_p, _a, _b)
376+
generator_brainpoolp320r1 = ellipticcurve.Point(
377+
curve_brainpoolp320r1, _Gx, _Gy, _q)
378+
379+
# Brainpool P-384-r1
380+
_a = 0x7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826
381+
_b = 0x04A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11
382+
_p = 0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53
383+
_Gx = 0x1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E
384+
_Gy = 0x8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315
385+
_q = 0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565
386+
387+
curve_brainpoolp384r1 = ellipticcurve.CurveFp(_p, _a, _b)
388+
generator_brainpoolp384r1 = ellipticcurve.Point(
389+
curve_brainpoolp384r1, _Gx, _Gy, _q)
390+
391+
# Brainpool P-512-r1
392+
_a = 0x7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA
393+
_b = 0x3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723
394+
_p = 0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3
395+
_Gx = 0x81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822
396+
_Gy = 0x7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892
397+
_q = 0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069
398+
399+
curve_brainpoolp512r1 = ellipticcurve.CurveFp(_p, _a, _b)
400+
generator_brainpoolp512r1 = ellipticcurve.Point(
401+
curve_brainpoolp512r1, _Gx, _Gy, _q)

0 commit comments

Comments
 (0)