diff --git a/src/ecdsa/__init__.py b/src/ecdsa/__init__.py index 4ae0a114..14f053c5 100644 --- a/src/ecdsa/__init__.py +++ b/src/ecdsa/__init__.py @@ -19,6 +19,7 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Wei25519, ) from .ecdh import ( ECDH, @@ -72,5 +73,6 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Wei25519, ] del _hush_pyflakes diff --git a/src/ecdsa/curves.py b/src/ecdsa/curves.py index 9a103803..67907a1d 100644 --- a/src/ecdsa/curves.py +++ b/src/ecdsa/curves.py @@ -25,6 +25,7 @@ "BRAINPOOLP320r1", "BRAINPOOLP384r1", "BRAINPOOLP512r1", + "Wei25519" ] @@ -166,6 +167,13 @@ def __repr__(self): "brainpoolP512r1", ) +# TODO: Correct the oid and openssl_name +# TODO: Compose Unit-tests +Wei25519 = Curve("Wei25519", + ecdsa.curve_wei_25519, + ecdsa.generator_wei_25519, + (1, 3, 101, 110), + "wei25519") curves = [ NIST192p, @@ -181,6 +189,7 @@ def __repr__(self): BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Wei25519, ] diff --git a/src/ecdsa/ecdsa.py b/src/ecdsa/ecdsa.py index d924ac1f..885e4e40 100644 --- a/src/ecdsa/ecdsa.py +++ b/src/ecdsa/ecdsa.py @@ -467,3 +467,16 @@ def point_is_valid(generator, x, y): generator_brainpoolp512r1 = ellipticcurve.PointJacobi( curve_brainpoolp512r1, _Gx, _Gy, 1, _q, generator=True ) + +# Weierstass Curve 25519 +_a = 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa984914a144 +_b = 0x7b425ed097b425ed097b425ed097b425ed097b425ed097b4260b5e9c7710c864 +_p = 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed +_Gx = 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad245a +_Gy = 0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9 +_r = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed +_h = 8 + +curve_wei_25519 = ellipticcurve.CurveFp(_p, _a, _b, _h) +generator_wei_25519 = ellipticcurve.PointJacobi( + curve_wei_25519, _Gx, _Gy, 1, _r, generator=True) \ No newline at end of file