Coverage Report

Created: 2025-03-04 07:22

/src/serenity/Userland/Libraries/LibTLS/Extensions.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * Copyright (c) 2020, Ali Mohammad Pur <mpfard@serenityos.org>
3
 * Copyright (c) 2023, stelar7 <dudedbz@gmail.com>
4
 *
5
 * SPDX-License-Identifier: BSD-2-Clause
6
 */
7
8
#pragma once
9
10
#include <AK/Types.h>
11
12
namespace TLS {
13
14
#define _ENUM_KEY(name) name,
15
#define _ENUM_KEY_VALUE(name, value) name = value,
16
17
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5
18
#define __ENUM_CONTENT_TYPES                \
19
    _ENUM_KEY_VALUE(CHANGE_CIPHER_SPEC, 20) \
20
    _ENUM_KEY_VALUE(ALERT, 21)              \
21
    _ENUM_KEY_VALUE(HANDSHAKE, 22)          \
22
    _ENUM_KEY_VALUE(APPLICATION_DATA, 23)   \
23
    _ENUM_KEY_VALUE(HEARTBEAT, 24)          \
24
    _ENUM_KEY_VALUE(TLS12_CID, 25)          \
25
    _ENUM_KEY_VALUE(ACK, 26)
26
27
enum class ContentType : u8 {
28
    __ENUM_CONTENT_TYPES
29
};
30
31
#define __ENUM_PROTOCOL_VERSIONS         \
32
    _ENUM_KEY_VALUE(VERSION_1_3, 0x0304) \
33
    _ENUM_KEY_VALUE(VERSION_1_2, 0x0303) \
34
    _ENUM_KEY_VALUE(VERSION_1_1, 0x0302) \
35
    _ENUM_KEY_VALUE(VERSION_1_0, 0x0301) \
36
    _ENUM_KEY_VALUE(GREASE_0, 0x0A0A)    \
37
    _ENUM_KEY_VALUE(GREASE_1, 0x1A1A)    \
38
    _ENUM_KEY_VALUE(GREASE_2, 0x2A2A)    \
39
    _ENUM_KEY_VALUE(GREASE_3, 0x3A3A)    \
40
    _ENUM_KEY_VALUE(GREASE_4, 0x4A4A)    \
41
    _ENUM_KEY_VALUE(GREASE_5, 0x5A5A)    \
42
    _ENUM_KEY_VALUE(GREASE_6, 0x6A6A)    \
43
    _ENUM_KEY_VALUE(GREASE_7, 0x7A7A)    \
44
    _ENUM_KEY_VALUE(GREASE_8, 0x8A8A)    \
45
    _ENUM_KEY_VALUE(GREASE_9, 0x9A9A)    \
46
    _ENUM_KEY_VALUE(GREASE_A, 0xAAAA)    \
47
    _ENUM_KEY_VALUE(GREASE_B, 0xBABA)    \
48
    _ENUM_KEY_VALUE(GREASE_C, 0xCACA)    \
49
    _ENUM_KEY_VALUE(GREASE_D, 0xDADA)    \
50
    _ENUM_KEY_VALUE(GREASE_E, 0xEAEA)    \
51
    _ENUM_KEY_VALUE(GREASE_F, 0xFAFA)
52
53
enum class ProtocolVersion : u16 {
54
    __ENUM_PROTOCOL_VERSIONS
55
};
56
57
#define __ENUM_ALERT_LEVELS     \
58
    _ENUM_KEY_VALUE(WARNING, 1) \
59
    _ENUM_KEY_VALUE(FATAL, 2)
60
61
enum class AlertLevel : u8 {
62
    __ENUM_ALERT_LEVELS
63
};
64
65
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7
66
#define __ENUM_HANDSHAKE_TYPES                        \
67
    _ENUM_KEY_VALUE(HELLO_REQUEST_RESERVED, 0)        \
68
    _ENUM_KEY_VALUE(CLIENT_HELLO, 1)                  \
69
    _ENUM_KEY_VALUE(SERVER_HELLO, 2)                  \
70
    _ENUM_KEY_VALUE(HELLO_VERIFY_REQUEST_RESERVED, 3) \
71
    _ENUM_KEY_VALUE(NEW_SESSION_TICKET, 4)            \
72
    _ENUM_KEY_VALUE(END_OF_EARLY_DATA, 5)             \
73
    _ENUM_KEY_VALUE(HELLO_RETRY_REQUEST_RESERVED, 6)  \
74
    _ENUM_KEY_VALUE(ENCRYPTED_EXTENSIONS, 8)          \
75
    _ENUM_KEY_VALUE(REQUEST_CONNECTION_ID, 9)         \
76
    _ENUM_KEY_VALUE(NEW_CONNECTION_ID, 10)            \
77
    _ENUM_KEY_VALUE(CERTIFICATE, 11)                  \
78
    _ENUM_KEY_VALUE(SERVER_KEY_EXCHANGE_RESERVED, 12) \
79
    _ENUM_KEY_VALUE(CERTIFICATE_REQUEST, 13)          \
80
    _ENUM_KEY_VALUE(SERVER_HELLO_DONE_RESERVED, 14)   \
81
    _ENUM_KEY_VALUE(CERTIFICATE_VERIFY, 15)           \
82
    _ENUM_KEY_VALUE(CLIENT_KEY_EXCHANGE_RESERVED, 16) \
83
    _ENUM_KEY_VALUE(FINISHED, 20)                     \
84
    _ENUM_KEY_VALUE(CERTIFICATE_URL_RESERVED, 21)     \
85
    _ENUM_KEY_VALUE(CERTIFICATE_STATUS_RESERVED, 22)  \
86
    _ENUM_KEY_VALUE(SUPPLEMENTAL_DATA_RESERVED, 23)   \
87
    _ENUM_KEY_VALUE(KEY_UPDATE, 24)                   \
88
    _ENUM_KEY_VALUE(COMPRESSED_CERTIFICATE, 25)       \
89
    _ENUM_KEY_VALUE(EKT_KEY, 26)                      \
90
    _ENUM_KEY_VALUE(MESSAGE_HASH, 254)
91
92
enum class HandshakeType : u8 {
93
    __ENUM_HANDSHAKE_TYPES
94
};
95
96
// https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-1
97
#define __ENUM_EXTENSION_TYPES                                  \
98
    _ENUM_KEY_VALUE(SERVER_NAME, 0)                             \
99
    _ENUM_KEY_VALUE(MAX_FRAGMENT_LENGTH, 1)                     \
100
    _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_URL, 2)                  \
101
    _ENUM_KEY_VALUE(TRUSTED_CA_KEYS, 3)                         \
102
    _ENUM_KEY_VALUE(TRUNCATED_HMAC, 4)                          \
103
    _ENUM_KEY_VALUE(STATUS_REQUEST, 5)                          \
104
    _ENUM_KEY_VALUE(USER_MAPPING, 6)                            \
105
    _ENUM_KEY_VALUE(CLIENT_AUTHZ, 7)                            \
106
    _ENUM_KEY_VALUE(SERVER_AUTHZ, 8)                            \
107
    _ENUM_KEY_VALUE(CERT_TYPE, 9)                               \
108
    _ENUM_KEY_VALUE(SUPPORTED_GROUPS, 10)                       \
109
    _ENUM_KEY_VALUE(EC_POINT_FORMATS, 11)                       \
110
    _ENUM_KEY_VALUE(SRP, 12)                                    \
111
    _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS, 13)                   \
112
    _ENUM_KEY_VALUE(USE_SRTP, 14)                               \
113
    _ENUM_KEY_VALUE(HEARTBEAT, 15)                              \
114
    _ENUM_KEY_VALUE(APPLICATION_LAYER_PROTOCOL_NEGOTIATION, 16) \
115
    _ENUM_KEY_VALUE(STATUS_REQUEST_V2, 17)                      \
116
    _ENUM_KEY_VALUE(SIGNED_CERTIFICATE_TIMESTAMP, 18)           \
117
    _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_TYPE, 19)                \
118
    _ENUM_KEY_VALUE(SERVER_CERTIFICATE_TYPE, 20)                \
119
    _ENUM_KEY_VALUE(PADDING, 21)                                \
120
    _ENUM_KEY_VALUE(ENCRYPT_THEN_MAC, 22)                       \
121
    _ENUM_KEY_VALUE(EXTENDED_MASTER_SECRET, 23)                 \
122
    _ENUM_KEY_VALUE(TOKEN_BINDING, 24)                          \
123
    _ENUM_KEY_VALUE(CACHED_INFO, 25)                            \
124
    _ENUM_KEY_VALUE(TLS_LTS, 26)                                \
125
    _ENUM_KEY_VALUE(COMPRESS_CERTIFICATE, 27)                   \
126
    _ENUM_KEY_VALUE(RECORD_SIZE_LIMIT, 28)                      \
127
    _ENUM_KEY_VALUE(PWD_PROTECT, 29)                            \
128
    _ENUM_KEY_VALUE(PWD_CLEAR, 30)                              \
129
    _ENUM_KEY_VALUE(PASSWORD_SALT, 31)                          \
130
    _ENUM_KEY_VALUE(TICKET_PINNING, 32)                         \
131
    _ENUM_KEY_VALUE(TLS_CERT_WITH_EXTERN_PSK, 33)               \
132
    _ENUM_KEY_VALUE(DELEGATED_CREDENTIALS, 34)                  \
133
    _ENUM_KEY_VALUE(SESSION_TICKET, 35)                         \
134
    _ENUM_KEY_VALUE(TLMSP, 36)                                  \
135
    _ENUM_KEY_VALUE(TLMSP_PROXYING, 37)                         \
136
    _ENUM_KEY_VALUE(TLMSP_DELEGATE, 38)                         \
137
    _ENUM_KEY_VALUE(SUPPORTED_EKT_CIPHERS, 39)                  \
138
    _ENUM_KEY_VALUE(PRE_SHARED_KEY, 41)                         \
139
    _ENUM_KEY_VALUE(EARLY_DATA, 42)                             \
140
    _ENUM_KEY_VALUE(SUPPORTED_VERSIONS, 43)                     \
141
    _ENUM_KEY_VALUE(COOKIE, 44)                                 \
142
    _ENUM_KEY_VALUE(PSK_KEY_EXCHANGE_MODES, 45)                 \
143
    _ENUM_KEY_VALUE(CERTIFICATE_AUTHORITIES, 47)                \
144
    _ENUM_KEY_VALUE(OID_FILTERS, 48)                            \
145
    _ENUM_KEY_VALUE(POST_HANDSHAKE_AUTH, 49)                    \
146
    _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS_CERT, 50)              \
147
    _ENUM_KEY_VALUE(KEY_SHARE, 51)                              \
148
    _ENUM_KEY_VALUE(TRANSPARENCY_INFO, 52)                      \
149
    _ENUM_KEY_VALUE(CONNECTION_ID_DEPRECATED, 53)               \
150
    _ENUM_KEY_VALUE(CONNECTION_ID, 54)                          \
151
    _ENUM_KEY_VALUE(EXTERNAL_ID_HASH, 55)                       \
152
    _ENUM_KEY_VALUE(EXTERNAL_SESSION_ID, 56)                    \
153
    _ENUM_KEY_VALUE(QUIC_TRANSPORT_PARAMETERS, 57)              \
154
    _ENUM_KEY_VALUE(TICKET_REQUEST, 58)                         \
155
    _ENUM_KEY_VALUE(DNSSEC_CHAIN, 59)                           \
156
    _ENUM_KEY_VALUE(RENEGOTIATION_INFO, 65281)
157
158
enum class ExtensionType : u16 {
159
    __ENUM_EXTENSION_TYPES
160
};
161
162
#define __ENUM_NAME_TYPES \
163
    _ENUM_KEY_VALUE(HOST_NAME, 0)
164
165
enum class NameType : u8 {
166
    __ENUM_NAME_TYPES
167
};
168
169
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-10
170
#define __ENUM_EC_CURVE_TYPES          \
171
    _ENUM_KEY_VALUE(EXPLICIT_PRIME, 1) \
172
    _ENUM_KEY_VALUE(EXPLICIT_CHAR2, 2) \
173
    _ENUM_KEY_VALUE(NAMED_CURVE, 3)
174
175
enum class ECCurveType : u8 {
176
    __ENUM_EC_CURVE_TYPES
177
};
178
179
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
180
#define __ENUM_SUPPORTED_GROUPS                              \
181
    _ENUM_KEY_VALUE(SECT163K1, 0x0001)                       \
182
    _ENUM_KEY_VALUE(SECT163R1, 0x0002)                       \
183
    _ENUM_KEY_VALUE(SECT163R2, 0x0003)                       \
184
    _ENUM_KEY_VALUE(SECT193R1, 0x0004)                       \
185
    _ENUM_KEY_VALUE(SECT193R2, 0x0005)                       \
186
    _ENUM_KEY_VALUE(SECT233K1, 0x0006)                       \
187
    _ENUM_KEY_VALUE(SECT233R1, 0x0007)                       \
188
    _ENUM_KEY_VALUE(SECT239K1, 0x0008)                       \
189
    _ENUM_KEY_VALUE(SECT283K1, 0x0009)                       \
190
    _ENUM_KEY_VALUE(SECT283R1, 0x000a)                       \
191
    _ENUM_KEY_VALUE(SECT409K1, 0x000b)                       \
192
    _ENUM_KEY_VALUE(SECT409R1, 0x000c)                       \
193
    _ENUM_KEY_VALUE(SECT571K1, 0x000d)                       \
194
    _ENUM_KEY_VALUE(SECT571R1, 0x000e)                       \
195
    _ENUM_KEY_VALUE(SECP160K1, 0x000f)                       \
196
    _ENUM_KEY_VALUE(SECP160R1, 0x0010)                       \
197
    _ENUM_KEY_VALUE(SECP160R2, 0x0011)                       \
198
    _ENUM_KEY_VALUE(SECP192K1, 0x0012)                       \
199
    _ENUM_KEY_VALUE(SECP192R1, 0x0013)                       \
200
    _ENUM_KEY_VALUE(SECP224K1, 0x0014)                       \
201
    _ENUM_KEY_VALUE(SECP224R1, 0x0015)                       \
202
    _ENUM_KEY_VALUE(SECP256K1, 0x0016)                       \
203
    _ENUM_KEY_VALUE(SECP256R1, 0x0017)                       \
204
    _ENUM_KEY_VALUE(SECP384R1, 0x0018)                       \
205
    _ENUM_KEY_VALUE(SECP521R1, 0x0019)                       \
206
    _ENUM_KEY_VALUE(BRAINPOOLP256R1, 0x001a)                 \
207
    _ENUM_KEY_VALUE(BRAINPOOLP384R1, 0x001b)                 \
208
    _ENUM_KEY_VALUE(BRAINPOOLP512R1, 0x001c)                 \
209
    _ENUM_KEY_VALUE(X25519, 0x001d)                          \
210
    _ENUM_KEY_VALUE(X448, 0x001e)                            \
211
    _ENUM_KEY_VALUE(BRAINPOOLP256R1TLS13, 0x001f)            \
212
    _ENUM_KEY_VALUE(BRAINPOOLP384R1TLS13, 0x0020)            \
213
    _ENUM_KEY_VALUE(BRAINPOOLP512R1TLS13, 0x0021)            \
214
    _ENUM_KEY_VALUE(GC256A, 0x0022)                          \
215
    _ENUM_KEY_VALUE(GC256B, 0x0023)                          \
216
    _ENUM_KEY_VALUE(GC256C, 0x0024)                          \
217
    _ENUM_KEY_VALUE(GC256D, 0x0025)                          \
218
    _ENUM_KEY_VALUE(GC512A, 0x0026)                          \
219
    _ENUM_KEY_VALUE(GC512B, 0x0027)                          \
220
    _ENUM_KEY_VALUE(GC512C, 0x0028)                          \
221
    _ENUM_KEY_VALUE(CURVESM2, 0x0029)                        \
222
    _ENUM_KEY_VALUE(FFDHE2048, 0x0100)                       \
223
    _ENUM_KEY_VALUE(FFDHE3072, 0x0101)                       \
224
    _ENUM_KEY_VALUE(FFDHE4096, 0x0102)                       \
225
    _ENUM_KEY_VALUE(FFDHE6144, 0x0103)                       \
226
    _ENUM_KEY_VALUE(FFDHE8192, 0x0104)                       \
227
    _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_PRIME_CURVES, 0xff01) \
228
    _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_CHAR2_CURVES, 0xff02) \
229
    _ENUM_KEY_VALUE(GREASE_0, 0x0A0A)                        \
230
    _ENUM_KEY_VALUE(GREASE_1, 0x1A1A)                        \
231
    _ENUM_KEY_VALUE(GREASE_2, 0x2A2A)                        \
232
    _ENUM_KEY_VALUE(GREASE_3, 0x3A3A)                        \
233
    _ENUM_KEY_VALUE(GREASE_4, 0x4A4A)                        \
234
    _ENUM_KEY_VALUE(GREASE_5, 0x5A5A)                        \
235
    _ENUM_KEY_VALUE(GREASE_6, 0x6A6A)                        \
236
    _ENUM_KEY_VALUE(GREASE_7, 0x7A7A)                        \
237
    _ENUM_KEY_VALUE(GREASE_8, 0x8A8A)                        \
238
    _ENUM_KEY_VALUE(GREASE_9, 0x9A9A)                        \
239
    _ENUM_KEY_VALUE(GREASE_A, 0xAAAA)                        \
240
    _ENUM_KEY_VALUE(GREASE_B, 0xBABA)                        \
241
    _ENUM_KEY_VALUE(GREASE_C, 0xCACA)                        \
242
    _ENUM_KEY_VALUE(GREASE_D, 0xDADA)                        \
243
    _ENUM_KEY_VALUE(GREASE_E, 0xEAEA)                        \
244
    _ENUM_KEY_VALUE(GREASE_F, 0xFAFA)
245
246
enum class SupportedGroup : u16 {
247
    __ENUM_SUPPORTED_GROUPS
248
};
249
250
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-9
251
#define __ENUM_EC_POINT_FORMATS                   \
252
    _ENUM_KEY_VALUE(UNCOMPRESSED, 0)              \
253
    _ENUM_KEY_VALUE(ANSIX962_COMPRESSED_PRIME, 1) \
254
    _ENUM_KEY_VALUE(ANSIX962_COMPRESSED_CHAR2, 2)
255
256
enum class ECPointFormat : u8 {
257
    __ENUM_EC_POINT_FORMATS
258
};
259
260
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-16
261
#define __ENUM_SIGNATURE_ALGORITHM         \
262
    _ENUM_KEY_VALUE(ANONYMOUS, 0)          \
263
    _ENUM_KEY_VALUE(RSA, 1)                \
264
    _ENUM_KEY_VALUE(DSA, 2)                \
265
    _ENUM_KEY_VALUE(ECDSA, 3)              \
266
    _ENUM_KEY_VALUE(ED25519, 7)            \
267
    _ENUM_KEY_VALUE(ED448, 8)              \
268
    _ENUM_KEY_VALUE(GOSTR34102012_256, 64) \
269
    _ENUM_KEY_VALUE(GOSTR34102012_512, 65)
270
271
enum class SignatureAlgorithm : u8 {
272
    __ENUM_SIGNATURE_ALGORITHM
273
};
274
275
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-18
276
#define __ENUM_HASH_ALGORITHM  \
277
    _ENUM_KEY_VALUE(NONE, 0)   \
278
    _ENUM_KEY_VALUE(MD5, 1)    \
279
    _ENUM_KEY_VALUE(SHA1, 2)   \
280
    _ENUM_KEY_VALUE(SHA224, 3) \
281
    _ENUM_KEY_VALUE(SHA256, 4) \
282
    _ENUM_KEY_VALUE(SHA384, 5) \
283
    _ENUM_KEY_VALUE(SHA512, 6) \
284
    _ENUM_KEY_VALUE(INTRINSIC, 8)
285
286
enum class HashAlgorithm : u8 {
287
    __ENUM_HASH_ALGORITHM
288
};
289
290
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4
291
#define __ENUM_CIPHER_SUITES                                               \
292
    _ENUM_KEY_VALUE(TLS_NULL_WITH_NULL_NULL, 0x0000)                       \
293
    _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_MD5, 0x0001)                         \
294
    _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_SHA, 0x0002)                         \
295
    _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_RC4_40_MD5, 0x0003)                \
296
    _ENUM_KEY_VALUE(TLS_RSA_WITH_RC4_128_MD5, 0x0004)                      \
297
    _ENUM_KEY_VALUE(TLS_RSA_WITH_RC4_128_SHA, 0x0005)                      \
298
    _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, 0x0006)            \
299
    _ENUM_KEY_VALUE(TLS_RSA_WITH_IDEA_CBC_SHA, 0x0007)                     \
300
    _ENUM_KEY_VALUE(TLS_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x0008)             \
301
    _ENUM_KEY_VALUE(TLS_RSA_WITH_DES_CBC_SHA, 0x0009)                      \
302
    _ENUM_KEY_VALUE(TLS_RSA_WITH_3DES_EDE_CBC_SHA, 0x000A)                 \
303
    _ENUM_KEY_VALUE(TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, 0x000B)          \
304
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_DES_CBC_SHA, 0x000C)                   \
305
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, 0x000D)              \
306
    _ENUM_KEY_VALUE(TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x000E)          \
307
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_DES_CBC_SHA, 0x000F)                   \
308
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, 0x0010)              \
309
    _ENUM_KEY_VALUE(TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, 0x0011)         \
310
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_DES_CBC_SHA, 0x0012)                  \
311
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, 0x0013)             \
312
    _ENUM_KEY_VALUE(TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, 0x0014)         \
313
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_DES_CBC_SHA, 0x0015)                  \
314
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 0x0016)             \
315
    _ENUM_KEY_VALUE(TLS_DH_anon_EXPORT_WITH_RC4_40_MD5, 0x0017)            \
316
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_RC4_128_MD5, 0x0018)                  \
317
    _ENUM_KEY_VALUE(TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, 0x0019)         \
318
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_DES_CBC_SHA, 0x001A)                  \
319
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_3DES_EDE_CBC_SHA, 0x001B)             \
320
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_DES_CBC_SHA, 0x001E)                     \
321
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_3DES_EDE_CBC_SHA, 0x001F)                \
322
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_RC4_128_SHA, 0x0020)                     \
323
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_IDEA_CBC_SHA, 0x0021)                    \
324
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_DES_CBC_MD5, 0x0022)                     \
325
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_3DES_EDE_CBC_MD5, 0x0023)                \
326
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_RC4_128_MD5, 0x0024)                     \
327
    _ENUM_KEY_VALUE(TLS_KRB5_WITH_IDEA_CBC_MD5, 0x0025)                    \
328
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA, 0x0026)           \
329
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA, 0x0027)           \
330
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC4_40_SHA, 0x0028)               \
331
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5, 0x0029)           \
332
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5, 0x002A)           \
333
    _ENUM_KEY_VALUE(TLS_KRB5_EXPORT_WITH_RC4_40_MD5, 0x002B)               \
334
    _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA, 0x002C)                         \
335
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA, 0x002D)                     \
336
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA, 0x002E)                     \
337
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CBC_SHA, 0x002F)                  \
338
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_CBC_SHA, 0x0030)               \
339
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_CBC_SHA, 0x0031)               \
340
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_CBC_SHA, 0x0032)              \
341
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 0x0033)              \
342
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_CBC_SHA, 0x0034)              \
343
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CBC_SHA, 0x0035)                  \
344
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_CBC_SHA, 0x0036)               \
345
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_CBC_SHA, 0x0037)               \
346
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_CBC_SHA, 0x0038)              \
347
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CBC_SHA, 0x0039)              \
348
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_CBC_SHA, 0x003A)              \
349
    _ENUM_KEY_VALUE(TLS_RSA_WITH_NULL_SHA256, 0x003B)                      \
350
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CBC_SHA256, 0x003C)               \
351
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CBC_SHA256, 0x003D)               \
352
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_CBC_SHA256, 0x003E)            \
353
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_CBC_SHA256, 0x003F)            \
354
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, 0x0040)           \
355
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0041)             \
356
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA, 0x0042)          \
357
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0043)          \
358
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA, 0x0044)         \
359
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, 0x0045)         \
360
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA, 0x0046)         \
361
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, 0x0067)           \
362
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_CBC_SHA256, 0x0068)            \
363
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_CBC_SHA256, 0x0069)            \
364
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, 0x006A)           \
365
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, 0x006B)           \
366
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_CBC_SHA256, 0x006C)           \
367
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_CBC_SHA256, 0x006D)           \
368
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0084)             \
369
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA, 0x0085)          \
370
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0086)          \
371
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA, 0x0087)         \
372
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, 0x0088)         \
373
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA, 0x0089)         \
374
    _ENUM_KEY_VALUE(TLS_PSK_WITH_RC4_128_SHA, 0x008A)                      \
375
    _ENUM_KEY_VALUE(TLS_PSK_WITH_3DES_EDE_CBC_SHA, 0x008B)                 \
376
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CBC_SHA, 0x008C)                  \
377
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CBC_SHA, 0x008D)                  \
378
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_RC4_128_SHA, 0x008E)                  \
379
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, 0x008F)             \
380
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CBC_SHA, 0x0090)              \
381
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CBC_SHA, 0x0091)              \
382
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_RC4_128_SHA, 0x0092)                  \
383
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, 0x0093)             \
384
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_CBC_SHA, 0x0094)              \
385
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_CBC_SHA, 0x0095)              \
386
    _ENUM_KEY_VALUE(TLS_RSA_WITH_SEED_CBC_SHA, 0x0096)                     \
387
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_SEED_CBC_SHA, 0x0097)                  \
388
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_SEED_CBC_SHA, 0x0098)                  \
389
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_SEED_CBC_SHA, 0x0099)                 \
390
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_SEED_CBC_SHA, 0x009A)                 \
391
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_SEED_CBC_SHA, 0x009B)                 \
392
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_GCM_SHA256, 0x009C)               \
393
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_GCM_SHA384, 0x009D)               \
394
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, 0x009E)           \
395
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, 0x009F)           \
396
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_128_GCM_SHA256, 0x00A0)            \
397
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_AES_256_GCM_SHA384, 0x00A1)            \
398
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, 0x00A2)           \
399
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, 0x00A3)           \
400
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_128_GCM_SHA256, 0x00A4)            \
401
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_AES_256_GCM_SHA384, 0x00A5)            \
402
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_128_GCM_SHA256, 0x00A6)           \
403
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_AES_256_GCM_SHA384, 0x00A7)           \
404
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_GCM_SHA256, 0x00A8)               \
405
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_GCM_SHA384, 0x00A9)               \
406
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, 0x00AA)           \
407
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, 0x00AB)           \
408
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, 0x00AC)           \
409
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, 0x00AD)           \
410
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CBC_SHA256, 0x00AE)               \
411
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CBC_SHA384, 0x00AF)               \
412
    _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA256, 0x00B0)                      \
413
    _ENUM_KEY_VALUE(TLS_PSK_WITH_NULL_SHA384, 0x00B1)                      \
414
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, 0x00B2)           \
415
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, 0x00B3)           \
416
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA256, 0x00B4)                  \
417
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_NULL_SHA384, 0x00B5)                  \
418
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, 0x00B6)           \
419
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, 0x00B7)           \
420
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA256, 0x00B8)                  \
421
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_NULL_SHA384, 0x00B9)                  \
422
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BA)          \
423
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256, 0x00BB)       \
424
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BC)       \
425
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256, 0x00BD)      \
426
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0x00BE)      \
427
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256, 0x00BF)      \
428
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C0)          \
429
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256, 0x00C1)       \
430
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C2)       \
431
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256, 0x00C3)      \
432
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, 0x00C4)      \
433
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256, 0x00C5)      \
434
    _ENUM_KEY_VALUE(TLS_SM4_GCM_SM3, 0x00C6)                               \
435
    _ENUM_KEY_VALUE(TLS_SM4_CCM_SM3, 0x00C7)                               \
436
    _ENUM_KEY_VALUE(TLS_EMPTY_RENEGOTIATION_INFO_SCSV, 0x00FF)             \
437
    _ENUM_KEY_VALUE(TLS_AES_128_GCM_SHA256, 0x1301)                        \
438
    _ENUM_KEY_VALUE(TLS_AES_256_GCM_SHA384, 0x1302)                        \
439
    _ENUM_KEY_VALUE(TLS_CHACHA20_POLY1305_SHA256, 0x1303)                  \
440
    _ENUM_KEY_VALUE(TLS_AES_128_CCM_SHA256, 0x1304)                        \
441
    _ENUM_KEY_VALUE(TLS_AES_128_CCM_8_SHA256, 0x1305)                      \
442
    _ENUM_KEY_VALUE(TLS_FALLBACK_SCSV, 0x5600)                             \
443
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_NULL_SHA, 0xC001)                  \
444
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_RC4_128_SHA, 0xC002)               \
445
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC003)          \
446
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, 0xC004)           \
447
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, 0xC005)           \
448
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_NULL_SHA, 0xC006)                 \
449
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, 0xC007)              \
450
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, 0xC008)         \
451
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, 0xC009)          \
452
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, 0xC00A)          \
453
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_NULL_SHA, 0xC00B)                    \
454
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_RC4_128_SHA, 0xC00C)                 \
455
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, 0xC00D)            \
456
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, 0xC00E)             \
457
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, 0xC00F)             \
458
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_NULL_SHA, 0xC010)                   \
459
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_RC4_128_SHA, 0xC011)                \
460
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, 0xC012)           \
461
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, 0xC013)            \
462
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, 0xC014)            \
463
    _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_NULL_SHA, 0xC015)                   \
464
    _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_RC4_128_SHA, 0xC016)                \
465
    _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA, 0xC017)           \
466
    _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_AES_128_CBC_SHA, 0xC018)            \
467
    _ENUM_KEY_VALUE(TLS_ECDH_anon_WITH_AES_256_CBC_SHA, 0xC019)            \
468
    _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA, 0xC01A)             \
469
    _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA, 0xC01B)         \
470
    _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA, 0xC01C)         \
471
    _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_AES_128_CBC_SHA, 0xC01D)              \
472
    _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA, 0xC01E)          \
473
    _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA, 0xC01F)          \
474
    _ENUM_KEY_VALUE(TLS_SRP_SHA_WITH_AES_256_CBC_SHA, 0xC020)              \
475
    _ENUM_KEY_VALUE(TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA, 0xC021)          \
476
    _ENUM_KEY_VALUE(TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA, 0xC022)          \
477
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, 0xC023)       \
478
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, 0xC024)       \
479
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, 0xC025)        \
480
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, 0xC026)        \
481
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, 0xC027)         \
482
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, 0xC028)         \
483
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, 0xC029)          \
484
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, 0xC02A)          \
485
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02B)       \
486
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02C)       \
487
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, 0xC02D)        \
488
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, 0xC02E)        \
489
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0xC02F)         \
490
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0xC030)         \
491
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, 0xC031)          \
492
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, 0xC032)          \
493
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_RC4_128_SHA, 0xC033)                \
494
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, 0xC034)           \
495
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, 0xC035)            \
496
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, 0xC036)            \
497
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, 0xC037)         \
498
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, 0xC038)         \
499
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA, 0xC039)                   \
500
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA256, 0xC03A)                \
501
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_NULL_SHA384, 0xC03B)                \
502
    _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_128_CBC_SHA256, 0xC03C)              \
503
    _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_256_CBC_SHA384, 0xC03D)              \
504
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256, 0xC03E)           \
505
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384, 0xC03F)           \
506
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256, 0xC040)           \
507
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384, 0xC041)           \
508
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256, 0xC042)          \
509
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384, 0xC043)          \
510
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256, 0xC044)          \
511
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384, 0xC045)          \
512
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_128_CBC_SHA256, 0xC046)          \
513
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_256_CBC_SHA384, 0xC047)          \
514
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256, 0xC048)      \
515
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384, 0xC049)      \
516
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256, 0xC04A)       \
517
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384, 0xC04B)       \
518
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256, 0xC04C)        \
519
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384, 0xC04D)        \
520
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256, 0xC04E)         \
521
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384, 0xC04F)         \
522
    _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_128_GCM_SHA256, 0xC050)              \
523
    _ENUM_KEY_VALUE(TLS_RSA_WITH_ARIA_256_GCM_SHA384, 0xC051)              \
524
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256, 0xC052)          \
525
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384, 0xC053)          \
526
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256, 0xC054)           \
527
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384, 0xC055)           \
528
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256, 0xC056)          \
529
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384, 0xC057)          \
530
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256, 0xC058)           \
531
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384, 0xC059)           \
532
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_128_GCM_SHA256, 0xC05A)          \
533
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_ARIA_256_GCM_SHA384, 0xC05B)          \
534
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256, 0xC05C)      \
535
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384, 0xC05D)      \
536
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256, 0xC05E)       \
537
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384, 0xC05F)       \
538
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256, 0xC060)        \
539
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384, 0xC061)        \
540
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256, 0xC062)         \
541
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384, 0xC063)         \
542
    _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_128_CBC_SHA256, 0xC064)              \
543
    _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_256_CBC_SHA384, 0xC065)              \
544
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256, 0xC066)          \
545
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384, 0xC067)          \
546
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256, 0xC068)          \
547
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384, 0xC069)          \
548
    _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06A)              \
549
    _ENUM_KEY_VALUE(TLS_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06B)              \
550
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06C)          \
551
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06D)          \
552
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256, 0xC06E)          \
553
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384, 0xC06F)          \
554
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256, 0xC070)        \
555
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384, 0xC071)        \
556
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC072)  \
557
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC073)  \
558
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC074)   \
559
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC075)   \
560
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC076)    \
561
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC077)    \
562
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, 0xC078)     \
563
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, 0xC079)     \
564
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07A)          \
565
    _ENUM_KEY_VALUE(TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07B)          \
566
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07C)      \
567
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07D)      \
568
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC07E)       \
569
    _ENUM_KEY_VALUE(TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC07F)       \
570
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256, 0xC080)      \
571
    _ENUM_KEY_VALUE(TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384, 0xC081)      \
572
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256, 0xC082)       \
573
    _ENUM_KEY_VALUE(TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384, 0xC083)       \
574
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256, 0xC084)      \
575
    _ENUM_KEY_VALUE(TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384, 0xC085)      \
576
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC086)  \
577
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC087)  \
578
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC088)   \
579
    _ENUM_KEY_VALUE(TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC089)   \
580
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC08A)    \
581
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC08B)    \
582
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, 0xC08C)     \
583
    _ENUM_KEY_VALUE(TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, 0xC08D)     \
584
    _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC08E)          \
585
    _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC08F)          \
586
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC090)      \
587
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC091)      \
588
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, 0xC092)      \
589
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, 0xC093)      \
590
    _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC094)          \
591
    _ENUM_KEY_VALUE(TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC095)          \
592
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC096)      \
593
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC097)      \
594
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC098)      \
595
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC099)      \
596
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, 0xC09A)    \
597
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, 0xC09B)    \
598
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CCM, 0xC09C)                      \
599
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CCM, 0xC09D)                      \
600
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CCM, 0xC09E)                  \
601
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CCM, 0xC09F)                  \
602
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_128_CCM_8, 0xC0A0)                    \
603
    _ENUM_KEY_VALUE(TLS_RSA_WITH_AES_256_CCM_8, 0xC0A1)                    \
604
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_128_CCM_8, 0xC0A2)                \
605
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_AES_256_CCM_8, 0xC0A3)                \
606
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CCM, 0xC0A4)                      \
607
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CCM, 0xC0A5)                      \
608
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_128_CCM, 0xC0A6)                  \
609
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_AES_256_CCM, 0xC0A7)                  \
610
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_128_CCM_8, 0xC0A8)                    \
611
    _ENUM_KEY_VALUE(TLS_PSK_WITH_AES_256_CCM_8, 0xC0A9)                    \
612
    _ENUM_KEY_VALUE(TLS_PSK_DHE_WITH_AES_128_CCM_8, 0xC0AA)                \
613
    _ENUM_KEY_VALUE(TLS_PSK_DHE_WITH_AES_256_CCM_8, 0xC0AB)                \
614
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CCM, 0xC0AC)              \
615
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CCM, 0xC0AD)              \
616
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, 0xC0AE)            \
617
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, 0xC0AF)            \
618
    _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_128_GCM_SHA256, 0xC0B0)            \
619
    _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_256_GCM_SHA384, 0xC0B1)            \
620
    _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_128_CCM_SHA256, 0xC0B2)            \
621
    _ENUM_KEY_VALUE(TLS_ECCPWD_WITH_AES_256_CCM_SHA384, 0xC0B3)            \
622
    _ENUM_KEY_VALUE(TLS_SHA256_SHA256, 0xC0B4)                             \
623
    _ENUM_KEY_VALUE(TLS_SHA384_SHA384, 0xC0B5)                             \
624
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC, 0xC100)  \
625
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC, 0xC101)       \
626
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_28147_CNT_IMIT, 0xC102)       \
627
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L, 0xC103)     \
628
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_MGM_L, 0xC104)          \
629
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S, 0xC105)     \
630
    _ENUM_KEY_VALUE(TLS_GOSTR341112_256_WITH_MAGMA_MGM_S, 0xC106)          \
631
    _ENUM_KEY_VALUE(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA8)   \
632
    _ENUM_KEY_VALUE(TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCA9) \
633
    _ENUM_KEY_VALUE(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0xCCAA)     \
634
    _ENUM_KEY_VALUE(TLS_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAB)         \
635
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAC)   \
636
    _ENUM_KEY_VALUE(TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAD)     \
637
    _ENUM_KEY_VALUE(TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256, 0xCCAE)     \
638
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256, 0xD001)         \
639
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384, 0xD002)         \
640
    _ENUM_KEY_VALUE(TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256, 0xD003)       \
641
    _ENUM_KEY_VALUE(GREASE_0, 0x0A0A)                                      \
642
    _ENUM_KEY_VALUE(GREASE_1, 0x1A1A)                                      \
643
    _ENUM_KEY_VALUE(GREASE_2, 0x2A2A)                                      \
644
    _ENUM_KEY_VALUE(GREASE_3, 0x3A3A)                                      \
645
    _ENUM_KEY_VALUE(GREASE_4, 0x4A4A)                                      \
646
    _ENUM_KEY_VALUE(GREASE_5, 0x5A5A)                                      \
647
    _ENUM_KEY_VALUE(GREASE_6, 0x6A6A)                                      \
648
    _ENUM_KEY_VALUE(GREASE_7, 0x7A7A)                                      \
649
    _ENUM_KEY_VALUE(GREASE_8, 0x8A8A)                                      \
650
    _ENUM_KEY_VALUE(GREASE_9, 0x9A9A)                                      \
651
    _ENUM_KEY_VALUE(GREASE_A, 0xAAAA)                                      \
652
    _ENUM_KEY_VALUE(GREASE_B, 0xBABA)                                      \
653
    _ENUM_KEY_VALUE(GREASE_C, 0xCACA)                                      \
654
    _ENUM_KEY_VALUE(GREASE_D, 0XDADA)                                      \
655
    _ENUM_KEY_VALUE(GREASE_E, 0xEAEA)                                      \
656
    _ENUM_KEY_VALUE(GREASE_F, 0xFAFA)
657
658
enum class CipherSuite : u16 {
659
    __ENUM_CIPHER_SUITES
660
};
661
662
// https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-6
663
#define __ENUM_ALERT_DESCRIPTIONS                             \
664
    _ENUM_KEY_VALUE(CLOSE_NOTIFY, 0)                          \
665
    _ENUM_KEY_VALUE(UNEXPECTED_MESSAGE, 10)                   \
666
    _ENUM_KEY_VALUE(BAD_RECORD_MAC, 20)                       \
667
    _ENUM_KEY_VALUE(DECRYPTION_FAILED_RESERVED, 21)           \
668
    _ENUM_KEY_VALUE(RECORD_OVERFLOW, 22)                      \
669
    _ENUM_KEY_VALUE(DECOMPRESSION_FAILURE_RESERVED, 30)       \
670
    _ENUM_KEY_VALUE(HANDSHAKE_FAILURE, 40)                    \
671
    _ENUM_KEY_VALUE(NO_CERTIFICATE_RESERVED, 41)              \
672
    _ENUM_KEY_VALUE(BAD_CERTIFICATE, 42)                      \
673
    _ENUM_KEY_VALUE(UNSUPPORTED_CERTIFICATE, 43)              \
674
    _ENUM_KEY_VALUE(CERTIFICATE_REVOKED, 44)                  \
675
    _ENUM_KEY_VALUE(CERTIFICATE_EXPIRED, 45)                  \
676
    _ENUM_KEY_VALUE(CERTIFICATE_UNKNOWN, 46)                  \
677
    _ENUM_KEY_VALUE(ILLEGAL_PARAMETER, 47)                    \
678
    _ENUM_KEY_VALUE(UNKNOWN_CA, 48)                           \
679
    _ENUM_KEY_VALUE(ACCESS_DENIED, 49)                        \
680
    _ENUM_KEY_VALUE(DECODE_ERROR, 50)                         \
681
    _ENUM_KEY_VALUE(DECRYPT_ERROR, 51)                        \
682
    _ENUM_KEY_VALUE(TOO_MANY_CIDS_REQUESTED, 52)              \
683
    _ENUM_KEY_VALUE(EXPORT_RESTRICTION_RESERVED, 60)          \
684
    _ENUM_KEY_VALUE(PROTOCOL_VERSION, 70)                     \
685
    _ENUM_KEY_VALUE(INSUFFICIENT_SECURITY, 71)                \
686
    _ENUM_KEY_VALUE(INTERNAL_ERROR, 80)                       \
687
    _ENUM_KEY_VALUE(INAPPROPRIATE_FALLBACK, 86)               \
688
    _ENUM_KEY_VALUE(USER_CANCELED, 90)                        \
689
    _ENUM_KEY_VALUE(NO_RENEGOTIATION_RESERVED, 100)           \
690
    _ENUM_KEY_VALUE(MISSING_EXTENSION, 109)                   \
691
    _ENUM_KEY_VALUE(UNSUPPORTED_EXTENSION, 110)               \
692
    _ENUM_KEY_VALUE(CERTIFICATE_UNOBTAINABLE_RESERVED, 111)   \
693
    _ENUM_KEY_VALUE(UNRECOGNIZED_NAME, 112)                   \
694
    _ENUM_KEY_VALUE(BAD_CERTIFICATE_STATUS_RESPONSE, 113)     \
695
    _ENUM_KEY_VALUE(BAD_CERTIFICATE_HASH_VALUE_RESERVED, 114) \
696
    _ENUM_KEY_VALUE(UNKNOWN_PSK_IDENTITY, 115)                \
697
    _ENUM_KEY_VALUE(CERTIFICATE_REQUIRED, 116)                \
698
    _ENUM_KEY_VALUE(NO_APPLICATION_PROTOCOL, 120)
699
700
enum class AlertDescription : u8 {
701
    __ENUM_ALERT_DESCRIPTIONS
702
};
703
704
#undef _ENUM_KEY
705
#undef _ENUM_KEY_VALUE
706
707
constexpr static StringView enum_to_string(CipherSuite descriptor)
708
0
{
709
0
#define _ENUM_KEY_VALUE(name, value) \
710
0
    case CipherSuite::name:          \
711
0
        return #name##sv;
712
0
713
0
    switch (descriptor) {
714
0
        __ENUM_CIPHER_SUITES
715
0
    }
716
0
717
0
    return "Unknown"sv;
718
0
#undef _ENUM_KEY_VALUE
719
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::CipherSuite)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::CipherSuite)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::CipherSuite)
720
721
constexpr static StringView enum_to_string(ExtensionType descriptor)
722
0
{
723
0
#define _ENUM_KEY_VALUE(name, value) \
724
0
    case ExtensionType::name:        \
725
0
        return #name##sv;
726
0
727
0
    switch (descriptor) {
728
0
        __ENUM_EXTENSION_TYPES
729
0
    }
730
0
731
0
    return "Unknown"sv;
732
0
#undef _ENUM_KEY_VALUE
733
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::ExtensionType)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::ExtensionType)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::ExtensionType)
734
735
constexpr static StringView enum_to_string(ContentType descriptor)
736
0
{
737
0
#define _ENUM_KEY_VALUE(name, value) \
738
0
    case ContentType::name:          \
739
0
        return #name##sv;
740
0
741
0
    switch (descriptor) {
742
0
        __ENUM_CONTENT_TYPES
743
0
    }
744
0
745
0
    return "Unknown"sv;
746
0
#undef _ENUM_KEY_VALUE
747
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::ContentType)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::ContentType)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::ContentType)
748
749
constexpr static StringView enum_to_string(ProtocolVersion descriptor)
750
0
{
751
0
#define _ENUM_KEY_VALUE(name, value) \
752
0
    case ProtocolVersion::name:      \
753
0
        return #name##sv;
754
0
755
0
    switch (descriptor) {
756
0
        __ENUM_PROTOCOL_VERSIONS
757
0
    }
758
0
759
0
    return "Unknown"sv;
760
0
#undef _ENUM_KEY_VALUE
761
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::ProtocolVersion)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::ProtocolVersion)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::ProtocolVersion)
762
763
constexpr static StringView enum_to_string(HandshakeType descriptor)
764
0
{
765
0
#define _ENUM_KEY_VALUE(name, value) \
766
0
    case HandshakeType::name:        \
767
0
        return #name##sv;
768
0
769
0
    switch (descriptor) {
770
0
        __ENUM_HANDSHAKE_TYPES
771
0
    }
772
0
773
0
    return "Unknown"sv;
774
0
#undef _ENUM_KEY_VALUE
775
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::HandshakeType)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::HandshakeType)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::HandshakeType)
776
777
constexpr static StringView enum_to_string(SignatureAlgorithm descriptor)
778
0
{
779
0
#define _ENUM_KEY_VALUE(name, value) \
780
0
    case SignatureAlgorithm::name:   \
781
0
        return #name##sv;
782
0
783
0
    switch (descriptor) {
784
0
        __ENUM_SIGNATURE_ALGORITHM
785
0
    }
786
0
787
0
    return "Unknown"sv;
788
0
#undef _ENUM_KEY_VALUE
789
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::SignatureAlgorithm)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::SignatureAlgorithm)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::SignatureAlgorithm)
790
constexpr static StringView enum_to_string(AlertDescription descriptor)
791
0
{
792
0
#define _ENUM_KEY_VALUE(name, value) \
793
0
    case AlertDescription::name:     \
794
0
        return #name##sv;
795
0
796
0
    switch (descriptor) {
797
0
        __ENUM_ALERT_DESCRIPTIONS
798
0
    }
799
0
800
0
    return "Unknown"sv;
801
0
#undef _ENUM_KEY_VALUE
802
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_string(TLS::AlertDescription)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_string(TLS::AlertDescription)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_string(TLS::AlertDescription)
803
804
constexpr static StringView const enum_to_value(AlertDescription descriptor)
805
0
{
806
0
    switch (descriptor) {
807
0
    case AlertDescription::UNEXPECTED_MESSAGE:
808
0
        return "An inappropriate message was received. "
809
0
               "This alert is always fatal and should never be observed in communication between proper implementations."sv;
810
0
811
0
    case AlertDescription::BAD_RECORD_MAC:
812
0
        return "This alert is returned if a record is received with an incorrect MAC. "
813
0
               "This alert also MUST be returned if an alert is sent because a TLSCiphertext decrypted in an invalid way: "
814
0
               "either it wasn't an even multiple of the block length, "
815
0
               "or its padding values, when checked, weren't correct. "
816
0
               "This message is always fatal."sv;
817
0
818
0
    case AlertDescription::DECRYPTION_FAILED_RESERVED:
819
0
        return "This alert MAY be returned if a TLSCiphertext decrypted in an invalid way: "
820
0
               "either it wasn't an even multiple of the block length, "
821
0
               "or its padding values, when checked, weren't correct. "
822
0
               "This message is always fatal."sv;
823
0
824
0
    case AlertDescription::RECORD_OVERFLOW:
825
0
        return "A TLSCiphertext record was received that had a length more than 2^14 + 2048 bytes, "
826
0
               "or a record decrypted to a TLSCompressed record with more than 2^14 + 1024 bytes. "
827
0
               "This message is always fatal."sv;
828
0
829
0
    case AlertDescription::DECOMPRESSION_FAILURE_RESERVED:
830
0
        return "The decompression function received improper input (e.g., data that would expand to excessive length). "
831
0
               "This message is always fatal."sv;
832
0
833
0
    case AlertDescription::HANDSHAKE_FAILURE:
834
0
        return "Reception of a handshake_failure alert message indicates that the sender "
835
0
               "was unable to negotiate an acceptable set of security parameters given the options available. "
836
0
               "This is a fatal error."sv;
837
0
838
0
    case AlertDescription::NO_CERTIFICATE_RESERVED:
839
0
        return "This alert was used in SSLv3 but not in TLS. It should not be sent by compliant implementations."sv;
840
0
841
0
    case AlertDescription::BAD_CERTIFICATE:
842
0
        return "A certificate was corrupt, contained signatures that did not verify correctly, etc."sv;
843
0
844
0
    case AlertDescription::UNSUPPORTED_CERTIFICATE:
845
0
        return "A certificate was of an unsupported type."sv;
846
0
847
0
    case AlertDescription::CERTIFICATE_REVOKED:
848
0
        return "A certificate was revoked by its signer."sv;
849
0
850
0
    case AlertDescription::CERTIFICATE_EXPIRED:
851
0
        return "A certificate has expired or is not currently valid."sv;
852
0
853
0
    case AlertDescription::CERTIFICATE_UNKNOWN:
854
0
        return "Some other (unspecified) issue arose in processing the certificate, rendering it unacceptable."sv;
855
0
856
0
    case AlertDescription::ILLEGAL_PARAMETER:
857
0
        return "A field in the handshake was out of range or inconsistent with other fields. "
858
0
               "This is always fatal."sv;
859
0
860
0
    case AlertDescription::UNKNOWN_CA:
861
0
        return "A valid certificate chain or partial chain was received, but the certificate was not accepted "
862
0
               "because the CA certificate could not be located "
863
0
               "or couldn't be matched with a known, trusted CA. "
864
0
               "This message is always fatal."sv;
865
0
866
0
    case AlertDescription::ACCESS_DENIED:
867
0
        return "A valid certificate was received, but when access control was applied, "
868
0
               "the sender decided not to proceed with negotiation. "
869
0
               "This message is always fatal."sv;
870
0
871
0
    case AlertDescription::DECODE_ERROR:
872
0
        return "A message could not be decoded because some field was out of the specified range "
873
0
               "or the length of the message was incorrect. "
874
0
               "This message is always fatal."sv;
875
0
876
0
    case AlertDescription::DECRYPT_ERROR:
877
0
        return "A handshake cryptographic operation failed, "
878
0
               "including being unable to correctly verify a signature, "
879
0
               "decrypt a key exchange, or validate a finished message."sv;
880
0
881
0
    case AlertDescription::EXPORT_RESTRICTION_RESERVED:
882
0
        return "This alert was used in TLS 1.0 but not TLS 1.1."sv;
883
0
884
0
    case AlertDescription::PROTOCOL_VERSION:
885
0
        return "The protocol version the client has attempted to negotiate is recognized but not supported. "
886
0
               "(For example, old protocol versions might be avoided for security reasons). "
887
0
               "This message is always fatal."sv;
888
0
889
0
    case AlertDescription::INSUFFICIENT_SECURITY:
890
0
        return "Returned instead of handshake_failure when a negotiation has failed"
891
0
               "specifically because the server requires ciphers more secure than those supported by the client."
892
0
               "This message is always fatal."sv;
893
0
894
0
    case AlertDescription::INTERNAL_ERROR:
895
0
        return "An internal error unrelated to the peer "
896
0
               "or the correctness of the protocol (such as a memory allocation failure) "
897
0
               "makes it impossible to continue. "
898
0
               "This message is always fatal."sv;
899
0
900
0
    case AlertDescription::USER_CANCELED:
901
0
        return "This handshake is being canceled for some reason unrelated to a protocol failure. "
902
0
               "If the user cancels an operation after the handshake is complete, "
903
0
               "just closing the connection by sending a close_notify is more appropriate. "
904
0
               "This alert should be followed by a close_notify. "
905
0
               "This message is generally a warning."sv;
906
0
907
0
    case AlertDescription::NO_RENEGOTIATION_RESERVED:
908
0
        return "Sent by the client in response to a hello request "
909
0
               "or by the server in response to a client hello after initial handshaking. "
910
0
               "Either of these would normally lead to renegotiation; "
911
0
               "when that is not appropriate, the recipient should respond with this alert. "
912
0
               "At that point, the original requester can decide whether to proceed with the connection. "
913
0
               "One case where this would be appropriate is where a server has spawned a process to satisfy a request; "
914
0
               "the process might receive security parameters(key length, authentication, etc.) at startup "
915
0
               "and it might be difficult to communicate changes to these parameters after that point. "
916
0
               "This message is always a warning."sv;
917
0
918
0
    case AlertDescription::CLOSE_NOTIFY:
919
0
        return "This alert notifies the recipient that the sender will not send any more messages on this connection. "
920
0
               "Any data received after a closure alert has been received MUST be ignored."sv;
921
0
922
0
    case AlertDescription::INAPPROPRIATE_FALLBACK:
923
0
        return "Sent by a server in response to an invalid connection retry attempt from a client (see [RFC7507])."sv;
924
0
925
0
    case AlertDescription::MISSING_EXTENSION:
926
0
        return "Sent by endpoints that receive a handshake message not containing an extension "
927
0
               "that is mandatory to send for the offered TLS version or other negotiated parameters."sv;
928
0
929
0
    case AlertDescription::CERTIFICATE_REQUIRED:
930
0
        return "Sent by servers when a client certificate is desired but none was provided by the client."sv;
931
0
932
0
    case AlertDescription::NO_APPLICATION_PROTOCOL:
933
0
        return "Sent by servers when a client \"application_layer_protocol_negotiation\" extension "
934
0
               "advertises only protocols that the server does not support (see [RFC7301])."sv;
935
0
936
0
    case AlertDescription::UNSUPPORTED_EXTENSION:
937
0
        return "Sent by endpoints receiving any handshake message containing an extension known to be prohibited "
938
0
               "for inclusion in the given handshake message, "
939
0
               "or including any extensions in a ServerHello "
940
0
               "or Certificate not first offered in the corresponding ClientHello or CertificateRequest."sv;
941
0
942
0
    case AlertDescription::CERTIFICATE_UNOBTAINABLE_RESERVED:
943
0
        return "If a server is unable to obtain certificates in a given CertificateURL, "
944
0
               "it MUST send a fatal certificate_unobtainable(111) alert "
945
0
               "if it requires the certificates to complete the handshake."sv;
946
0
947
0
    case AlertDescription::TOO_MANY_CIDS_REQUESTED:
948
0
        return "Endpoints MAY handle an excessive number of RequestConnectionId messages by terminating the connection."sv;
949
0
950
0
    case AlertDescription::UNRECOGNIZED_NAME:
951
0
        return "The ServerNameList MUST NOT contain more than one name of the same name_type. "
952
0
               "If the server understood the ClientHello extension but does not recognize the server name, "
953
0
               "the server SHOULD take one of two actions: "
954
0
               "either abort the handshake by sending a fatal-level unrecognized_name(112) alert or continue the handshake. "
955
0
               "It is NOT RECOMMENDED to send a warning-level unrecognized_name(112) alert, "
956
0
               "because the client's behavior in response to warning-level alerts is unpredictable."sv;
957
0
958
0
    case AlertDescription::BAD_CERTIFICATE_STATUS_RESPONSE:
959
0
        return "Clients requesting an OCSP response and receiving an OCSP response "
960
0
               "in a \"CertificateStatus\" message MUST check the OCSP response "
961
0
               "and abort the handshake if the response is not satisfactory. "
962
0
               "This alert is always fatal."sv;
963
0
964
0
    case AlertDescription::BAD_CERTIFICATE_HASH_VALUE_RESERVED:
965
0
        return "The server MUST check that the SHA-1 hash of the contents of the object retrieved from that URL "
966
0
               "(after decoding any MIME Content-Transfer-Encoding) matches the given hash. "
967
0
               "If any retrieved object does not have the correct SHA-1 hash, "
968
0
               "the server MUST abort the handshake. "
969
0
               "This alert is always fatal."sv;
970
0
971
0
    case AlertDescription::UNKNOWN_PSK_IDENTITY:
972
0
        return "If the server does not recognize the PSK identity, it MAY respond with this message."
973
0
               "Alternatively, if the server wishes to hide the fact that the PSK identity was not known, "
974
0
               "it MAY continue the protocol as if the PSK identity existed but the key was incorrect: "
975
0
               "that is, respond with a \"DECRYPT_ERROR\" alert."sv;
976
0
    }
977
0
978
0
    return "Unknown alert"sv;
979
0
}
Unexecuted instantiation: FuzzASN1.cpp:TLS::enum_to_value(TLS::AlertDescription)
Unexecuted instantiation: Certificate.cpp:TLS::enum_to_value(TLS::AlertDescription)
Unexecuted instantiation: CryptoAlgorithms.cpp:TLS::enum_to_value(TLS::AlertDescription)
980
981
}