summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na@python.org>2023-04-08 17:56:42 (GMT)
committerGitHub <noreply@github.com>2023-04-08 17:56:42 (GMT)
commit35167043e3a21055a94cf3de6ceccd1585554cb8 (patch)
tree54aec317a977e034b9cb050b87eab6f32ae43d63
parent0ba0ca05d2b56afa0b055db02233e703fe138918 (diff)
downloadcpython-35167043e3a21055a94cf3de6ceccd1585554cb8.zip
cpython-35167043e3a21055a94cf3de6ceccd1585554cb8.tar.gz
cpython-35167043e3a21055a94cf3de6ceccd1585554cb8.tar.bz2
gh-103242: Migrate SSLContext.set_ecdh_curve not to use deprecated APIs (#103378)
Migrate `SSLContext.set_ecdh_curve()` not to use deprecated OpenSSL APIs.
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2023-04-08-17-13-07.gh-issue-103242.ysI1b3.rst2
-rw-r--r--Modules/_ssl.c11
2 files changed, 10 insertions, 3 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2023-04-08-17-13-07.gh-issue-103242.ysI1b3.rst b/Misc/NEWS.d/next/Core and Builtins/2023-04-08-17-13-07.gh-issue-103242.ysI1b3.rst
new file mode 100644
index 0000000..38b107f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2023-04-08-17-13-07.gh-issue-103242.ysI1b3.rst
@@ -0,0 +1,2 @@
+Migrate :meth:`~ssl.SSLContext.set_ecdh_curve` method not to use deprecated
+OpenSSL APIs. Patch by Dong-hee Na.
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 5f17cd5..c9e2f24 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -4336,8 +4336,6 @@ _ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name)
{
PyObject *name_bytes;
int nid;
- EC_KEY *key;
-
if (!PyUnicode_FSConverter(name, &name_bytes))
return NULL;
assert(PyBytes_Check(name_bytes));
@@ -4348,13 +4346,20 @@ _ssl__SSLContext_set_ecdh_curve(PySSLContext *self, PyObject *name)
"unknown elliptic curve name %R", name);
return NULL;
}
- key = EC_KEY_new_by_curve_name(nid);
+#if OPENSSL_VERSION_MAJOR < 3
+ EC_KEY *key = EC_KEY_new_by_curve_name(nid);
if (key == NULL) {
_setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__);
return NULL;
}
SSL_CTX_set_tmp_ecdh(self->ctx, key);
EC_KEY_free(key);
+#else
+ if (!SSL_CTX_set1_groups(self->ctx, &nid, 1)) {
+ _setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__);
+ return NULL;
+ }
+#endif
Py_RETURN_NONE;
}