rust: bssl-tls: add TLS-specific error codes

Bug: 479599893

Signed-off-by: Xiangfei Ding <xfding@google.com>
Change-Id: I62014b4f1757a690c1f7b2a9794026416a6a6964
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/91447
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/rust/bssl-tls/src/errors.rs b/rust/bssl-tls/src/errors.rs
index 803b958..0d181a5 100644
--- a/rust/bssl-tls/src/errors.rs
+++ b/rust/bssl-tls/src/errors.rs
@@ -37,6 +37,8 @@
     Configuration(ConfigurationError),
     /// TLS retryable errors
     TlsRetry(TlsRetryReason),
+    /// Other TLS errors with reason
+    TlsReason(TlsErrorReason),
     /// PEM encoding failures
     PemReason(PemReason),
     /// Quic errors,
@@ -77,6 +79,12 @@
         };
         let ret_unknown_reason = || Self::Library(packed_error, Some(lib), Some(reason));
         match lib {
+            LibCode::Ssl => {
+                let Ok(reason) = TlsErrorReason::try_from(reason) else {
+                    return ret_unknown_reason();
+                };
+                Self::TlsReason(reason)
+            }
             LibCode::Pem => {
                 let Ok(reason) = PemReason::try_from(reason) else {
                     return ret_unknown_reason();
@@ -148,6 +156,7 @@
             }
             Error::Configuration(err) => Display::fmt(err, f),
             Error::TlsRetry(err) => Display::fmt(err, f),
+            Error::TlsReason(err) => Display::fmt(err, f),
             Error::PemReason(err) => Debug::fmt(err, f),
             Error::Quic(err) => Display::fmt(err, f),
             Error::Io(err) => Display::fmt(err, f),
@@ -158,6 +167,545 @@
 }
 
 bssl_enum! {
+    /// SSL reason codes.
+    #[derive(Debug, Copy, Clone, PartialEq, Eq)]
+    pub enum TlsErrorReason: i32 {
+        /// `SSL_R_APP_DATA_IN_HANDSHAKE`
+        AppDataInHandshake = bssl_sys::SSL_R_APP_DATA_IN_HANDSHAKE as i32,
+        /// `SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT`
+        AttemptToReuseSessionInDifferentContext = bssl_sys::SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT as i32,
+        /// `SSL_R_BAD_ALERT`
+        BadAlert = bssl_sys::SSL_R_BAD_ALERT as i32,
+        /// `SSL_R_BAD_CHANGE_CIPHER_SPEC`
+        BadChangeCipherSpec = bssl_sys::SSL_R_BAD_CHANGE_CIPHER_SPEC as i32,
+        /// `SSL_R_BAD_DATA_RETURNED_BY_CALLBACK`
+        BadDataReturnedByCallback = bssl_sys::SSL_R_BAD_DATA_RETURNED_BY_CALLBACK as i32,
+        /// `SSL_R_BAD_DH_P_LENGTH`
+        BadDhPLength = bssl_sys::SSL_R_BAD_DH_P_LENGTH as i32,
+        /// `SSL_R_BAD_DIGEST_LENGTH`
+        BadDigestLength = bssl_sys::SSL_R_BAD_DIGEST_LENGTH as i32,
+        /// `SSL_R_BAD_ECC_CERT`
+        BadEccCert = bssl_sys::SSL_R_BAD_ECC_CERT as i32,
+        /// `SSL_R_BAD_ECPOINT`
+        BadEcpoint = bssl_sys::SSL_R_BAD_ECPOINT as i32,
+        /// `SSL_R_BAD_HANDSHAKE_RECORD`
+        BadHandshakeRecord = bssl_sys::SSL_R_BAD_HANDSHAKE_RECORD as i32,
+        /// `SSL_R_BAD_HELLO_REQUEST`
+        BadHelloRequest = bssl_sys::SSL_R_BAD_HELLO_REQUEST as i32,
+        /// `SSL_R_BAD_LENGTH`
+        BadLength = bssl_sys::SSL_R_BAD_LENGTH as i32,
+        /// `SSL_R_BAD_PACKET_LENGTH`
+        BadPacketLength = bssl_sys::SSL_R_BAD_PACKET_LENGTH as i32,
+        /// `SSL_R_BAD_RSA_ENCRYPT`
+        BadRsaEncrypt = bssl_sys::SSL_R_BAD_RSA_ENCRYPT as i32,
+        /// `SSL_R_BAD_SIGNATURE`
+        BadSignature = bssl_sys::SSL_R_BAD_SIGNATURE as i32,
+        /// `SSL_R_BAD_SRTP_MKI_VALUE`
+        BadSrtpMkiValue = bssl_sys::SSL_R_BAD_SRTP_MKI_VALUE as i32,
+        /// `SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST`
+        BadSrtpProtectionProfileList = bssl_sys::SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST as i32,
+        /// `SSL_R_BAD_SSL_FILETYPE`
+        BadSslFiletype = bssl_sys::SSL_R_BAD_SSL_FILETYPE as i32,
+        /// `SSL_R_BAD_WRITE_RETRY`
+        BadWriteRetry = bssl_sys::SSL_R_BAD_WRITE_RETRY as i32,
+        /// `SSL_R_BIO_NOT_SET`
+        BioNotSet = bssl_sys::SSL_R_BIO_NOT_SET as i32,
+        /// `SSL_R_BN_LIB`
+        BnLib = bssl_sys::SSL_R_BN_LIB as i32,
+        /// `SSL_R_BUFFER_TOO_SMALL`
+        BufferTooSmall = bssl_sys::SSL_R_BUFFER_TOO_SMALL as i32,
+        /// `SSL_R_CA_DN_LENGTH_MISMATCH`
+        CaDnLengthMismatch = bssl_sys::SSL_R_CA_DN_LENGTH_MISMATCH as i32,
+        /// `SSL_R_CA_DN_TOO_LONG`
+        CaDnTooLong = bssl_sys::SSL_R_CA_DN_TOO_LONG as i32,
+        /// `SSL_R_CCS_RECEIVED_EARLY`
+        CcsReceivedEarly = bssl_sys::SSL_R_CCS_RECEIVED_EARLY as i32,
+        /// `SSL_R_CERTIFICATE_VERIFY_FAILED`
+        CertificateVerifyFailed = bssl_sys::SSL_R_CERTIFICATE_VERIFY_FAILED as i32,
+        /// `SSL_R_CERT_CB_ERROR`
+        CertCbError = bssl_sys::SSL_R_CERT_CB_ERROR as i32,
+        /// `SSL_R_CERT_LENGTH_MISMATCH`
+        CertLengthMismatch = bssl_sys::SSL_R_CERT_LENGTH_MISMATCH as i32,
+        /// `SSL_R_CHANNEL_ID_NOT_P256`
+        ChannelIdNotP256 = bssl_sys::SSL_R_CHANNEL_ID_NOT_P256 as i32,
+        /// `SSL_R_CHANNEL_ID_SIGNATURE_INVALID`
+        ChannelIdSignatureInvalid = bssl_sys::SSL_R_CHANNEL_ID_SIGNATURE_INVALID as i32,
+        /// `SSL_R_CIPHER_OR_HASH_UNAVAILABLE`
+        CipherOrHashUnavailable = bssl_sys::SSL_R_CIPHER_OR_HASH_UNAVAILABLE as i32,
+        /// `SSL_R_CLIENTHELLO_PARSE_FAILED`
+        ClienthelloParseFailed = bssl_sys::SSL_R_CLIENTHELLO_PARSE_FAILED as i32,
+        /// `SSL_R_CLIENTHELLO_TLSEXT`
+        ClienthelloTlsext = bssl_sys::SSL_R_CLIENTHELLO_TLSEXT as i32,
+        /// `SSL_R_CONNECTION_REJECTED`
+        ConnectionRejected = bssl_sys::SSL_R_CONNECTION_REJECTED as i32,
+        /// `SSL_R_CONNECTION_TYPE_NOT_SET`
+        ConnectionTypeNotSet = bssl_sys::SSL_R_CONNECTION_TYPE_NOT_SET as i32,
+        /// `SSL_R_CUSTOM_EXTENSION_ERROR`
+        CustomExtensionError = bssl_sys::SSL_R_CUSTOM_EXTENSION_ERROR as i32,
+        /// `SSL_R_DATA_LENGTH_TOO_LONG`
+        DataLengthTooLong = bssl_sys::SSL_R_DATA_LENGTH_TOO_LONG as i32,
+        /// `SSL_R_DECODE_ERROR`
+        DecodeError = bssl_sys::SSL_R_DECODE_ERROR as i32,
+        /// `SSL_R_DECRYPTION_FAILED`
+        DecryptionFailed = bssl_sys::SSL_R_DECRYPTION_FAILED as i32,
+        /// `SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC`
+        DecryptionFailedOrBadRecordMac = bssl_sys::SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC as i32,
+        /// `SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG`
+        DhPublicValueLengthIsWrong = bssl_sys::SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG as i32,
+        /// `SSL_R_DH_P_TOO_LONG`
+        DhPTooLong = bssl_sys::SSL_R_DH_P_TOO_LONG as i32,
+        /// `SSL_R_DIGEST_CHECK_FAILED`
+        DigestCheckFailed = bssl_sys::SSL_R_DIGEST_CHECK_FAILED as i32,
+        /// `SSL_R_DTLS_MESSAGE_TOO_BIG`
+        DtlsMessageTooBig = bssl_sys::SSL_R_DTLS_MESSAGE_TOO_BIG as i32,
+        /// `SSL_R_ECC_CERT_NOT_FOR_SIGNING`
+        EccCertNotForSigning = bssl_sys::SSL_R_ECC_CERT_NOT_FOR_SIGNING as i32,
+        /// `SSL_R_EMS_STATE_INCONSISTENT`
+        EmsStateInconsistent = bssl_sys::SSL_R_EMS_STATE_INCONSISTENT as i32,
+        /// `SSL_R_ENCRYPTED_LENGTH_TOO_LONG`
+        EncryptedLengthTooLong = bssl_sys::SSL_R_ENCRYPTED_LENGTH_TOO_LONG as i32,
+        /// `SSL_R_ERROR_ADDING_EXTENSION`
+        ErrorAddingExtension = bssl_sys::SSL_R_ERROR_ADDING_EXTENSION as i32,
+        /// `SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST`
+        ErrorInReceivedCipherList = bssl_sys::SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST as i32,
+        /// `SSL_R_ERROR_PARSING_EXTENSION`
+        ErrorParsingExtension = bssl_sys::SSL_R_ERROR_PARSING_EXTENSION as i32,
+        /// `SSL_R_EXCESSIVE_MESSAGE_SIZE`
+        ExcessiveMessageSize = bssl_sys::SSL_R_EXCESSIVE_MESSAGE_SIZE as i32,
+        /// `SSL_R_EXTRA_DATA_IN_MESSAGE`
+        ExtraDataInMessage = bssl_sys::SSL_R_EXTRA_DATA_IN_MESSAGE as i32,
+        /// `SSL_R_FRAGMENT_MISMATCH`
+        FragmentMismatch = bssl_sys::SSL_R_FRAGMENT_MISMATCH as i32,
+        /// `SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION`
+        GotNextProtoWithoutExtension = bssl_sys::SSL_R_GOT_NEXT_PROTO_WITHOUT_EXTENSION as i32,
+        /// `SSL_R_HANDSHAKE_FAILURE_ON_CLIENT_HELLO`
+        HandshakeFailureOnClientHello = bssl_sys::SSL_R_HANDSHAKE_FAILURE_ON_CLIENT_HELLO as i32,
+        /// `SSL_R_HTTPS_PROXY_REQUEST`
+        HttpsProxyRequest = bssl_sys::SSL_R_HTTPS_PROXY_REQUEST as i32,
+        /// `SSL_R_HTTP_REQUEST`
+        HttpRequest = bssl_sys::SSL_R_HTTP_REQUEST as i32,
+        /// `SSL_R_INAPPROPRIATE_FALLBACK`
+        InappropriateFallback = bssl_sys::SSL_R_INAPPROPRIATE_FALLBACK as i32,
+        /// `SSL_R_INVALID_COMMAND`
+        InvalidCommand = bssl_sys::SSL_R_INVALID_COMMAND as i32,
+        /// `SSL_R_INVALID_MESSAGE`
+        InvalidMessage = bssl_sys::SSL_R_INVALID_MESSAGE as i32,
+        /// `SSL_R_INVALID_SSL_SESSION`
+        InvalidSslSession = bssl_sys::SSL_R_INVALID_SSL_SESSION as i32,
+        /// `SSL_R_INVALID_TICKET_KEYS_LENGTH`
+        InvalidTicketKeysLength = bssl_sys::SSL_R_INVALID_TICKET_KEYS_LENGTH as i32,
+        /// `SSL_R_LENGTH_MISMATCH`
+        LengthMismatch = bssl_sys::SSL_R_LENGTH_MISMATCH as i32,
+        /// `SSL_R_MISSING_EXTENSION`
+        MissingExtension = bssl_sys::SSL_R_MISSING_EXTENSION as i32,
+        /// `SSL_R_MISSING_RSA_CERTIFICATE`
+        MissingRsaCertificate = bssl_sys::SSL_R_MISSING_RSA_CERTIFICATE as i32,
+        /// `SSL_R_MISSING_TMP_DH_KEY`
+        MissingTmpDhKey = bssl_sys::SSL_R_MISSING_TMP_DH_KEY as i32,
+        /// `SSL_R_MISSING_TMP_ECDH_KEY`
+        MissingTmpEcdhKey = bssl_sys::SSL_R_MISSING_TMP_ECDH_KEY as i32,
+        /// `SSL_R_MIXED_SPECIAL_OPERATOR_WITH_GROUPS`
+        MixedSpecialOperatorWithGroups = bssl_sys::SSL_R_MIXED_SPECIAL_OPERATOR_WITH_GROUPS as i32,
+        /// `SSL_R_MTU_TOO_SMALL`
+        MtuTooSmall = bssl_sys::SSL_R_MTU_TOO_SMALL as i32,
+        /// `SSL_R_NEGOTIATED_BOTH_NPN_AND_ALPN`
+        NegotiatedBothNpnAndAlpn = bssl_sys::SSL_R_NEGOTIATED_BOTH_NPN_AND_ALPN as i32,
+        /// `SSL_R_NESTED_GROUP`
+        NestedGroup = bssl_sys::SSL_R_NESTED_GROUP as i32,
+        /// `SSL_R_NO_CERTIFICATES_RETURNED`
+        NoCertificatesReturned = bssl_sys::SSL_R_NO_CERTIFICATES_RETURNED as i32,
+        /// `SSL_R_NO_CERTIFICATE_ASSIGNED`
+        NoCertificateAssigned = bssl_sys::SSL_R_NO_CERTIFICATE_ASSIGNED as i32,
+        /// `SSL_R_NO_CERTIFICATE_SET`
+        NoCertificateSet = bssl_sys::SSL_R_NO_CERTIFICATE_SET as i32,
+        /// `SSL_R_NO_CIPHERS_AVAILABLE`
+        NoCiphersAvailable = bssl_sys::SSL_R_NO_CIPHERS_AVAILABLE as i32,
+        /// `SSL_R_NO_CIPHERS_PASSED`
+        NoCiphersPassed = bssl_sys::SSL_R_NO_CIPHERS_PASSED as i32,
+        /// `SSL_R_NO_CIPHER_MATCH`
+        NoCipherMatch = bssl_sys::SSL_R_NO_CIPHER_MATCH as i32,
+        /// `SSL_R_NO_COMPRESSION_SPECIFIED`
+        NoCompressionSpecified = bssl_sys::SSL_R_NO_COMPRESSION_SPECIFIED as i32,
+        /// `SSL_R_NO_METHOD_SPECIFIED`
+        NoMethodSpecified = bssl_sys::SSL_R_NO_METHOD_SPECIFIED as i32,
+        /// `SSL_R_NO_PRIVATE_KEY_ASSIGNED`
+        NoPrivateKeyAssigned = bssl_sys::SSL_R_NO_PRIVATE_KEY_ASSIGNED as i32,
+        /// `SSL_R_NO_RENEGOTIATION`
+        NoRenegotiation = bssl_sys::SSL_R_NO_RENEGOTIATION as i32,
+        /// `SSL_R_NO_REQUIRED_DIGEST`
+        NoRequiredDigest = bssl_sys::SSL_R_NO_REQUIRED_DIGEST as i32,
+        /// `SSL_R_NO_SHARED_CIPHER`
+        NoSharedCipher = bssl_sys::SSL_R_NO_SHARED_CIPHER as i32,
+        /// `SSL_R_NULL_SSL_CTX`
+        NullSslCtx = bssl_sys::SSL_R_NULL_SSL_CTX as i32,
+        /// `SSL_R_NULL_SSL_METHOD_PASSED`
+        NullSslMethodPassed = bssl_sys::SSL_R_NULL_SSL_METHOD_PASSED as i32,
+        /// `SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED`
+        OldSessionCipherNotReturned = bssl_sys::SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED as i32,
+        /// `SSL_R_OLD_SESSION_VERSION_NOT_RETURNED`
+        OldSessionVersionNotReturned = bssl_sys::SSL_R_OLD_SESSION_VERSION_NOT_RETURNED as i32,
+        /// `SSL_R_OUTPUT_ALIASES_INPUT`
+        OutputAliasesInput = bssl_sys::SSL_R_OUTPUT_ALIASES_INPUT as i32,
+        /// `SSL_R_PARSE_TLSEXT`
+        ParseTlsext = bssl_sys::SSL_R_PARSE_TLSEXT as i32,
+        /// `SSL_R_PATH_TOO_LONG`
+        PathTooLong = bssl_sys::SSL_R_PATH_TOO_LONG as i32,
+        /// `SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE`
+        PeerDidNotReturnACertificate = bssl_sys::SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE as i32,
+        /// `SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE`
+        PeerErrorUnsupportedCertificateType = bssl_sys::SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE as i32,
+        /// `SSL_R_PROTOCOL_IS_SHUTDOWN`
+        ProtocolIsShutdown = bssl_sys::SSL_R_PROTOCOL_IS_SHUTDOWN as i32,
+        /// `SSL_R_PSK_IDENTITY_NOT_FOUND`
+        PskIdentityNotFound = bssl_sys::SSL_R_PSK_IDENTITY_NOT_FOUND as i32,
+        /// `SSL_R_PSK_NO_CLIENT_CB`
+        PskNoClientCb = bssl_sys::SSL_R_PSK_NO_CLIENT_CB as i32,
+        /// `SSL_R_PSK_NO_SERVER_CB`
+        PskNoServerCb = bssl_sys::SSL_R_PSK_NO_SERVER_CB as i32,
+        /// `SSL_R_READ_TIMEOUT_EXPIRED`
+        ReadTimeoutExpired = bssl_sys::SSL_R_READ_TIMEOUT_EXPIRED as i32,
+        /// `SSL_R_RECORD_LENGTH_MISMATCH`
+        RecordLengthMismatch = bssl_sys::SSL_R_RECORD_LENGTH_MISMATCH as i32,
+        /// `SSL_R_RECORD_TOO_LARGE`
+        RecordTooLarge = bssl_sys::SSL_R_RECORD_TOO_LARGE as i32,
+        /// `SSL_R_RENEGOTIATION_ENCODING_ERR`
+        RenegotiationEncodingErr = bssl_sys::SSL_R_RENEGOTIATION_ENCODING_ERR as i32,
+        /// `SSL_R_RENEGOTIATION_MISMATCH`
+        RenegotiationMismatch = bssl_sys::SSL_R_RENEGOTIATION_MISMATCH as i32,
+        /// `SSL_R_REQUIRED_CIPHER_MISSING`
+        RequiredCipherMissing = bssl_sys::SSL_R_REQUIRED_CIPHER_MISSING as i32,
+        /// `SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION`
+        ResumedEmsSessionWithoutEmsExtension = bssl_sys::SSL_R_RESUMED_EMS_SESSION_WITHOUT_EMS_EXTENSION as i32,
+        /// `SSL_R_RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION`
+        ResumedNonEmsSessionWithEmsExtension = bssl_sys::SSL_R_RESUMED_NON_EMS_SESSION_WITH_EMS_EXTENSION as i32,
+        /// `SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING`
+        ScsvReceivedWhenRenegotiating = bssl_sys::SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING as i32,
+        /// `SSL_R_SERVERHELLO_TLSEXT`
+        ServerhelloTlsext = bssl_sys::SSL_R_SERVERHELLO_TLSEXT as i32,
+        /// `SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED`
+        SessionIdContextUninitialized = bssl_sys::SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED as i32,
+        /// `SSL_R_SESSION_MAY_NOT_BE_CREATED`
+        SessionMayNotBeCreated = bssl_sys::SSL_R_SESSION_MAY_NOT_BE_CREATED as i32,
+        /// `SSL_R_SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER`
+        SignatureAlgorithmsExtensionSentByServer = bssl_sys::SSL_R_SIGNATURE_ALGORITHMS_EXTENSION_SENT_BY_SERVER as i32,
+        /// `SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES`
+        SrtpCouldNotAllocateProfiles = bssl_sys::SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES as i32,
+        /// `SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE`
+        SrtpUnknownProtectionProfile = bssl_sys::SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE as i32,
+        /// `SSL_R_SSL3_EXT_INVALID_SERVERNAME`
+        Ssl3ExtInvalidServername = bssl_sys::SSL_R_SSL3_EXT_INVALID_SERVERNAME as i32,
+        /// `SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION`
+        SslCtxHasNoDefaultSslVersion = bssl_sys::SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION as i32,
+        /// `SSL_R_SSL_HANDSHAKE_FAILURE`
+        SslHandshakeFailure = bssl_sys::SSL_R_SSL_HANDSHAKE_FAILURE as i32,
+        /// `SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG`
+        SslSessionIdContextTooLong = bssl_sys::SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG as i32,
+        /// `SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST`
+        TlsPeerDidNotRespondWithCertificateList = bssl_sys::SSL_R_TLS_PEER_DID_NOT_RESPOND_WITH_CERTIFICATE_LIST as i32,
+        /// `SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG`
+        TlsRsaEncryptedValueLengthIsWrong = bssl_sys::SSL_R_TLS_RSA_ENCRYPTED_VALUE_LENGTH_IS_WRONG as i32,
+        /// `SSL_R_TOO_MANY_EMPTY_FRAGMENTS`
+        TooManyEmptyFragments = bssl_sys::SSL_R_TOO_MANY_EMPTY_FRAGMENTS as i32,
+        /// `SSL_R_TOO_MANY_WARNING_ALERTS`
+        TooManyWarningAlerts = bssl_sys::SSL_R_TOO_MANY_WARNING_ALERTS as i32,
+        /// `SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS`
+        UnableToFindEcdhParameters = bssl_sys::SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS as i32,
+        /// `SSL_R_UNEXPECTED_EXTENSION`
+        UnexpectedExtension = bssl_sys::SSL_R_UNEXPECTED_EXTENSION as i32,
+        /// `SSL_R_UNEXPECTED_MESSAGE`
+        UnexpectedMessage = bssl_sys::SSL_R_UNEXPECTED_MESSAGE as i32,
+        /// `SSL_R_UNEXPECTED_OPERATOR_IN_GROUP`
+        UnexpectedOperatorInGroup = bssl_sys::SSL_R_UNEXPECTED_OPERATOR_IN_GROUP as i32,
+        /// `SSL_R_UNEXPECTED_RECORD`
+        UnexpectedRecord = bssl_sys::SSL_R_UNEXPECTED_RECORD as i32,
+        /// `SSL_R_UNINITIALIZED`
+        Uninitialized = bssl_sys::SSL_R_UNINITIALIZED as i32,
+        /// `SSL_R_UNKNOWN_ALERT_TYPE`
+        UnknownAlertType = bssl_sys::SSL_R_UNKNOWN_ALERT_TYPE as i32,
+        /// `SSL_R_UNKNOWN_CERTIFICATE_TYPE`
+        UnknownCertificateType = bssl_sys::SSL_R_UNKNOWN_CERTIFICATE_TYPE as i32,
+        /// `SSL_R_UNKNOWN_CIPHER_RETURNED`
+        UnknownCipherReturned = bssl_sys::SSL_R_UNKNOWN_CIPHER_RETURNED as i32,
+        /// `SSL_R_UNKNOWN_CIPHER_TYPE`
+        UnknownCipherType = bssl_sys::SSL_R_UNKNOWN_CIPHER_TYPE as i32,
+        /// `SSL_R_UNKNOWN_DIGEST`
+        UnknownDigest = bssl_sys::SSL_R_UNKNOWN_DIGEST as i32,
+        /// `SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE`
+        UnknownKeyExchangeType = bssl_sys::SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE as i32,
+        /// `SSL_R_UNKNOWN_PROTOCOL`
+        UnknownProtocol = bssl_sys::SSL_R_UNKNOWN_PROTOCOL as i32,
+        /// `SSL_R_UNKNOWN_SSL_VERSION`
+        UnknownSslVersion = bssl_sys::SSL_R_UNKNOWN_SSL_VERSION as i32,
+        /// `SSL_R_UNKNOWN_STATE`
+        UnknownState = bssl_sys::SSL_R_UNKNOWN_STATE as i32,
+        /// `SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED`
+        UnsafeLegacyRenegotiationDisabled = bssl_sys::SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED as i32,
+        /// `SSL_R_UNSUPPORTED_CIPHER`
+        UnsupportedCipher = bssl_sys::SSL_R_UNSUPPORTED_CIPHER as i32,
+        /// `SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM`
+        UnsupportedCompressionAlgorithm = bssl_sys::SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM as i32,
+        /// `SSL_R_UNSUPPORTED_ELLIPTIC_CURVE`
+        UnsupportedEllipticCurve = bssl_sys::SSL_R_UNSUPPORTED_ELLIPTIC_CURVE as i32,
+        /// `SSL_R_UNSUPPORTED_PROTOCOL`
+        UnsupportedProtocol = bssl_sys::SSL_R_UNSUPPORTED_PROTOCOL as i32,
+        /// `SSL_R_WRONG_CERTIFICATE_TYPE`
+        WrongCertificateType = bssl_sys::SSL_R_WRONG_CERTIFICATE_TYPE as i32,
+        /// `SSL_R_WRONG_CIPHER_RETURNED`
+        WrongCipherReturned = bssl_sys::SSL_R_WRONG_CIPHER_RETURNED as i32,
+        /// `SSL_R_WRONG_CURVE`
+        WrongCurve = bssl_sys::SSL_R_WRONG_CURVE as i32,
+        /// `SSL_R_WRONG_MESSAGE_TYPE`
+        WrongMessageType = bssl_sys::SSL_R_WRONG_MESSAGE_TYPE as i32,
+        /// `SSL_R_WRONG_SIGNATURE_TYPE`
+        WrongSignatureType = bssl_sys::SSL_R_WRONG_SIGNATURE_TYPE as i32,
+        /// `SSL_R_WRONG_SSL_VERSION`
+        WrongSslVersion = bssl_sys::SSL_R_WRONG_SSL_VERSION as i32,
+        /// `SSL_R_WRONG_VERSION_NUMBER`
+        WrongVersionNumber = bssl_sys::SSL_R_WRONG_VERSION_NUMBER as i32,
+        /// `SSL_R_X509_LIB`
+        X509Lib = bssl_sys::SSL_R_X509_LIB as i32,
+        /// `SSL_R_X509_VERIFICATION_SETUP_PROBLEMS`
+        X509VerificationSetupProblems = bssl_sys::SSL_R_X509_VERIFICATION_SETUP_PROBLEMS as i32,
+        /// `SSL_R_SHUTDOWN_WHILE_IN_INIT`
+        ShutdownWhileInInit = bssl_sys::SSL_R_SHUTDOWN_WHILE_IN_INIT as i32,
+        /// `SSL_R_INVALID_OUTER_RECORD_TYPE`
+        InvalidOuterRecordType = bssl_sys::SSL_R_INVALID_OUTER_RECORD_TYPE as i32,
+        /// `SSL_R_UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY`
+        UnsupportedProtocolForCustomKey = bssl_sys::SSL_R_UNSUPPORTED_PROTOCOL_FOR_CUSTOM_KEY as i32,
+        /// `SSL_R_NO_COMMON_SIGNATURE_ALGORITHMS`
+        NoCommonSignatureAlgorithms = bssl_sys::SSL_R_NO_COMMON_SIGNATURE_ALGORITHMS as i32,
+        /// `SSL_R_DOWNGRADE_DETECTED`
+        DowngradeDetected = bssl_sys::SSL_R_DOWNGRADE_DETECTED as i32,
+        /// `SSL_R_EXCESS_HANDSHAKE_DATA`
+        ExcessHandshakeData = bssl_sys::SSL_R_EXCESS_HANDSHAKE_DATA as i32,
+        /// `SSL_R_INVALID_COMPRESSION_LIST`
+        InvalidCompressionList = bssl_sys::SSL_R_INVALID_COMPRESSION_LIST as i32,
+        /// `SSL_R_DUPLICATE_EXTENSION`
+        DuplicateExtension = bssl_sys::SSL_R_DUPLICATE_EXTENSION as i32,
+        /// `SSL_R_MISSING_KEY_SHARE`
+        MissingKeyShare = bssl_sys::SSL_R_MISSING_KEY_SHARE as i32,
+        /// `SSL_R_INVALID_ALPN_PROTOCOL`
+        InvalidAlpnProtocol = bssl_sys::SSL_R_INVALID_ALPN_PROTOCOL as i32,
+        /// `SSL_R_TOO_MANY_KEY_UPDATES`
+        TooManyKeyUpdates = bssl_sys::SSL_R_TOO_MANY_KEY_UPDATES as i32,
+        /// `SSL_R_BLOCK_CIPHER_PAD_IS_WRONG`
+        BlockCipherPadIsWrong = bssl_sys::SSL_R_BLOCK_CIPHER_PAD_IS_WRONG as i32,
+        /// `SSL_R_NO_CIPHERS_SPECIFIED`
+        NoCiphersSpecified = bssl_sys::SSL_R_NO_CIPHERS_SPECIFIED as i32,
+        /// `SSL_R_RENEGOTIATION_EMS_MISMATCH`
+        RenegotiationEmsMismatch = bssl_sys::SSL_R_RENEGOTIATION_EMS_MISMATCH as i32,
+        /// `SSL_R_DUPLICATE_KEY_SHARE`
+        DuplicateKeyShare = bssl_sys::SSL_R_DUPLICATE_KEY_SHARE as i32,
+        /// `SSL_R_NO_GROUPS_SPECIFIED`
+        NoGroupsSpecified = bssl_sys::SSL_R_NO_GROUPS_SPECIFIED as i32,
+        /// `SSL_R_NO_SHARED_GROUP`
+        NoSharedGroup = bssl_sys::SSL_R_NO_SHARED_GROUP as i32,
+        /// `SSL_R_PRE_SHARED_KEY_MUST_BE_LAST`
+        PreSharedKeyMustBeLast = bssl_sys::SSL_R_PRE_SHARED_KEY_MUST_BE_LAST as i32,
+        /// `SSL_R_OLD_SESSION_PRF_HASH_MISMATCH`
+        OldSessionPrfHashMismatch = bssl_sys::SSL_R_OLD_SESSION_PRF_HASH_MISMATCH as i32,
+        /// `SSL_R_INVALID_SCT_LIST`
+        InvalidSctList = bssl_sys::SSL_R_INVALID_SCT_LIST as i32,
+        /// `SSL_R_TOO_MUCH_SKIPPED_EARLY_DATA`
+        TooMuchSkippedEarlyData = bssl_sys::SSL_R_TOO_MUCH_SKIPPED_EARLY_DATA as i32,
+        /// `SSL_R_PSK_IDENTITY_BINDER_COUNT_MISMATCH`
+        PskIdentityBinderCountMismatch = bssl_sys::SSL_R_PSK_IDENTITY_BINDER_COUNT_MISMATCH as i32,
+        /// `SSL_R_CANNOT_PARSE_LEAF_CERT`
+        CannotParseLeafCert = bssl_sys::SSL_R_CANNOT_PARSE_LEAF_CERT as i32,
+        /// `SSL_R_SERVER_CERT_CHANGED`
+        ServerCertChanged = bssl_sys::SSL_R_SERVER_CERT_CHANGED as i32,
+        /// `SSL_R_CERTIFICATE_AND_PRIVATE_KEY_MISMATCH`
+        CertificateAndPrivateKeyMismatch = bssl_sys::SSL_R_CERTIFICATE_AND_PRIVATE_KEY_MISMATCH as i32,
+        /// `SSL_R_CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD`
+        CannotHaveBothPrivkeyAndMethod = bssl_sys::SSL_R_CANNOT_HAVE_BOTH_PRIVKEY_AND_METHOD as i32,
+        /// `SSL_R_TICKET_ENCRYPTION_FAILED`
+        TicketEncryptionFailed = bssl_sys::SSL_R_TICKET_ENCRYPTION_FAILED as i32,
+        /// `SSL_R_ALPN_MISMATCH_ON_EARLY_DATA`
+        AlpnMismatchOnEarlyData = bssl_sys::SSL_R_ALPN_MISMATCH_ON_EARLY_DATA as i32,
+        /// `SSL_R_WRONG_VERSION_ON_EARLY_DATA`
+        WrongVersionOnEarlyData = bssl_sys::SSL_R_WRONG_VERSION_ON_EARLY_DATA as i32,
+        /// `SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA`
+        UnexpectedExtensionOnEarlyData = bssl_sys::SSL_R_UNEXPECTED_EXTENSION_ON_EARLY_DATA as i32,
+        /// `SSL_R_NO_SUPPORTED_VERSIONS_ENABLED`
+        NoSupportedVersionsEnabled = bssl_sys::SSL_R_NO_SUPPORTED_VERSIONS_ENABLED as i32,
+        /// `SSL_R_EMPTY_HELLO_RETRY_REQUEST`
+        EmptyHelloRetryRequest = bssl_sys::SSL_R_EMPTY_HELLO_RETRY_REQUEST as i32,
+        /// `SSL_R_EARLY_DATA_NOT_IN_USE`
+        EarlyDataNotInUse = bssl_sys::SSL_R_EARLY_DATA_NOT_IN_USE as i32,
+        /// `SSL_R_HANDSHAKE_NOT_COMPLETE`
+        HandshakeNotComplete = bssl_sys::SSL_R_HANDSHAKE_NOT_COMPLETE as i32,
+        /// `SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI`
+        NegotiatedTbWithoutEmsOrRi = bssl_sys::SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI as i32,
+        /// `SSL_R_SERVER_ECHOED_INVALID_SESSION_ID`
+        ServerEchoedInvalidSessionId = bssl_sys::SSL_R_SERVER_ECHOED_INVALID_SESSION_ID as i32,
+        /// `SSL_R_PRIVATE_KEY_OPERATION_FAILED`
+        PrivateKeyOperationFailed = bssl_sys::SSL_R_PRIVATE_KEY_OPERATION_FAILED as i32,
+        /// `SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH`
+        SecondServerhelloVersionMismatch = bssl_sys::SSL_R_SECOND_SERVERHELLO_VERSION_MISMATCH as i32,
+        /// `SSL_R_OCSP_CB_ERROR`
+        OcspCbError = bssl_sys::SSL_R_OCSP_CB_ERROR as i32,
+        /// `SSL_R_SSL_SESSION_ID_TOO_LONG`
+        SslSessionIdTooLong = bssl_sys::SSL_R_SSL_SESSION_ID_TOO_LONG as i32,
+        /// `SSL_R_APPLICATION_DATA_ON_SHUTDOWN`
+        ApplicationDataOnShutdown = bssl_sys::SSL_R_APPLICATION_DATA_ON_SHUTDOWN as i32,
+        /// `SSL_R_CERT_DECOMPRESSION_FAILED`
+        CertDecompressionFailed = bssl_sys::SSL_R_CERT_DECOMPRESSION_FAILED as i32,
+        /// `SSL_R_UNCOMPRESSED_CERT_TOO_LARGE`
+        UncompressedCertTooLarge = bssl_sys::SSL_R_UNCOMPRESSED_CERT_TOO_LARGE as i32,
+        /// `SSL_R_UNKNOWN_CERT_COMPRESSION_ALG`
+        UnknownCertCompressionAlg = bssl_sys::SSL_R_UNKNOWN_CERT_COMPRESSION_ALG as i32,
+        /// `SSL_R_INVALID_SIGNATURE_ALGORITHM`
+        InvalidSignatureAlgorithm = bssl_sys::SSL_R_INVALID_SIGNATURE_ALGORITHM as i32,
+        /// `SSL_R_DUPLICATE_SIGNATURE_ALGORITHM`
+        DuplicateSignatureAlgorithm = bssl_sys::SSL_R_DUPLICATE_SIGNATURE_ALGORITHM as i32,
+        /// `SSL_R_TLS13_DOWNGRADE`
+        Tls13Downgrade = bssl_sys::SSL_R_TLS13_DOWNGRADE as i32,
+        /// `SSL_R_QUIC_INTERNAL_ERROR`
+        QuicInternalError = bssl_sys::SSL_R_QUIC_INTERNAL_ERROR as i32,
+        /// `SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED`
+        WrongEncryptionLevelReceived = bssl_sys::SSL_R_WRONG_ENCRYPTION_LEVEL_RECEIVED as i32,
+        /// `SSL_R_TOO_MUCH_READ_EARLY_DATA`
+        TooMuchReadEarlyData = bssl_sys::SSL_R_TOO_MUCH_READ_EARLY_DATA as i32,
+        /// `SSL_R_INVALID_DELEGATED_CREDENTIAL`
+        InvalidDelegatedCredential = bssl_sys::SSL_R_INVALID_DELEGATED_CREDENTIAL as i32,
+        /// `SSL_R_KEY_USAGE_BIT_INCORRECT`
+        KeyUsageBitIncorrect = bssl_sys::SSL_R_KEY_USAGE_BIT_INCORRECT as i32,
+        /// `SSL_R_INCONSISTENT_CLIENT_HELLO`
+        InconsistentClientHello = bssl_sys::SSL_R_INCONSISTENT_CLIENT_HELLO as i32,
+        /// `SSL_R_CIPHER_MISMATCH_ON_EARLY_DATA`
+        CipherMismatchOnEarlyData = bssl_sys::SSL_R_CIPHER_MISMATCH_ON_EARLY_DATA as i32,
+        /// `SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED`
+        QuicTransportParametersMisconfigured = bssl_sys::SSL_R_QUIC_TRANSPORT_PARAMETERS_MISCONFIGURED as i32,
+        /// `SSL_R_UNEXPECTED_COMPATIBILITY_MODE`
+        UnexpectedCompatibilityMode = bssl_sys::SSL_R_UNEXPECTED_COMPATIBILITY_MODE as i32,
+        /// `SSL_R_NO_APPLICATION_PROTOCOL`
+        NoApplicationProtocol = bssl_sys::SSL_R_NO_APPLICATION_PROTOCOL as i32,
+        /// `SSL_R_NEGOTIATED_ALPS_WITHOUT_ALPN`
+        NegotiatedAlpsWithoutAlpn = bssl_sys::SSL_R_NEGOTIATED_ALPS_WITHOUT_ALPN as i32,
+        /// `SSL_R_ALPS_MISMATCH_ON_EARLY_DATA`
+        AlpsMismatchOnEarlyData = bssl_sys::SSL_R_ALPS_MISMATCH_ON_EARLY_DATA as i32,
+        /// `SSL_R_ECH_SERVER_CONFIG_AND_PRIVATE_KEY_MISMATCH`
+        EchServerConfigAndPrivateKeyMismatch = bssl_sys::SSL_R_ECH_SERVER_CONFIG_AND_PRIVATE_KEY_MISMATCH as i32,
+        /// `SSL_R_ECH_SERVER_CONFIG_UNSUPPORTED_EXTENSION`
+        EchServerConfigUnsupportedExtension = bssl_sys::SSL_R_ECH_SERVER_CONFIG_UNSUPPORTED_EXTENSION as i32,
+        /// `SSL_R_UNSUPPORTED_ECH_SERVER_CONFIG`
+        UnsupportedEchServerConfig = bssl_sys::SSL_R_UNSUPPORTED_ECH_SERVER_CONFIG as i32,
+        /// `SSL_R_ECH_SERVER_WOULD_HAVE_NO_RETRY_CONFIGS`
+        EchServerWouldHaveNoRetryConfigs = bssl_sys::SSL_R_ECH_SERVER_WOULD_HAVE_NO_RETRY_CONFIGS as i32,
+        /// `SSL_R_INVALID_CLIENT_HELLO_INNER`
+        InvalidClientHelloInner = bssl_sys::SSL_R_INVALID_CLIENT_HELLO_INNER as i32,
+        /// `SSL_R_INVALID_ALPN_PROTOCOL_LIST`
+        InvalidAlpnProtocolList = bssl_sys::SSL_R_INVALID_ALPN_PROTOCOL_LIST as i32,
+        /// `SSL_R_COULD_NOT_PARSE_HINTS`
+        CouldNotParseHints = bssl_sys::SSL_R_COULD_NOT_PARSE_HINTS as i32,
+        /// `SSL_R_INVALID_ECH_PUBLIC_NAME`
+        InvalidEchPublicName = bssl_sys::SSL_R_INVALID_ECH_PUBLIC_NAME as i32,
+        /// `SSL_R_INVALID_ECH_CONFIG_LIST`
+        InvalidEchConfigList = bssl_sys::SSL_R_INVALID_ECH_CONFIG_LIST as i32,
+        /// `SSL_R_ECH_REJECTED`
+        EchRejected = bssl_sys::SSL_R_ECH_REJECTED as i32,
+        /// `SSL_R_INVALID_OUTER_EXTENSION`
+        InvalidOuterExtension = bssl_sys::SSL_R_INVALID_OUTER_EXTENSION as i32,
+        /// `SSL_R_INCONSISTENT_ECH_NEGOTIATION`
+        InconsistentEchNegotiation = bssl_sys::SSL_R_INCONSISTENT_ECH_NEGOTIATION as i32,
+        /// `SSL_R_INVALID_ALPS_CODEPOINT`
+        InvalidAlpsCodepoint = bssl_sys::SSL_R_INVALID_ALPS_CODEPOINT as i32,
+        /// `SSL_R_NO_MATCHING_ISSUER`
+        NoMatchingIssuer = bssl_sys::SSL_R_NO_MATCHING_ISSUER as i32,
+        /// `SSL_R_INVALID_SPAKE2PLUSV1_VALUE`
+        InvalidSpake2plusv1Value = bssl_sys::SSL_R_INVALID_SPAKE2PLUSV1_VALUE as i32,
+        /// `SSL_R_PAKE_EXHAUSTED`
+        PakeExhausted = bssl_sys::SSL_R_PAKE_EXHAUSTED as i32,
+        /// `SSL_R_PEER_PAKE_MISMATCH`
+        PeerPakeMismatch = bssl_sys::SSL_R_PEER_PAKE_MISMATCH as i32,
+        /// `SSL_R_UNSUPPORTED_CREDENTIAL_LIST`
+        UnsupportedCredentialList = bssl_sys::SSL_R_UNSUPPORTED_CREDENTIAL_LIST as i32,
+        /// `SSL_R_INVALID_TRUST_ANCHOR_LIST`
+        InvalidTrustAnchorList = bssl_sys::SSL_R_INVALID_TRUST_ANCHOR_LIST as i32,
+        /// `SSL_R_INVALID_CERTIFICATE_PROPERTY_LIST`
+        InvalidCertificatePropertyList = bssl_sys::SSL_R_INVALID_CERTIFICATE_PROPERTY_LIST as i32,
+        /// `SSL_R_DUPLICATE_GROUP`
+        DuplicateGroup = bssl_sys::SSL_R_DUPLICATE_GROUP as i32,
+        /// `SSL_R_SSLV3_ALERT_CLOSE_NOTIFY`
+        Sslv3AlertCloseNotify = bssl_sys::SSL_R_SSLV3_ALERT_CLOSE_NOTIFY as i32,
+        /// `SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE`
+        Sslv3AlertUnexpectedMessage = bssl_sys::SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE as i32,
+        /// `SSL_R_SSLV3_ALERT_BAD_RECORD_MAC`
+        Sslv3AlertBadRecordMac = bssl_sys::SSL_R_SSLV3_ALERT_BAD_RECORD_MAC as i32,
+        /// `SSL_R_TLSV1_ALERT_DECRYPTION_FAILED`
+        Tlsv1AlertDecryptionFailed = bssl_sys::SSL_R_TLSV1_ALERT_DECRYPTION_FAILED as i32,
+        /// `SSL_R_TLSV1_ALERT_RECORD_OVERFLOW`
+        Tlsv1AlertRecordOverflow = bssl_sys::SSL_R_TLSV1_ALERT_RECORD_OVERFLOW as i32,
+        /// `SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE`
+        Sslv3AlertDecompressionFailure = bssl_sys::SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE as i32,
+        /// `SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE`
+        Sslv3AlertHandshakeFailure = bssl_sys::SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE as i32,
+        /// `SSL_R_SSLV3_ALERT_NO_CERTIFICATE`
+        Sslv3AlertNoCertificate = bssl_sys::SSL_R_SSLV3_ALERT_NO_CERTIFICATE as i32,
+        /// `SSL_R_SSLV3_ALERT_BAD_CERTIFICATE`
+        Sslv3AlertBadCertificate = bssl_sys::SSL_R_SSLV3_ALERT_BAD_CERTIFICATE as i32,
+        /// `SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE`
+        Sslv3AlertUnsupportedCertificate = bssl_sys::SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE as i32,
+        /// `SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED`
+        Sslv3AlertCertificateRevoked = bssl_sys::SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED as i32,
+        /// `SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED`
+        Sslv3AlertCertificateExpired = bssl_sys::SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED as i32,
+        /// `SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN`
+        Sslv3AlertCertificateUnknown = bssl_sys::SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN as i32,
+        /// `SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER`
+        Sslv3AlertIllegalParameter = bssl_sys::SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER as i32,
+        /// `SSL_R_TLSV1_ALERT_UNKNOWN_CA`
+        Tlsv1AlertUnknownCa = bssl_sys::SSL_R_TLSV1_ALERT_UNKNOWN_CA as i32,
+        /// `SSL_R_TLSV1_ALERT_ACCESS_DENIED`
+        Tlsv1AlertAccessDenied = bssl_sys::SSL_R_TLSV1_ALERT_ACCESS_DENIED as i32,
+        /// `SSL_R_TLSV1_ALERT_DECODE_ERROR`
+        Tlsv1AlertDecodeError = bssl_sys::SSL_R_TLSV1_ALERT_DECODE_ERROR as i32,
+        /// `SSL_R_TLSV1_ALERT_DECRYPT_ERROR`
+        Tlsv1AlertDecryptError = bssl_sys::SSL_R_TLSV1_ALERT_DECRYPT_ERROR as i32,
+        /// `SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION`
+        Tlsv1AlertExportRestriction = bssl_sys::SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION as i32,
+        /// `SSL_R_TLSV1_ALERT_PROTOCOL_VERSION`
+        Tlsv1AlertProtocolVersion = bssl_sys::SSL_R_TLSV1_ALERT_PROTOCOL_VERSION as i32,
+        /// `SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY`
+        Tlsv1AlertInsufficientSecurity = bssl_sys::SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY as i32,
+        /// `SSL_R_TLSV1_ALERT_INTERNAL_ERROR`
+        Tlsv1AlertInternalError = bssl_sys::SSL_R_TLSV1_ALERT_INTERNAL_ERROR as i32,
+        /// `SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK`
+        Tlsv1AlertInappropriateFallback = bssl_sys::SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK as i32,
+        /// `SSL_R_TLSV1_ALERT_USER_CANCELLED`
+        Tlsv1AlertUserCancelled = bssl_sys::SSL_R_TLSV1_ALERT_USER_CANCELLED as i32,
+        /// `SSL_R_TLSV1_ALERT_NO_RENEGOTIATION`
+        Tlsv1AlertNoRenegotiation = bssl_sys::SSL_R_TLSV1_ALERT_NO_RENEGOTIATION as i32,
+        /// `SSL_R_TLSV1_ALERT_UNSUPPORTED_EXTENSION`
+        Tlsv1AlertUnsupportedExtension = bssl_sys::SSL_R_TLSV1_ALERT_UNSUPPORTED_EXTENSION as i32,
+        /// `SSL_R_TLSV1_ALERT_CERTIFICATE_UNOBTAINABLE`
+        Tlsv1AlertCertificateUnobtainable = bssl_sys::SSL_R_TLSV1_ALERT_CERTIFICATE_UNOBTAINABLE as i32,
+        /// `SSL_R_TLSV1_ALERT_UNRECOGNIZED_NAME`
+        Tlsv1AlertUnrecognizedName = bssl_sys::SSL_R_TLSV1_ALERT_UNRECOGNIZED_NAME as i32,
+        /// `SSL_R_TLSV1_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE`
+        Tlsv1AlertBadCertificateStatusResponse = bssl_sys::SSL_R_TLSV1_ALERT_BAD_CERTIFICATE_STATUS_RESPONSE as i32,
+        /// `SSL_R_TLSV1_ALERT_BAD_CERTIFICATE_HASH_VALUE`
+        Tlsv1AlertBadCertificateHashValue = bssl_sys::SSL_R_TLSV1_ALERT_BAD_CERTIFICATE_HASH_VALUE as i32,
+        /// `SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY`
+        Tlsv1AlertUnknownPskIdentity = bssl_sys::SSL_R_TLSV1_ALERT_UNKNOWN_PSK_IDENTITY as i32,
+        /// `SSL_R_TLSV1_ALERT_CERTIFICATE_REQUIRED`
+        Tlsv1AlertCertificateRequired = bssl_sys::SSL_R_TLSV1_ALERT_CERTIFICATE_REQUIRED as i32,
+        /// `SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL`
+        Tlsv1AlertNoApplicationProtocol = bssl_sys::SSL_R_TLSV1_ALERT_NO_APPLICATION_PROTOCOL as i32,
+        /// `SSL_R_TLSV1_ALERT_ECH_REQUIRED`
+        Tlsv1AlertEchRequired = bssl_sys::SSL_R_TLSV1_ALERT_ECH_REQUIRED as i32,
+        /// `SSL_R_PAKE_AND_KEY_SHARE_NOT_ALLOWED`
+        PakeAndKeyShareNotAllowed = bssl_sys::SSL_R_PAKE_AND_KEY_SHARE_NOT_ALLOWED as i32,
+    }
+}
+
+impl Display for TlsErrorReason {
+    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
+        Debug::fmt(self, f)
+    }
+}
+
+bssl_enum! {
     /// TLS errors
     #[derive(Debug, Clone, Copy)]
     pub enum TlsRetryReason: i32 {