From a1c36b6c21f76f00424b87514d8e7ca2890c7f9f Mon Sep 17 00:00:00 2001 From: pranithan-kang Date: Mon, 10 Aug 2020 12:51:20 +0700 Subject: [PATCH 1/3] Add Weierstrass Curve 25519 --- src/ecdsa/__init__.py | 2 ++ src/ecdsa/curves.py | 6 ++++++ src/ecdsa/ecdsa.py | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/ecdsa/__init__.py b/src/ecdsa/__init__.py index 4ae0a114..ccccd200 100644 --- a/src/ecdsa/__init__.py +++ b/src/ecdsa/__init__.py @@ -19,6 +19,7 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Curve25519Weier, ) from .ecdh import ( ECDH, @@ -72,5 +73,6 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Curve25519Weier, ] del _hush_pyflakes diff --git a/src/ecdsa/curves.py b/src/ecdsa/curves.py index 9a103803..c8eeb4ba 100644 --- a/src/ecdsa/curves.py +++ b/src/ecdsa/curves.py @@ -25,6 +25,7 @@ "BRAINPOOLP320r1", "BRAINPOOLP384r1", "BRAINPOOLP512r1", + "Curve25519Weier" ] @@ -166,6 +167,10 @@ def __repr__(self): "brainpoolP512r1", ) +Curve25519Weier = Curve("Curve25519Weier", + ecdsa.curve_25519_weier, + ecdsa.generator_25519_weier, + (1, 3, 101, 110)) curves = [ NIST192p, @@ -181,6 +186,7 @@ def __repr__(self): BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, + Curve25519Weier, ] diff --git a/src/ecdsa/ecdsa.py b/src/ecdsa/ecdsa.py index d924ac1f..726da762 100644 --- a/src/ecdsa/ecdsa.py +++ b/src/ecdsa/ecdsa.py @@ -467,3 +467,15 @@ 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 + +curve_25519_weier = ellipticcurve.CurveFp(_p, _a, _b, 1) +generator_25519_weier = ellipticcurve.PointJacobi( + curve_25519_weier, _Gx, _Gy, 1, _r, generator=True) \ No newline at end of file From cea8e9493eb83ecaa8df4f84f448b6e839c7e06c Mon Sep 17 00:00:00 2001 From: pranithan-kang Date: Thu, 13 Aug 2020 14:25:47 +0700 Subject: [PATCH 2/3] Correct h parameter of Weierstrass form of Curve 25519. --- src/ecdsa/ecdsa.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ecdsa/ecdsa.py b/src/ecdsa/ecdsa.py index 726da762..58165233 100644 --- a/src/ecdsa/ecdsa.py +++ b/src/ecdsa/ecdsa.py @@ -475,7 +475,8 @@ def point_is_valid(generator, x, y): _Gx = 0x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaad245a _Gy = 0x20ae19a1b8a086b4e01edd2c7748d14c923d4d7e6d7c61b229e9c5a27eced3d9 _r = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed +_h = 8 -curve_25519_weier = ellipticcurve.CurveFp(_p, _a, _b, 1) +curve_25519_weier = ellipticcurve.CurveFp(_p, _a, _b, _h) generator_25519_weier = ellipticcurve.PointJacobi( curve_25519_weier, _Gx, _Gy, 1, _r, generator=True) \ No newline at end of file From 7abad89934adced5dea68c639e76cd2d25a7bd24 Mon Sep 17 00:00:00 2001 From: pranithan-kang Date: Fri, 14 Aug 2020 15:32:33 +0700 Subject: [PATCH 3/3] Change name Curve25519Weier to Wei25519 Change name Curve25519Weier to Wei25519 refer from https://tools.ietf.org/html/draft-ietf-lwig-curve-representations-11 --- src/ecdsa/__init__.py | 4 ++-- src/ecdsa/curves.py | 15 +++++++++------ src/ecdsa/ecdsa.py | 6 +++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/ecdsa/__init__.py b/src/ecdsa/__init__.py index ccccd200..14f053c5 100644 --- a/src/ecdsa/__init__.py +++ b/src/ecdsa/__init__.py @@ -19,7 +19,7 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, - Curve25519Weier, + Wei25519, ) from .ecdh import ( ECDH, @@ -73,6 +73,6 @@ BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, - Curve25519Weier, + Wei25519, ] del _hush_pyflakes diff --git a/src/ecdsa/curves.py b/src/ecdsa/curves.py index c8eeb4ba..67907a1d 100644 --- a/src/ecdsa/curves.py +++ b/src/ecdsa/curves.py @@ -25,7 +25,7 @@ "BRAINPOOLP320r1", "BRAINPOOLP384r1", "BRAINPOOLP512r1", - "Curve25519Weier" + "Wei25519" ] @@ -167,10 +167,13 @@ def __repr__(self): "brainpoolP512r1", ) -Curve25519Weier = Curve("Curve25519Weier", - ecdsa.curve_25519_weier, - ecdsa.generator_25519_weier, - (1, 3, 101, 110)) +# 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, @@ -186,7 +189,7 @@ def __repr__(self): BRAINPOOLP320r1, BRAINPOOLP384r1, BRAINPOOLP512r1, - Curve25519Weier, + Wei25519, ] diff --git a/src/ecdsa/ecdsa.py b/src/ecdsa/ecdsa.py index 58165233..885e4e40 100644 --- a/src/ecdsa/ecdsa.py +++ b/src/ecdsa/ecdsa.py @@ -477,6 +477,6 @@ def point_is_valid(generator, x, y): _r = 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed _h = 8 -curve_25519_weier = ellipticcurve.CurveFp(_p, _a, _b, _h) -generator_25519_weier = ellipticcurve.PointJacobi( - curve_25519_weier, _Gx, _Gy, 1, _r, generator=True) \ No newline at end of file +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