mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
981 lines
55 KiB
C++
981 lines
55 KiB
C++
/*
|
|
* Copyright (c) 2020, Ali Mohammad Pur <mpfard@serenityos.org>
|
|
* Copyright (c) 2023, stelar7 <dudedbz@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
|
|
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(CipherSuite descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case CipherSuite::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_CIPHER_SUITES
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#undef _ENUM_KEY_VALUE
|
|
}
|
|
|
|
constexpr static StringView enum_to_string(ExtensionType descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case ExtensionType::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_EXTENSION_TYPES
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#undef _ENUM_KEY_VALUE
|
|
}
|
|
|
|
constexpr static StringView enum_to_string(ContentType descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case ContentType::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_CONTENT_TYPES
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#undef _ENUM_KEY_VALUE
|
|
}
|
|
|
|
constexpr static StringView enum_to_string(ProtocolVersion descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case ProtocolVersion::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_PROTOCOL_VERSIONS
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#undef _ENUM_KEY_VALUE
|
|
}
|
|
|
|
constexpr static StringView enum_to_string(HandshakeType descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case HandshakeType::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_HANDSHAKE_TYPES
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#undef _ENUM_KEY_VALUE
|
|
}
|
|
|
|
constexpr static StringView enum_to_string(SignatureAlgorithm descriptor)
|
|
{
|
|
#define _ENUM_KEY_VALUE(name, value) \
|
|
case SignatureAlgorithm::name: \
|
|
return #name##sv;
|
|
|
|
switch (descriptor) {
|
|
__ENUM_SIGNATURE_ALGORITHM
|
|
}
|
|
|
|
return "Unknown"sv;
|
|
#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
|
|
}
|
|
|
|
constexpr static StringView const enum_to_value(AlertDescription descriptor)
|
|
{
|
|
switch (descriptor) {
|
|
case AlertDescription::UNEXPECTED_MESSAGE:
|
|
return "An inappropriate message was received. "
|
|
"This alert is always fatal and should never be observed in communication between proper implementations."sv;
|
|
|
|
case AlertDescription::BAD_RECORD_MAC:
|
|
return "This alert is returned if a record is received with an incorrect MAC. "
|
|
"This alert also MUST be returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: "
|
|
"either it wasn't an even multiple of the block length, "
|
|
"or its padding values, when checked, weren't correct. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::DECRYPTION_FAILED_RESERVED:
|
|
return "This alert MAY be returned if a TLSCiphertext decrypted in an invalid way: "
|
|
"either it wasn't an even multiple of the block length, "
|
|
"or its padding values, when checked, weren't correct. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::RECORD_OVERFLOW:
|
|
return "A TLSCiphertext record was received that had a length more than 2^14 + 2048 bytes, "
|
|
"or a record decrypted to a TLSCompressed record with more than 2^14 + 1024 bytes. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::DECOMPRESSION_FAILURE_RESERVED:
|
|
return "The decompression function received improper input (e.g., data that would expand to excessive length). "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::HANDSHAKE_FAILURE:
|
|
return "Reception of a handshake_failure alert message indicates that the sender "
|
|
"was unable to negotiate an acceptable set of security parameters given the options available. "
|
|
"This is a fatal error."sv;
|
|
|
|
case AlertDescription::NO_CERTIFICATE_RESERVED:
|
|
return "This alert was used in SSLv3 but not in TLS. It should not be sent by compliant implementations."sv;
|
|
|
|
case AlertDescription::BAD_CERTIFICATE:
|
|
return "A certificate was corrupt, contained signatures that did not verify correctly, etc."sv;
|
|
|
|
case AlertDescription::UNSUPPORTED_CERTIFICATE:
|
|
return "A certificate was of an unsupported type."sv;
|
|
|
|
case AlertDescription::CERTIFICATE_REVOKED:
|
|
return "A certificate was revoked by its signer."sv;
|
|
|
|
case AlertDescription::CERTIFICATE_EXPIRED:
|
|
return "A certificate has expired or is not currently valid."sv;
|
|
|
|
case AlertDescription::CERTIFICATE_UNKNOWN:
|
|
return "Some other (unspecified) issue arose in processing the certificate, rendering it unacceptable."sv;
|
|
|
|
case AlertDescription::ILLEGAL_PARAMETER:
|
|
return "A field in the handshake was out of range or inconsistent with other fields. "
|
|
"This is always fatal."sv;
|
|
|
|
case AlertDescription::UNKNOWN_CA:
|
|
return "A valid certificate chain or partial chain was received, but the certificate was not accepted "
|
|
"because the CA certificate could not be located "
|
|
"or couldn't be matched with a known, trusted CA. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::ACCESS_DENIED:
|
|
return "A valid certificate was received, but when access control was applied, "
|
|
"the sender decided not to proceed with negotiation. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::DECODE_ERROR:
|
|
return "A message could not be decoded because some field was out of the specified range "
|
|
"or the length of the message was incorrect. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::DECRYPT_ERROR:
|
|
return "A handshake cryptographic operation failed, "
|
|
"including being unable to correctly verify a signature, "
|
|
"decrypt a key exchange, or validate a finished message."sv;
|
|
|
|
case AlertDescription::EXPORT_RESTRICTION_RESERVED:
|
|
return "This alert was used in TLS 1.0 but not TLS 1.1."sv;
|
|
|
|
case AlertDescription::PROTOCOL_VERSION:
|
|
return "The protocol version the client has attempted to negotiate is recognized but not supported. "
|
|
"(For example, old protocol versions might be avoided for security reasons). "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::INSUFFICIENT_SECURITY:
|
|
return "Returned instead of handshake_failure when a negotiation has failed"
|
|
"specifically because the server requires ciphers more secure than those supported by the client."
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::INTERNAL_ERROR:
|
|
return "An internal error unrelated to the peer "
|
|
"or the correctness of the protocol (such as a memory allocation failure) "
|
|
"makes it impossible to continue. "
|
|
"This message is always fatal."sv;
|
|
|
|
case AlertDescription::USER_CANCELED:
|
|
return "This handshake is being canceled for some reason unrelated to a protocol failure. "
|
|
"If the user cancels an operation after the handshake is complete, "
|
|
"just closing the connection by sending a close_notify is more appropriate. "
|
|
"This alert should be followed by a close_notify. "
|
|
"This message is generally a warning."sv;
|
|
|
|
case AlertDescription::NO_RENEGOTIATION_RESERVED:
|
|
return "Sent by the client in response to a hello request "
|
|
"or by the server in response to a client hello after initial handshaking. "
|
|
"Either of these would normally lead to renegotiation; "
|
|
"when that is not appropriate, the recipient should respond with this alert. "
|
|
"At that point, the original requester can decide whether to proceed with the connection. "
|
|
"One case where this would be appropriate is where a server has spawned a process to satisfy a request; "
|
|
"the process might receive security parameters(key length, authentication, etc.) at startup "
|
|
"and it might be difficult to communicate changes to these parameters after that point. "
|
|
"This message is always a warning."sv;
|
|
|
|
case AlertDescription::CLOSE_NOTIFY:
|
|
return "This alert notifies the recipient that the sender will not send any more messages on this connection. "
|
|
"Any data received after a closure alert has been received MUST be ignored."sv;
|
|
|
|
case AlertDescription::INAPPROPRIATE_FALLBACK:
|
|
return "Sent by a server in response to an invalid connection retry attempt from a client (see [RFC7507])."sv;
|
|
|
|
case AlertDescription::MISSING_EXTENSION:
|
|
return "Sent by endpoints that receive a handshake message not containing an extension "
|
|
"that is mandatory to send for the offered TLS version or other negotiated parameters."sv;
|
|
|
|
case AlertDescription::CERTIFICATE_REQUIRED:
|
|
return "Sent by servers when a client certificate is desired but none was provided by the client."sv;
|
|
|
|
case AlertDescription::NO_APPLICATION_PROTOCOL:
|
|
return "Sent by servers when a client \"application_layer_protocol_negotiation\" extension "
|
|
"advertises only protocols that the server does not support (see [RFC7301])."sv;
|
|
|
|
case AlertDescription::UNSUPPORTED_EXTENSION:
|
|
return "Sent by endpoints receiving any handshake message containing an extension known to be prohibited "
|
|
"for inclusion in the given handshake message, "
|
|
"or including any extensions in a ServerHello "
|
|
"or Certificate not first offered in the corresponding ClientHello or CertificateRequest."sv;
|
|
|
|
case AlertDescription::CERTIFICATE_UNOBTAINABLE_RESERVED:
|
|
return "If a server is unable to obtain certificates in a given CertificateURL, "
|
|
"it MUST send a fatal certificate_unobtainable(111) alert "
|
|
"if it requires the certificates to complete the handshake."sv;
|
|
|
|
case AlertDescription::TOO_MANY_CIDS_REQUESTED:
|
|
return "Endpoints MAY handle an excessive number of RequestConnectionId messages by terminating the connection."sv;
|
|
|
|
case AlertDescription::UNRECOGNIZED_NAME:
|
|
return "The ServerNameList MUST NOT contain more than one name of the same name_type. "
|
|
"If the server understood the ClientHello extension but does not recognize the server name, "
|
|
"the server SHOULD take one of two actions: "
|
|
"either abort the handshake by sending a fatal-level unrecognized_name(112) alert or continue the handshake. "
|
|
"It is NOT RECOMMENDED to send a warning-level unrecognized_name(112) alert, "
|
|
"because the client's behavior in response to warning-level alerts is unpredictable."sv;
|
|
|
|
case AlertDescription::BAD_CERTIFICATE_STATUS_RESPONSE:
|
|
return "Clients requesting an OCSP response and receiving an OCSP response "
|
|
"in a \"CertificateStatus\" message MUST check the OCSP response "
|
|
"and abort the handshake if the response is not satisfactory. "
|
|
"This alert is always fatal."sv;
|
|
|
|
case AlertDescription::BAD_CERTIFICATE_HASH_VALUE_RESERVED:
|
|
return "The server MUST check that the SHA-1 hash of the contents of the object retrieved from that URL "
|
|
"(after decoding any MIME Content-Transfer-Encoding) matches the given hash. "
|
|
"If any retrieved object does not have the correct SHA-1 hash, "
|
|
"the server MUST abort the handshake. "
|
|
"This alert is always fatal."sv;
|
|
|
|
case AlertDescription::UNKNOWN_PSK_IDENTITY:
|
|
return "If the server does not recognize the PSK identity, it MAY respond with this message."
|
|
"Alternatively, if the server wishes to hide the fact that the PSK identity was not known, "
|
|
"it MAY continue the protocol as if the PSK identity existed but the key was incorrect: "
|
|
"that is, respond with a \"DECRYPT_ERROR\" alert."sv;
|
|
}
|
|
|
|
return "Unknown alert"sv;
|
|
}
|
|
|
|
}
|