/* * Copyright (c) 2020, Ali Mohammad Pur * Copyright (c) 2023, stelar7 * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace TLS { #define _ENUM_KEY(name) name, #define _ENUM_KEY_VALUE(name, value) name = value, // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5 #define __ENUM_CONTENT_TYPES \ _ENUM_KEY_VALUE(CHANGE_CIPHER_SPEC, 20) \ _ENUM_KEY_VALUE(ALERT, 21) \ _ENUM_KEY_VALUE(HANDSHAKE, 22) \ _ENUM_KEY_VALUE(APPLICATION_DATA, 23) \ _ENUM_KEY_VALUE(HEARTBEAT, 24) \ _ENUM_KEY_VALUE(TLS12_CID, 25) \ _ENUM_KEY_VALUE(ACK, 26) enum class ContentType : u8 { __ENUM_CONTENT_TYPES }; #define __ENUM_PROTOCOL_VERSIONS \ _ENUM_KEY_VALUE(VERSION_1_3, 0x0304) \ _ENUM_KEY_VALUE(VERSION_1_2, 0x0303) \ _ENUM_KEY_VALUE(VERSION_1_1, 0x0302) \ _ENUM_KEY_VALUE(VERSION_1_0, 0x0301) \ _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \ _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \ _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \ _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \ _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \ _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \ _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \ _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \ _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \ _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \ _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \ _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \ _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \ _ENUM_KEY_VALUE(GREASE_D, 0xDADA) \ _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \ _ENUM_KEY_VALUE(GREASE_F, 0xFAFA) enum class ProtocolVersion : u16 { __ENUM_PROTOCOL_VERSIONS }; #define __ENUM_ALERT_LEVELS \ _ENUM_KEY_VALUE(WARNING, 1) \ _ENUM_KEY_VALUE(FATAL, 2) enum class AlertLevel : u8 { __ENUM_ALERT_LEVELS }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7 #define __ENUM_HANDSHAKE_TYPES \ _ENUM_KEY_VALUE(HELLO_REQUEST_RESERVED, 0) \ _ENUM_KEY_VALUE(CLIENT_HELLO, 1) \ _ENUM_KEY_VALUE(SERVER_HELLO, 2) \ _ENUM_KEY_VALUE(HELLO_VERIFY_REQUEST_RESERVED, 3) \ _ENUM_KEY_VALUE(NEW_SESSION_TICKET, 4) \ _ENUM_KEY_VALUE(END_OF_EARLY_DATA, 5) \ _ENUM_KEY_VALUE(HELLO_RETRY_REQUEST_RESERVED, 6) \ _ENUM_KEY_VALUE(ENCRYPTED_EXTENSIONS, 8) \ _ENUM_KEY_VALUE(REQUEST_CONNECTION_ID, 9) \ _ENUM_KEY_VALUE(NEW_CONNECTION_ID, 10) \ _ENUM_KEY_VALUE(CERTIFICATE, 11) \ _ENUM_KEY_VALUE(SERVER_KEY_EXCHANGE_RESERVED, 12) \ _ENUM_KEY_VALUE(CERTIFICATE_REQUEST, 13) \ _ENUM_KEY_VALUE(SERVER_HELLO_DONE_RESERVED, 14) \ _ENUM_KEY_VALUE(CERTIFICATE_VERIFY, 15) \ _ENUM_KEY_VALUE(CLIENT_KEY_EXCHANGE_RESERVED, 16) \ _ENUM_KEY_VALUE(FINISHED, 20) \ _ENUM_KEY_VALUE(CERTIFICATE_URL_RESERVED, 21) \ _ENUM_KEY_VALUE(CERTIFICATE_STATUS_RESERVED, 22) \ _ENUM_KEY_VALUE(SUPPLEMENTAL_DATA_RESERVED, 23) \ _ENUM_KEY_VALUE(KEY_UPDATE, 24) \ _ENUM_KEY_VALUE(COMPRESSED_CERTIFICATE, 25) \ _ENUM_KEY_VALUE(EKT_KEY, 26) \ _ENUM_KEY_VALUE(MESSAGE_HASH, 254) enum class HandshakeType : u8 { __ENUM_HANDSHAKE_TYPES }; // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-1 #define __ENUM_EXTENSION_TYPES \ _ENUM_KEY_VALUE(SERVER_NAME, 0) \ _ENUM_KEY_VALUE(MAX_FRAGMENT_LENGTH, 1) \ _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_URL, 2) \ _ENUM_KEY_VALUE(TRUSTED_CA_KEYS, 3) \ _ENUM_KEY_VALUE(TRUNCATED_HMAC, 4) \ _ENUM_KEY_VALUE(STATUS_REQUEST, 5) \ _ENUM_KEY_VALUE(USER_MAPPING, 6) \ _ENUM_KEY_VALUE(CLIENT_AUTHZ, 7) \ _ENUM_KEY_VALUE(SERVER_AUTHZ, 8) \ _ENUM_KEY_VALUE(CERT_TYPE, 9) \ _ENUM_KEY_VALUE(SUPPORTED_GROUPS, 10) \ _ENUM_KEY_VALUE(EC_POINT_FORMATS, 11) \ _ENUM_KEY_VALUE(SRP, 12) \ _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS, 13) \ _ENUM_KEY_VALUE(USE_SRTP, 14) \ _ENUM_KEY_VALUE(HEARTBEAT, 15) \ _ENUM_KEY_VALUE(APPLICATION_LAYER_PROTOCOL_NEGOTIATION, 16) \ _ENUM_KEY_VALUE(STATUS_REQUEST_V2, 17) \ _ENUM_KEY_VALUE(SIGNED_CERTIFICATE_TIMESTAMP, 18) \ _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_TYPE, 19) \ _ENUM_KEY_VALUE(SERVER_CERTIFICATE_TYPE, 20) \ _ENUM_KEY_VALUE(PADDING, 21) \ _ENUM_KEY_VALUE(ENCRYPT_THEN_MAC, 22) \ _ENUM_KEY_VALUE(EXTENDED_MASTER_SECRET, 23) \ _ENUM_KEY_VALUE(TOKEN_BINDING, 24) \ _ENUM_KEY_VALUE(CACHED_INFO, 25) \ _ENUM_KEY_VALUE(TLS_LTS, 26) \ _ENUM_KEY_VALUE(COMPRESS_CERTIFICATE, 27) \ _ENUM_KEY_VALUE(RECORD_SIZE_LIMIT, 28) \ _ENUM_KEY_VALUE(PWD_PROTECT, 29) \ _ENUM_KEY_VALUE(PWD_CLEAR, 30) \ _ENUM_KEY_VALUE(PASSWORD_SALT, 31) \ _ENUM_KEY_VALUE(TICKET_PINNING, 32) \ _ENUM_KEY_VALUE(TLS_CERT_WITH_EXTERN_PSK, 33) \ _ENUM_KEY_VALUE(DELEGATED_CREDENTIALS, 34) \ _ENUM_KEY_VALUE(SESSION_TICKET, 35) \ _ENUM_KEY_VALUE(TLMSP, 36) \ _ENUM_KEY_VALUE(TLMSP_PROXYING, 37) \ _ENUM_KEY_VALUE(TLMSP_DELEGATE, 38) \ _ENUM_KEY_VALUE(SUPPORTED_EKT_CIPHERS, 39) \ _ENUM_KEY_VALUE(PRE_SHARED_KEY, 41) \ _ENUM_KEY_VALUE(EARLY_DATA, 42) \ _ENUM_KEY_VALUE(SUPPORTED_VERSIONS, 43) \ _ENUM_KEY_VALUE(COOKIE, 44) \ _ENUM_KEY_VALUE(PSK_KEY_EXCHANGE_MODES, 45) \ _ENUM_KEY_VALUE(CERTIFICATE_AUTHORITIES, 47) \ _ENUM_KEY_VALUE(OID_FILTERS, 48) \ _ENUM_KEY_VALUE(POST_HANDSHAKE_AUTH, 49) \ _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS_CERT, 50) \ _ENUM_KEY_VALUE(KEY_SHARE, 51) \ _ENUM_KEY_VALUE(TRANSPARENCY_INFO, 52) \ _ENUM_KEY_VALUE(CONNECTION_ID_DEPRECATED, 53) \ _ENUM_KEY_VALUE(CONNECTION_ID, 54) \ _ENUM_KEY_VALUE(EXTERNAL_ID_HASH, 55) \ _ENUM_KEY_VALUE(EXTERNAL_SESSION_ID, 56) \ _ENUM_KEY_VALUE(QUIC_TRANSPORT_PARAMETERS, 57) \ _ENUM_KEY_VALUE(TICKET_REQUEST, 58) \ _ENUM_KEY_VALUE(DNSSEC_CHAIN, 59) \ _ENUM_KEY_VALUE(RENEGOTIATION_INFO, 65281) enum class ExtensionType : u16 { __ENUM_EXTENSION_TYPES }; #define __ENUM_NAME_TYPES \ _ENUM_KEY_VALUE(HOST_NAME, 0) enum class NameType : u8 { __ENUM_NAME_TYPES }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-10 #define __ENUM_EC_CURVE_TYPES \ _ENUM_KEY_VALUE(EXPLICIT_PRIME, 1) \ _ENUM_KEY_VALUE(EXPLICIT_CHAR2, 2) \ _ENUM_KEY_VALUE(NAMED_CURVE, 3) enum class ECCurveType : u8 { __ENUM_EC_CURVE_TYPES }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8 #define __ENUM_SUPPORTED_GROUPS \ _ENUM_KEY_VALUE(SECT163K1, 0x0001) \ _ENUM_KEY_VALUE(SECT163R1, 0x0002) \ _ENUM_KEY_VALUE(SECT163R2, 0x0003) \ _ENUM_KEY_VALUE(SECT193R1, 0x0004) \ _ENUM_KEY_VALUE(SECT193R2, 0x0005) \ _ENUM_KEY_VALUE(SECT233K1, 0x0006) \ _ENUM_KEY_VALUE(SECT233R1, 0x0007) \ _ENUM_KEY_VALUE(SECT239K1, 0x0008) \ _ENUM_KEY_VALUE(SECT283K1, 0x0009) \ _ENUM_KEY_VALUE(SECT283R1, 0x000a) \ _ENUM_KEY_VALUE(SECT409K1, 0x000b) \ _ENUM_KEY_VALUE(SECT409R1, 0x000c) \ _ENUM_KEY_VALUE(SECT571K1, 0x000d) \ _ENUM_KEY_VALUE(SECT571R1, 0x000e) \ _ENUM_KEY_VALUE(SECP160K1, 0x000f) \ _ENUM_KEY_VALUE(SECP160R1, 0x0010) \ _ENUM_KEY_VALUE(SECP160R2, 0x0011) \ _ENUM_KEY_VALUE(SECP192K1, 0x0012) \ _ENUM_KEY_VALUE(SECP192R1, 0x0013) \ _ENUM_KEY_VALUE(SECP224K1, 0x0014) \ _ENUM_KEY_VALUE(SECP224R1, 0x0015) \ _ENUM_KEY_VALUE(SECP256K1, 0x0016) \ _ENUM_KEY_VALUE(SECP256R1, 0x0017) \ _ENUM_KEY_VALUE(SECP384R1, 0x0018) \ _ENUM_KEY_VALUE(SECP521R1, 0x0019) \ _ENUM_KEY_VALUE(BRAINPOOLP256R1, 0x001a) \ _ENUM_KEY_VALUE(BRAINPOOLP384R1, 0x001b) \ _ENUM_KEY_VALUE(BRAINPOOLP512R1, 0x001c) \ _ENUM_KEY_VALUE(X25519, 0x001d) \ _ENUM_KEY_VALUE(X448, 0x001e) \ _ENUM_KEY_VALUE(BRAINPOOLP256R1TLS13, 0x001f) \ _ENUM_KEY_VALUE(BRAINPOOLP384R1TLS13, 0x0020) \ _ENUM_KEY_VALUE(BRAINPOOLP512R1TLS13, 0x0021) \ _ENUM_KEY_VALUE(GC256A, 0x0022) \ _ENUM_KEY_VALUE(GC256B, 0x0023) \ _ENUM_KEY_VALUE(GC256C, 0x0024) \ _ENUM_KEY_VALUE(GC256D, 0x0025) \ _ENUM_KEY_VALUE(GC512A, 0x0026) \ _ENUM_KEY_VALUE(GC512B, 0x0027) \ _ENUM_KEY_VALUE(GC512C, 0x0028) \ _ENUM_KEY_VALUE(CURVESM2, 0x0029) \ _ENUM_KEY_VALUE(FFDHE2048, 0x0100) \ _ENUM_KEY_VALUE(FFDHE3072, 0x0101) \ _ENUM_KEY_VALUE(FFDHE4096, 0x0102) \ _ENUM_KEY_VALUE(FFDHE6144, 0x0103) \ _ENUM_KEY_VALUE(FFDHE8192, 0x0104) \ _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_PRIME_CURVES, 0xff01) \ _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_CHAR2_CURVES, 0xff02) \ _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \ _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \ _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \ _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \ _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \ _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \ _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \ _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \ _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \ _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \ _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \ _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \ _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \ _ENUM_KEY_VALUE(GREASE_D, 0xDADA) \ _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \ _ENUM_KEY_VALUE(GREASE_F, 0xFAFA) enum class SupportedGroup : u16 { __ENUM_SUPPORTED_GROUPS }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-9 #define __ENUM_EC_POINT_FORMATS \ _ENUM_KEY_VALUE(UNCOMPRESSED, 0) \ _ENUM_KEY_VALUE(ANSIX962_COMPRESSED_PRIME, 1) \ _ENUM_KEY_VALUE(ANSIX962_COMPRESSED_CHAR2, 2) enum class ECPointFormat : u8 { __ENUM_EC_POINT_FORMATS }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16 #define __ENUM_SIGNATURE_ALGORITHM \ _ENUM_KEY_VALUE(ANONYMOUS, 0) \ _ENUM_KEY_VALUE(RSA, 1) \ _ENUM_KEY_VALUE(DSA, 2) \ _ENUM_KEY_VALUE(ECDSA, 3) \ _ENUM_KEY_VALUE(ED25519, 7) \ _ENUM_KEY_VALUE(ED448, 8) \ _ENUM_KEY_VALUE(GOSTR34102012_256, 64) \ _ENUM_KEY_VALUE(GOSTR34102012_512, 65) enum class SignatureAlgorithm : u8 { __ENUM_SIGNATURE_ALGORITHM }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18 #define __ENUM_HASH_ALGORITHM \ _ENUM_KEY_VALUE(NONE, 0) \ _ENUM_KEY_VALUE(MD5, 1) \ _ENUM_KEY_VALUE(SHA1, 2) \ _ENUM_KEY_VALUE(SHA224, 3) \ _ENUM_KEY_VALUE(SHA256, 4) \ _ENUM_KEY_VALUE(SHA384, 5) \ _ENUM_KEY_VALUE(SHA512, 6) \ _ENUM_KEY_VALUE(INTRINSIC, 8) enum class HashAlgorithm : u8 { __ENUM_HASH_ALGORITHM }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4 #define __ENUM_CIPHER_SUITES \ _ENUM_KEY_VALUE(TLS_NULL_WITH_NULL_NULL, 0x0000) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_MD5, 0x0001) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_SHA, 0x0002) \ _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_RC4_40_MD5, 0x0003) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_RC4_128_MD5, 0x0004) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_RC4_128_SHA, 0x0005) \ _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, 0x0006) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_IDEA_CBC_SHA, 0x0007) \ _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x0008) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_DES_CBC_SHA, 0x0009) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_3DES_EDE_CBC_SHA, 0x000A) \ _ENUM_KEY_VALUE(TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, 0x000B) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_DES_CBC_SHA, 0x000C) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, 0x000D) \ _ENUM_KEY_VALUE(TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x000E) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_DES_CBC_SHA, 0x000F) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, 0x0010) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, 0x0011) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_DES_CBC_SHA, 0x0012) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, 0x0013) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x0014) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_DES_CBC_SHA, 0x0015) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 0x0016) \ _ENUM_KEY_VALUE(TLS_DH_anon_EXPORT_WITH_RC4_40_MD5, 0x0017) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_RC4_128_MD5, 0x0018) \ _ENUM_KEY_VALUE(TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, 0x0019) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_DES_CBC_SHA, 0x001A) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_3DES_EDE_CBC_SHA, 0x001B) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_DES_CBC_SHA, 0x001E) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_3DES_EDE_CBC_SHA, 0x001F) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_RC4_128_SHA, 0x0020) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_IDEA_CBC_SHA, 0x0021) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_DES_CBC_MD5, 0x0022) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_3DES_EDE_CBC_MD5, 0x0023) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_RC4_128_MD5, 0x0024) \ _ENUM_KEY_VALUE(TLS_KRB5_WITH_IDEA_CBC_MD5, 0x0025) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA, 0x0026) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA, 0x0027) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC4_40_SHA, 0x0028) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5, 0x0029) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5, 0x002A) \ _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC4_40_MD5, 0x002B) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA, 0x002C) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA, 0x002D) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA, 0x002E) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CBC_SHA, 0x002F) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_CBC_SHA, 0x0030) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_CBC_SHA, 0x0031) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 0x0032) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 0x0033) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_CBC_SHA, 0x0034) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CBC_SHA, 0x0035) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_CBC_SHA, 0x0036) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_CBC_SHA, 0x0037) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_CBC_SHA, 0x0038) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, 0x0039) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_CBC_SHA, 0x003A) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_SHA256, 0x003B) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CBC_SHA256, 0x003C) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CBC_SHA256, 0x003D) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_CBC_SHA256, 0x003E) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_CBC_SHA256, 0x003F) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, 0x0040) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0041) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 0x0042) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0043) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 0x0044) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0045) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA, 0x0046) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, 0x0067) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_CBC_SHA256, 0x0068) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_CBC_SHA256, 0x0069) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, 0x006A) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, 0x006B) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_CBC_SHA256, 0x006C) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_CBC_SHA256, 0x006D) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0084) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 0x0085) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0086) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 0x0087) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0088) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA, 0x0089) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_RC4_128_SHA, 0x008A) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_3DES_EDE_CBC_SHA, 0x008B) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CBC_SHA, 0x008C) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CBC_SHA, 0x008D) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_RC4_128_SHA, 0x008E) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, 0x008F) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CBC_SHA, 0x0090) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CBC_SHA, 0x0091) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_RC4_128_SHA, 0x0092) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, 0x0093) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_CBC_SHA, 0x0094) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_CBC_SHA, 0x0095) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_SEED_CBC_SHA, 0x0096) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_SEED_CBC_SHA, 0x0097) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_SEED_CBC_SHA, 0x0098) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_SEED_CBC_SHA, 0x0099) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_SEED_CBC_SHA, 0x009A) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_SEED_CBC_SHA, 0x009B) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_GCM_SHA256, 0x009C) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_GCM_SHA384, 0x009D) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, 0x009E) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, 0x009F) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_GCM_SHA256, 0x00A0) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_GCM_SHA384, 0x00A1) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, 0x00A2) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, 0x00A3) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_GCM_SHA256, 0x00A4) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_GCM_SHA384, 0x00A5) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_GCM_SHA256, 0x00A6) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_GCM_SHA384, 0x00A7) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_GCM_SHA256, 0x00A8) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_GCM_SHA384, 0x00A9) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, 0x00AA) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, 0x00AB) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, 0x00AC) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, 0x00AD) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CBC_SHA256, 0x00AE) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CBC_SHA384, 0x00AF) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA256, 0x00B0) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA384, 0x00B1) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, 0x00B2) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, 0x00B3) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA256, 0x00B4) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA384, 0x00B5) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, 0x00B6) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, 0x00B7) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA256, 0x00B8) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA384, 0x00B9) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BA) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256, 0x00BB) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BC) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256, 0x00BD) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BE) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256, 0x00BF) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C0) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256, 0x00C1) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C2) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256, 0x00C3) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C4) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256, 0x00C5) \ _ENUM_KEY_VALUE(TLS_SM4_GCM_SM3, 0x00C6) \ _ENUM_KEY_VALUE(TLS_SM4_CCM_SM3, 0x00C7) \ _ENUM_KEY_VALUE(TLS_EMPTY_RENEGOTIATION_INFO_SCSV, 0x00FF) \ _ENUM_KEY_VALUE(TLS_AES_128_GCM_SHA256, 0x1301) \ _ENUM_KEY_VALUE(TLS_AES_256_GCM_SHA384, 0x1302) \ _ENUM_KEY_VALUE(TLS_CHACHA20_POLY1305_SHA256, 0x1303) \ _ENUM_KEY_VALUE(TLS_AES_128_CCM_SHA256, 0x1304) \ _ENUM_KEY_VALUE(TLS_AES_128_CCM_8_SHA256, 0x1305) \ _ENUM_KEY_VALUE(TLS_FALLBACK_SCSV, 0x5600) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_NULL_SHA, 0xC001) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_RC4_128_SHA, 0xC002) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC003) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 0xC004) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 0xC005) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_NULL_SHA, 0xC006) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 0xC007) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC008) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 0xC009) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 0xC00A) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_NULL_SHA, 0xC00B) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_RC4_128_SHA, 0xC00C) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, 0xC00D) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, 0xC00E) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, 0xC00F) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_NULL_SHA, 0xC010) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_RC4_128_SHA, 0xC011) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 0xC012) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 0xC013) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 0xC014) \ _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_NULL_SHA, 0xC015) \ _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_RC4_128_SHA, 0xC016) \ _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, 0xC017) \ _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_AES_128_CBC_SHA, 0xC018) \ _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_AES_256_CBC_SHA, 0xC019) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA, 0xC01A) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, 0xC01B) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, 0xC01C) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_AES_128_CBC_SHA, 0xC01D) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, 0xC01E) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, 0xC01F) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_AES_256_CBC_SHA, 0xC020) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, 0xC021) \ _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, 0xC022) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 0xC023) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 0xC024) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, 0xC025) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, 0xC026) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 0xC027) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 0xC028) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, 0xC029) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, 0xC02A) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02B) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02C) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02D) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02E) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0xC02F) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0xC030) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, 0xC031) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, 0xC032) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_RC4_128_SHA, 0xC033) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, 0xC034) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, 0xC035) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, 0xC036) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, 0xC037) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, 0xC038) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA, 0xC039) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA256, 0xC03A) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA384, 0xC03B) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_128_CBC_SHA256, 0xC03C) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_256_CBC_SHA384, 0xC03D) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256, 0xC03E) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384, 0xC03F) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256, 0xC040) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384, 0xC041) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256, 0xC042) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384, 0xC043) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256, 0xC044) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384, 0xC045) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_128_CBC_SHA256, 0xC046) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_256_CBC_SHA384, 0xC047) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256, 0xC048) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384, 0xC049) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256, 0xC04A) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384, 0xC04B) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256, 0xC04C) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384, 0xC04D) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256, 0xC04E) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384, 0xC04F) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_128_GCM_SHA256, 0xC050) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_256_GCM_SHA384, 0xC051) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256, 0xC052) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384, 0xC053) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256, 0xC054) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384, 0xC055) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256, 0xC056) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384, 0xC057) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256, 0xC058) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384, 0xC059) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_128_GCM_SHA256, 0xC05A) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_256_GCM_SHA384, 0xC05B) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256, 0xC05C) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384, 0xC05D) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256, 0xC05E) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384, 0xC05F) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256, 0xC060) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384, 0xC061) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256, 0xC062) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384, 0xC063) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_128_CBC_SHA256, 0xC064) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_256_CBC_SHA384, 0xC065) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256, 0xC066) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384, 0xC067) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256, 0xC068) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384, 0xC069) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06A) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06B) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06C) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06D) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06E) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06F) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256, 0xC070) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384, 0xC071) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC072) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC073) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC074) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC075) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC076) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC077) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC078) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC079) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07A) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07B) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07C) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07D) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07E) \ _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07F) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256, 0xC080) \ _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384, 0xC081) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256, 0xC082) \ _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384, 0xC083) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256, 0xC084) \ _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384, 0xC085) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC086) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC087) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC088) \ _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC089) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC08A) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC08B) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC08C) \ _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC08D) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC08E) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC08F) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC090) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC091) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC092) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC093) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC094) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC095) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC096) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC097) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC098) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC099) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC09A) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC09B) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CCM, 0xC09C) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CCM, 0xC09D) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CCM, 0xC09E) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CCM, 0xC09F) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CCM_8, 0xC0A0) \ _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CCM_8, 0xC0A1) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CCM_8, 0xC0A2) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CCM_8, 0xC0A3) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CCM, 0xC0A4) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CCM, 0xC0A5) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CCM, 0xC0A6) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CCM, 0xC0A7) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CCM_8, 0xC0A8) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CCM_8, 0xC0A9) \ _ENUM_KEY_VALUE(TLS_PSK_DHE_WITH_AES_128_CCM_8, 0xC0AA) \ _ENUM_KEY_VALUE(TLS_PSK_DHE_WITH_AES_256_CCM_8, 0xC0AB) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CCM, 0xC0AC) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CCM, 0xC0AD) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, 0xC0AE) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, 0xC0AF) \ _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_128_GCM_SHA256, 0xC0B0) \ _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_256_GCM_SHA384, 0xC0B1) \ _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_128_CCM_SHA256, 0xC0B2) \ _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_256_CCM_SHA384, 0xC0B3) \ _ENUM_KEY_VALUE(TLS_SHA256_SHA256, 0xC0B4) \ _ENUM_KEY_VALUE(TLS_SHA384_SHA384, 0xC0B5) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC, 0xC100) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC, 0xC101) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_28147_CNT_IMIT, 0xC102) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L, 0xC103) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_MGM_L, 0xC104) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S, 0xC105) \ _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_MGM_S, 0xC106) \ _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA8) \ _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA9) \ _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCAA) \ _ENUM_KEY_VALUE(TLS_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAB) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAC) \ _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAD) \ _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAE) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256, 0xD001) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384, 0xD002) \ _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256, 0xD003) \ _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \ _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \ _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \ _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \ _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \ _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \ _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \ _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \ _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \ _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \ _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \ _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \ _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \ _ENUM_KEY_VALUE(GREASE_D, 0XDADA) \ _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \ _ENUM_KEY_VALUE(GREASE_F, 0xFAFA) enum class CipherSuite : u16 { __ENUM_CIPHER_SUITES }; // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-6 #define __ENUM_ALERT_DESCRIPTIONS \ _ENUM_KEY_VALUE(CLOSE_NOTIFY, 0) \ _ENUM_KEY_VALUE(UNEXPECTED_MESSAGE, 10) \ _ENUM_KEY_VALUE(BAD_RECORD_MAC, 20) \ _ENUM_KEY_VALUE(DECRYPTION_FAILED_RESERVED, 21) \ _ENUM_KEY_VALUE(RECORD_OVERFLOW, 22) \ _ENUM_KEY_VALUE(DECOMPRESSION_FAILURE_RESERVED, 30) \ _ENUM_KEY_VALUE(HANDSHAKE_FAILURE, 40) \ _ENUM_KEY_VALUE(NO_CERTIFICATE_RESERVED, 41) \ _ENUM_KEY_VALUE(BAD_CERTIFICATE, 42) \ _ENUM_KEY_VALUE(UNSUPPORTED_CERTIFICATE, 43) \ _ENUM_KEY_VALUE(CERTIFICATE_REVOKED, 44) \ _ENUM_KEY_VALUE(CERTIFICATE_EXPIRED, 45) \ _ENUM_KEY_VALUE(CERTIFICATE_UNKNOWN, 46) \ _ENUM_KEY_VALUE(ILLEGAL_PARAMETER, 47) \ _ENUM_KEY_VALUE(UNKNOWN_CA, 48) \ _ENUM_KEY_VALUE(ACCESS_DENIED, 49) \ _ENUM_KEY_VALUE(DECODE_ERROR, 50) \ _ENUM_KEY_VALUE(DECRYPT_ERROR, 51) \ _ENUM_KEY_VALUE(TOO_MANY_CIDS_REQUESTED, 52) \ _ENUM_KEY_VALUE(EXPORT_RESTRICTION_RESERVED, 60) \ _ENUM_KEY_VALUE(PROTOCOL_VERSION, 70) \ _ENUM_KEY_VALUE(INSUFFICIENT_SECURITY, 71) \ _ENUM_KEY_VALUE(INTERNAL_ERROR, 80) \ _ENUM_KEY_VALUE(INAPPROPRIATE_FALLBACK, 86) \ _ENUM_KEY_VALUE(USER_CANCELED, 90) \ _ENUM_KEY_VALUE(NO_RENEGOTIATION_RESERVED, 100) \ _ENUM_KEY_VALUE(MISSING_EXTENSION, 109) \ _ENUM_KEY_VALUE(UNSUPPORTED_EXTENSION, 110) \ _ENUM_KEY_VALUE(CERTIFICATE_UNOBTAINABLE_RESERVED, 111) \ _ENUM_KEY_VALUE(UNRECOGNIZED_NAME, 112) \ _ENUM_KEY_VALUE(BAD_CERTIFICATE_STATUS_RESPONSE, 113) \ _ENUM_KEY_VALUE(BAD_CERTIFICATE_HASH_VALUE_RESERVED, 114) \ _ENUM_KEY_VALUE(UNKNOWN_PSK_IDENTITY, 115) \ _ENUM_KEY_VALUE(CERTIFICATE_REQUIRED, 116) \ _ENUM_KEY_VALUE(NO_APPLICATION_PROTOCOL, 120) enum class AlertDescription : u8 { __ENUM_ALERT_DESCRIPTIONS }; #undef _ENUM_KEY #undef _ENUM_KEY_VALUE constexpr static StringView enum_to_string(AlertDescription descriptor) { #define _ENUM_KEY_VALUE(name, value) \ case AlertDescription::name: \ return #name##sv; switch (descriptor) { __ENUM_ALERT_DESCRIPTIONS } return "Unknown"sv; #undef _ENUM_KEY_VALUE } }