diff mbox series

python: backport patches to support openssl 3.4.0

Message ID 20241129182720.1487822-1-peter.marko@siemens.com
State New
Headers show
Series python: backport patches to support openssl 3.4.0 | expand

Commit Message

Marko, Peter Nov. 29, 2024, 6:27 p.m. UTC
From: Peter Marko <peter.marko@siemens.com>

https://github.com/python/cpython/pull/127331
https://github.com/python/cpython/pull/127361

Signed-off-by: Peter Marko <peter.marko@siemens.com>
---
 ...r-OpenSSL-3.4-and-add-it-to-multissl.patch | 1452 +++++++++++++++++
 ...01-ssl-Raise-OSError-for-ERR_LIB_SYS.patch |   51 +
 .../recipes-devtools/python/python3_3.13.0.bb |    2 +
 3 files changed, 1505 insertions(+)
 create mode 100644 meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
 create mode 100644 meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch

Comments

Khem Raj Nov. 30, 2024, 7:01 p.m. UTC | #1
I think this along with openssl 3.4 upgrade is causing
python3-m2crypto to break see

https://valkyrie.yoctoproject.org/#/builders/81/builds/180/steps/14/logs/stdio

On Fri, Nov 29, 2024 at 10:28 AM Peter Marko via
lists.openembedded.org
<peter.marko=siemens.com@lists.openembedded.org> wrote:
>
> From: Peter Marko <peter.marko@siemens.com>
>
> https://github.com/python/cpython/pull/127331
> https://github.com/python/cpython/pull/127361
>
> Signed-off-by: Peter Marko <peter.marko@siemens.com>
> ---
>  ...r-OpenSSL-3.4-and-add-it-to-multissl.patch | 1452 +++++++++++++++++
>  ...01-ssl-Raise-OSError-for-ERR_LIB_SYS.patch |   51 +
>  .../recipes-devtools/python/python3_3.13.0.bb |    2 +
>  3 files changed, 1505 insertions(+)
>  create mode 100644 meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
>  create mode 100644 meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch
>
> diff --git a/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch b/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
> new file mode 100644
> index 0000000000..d8ad803d50
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
> @@ -0,0 +1,1452 @@
> +From db5c5763f3e3172f1dd011355b41469770dafc0f Mon Sep 17 00:00:00 2001
> +From: Petr Viktorin <encukou@gmail.com>
> +Date: Thu, 28 Nov 2024 13:29:27 +0100
> +Subject: [PATCH] gh-127330: Update for OpenSSL 3.4 & document+improve the
> + update process (GH-127331)
> +
> +- Add `git describe` output to headers generated by `make_ssl_data.py`
> +
> +  This info is more important than the date when the file was generated.
> +  It does mean that the tool now requires a Git checkout of OpenSSL,
> +  not for example a release tarball.
> +
> +- Regenerate the older file to add the info.
> +  To the other older file, add a note about manual edits.
> +
> +- Add notes on how to add a new OpenSSL version
> +
> +- Add 3.4 error messages and multissl tests
> +
> +Upstream-Status: Submitted [https://github.com/python/cpython/commit/db5c5763f3e3172f1dd011355b41469770dafc0f]
> +Signed-off-by: Peter Marko <peter.marko@siemens.com>
> +---
> + Modules/_ssl.c                             |   2 +-
> + Modules/_ssl_data_111.h                    |   4 +-
> + Modules/_ssl_data_300.h                    |   5 +-
> + Modules/{_ssl_data_31.h => _ssl_data_34.h} | 674 ++++++++++++++++++++-
> + Tools/c-analyzer/cpython/_parser.py        |   4 +-
> + Tools/ssl/make_ssl_data.py                 |  34 +-
> + Tools/ssl/multissltests.py                 |   1 +
> + 7 files changed, 714 insertions(+), 10 deletions(-)
> + rename Modules/{_ssl_data_31.h => _ssl_data_34.h} (92%)
> +
> +diff --git a/Modules/_ssl.c b/Modules/_ssl.c
> +index b6b5ebf094c..e5b8bf21002 100644
> +--- a/Modules/_ssl.c
> ++++ b/Modules/_ssl.c
> +@@ -122,7 +122,7 @@ static void _PySSLFixErrno(void) {
> +
> + /* Include generated data (error codes) */
> + #if (OPENSSL_VERSION_NUMBER >= 0x30100000L)
> +-#include "_ssl_data_31.h"
> ++#include "_ssl_data_34.h"
> + #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L)
> + #include "_ssl_data_300.h"
> + #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L)
> +diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h
> +index 093c786e6a2..061fac2bd58 100644
> +--- a/Modules/_ssl_data_111.h
> ++++ b/Modules/_ssl_data_111.h
> +@@ -1,4 +1,6 @@
> +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T02:58:04.081473 */
> ++/* File generated by Tools/ssl/make_ssl_data.py */
> ++/* Generated on 2024-11-27T12:48:46.194048+00:00 */
> ++/* Generated from Git commit OpenSSL_1_1_1w-0-ge04bd3433f */
> + static struct py_ssl_library_code library_codes[] = {
> + #ifdef ERR_LIB_ASN1
> +     {"ASN1", ERR_LIB_ASN1},
> +diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h
> +index dc66731f6b6..b687ce43c77 100644
> +--- a/Modules/_ssl_data_300.h
> ++++ b/Modules/_ssl_data_300.h
> +@@ -1,4 +1,7 @@
> +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:03:52.163218 */
> ++/* File generated by Tools/ssl/make_ssl_data.py */
> ++/* Generated on 2023-06-01T03:03:52.163218 */
> ++/* Manually edited to add definitions from 1.1.1 (GH-105174) */
> ++
> + static struct py_ssl_library_code library_codes[] = {
> + #ifdef ERR_LIB_ASN1
> +     {"ASN1", ERR_LIB_ASN1},
> +diff --git a/Modules/_ssl_data_31.h b/Modules/_ssl_data_34.h
> +similarity index 92%
> +rename from Modules/_ssl_data_31.h
> +rename to Modules/_ssl_data_34.h
> +index c589c501f4e..d4af3e1c1fa 100644
> +--- a/Modules/_ssl_data_31.h
> ++++ b/Modules/_ssl_data_34.h
> +@@ -1,4 +1,6 @@
> +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:04:00.275280 */
> ++/* File generated by Tools/ssl/make_ssl_data.py */
> ++/* Generated on 2024-11-27T12:35:52.276767+00:00 */
> ++/* Generated from Git commit openssl-3.4.0-0-g98acb6b028 */
> + static struct py_ssl_library_code library_codes[] = {
> + #ifdef ERR_LIB_ASN1
> +     {"ASN1", ERR_LIB_ASN1},
> +@@ -300,6 +302,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"FIRST_NUM_TOO_LARGE", 13, 122},
> +   #endif
> ++  #ifdef ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT
> ++    {"GENERALIZEDTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT},
> ++  #else
> ++    {"GENERALIZEDTIME_IS_TOO_SHORT", 13, 232},
> ++  #endif
> +   #ifdef ASN1_R_HEADER_TOO_LONG
> +     {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG},
> +   #else
> +@@ -730,6 +737,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_TYPE", 13, 196},
> +   #endif
> ++  #ifdef ASN1_R_UTCTIME_IS_TOO_SHORT
> ++    {"UTCTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_UTCTIME_IS_TOO_SHORT},
> ++  #else
> ++    {"UTCTIME_IS_TOO_SHORT", 13, 233},
> ++  #endif
> +   #ifdef ASN1_R_WRONG_INTEGER_TYPE
> +     {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE},
> +   #else
> +@@ -845,6 +857,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"LISTEN_V6_ONLY", 32, 136},
> +   #endif
> ++  #ifdef BIO_R_LOCAL_ADDR_NOT_AVAILABLE
> ++    {"LOCAL_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_LOCAL_ADDR_NOT_AVAILABLE},
> ++  #else
> ++    {"LOCAL_ADDR_NOT_AVAILABLE", 32, 111},
> ++  #endif
> +   #ifdef BIO_R_LOOKUP_RETURNED_NOTHING
> +     {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING},
> +   #else
> +@@ -860,6 +877,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NBIO_CONNECT_ERROR", 32, 110},
> +   #endif
> ++  #ifdef BIO_R_NON_FATAL
> ++    {"NON_FATAL", ERR_LIB_BIO, BIO_R_NON_FATAL},
> ++  #else
> ++    {"NON_FATAL", 32, 112},
> ++  #endif
> +   #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED
> +     {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED},
> +   #else
> +@@ -880,6 +902,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NO_SUCH_FILE", 32, 128},
> +   #endif
> ++  #ifdef BIO_R_PEER_ADDR_NOT_AVAILABLE
> ++    {"PEER_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_PEER_ADDR_NOT_AVAILABLE},
> ++  #else
> ++    {"PEER_ADDR_NOT_AVAILABLE", 32, 114},
> ++  #endif
> ++  #ifdef BIO_R_PORT_MISMATCH
> ++    {"PORT_MISMATCH", ERR_LIB_BIO, BIO_R_PORT_MISMATCH},
> ++  #else
> ++    {"PORT_MISMATCH", 32, 150},
> ++  #endif
> ++  #ifdef BIO_R_TFO_DISABLED
> ++    {"TFO_DISABLED", ERR_LIB_BIO, BIO_R_TFO_DISABLED},
> ++  #else
> ++    {"TFO_DISABLED", 32, 106},
> ++  #endif
> ++  #ifdef BIO_R_TFO_NO_KERNEL_SUPPORT
> ++    {"TFO_NO_KERNEL_SUPPORT", ERR_LIB_BIO, BIO_R_TFO_NO_KERNEL_SUPPORT},
> ++  #else
> ++    {"TFO_NO_KERNEL_SUPPORT", 32, 108},
> ++  #endif
> +   #ifdef BIO_R_TRANSFER_ERROR
> +     {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR},
> +   #else
> +@@ -920,6 +962,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNABLE_TO_REUSEADDR", 32, 139},
> +   #endif
> ++  #ifdef BIO_R_UNABLE_TO_TFO
> ++    {"UNABLE_TO_TFO", ERR_LIB_BIO, BIO_R_UNABLE_TO_TFO},
> ++  #else
> ++    {"UNABLE_TO_TFO", 32, 109},
> ++  #endif
> +   #ifdef BIO_R_UNAVAILABLE_IP_FAMILY
> +     {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY},
> +   #else
> +@@ -1230,6 +1277,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"ERROR_VALIDATING_SIGNATURE", 58, 171},
> +   #endif
> ++  #ifdef CMP_R_EXPECTED_POLLREQ
> ++    {"EXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ},
> ++  #else
> ++    {"EXPECTED_POLLREQ", 58, 104},
> ++  #endif
> +   #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN
> +     {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN},
> +   #else
> +@@ -1250,16 +1302,51 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"FAIL_INFO_OUT_OF_RANGE", 58, 129},
> +   #endif
> ++  #ifdef CMP_R_GENERATE_CERTREQTEMPLATE
> ++    {"GENERATE_CERTREQTEMPLATE", ERR_LIB_CMP, CMP_R_GENERATE_CERTREQTEMPLATE},
> ++  #else
> ++    {"GENERATE_CERTREQTEMPLATE", 58, 197},
> ++  #endif
> ++  #ifdef CMP_R_GENERATE_CRLSTATUS
> ++    {"GENERATE_CRLSTATUS", ERR_LIB_CMP, CMP_R_GENERATE_CRLSTATUS},
> ++  #else
> ++    {"GENERATE_CRLSTATUS", 58, 198},
> ++  #endif
> ++  #ifdef CMP_R_GETTING_GENP
> ++    {"GETTING_GENP", ERR_LIB_CMP, CMP_R_GETTING_GENP},
> ++  #else
> ++    {"GETTING_GENP", 58, 192},
> ++  #endif
> ++  #ifdef CMP_R_GET_ITAV
> ++    {"GET_ITAV", ERR_LIB_CMP, CMP_R_GET_ITAV},
> ++  #else
> ++    {"GET_ITAV", 58, 199},
> ++  #endif
> +   #ifdef CMP_R_INVALID_ARGS
> +     {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS},
> +   #else
> +     {"INVALID_ARGS", 58, 100},
> +   #endif
> ++  #ifdef CMP_R_INVALID_GENP
> ++    {"INVALID_GENP", ERR_LIB_CMP, CMP_R_INVALID_GENP},
> ++  #else
> ++    {"INVALID_GENP", 58, 193},
> ++  #endif
> ++  #ifdef CMP_R_INVALID_KEYSPEC
> ++    {"INVALID_KEYSPEC", ERR_LIB_CMP, CMP_R_INVALID_KEYSPEC},
> ++  #else
> ++    {"INVALID_KEYSPEC", 58, 202},
> ++  #endif
> +   #ifdef CMP_R_INVALID_OPTION
> +     {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION},
> +   #else
> +     {"INVALID_OPTION", 58, 174},
> +   #endif
> ++  #ifdef CMP_R_INVALID_ROOTCAKEYUPDATE
> ++    {"INVALID_ROOTCAKEYUPDATE", ERR_LIB_CMP, CMP_R_INVALID_ROOTCAKEYUPDATE},
> ++  #else
> ++    {"INVALID_ROOTCAKEYUPDATE", 58, 195},
> ++  #endif
> +   #ifdef CMP_R_MISSING_CERTID
> +     {"MISSING_CERTID", ERR_LIB_CMP, CMP_R_MISSING_CERTID},
> +   #else
> +@@ -1425,6 +1512,21 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TRANSFER_ERROR", 58, 159},
> +   #endif
> ++  #ifdef CMP_R_UNCLEAN_CTX
> ++    {"UNCLEAN_CTX", ERR_LIB_CMP, CMP_R_UNCLEAN_CTX},
> ++  #else
> ++    {"UNCLEAN_CTX", 58, 191},
> ++  #endif
> ++  #ifdef CMP_R_UNEXPECTED_CERTPROFILE
> ++    {"UNEXPECTED_CERTPROFILE", ERR_LIB_CMP, CMP_R_UNEXPECTED_CERTPROFILE},
> ++  #else
> ++    {"UNEXPECTED_CERTPROFILE", 58, 196},
> ++  #endif
> ++  #ifdef CMP_R_UNEXPECTED_CRLSTATUSLIST
> ++    {"UNEXPECTED_CRLSTATUSLIST", ERR_LIB_CMP, CMP_R_UNEXPECTED_CRLSTATUSLIST},
> ++  #else
> ++    {"UNEXPECTED_CRLSTATUSLIST", 58, 201},
> ++  #endif
> +   #ifdef CMP_R_UNEXPECTED_PKIBODY
> +     {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY},
> +   #else
> +@@ -1435,11 +1537,21 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNEXPECTED_PKISTATUS", 58, 185},
> +   #endif
> ++  #ifdef CMP_R_UNEXPECTED_POLLREQ
> ++    {"UNEXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_UNEXPECTED_POLLREQ},
> ++  #else
> ++    {"UNEXPECTED_POLLREQ", 58, 105},
> ++  #endif
> +   #ifdef CMP_R_UNEXPECTED_PVNO
> +     {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO},
> +   #else
> +     {"UNEXPECTED_PVNO", 58, 153},
> +   #endif
> ++  #ifdef CMP_R_UNEXPECTED_SENDER
> ++    {"UNEXPECTED_SENDER", ERR_LIB_CMP, CMP_R_UNEXPECTED_SENDER},
> ++  #else
> ++    {"UNEXPECTED_SENDER", 58, 106},
> ++  #endif
> +   #ifdef CMP_R_UNKNOWN_ALGORITHM_ID
> +     {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID},
> +   #else
> +@@ -1450,6 +1562,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNKNOWN_CERT_TYPE", 58, 135},
> +   #endif
> ++  #ifdef CMP_R_UNKNOWN_CRL_ISSUER
> ++    {"UNKNOWN_CRL_ISSUER", ERR_LIB_CMP, CMP_R_UNKNOWN_CRL_ISSUER},
> ++  #else
> ++    {"UNKNOWN_CRL_ISSUER", 58, 200},
> ++  #endif
> +   #ifdef CMP_R_UNKNOWN_PKISTATUS
> +     {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS},
> +   #else
> +@@ -1465,6 +1582,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_KEY_TYPE", 58, 137},
> +   #endif
> ++  #ifdef CMP_R_UNSUPPORTED_PKIBODY
> ++    {"UNSUPPORTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PKIBODY},
> ++  #else
> ++    {"UNSUPPORTED_PKIBODY", 58, 101},
> ++  #endif
> +   #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC
> +     {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC},
> +   #else
> +@@ -1825,6 +1947,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NO_SIGNERS", 46, 135},
> +   #endif
> ++  #ifdef CMS_R_OPERATION_UNSUPPORTED
> ++    {"OPERATION_UNSUPPORTED", ERR_LIB_CMS, CMS_R_OPERATION_UNSUPPORTED},
> ++  #else
> ++    {"OPERATION_UNSUPPORTED", 46, 182},
> ++  #endif
> +   #ifdef CMS_R_PEER_KEY_ERROR
> +     {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR},
> +   #else
> +@@ -1960,6 +2087,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154},
> +   #endif
> ++  #ifdef CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM
> ++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM},
> ++  #else
> ++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", 46, 195},
> ++  #endif
> +   #ifdef CMS_R_UNSUPPORTED_TYPE
> +     {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE},
> +   #else
> +@@ -1985,6 +2117,31 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"WRAP_ERROR", 46, 159},
> +   #endif
> ++  #ifdef COMP_R_BROTLI_DECODE_ERROR
> ++    {"BROTLI_DECODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DECODE_ERROR},
> ++  #else
> ++    {"BROTLI_DECODE_ERROR", 41, 102},
> ++  #endif
> ++  #ifdef COMP_R_BROTLI_DEFLATE_ERROR
> ++    {"BROTLI_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DEFLATE_ERROR},
> ++  #else
> ++    {"BROTLI_DEFLATE_ERROR", 41, 103},
> ++  #endif
> ++  #ifdef COMP_R_BROTLI_ENCODE_ERROR
> ++    {"BROTLI_ENCODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_ENCODE_ERROR},
> ++  #else
> ++    {"BROTLI_ENCODE_ERROR", 41, 106},
> ++  #endif
> ++  #ifdef COMP_R_BROTLI_INFLATE_ERROR
> ++    {"BROTLI_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_INFLATE_ERROR},
> ++  #else
> ++    {"BROTLI_INFLATE_ERROR", 41, 104},
> ++  #endif
> ++  #ifdef COMP_R_BROTLI_NOT_SUPPORTED
> ++    {"BROTLI_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_BROTLI_NOT_SUPPORTED},
> ++  #else
> ++    {"BROTLI_NOT_SUPPORTED", 41, 105},
> ++  #endif
> +   #ifdef COMP_R_ZLIB_DEFLATE_ERROR
> +     {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR},
> +   #else
> +@@ -2000,6 +2157,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"ZLIB_NOT_SUPPORTED", 41, 101},
> +   #endif
> ++  #ifdef COMP_R_ZSTD_COMPRESS_ERROR
> ++    {"ZSTD_COMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_COMPRESS_ERROR},
> ++  #else
> ++    {"ZSTD_COMPRESS_ERROR", 41, 107},
> ++  #endif
> ++  #ifdef COMP_R_ZSTD_DECODE_ERROR
> ++    {"ZSTD_DECODE_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECODE_ERROR},
> ++  #else
> ++    {"ZSTD_DECODE_ERROR", 41, 108},
> ++  #endif
> ++  #ifdef COMP_R_ZSTD_DECOMPRESS_ERROR
> ++    {"ZSTD_DECOMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECOMPRESS_ERROR},
> ++  #else
> ++    {"ZSTD_DECOMPRESS_ERROR", 41, 109},
> ++  #endif
> ++  #ifdef COMP_R_ZSTD_NOT_SUPPORTED
> ++    {"ZSTD_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZSTD_NOT_SUPPORTED},
> ++  #else
> ++    {"ZSTD_NOT_SUPPORTED", 41, 110},
> ++  #endif
> +   #ifdef CONF_R_ERROR_LOADING_DSO
> +     {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO},
> +   #else
> +@@ -2085,6 +2262,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111},
> +   #endif
> ++  #ifdef CONF_R_RECURSIVE_SECTION_REFERENCE
> ++    {"RECURSIVE_SECTION_REFERENCE", ERR_LIB_CONF, CONF_R_RECURSIVE_SECTION_REFERENCE},
> ++  #else
> ++    {"RECURSIVE_SECTION_REFERENCE", 14, 126},
> ++  #endif
> +   #ifdef CONF_R_RELATIVE_PATH
> +     {"RELATIVE_PATH", ERR_LIB_CONF, CONF_R_RELATIVE_PATH},
> +   #else
> +@@ -2370,6 +2552,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TOO_MANY_BYTES", 15, 113},
> +   #endif
> ++  #ifdef CRYPTO_R_TOO_MANY_NAMES
> ++    {"TOO_MANY_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_NAMES},
> ++  #else
> ++    {"TOO_MANY_NAMES", 15, 132},
> ++  #endif
> +   #ifdef CRYPTO_R_TOO_MANY_RECORDS
> +     {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS},
> +   #else
> +@@ -2560,6 +2747,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_SECRET", 5, 128},
> +   #endif
> ++  #ifdef DH_R_INVALID_SIZE
> ++    {"INVALID_SIZE", ERR_LIB_DH, DH_R_INVALID_SIZE},
> ++  #else
> ++    {"INVALID_SIZE", 5, 129},
> ++  #endif
> +   #ifdef DH_R_KDF_PARAMETER_ERROR
> +     {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR},
> +   #else
> +@@ -2610,6 +2802,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"PEER_KEY_ERROR", 5, 111},
> +   #endif
> ++  #ifdef DH_R_Q_TOO_LARGE
> ++    {"Q_TOO_LARGE", ERR_LIB_DH, DH_R_Q_TOO_LARGE},
> ++  #else
> ++    {"Q_TOO_LARGE", 5, 130},
> ++  #endif
> +   #ifdef DH_R_SHARED_INFO_ERROR
> +     {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR},
> +   #else
> +@@ -3545,6 +3742,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"GENERATE_ERROR", 6, 214},
> +   #endif
> ++  #ifdef EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED
> ++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED},
> ++  #else
> ++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", 6, 229},
> ++  #endif
> +   #ifdef EVP_R_GET_RAW_KEY_FAILED
> +     {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED},
> +   #else
> +@@ -3745,6 +3947,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150},
> +   #endif
> ++  #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE
> ++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE},
> ++  #else
> ++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", 6, 226},
> ++  #endif
> +   #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW
> +     {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW},
> +   #else
> +@@ -3795,6 +4002,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209},
> +   #endif
> ++  #ifdef EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE
> ++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", ERR_LIB_EVP, EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE},
> ++  #else
> ++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", 6, 228},
> ++  #endif
> +   #ifdef EVP_R_TOO_MANY_RECORDS
> +     {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS},
> +   #else
> +@@ -3825,6 +4037,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNABLE_TO_SET_CALLBACKS", 6, 217},
> +   #endif
> ++  #ifdef EVP_R_UNKNOWN_BITS
> ++    {"UNKNOWN_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_BITS},
> ++  #else
> ++    {"UNKNOWN_BITS", 6, 166},
> ++  #endif
> +   #ifdef EVP_R_UNKNOWN_CIPHER
> +     {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER},
> +   #else
> +@@ -3840,6 +4057,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNKNOWN_KEY_TYPE", 6, 207},
> +   #endif
> ++  #ifdef EVP_R_UNKNOWN_MAX_SIZE
> ++    {"UNKNOWN_MAX_SIZE", ERR_LIB_EVP, EVP_R_UNKNOWN_MAX_SIZE},
> ++  #else
> ++    {"UNKNOWN_MAX_SIZE", 6, 167},
> ++  #endif
> +   #ifdef EVP_R_UNKNOWN_OPTION
> +     {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION},
> +   #else
> +@@ -3850,6 +4072,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNKNOWN_PBE_ALGORITHM", 6, 121},
> +   #endif
> ++  #ifdef EVP_R_UNKNOWN_SECURITY_BITS
> ++    {"UNKNOWN_SECURITY_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_SECURITY_BITS},
> ++  #else
> ++    {"UNKNOWN_SECURITY_BITS", 6, 168},
> ++  #endif
> +   #ifdef EVP_R_UNSUPPORTED_ALGORITHM
> +     {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM},
> +   #else
> +@@ -4040,6 +4267,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"RESPONSE_PARSE_ERROR", 61, 104},
> +   #endif
> ++  #ifdef HTTP_R_RESPONSE_TOO_MANY_HDRLINES
> ++    {"RESPONSE_TOO_MANY_HDRLINES", ERR_LIB_HTTP, HTTP_R_RESPONSE_TOO_MANY_HDRLINES},
> ++  #else
> ++    {"RESPONSE_TOO_MANY_HDRLINES", 61, 130},
> ++  #endif
> +   #ifdef HTTP_R_RETRY_TIMEOUT
> +     {"RETRY_TIMEOUT", ERR_LIB_HTTP, HTTP_R_RETRY_TIMEOUT},
> +   #else
> +@@ -4530,6 +4762,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110},
> +   #endif
> ++  #ifdef PKCS12_R_CALLBACK_FAILED
> ++    {"CALLBACK_FAILED", ERR_LIB_PKCS12, PKCS12_R_CALLBACK_FAILED},
> ++  #else
> ++    {"CALLBACK_FAILED", 35, 115},
> ++  #endif
> +   #ifdef PKCS12_R_CANT_PACK_STRUCTURE
> +     {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE},
> +   #else
> +@@ -4920,6 +5157,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"CIPHER_OPERATION_FAILED", 57, 102},
> +   #endif
> ++  #ifdef PROV_R_COFACTOR_REQUIRED
> ++    {"COFACTOR_REQUIRED", ERR_LIB_PROV, PROV_R_COFACTOR_REQUIRED},
> ++  #else
> ++    {"COFACTOR_REQUIRED", 57, 236},
> ++  #endif
> +   #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED
> +     {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED},
> +   #else
> +@@ -4935,6 +5177,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"EMS_NOT_ENABLED", 57, 233},
> +   #endif
> ++  #ifdef PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS
> ++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS},
> ++  #else
> ++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", 57, 244},
> ++  #endif
> +   #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK
> +     {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK},
> +   #else
> +@@ -4990,6 +5237,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"FAILED_TO_SIGN", 57, 175},
> +   #endif
> ++  #ifdef PROV_R_FINAL_CALL_OUT_OF_ORDER
> ++    {"FINAL_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER},
> ++  #else
> ++    {"FINAL_CALL_OUT_OF_ORDER", 57, 237},
> ++  #endif
> +   #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR
> +     {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR},
> +   #else
> +@@ -5020,6 +5272,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INDICATOR_INTEGRITY_FAILURE", 57, 210},
> +   #endif
> ++  #ifdef PROV_R_INIT_CALL_OUT_OF_ORDER
> ++    {"INIT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_INIT_CALL_OUT_OF_ORDER},
> ++  #else
> ++    {"INIT_CALL_OUT_OF_ORDER", 57, 238},
> ++  #endif
> +   #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH
> +     {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH},
> +   #else
> +@@ -5030,6 +5287,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_AAD", 57, 108},
> +   #endif
> ++  #ifdef PROV_R_INVALID_AEAD
> ++    {"INVALID_AEAD", ERR_LIB_PROV, PROV_R_INVALID_AEAD},
> ++  #else
> ++    {"INVALID_AEAD", 57, 231},
> ++  #endif
> +   #ifdef PROV_R_INVALID_CONFIG_DATA
> +     {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA},
> +   #else
> +@@ -5070,6 +5332,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_DIGEST_SIZE", 57, 218},
> +   #endif
> ++  #ifdef PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION
> ++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", ERR_LIB_PROV, PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION},
> ++  #else
> ++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", 57, 243},
> ++  #endif
> +   #ifdef PROV_R_INVALID_INPUT_LENGTH
> +     {"INVALID_INPUT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_INPUT_LENGTH},
> +   #else
> +@@ -5085,6 +5352,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_IV_LENGTH", 57, 109},
> +   #endif
> ++  #ifdef PROV_R_INVALID_KDF
> ++    {"INVALID_KDF", ERR_LIB_PROV, PROV_R_INVALID_KDF},
> ++  #else
> ++    {"INVALID_KDF", 57, 232},
> ++  #endif
> +   #ifdef PROV_R_INVALID_KEY
> +     {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY},
> +   #else
> +@@ -5100,6 +5372,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_MAC", 57, 151},
> +   #endif
> ++  #ifdef PROV_R_INVALID_MEMORY_SIZE
> ++    {"INVALID_MEMORY_SIZE", ERR_LIB_PROV, PROV_R_INVALID_MEMORY_SIZE},
> ++  #else
> ++    {"INVALID_MEMORY_SIZE", 57, 235},
> ++  #endif
> +   #ifdef PROV_R_INVALID_MGF1_MD
> +     {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD},
> +   #else
> +@@ -5120,6 +5397,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_PADDING_MODE", 57, 168},
> +   #endif
> ++  #ifdef PROV_R_INVALID_PREHASHED_DIGEST_LENGTH
> ++    {"INVALID_PREHASHED_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_PREHASHED_DIGEST_LENGTH},
> ++  #else
> ++    {"INVALID_PREHASHED_DIGEST_LENGTH", 57, 241},
> ++  #endif
> +   #ifdef PROV_R_INVALID_PUBINFO
> +     {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO},
> +   #else
> +@@ -5155,6 +5437,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_TAG_LENGTH", 57, 118},
> +   #endif
> ++  #ifdef PROV_R_INVALID_THREAD_POOL_SIZE
> ++    {"INVALID_THREAD_POOL_SIZE", ERR_LIB_PROV, PROV_R_INVALID_THREAD_POOL_SIZE},
> ++  #else
> ++    {"INVALID_THREAD_POOL_SIZE", 57, 234},
> ++  #endif
> +   #ifdef PROV_R_INVALID_UKM_LENGTH
> +     {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH},
> +   #else
> +@@ -5300,6 +5587,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NOT_XOF_OR_INVALID_LENGTH", 57, 113},
> +   #endif
> ++  #ifdef PROV_R_NO_INSTANCE_ALLOWED
> ++    {"NO_INSTANCE_ALLOWED", ERR_LIB_PROV, PROV_R_NO_INSTANCE_ALLOWED},
> ++  #else
> ++    {"NO_INSTANCE_ALLOWED", 57, 242},
> ++  #endif
> +   #ifdef PROV_R_NO_KEY_SET
> +     {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET},
> +   #else
> +@@ -5310,6 +5602,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NO_PARAMETERS_SET", 57, 177},
> +   #endif
> ++  #ifdef PROV_R_ONESHOT_CALL_OUT_OF_ORDER
> ++    {"ONESHOT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER},
> ++  #else
> ++    {"ONESHOT_CALL_OUT_OF_ORDER", 57, 239},
> ++  #endif
> +   #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
> +     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE},
> +   #else
> +@@ -5460,6 +5757,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152},
> +   #endif
> ++  #ifdef PROV_R_UPDATE_CALL_OUT_OF_ORDER
> ++    {"UPDATE_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_UPDATE_CALL_OUT_OF_ORDER},
> ++  #else
> ++    {"UPDATE_CALL_OUT_OF_ORDER", 57, 240},
> ++  #endif
> +   #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED
> +     {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED},
> +   #else
> +@@ -5595,6 +5897,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INTERNAL_ERROR", 36, 113},
> +   #endif
> ++  #ifdef RAND_R_INVALID_PROPERTY_QUERY
> ++    {"INVALID_PROPERTY_QUERY", ERR_LIB_RAND, RAND_R_INVALID_PROPERTY_QUERY},
> ++  #else
> ++    {"INVALID_PROPERTY_QUERY", 36, 137},
> ++  #endif
> +   #ifdef RAND_R_IN_ERROR_STATE
> +     {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE},
> +   #else
> +@@ -6210,6 +6517,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158},
> +   #endif
> ++  #ifdef SSL_R_BAD_CERTIFICATE
> ++    {"BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_BAD_CERTIFICATE},
> ++  #else
> ++    {"BAD_CERTIFICATE", 20, 348},
> ++  #endif
> +   #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC
> +     {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC},
> +   #else
> +@@ -6220,6 +6532,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"BAD_CIPHER", 20, 186},
> +   #endif
> ++  #ifdef SSL_R_BAD_COMPRESSION_ALGORITHM
> ++    {"BAD_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_BAD_COMPRESSION_ALGORITHM},
> ++  #else
> ++    {"BAD_COMPRESSION_ALGORITHM", 20, 326},
> ++  #endif
> +   #ifdef SSL_R_BAD_DATA
> +     {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA},
> +   #else
> +@@ -6495,6 +6812,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"CONNECTION_TYPE_NOT_SET", 20, 144},
> +   #endif
> ++  #ifdef SSL_R_CONN_USE_ONLY
> ++    {"CONN_USE_ONLY", ERR_LIB_SSL, SSL_R_CONN_USE_ONLY},
> ++  #else
> ++    {"CONN_USE_ONLY", 20, 356},
> ++  #endif
> +   #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED
> +     {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED},
> +   #else
> +@@ -6635,6 +6957,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"EE_KEY_TOO_SMALL", 20, 399},
> +   #endif
> ++  #ifdef SSL_R_EMPTY_RAW_PUBLIC_KEY
> ++    {"EMPTY_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_EMPTY_RAW_PUBLIC_KEY},
> ++  #else
> ++    {"EMPTY_RAW_PUBLIC_KEY", 20, 349},
> ++  #endif
> +   #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST
> +     {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST},
> +   #else
> +@@ -6650,6 +6977,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151},
> +   #endif
> ++  #ifdef SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG
> ++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG},
> ++  #else
> ++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", 20, 419},
> ++  #endif
> +   #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN
> +     {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN},
> +   #else
> +@@ -6680,11 +7012,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"EXT_LENGTH_MISMATCH", 20, 163},
> +   #endif
> ++  #ifdef SSL_R_FAILED_TO_GET_PARAMETER
> ++    {"FAILED_TO_GET_PARAMETER", ERR_LIB_SSL, SSL_R_FAILED_TO_GET_PARAMETER},
> ++  #else
> ++    {"FAILED_TO_GET_PARAMETER", 20, 316},
> ++  #endif
> +   #ifdef SSL_R_FAILED_TO_INIT_ASYNC
> +     {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC},
> +   #else
> +     {"FAILED_TO_INIT_ASYNC", 20, 405},
> +   #endif
> ++  #ifdef SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE
> ++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", ERR_LIB_SSL, SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE},
> ++  #else
> ++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", 20, 417},
> ++  #endif
> ++  #ifdef SSL_R_FEATURE_NOT_RENEGOTIABLE
> ++    {"FEATURE_NOT_RENEGOTIABLE", ERR_LIB_SSL, SSL_R_FEATURE_NOT_RENEGOTIABLE},
> ++  #else
> ++    {"FEATURE_NOT_RENEGOTIABLE", 20, 413},
> ++  #endif
> +   #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO
> +     {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO},
> +   #else
> +@@ -6805,6 +7152,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"INVALID_NULL_CMD_NAME", 20, 385},
> +   #endif
> ++  #ifdef SSL_R_INVALID_RAW_PUBLIC_KEY
> ++    {"INVALID_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_INVALID_RAW_PUBLIC_KEY},
> ++  #else
> ++    {"INVALID_RAW_PUBLIC_KEY", 20, 350},
> ++  #endif
> ++  #ifdef SSL_R_INVALID_RECORD
> ++    {"INVALID_RECORD", ERR_LIB_SSL, SSL_R_INVALID_RECORD},
> ++  #else
> ++    {"INVALID_RECORD", 20, 317},
> ++  #endif
> +   #ifdef SSL_R_INVALID_SEQUENCE_NUMBER
> +     {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER},
> +   #else
> +@@ -6865,6 +7222,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"LIBRARY_HAS_NO_CIPHERS", 20, 161},
> +   #endif
> ++  #ifdef SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED
> ++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", ERR_LIB_SSL, SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED},
> ++  #else
> ++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", 20, 395},
> ++  #endif
> +   #ifdef SSL_R_MISSING_DSA_SIGNING_CERT
> +     {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT},
> +   #else
> +@@ -6925,6 +7287,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209},
> +   #endif
> ++  #ifdef SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION
> ++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION},
> ++  #else
> ++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", 20, 420},
> ++  #endif
> +   #ifdef SSL_R_MISSING_TMP_DH_KEY
> +     {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY},
> +   #else
> +@@ -7065,6 +7432,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NO_SRTP_PROFILES", 20, 359},
> +   #endif
> ++  #ifdef SSL_R_NO_STREAM
> ++    {"NO_STREAM", ERR_LIB_SSL, SSL_R_NO_STREAM},
> ++  #else
> ++    {"NO_STREAM", 20, 355},
> ++  #endif
> +   #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM
> +     {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM},
> +   #else
> +@@ -7080,6 +7452,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"NO_SUITABLE_KEY_SHARE", 20, 101},
> +   #endif
> ++  #ifdef SSL_R_NO_SUITABLE_RECORD_LAYER
> ++    {"NO_SUITABLE_RECORD_LAYER", ERR_LIB_SSL, SSL_R_NO_SUITABLE_RECORD_LAYER},
> ++  #else
> ++    {"NO_SUITABLE_RECORD_LAYER", 20, 322},
> ++  #endif
> +   #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM
> +     {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM},
> +   #else
> +@@ -7160,6 +7537,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"PIPELINE_FAILURE", 20, 406},
> +   #endif
> ++  #ifdef SSL_R_POLL_REQUEST_NOT_SUPPORTED
> ++    {"POLL_REQUEST_NOT_SUPPORTED", ERR_LIB_SSL, SSL_R_POLL_REQUEST_NOT_SUPPORTED},
> ++  #else
> ++    {"POLL_REQUEST_NOT_SUPPORTED", 20, 418},
> ++  #endif
> +   #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR
> +     {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR},
> +   #else
> +@@ -7190,6 +7572,21 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"PSK_NO_SERVER_CB", 20, 225},
> +   #endif
> ++  #ifdef SSL_R_QUIC_HANDSHAKE_LAYER_ERROR
> ++    {"QUIC_HANDSHAKE_LAYER_ERROR", ERR_LIB_SSL, SSL_R_QUIC_HANDSHAKE_LAYER_ERROR},
> ++  #else
> ++    {"QUIC_HANDSHAKE_LAYER_ERROR", 20, 393},
> ++  #endif
> ++  #ifdef SSL_R_QUIC_NETWORK_ERROR
> ++    {"QUIC_NETWORK_ERROR", ERR_LIB_SSL, SSL_R_QUIC_NETWORK_ERROR},
> ++  #else
> ++    {"QUIC_NETWORK_ERROR", 20, 387},
> ++  #endif
> ++  #ifdef SSL_R_QUIC_PROTOCOL_ERROR
> ++    {"QUIC_PROTOCOL_ERROR", ERR_LIB_SSL, SSL_R_QUIC_PROTOCOL_ERROR},
> ++  #else
> ++    {"QUIC_PROTOCOL_ERROR", 20, 382},
> ++  #endif
> +   #ifdef SSL_R_READ_BIO_NOT_SET
> +     {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET},
> +   #else
> +@@ -7200,6 +7597,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"READ_TIMEOUT_EXPIRED", 20, 312},
> +   #endif
> ++  #ifdef SSL_R_RECORDS_NOT_RELEASED
> ++    {"RECORDS_NOT_RELEASED", ERR_LIB_SSL, SSL_R_RECORDS_NOT_RELEASED},
> ++  #else
> ++    {"RECORDS_NOT_RELEASED", 20, 321},
> ++  #endif
> ++  #ifdef SSL_R_RECORD_LAYER_FAILURE
> ++    {"RECORD_LAYER_FAILURE", ERR_LIB_SSL, SSL_R_RECORD_LAYER_FAILURE},
> ++  #else
> ++    {"RECORD_LAYER_FAILURE", 20, 313},
> ++  #endif
> +   #ifdef SSL_R_RECORD_LENGTH_MISMATCH
> +     {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH},
> +   #else
> +@@ -7210,6 +7617,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"RECORD_TOO_SMALL", 20, 298},
> +   #endif
> ++  #ifdef SSL_R_REMOTE_PEER_ADDRESS_NOT_SET
> ++    {"REMOTE_PEER_ADDRESS_NOT_SET", ERR_LIB_SSL, SSL_R_REMOTE_PEER_ADDRESS_NOT_SET},
> ++  #else
> ++    {"REMOTE_PEER_ADDRESS_NOT_SET", 20, 346},
> ++  #endif
> +   #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG
> +     {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG},
> +   #else
> +@@ -7255,6 +7667,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SCT_VERIFICATION_FAILED", 20, 208},
> +   #endif
> ++  #ifdef SSL_R_SEQUENCE_CTR_WRAPPED
> ++    {"SEQUENCE_CTR_WRAPPED", ERR_LIB_SSL, SSL_R_SEQUENCE_CTR_WRAPPED},
> ++  #else
> ++    {"SEQUENCE_CTR_WRAPPED", 20, 327},
> ++  #endif
> +   #ifdef SSL_R_SERVERHELLO_TLSEXT
> +     {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT},
> +   #else
> +@@ -7325,6 +7742,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE
> ++    {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE},
> ++  #else
> ++    {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
> ++  #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
> ++    {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
> ++  #else
> ++    {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
> +     {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
> +   #else
> +@@ -7335,11 +7762,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED
> ++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED},
> ++  #else
> ++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
> +     {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
> +   #else
> +     {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
> ++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
> ++  #else
> ++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
> ++  #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
> ++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
> ++  #else
> ++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
> +     {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
> +   #else
> +@@ -7350,6 +7792,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE
> ++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE},
> ++  #else
> ++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
> ++  #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
> ++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
> ++  #else
> ++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
> +     {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
> +   #else
> +@@ -7360,11 +7812,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER
> ++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER},
> ++  #else
> ++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
> +     {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
> +   #else
> +     {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
> ++    {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
> ++  #else
> ++    {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
> ++  #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
> ++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
> ++  #else
> ++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010},
> ++  #endif
> +   #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
> +     {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
> +   #else
> +@@ -7375,6 +7842,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
> +   #endif
> ++  #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
> ++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE},
> ++  #else
> ++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
> ++  #endif
> +   #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY
> +     {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY},
> +   #else
> +@@ -7450,6 +7922,36 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"STILL_IN_INIT", 20, 121},
> +   #endif
> ++  #ifdef SSL_R_STREAM_COUNT_LIMITED
> ++    {"STREAM_COUNT_LIMITED", ERR_LIB_SSL, SSL_R_STREAM_COUNT_LIMITED},
> ++  #else
> ++    {"STREAM_COUNT_LIMITED", 20, 411},
> ++  #endif
> ++  #ifdef SSL_R_STREAM_FINISHED
> ++    {"STREAM_FINISHED", ERR_LIB_SSL, SSL_R_STREAM_FINISHED},
> ++  #else
> ++    {"STREAM_FINISHED", 20, 365},
> ++  #endif
> ++  #ifdef SSL_R_STREAM_RECV_ONLY
> ++    {"STREAM_RECV_ONLY", ERR_LIB_SSL, SSL_R_STREAM_RECV_ONLY},
> ++  #else
> ++    {"STREAM_RECV_ONLY", 20, 366},
> ++  #endif
> ++  #ifdef SSL_R_STREAM_RESET
> ++    {"STREAM_RESET", ERR_LIB_SSL, SSL_R_STREAM_RESET},
> ++  #else
> ++    {"STREAM_RESET", 20, 375},
> ++  #endif
> ++  #ifdef SSL_R_STREAM_SEND_ONLY
> ++    {"STREAM_SEND_ONLY", ERR_LIB_SSL, SSL_R_STREAM_SEND_ONLY},
> ++  #else
> ++    {"STREAM_SEND_ONLY", 20, 379},
> ++  #endif
> ++  #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
> ++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
> ++  #else
> ++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116},
> ++  #endif
> +   #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
> +     {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
> +   #else
> +@@ -7460,6 +7962,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
> +   #endif
> ++  #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION
> ++    {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION},
> ++  #else
> ++    {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
> ++    {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED},
> ++  #else
> ++    {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
> +     {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED},
> +   #else
> +@@ -7470,6 +7982,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR
> ++    {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR},
> ++  #else
> ++    {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
> ++    {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
> ++  #else
> ++    {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
> +     {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
> +   #else
> +@@ -7480,6 +8002,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR
> ++    {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR},
> ++  #else
> ++    {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
> ++    {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
> ++  #else
> ++    {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
> +     {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
> +   #else
> +@@ -7490,6 +8022,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK
> ++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK},
> ++  #else
> ++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
> ++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
> ++  #else
> ++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
> +     {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
> +   #else
> +@@ -7500,6 +8042,26 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR
> ++    {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR},
> ++  #else
> ++    {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
> ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
> ++  #else
> ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
> ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
> ++  #else
> ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
> ++    {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
> ++  #else
> ++    {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
> +     {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
> +   #else
> +@@ -7510,21 +8072,56 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION
> ++    {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION},
> ++  #else
> ++    {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
> +     {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
> +   #else
> +     {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
> ++    {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
> ++  #else
> ++    {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
> ++    {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA},
> ++  #else
> ++    {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
> +     {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA},
> +   #else
> +     {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
> ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
> ++  #else
> ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
> ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
> ++  #else
> ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
> +     {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED},
> +   #else
> +     {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
> ++    {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED},
> ++  #else
> ++    {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
> ++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
> ++  #else
> ++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
> +     {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
> +   #else
> +@@ -7535,6 +8132,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
> ++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE},
> ++  #else
> ++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
> ++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
> ++  #else
> ++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
> +     {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
> +   #else
> +@@ -7545,6 +8152,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
> +   #endif
> ++  #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME
> ++    {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME},
> ++  #else
> ++    {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
> ++  #endif
> ++  #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
> ++    {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
> ++  #else
> ++    {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110},
> ++  #endif
> +   #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
> +     {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
> +   #else
> +@@ -7665,6 +8282,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250},
> +   #endif
> ++  #ifdef SSL_R_UNKNOWN_MANDATORY_PARAMETER
> ++    {"UNKNOWN_MANDATORY_PARAMETER", ERR_LIB_SSL, SSL_R_UNKNOWN_MANDATORY_PARAMETER},
> ++  #else
> ++    {"UNKNOWN_MANDATORY_PARAMETER", 20, 323},
> ++  #endif
> +   #ifdef SSL_R_UNKNOWN_PKEY_TYPE
> +     {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE},
> +   #else
> +@@ -7700,6 +8322,21 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257},
> +   #endif
> ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE
> ++    {"UNSUPPORTED_CONFIG_VALUE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE},
> ++  #else
> ++    {"UNSUPPORTED_CONFIG_VALUE", 20, 414},
> ++  #endif
> ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS
> ++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS},
> ++  #else
> ++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", 20, 415},
> ++  #endif
> ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_OP
> ++    {"UNSUPPORTED_CONFIG_VALUE_OP", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_OP},
> ++  #else
> ++    {"UNSUPPORTED_CONFIG_VALUE_OP", 20, 416},
> ++  #endif
> +   #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE
> +     {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE},
> +   #else
> +@@ -7720,6 +8357,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_STATUS_TYPE", 20, 329},
> +   #endif
> ++  #ifdef SSL_R_UNSUPPORTED_WRITE_FLAG
> ++    {"UNSUPPORTED_WRITE_FLAG", ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG},
> ++  #else
> ++    {"UNSUPPORTED_WRITE_FLAG", 20, 412},
> ++  #endif
> +   #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED
> +     {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED},
> +   #else
> +@@ -7750,6 +8392,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"WRONG_CURVE", 20, 378},
> +   #endif
> ++  #ifdef SSL_R_WRONG_RPK_TYPE
> ++    {"WRONG_RPK_TYPE", ERR_LIB_SSL, SSL_R_WRONG_RPK_TYPE},
> ++  #else
> ++    {"WRONG_RPK_TYPE", 20, 351},
> ++  #endif
> +   #ifdef SSL_R_WRONG_SIGNATURE_LENGTH
> +     {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH},
> +   #else
> +@@ -8055,6 +8702,16 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"BAD_OBJECT", 34, 119},
> +   #endif
> ++  #ifdef X509V3_R_BAD_OPTION
> ++    {"BAD_OPTION", ERR_LIB_X509V3, X509V3_R_BAD_OPTION},
> ++  #else
> ++    {"BAD_OPTION", 34, 170},
> ++  #endif
> ++  #ifdef X509V3_R_BAD_VALUE
> ++    {"BAD_VALUE", ERR_LIB_X509V3, X509V3_R_BAD_VALUE},
> ++  #else
> ++    {"BAD_VALUE", 34, 171},
> ++  #endif
> +   #ifdef X509V3_R_BN_DEC2BN_ERROR
> +     {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR},
> +   #else
> +@@ -8370,6 +9027,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNKNOWN_OPTION", 34, 120},
> +   #endif
> ++  #ifdef X509V3_R_UNKNOWN_VALUE
> ++    {"UNKNOWN_VALUE", ERR_LIB_X509V3, X509V3_R_UNKNOWN_VALUE},
> ++  #else
> ++    {"UNKNOWN_VALUE", 34, 172},
> ++  #endif
> +   #ifdef X509V3_R_UNSUPPORTED_OPTION
> +     {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION},
> +   #else
> +@@ -8430,6 +9092,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"CRL_VERIFY_FAILURE", 11, 131},
> +   #endif
> ++  #ifdef X509_R_DUPLICATE_ATTRIBUTE
> ++    {"DUPLICATE_ATTRIBUTE", ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE},
> ++  #else
> ++    {"DUPLICATE_ATTRIBUTE", 11, 140},
> ++  #endif
> +   #ifdef X509_R_ERROR_GETTING_MD_BY_NID
> +     {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID},
> +   #else
> +@@ -8590,6 +9257,11 @@ static struct py_ssl_error_code error_codes[] = {
> +   #else
> +     {"UNSUPPORTED_ALGORITHM", 11, 111},
> +   #endif
> ++  #ifdef X509_R_UNSUPPORTED_VERSION
> ++    {"UNSUPPORTED_VERSION", ERR_LIB_X509, X509_R_UNSUPPORTED_VERSION},
> ++  #else
> ++    {"UNSUPPORTED_VERSION", 11, 145},
> ++  #endif
> +   #ifdef X509_R_WRONG_LOOKUP_TYPE
> +     {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE},
> +   #else
> +diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py
> +index 21be53e7884..a08b32fa45d 100644
> +--- a/Tools/c-analyzer/cpython/_parser.py
> ++++ b/Tools/c-analyzer/cpython/_parser.py
> +@@ -70,9 +70,7 @@ Python/thread_pthread.h
> + Python/thread_pthread_stubs.h
> +
> + # only huge constants (safe but parsing is slow)
> +-Modules/_ssl_data_31.h
> +-Modules/_ssl_data_300.h
> +-Modules/_ssl_data_111.h
> ++Modules/_ssl_data_*.h
> + Modules/cjkcodecs/mappings_*.h
> + Modules/unicodedata_db.h
> + Modules/unicodename_db.h
> +diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py
> +index 9860871..0cd05c7 100755
> +--- a/Tools/ssl/make_ssl_data.py
> ++++ b/Tools/ssl/make_ssl_data.py
> +@@ -5,9 +5,28 @@ This script should be called *manually* when we want to upgrade SSLError
> + `library` and `reason` mnemonics to a more recent OpenSSL version.
> +
> + It takes two arguments:
> +-- the path to the OpenSSL source tree (e.g. git checkout)
> ++- the path to the OpenSSL git checkout
> + - the path to the header file to be generated Modules/_ssl_data_{version}.h
> + - error codes are version specific
> ++
> ++The OpenSSL git checkout should be at a specific tag, using commands like:
> ++    git tag --list 'openssl-*'
> ++    git switch --detach openssl-3.4.0
> ++
> ++
> ++After generating the definitions, compare the result with newest pre-existing file.
> ++You can use a command like:
> ++
> ++    git diff --no-index Modules/_ssl_data_31.h Modules/_ssl_data_34.h
> ++
> ++- If the new version *only* adds new definitions, remove the pre-existing file
> ++  and adjust the #include in _ssl.c to point to the new version.
> ++- If the new version removes or renumbers some definitions, keep both files and
> ++  add a new #include in _ssl.c.
> ++
> ++A newly supported OpenSSL version should also be added to:
> ++- Tools/ssl/multissltests.py
> ++- .github/workflows/build.yml
> + """
> +
> + import argparse
> +@@ -16,6 +35,7 @@ import operator
> + import os
> + import re
> + import sys
> ++import subprocess
> +
> +
> + parser = argparse.ArgumentParser(
> +@@ -118,9 +138,17 @@ def main():
> +     # sort by libname, numeric error code
> +     args.reasons = sorted(reasons, key=operator.itemgetter(0, 3))
> +
> ++    git_describe = subprocess.run(
> ++        ['git', 'describe', '--long', '--dirty'],
> ++        cwd=args.srcdir,
> ++        capture_output=True,
> ++        encoding='utf-8',
> ++        check=True,
> ++        )
> +     lines = [
> +-        "/* File generated by Tools/ssl/make_ssl_data.py */"
> +-        f"/* Generated on {datetime.datetime.utcnow().isoformat()} */"
> ++        "/* File generated by Tools/ssl/make_ssl_data.py */",
> ++        f"/* Generated on {datetime.datetime.now(datetime.UTC).isoformat()} */",
> ++        f"/* Generated from Git commit {git_describe.stdout.strip()} */",
> +     ]
> +     lines.extend(gen_library_codes(args))
> +     lines.append("")
> +diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py
> +index eae0e0c..fb06f63 100755
> +--- a/Tools/ssl/multissltests.py
> ++++ b/Tools/ssl/multissltests.py
> +@@ -51,6 +51,7 @@ OPENSSL_RECENT_VERSIONS = [
> +     "3.1.7",
> +     "3.2.3",
> +     "3.3.2",
> ++    "3.4.0",
> + ]
> +
> + LIBRESSL_OLD_VERSIONS = [
> +--
> +2.30.2
> +
> diff --git a/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch b/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch
> new file mode 100644
> index 0000000000..18e0f208c7
> --- /dev/null
> +++ b/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch
> @@ -0,0 +1,51 @@
> +From 11e0523eb363b7def4bc64d24a04e88d8670a691 Mon Sep 17 00:00:00 2001
> +From: Petr Viktorin <encukou@gmail.com>
> +Date: Thu, 28 Nov 2024 13:32:30 +0100
> +Subject: [PATCH] ssl: Raise OSError for ERR_LIB_SYS
> +
> +From the ERR_raise manpage:
> +
> +    ERR_LIB_SYS
> +
> +        This "library code" indicates that a system error is
> +        being reported.  In this case, the reason code given
> +        to `ERR_raise()` and `ERR_raise_data()` *must* be
> +        `errno(3)`.
> +
> +Upstream-Status: Submitted [https://github.com/python/cpython/pull/127361]
> +Signed-off-by: Peter Marko <peter.marko@siemens.com>
> +---
> + Modules/_ssl.c | 10 ++++++++++
> + 1 file changed, 10 insertions(+)
> +
> +diff --git a/Modules/_ssl.c b/Modules/_ssl.c
> +index e5b8bf21002..a243ba4b9bc 100644
> +--- a/Modules/_ssl.c
> ++++ b/Modules/_ssl.c
> +@@ -667,6 +667,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char *filename, int lineno)
> +                         ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) {
> +                     type = state->PySSLCertVerificationErrorObject;
> +                 }
> ++                if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
> ++                    // A system error is being reported; reason is set to errno
> ++                    errno = ERR_GET_REASON(e);
> ++                    return PyErr_SetFromErrno(PyExc_OSError);
> ++                }
> +                 p = PY_SSL_ERROR_SYSCALL;
> +             }
> +             break;
> +@@ -692,6 +697,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char *filename, int lineno)
> +                 errstr = "EOF occurred in violation of protocol";
> +             }
> + #endif
> ++            if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
> ++                // A system error is being reported; reason is set to errno
> ++                errno = ERR_GET_REASON(e);
> ++                return PyErr_SetFromErrno(PyExc_OSError);
> ++            }
> +             break;
> +         }
> +         default:
> +--
> +2.30.2
> +
> diff --git a/meta/recipes-devtools/python/python3_3.13.0.bb b/meta/recipes-devtools/python/python3_3.13.0.bb
> index a393b5e4a0..b3170879b9 100644
> --- a/meta/recipes-devtools/python/python3_3.13.0.bb
> +++ b/meta/recipes-devtools/python/python3_3.13.0.bb
> @@ -31,6 +31,8 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
>             file://0001-test_active_children-skip-problematic-test.patch \
>             file://0001-test_readline-skip-limited-history-test.patch \
>             file://fix-armv5.patch \
> +           file://0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch \
> +           file://0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch \
>             "
>
>  SRC_URI:append:class-native = " \
> --
> 2.30.2
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#208030): https://lists.openembedded.org/g/openembedded-core/message/208030
> Mute This Topic: https://lists.openembedded.org/mt/109838102/1997914
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [raj.khem@gmail.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
Marko, Peter Nov. 30, 2024, 11:34 p.m. UTC | #2
This is caused by following swig bug:
https://github.com/swiftlang/swift/issues/69311
This comment has a minimal reproducer:
https://github.com/swiftlang/swift/issues/69311#issuecomment-1851233912
Based on that I found following openssl commit:
https://github.com/openssl/openssl/commit/8cf9ac9c2034eb383b72bb7a849b5db96ff593f6
And tested that python3-m2crypto compiles fine when I remove it.

However I have no idea how to fix this swig problem.
(other than patching this openssl header in python3-m2crypto do_configure)

Note: the same error on buildroot:
http://autobuild.buildroot.net/results/1d9/1d988b9463fbf52c09c60415d7c77074947650d4/build-end.log
Does someone here know buildroot to check how they fixed this?

Peter

> -----Original Message-----
> From: Khem Raj <raj.khem@gmail.com>
> Sent: Saturday, November 30, 2024 20:02
> To: Marko, Peter (FT D EU SK BFS1) <Peter.Marko@siemens.com>
> Cc: openembedded-core@lists.openembedded.org
> Subject: Re: [OE-core][PATCH] python: backport patches to support openssl 3.4.0
> 
> I think this along with openssl 3.4 upgrade is causing
> python3-m2crypto to break see
> 
> https://valkyrie.yoctoproject.org/#/builders/81/builds/180/steps/14/logs/stdio
> 
> On Fri, Nov 29, 2024 at 10:28 AM Peter Marko via
> lists.openembedded.org
> <peter.marko=siemens.com@lists.openembedded.org> wrote:
> >
> > From: Peter Marko <peter.marko@siemens.com>
> >
> > https://github.com/python/cpython/pull/127331
> > https://github.com/python/cpython/pull/127361
> >
> > Signed-off-by: Peter Marko <peter.marko@siemens.com>
> > ---
> >  ...r-OpenSSL-3.4-and-add-it-to-multissl.patch | 1452 +++++++++++++++++
> >  ...01-ssl-Raise-OSError-for-ERR_LIB_SYS.patch |   51 +
> >  .../recipes-devtools/python/python3_3.13.0.bb |    2 +
> >  3 files changed, 1505 insertions(+)
> >  create mode 100644 meta/recipes-devtools/python/python3/0001-Generate-
> data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
> >  create mode 100644 meta/recipes-devtools/python/python3/0001-ssl-Raise-
> OSError-for-ERR_LIB_SYS.patch
> >
> > diff --git a/meta/recipes-devtools/python/python3/0001-Generate-data-for-
> OpenSSL-3.4-and-add-it-to-multissl.patch b/meta/recipes-
> devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-
> multissl.patch
> > new file mode 100644
> > index 0000000000..d8ad803d50
> > --- /dev/null
> > +++ b/meta/recipes-devtools/python/python3/0001-Generate-data-for-
> OpenSSL-3.4-and-add-it-to-multissl.patch
> > @@ -0,0 +1,1452 @@
> > +From db5c5763f3e3172f1dd011355b41469770dafc0f Mon Sep 17 00:00:00
> 2001
> > +From: Petr Viktorin <encukou@gmail.com>
> > +Date: Thu, 28 Nov 2024 13:29:27 +0100
> > +Subject: [PATCH] gh-127330: Update for OpenSSL 3.4 & document+improve
> the
> > + update process (GH-127331)
> > +
> > +- Add `git describe` output to headers generated by `make_ssl_data.py`
> > +
> > +  This info is more important than the date when the file was generated.
> > +  It does mean that the tool now requires a Git checkout of OpenSSL,
> > +  not for example a release tarball.
> > +
> > +- Regenerate the older file to add the info.
> > +  To the other older file, add a note about manual edits.
> > +
> > +- Add notes on how to add a new OpenSSL version
> > +
> > +- Add 3.4 error messages and multissl tests
> > +
> > +Upstream-Status: Submitted
> [https://github.com/python/cpython/commit/db5c5763f3e3172f1dd011355b414
> 69770dafc0f]
> > +Signed-off-by: Peter Marko <peter.marko@siemens.com>
> > +---
> > + Modules/_ssl.c                             |   2 +-
> > + Modules/_ssl_data_111.h                    |   4 +-
> > + Modules/_ssl_data_300.h                    |   5 +-
> > + Modules/{_ssl_data_31.h => _ssl_data_34.h} | 674 ++++++++++++++++++++-
> > + Tools/c-analyzer/cpython/_parser.py        |   4 +-
> > + Tools/ssl/make_ssl_data.py                 |  34 +-
> > + Tools/ssl/multissltests.py                 |   1 +
> > + 7 files changed, 714 insertions(+), 10 deletions(-)
> > + rename Modules/{_ssl_data_31.h => _ssl_data_34.h} (92%)
> > +
> > +diff --git a/Modules/_ssl.c b/Modules/_ssl.c
> > +index b6b5ebf094c..e5b8bf21002 100644
> > +--- a/Modules/_ssl.c
> > ++++ b/Modules/_ssl.c
> > +@@ -122,7 +122,7 @@ static void _PySSLFixErrno(void) {
> > +
> > + /* Include generated data (error codes) */
> > + #if (OPENSSL_VERSION_NUMBER >= 0x30100000L)
> > +-#include "_ssl_data_31.h"
> > ++#include "_ssl_data_34.h"
> > + #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L)
> > + #include "_ssl_data_300.h"
> > + #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L)
> > +diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h
> > +index 093c786e6a2..061fac2bd58 100644
> > +--- a/Modules/_ssl_data_111.h
> > ++++ b/Modules/_ssl_data_111.h
> > +@@ -1,4 +1,6 @@
> > +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-
> 01T02:58:04.081473 */
> > ++/* File generated by Tools/ssl/make_ssl_data.py */
> > ++/* Generated on 2024-11-27T12:48:46.194048+00:00 */
> > ++/* Generated from Git commit OpenSSL_1_1_1w-0-ge04bd3433f */
> > + static struct py_ssl_library_code library_codes[] = {
> > + #ifdef ERR_LIB_ASN1
> > +     {"ASN1", ERR_LIB_ASN1},
> > +diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h
> > +index dc66731f6b6..b687ce43c77 100644
> > +--- a/Modules/_ssl_data_300.h
> > ++++ b/Modules/_ssl_data_300.h
> > +@@ -1,4 +1,7 @@
> > +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-
> 01T03:03:52.163218 */
> > ++/* File generated by Tools/ssl/make_ssl_data.py */
> > ++/* Generated on 2023-06-01T03:03:52.163218 */
> > ++/* Manually edited to add definitions from 1.1.1 (GH-105174) */
> > ++
> > + static struct py_ssl_library_code library_codes[] = {
> > + #ifdef ERR_LIB_ASN1
> > +     {"ASN1", ERR_LIB_ASN1},
> > +diff --git a/Modules/_ssl_data_31.h b/Modules/_ssl_data_34.h
> > +similarity index 92%
> > +rename from Modules/_ssl_data_31.h
> > +rename to Modules/_ssl_data_34.h
> > +index c589c501f4e..d4af3e1c1fa 100644
> > +--- a/Modules/_ssl_data_31.h
> > ++++ b/Modules/_ssl_data_34.h
> > +@@ -1,4 +1,6 @@
> > +-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-
> 01T03:04:00.275280 */
> > ++/* File generated by Tools/ssl/make_ssl_data.py */
> > ++/* Generated on 2024-11-27T12:35:52.276767+00:00 */
> > ++/* Generated from Git commit openssl-3.4.0-0-g98acb6b028 */
> > + static struct py_ssl_library_code library_codes[] = {
> > + #ifdef ERR_LIB_ASN1
> > +     {"ASN1", ERR_LIB_ASN1},
> > +@@ -300,6 +302,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"FIRST_NUM_TOO_LARGE", 13, 122},
> > +   #endif
> > ++  #ifdef ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT
> > ++    {"GENERALIZEDTIME_IS_TOO_SHORT", ERR_LIB_ASN1,
> ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT},
> > ++  #else
> > ++    {"GENERALIZEDTIME_IS_TOO_SHORT", 13, 232},
> > ++  #endif
> > +   #ifdef ASN1_R_HEADER_TOO_LONG
> > +     {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG},
> > +   #else
> > +@@ -730,6 +737,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_TYPE", 13, 196},
> > +   #endif
> > ++  #ifdef ASN1_R_UTCTIME_IS_TOO_SHORT
> > ++    {"UTCTIME_IS_TOO_SHORT", ERR_LIB_ASN1,
> ASN1_R_UTCTIME_IS_TOO_SHORT},
> > ++  #else
> > ++    {"UTCTIME_IS_TOO_SHORT", 13, 233},
> > ++  #endif
> > +   #ifdef ASN1_R_WRONG_INTEGER_TYPE
> > +     {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1,
> ASN1_R_WRONG_INTEGER_TYPE},
> > +   #else
> > +@@ -845,6 +857,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"LISTEN_V6_ONLY", 32, 136},
> > +   #endif
> > ++  #ifdef BIO_R_LOCAL_ADDR_NOT_AVAILABLE
> > ++    {"LOCAL_ADDR_NOT_AVAILABLE", ERR_LIB_BIO,
> BIO_R_LOCAL_ADDR_NOT_AVAILABLE},
> > ++  #else
> > ++    {"LOCAL_ADDR_NOT_AVAILABLE", 32, 111},
> > ++  #endif
> > +   #ifdef BIO_R_LOOKUP_RETURNED_NOTHING
> > +     {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO,
> BIO_R_LOOKUP_RETURNED_NOTHING},
> > +   #else
> > +@@ -860,6 +877,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NBIO_CONNECT_ERROR", 32, 110},
> > +   #endif
> > ++  #ifdef BIO_R_NON_FATAL
> > ++    {"NON_FATAL", ERR_LIB_BIO, BIO_R_NON_FATAL},
> > ++  #else
> > ++    {"NON_FATAL", 32, 112},
> > ++  #endif
> > +   #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED
> > +     {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO,
> BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED},
> > +   #else
> > +@@ -880,6 +902,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NO_SUCH_FILE", 32, 128},
> > +   #endif
> > ++  #ifdef BIO_R_PEER_ADDR_NOT_AVAILABLE
> > ++    {"PEER_ADDR_NOT_AVAILABLE", ERR_LIB_BIO,
> BIO_R_PEER_ADDR_NOT_AVAILABLE},
> > ++  #else
> > ++    {"PEER_ADDR_NOT_AVAILABLE", 32, 114},
> > ++  #endif
> > ++  #ifdef BIO_R_PORT_MISMATCH
> > ++    {"PORT_MISMATCH", ERR_LIB_BIO, BIO_R_PORT_MISMATCH},
> > ++  #else
> > ++    {"PORT_MISMATCH", 32, 150},
> > ++  #endif
> > ++  #ifdef BIO_R_TFO_DISABLED
> > ++    {"TFO_DISABLED", ERR_LIB_BIO, BIO_R_TFO_DISABLED},
> > ++  #else
> > ++    {"TFO_DISABLED", 32, 106},
> > ++  #endif
> > ++  #ifdef BIO_R_TFO_NO_KERNEL_SUPPORT
> > ++    {"TFO_NO_KERNEL_SUPPORT", ERR_LIB_BIO,
> BIO_R_TFO_NO_KERNEL_SUPPORT},
> > ++  #else
> > ++    {"TFO_NO_KERNEL_SUPPORT", 32, 108},
> > ++  #endif
> > +   #ifdef BIO_R_TRANSFER_ERROR
> > +     {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR},
> > +   #else
> > +@@ -920,6 +962,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNABLE_TO_REUSEADDR", 32, 139},
> > +   #endif
> > ++  #ifdef BIO_R_UNABLE_TO_TFO
> > ++    {"UNABLE_TO_TFO", ERR_LIB_BIO, BIO_R_UNABLE_TO_TFO},
> > ++  #else
> > ++    {"UNABLE_TO_TFO", 32, 109},
> > ++  #endif
> > +   #ifdef BIO_R_UNAVAILABLE_IP_FAMILY
> > +     {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO,
> BIO_R_UNAVAILABLE_IP_FAMILY},
> > +   #else
> > +@@ -1230,6 +1277,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"ERROR_VALIDATING_SIGNATURE", 58, 171},
> > +   #endif
> > ++  #ifdef CMP_R_EXPECTED_POLLREQ
> > ++    {"EXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ},
> > ++  #else
> > ++    {"EXPECTED_POLLREQ", 58, 104},
> > ++  #endif
> > +   #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN
> > +     {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP,
> CMP_R_FAILED_BUILDING_OWN_CHAIN},
> > +   #else
> > +@@ -1250,16 +1302,51 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"FAIL_INFO_OUT_OF_RANGE", 58, 129},
> > +   #endif
> > ++  #ifdef CMP_R_GENERATE_CERTREQTEMPLATE
> > ++    {"GENERATE_CERTREQTEMPLATE", ERR_LIB_CMP,
> CMP_R_GENERATE_CERTREQTEMPLATE},
> > ++  #else
> > ++    {"GENERATE_CERTREQTEMPLATE", 58, 197},
> > ++  #endif
> > ++  #ifdef CMP_R_GENERATE_CRLSTATUS
> > ++    {"GENERATE_CRLSTATUS", ERR_LIB_CMP,
> CMP_R_GENERATE_CRLSTATUS},
> > ++  #else
> > ++    {"GENERATE_CRLSTATUS", 58, 198},
> > ++  #endif
> > ++  #ifdef CMP_R_GETTING_GENP
> > ++    {"GETTING_GENP", ERR_LIB_CMP, CMP_R_GETTING_GENP},
> > ++  #else
> > ++    {"GETTING_GENP", 58, 192},
> > ++  #endif
> > ++  #ifdef CMP_R_GET_ITAV
> > ++    {"GET_ITAV", ERR_LIB_CMP, CMP_R_GET_ITAV},
> > ++  #else
> > ++    {"GET_ITAV", 58, 199},
> > ++  #endif
> > +   #ifdef CMP_R_INVALID_ARGS
> > +     {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS},
> > +   #else
> > +     {"INVALID_ARGS", 58, 100},
> > +   #endif
> > ++  #ifdef CMP_R_INVALID_GENP
> > ++    {"INVALID_GENP", ERR_LIB_CMP, CMP_R_INVALID_GENP},
> > ++  #else
> > ++    {"INVALID_GENP", 58, 193},
> > ++  #endif
> > ++  #ifdef CMP_R_INVALID_KEYSPEC
> > ++    {"INVALID_KEYSPEC", ERR_LIB_CMP, CMP_R_INVALID_KEYSPEC},
> > ++  #else
> > ++    {"INVALID_KEYSPEC", 58, 202},
> > ++  #endif
> > +   #ifdef CMP_R_INVALID_OPTION
> > +     {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION},
> > +   #else
> > +     {"INVALID_OPTION", 58, 174},
> > +   #endif
> > ++  #ifdef CMP_R_INVALID_ROOTCAKEYUPDATE
> > ++    {"INVALID_ROOTCAKEYUPDATE", ERR_LIB_CMP,
> CMP_R_INVALID_ROOTCAKEYUPDATE},
> > ++  #else
> > ++    {"INVALID_ROOTCAKEYUPDATE", 58, 195},
> > ++  #endif
> > +   #ifdef CMP_R_MISSING_CERTID
> > +     {"MISSING_CERTID", ERR_LIB_CMP, CMP_R_MISSING_CERTID},
> > +   #else
> > +@@ -1425,6 +1512,21 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TRANSFER_ERROR", 58, 159},
> > +   #endif
> > ++  #ifdef CMP_R_UNCLEAN_CTX
> > ++    {"UNCLEAN_CTX", ERR_LIB_CMP, CMP_R_UNCLEAN_CTX},
> > ++  #else
> > ++    {"UNCLEAN_CTX", 58, 191},
> > ++  #endif
> > ++  #ifdef CMP_R_UNEXPECTED_CERTPROFILE
> > ++    {"UNEXPECTED_CERTPROFILE", ERR_LIB_CMP,
> CMP_R_UNEXPECTED_CERTPROFILE},
> > ++  #else
> > ++    {"UNEXPECTED_CERTPROFILE", 58, 196},
> > ++  #endif
> > ++  #ifdef CMP_R_UNEXPECTED_CRLSTATUSLIST
> > ++    {"UNEXPECTED_CRLSTATUSLIST", ERR_LIB_CMP,
> CMP_R_UNEXPECTED_CRLSTATUSLIST},
> > ++  #else
> > ++    {"UNEXPECTED_CRLSTATUSLIST", 58, 201},
> > ++  #endif
> > +   #ifdef CMP_R_UNEXPECTED_PKIBODY
> > +     {"UNEXPECTED_PKIBODY", ERR_LIB_CMP,
> CMP_R_UNEXPECTED_PKIBODY},
> > +   #else
> > +@@ -1435,11 +1537,21 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNEXPECTED_PKISTATUS", 58, 185},
> > +   #endif
> > ++  #ifdef CMP_R_UNEXPECTED_POLLREQ
> > ++    {"UNEXPECTED_POLLREQ", ERR_LIB_CMP,
> CMP_R_UNEXPECTED_POLLREQ},
> > ++  #else
> > ++    {"UNEXPECTED_POLLREQ", 58, 105},
> > ++  #endif
> > +   #ifdef CMP_R_UNEXPECTED_PVNO
> > +     {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO},
> > +   #else
> > +     {"UNEXPECTED_PVNO", 58, 153},
> > +   #endif
> > ++  #ifdef CMP_R_UNEXPECTED_SENDER
> > ++    {"UNEXPECTED_SENDER", ERR_LIB_CMP,
> CMP_R_UNEXPECTED_SENDER},
> > ++  #else
> > ++    {"UNEXPECTED_SENDER", 58, 106},
> > ++  #endif
> > +   #ifdef CMP_R_UNKNOWN_ALGORITHM_ID
> > +     {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP,
> CMP_R_UNKNOWN_ALGORITHM_ID},
> > +   #else
> > +@@ -1450,6 +1562,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNKNOWN_CERT_TYPE", 58, 135},
> > +   #endif
> > ++  #ifdef CMP_R_UNKNOWN_CRL_ISSUER
> > ++    {"UNKNOWN_CRL_ISSUER", ERR_LIB_CMP,
> CMP_R_UNKNOWN_CRL_ISSUER},
> > ++  #else
> > ++    {"UNKNOWN_CRL_ISSUER", 58, 200},
> > ++  #endif
> > +   #ifdef CMP_R_UNKNOWN_PKISTATUS
> > +     {"UNKNOWN_PKISTATUS", ERR_LIB_CMP,
> CMP_R_UNKNOWN_PKISTATUS},
> > +   #else
> > +@@ -1465,6 +1582,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_KEY_TYPE", 58, 137},
> > +   #endif
> > ++  #ifdef CMP_R_UNSUPPORTED_PKIBODY
> > ++    {"UNSUPPORTED_PKIBODY", ERR_LIB_CMP,
> CMP_R_UNSUPPORTED_PKIBODY},
> > ++  #else
> > ++    {"UNSUPPORTED_PKIBODY", 58, 101},
> > ++  #endif
> > +   #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC
> > +     {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP,
> CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC},
> > +   #else
> > +@@ -1825,6 +1947,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NO_SIGNERS", 46, 135},
> > +   #endif
> > ++  #ifdef CMS_R_OPERATION_UNSUPPORTED
> > ++    {"OPERATION_UNSUPPORTED", ERR_LIB_CMS,
> CMS_R_OPERATION_UNSUPPORTED},
> > ++  #else
> > ++    {"OPERATION_UNSUPPORTED", 46, 182},
> > ++  #endif
> > +   #ifdef CMS_R_PEER_KEY_ERROR
> > +     {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR},
> > +   #else
> > +@@ -1960,6 +2087,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154},
> > +   #endif
> > ++  #ifdef CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM
> > ++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", ERR_LIB_CMS,
> CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM},
> > ++  #else
> > ++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", 46, 195},
> > ++  #endif
> > +   #ifdef CMS_R_UNSUPPORTED_TYPE
> > +     {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE},
> > +   #else
> > +@@ -1985,6 +2117,31 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"WRAP_ERROR", 46, 159},
> > +   #endif
> > ++  #ifdef COMP_R_BROTLI_DECODE_ERROR
> > ++    {"BROTLI_DECODE_ERROR", ERR_LIB_COMP,
> COMP_R_BROTLI_DECODE_ERROR},
> > ++  #else
> > ++    {"BROTLI_DECODE_ERROR", 41, 102},
> > ++  #endif
> > ++  #ifdef COMP_R_BROTLI_DEFLATE_ERROR
> > ++    {"BROTLI_DEFLATE_ERROR", ERR_LIB_COMP,
> COMP_R_BROTLI_DEFLATE_ERROR},
> > ++  #else
> > ++    {"BROTLI_DEFLATE_ERROR", 41, 103},
> > ++  #endif
> > ++  #ifdef COMP_R_BROTLI_ENCODE_ERROR
> > ++    {"BROTLI_ENCODE_ERROR", ERR_LIB_COMP,
> COMP_R_BROTLI_ENCODE_ERROR},
> > ++  #else
> > ++    {"BROTLI_ENCODE_ERROR", 41, 106},
> > ++  #endif
> > ++  #ifdef COMP_R_BROTLI_INFLATE_ERROR
> > ++    {"BROTLI_INFLATE_ERROR", ERR_LIB_COMP,
> COMP_R_BROTLI_INFLATE_ERROR},
> > ++  #else
> > ++    {"BROTLI_INFLATE_ERROR", 41, 104},
> > ++  #endif
> > ++  #ifdef COMP_R_BROTLI_NOT_SUPPORTED
> > ++    {"BROTLI_NOT_SUPPORTED", ERR_LIB_COMP,
> COMP_R_BROTLI_NOT_SUPPORTED},
> > ++  #else
> > ++    {"BROTLI_NOT_SUPPORTED", 41, 105},
> > ++  #endif
> > +   #ifdef COMP_R_ZLIB_DEFLATE_ERROR
> > +     {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP,
> COMP_R_ZLIB_DEFLATE_ERROR},
> > +   #else
> > +@@ -2000,6 +2157,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"ZLIB_NOT_SUPPORTED", 41, 101},
> > +   #endif
> > ++  #ifdef COMP_R_ZSTD_COMPRESS_ERROR
> > ++    {"ZSTD_COMPRESS_ERROR", ERR_LIB_COMP,
> COMP_R_ZSTD_COMPRESS_ERROR},
> > ++  #else
> > ++    {"ZSTD_COMPRESS_ERROR", 41, 107},
> > ++  #endif
> > ++  #ifdef COMP_R_ZSTD_DECODE_ERROR
> > ++    {"ZSTD_DECODE_ERROR", ERR_LIB_COMP,
> COMP_R_ZSTD_DECODE_ERROR},
> > ++  #else
> > ++    {"ZSTD_DECODE_ERROR", 41, 108},
> > ++  #endif
> > ++  #ifdef COMP_R_ZSTD_DECOMPRESS_ERROR
> > ++    {"ZSTD_DECOMPRESS_ERROR", ERR_LIB_COMP,
> COMP_R_ZSTD_DECOMPRESS_ERROR},
> > ++  #else
> > ++    {"ZSTD_DECOMPRESS_ERROR", 41, 109},
> > ++  #endif
> > ++  #ifdef COMP_R_ZSTD_NOT_SUPPORTED
> > ++    {"ZSTD_NOT_SUPPORTED", ERR_LIB_COMP,
> COMP_R_ZSTD_NOT_SUPPORTED},
> > ++  #else
> > ++    {"ZSTD_NOT_SUPPORTED", 41, 110},
> > ++  #endif
> > +   #ifdef CONF_R_ERROR_LOADING_DSO
> > +     {"ERROR_LOADING_DSO", ERR_LIB_CONF,
> CONF_R_ERROR_LOADING_DSO},
> > +   #else
> > +@@ -2085,6 +2262,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111},
> > +   #endif
> > ++  #ifdef CONF_R_RECURSIVE_SECTION_REFERENCE
> > ++    {"RECURSIVE_SECTION_REFERENCE", ERR_LIB_CONF,
> CONF_R_RECURSIVE_SECTION_REFERENCE},
> > ++  #else
> > ++    {"RECURSIVE_SECTION_REFERENCE", 14, 126},
> > ++  #endif
> > +   #ifdef CONF_R_RELATIVE_PATH
> > +     {"RELATIVE_PATH", ERR_LIB_CONF, CONF_R_RELATIVE_PATH},
> > +   #else
> > +@@ -2370,6 +2552,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TOO_MANY_BYTES", 15, 113},
> > +   #endif
> > ++  #ifdef CRYPTO_R_TOO_MANY_NAMES
> > ++    {"TOO_MANY_NAMES", ERR_LIB_CRYPTO,
> CRYPTO_R_TOO_MANY_NAMES},
> > ++  #else
> > ++    {"TOO_MANY_NAMES", 15, 132},
> > ++  #endif
> > +   #ifdef CRYPTO_R_TOO_MANY_RECORDS
> > +     {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO,
> CRYPTO_R_TOO_MANY_RECORDS},
> > +   #else
> > +@@ -2560,6 +2747,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_SECRET", 5, 128},
> > +   #endif
> > ++  #ifdef DH_R_INVALID_SIZE
> > ++    {"INVALID_SIZE", ERR_LIB_DH, DH_R_INVALID_SIZE},
> > ++  #else
> > ++    {"INVALID_SIZE", 5, 129},
> > ++  #endif
> > +   #ifdef DH_R_KDF_PARAMETER_ERROR
> > +     {"KDF_PARAMETER_ERROR", ERR_LIB_DH,
> DH_R_KDF_PARAMETER_ERROR},
> > +   #else
> > +@@ -2610,6 +2802,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"PEER_KEY_ERROR", 5, 111},
> > +   #endif
> > ++  #ifdef DH_R_Q_TOO_LARGE
> > ++    {"Q_TOO_LARGE", ERR_LIB_DH, DH_R_Q_TOO_LARGE},
> > ++  #else
> > ++    {"Q_TOO_LARGE", 5, 130},
> > ++  #endif
> > +   #ifdef DH_R_SHARED_INFO_ERROR
> > +     {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR},
> > +   #else
> > +@@ -3545,6 +3742,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"GENERATE_ERROR", 6, 214},
> > +   #endif
> > ++  #ifdef EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED
> > ++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", ERR_LIB_EVP,
> EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED},
> > ++  #else
> > ++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", 6, 229},
> > ++  #endif
> > +   #ifdef EVP_R_GET_RAW_KEY_FAILED
> > +     {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED},
> > +   #else
> > +@@ -3745,6 +3947,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150},
> > +   #endif
> > ++  #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE
> > ++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE",
> ERR_LIB_EVP,
> EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE},
> > ++  #else
> > ++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", 6, 226},
> > ++  #endif
> > +   #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW
> > +     {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP,
> EVP_R_OUTPUT_WOULD_OVERFLOW},
> > +   #else
> > +@@ -3795,6 +4002,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209},
> > +   #endif
> > ++  #ifdef EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE
> > ++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", ERR_LIB_EVP,
> EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE},
> > ++  #else
> > ++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", 6, 228},
> > ++  #endif
> > +   #ifdef EVP_R_TOO_MANY_RECORDS
> > +     {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS},
> > +   #else
> > +@@ -3825,6 +4037,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNABLE_TO_SET_CALLBACKS", 6, 217},
> > +   #endif
> > ++  #ifdef EVP_R_UNKNOWN_BITS
> > ++    {"UNKNOWN_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_BITS},
> > ++  #else
> > ++    {"UNKNOWN_BITS", 6, 166},
> > ++  #endif
> > +   #ifdef EVP_R_UNKNOWN_CIPHER
> > +     {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER},
> > +   #else
> > +@@ -3840,6 +4057,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNKNOWN_KEY_TYPE", 6, 207},
> > +   #endif
> > ++  #ifdef EVP_R_UNKNOWN_MAX_SIZE
> > ++    {"UNKNOWN_MAX_SIZE", ERR_LIB_EVP, EVP_R_UNKNOWN_MAX_SIZE},
> > ++  #else
> > ++    {"UNKNOWN_MAX_SIZE", 6, 167},
> > ++  #endif
> > +   #ifdef EVP_R_UNKNOWN_OPTION
> > +     {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION},
> > +   #else
> > +@@ -3850,6 +4072,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNKNOWN_PBE_ALGORITHM", 6, 121},
> > +   #endif
> > ++  #ifdef EVP_R_UNKNOWN_SECURITY_BITS
> > ++    {"UNKNOWN_SECURITY_BITS", ERR_LIB_EVP,
> EVP_R_UNKNOWN_SECURITY_BITS},
> > ++  #else
> > ++    {"UNKNOWN_SECURITY_BITS", 6, 168},
> > ++  #endif
> > +   #ifdef EVP_R_UNSUPPORTED_ALGORITHM
> > +     {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP,
> EVP_R_UNSUPPORTED_ALGORITHM},
> > +   #else
> > +@@ -4040,6 +4267,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"RESPONSE_PARSE_ERROR", 61, 104},
> > +   #endif
> > ++  #ifdef HTTP_R_RESPONSE_TOO_MANY_HDRLINES
> > ++    {"RESPONSE_TOO_MANY_HDRLINES", ERR_LIB_HTTP,
> HTTP_R_RESPONSE_TOO_MANY_HDRLINES},
> > ++  #else
> > ++    {"RESPONSE_TOO_MANY_HDRLINES", 61, 130},
> > ++  #endif
> > +   #ifdef HTTP_R_RETRY_TIMEOUT
> > +     {"RETRY_TIMEOUT", ERR_LIB_HTTP, HTTP_R_RETRY_TIMEOUT},
> > +   #else
> > +@@ -4530,6 +4762,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110},
> > +   #endif
> > ++  #ifdef PKCS12_R_CALLBACK_FAILED
> > ++    {"CALLBACK_FAILED", ERR_LIB_PKCS12, PKCS12_R_CALLBACK_FAILED},
> > ++  #else
> > ++    {"CALLBACK_FAILED", 35, 115},
> > ++  #endif
> > +   #ifdef PKCS12_R_CANT_PACK_STRUCTURE
> > +     {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12,
> PKCS12_R_CANT_PACK_STRUCTURE},
> > +   #else
> > +@@ -4920,6 +5157,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"CIPHER_OPERATION_FAILED", 57, 102},
> > +   #endif
> > ++  #ifdef PROV_R_COFACTOR_REQUIRED
> > ++    {"COFACTOR_REQUIRED", ERR_LIB_PROV,
> PROV_R_COFACTOR_REQUIRED},
> > ++  #else
> > ++    {"COFACTOR_REQUIRED", 57, 236},
> > ++  #endif
> > +   #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED
> > +     {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV,
> PROV_R_DERIVATION_FUNCTION_INIT_FAILED},
> > +   #else
> > +@@ -4935,6 +5177,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"EMS_NOT_ENABLED", 57, 233},
> > +   #endif
> > ++  #ifdef PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS
> > ++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", ERR_LIB_PROV,
> PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS},
> > ++  #else
> > ++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", 57, 244},
> > ++  #endif
> > +   #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK
> > +     {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV,
> PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK},
> > +   #else
> > +@@ -4990,6 +5237,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"FAILED_TO_SIGN", 57, 175},
> > +   #endif
> > ++  #ifdef PROV_R_FINAL_CALL_OUT_OF_ORDER
> > ++    {"FINAL_CALL_OUT_OF_ORDER", ERR_LIB_PROV,
> PROV_R_FINAL_CALL_OUT_OF_ORDER},
> > ++  #else
> > ++    {"FINAL_CALL_OUT_OF_ORDER", 57, 237},
> > ++  #endif
> > +   #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR
> > +     {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV,
> PROV_R_FIPS_MODULE_CONDITIONAL_ERROR},
> > +   #else
> > +@@ -5020,6 +5272,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INDICATOR_INTEGRITY_FAILURE", 57, 210},
> > +   #endif
> > ++  #ifdef PROV_R_INIT_CALL_OUT_OF_ORDER
> > ++    {"INIT_CALL_OUT_OF_ORDER", ERR_LIB_PROV,
> PROV_R_INIT_CALL_OUT_OF_ORDER},
> > ++  #else
> > ++    {"INIT_CALL_OUT_OF_ORDER", 57, 238},
> > ++  #endif
> > +   #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH
> > +     {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV,
> PROV_R_INSUFFICIENT_DRBG_STRENGTH},
> > +   #else
> > +@@ -5030,6 +5287,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_AAD", 57, 108},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_AEAD
> > ++    {"INVALID_AEAD", ERR_LIB_PROV, PROV_R_INVALID_AEAD},
> > ++  #else
> > ++    {"INVALID_AEAD", 57, 231},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_CONFIG_DATA
> > +     {"INVALID_CONFIG_DATA", ERR_LIB_PROV,
> PROV_R_INVALID_CONFIG_DATA},
> > +   #else
> > +@@ -5070,6 +5332,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_DIGEST_SIZE", 57, 218},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION
> > ++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION",
> ERR_LIB_PROV,
> PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION},
> > ++  #else
> > ++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", 57, 243},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_INPUT_LENGTH
> > +     {"INVALID_INPUT_LENGTH", ERR_LIB_PROV,
> PROV_R_INVALID_INPUT_LENGTH},
> > +   #else
> > +@@ -5085,6 +5352,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_IV_LENGTH", 57, 109},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_KDF
> > ++    {"INVALID_KDF", ERR_LIB_PROV, PROV_R_INVALID_KDF},
> > ++  #else
> > ++    {"INVALID_KDF", 57, 232},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_KEY
> > +     {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY},
> > +   #else
> > +@@ -5100,6 +5372,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_MAC", 57, 151},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_MEMORY_SIZE
> > ++    {"INVALID_MEMORY_SIZE", ERR_LIB_PROV,
> PROV_R_INVALID_MEMORY_SIZE},
> > ++  #else
> > ++    {"INVALID_MEMORY_SIZE", 57, 235},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_MGF1_MD
> > +     {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD},
> > +   #else
> > +@@ -5120,6 +5397,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_PADDING_MODE", 57, 168},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_PREHASHED_DIGEST_LENGTH
> > ++    {"INVALID_PREHASHED_DIGEST_LENGTH", ERR_LIB_PROV,
> PROV_R_INVALID_PREHASHED_DIGEST_LENGTH},
> > ++  #else
> > ++    {"INVALID_PREHASHED_DIGEST_LENGTH", 57, 241},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_PUBINFO
> > +     {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO},
> > +   #else
> > +@@ -5155,6 +5437,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_TAG_LENGTH", 57, 118},
> > +   #endif
> > ++  #ifdef PROV_R_INVALID_THREAD_POOL_SIZE
> > ++    {"INVALID_THREAD_POOL_SIZE", ERR_LIB_PROV,
> PROV_R_INVALID_THREAD_POOL_SIZE},
> > ++  #else
> > ++    {"INVALID_THREAD_POOL_SIZE", 57, 234},
> > ++  #endif
> > +   #ifdef PROV_R_INVALID_UKM_LENGTH
> > +     {"INVALID_UKM_LENGTH", ERR_LIB_PROV,
> PROV_R_INVALID_UKM_LENGTH},
> > +   #else
> > +@@ -5300,6 +5587,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NOT_XOF_OR_INVALID_LENGTH", 57, 113},
> > +   #endif
> > ++  #ifdef PROV_R_NO_INSTANCE_ALLOWED
> > ++    {"NO_INSTANCE_ALLOWED", ERR_LIB_PROV,
> PROV_R_NO_INSTANCE_ALLOWED},
> > ++  #else
> > ++    {"NO_INSTANCE_ALLOWED", 57, 242},
> > ++  #endif
> > +   #ifdef PROV_R_NO_KEY_SET
> > +     {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET},
> > +   #else
> > +@@ -5310,6 +5602,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NO_PARAMETERS_SET", 57, 177},
> > +   #endif
> > ++  #ifdef PROV_R_ONESHOT_CALL_OUT_OF_ORDER
> > ++    {"ONESHOT_CALL_OUT_OF_ORDER", ERR_LIB_PROV,
> PROV_R_ONESHOT_CALL_OUT_OF_ORDER},
> > ++  #else
> > ++    {"ONESHOT_CALL_OUT_OF_ORDER", 57, 239},
> > ++  #endif
> > +   #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
> > +     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV,
> PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE},
> > +   #else
> > +@@ -5460,6 +5757,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152},
> > +   #endif
> > ++  #ifdef PROV_R_UPDATE_CALL_OUT_OF_ORDER
> > ++    {"UPDATE_CALL_OUT_OF_ORDER", ERR_LIB_PROV,
> PROV_R_UPDATE_CALL_OUT_OF_ORDER},
> > ++  #else
> > ++    {"UPDATE_CALL_OUT_OF_ORDER", 57, 240},
> > ++  #endif
> > +   #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED
> > +     {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV,
> PROV_R_URI_AUTHORITY_UNSUPPORTED},
> > +   #else
> > +@@ -5595,6 +5897,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INTERNAL_ERROR", 36, 113},
> > +   #endif
> > ++  #ifdef RAND_R_INVALID_PROPERTY_QUERY
> > ++    {"INVALID_PROPERTY_QUERY", ERR_LIB_RAND,
> RAND_R_INVALID_PROPERTY_QUERY},
> > ++  #else
> > ++    {"INVALID_PROPERTY_QUERY", 36, 137},
> > ++  #endif
> > +   #ifdef RAND_R_IN_ERROR_STATE
> > +     {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE},
> > +   #else
> > +@@ -6210,6 +6517,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158},
> > +   #endif
> > ++  #ifdef SSL_R_BAD_CERTIFICATE
> > ++    {"BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_BAD_CERTIFICATE},
> > ++  #else
> > ++    {"BAD_CERTIFICATE", 20, 348},
> > ++  #endif
> > +   #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC
> > +     {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL,
> SSL_R_BAD_CHANGE_CIPHER_SPEC},
> > +   #else
> > +@@ -6220,6 +6532,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"BAD_CIPHER", 20, 186},
> > +   #endif
> > ++  #ifdef SSL_R_BAD_COMPRESSION_ALGORITHM
> > ++    {"BAD_COMPRESSION_ALGORITHM", ERR_LIB_SSL,
> SSL_R_BAD_COMPRESSION_ALGORITHM},
> > ++  #else
> > ++    {"BAD_COMPRESSION_ALGORITHM", 20, 326},
> > ++  #endif
> > +   #ifdef SSL_R_BAD_DATA
> > +     {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA},
> > +   #else
> > +@@ -6495,6 +6812,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"CONNECTION_TYPE_NOT_SET", 20, 144},
> > +   #endif
> > ++  #ifdef SSL_R_CONN_USE_ONLY
> > ++    {"CONN_USE_ONLY", ERR_LIB_SSL, SSL_R_CONN_USE_ONLY},
> > ++  #else
> > ++    {"CONN_USE_ONLY", 20, 356},
> > ++  #endif
> > +   #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED
> > +     {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL,
> SSL_R_CONTEXT_NOT_DANE_ENABLED},
> > +   #else
> > +@@ -6635,6 +6957,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"EE_KEY_TOO_SMALL", 20, 399},
> > +   #endif
> > ++  #ifdef SSL_R_EMPTY_RAW_PUBLIC_KEY
> > ++    {"EMPTY_RAW_PUBLIC_KEY", ERR_LIB_SSL,
> SSL_R_EMPTY_RAW_PUBLIC_KEY},
> > ++  #else
> > ++    {"EMPTY_RAW_PUBLIC_KEY", 20, 349},
> > ++  #endif
> > +   #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST
> > +     {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL,
> SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST},
> > +   #else
> > +@@ -6650,6 +6977,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151},
> > +   #endif
> > ++  #ifdef SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG
> > ++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", ERR_LIB_SSL,
> SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG},
> > ++  #else
> > ++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", 20, 419},
> > ++  #endif
> > +   #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN
> > +     {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL,
> SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN},
> > +   #else
> > +@@ -6680,11 +7012,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"EXT_LENGTH_MISMATCH", 20, 163},
> > +   #endif
> > ++  #ifdef SSL_R_FAILED_TO_GET_PARAMETER
> > ++    {"FAILED_TO_GET_PARAMETER", ERR_LIB_SSL,
> SSL_R_FAILED_TO_GET_PARAMETER},
> > ++  #else
> > ++    {"FAILED_TO_GET_PARAMETER", 20, 316},
> > ++  #endif
> > +   #ifdef SSL_R_FAILED_TO_INIT_ASYNC
> > +     {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC},
> > +   #else
> > +     {"FAILED_TO_INIT_ASYNC", 20, 405},
> > +   #endif
> > ++  #ifdef SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE
> > ++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", ERR_LIB_SSL,
> SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE},
> > ++  #else
> > ++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", 20, 417},
> > ++  #endif
> > ++  #ifdef SSL_R_FEATURE_NOT_RENEGOTIABLE
> > ++    {"FEATURE_NOT_RENEGOTIABLE", ERR_LIB_SSL,
> SSL_R_FEATURE_NOT_RENEGOTIABLE},
> > ++  #else
> > ++    {"FEATURE_NOT_RENEGOTIABLE", 20, 413},
> > ++  #endif
> > +   #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO
> > +     {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL,
> SSL_R_FRAGMENTED_CLIENT_HELLO},
> > +   #else
> > +@@ -6805,6 +7152,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"INVALID_NULL_CMD_NAME", 20, 385},
> > +   #endif
> > ++  #ifdef SSL_R_INVALID_RAW_PUBLIC_KEY
> > ++    {"INVALID_RAW_PUBLIC_KEY", ERR_LIB_SSL,
> SSL_R_INVALID_RAW_PUBLIC_KEY},
> > ++  #else
> > ++    {"INVALID_RAW_PUBLIC_KEY", 20, 350},
> > ++  #endif
> > ++  #ifdef SSL_R_INVALID_RECORD
> > ++    {"INVALID_RECORD", ERR_LIB_SSL, SSL_R_INVALID_RECORD},
> > ++  #else
> > ++    {"INVALID_RECORD", 20, 317},
> > ++  #endif
> > +   #ifdef SSL_R_INVALID_SEQUENCE_NUMBER
> > +     {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL,
> SSL_R_INVALID_SEQUENCE_NUMBER},
> > +   #else
> > +@@ -6865,6 +7222,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"LIBRARY_HAS_NO_CIPHERS", 20, 161},
> > +   #endif
> > ++  #ifdef SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED
> > ++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", ERR_LIB_SSL,
> SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED},
> > ++  #else
> > ++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", 20, 395},
> > ++  #endif
> > +   #ifdef SSL_R_MISSING_DSA_SIGNING_CERT
> > +     {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL,
> SSL_R_MISSING_DSA_SIGNING_CERT},
> > +   #else
> > +@@ -6925,6 +7287,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209},
> > +   #endif
> > ++  #ifdef SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION
> > ++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", ERR_LIB_SSL,
> SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION},
> > ++  #else
> > ++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", 20, 420},
> > ++  #endif
> > +   #ifdef SSL_R_MISSING_TMP_DH_KEY
> > +     {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY},
> > +   #else
> > +@@ -7065,6 +7432,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NO_SRTP_PROFILES", 20, 359},
> > +   #endif
> > ++  #ifdef SSL_R_NO_STREAM
> > ++    {"NO_STREAM", ERR_LIB_SSL, SSL_R_NO_STREAM},
> > ++  #else
> > ++    {"NO_STREAM", 20, 355},
> > ++  #endif
> > +   #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM
> > +     {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL,
> SSL_R_NO_SUITABLE_DIGEST_ALGORITHM},
> > +   #else
> > +@@ -7080,6 +7452,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"NO_SUITABLE_KEY_SHARE", 20, 101},
> > +   #endif
> > ++  #ifdef SSL_R_NO_SUITABLE_RECORD_LAYER
> > ++    {"NO_SUITABLE_RECORD_LAYER", ERR_LIB_SSL,
> SSL_R_NO_SUITABLE_RECORD_LAYER},
> > ++  #else
> > ++    {"NO_SUITABLE_RECORD_LAYER", 20, 322},
> > ++  #endif
> > +   #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM
> > +     {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL,
> SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM},
> > +   #else
> > +@@ -7160,6 +7537,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"PIPELINE_FAILURE", 20, 406},
> > +   #endif
> > ++  #ifdef SSL_R_POLL_REQUEST_NOT_SUPPORTED
> > ++    {"POLL_REQUEST_NOT_SUPPORTED", ERR_LIB_SSL,
> SSL_R_POLL_REQUEST_NOT_SUPPORTED},
> > ++  #else
> > ++    {"POLL_REQUEST_NOT_SUPPORTED", 20, 418},
> > ++  #endif
> > +   #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR
> > +     {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL,
> SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR},
> > +   #else
> > +@@ -7190,6 +7572,21 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"PSK_NO_SERVER_CB", 20, 225},
> > +   #endif
> > ++  #ifdef SSL_R_QUIC_HANDSHAKE_LAYER_ERROR
> > ++    {"QUIC_HANDSHAKE_LAYER_ERROR", ERR_LIB_SSL,
> SSL_R_QUIC_HANDSHAKE_LAYER_ERROR},
> > ++  #else
> > ++    {"QUIC_HANDSHAKE_LAYER_ERROR", 20, 393},
> > ++  #endif
> > ++  #ifdef SSL_R_QUIC_NETWORK_ERROR
> > ++    {"QUIC_NETWORK_ERROR", ERR_LIB_SSL,
> SSL_R_QUIC_NETWORK_ERROR},
> > ++  #else
> > ++    {"QUIC_NETWORK_ERROR", 20, 387},
> > ++  #endif
> > ++  #ifdef SSL_R_QUIC_PROTOCOL_ERROR
> > ++    {"QUIC_PROTOCOL_ERROR", ERR_LIB_SSL,
> SSL_R_QUIC_PROTOCOL_ERROR},
> > ++  #else
> > ++    {"QUIC_PROTOCOL_ERROR", 20, 382},
> > ++  #endif
> > +   #ifdef SSL_R_READ_BIO_NOT_SET
> > +     {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET},
> > +   #else
> > +@@ -7200,6 +7597,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"READ_TIMEOUT_EXPIRED", 20, 312},
> > +   #endif
> > ++  #ifdef SSL_R_RECORDS_NOT_RELEASED
> > ++    {"RECORDS_NOT_RELEASED", ERR_LIB_SSL,
> SSL_R_RECORDS_NOT_RELEASED},
> > ++  #else
> > ++    {"RECORDS_NOT_RELEASED", 20, 321},
> > ++  #endif
> > ++  #ifdef SSL_R_RECORD_LAYER_FAILURE
> > ++    {"RECORD_LAYER_FAILURE", ERR_LIB_SSL,
> SSL_R_RECORD_LAYER_FAILURE},
> > ++  #else
> > ++    {"RECORD_LAYER_FAILURE", 20, 313},
> > ++  #endif
> > +   #ifdef SSL_R_RECORD_LENGTH_MISMATCH
> > +     {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL,
> SSL_R_RECORD_LENGTH_MISMATCH},
> > +   #else
> > +@@ -7210,6 +7617,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"RECORD_TOO_SMALL", 20, 298},
> > +   #endif
> > ++  #ifdef SSL_R_REMOTE_PEER_ADDRESS_NOT_SET
> > ++    {"REMOTE_PEER_ADDRESS_NOT_SET", ERR_LIB_SSL,
> SSL_R_REMOTE_PEER_ADDRESS_NOT_SET},
> > ++  #else
> > ++    {"REMOTE_PEER_ADDRESS_NOT_SET", 20, 346},
> > ++  #endif
> > +   #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG
> > +     {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL,
> SSL_R_RENEGOTIATE_EXT_TOO_LONG},
> > +   #else
> > +@@ -7255,6 +7667,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SCT_VERIFICATION_FAILED", 20, 208},
> > +   #endif
> > ++  #ifdef SSL_R_SEQUENCE_CTR_WRAPPED
> > ++    {"SEQUENCE_CTR_WRAPPED", ERR_LIB_SSL,
> SSL_R_SEQUENCE_CTR_WRAPPED},
> > ++  #else
> > ++    {"SEQUENCE_CTR_WRAPPED", 20, 327},
> > ++  #endif
> > +   #ifdef SSL_R_SERVERHELLO_TLSEXT
> > +     {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT},
> > +   #else
> > +@@ -7325,6 +7742,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE
> > ++    {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_BAD_CERTIFICATE},
> > ++  #else
> > ++    {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
> > ++  #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
> > ++    {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
> > ++  #else
> > ++    {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
> > +     {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
> > +   #else
> > +@@ -7335,11 +7762,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED
> > ++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED},
> > ++  #else
> > ++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
> > +     {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
> > +   #else
> > +     {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
> > ++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
> > ++  #else
> > ++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
> > ++  #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
> > ++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
> > ++  #else
> > ++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
> > +     {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
> > +   #else
> > +@@ -7350,6 +7792,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE
> > ++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE},
> > ++  #else
> > ++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
> > ++  #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
> > ++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
> > ++  #else
> > ++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
> > +     {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
> > +   #else
> > +@@ -7360,11 +7812,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER
> > ++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER},
> > ++  #else
> > ++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
> > +     {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
> > +   #else
> > +     {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
> > ++    {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
> > ++  #else
> > ++    {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
> > ++  #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
> > ++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
> > ++  #else
> > ++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010},
> > ++  #endif
> > +   #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
> > +     {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
> > +   #else
> > +@@ -7375,6 +7842,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
> > +   #endif
> > ++  #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
> > ++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL,
> SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE},
> > ++  #else
> > ++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
> > ++  #endif
> > +   #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY
> > +     {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL,
> SSL_R_SSL_COMMAND_SECTION_EMPTY},
> > +   #else
> > +@@ -7450,6 +7922,36 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"STILL_IN_INIT", 20, 121},
> > +   #endif
> > ++  #ifdef SSL_R_STREAM_COUNT_LIMITED
> > ++    {"STREAM_COUNT_LIMITED", ERR_LIB_SSL,
> SSL_R_STREAM_COUNT_LIMITED},
> > ++  #else
> > ++    {"STREAM_COUNT_LIMITED", 20, 411},
> > ++  #endif
> > ++  #ifdef SSL_R_STREAM_FINISHED
> > ++    {"STREAM_FINISHED", ERR_LIB_SSL, SSL_R_STREAM_FINISHED},
> > ++  #else
> > ++    {"STREAM_FINISHED", 20, 365},
> > ++  #endif
> > ++  #ifdef SSL_R_STREAM_RECV_ONLY
> > ++    {"STREAM_RECV_ONLY", ERR_LIB_SSL, SSL_R_STREAM_RECV_ONLY},
> > ++  #else
> > ++    {"STREAM_RECV_ONLY", 20, 366},
> > ++  #endif
> > ++  #ifdef SSL_R_STREAM_RESET
> > ++    {"STREAM_RESET", ERR_LIB_SSL, SSL_R_STREAM_RESET},
> > ++  #else
> > ++    {"STREAM_RESET", 20, 375},
> > ++  #endif
> > ++  #ifdef SSL_R_STREAM_SEND_ONLY
> > ++    {"STREAM_SEND_ONLY", ERR_LIB_SSL, SSL_R_STREAM_SEND_ONLY},
> > ++  #else
> > ++    {"STREAM_SEND_ONLY", 20, 379},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
> > ++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL,
> SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
> > ++  #else
> > ++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
> > +     {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL,
> SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
> > +   #else
> > +@@ -7460,6 +7962,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION
> > ++    {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL,
> SSL_R_TLSV13_ALERT_MISSING_EXTENSION},
> > ++  #else
> > ++    {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
> > ++    {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_ACCESS_DENIED},
> > ++  #else
> > ++    {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
> > +     {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_ACCESS_DENIED},
> > +   #else
> > +@@ -7470,6 +7982,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR
> > ++    {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_DECODE_ERROR},
> > ++  #else
> > ++    {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
> > ++    {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
> > ++  #else
> > ++    {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
> > +     {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
> > +   #else
> > +@@ -7480,6 +8002,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR
> > ++    {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_DECRYPT_ERROR},
> > ++  #else
> > ++    {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
> > ++    {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
> > ++  #else
> > ++    {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
> > +     {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
> > +   #else
> > +@@ -7490,6 +8022,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK
> > ++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK},
> > ++  #else
> > ++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
> > ++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
> > ++  #else
> > ++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
> > +     {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
> > +   #else
> > +@@ -7500,6 +8042,26 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR
> > ++    {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_INTERNAL_ERROR},
> > ++  #else
> > ++    {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
> > ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
> > ++  #else
> > ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
> > ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
> > ++  #else
> > ++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
> > ++    {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
> > ++  #else
> > ++    {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
> > +     {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
> > +   #else
> > +@@ -7510,21 +8072,56 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION
> > ++    {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_PROTOCOL_VERSION},
> > ++  #else
> > ++    {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
> > +     {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
> > +   #else
> > +     {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
> > ++    {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
> > ++  #else
> > ++    {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
> > ++    {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_UNKNOWN_CA},
> > ++  #else
> > ++    {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
> > +     {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_UNKNOWN_CA},
> > +   #else
> > +     {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
> > ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
> > ++  #else
> > ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
> > ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
> > ++  #else
> > ++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
> > +     {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_USER_CANCELLED},
> > +   #else
> > +     {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
> > ++    {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL,
> SSL_R_TLSV1_ALERT_USER_CANCELLED},
> > ++  #else
> > ++    {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
> > ++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL,
> SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
> > ++  #else
> > ++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
> > +     {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL,
> SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
> > +   #else
> > +@@ -7535,6 +8132,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
> > ++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL,
> SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE},
> > ++  #else
> > ++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
> > ++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL,
> SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
> > ++  #else
> > ++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
> > +     {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL,
> SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
> > +   #else
> > +@@ -7545,6 +8152,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
> > +   #endif
> > ++  #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME
> > ++    {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL,
> SSL_R_TLSV1_UNRECOGNIZED_NAME},
> > ++  #else
> > ++    {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
> > ++  #endif
> > ++  #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
> > ++    {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL,
> SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
> > ++  #else
> > ++    {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110},
> > ++  #endif
> > +   #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
> > +     {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL,
> SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
> > +   #else
> > +@@ -7665,6 +8282,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250},
> > +   #endif
> > ++  #ifdef SSL_R_UNKNOWN_MANDATORY_PARAMETER
> > ++    {"UNKNOWN_MANDATORY_PARAMETER", ERR_LIB_SSL,
> SSL_R_UNKNOWN_MANDATORY_PARAMETER},
> > ++  #else
> > ++    {"UNKNOWN_MANDATORY_PARAMETER", 20, 323},
> > ++  #endif
> > +   #ifdef SSL_R_UNKNOWN_PKEY_TYPE
> > +     {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE},
> > +   #else
> > +@@ -7700,6 +8322,21 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257},
> > +   #endif
> > ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE
> > ++    {"UNSUPPORTED_CONFIG_VALUE", ERR_LIB_SSL,
> SSL_R_UNSUPPORTED_CONFIG_VALUE},
> > ++  #else
> > ++    {"UNSUPPORTED_CONFIG_VALUE", 20, 414},
> > ++  #endif
> > ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS
> > ++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", ERR_LIB_SSL,
> SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS},
> > ++  #else
> > ++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", 20, 415},
> > ++  #endif
> > ++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_OP
> > ++    {"UNSUPPORTED_CONFIG_VALUE_OP", ERR_LIB_SSL,
> SSL_R_UNSUPPORTED_CONFIG_VALUE_OP},
> > ++  #else
> > ++    {"UNSUPPORTED_CONFIG_VALUE_OP", 20, 416},
> > ++  #endif
> > +   #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE
> > +     {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL,
> SSL_R_UNSUPPORTED_ELLIPTIC_CURVE},
> > +   #else
> > +@@ -7720,6 +8357,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_STATUS_TYPE", 20, 329},
> > +   #endif
> > ++  #ifdef SSL_R_UNSUPPORTED_WRITE_FLAG
> > ++    {"UNSUPPORTED_WRITE_FLAG", ERR_LIB_SSL,
> SSL_R_UNSUPPORTED_WRITE_FLAG},
> > ++  #else
> > ++    {"UNSUPPORTED_WRITE_FLAG", 20, 412},
> > ++  #endif
> > +   #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED
> > +     {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL,
> SSL_R_USE_SRTP_NOT_NEGOTIATED},
> > +   #else
> > +@@ -7750,6 +8392,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"WRONG_CURVE", 20, 378},
> > +   #endif
> > ++  #ifdef SSL_R_WRONG_RPK_TYPE
> > ++    {"WRONG_RPK_TYPE", ERR_LIB_SSL, SSL_R_WRONG_RPK_TYPE},
> > ++  #else
> > ++    {"WRONG_RPK_TYPE", 20, 351},
> > ++  #endif
> > +   #ifdef SSL_R_WRONG_SIGNATURE_LENGTH
> > +     {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL,
> SSL_R_WRONG_SIGNATURE_LENGTH},
> > +   #else
> > +@@ -8055,6 +8702,16 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"BAD_OBJECT", 34, 119},
> > +   #endif
> > ++  #ifdef X509V3_R_BAD_OPTION
> > ++    {"BAD_OPTION", ERR_LIB_X509V3, X509V3_R_BAD_OPTION},
> > ++  #else
> > ++    {"BAD_OPTION", 34, 170},
> > ++  #endif
> > ++  #ifdef X509V3_R_BAD_VALUE
> > ++    {"BAD_VALUE", ERR_LIB_X509V3, X509V3_R_BAD_VALUE},
> > ++  #else
> > ++    {"BAD_VALUE", 34, 171},
> > ++  #endif
> > +   #ifdef X509V3_R_BN_DEC2BN_ERROR
> > +     {"BN_DEC2BN_ERROR", ERR_LIB_X509V3,
> X509V3_R_BN_DEC2BN_ERROR},
> > +   #else
> > +@@ -8370,6 +9027,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNKNOWN_OPTION", 34, 120},
> > +   #endif
> > ++  #ifdef X509V3_R_UNKNOWN_VALUE
> > ++    {"UNKNOWN_VALUE", ERR_LIB_X509V3, X509V3_R_UNKNOWN_VALUE},
> > ++  #else
> > ++    {"UNKNOWN_VALUE", 34, 172},
> > ++  #endif
> > +   #ifdef X509V3_R_UNSUPPORTED_OPTION
> > +     {"UNSUPPORTED_OPTION", ERR_LIB_X509V3,
> X509V3_R_UNSUPPORTED_OPTION},
> > +   #else
> > +@@ -8430,6 +9092,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"CRL_VERIFY_FAILURE", 11, 131},
> > +   #endif
> > ++  #ifdef X509_R_DUPLICATE_ATTRIBUTE
> > ++    {"DUPLICATE_ATTRIBUTE", ERR_LIB_X509,
> X509_R_DUPLICATE_ATTRIBUTE},
> > ++  #else
> > ++    {"DUPLICATE_ATTRIBUTE", 11, 140},
> > ++  #endif
> > +   #ifdef X509_R_ERROR_GETTING_MD_BY_NID
> > +     {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509,
> X509_R_ERROR_GETTING_MD_BY_NID},
> > +   #else
> > +@@ -8590,6 +9257,11 @@ static struct py_ssl_error_code error_codes[] = {
> > +   #else
> > +     {"UNSUPPORTED_ALGORITHM", 11, 111},
> > +   #endif
> > ++  #ifdef X509_R_UNSUPPORTED_VERSION
> > ++    {"UNSUPPORTED_VERSION", ERR_LIB_X509,
> X509_R_UNSUPPORTED_VERSION},
> > ++  #else
> > ++    {"UNSUPPORTED_VERSION", 11, 145},
> > ++  #endif
> > +   #ifdef X509_R_WRONG_LOOKUP_TYPE
> > +     {"WRONG_LOOKUP_TYPE", ERR_LIB_X509,
> X509_R_WRONG_LOOKUP_TYPE},
> > +   #else
> > +diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-
> analyzer/cpython/_parser.py
> > +index 21be53e7884..a08b32fa45d 100644
> > +--- a/Tools/c-analyzer/cpython/_parser.py
> > ++++ b/Tools/c-analyzer/cpython/_parser.py
> > +@@ -70,9 +70,7 @@ Python/thread_pthread.h
> > + Python/thread_pthread_stubs.h
> > +
> > + # only huge constants (safe but parsing is slow)
> > +-Modules/_ssl_data_31.h
> > +-Modules/_ssl_data_300.h
> > +-Modules/_ssl_data_111.h
> > ++Modules/_ssl_data_*.h
> > + Modules/cjkcodecs/mappings_*.h
> > + Modules/unicodedata_db.h
> > + Modules/unicodename_db.h
> > +diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py
> > +index 9860871..0cd05c7 100755
> > +--- a/Tools/ssl/make_ssl_data.py
> > ++++ b/Tools/ssl/make_ssl_data.py
> > +@@ -5,9 +5,28 @@ This script should be called *manually* when we want to
> upgrade SSLError
> > + `library` and `reason` mnemonics to a more recent OpenSSL version.
> > +
> > + It takes two arguments:
> > +-- the path to the OpenSSL source tree (e.g. git checkout)
> > ++- the path to the OpenSSL git checkout
> > + - the path to the header file to be generated Modules/_ssl_data_{version}.h
> > + - error codes are version specific
> > ++
> > ++The OpenSSL git checkout should be at a specific tag, using commands like:
> > ++    git tag --list 'openssl-*'
> > ++    git switch --detach openssl-3.4.0
> > ++
> > ++
> > ++After generating the definitions, compare the result with newest pre-existing
> file.
> > ++You can use a command like:
> > ++
> > ++    git diff --no-index Modules/_ssl_data_31.h Modules/_ssl_data_34.h
> > ++
> > ++- If the new version *only* adds new definitions, remove the pre-existing file
> > ++  and adjust the #include in _ssl.c to point to the new version.
> > ++- If the new version removes or renumbers some definitions, keep both files
> and
> > ++  add a new #include in _ssl.c.
> > ++
> > ++A newly supported OpenSSL version should also be added to:
> > ++- Tools/ssl/multissltests.py
> > ++- .github/workflows/build.yml
> > + """
> > +
> > + import argparse
> > +@@ -16,6 +35,7 @@ import operator
> > + import os
> > + import re
> > + import sys
> > ++import subprocess
> > +
> > +
> > + parser = argparse.ArgumentParser(
> > +@@ -118,9 +138,17 @@ def main():
> > +     # sort by libname, numeric error code
> > +     args.reasons = sorted(reasons, key=operator.itemgetter(0, 3))
> > +
> > ++    git_describe = subprocess.run(
> > ++        ['git', 'describe', '--long', '--dirty'],
> > ++        cwd=args.srcdir,
> > ++        capture_output=True,
> > ++        encoding='utf-8',
> > ++        check=True,
> > ++        )
> > +     lines = [
> > +-        "/* File generated by Tools/ssl/make_ssl_data.py */"
> > +-        f"/* Generated on {datetime.datetime.utcnow().isoformat()} */"
> > ++        "/* File generated by Tools/ssl/make_ssl_data.py */",
> > ++        f"/* Generated on {datetime.datetime.now(datetime.UTC).isoformat()}
> */",
> > ++        f"/* Generated from Git commit {git_describe.stdout.strip()} */",
> > +     ]
> > +     lines.extend(gen_library_codes(args))
> > +     lines.append("")
> > +diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py
> > +index eae0e0c..fb06f63 100755
> > +--- a/Tools/ssl/multissltests.py
> > ++++ b/Tools/ssl/multissltests.py
> > +@@ -51,6 +51,7 @@ OPENSSL_RECENT_VERSIONS = [
> > +     "3.1.7",
> > +     "3.2.3",
> > +     "3.3.2",
> > ++    "3.4.0",
> > + ]
> > +
> > + LIBRESSL_OLD_VERSIONS = [
> > +--
> > +2.30.2
> > +
> > diff --git a/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-
> ERR_LIB_SYS.patch b/meta/recipes-devtools/python/python3/0001-ssl-Raise-
> OSError-for-ERR_LIB_SYS.patch
> > new file mode 100644
> > index 0000000000..18e0f208c7
> > --- /dev/null
> > +++ b/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-
> ERR_LIB_SYS.patch
> > @@ -0,0 +1,51 @@
> > +From 11e0523eb363b7def4bc64d24a04e88d8670a691 Mon Sep 17 00:00:00
> 2001
> > +From: Petr Viktorin <encukou@gmail.com>
> > +Date: Thu, 28 Nov 2024 13:32:30 +0100
> > +Subject: [PATCH] ssl: Raise OSError for ERR_LIB_SYS
> > +
> > +From the ERR_raise manpage:
> > +
> > +    ERR_LIB_SYS
> > +
> > +        This "library code" indicates that a system error is
> > +        being reported.  In this case, the reason code given
> > +        to `ERR_raise()` and `ERR_raise_data()` *must* be
> > +        `errno(3)`.
> > +
> > +Upstream-Status: Submitted
> [https://github.com/python/cpython/pull/127361]
> > +Signed-off-by: Peter Marko <peter.marko@siemens.com>
> > +---
> > + Modules/_ssl.c | 10 ++++++++++
> > + 1 file changed, 10 insertions(+)
> > +
> > +diff --git a/Modules/_ssl.c b/Modules/_ssl.c
> > +index e5b8bf21002..a243ba4b9bc 100644
> > +--- a/Modules/_ssl.c
> > ++++ b/Modules/_ssl.c
> > +@@ -667,6 +667,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char
> *filename, int lineno)
> > +                         ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) {
> > +                     type = state->PySSLCertVerificationErrorObject;
> > +                 }
> > ++                if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
> > ++                    // A system error is being reported; reason is set to errno
> > ++                    errno = ERR_GET_REASON(e);
> > ++                    return PyErr_SetFromErrno(PyExc_OSError);
> > ++                }
> > +                 p = PY_SSL_ERROR_SYSCALL;
> > +             }
> > +             break;
> > +@@ -692,6 +697,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char
> *filename, int lineno)
> > +                 errstr = "EOF occurred in violation of protocol";
> > +             }
> > + #endif
> > ++            if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
> > ++                // A system error is being reported; reason is set to errno
> > ++                errno = ERR_GET_REASON(e);
> > ++                return PyErr_SetFromErrno(PyExc_OSError);
> > ++            }
> > +             break;
> > +         }
> > +         default:
> > +--
> > +2.30.2
> > +
> > diff --git a/meta/recipes-devtools/python/python3_3.13.0.bb b/meta/recipes-
> devtools/python/python3_3.13.0.bb
> > index a393b5e4a0..b3170879b9 100644
> > --- a/meta/recipes-devtools/python/python3_3.13.0.bb
> > +++ b/meta/recipes-devtools/python/python3_3.13.0.bb
> > @@ -31,6 +31,8 @@ SRC_URI =
> "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
> >             file://0001-test_active_children-skip-problematic-test.patch \
> >             file://0001-test_readline-skip-limited-history-test.patch \
> >             file://fix-armv5.patch \
> > +           file://0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
> \
> > +           file://0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch \
> >             "
> >
> >  SRC_URI:append:class-native = " \
> > --
> > 2.30.2
> >
> >
> > -=-=-=-=-=-=-=-=-=-=-=-
> > Links: You receive all messages sent to this group.
> > View/Reply Online (#208030):
> https://lists.openembedded.org/g/openembedded-core/message/208030
> > Mute This Topic: https://lists.openembedded.org/mt/109838102/1997914
> > Group Owner: openembedded-core+owner@lists.openembedded.org
> > Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
> [raj.khem@gmail.com]
> > -=-=-=-=-=-=-=-=-=-=-=-
> >
diff mbox series

Patch

diff --git a/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch b/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
new file mode 100644
index 0000000000..d8ad803d50
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch
@@ -0,0 +1,1452 @@ 
+From db5c5763f3e3172f1dd011355b41469770dafc0f Mon Sep 17 00:00:00 2001
+From: Petr Viktorin <encukou@gmail.com>
+Date: Thu, 28 Nov 2024 13:29:27 +0100
+Subject: [PATCH] gh-127330: Update for OpenSSL 3.4 & document+improve the
+ update process (GH-127331)
+
+- Add `git describe` output to headers generated by `make_ssl_data.py`
+
+  This info is more important than the date when the file was generated.
+  It does mean that the tool now requires a Git checkout of OpenSSL,
+  not for example a release tarball.
+
+- Regenerate the older file to add the info.
+  To the other older file, add a note about manual edits.
+
+- Add notes on how to add a new OpenSSL version
+
+- Add 3.4 error messages and multissl tests
+
+Upstream-Status: Submitted [https://github.com/python/cpython/commit/db5c5763f3e3172f1dd011355b41469770dafc0f]
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ Modules/_ssl.c                             |   2 +-
+ Modules/_ssl_data_111.h                    |   4 +-
+ Modules/_ssl_data_300.h                    |   5 +-
+ Modules/{_ssl_data_31.h => _ssl_data_34.h} | 674 ++++++++++++++++++++-
+ Tools/c-analyzer/cpython/_parser.py        |   4 +-
+ Tools/ssl/make_ssl_data.py                 |  34 +-
+ Tools/ssl/multissltests.py                 |   1 +
+ 7 files changed, 714 insertions(+), 10 deletions(-)
+ rename Modules/{_ssl_data_31.h => _ssl_data_34.h} (92%)
+
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index b6b5ebf094c..e5b8bf21002 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -122,7 +122,7 @@ static void _PySSLFixErrno(void) {
+ 
+ /* Include generated data (error codes) */
+ #if (OPENSSL_VERSION_NUMBER >= 0x30100000L)
+-#include "_ssl_data_31.h"
++#include "_ssl_data_34.h"
+ #elif (OPENSSL_VERSION_NUMBER >= 0x30000000L)
+ #include "_ssl_data_300.h"
+ #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L)
+diff --git a/Modules/_ssl_data_111.h b/Modules/_ssl_data_111.h
+index 093c786e6a2..061fac2bd58 100644
+--- a/Modules/_ssl_data_111.h
++++ b/Modules/_ssl_data_111.h
+@@ -1,4 +1,6 @@
+-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T02:58:04.081473 */
++/* File generated by Tools/ssl/make_ssl_data.py */
++/* Generated on 2024-11-27T12:48:46.194048+00:00 */
++/* Generated from Git commit OpenSSL_1_1_1w-0-ge04bd3433f */
+ static struct py_ssl_library_code library_codes[] = {
+ #ifdef ERR_LIB_ASN1
+     {"ASN1", ERR_LIB_ASN1},
+diff --git a/Modules/_ssl_data_300.h b/Modules/_ssl_data_300.h
+index dc66731f6b6..b687ce43c77 100644
+--- a/Modules/_ssl_data_300.h
++++ b/Modules/_ssl_data_300.h
+@@ -1,4 +1,7 @@
+-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:03:52.163218 */
++/* File generated by Tools/ssl/make_ssl_data.py */
++/* Generated on 2023-06-01T03:03:52.163218 */
++/* Manually edited to add definitions from 1.1.1 (GH-105174) */
++
+ static struct py_ssl_library_code library_codes[] = {
+ #ifdef ERR_LIB_ASN1
+     {"ASN1", ERR_LIB_ASN1},
+diff --git a/Modules/_ssl_data_31.h b/Modules/_ssl_data_34.h
+similarity index 92%
+rename from Modules/_ssl_data_31.h
+rename to Modules/_ssl_data_34.h
+index c589c501f4e..d4af3e1c1fa 100644
+--- a/Modules/_ssl_data_31.h
++++ b/Modules/_ssl_data_34.h
+@@ -1,4 +1,6 @@
+-/* File generated by Tools/ssl/make_ssl_data.py *//* Generated on 2023-06-01T03:04:00.275280 */
++/* File generated by Tools/ssl/make_ssl_data.py */
++/* Generated on 2024-11-27T12:35:52.276767+00:00 */
++/* Generated from Git commit openssl-3.4.0-0-g98acb6b028 */
+ static struct py_ssl_library_code library_codes[] = {
+ #ifdef ERR_LIB_ASN1
+     {"ASN1", ERR_LIB_ASN1},
+@@ -300,6 +302,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"FIRST_NUM_TOO_LARGE", 13, 122},
+   #endif
++  #ifdef ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT
++    {"GENERALIZEDTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_GENERALIZEDTIME_IS_TOO_SHORT},
++  #else
++    {"GENERALIZEDTIME_IS_TOO_SHORT", 13, 232},
++  #endif
+   #ifdef ASN1_R_HEADER_TOO_LONG
+     {"HEADER_TOO_LONG", ERR_LIB_ASN1, ASN1_R_HEADER_TOO_LONG},
+   #else
+@@ -730,6 +737,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_TYPE", 13, 196},
+   #endif
++  #ifdef ASN1_R_UTCTIME_IS_TOO_SHORT
++    {"UTCTIME_IS_TOO_SHORT", ERR_LIB_ASN1, ASN1_R_UTCTIME_IS_TOO_SHORT},
++  #else
++    {"UTCTIME_IS_TOO_SHORT", 13, 233},
++  #endif
+   #ifdef ASN1_R_WRONG_INTEGER_TYPE
+     {"WRONG_INTEGER_TYPE", ERR_LIB_ASN1, ASN1_R_WRONG_INTEGER_TYPE},
+   #else
+@@ -845,6 +857,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"LISTEN_V6_ONLY", 32, 136},
+   #endif
++  #ifdef BIO_R_LOCAL_ADDR_NOT_AVAILABLE
++    {"LOCAL_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_LOCAL_ADDR_NOT_AVAILABLE},
++  #else
++    {"LOCAL_ADDR_NOT_AVAILABLE", 32, 111},
++  #endif
+   #ifdef BIO_R_LOOKUP_RETURNED_NOTHING
+     {"LOOKUP_RETURNED_NOTHING", ERR_LIB_BIO, BIO_R_LOOKUP_RETURNED_NOTHING},
+   #else
+@@ -860,6 +877,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NBIO_CONNECT_ERROR", 32, 110},
+   #endif
++  #ifdef BIO_R_NON_FATAL
++    {"NON_FATAL", ERR_LIB_BIO, BIO_R_NON_FATAL},
++  #else
++    {"NON_FATAL", 32, 112},
++  #endif
+   #ifdef BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED
+     {"NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED", ERR_LIB_BIO, BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED},
+   #else
+@@ -880,6 +902,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NO_SUCH_FILE", 32, 128},
+   #endif
++  #ifdef BIO_R_PEER_ADDR_NOT_AVAILABLE
++    {"PEER_ADDR_NOT_AVAILABLE", ERR_LIB_BIO, BIO_R_PEER_ADDR_NOT_AVAILABLE},
++  #else
++    {"PEER_ADDR_NOT_AVAILABLE", 32, 114},
++  #endif
++  #ifdef BIO_R_PORT_MISMATCH
++    {"PORT_MISMATCH", ERR_LIB_BIO, BIO_R_PORT_MISMATCH},
++  #else
++    {"PORT_MISMATCH", 32, 150},
++  #endif
++  #ifdef BIO_R_TFO_DISABLED
++    {"TFO_DISABLED", ERR_LIB_BIO, BIO_R_TFO_DISABLED},
++  #else
++    {"TFO_DISABLED", 32, 106},
++  #endif
++  #ifdef BIO_R_TFO_NO_KERNEL_SUPPORT
++    {"TFO_NO_KERNEL_SUPPORT", ERR_LIB_BIO, BIO_R_TFO_NO_KERNEL_SUPPORT},
++  #else
++    {"TFO_NO_KERNEL_SUPPORT", 32, 108},
++  #endif
+   #ifdef BIO_R_TRANSFER_ERROR
+     {"TRANSFER_ERROR", ERR_LIB_BIO, BIO_R_TRANSFER_ERROR},
+   #else
+@@ -920,6 +962,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNABLE_TO_REUSEADDR", 32, 139},
+   #endif
++  #ifdef BIO_R_UNABLE_TO_TFO
++    {"UNABLE_TO_TFO", ERR_LIB_BIO, BIO_R_UNABLE_TO_TFO},
++  #else
++    {"UNABLE_TO_TFO", 32, 109},
++  #endif
+   #ifdef BIO_R_UNAVAILABLE_IP_FAMILY
+     {"UNAVAILABLE_IP_FAMILY", ERR_LIB_BIO, BIO_R_UNAVAILABLE_IP_FAMILY},
+   #else
+@@ -1230,6 +1277,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"ERROR_VALIDATING_SIGNATURE", 58, 171},
+   #endif
++  #ifdef CMP_R_EXPECTED_POLLREQ
++    {"EXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_EXPECTED_POLLREQ},
++  #else
++    {"EXPECTED_POLLREQ", 58, 104},
++  #endif
+   #ifdef CMP_R_FAILED_BUILDING_OWN_CHAIN
+     {"FAILED_BUILDING_OWN_CHAIN", ERR_LIB_CMP, CMP_R_FAILED_BUILDING_OWN_CHAIN},
+   #else
+@@ -1250,16 +1302,51 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"FAIL_INFO_OUT_OF_RANGE", 58, 129},
+   #endif
++  #ifdef CMP_R_GENERATE_CERTREQTEMPLATE
++    {"GENERATE_CERTREQTEMPLATE", ERR_LIB_CMP, CMP_R_GENERATE_CERTREQTEMPLATE},
++  #else
++    {"GENERATE_CERTREQTEMPLATE", 58, 197},
++  #endif
++  #ifdef CMP_R_GENERATE_CRLSTATUS
++    {"GENERATE_CRLSTATUS", ERR_LIB_CMP, CMP_R_GENERATE_CRLSTATUS},
++  #else
++    {"GENERATE_CRLSTATUS", 58, 198},
++  #endif
++  #ifdef CMP_R_GETTING_GENP
++    {"GETTING_GENP", ERR_LIB_CMP, CMP_R_GETTING_GENP},
++  #else
++    {"GETTING_GENP", 58, 192},
++  #endif
++  #ifdef CMP_R_GET_ITAV
++    {"GET_ITAV", ERR_LIB_CMP, CMP_R_GET_ITAV},
++  #else
++    {"GET_ITAV", 58, 199},
++  #endif
+   #ifdef CMP_R_INVALID_ARGS
+     {"INVALID_ARGS", ERR_LIB_CMP, CMP_R_INVALID_ARGS},
+   #else
+     {"INVALID_ARGS", 58, 100},
+   #endif
++  #ifdef CMP_R_INVALID_GENP
++    {"INVALID_GENP", ERR_LIB_CMP, CMP_R_INVALID_GENP},
++  #else
++    {"INVALID_GENP", 58, 193},
++  #endif
++  #ifdef CMP_R_INVALID_KEYSPEC
++    {"INVALID_KEYSPEC", ERR_LIB_CMP, CMP_R_INVALID_KEYSPEC},
++  #else
++    {"INVALID_KEYSPEC", 58, 202},
++  #endif
+   #ifdef CMP_R_INVALID_OPTION
+     {"INVALID_OPTION", ERR_LIB_CMP, CMP_R_INVALID_OPTION},
+   #else
+     {"INVALID_OPTION", 58, 174},
+   #endif
++  #ifdef CMP_R_INVALID_ROOTCAKEYUPDATE
++    {"INVALID_ROOTCAKEYUPDATE", ERR_LIB_CMP, CMP_R_INVALID_ROOTCAKEYUPDATE},
++  #else
++    {"INVALID_ROOTCAKEYUPDATE", 58, 195},
++  #endif
+   #ifdef CMP_R_MISSING_CERTID
+     {"MISSING_CERTID", ERR_LIB_CMP, CMP_R_MISSING_CERTID},
+   #else
+@@ -1425,6 +1512,21 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TRANSFER_ERROR", 58, 159},
+   #endif
++  #ifdef CMP_R_UNCLEAN_CTX
++    {"UNCLEAN_CTX", ERR_LIB_CMP, CMP_R_UNCLEAN_CTX},
++  #else
++    {"UNCLEAN_CTX", 58, 191},
++  #endif
++  #ifdef CMP_R_UNEXPECTED_CERTPROFILE
++    {"UNEXPECTED_CERTPROFILE", ERR_LIB_CMP, CMP_R_UNEXPECTED_CERTPROFILE},
++  #else
++    {"UNEXPECTED_CERTPROFILE", 58, 196},
++  #endif
++  #ifdef CMP_R_UNEXPECTED_CRLSTATUSLIST
++    {"UNEXPECTED_CRLSTATUSLIST", ERR_LIB_CMP, CMP_R_UNEXPECTED_CRLSTATUSLIST},
++  #else
++    {"UNEXPECTED_CRLSTATUSLIST", 58, 201},
++  #endif
+   #ifdef CMP_R_UNEXPECTED_PKIBODY
+     {"UNEXPECTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNEXPECTED_PKIBODY},
+   #else
+@@ -1435,11 +1537,21 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNEXPECTED_PKISTATUS", 58, 185},
+   #endif
++  #ifdef CMP_R_UNEXPECTED_POLLREQ
++    {"UNEXPECTED_POLLREQ", ERR_LIB_CMP, CMP_R_UNEXPECTED_POLLREQ},
++  #else
++    {"UNEXPECTED_POLLREQ", 58, 105},
++  #endif
+   #ifdef CMP_R_UNEXPECTED_PVNO
+     {"UNEXPECTED_PVNO", ERR_LIB_CMP, CMP_R_UNEXPECTED_PVNO},
+   #else
+     {"UNEXPECTED_PVNO", 58, 153},
+   #endif
++  #ifdef CMP_R_UNEXPECTED_SENDER
++    {"UNEXPECTED_SENDER", ERR_LIB_CMP, CMP_R_UNEXPECTED_SENDER},
++  #else
++    {"UNEXPECTED_SENDER", 58, 106},
++  #endif
+   #ifdef CMP_R_UNKNOWN_ALGORITHM_ID
+     {"UNKNOWN_ALGORITHM_ID", ERR_LIB_CMP, CMP_R_UNKNOWN_ALGORITHM_ID},
+   #else
+@@ -1450,6 +1562,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNKNOWN_CERT_TYPE", 58, 135},
+   #endif
++  #ifdef CMP_R_UNKNOWN_CRL_ISSUER
++    {"UNKNOWN_CRL_ISSUER", ERR_LIB_CMP, CMP_R_UNKNOWN_CRL_ISSUER},
++  #else
++    {"UNKNOWN_CRL_ISSUER", 58, 200},
++  #endif
+   #ifdef CMP_R_UNKNOWN_PKISTATUS
+     {"UNKNOWN_PKISTATUS", ERR_LIB_CMP, CMP_R_UNKNOWN_PKISTATUS},
+   #else
+@@ -1465,6 +1582,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_KEY_TYPE", 58, 137},
+   #endif
++  #ifdef CMP_R_UNSUPPORTED_PKIBODY
++    {"UNSUPPORTED_PKIBODY", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PKIBODY},
++  #else
++    {"UNSUPPORTED_PKIBODY", 58, 101},
++  #endif
+   #ifdef CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC
+     {"UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC", ERR_LIB_CMP, CMP_R_UNSUPPORTED_PROTECTION_ALG_DHBASEDMAC},
+   #else
+@@ -1825,6 +1947,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NO_SIGNERS", 46, 135},
+   #endif
++  #ifdef CMS_R_OPERATION_UNSUPPORTED
++    {"OPERATION_UNSUPPORTED", ERR_LIB_CMS, CMS_R_OPERATION_UNSUPPORTED},
++  #else
++    {"OPERATION_UNSUPPORTED", 46, 182},
++  #endif
+   #ifdef CMS_R_PEER_KEY_ERROR
+     {"PEER_KEY_ERROR", ERR_LIB_CMS, CMS_R_PEER_KEY_ERROR},
+   #else
+@@ -1960,6 +2087,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_RECIPIENT_TYPE", 46, 154},
+   #endif
++  #ifdef CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM
++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", ERR_LIB_CMS, CMS_R_UNSUPPORTED_SIGNATURE_ALGORITHM},
++  #else
++    {"UNSUPPORTED_SIGNATURE_ALGORITHM", 46, 195},
++  #endif
+   #ifdef CMS_R_UNSUPPORTED_TYPE
+     {"UNSUPPORTED_TYPE", ERR_LIB_CMS, CMS_R_UNSUPPORTED_TYPE},
+   #else
+@@ -1985,6 +2117,31 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"WRAP_ERROR", 46, 159},
+   #endif
++  #ifdef COMP_R_BROTLI_DECODE_ERROR
++    {"BROTLI_DECODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DECODE_ERROR},
++  #else
++    {"BROTLI_DECODE_ERROR", 41, 102},
++  #endif
++  #ifdef COMP_R_BROTLI_DEFLATE_ERROR
++    {"BROTLI_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_DEFLATE_ERROR},
++  #else
++    {"BROTLI_DEFLATE_ERROR", 41, 103},
++  #endif
++  #ifdef COMP_R_BROTLI_ENCODE_ERROR
++    {"BROTLI_ENCODE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_ENCODE_ERROR},
++  #else
++    {"BROTLI_ENCODE_ERROR", 41, 106},
++  #endif
++  #ifdef COMP_R_BROTLI_INFLATE_ERROR
++    {"BROTLI_INFLATE_ERROR", ERR_LIB_COMP, COMP_R_BROTLI_INFLATE_ERROR},
++  #else
++    {"BROTLI_INFLATE_ERROR", 41, 104},
++  #endif
++  #ifdef COMP_R_BROTLI_NOT_SUPPORTED
++    {"BROTLI_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_BROTLI_NOT_SUPPORTED},
++  #else
++    {"BROTLI_NOT_SUPPORTED", 41, 105},
++  #endif
+   #ifdef COMP_R_ZLIB_DEFLATE_ERROR
+     {"ZLIB_DEFLATE_ERROR", ERR_LIB_COMP, COMP_R_ZLIB_DEFLATE_ERROR},
+   #else
+@@ -2000,6 +2157,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"ZLIB_NOT_SUPPORTED", 41, 101},
+   #endif
++  #ifdef COMP_R_ZSTD_COMPRESS_ERROR
++    {"ZSTD_COMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_COMPRESS_ERROR},
++  #else
++    {"ZSTD_COMPRESS_ERROR", 41, 107},
++  #endif
++  #ifdef COMP_R_ZSTD_DECODE_ERROR
++    {"ZSTD_DECODE_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECODE_ERROR},
++  #else
++    {"ZSTD_DECODE_ERROR", 41, 108},
++  #endif
++  #ifdef COMP_R_ZSTD_DECOMPRESS_ERROR
++    {"ZSTD_DECOMPRESS_ERROR", ERR_LIB_COMP, COMP_R_ZSTD_DECOMPRESS_ERROR},
++  #else
++    {"ZSTD_DECOMPRESS_ERROR", 41, 109},
++  #endif
++  #ifdef COMP_R_ZSTD_NOT_SUPPORTED
++    {"ZSTD_NOT_SUPPORTED", ERR_LIB_COMP, COMP_R_ZSTD_NOT_SUPPORTED},
++  #else
++    {"ZSTD_NOT_SUPPORTED", 41, 110},
++  #endif
+   #ifdef CONF_R_ERROR_LOADING_DSO
+     {"ERROR_LOADING_DSO", ERR_LIB_CONF, CONF_R_ERROR_LOADING_DSO},
+   #else
+@@ -2085,6 +2262,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"RECURSIVE_DIRECTORY_INCLUDE", 14, 111},
+   #endif
++  #ifdef CONF_R_RECURSIVE_SECTION_REFERENCE
++    {"RECURSIVE_SECTION_REFERENCE", ERR_LIB_CONF, CONF_R_RECURSIVE_SECTION_REFERENCE},
++  #else
++    {"RECURSIVE_SECTION_REFERENCE", 14, 126},
++  #endif
+   #ifdef CONF_R_RELATIVE_PATH
+     {"RELATIVE_PATH", ERR_LIB_CONF, CONF_R_RELATIVE_PATH},
+   #else
+@@ -2370,6 +2552,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TOO_MANY_BYTES", 15, 113},
+   #endif
++  #ifdef CRYPTO_R_TOO_MANY_NAMES
++    {"TOO_MANY_NAMES", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_NAMES},
++  #else
++    {"TOO_MANY_NAMES", 15, 132},
++  #endif
+   #ifdef CRYPTO_R_TOO_MANY_RECORDS
+     {"TOO_MANY_RECORDS", ERR_LIB_CRYPTO, CRYPTO_R_TOO_MANY_RECORDS},
+   #else
+@@ -2560,6 +2747,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_SECRET", 5, 128},
+   #endif
++  #ifdef DH_R_INVALID_SIZE
++    {"INVALID_SIZE", ERR_LIB_DH, DH_R_INVALID_SIZE},
++  #else
++    {"INVALID_SIZE", 5, 129},
++  #endif
+   #ifdef DH_R_KDF_PARAMETER_ERROR
+     {"KDF_PARAMETER_ERROR", ERR_LIB_DH, DH_R_KDF_PARAMETER_ERROR},
+   #else
+@@ -2610,6 +2802,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"PEER_KEY_ERROR", 5, 111},
+   #endif
++  #ifdef DH_R_Q_TOO_LARGE
++    {"Q_TOO_LARGE", ERR_LIB_DH, DH_R_Q_TOO_LARGE},
++  #else
++    {"Q_TOO_LARGE", 5, 130},
++  #endif
+   #ifdef DH_R_SHARED_INFO_ERROR
+     {"SHARED_INFO_ERROR", ERR_LIB_DH, DH_R_SHARED_INFO_ERROR},
+   #else
+@@ -3545,6 +3742,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"GENERATE_ERROR", 6, 214},
+   #endif
++  #ifdef EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED
++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", ERR_LIB_EVP, EVP_R_GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED},
++  #else
++    {"GETTING_ALGORITHMIDENTIFIER_NOT_SUPPORTED", 6, 229},
++  #endif
+   #ifdef EVP_R_GET_RAW_KEY_FAILED
+     {"GET_RAW_KEY_FAILED", ERR_LIB_EVP, EVP_R_GET_RAW_KEY_FAILED},
+   #else
+@@ -3745,6 +3947,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", 6, 150},
+   #endif
++  #ifdef EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE
++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", ERR_LIB_EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE},
++  #else
++    {"OPERATION_NOT_SUPPORTED_FOR_THIS_SIGNATURE_TYPE", 6, 226},
++  #endif
+   #ifdef EVP_R_OUTPUT_WOULD_OVERFLOW
+     {"OUTPUT_WOULD_OVERFLOW", ERR_LIB_EVP, EVP_R_OUTPUT_WOULD_OVERFLOW},
+   #else
+@@ -3795,6 +4002,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SET_DEFAULT_PROPERTY_FAILURE", 6, 209},
+   #endif
++  #ifdef EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE
++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", ERR_LIB_EVP, EVP_R_SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE},
++  #else
++    {"SIGNATURE_TYPE_AND_KEY_TYPE_INCOMPATIBLE", 6, 228},
++  #endif
+   #ifdef EVP_R_TOO_MANY_RECORDS
+     {"TOO_MANY_RECORDS", ERR_LIB_EVP, EVP_R_TOO_MANY_RECORDS},
+   #else
+@@ -3825,6 +4037,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNABLE_TO_SET_CALLBACKS", 6, 217},
+   #endif
++  #ifdef EVP_R_UNKNOWN_BITS
++    {"UNKNOWN_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_BITS},
++  #else
++    {"UNKNOWN_BITS", 6, 166},
++  #endif
+   #ifdef EVP_R_UNKNOWN_CIPHER
+     {"UNKNOWN_CIPHER", ERR_LIB_EVP, EVP_R_UNKNOWN_CIPHER},
+   #else
+@@ -3840,6 +4057,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNKNOWN_KEY_TYPE", 6, 207},
+   #endif
++  #ifdef EVP_R_UNKNOWN_MAX_SIZE
++    {"UNKNOWN_MAX_SIZE", ERR_LIB_EVP, EVP_R_UNKNOWN_MAX_SIZE},
++  #else
++    {"UNKNOWN_MAX_SIZE", 6, 167},
++  #endif
+   #ifdef EVP_R_UNKNOWN_OPTION
+     {"UNKNOWN_OPTION", ERR_LIB_EVP, EVP_R_UNKNOWN_OPTION},
+   #else
+@@ -3850,6 +4072,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNKNOWN_PBE_ALGORITHM", 6, 121},
+   #endif
++  #ifdef EVP_R_UNKNOWN_SECURITY_BITS
++    {"UNKNOWN_SECURITY_BITS", ERR_LIB_EVP, EVP_R_UNKNOWN_SECURITY_BITS},
++  #else
++    {"UNKNOWN_SECURITY_BITS", 6, 168},
++  #endif
+   #ifdef EVP_R_UNSUPPORTED_ALGORITHM
+     {"UNSUPPORTED_ALGORITHM", ERR_LIB_EVP, EVP_R_UNSUPPORTED_ALGORITHM},
+   #else
+@@ -4040,6 +4267,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"RESPONSE_PARSE_ERROR", 61, 104},
+   #endif
++  #ifdef HTTP_R_RESPONSE_TOO_MANY_HDRLINES
++    {"RESPONSE_TOO_MANY_HDRLINES", ERR_LIB_HTTP, HTTP_R_RESPONSE_TOO_MANY_HDRLINES},
++  #else
++    {"RESPONSE_TOO_MANY_HDRLINES", 61, 130},
++  #endif
+   #ifdef HTTP_R_RETRY_TIMEOUT
+     {"RETRY_TIMEOUT", ERR_LIB_HTTP, HTTP_R_RETRY_TIMEOUT},
+   #else
+@@ -4530,6 +4762,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_PUBLIC_KEY_TYPE", 9, 110},
+   #endif
++  #ifdef PKCS12_R_CALLBACK_FAILED
++    {"CALLBACK_FAILED", ERR_LIB_PKCS12, PKCS12_R_CALLBACK_FAILED},
++  #else
++    {"CALLBACK_FAILED", 35, 115},
++  #endif
+   #ifdef PKCS12_R_CANT_PACK_STRUCTURE
+     {"CANT_PACK_STRUCTURE", ERR_LIB_PKCS12, PKCS12_R_CANT_PACK_STRUCTURE},
+   #else
+@@ -4920,6 +5157,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"CIPHER_OPERATION_FAILED", 57, 102},
+   #endif
++  #ifdef PROV_R_COFACTOR_REQUIRED
++    {"COFACTOR_REQUIRED", ERR_LIB_PROV, PROV_R_COFACTOR_REQUIRED},
++  #else
++    {"COFACTOR_REQUIRED", 57, 236},
++  #endif
+   #ifdef PROV_R_DERIVATION_FUNCTION_INIT_FAILED
+     {"DERIVATION_FUNCTION_INIT_FAILED", ERR_LIB_PROV, PROV_R_DERIVATION_FUNCTION_INIT_FAILED},
+   #else
+@@ -4935,6 +5177,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"EMS_NOT_ENABLED", 57, 233},
+   #endif
++  #ifdef PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS
++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS},
++  #else
++    {"ENTROPY_SOURCE_FAILED_CONTINUOUS_TESTS", 57, 244},
++  #endif
+   #ifdef PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK
+     {"ENTROPY_SOURCE_STRENGTH_TOO_WEAK", ERR_LIB_PROV, PROV_R_ENTROPY_SOURCE_STRENGTH_TOO_WEAK},
+   #else
+@@ -4990,6 +5237,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"FAILED_TO_SIGN", 57, 175},
+   #endif
++  #ifdef PROV_R_FINAL_CALL_OUT_OF_ORDER
++    {"FINAL_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_FINAL_CALL_OUT_OF_ORDER},
++  #else
++    {"FINAL_CALL_OUT_OF_ORDER", 57, 237},
++  #endif
+   #ifdef PROV_R_FIPS_MODULE_CONDITIONAL_ERROR
+     {"FIPS_MODULE_CONDITIONAL_ERROR", ERR_LIB_PROV, PROV_R_FIPS_MODULE_CONDITIONAL_ERROR},
+   #else
+@@ -5020,6 +5272,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INDICATOR_INTEGRITY_FAILURE", 57, 210},
+   #endif
++  #ifdef PROV_R_INIT_CALL_OUT_OF_ORDER
++    {"INIT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_INIT_CALL_OUT_OF_ORDER},
++  #else
++    {"INIT_CALL_OUT_OF_ORDER", 57, 238},
++  #endif
+   #ifdef PROV_R_INSUFFICIENT_DRBG_STRENGTH
+     {"INSUFFICIENT_DRBG_STRENGTH", ERR_LIB_PROV, PROV_R_INSUFFICIENT_DRBG_STRENGTH},
+   #else
+@@ -5030,6 +5287,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_AAD", 57, 108},
+   #endif
++  #ifdef PROV_R_INVALID_AEAD
++    {"INVALID_AEAD", ERR_LIB_PROV, PROV_R_INVALID_AEAD},
++  #else
++    {"INVALID_AEAD", 57, 231},
++  #endif
+   #ifdef PROV_R_INVALID_CONFIG_DATA
+     {"INVALID_CONFIG_DATA", ERR_LIB_PROV, PROV_R_INVALID_CONFIG_DATA},
+   #else
+@@ -5070,6 +5332,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_DIGEST_SIZE", 57, 218},
+   #endif
++  #ifdef PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION
++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", ERR_LIB_PROV, PROV_R_INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION},
++  #else
++    {"INVALID_EDDSA_INSTANCE_FOR_ATTEMPTED_OPERATION", 57, 243},
++  #endif
+   #ifdef PROV_R_INVALID_INPUT_LENGTH
+     {"INVALID_INPUT_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_INPUT_LENGTH},
+   #else
+@@ -5085,6 +5352,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_IV_LENGTH", 57, 109},
+   #endif
++  #ifdef PROV_R_INVALID_KDF
++    {"INVALID_KDF", ERR_LIB_PROV, PROV_R_INVALID_KDF},
++  #else
++    {"INVALID_KDF", 57, 232},
++  #endif
+   #ifdef PROV_R_INVALID_KEY
+     {"INVALID_KEY", ERR_LIB_PROV, PROV_R_INVALID_KEY},
+   #else
+@@ -5100,6 +5372,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_MAC", 57, 151},
+   #endif
++  #ifdef PROV_R_INVALID_MEMORY_SIZE
++    {"INVALID_MEMORY_SIZE", ERR_LIB_PROV, PROV_R_INVALID_MEMORY_SIZE},
++  #else
++    {"INVALID_MEMORY_SIZE", 57, 235},
++  #endif
+   #ifdef PROV_R_INVALID_MGF1_MD
+     {"INVALID_MGF1_MD", ERR_LIB_PROV, PROV_R_INVALID_MGF1_MD},
+   #else
+@@ -5120,6 +5397,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_PADDING_MODE", 57, 168},
+   #endif
++  #ifdef PROV_R_INVALID_PREHASHED_DIGEST_LENGTH
++    {"INVALID_PREHASHED_DIGEST_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_PREHASHED_DIGEST_LENGTH},
++  #else
++    {"INVALID_PREHASHED_DIGEST_LENGTH", 57, 241},
++  #endif
+   #ifdef PROV_R_INVALID_PUBINFO
+     {"INVALID_PUBINFO", ERR_LIB_PROV, PROV_R_INVALID_PUBINFO},
+   #else
+@@ -5155,6 +5437,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_TAG_LENGTH", 57, 118},
+   #endif
++  #ifdef PROV_R_INVALID_THREAD_POOL_SIZE
++    {"INVALID_THREAD_POOL_SIZE", ERR_LIB_PROV, PROV_R_INVALID_THREAD_POOL_SIZE},
++  #else
++    {"INVALID_THREAD_POOL_SIZE", 57, 234},
++  #endif
+   #ifdef PROV_R_INVALID_UKM_LENGTH
+     {"INVALID_UKM_LENGTH", ERR_LIB_PROV, PROV_R_INVALID_UKM_LENGTH},
+   #else
+@@ -5300,6 +5587,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NOT_XOF_OR_INVALID_LENGTH", 57, 113},
+   #endif
++  #ifdef PROV_R_NO_INSTANCE_ALLOWED
++    {"NO_INSTANCE_ALLOWED", ERR_LIB_PROV, PROV_R_NO_INSTANCE_ALLOWED},
++  #else
++    {"NO_INSTANCE_ALLOWED", 57, 242},
++  #endif
+   #ifdef PROV_R_NO_KEY_SET
+     {"NO_KEY_SET", ERR_LIB_PROV, PROV_R_NO_KEY_SET},
+   #else
+@@ -5310,6 +5602,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NO_PARAMETERS_SET", 57, 177},
+   #endif
++  #ifdef PROV_R_ONESHOT_CALL_OUT_OF_ORDER
++    {"ONESHOT_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_ONESHOT_CALL_OUT_OF_ORDER},
++  #else
++    {"ONESHOT_CALL_OUT_OF_ORDER", 57, 239},
++  #endif
+   #ifdef PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE
+     {"OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE", ERR_LIB_PROV, PROV_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE},
+   #else
+@@ -5460,6 +5757,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_NUMBER_OF_ROUNDS", 57, 152},
+   #endif
++  #ifdef PROV_R_UPDATE_CALL_OUT_OF_ORDER
++    {"UPDATE_CALL_OUT_OF_ORDER", ERR_LIB_PROV, PROV_R_UPDATE_CALL_OUT_OF_ORDER},
++  #else
++    {"UPDATE_CALL_OUT_OF_ORDER", 57, 240},
++  #endif
+   #ifdef PROV_R_URI_AUTHORITY_UNSUPPORTED
+     {"URI_AUTHORITY_UNSUPPORTED", ERR_LIB_PROV, PROV_R_URI_AUTHORITY_UNSUPPORTED},
+   #else
+@@ -5595,6 +5897,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INTERNAL_ERROR", 36, 113},
+   #endif
++  #ifdef RAND_R_INVALID_PROPERTY_QUERY
++    {"INVALID_PROPERTY_QUERY", ERR_LIB_RAND, RAND_R_INVALID_PROPERTY_QUERY},
++  #else
++    {"INVALID_PROPERTY_QUERY", 36, 137},
++  #endif
+   #ifdef RAND_R_IN_ERROR_STATE
+     {"IN_ERROR_STATE", ERR_LIB_RAND, RAND_R_IN_ERROR_STATE},
+   #else
+@@ -6210,6 +6517,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"AT_LEAST_TLS_1_2_NEEDED_IN_SUITEB_MODE", 20, 158},
+   #endif
++  #ifdef SSL_R_BAD_CERTIFICATE
++    {"BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_BAD_CERTIFICATE},
++  #else
++    {"BAD_CERTIFICATE", 20, 348},
++  #endif
+   #ifdef SSL_R_BAD_CHANGE_CIPHER_SPEC
+     {"BAD_CHANGE_CIPHER_SPEC", ERR_LIB_SSL, SSL_R_BAD_CHANGE_CIPHER_SPEC},
+   #else
+@@ -6220,6 +6532,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"BAD_CIPHER", 20, 186},
+   #endif
++  #ifdef SSL_R_BAD_COMPRESSION_ALGORITHM
++    {"BAD_COMPRESSION_ALGORITHM", ERR_LIB_SSL, SSL_R_BAD_COMPRESSION_ALGORITHM},
++  #else
++    {"BAD_COMPRESSION_ALGORITHM", 20, 326},
++  #endif
+   #ifdef SSL_R_BAD_DATA
+     {"BAD_DATA", ERR_LIB_SSL, SSL_R_BAD_DATA},
+   #else
+@@ -6495,6 +6812,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"CONNECTION_TYPE_NOT_SET", 20, 144},
+   #endif
++  #ifdef SSL_R_CONN_USE_ONLY
++    {"CONN_USE_ONLY", ERR_LIB_SSL, SSL_R_CONN_USE_ONLY},
++  #else
++    {"CONN_USE_ONLY", 20, 356},
++  #endif
+   #ifdef SSL_R_CONTEXT_NOT_DANE_ENABLED
+     {"CONTEXT_NOT_DANE_ENABLED", ERR_LIB_SSL, SSL_R_CONTEXT_NOT_DANE_ENABLED},
+   #else
+@@ -6635,6 +6957,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"EE_KEY_TOO_SMALL", 20, 399},
+   #endif
++  #ifdef SSL_R_EMPTY_RAW_PUBLIC_KEY
++    {"EMPTY_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_EMPTY_RAW_PUBLIC_KEY},
++  #else
++    {"EMPTY_RAW_PUBLIC_KEY", 20, 349},
++  #endif
+   #ifdef SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST
+     {"EMPTY_SRTP_PROTECTION_PROFILE_LIST", ERR_LIB_SSL, SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST},
+   #else
+@@ -6650,6 +6977,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"ERROR_IN_RECEIVED_CIPHER_LIST", 20, 151},
+   #endif
++  #ifdef SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG
++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", ERR_LIB_SSL, SSL_R_ERROR_IN_SYSTEM_DEFAULT_CONFIG},
++  #else
++    {"ERROR_IN_SYSTEM_DEFAULT_CONFIG", 20, 419},
++  #endif
+   #ifdef SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN
+     {"ERROR_SETTING_TLSA_BASE_DOMAIN", ERR_LIB_SSL, SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN},
+   #else
+@@ -6680,11 +7012,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"EXT_LENGTH_MISMATCH", 20, 163},
+   #endif
++  #ifdef SSL_R_FAILED_TO_GET_PARAMETER
++    {"FAILED_TO_GET_PARAMETER", ERR_LIB_SSL, SSL_R_FAILED_TO_GET_PARAMETER},
++  #else
++    {"FAILED_TO_GET_PARAMETER", 20, 316},
++  #endif
+   #ifdef SSL_R_FAILED_TO_INIT_ASYNC
+     {"FAILED_TO_INIT_ASYNC", ERR_LIB_SSL, SSL_R_FAILED_TO_INIT_ASYNC},
+   #else
+     {"FAILED_TO_INIT_ASYNC", 20, 405},
+   #endif
++  #ifdef SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE
++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", ERR_LIB_SSL, SSL_R_FEATURE_NEGOTIATION_NOT_COMPLETE},
++  #else
++    {"FEATURE_NEGOTIATION_NOT_COMPLETE", 20, 417},
++  #endif
++  #ifdef SSL_R_FEATURE_NOT_RENEGOTIABLE
++    {"FEATURE_NOT_RENEGOTIABLE", ERR_LIB_SSL, SSL_R_FEATURE_NOT_RENEGOTIABLE},
++  #else
++    {"FEATURE_NOT_RENEGOTIABLE", 20, 413},
++  #endif
+   #ifdef SSL_R_FRAGMENTED_CLIENT_HELLO
+     {"FRAGMENTED_CLIENT_HELLO", ERR_LIB_SSL, SSL_R_FRAGMENTED_CLIENT_HELLO},
+   #else
+@@ -6805,6 +7152,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"INVALID_NULL_CMD_NAME", 20, 385},
+   #endif
++  #ifdef SSL_R_INVALID_RAW_PUBLIC_KEY
++    {"INVALID_RAW_PUBLIC_KEY", ERR_LIB_SSL, SSL_R_INVALID_RAW_PUBLIC_KEY},
++  #else
++    {"INVALID_RAW_PUBLIC_KEY", 20, 350},
++  #endif
++  #ifdef SSL_R_INVALID_RECORD
++    {"INVALID_RECORD", ERR_LIB_SSL, SSL_R_INVALID_RECORD},
++  #else
++    {"INVALID_RECORD", 20, 317},
++  #endif
+   #ifdef SSL_R_INVALID_SEQUENCE_NUMBER
+     {"INVALID_SEQUENCE_NUMBER", ERR_LIB_SSL, SSL_R_INVALID_SEQUENCE_NUMBER},
+   #else
+@@ -6865,6 +7222,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"LIBRARY_HAS_NO_CIPHERS", 20, 161},
+   #endif
++  #ifdef SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED
++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", ERR_LIB_SSL, SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED},
++  #else
++    {"MAXIMUM_ENCRYPTED_PKTS_REACHED", 20, 395},
++  #endif
+   #ifdef SSL_R_MISSING_DSA_SIGNING_CERT
+     {"MISSING_DSA_SIGNING_CERT", ERR_LIB_SSL, SSL_R_MISSING_DSA_SIGNING_CERT},
+   #else
+@@ -6925,6 +7287,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"MISSING_SUPPORTED_GROUPS_EXTENSION", 20, 209},
+   #endif
++  #ifdef SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION
++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", ERR_LIB_SSL, SSL_R_MISSING_SUPPORTED_VERSIONS_EXTENSION},
++  #else
++    {"MISSING_SUPPORTED_VERSIONS_EXTENSION", 20, 420},
++  #endif
+   #ifdef SSL_R_MISSING_TMP_DH_KEY
+     {"MISSING_TMP_DH_KEY", ERR_LIB_SSL, SSL_R_MISSING_TMP_DH_KEY},
+   #else
+@@ -7065,6 +7432,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NO_SRTP_PROFILES", 20, 359},
+   #endif
++  #ifdef SSL_R_NO_STREAM
++    {"NO_STREAM", ERR_LIB_SSL, SSL_R_NO_STREAM},
++  #else
++    {"NO_STREAM", 20, 355},
++  #endif
+   #ifdef SSL_R_NO_SUITABLE_DIGEST_ALGORITHM
+     {"NO_SUITABLE_DIGEST_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_DIGEST_ALGORITHM},
+   #else
+@@ -7080,6 +7452,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"NO_SUITABLE_KEY_SHARE", 20, 101},
+   #endif
++  #ifdef SSL_R_NO_SUITABLE_RECORD_LAYER
++    {"NO_SUITABLE_RECORD_LAYER", ERR_LIB_SSL, SSL_R_NO_SUITABLE_RECORD_LAYER},
++  #else
++    {"NO_SUITABLE_RECORD_LAYER", 20, 322},
++  #endif
+   #ifdef SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM
+     {"NO_SUITABLE_SIGNATURE_ALGORITHM", ERR_LIB_SSL, SSL_R_NO_SUITABLE_SIGNATURE_ALGORITHM},
+   #else
+@@ -7160,6 +7537,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"PIPELINE_FAILURE", 20, 406},
+   #endif
++  #ifdef SSL_R_POLL_REQUEST_NOT_SUPPORTED
++    {"POLL_REQUEST_NOT_SUPPORTED", ERR_LIB_SSL, SSL_R_POLL_REQUEST_NOT_SUPPORTED},
++  #else
++    {"POLL_REQUEST_NOT_SUPPORTED", 20, 418},
++  #endif
+   #ifdef SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR
+     {"POST_HANDSHAKE_AUTH_ENCODING_ERR", ERR_LIB_SSL, SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR},
+   #else
+@@ -7190,6 +7572,21 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"PSK_NO_SERVER_CB", 20, 225},
+   #endif
++  #ifdef SSL_R_QUIC_HANDSHAKE_LAYER_ERROR
++    {"QUIC_HANDSHAKE_LAYER_ERROR", ERR_LIB_SSL, SSL_R_QUIC_HANDSHAKE_LAYER_ERROR},
++  #else
++    {"QUIC_HANDSHAKE_LAYER_ERROR", 20, 393},
++  #endif
++  #ifdef SSL_R_QUIC_NETWORK_ERROR
++    {"QUIC_NETWORK_ERROR", ERR_LIB_SSL, SSL_R_QUIC_NETWORK_ERROR},
++  #else
++    {"QUIC_NETWORK_ERROR", 20, 387},
++  #endif
++  #ifdef SSL_R_QUIC_PROTOCOL_ERROR
++    {"QUIC_PROTOCOL_ERROR", ERR_LIB_SSL, SSL_R_QUIC_PROTOCOL_ERROR},
++  #else
++    {"QUIC_PROTOCOL_ERROR", 20, 382},
++  #endif
+   #ifdef SSL_R_READ_BIO_NOT_SET
+     {"READ_BIO_NOT_SET", ERR_LIB_SSL, SSL_R_READ_BIO_NOT_SET},
+   #else
+@@ -7200,6 +7597,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"READ_TIMEOUT_EXPIRED", 20, 312},
+   #endif
++  #ifdef SSL_R_RECORDS_NOT_RELEASED
++    {"RECORDS_NOT_RELEASED", ERR_LIB_SSL, SSL_R_RECORDS_NOT_RELEASED},
++  #else
++    {"RECORDS_NOT_RELEASED", 20, 321},
++  #endif
++  #ifdef SSL_R_RECORD_LAYER_FAILURE
++    {"RECORD_LAYER_FAILURE", ERR_LIB_SSL, SSL_R_RECORD_LAYER_FAILURE},
++  #else
++    {"RECORD_LAYER_FAILURE", 20, 313},
++  #endif
+   #ifdef SSL_R_RECORD_LENGTH_MISMATCH
+     {"RECORD_LENGTH_MISMATCH", ERR_LIB_SSL, SSL_R_RECORD_LENGTH_MISMATCH},
+   #else
+@@ -7210,6 +7617,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"RECORD_TOO_SMALL", 20, 298},
+   #endif
++  #ifdef SSL_R_REMOTE_PEER_ADDRESS_NOT_SET
++    {"REMOTE_PEER_ADDRESS_NOT_SET", ERR_LIB_SSL, SSL_R_REMOTE_PEER_ADDRESS_NOT_SET},
++  #else
++    {"REMOTE_PEER_ADDRESS_NOT_SET", 20, 346},
++  #endif
+   #ifdef SSL_R_RENEGOTIATE_EXT_TOO_LONG
+     {"RENEGOTIATE_EXT_TOO_LONG", ERR_LIB_SSL, SSL_R_RENEGOTIATE_EXT_TOO_LONG},
+   #else
+@@ -7255,6 +7667,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SCT_VERIFICATION_FAILED", 20, 208},
+   #endif
++  #ifdef SSL_R_SEQUENCE_CTR_WRAPPED
++    {"SEQUENCE_CTR_WRAPPED", ERR_LIB_SSL, SSL_R_SEQUENCE_CTR_WRAPPED},
++  #else
++    {"SEQUENCE_CTR_WRAPPED", 20, 327},
++  #endif
+   #ifdef SSL_R_SERVERHELLO_TLSEXT
+     {"SERVERHELLO_TLSEXT", ERR_LIB_SSL, SSL_R_SERVERHELLO_TLSEXT},
+   #else
+@@ -7325,6 +7742,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_BAD_CERTIFICATE
++    {"SSLV3_ALERT_BAD_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_CERTIFICATE},
++  #else
++    {"SSLV3_ALERT_BAD_CERTIFICATE", 20, 1042},
++  #endif
++  #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
++    {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
++  #else
++    {"SSLV3_ALERT_BAD_RECORD_MAC", 20, 1020},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_BAD_RECORD_MAC
+     {"SSLV3_ALERT_BAD_RECORD_MAC", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_BAD_RECORD_MAC},
+   #else
+@@ -7335,11 +7762,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED
++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED},
++  #else
++    {"SSLV3_ALERT_CERTIFICATE_EXPIRED", 20, 1045},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
+     {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
+   #else
+     {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED
++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED},
++  #else
++    {"SSLV3_ALERT_CERTIFICATE_REVOKED", 20, 1044},
++  #endif
++  #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
++  #else
++    {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", 20, 1046},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN
+     {"SSLV3_ALERT_CERTIFICATE_UNKNOWN", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN},
+   #else
+@@ -7350,6 +7792,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE
++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE},
++  #else
++    {"SSLV3_ALERT_DECOMPRESSION_FAILURE", 20, 1030},
++  #endif
++  #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
++  #else
++    {"SSLV3_ALERT_HANDSHAKE_FAILURE", 20, 1040},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE
+     {"SSLV3_ALERT_HANDSHAKE_FAILURE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE},
+   #else
+@@ -7360,11 +7812,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER
++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER},
++  #else
++    {"SSLV3_ALERT_ILLEGAL_PARAMETER", 20, 1047},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
+     {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
+   #else
+     {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_NO_CERTIFICATE
++    {"SSLV3_ALERT_NO_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_NO_CERTIFICATE},
++  #else
++    {"SSLV3_ALERT_NO_CERTIFICATE", 20, 1041},
++  #endif
++  #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
++  #else
++    {"SSLV3_ALERT_UNEXPECTED_MESSAGE", 20, 1010},
++  #endif
+   #ifdef SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE
+     {"SSLV3_ALERT_UNEXPECTED_MESSAGE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE},
+   #else
+@@ -7375,6 +7842,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
+   #endif
++  #ifdef SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE
++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", ERR_LIB_SSL, SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE},
++  #else
++    {"SSLV3_ALERT_UNSUPPORTED_CERTIFICATE", 20, 1043},
++  #endif
+   #ifdef SSL_R_SSL_COMMAND_SECTION_EMPTY
+     {"SSL_COMMAND_SECTION_EMPTY", ERR_LIB_SSL, SSL_R_SSL_COMMAND_SECTION_EMPTY},
+   #else
+@@ -7450,6 +7922,36 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"STILL_IN_INIT", 20, 121},
+   #endif
++  #ifdef SSL_R_STREAM_COUNT_LIMITED
++    {"STREAM_COUNT_LIMITED", ERR_LIB_SSL, SSL_R_STREAM_COUNT_LIMITED},
++  #else
++    {"STREAM_COUNT_LIMITED", 20, 411},
++  #endif
++  #ifdef SSL_R_STREAM_FINISHED
++    {"STREAM_FINISHED", ERR_LIB_SSL, SSL_R_STREAM_FINISHED},
++  #else
++    {"STREAM_FINISHED", 20, 365},
++  #endif
++  #ifdef SSL_R_STREAM_RECV_ONLY
++    {"STREAM_RECV_ONLY", ERR_LIB_SSL, SSL_R_STREAM_RECV_ONLY},
++  #else
++    {"STREAM_RECV_ONLY", 20, 366},
++  #endif
++  #ifdef SSL_R_STREAM_RESET
++    {"STREAM_RESET", ERR_LIB_SSL, SSL_R_STREAM_RESET},
++  #else
++    {"STREAM_RESET", 20, 375},
++  #endif
++  #ifdef SSL_R_STREAM_SEND_ONLY
++    {"STREAM_SEND_ONLY", ERR_LIB_SSL, SSL_R_STREAM_SEND_ONLY},
++  #else
++    {"STREAM_SEND_ONLY", 20, 379},
++  #endif
++  #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
++  #else
++    {"TLSV13_ALERT_CERTIFICATE_REQUIRED", 20, 1116},
++  #endif
+   #ifdef SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED
+     {"TLSV13_ALERT_CERTIFICATE_REQUIRED", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED},
+   #else
+@@ -7460,6 +7962,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
+   #endif
++  #ifdef SSL_R_TLSV13_ALERT_MISSING_EXTENSION
++    {"TLSV13_ALERT_MISSING_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV13_ALERT_MISSING_EXTENSION},
++  #else
++    {"TLSV13_ALERT_MISSING_EXTENSION", 20, 1109},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
++    {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED},
++  #else
++    {"TLSV1_ALERT_ACCESS_DENIED", 20, 1049},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_ACCESS_DENIED
+     {"TLSV1_ALERT_ACCESS_DENIED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_ACCESS_DENIED},
+   #else
+@@ -7470,6 +7982,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_DECODE_ERROR
++    {"TLSV1_ALERT_DECODE_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECODE_ERROR},
++  #else
++    {"TLSV1_ALERT_DECODE_ERROR", 20, 1050},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
++    {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
++  #else
++    {"TLSV1_ALERT_DECRYPTION_FAILED", 20, 1021},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_DECRYPTION_FAILED
+     {"TLSV1_ALERT_DECRYPTION_FAILED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPTION_FAILED},
+   #else
+@@ -7480,6 +8002,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_DECRYPT_ERROR
++    {"TLSV1_ALERT_DECRYPT_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_DECRYPT_ERROR},
++  #else
++    {"TLSV1_ALERT_DECRYPT_ERROR", 20, 1051},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
++    {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
++  #else
++    {"TLSV1_ALERT_EXPORT_RESTRICTION", 20, 1060},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION
+     {"TLSV1_ALERT_EXPORT_RESTRICTION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION},
+   #else
+@@ -7490,6 +8022,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK
++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK},
++  #else
++    {"TLSV1_ALERT_INAPPROPRIATE_FALLBACK", 20, 1086},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
++  #else
++    {"TLSV1_ALERT_INSUFFICIENT_SECURITY", 20, 1071},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY
+     {"TLSV1_ALERT_INSUFFICIENT_SECURITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY},
+   #else
+@@ -7500,6 +8042,26 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_INTERNAL_ERROR
++    {"TLSV1_ALERT_INTERNAL_ERROR", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_INTERNAL_ERROR},
++  #else
++    {"TLSV1_ALERT_INTERNAL_ERROR", 20, 1080},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
++  #else
++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL
++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL},
++  #else
++    {"TLSV1_ALERT_NO_APPLICATION_PROTOCOL", 20, 1120},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
++    {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
++  #else
++    {"TLSV1_ALERT_NO_RENEGOTIATION", 20, 1100},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_NO_RENEGOTIATION
+     {"TLSV1_ALERT_NO_RENEGOTIATION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_NO_RENEGOTIATION},
+   #else
+@@ -7510,21 +8072,56 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_PROTOCOL_VERSION
++    {"TLSV1_ALERT_PROTOCOL_VERSION", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_PROTOCOL_VERSION},
++  #else
++    {"TLSV1_ALERT_PROTOCOL_VERSION", 20, 1070},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
+     {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
+   #else
+     {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_RECORD_OVERFLOW
++    {"TLSV1_ALERT_RECORD_OVERFLOW", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_RECORD_OVERFLOW},
++  #else
++    {"TLSV1_ALERT_RECORD_OVERFLOW", 20, 1022},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
++    {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA},
++  #else
++    {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_CA
+     {"TLSV1_ALERT_UNKNOWN_CA", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_CA},
+   #else
+     {"TLSV1_ALERT_UNKNOWN_CA", 20, 1048},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
++  #else
++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
++  #endif
++  #ifdef SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY
++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY},
++  #else
++    {"TLSV1_ALERT_UNKNOWN_PSK_IDENTITY", 20, 1115},
++  #endif
+   #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
+     {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED},
+   #else
+     {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
+   #endif
++  #ifdef SSL_R_TLSV1_ALERT_USER_CANCELLED
++    {"TLSV1_ALERT_USER_CANCELLED", ERR_LIB_SSL, SSL_R_TLSV1_ALERT_USER_CANCELLED},
++  #else
++    {"TLSV1_ALERT_USER_CANCELLED", 20, 1090},
++  #endif
++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
++  #else
++    {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", 20, 1114},
++  #endif
+   #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE
+     {"TLSV1_BAD_CERTIFICATE_HASH_VALUE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE},
+   #else
+@@ -7535,6 +8132,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
+   #endif
++  #ifdef SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE
++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", ERR_LIB_SSL, SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE},
++  #else
++    {"TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE", 20, 1113},
++  #endif
++  #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
++  #else
++    {"TLSV1_CERTIFICATE_UNOBTAINABLE", 20, 1111},
++  #endif
+   #ifdef SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE
+     {"TLSV1_CERTIFICATE_UNOBTAINABLE", ERR_LIB_SSL, SSL_R_TLSV1_CERTIFICATE_UNOBTAINABLE},
+   #else
+@@ -7545,6 +8152,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
+   #endif
++  #ifdef SSL_R_TLSV1_UNRECOGNIZED_NAME
++    {"TLSV1_UNRECOGNIZED_NAME", ERR_LIB_SSL, SSL_R_TLSV1_UNRECOGNIZED_NAME},
++  #else
++    {"TLSV1_UNRECOGNIZED_NAME", 20, 1112},
++  #endif
++  #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
++    {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
++  #else
++    {"TLSV1_UNSUPPORTED_EXTENSION", 20, 1110},
++  #endif
+   #ifdef SSL_R_TLSV1_UNSUPPORTED_EXTENSION
+     {"TLSV1_UNSUPPORTED_EXTENSION", ERR_LIB_SSL, SSL_R_TLSV1_UNSUPPORTED_EXTENSION},
+   #else
+@@ -7665,6 +8282,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNKNOWN_KEY_EXCHANGE_TYPE", 20, 250},
+   #endif
++  #ifdef SSL_R_UNKNOWN_MANDATORY_PARAMETER
++    {"UNKNOWN_MANDATORY_PARAMETER", ERR_LIB_SSL, SSL_R_UNKNOWN_MANDATORY_PARAMETER},
++  #else
++    {"UNKNOWN_MANDATORY_PARAMETER", 20, 323},
++  #endif
+   #ifdef SSL_R_UNKNOWN_PKEY_TYPE
+     {"UNKNOWN_PKEY_TYPE", ERR_LIB_SSL, SSL_R_UNKNOWN_PKEY_TYPE},
+   #else
+@@ -7700,6 +8322,21 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_COMPRESSION_ALGORITHM", 20, 257},
+   #endif
++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE
++    {"UNSUPPORTED_CONFIG_VALUE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE},
++  #else
++    {"UNSUPPORTED_CONFIG_VALUE", 20, 414},
++  #endif
++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS
++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_CLASS},
++  #else
++    {"UNSUPPORTED_CONFIG_VALUE_CLASS", 20, 415},
++  #endif
++  #ifdef SSL_R_UNSUPPORTED_CONFIG_VALUE_OP
++    {"UNSUPPORTED_CONFIG_VALUE_OP", ERR_LIB_SSL, SSL_R_UNSUPPORTED_CONFIG_VALUE_OP},
++  #else
++    {"UNSUPPORTED_CONFIG_VALUE_OP", 20, 416},
++  #endif
+   #ifdef SSL_R_UNSUPPORTED_ELLIPTIC_CURVE
+     {"UNSUPPORTED_ELLIPTIC_CURVE", ERR_LIB_SSL, SSL_R_UNSUPPORTED_ELLIPTIC_CURVE},
+   #else
+@@ -7720,6 +8357,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_STATUS_TYPE", 20, 329},
+   #endif
++  #ifdef SSL_R_UNSUPPORTED_WRITE_FLAG
++    {"UNSUPPORTED_WRITE_FLAG", ERR_LIB_SSL, SSL_R_UNSUPPORTED_WRITE_FLAG},
++  #else
++    {"UNSUPPORTED_WRITE_FLAG", 20, 412},
++  #endif
+   #ifdef SSL_R_USE_SRTP_NOT_NEGOTIATED
+     {"USE_SRTP_NOT_NEGOTIATED", ERR_LIB_SSL, SSL_R_USE_SRTP_NOT_NEGOTIATED},
+   #else
+@@ -7750,6 +8392,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"WRONG_CURVE", 20, 378},
+   #endif
++  #ifdef SSL_R_WRONG_RPK_TYPE
++    {"WRONG_RPK_TYPE", ERR_LIB_SSL, SSL_R_WRONG_RPK_TYPE},
++  #else
++    {"WRONG_RPK_TYPE", 20, 351},
++  #endif
+   #ifdef SSL_R_WRONG_SIGNATURE_LENGTH
+     {"WRONG_SIGNATURE_LENGTH", ERR_LIB_SSL, SSL_R_WRONG_SIGNATURE_LENGTH},
+   #else
+@@ -8055,6 +8702,16 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"BAD_OBJECT", 34, 119},
+   #endif
++  #ifdef X509V3_R_BAD_OPTION
++    {"BAD_OPTION", ERR_LIB_X509V3, X509V3_R_BAD_OPTION},
++  #else
++    {"BAD_OPTION", 34, 170},
++  #endif
++  #ifdef X509V3_R_BAD_VALUE
++    {"BAD_VALUE", ERR_LIB_X509V3, X509V3_R_BAD_VALUE},
++  #else
++    {"BAD_VALUE", 34, 171},
++  #endif
+   #ifdef X509V3_R_BN_DEC2BN_ERROR
+     {"BN_DEC2BN_ERROR", ERR_LIB_X509V3, X509V3_R_BN_DEC2BN_ERROR},
+   #else
+@@ -8370,6 +9027,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNKNOWN_OPTION", 34, 120},
+   #endif
++  #ifdef X509V3_R_UNKNOWN_VALUE
++    {"UNKNOWN_VALUE", ERR_LIB_X509V3, X509V3_R_UNKNOWN_VALUE},
++  #else
++    {"UNKNOWN_VALUE", 34, 172},
++  #endif
+   #ifdef X509V3_R_UNSUPPORTED_OPTION
+     {"UNSUPPORTED_OPTION", ERR_LIB_X509V3, X509V3_R_UNSUPPORTED_OPTION},
+   #else
+@@ -8430,6 +9092,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"CRL_VERIFY_FAILURE", 11, 131},
+   #endif
++  #ifdef X509_R_DUPLICATE_ATTRIBUTE
++    {"DUPLICATE_ATTRIBUTE", ERR_LIB_X509, X509_R_DUPLICATE_ATTRIBUTE},
++  #else
++    {"DUPLICATE_ATTRIBUTE", 11, 140},
++  #endif
+   #ifdef X509_R_ERROR_GETTING_MD_BY_NID
+     {"ERROR_GETTING_MD_BY_NID", ERR_LIB_X509, X509_R_ERROR_GETTING_MD_BY_NID},
+   #else
+@@ -8590,6 +9257,11 @@ static struct py_ssl_error_code error_codes[] = {
+   #else
+     {"UNSUPPORTED_ALGORITHM", 11, 111},
+   #endif
++  #ifdef X509_R_UNSUPPORTED_VERSION
++    {"UNSUPPORTED_VERSION", ERR_LIB_X509, X509_R_UNSUPPORTED_VERSION},
++  #else
++    {"UNSUPPORTED_VERSION", 11, 145},
++  #endif
+   #ifdef X509_R_WRONG_LOOKUP_TYPE
+     {"WRONG_LOOKUP_TYPE", ERR_LIB_X509, X509_R_WRONG_LOOKUP_TYPE},
+   #else
+diff --git a/Tools/c-analyzer/cpython/_parser.py b/Tools/c-analyzer/cpython/_parser.py
+index 21be53e7884..a08b32fa45d 100644
+--- a/Tools/c-analyzer/cpython/_parser.py
++++ b/Tools/c-analyzer/cpython/_parser.py
+@@ -70,9 +70,7 @@ Python/thread_pthread.h
+ Python/thread_pthread_stubs.h
+ 
+ # only huge constants (safe but parsing is slow)
+-Modules/_ssl_data_31.h
+-Modules/_ssl_data_300.h
+-Modules/_ssl_data_111.h
++Modules/_ssl_data_*.h
+ Modules/cjkcodecs/mappings_*.h
+ Modules/unicodedata_db.h
+ Modules/unicodename_db.h
+diff --git a/Tools/ssl/make_ssl_data.py b/Tools/ssl/make_ssl_data.py
+index 9860871..0cd05c7 100755
+--- a/Tools/ssl/make_ssl_data.py
++++ b/Tools/ssl/make_ssl_data.py
+@@ -5,9 +5,28 @@ This script should be called *manually* when we want to upgrade SSLError
+ `library` and `reason` mnemonics to a more recent OpenSSL version.
+ 
+ It takes two arguments:
+-- the path to the OpenSSL source tree (e.g. git checkout)
++- the path to the OpenSSL git checkout
+ - the path to the header file to be generated Modules/_ssl_data_{version}.h
+ - error codes are version specific
++
++The OpenSSL git checkout should be at a specific tag, using commands like:
++    git tag --list 'openssl-*'
++    git switch --detach openssl-3.4.0
++
++
++After generating the definitions, compare the result with newest pre-existing file.
++You can use a command like:
++
++    git diff --no-index Modules/_ssl_data_31.h Modules/_ssl_data_34.h
++
++- If the new version *only* adds new definitions, remove the pre-existing file
++  and adjust the #include in _ssl.c to point to the new version.
++- If the new version removes or renumbers some definitions, keep both files and
++  add a new #include in _ssl.c.
++
++A newly supported OpenSSL version should also be added to:
++- Tools/ssl/multissltests.py
++- .github/workflows/build.yml
+ """
+ 
+ import argparse
+@@ -16,6 +35,7 @@ import operator
+ import os
+ import re
+ import sys
++import subprocess
+ 
+ 
+ parser = argparse.ArgumentParser(
+@@ -118,9 +138,17 @@ def main():
+     # sort by libname, numeric error code
+     args.reasons = sorted(reasons, key=operator.itemgetter(0, 3))
+ 
++    git_describe = subprocess.run(
++        ['git', 'describe', '--long', '--dirty'],
++        cwd=args.srcdir,
++        capture_output=True,
++        encoding='utf-8',
++        check=True,
++        )
+     lines = [
+-        "/* File generated by Tools/ssl/make_ssl_data.py */"
+-        f"/* Generated on {datetime.datetime.utcnow().isoformat()} */"
++        "/* File generated by Tools/ssl/make_ssl_data.py */",
++        f"/* Generated on {datetime.datetime.now(datetime.UTC).isoformat()} */",
++        f"/* Generated from Git commit {git_describe.stdout.strip()} */",
+     ]
+     lines.extend(gen_library_codes(args))
+     lines.append("")
+diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py
+index eae0e0c..fb06f63 100755
+--- a/Tools/ssl/multissltests.py
++++ b/Tools/ssl/multissltests.py
+@@ -51,6 +51,7 @@ OPENSSL_RECENT_VERSIONS = [
+     "3.1.7",
+     "3.2.3",
+     "3.3.2",
++    "3.4.0",
+ ]
+ 
+ LIBRESSL_OLD_VERSIONS = [
+-- 
+2.30.2
+
diff --git a/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch b/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch
new file mode 100644
index 0000000000..18e0f208c7
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch
@@ -0,0 +1,51 @@ 
+From 11e0523eb363b7def4bc64d24a04e88d8670a691 Mon Sep 17 00:00:00 2001
+From: Petr Viktorin <encukou@gmail.com>
+Date: Thu, 28 Nov 2024 13:32:30 +0100
+Subject: [PATCH] ssl: Raise OSError for ERR_LIB_SYS
+
+From the ERR_raise manpage:
+
+    ERR_LIB_SYS
+
+        This "library code" indicates that a system error is
+        being reported.  In this case, the reason code given
+        to `ERR_raise()` and `ERR_raise_data()` *must* be
+        `errno(3)`.
+
+Upstream-Status: Submitted [https://github.com/python/cpython/pull/127361]
+Signed-off-by: Peter Marko <peter.marko@siemens.com>
+---
+ Modules/_ssl.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/Modules/_ssl.c b/Modules/_ssl.c
+index e5b8bf21002..a243ba4b9bc 100644
+--- a/Modules/_ssl.c
++++ b/Modules/_ssl.c
+@@ -667,6 +667,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char *filename, int lineno)
+                         ERR_GET_REASON(e) == SSL_R_CERTIFICATE_VERIFY_FAILED) {
+                     type = state->PySSLCertVerificationErrorObject;
+                 }
++                if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
++                    // A system error is being reported; reason is set to errno
++                    errno = ERR_GET_REASON(e);
++                    return PyErr_SetFromErrno(PyExc_OSError);
++                }
+                 p = PY_SSL_ERROR_SYSCALL;
+             }
+             break;
+@@ -692,6 +697,11 @@ PySSL_SetError(PySSLSocket *sslsock, const char *filename, int lineno)
+                 errstr = "EOF occurred in violation of protocol";
+             }
+ #endif
++            if (ERR_GET_LIB(e) == ERR_LIB_SYS) {
++                // A system error is being reported; reason is set to errno
++                errno = ERR_GET_REASON(e);
++                return PyErr_SetFromErrno(PyExc_OSError);
++            }
+             break;
+         }
+         default:
+-- 
+2.30.2
+
diff --git a/meta/recipes-devtools/python/python3_3.13.0.bb b/meta/recipes-devtools/python/python3_3.13.0.bb
index a393b5e4a0..b3170879b9 100644
--- a/meta/recipes-devtools/python/python3_3.13.0.bb
+++ b/meta/recipes-devtools/python/python3_3.13.0.bb
@@ -31,6 +31,8 @@  SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
            file://0001-test_active_children-skip-problematic-test.patch \
            file://0001-test_readline-skip-limited-history-test.patch \
            file://fix-armv5.patch \
+           file://0001-Generate-data-for-OpenSSL-3.4-and-add-it-to-multissl.patch \
+           file://0001-ssl-Raise-OSError-for-ERR_LIB_SYS.patch \
            "
 
 SRC_URI:append:class-native = " \