Title: Add support in SSL module for getting/setting groups used for key agreement · Issue #136306 · python/cpython · GitHub
Open Graph Title: Add support in SSL module for getting/setting groups used for key agreement · Issue #136306 · python/cpython
X Title: Add support in SSL module for getting/setting groups used for key agreement · Issue #136306 · python/cpython
Description: Add support for getting/setting groups used for key agreement Proposal: This feature proposal is an expansion of the feature proposed in issue #109945. It began as a discussion on the PR where I provided some suggestions on generalizing ...
Open Graph Description: Add support for getting/setting groups used for key agreement Proposal: This feature proposal is an expansion of the feature proposed in issue #109945. It began as a discussion on the PR where I pr...
X Description: Add support for getting/setting groups used for key agreement Proposal: This feature proposal is an expansion of the feature proposed in issue #109945. It began as a discussion on the PR where I pr...
Opengraph URL: https://github.com/python/cpython/issues/136306
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add support in SSL module for getting/setting groups used for key agreement","articleBody":"# Add support for getting/setting groups used for key agreement\n\n### Proposal:\n\nThis feature proposal is an expansion of the feature proposed in issue #109945. It began as a discussion on the PR where I provided some suggestions on generalizing that feature to include supporting more than just EC curves, and I provided some rough example code. Since then, I've put together a more complete version of this which I'll be submitting shortly as a PR attached to this issue.\n\nThe basic idea is to add three new methods related to getting \u0026 setting groups used for key agreement:\n\n```python\n SSLContext.get_groups() -\u003e List[str]:\n \"\"\"Get a list of groups implemented for key agreement, taking into account\n the SSLContext's current TLS `minimum_version` and `maximum_version` values.\"\"\"\n \n SSLContext.set_groups(groups: str) -\u003e None:\n \"\"\"Set the groups allowed for key agreement for sockets created with this context.\"\"\"\n\n SSLSocket.group() -\u003e str:\n \"\"\"Return the group used for key agreement, after the TLS handshake completes.\"\"\"\n```\n\nThese methods are designed to directly mimic the existing methods for getting and setting ciphers suites. Prior to TLS 1.3, all of this could be done with just setting ciphers, but that's no longer the case.\n\nThis proposal provides a superset of the functionality requested in #109945, allowing not only multiple EC curves to be specified but also allowing other mechanisms like fixed field DHE and post-quantum algorithms added in OpenSSL 3.5. In fact, once the `set_groups()` method is available the existing `set_ecdh_curve()` method could be deprecated, as the methods it calls are available all the way to OpenSSL 1.1.1, which is now the minimum supported OpenSSL version for Python.\n\nThe `group()` and `get_groups()` methods require later versions of OpenSSL (3.2 and 3.5, respectively), but the code can check for this and raise a NotImplemented exception if the version of OpenSSL that Python is built against is too old to support them.\n\n### Links to previous discussion of this feature:\n\nPrevious discussion occurred in PR #119244, and it was suggested that it might be best to create a new issue and PR, since the previous request might not be monitored any more.\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-136307\n* gh-137405\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/ronf","@type":"Person","name":"ronf"},"datePublished":"2025-07-04T22:22:54.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":10},"url":"https://github.com/136306/cpython/issues/136306"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:936b3f04-a09b-3162-6379-7fa1df7c2754 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9A2C:3545E1:1084B26:1563E35:696B0C8E |
| html-safe-nonce | 528d5a7f70915f5af14b6c7561850be9d633d7ded0fab10a73d78d5de20edcd9 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5QTJDOjM1NDVFMToxMDg0QjI2OjE1NjNFMzU6Njk2QjBDOEUiLCJ2aXNpdG9yX2lkIjoiNDU2OTE2NjQzMjM3NjEzMDcwMyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 2ab72a5b086703000f6f26950639a8c753a142b7ea327f6fe755b88778b9c22e |
| hovercard-subject-tag | issue:3203790359 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/136306/issue_layout |
| twitter:image | https://opengraph.githubassets.com/36e9f0d6992fbe228d02c758c0015ef7a06160fa1c4190faedbe6eed71ef8365/python/cpython/issues/136306 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/36e9f0d6992fbe228d02c758c0015ef7a06160fa1c4190faedbe6eed71ef8365/python/cpython/issues/136306 |
| og:image:alt | Add support for getting/setting groups used for key agreement Proposal: This feature proposal is an expansion of the feature proposed in issue #109945. It began as a discussion on the PR where I pr... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | ronf |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5f99f7c1d70f01da5b93e5ca90303359738944d8ab470e396496262c66e60b8d |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 82560a55c6b2054555076f46e683151ee28a19bc |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width