Extensions.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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. #pragma once
  8. #include <AK/Types.h>
  9. namespace TLS {
  10. #define _ENUM_KEY(name) name,
  11. #define _ENUM_KEY_VALUE(name, value) name = value,
  12. // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5
  13. #define __ENUM_CONTENT_TYPES \
  14. _ENUM_KEY_VALUE(CHANGE_CIPHER_SPEC, 20) \
  15. _ENUM_KEY_VALUE(ALERT, 21) \
  16. _ENUM_KEY_VALUE(HANDSHAKE, 22) \
  17. _ENUM_KEY_VALUE(APPLICATION_DATA, 23) \
  18. _ENUM_KEY_VALUE(HEARTBEAT, 24) \
  19. _ENUM_KEY_VALUE(TLS12_CID, 25) \
  20. _ENUM_KEY_VALUE(ACK, 26)
  21. enum class ContentType : u8 {
  22. __ENUM_CONTENT_TYPES
  23. };
  24. #define __ENUM_PROTOCOL_VERSIONS \
  25. _ENUM_KEY_VALUE(VERSION_1_3, 0x0304) \
  26. _ENUM_KEY_VALUE(VERSION_1_2, 0x0303) \
  27. _ENUM_KEY_VALUE(VERSION_1_1, 0x0302) \
  28. _ENUM_KEY_VALUE(VERSION_1_0, 0x0301) \
  29. _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \
  30. _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \
  31. _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \
  32. _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \
  33. _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \
  34. _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \
  35. _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \
  36. _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \
  37. _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \
  38. _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \
  39. _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \
  40. _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \
  41. _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \
  42. _ENUM_KEY_VALUE(GREASE_D, 0xDADA) \
  43. _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \
  44. _ENUM_KEY_VALUE(GREASE_F, 0xFAFA)
  45. enum class ProtocolVersion : u16 {
  46. __ENUM_PROTOCOL_VERSIONS
  47. };
  48. #define __ENUM_ALERT_LEVELS \
  49. _ENUM_KEY_VALUE(WARNING, 1) \
  50. _ENUM_KEY_VALUE(FATAL, 2)
  51. enum class AlertLevel : u8 {
  52. __ENUM_ALERT_LEVELS
  53. };
  54. // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-7
  55. #define __ENUM_HANDSHAKE_TYPES \
  56. _ENUM_KEY_VALUE(HELLO_REQUEST_RESERVED, 0) \
  57. _ENUM_KEY_VALUE(CLIENT_HELLO, 1) \
  58. _ENUM_KEY_VALUE(SERVER_HELLO, 2) \
  59. _ENUM_KEY_VALUE(HELLO_VERIFY_REQUEST_RESERVED, 3) \
  60. _ENUM_KEY_VALUE(NEW_SESSION_TICKET, 4) \
  61. _ENUM_KEY_VALUE(END_OF_EARLY_DATA, 5) \
  62. _ENUM_KEY_VALUE(HELLO_RETRY_REQUEST_RESERVED, 6) \
  63. _ENUM_KEY_VALUE(ENCRYPTED_EXTENSIONS, 8) \
  64. _ENUM_KEY_VALUE(REQUEST_CONNECTION_ID, 9) \
  65. _ENUM_KEY_VALUE(NEW_CONNECTION_ID, 10) \
  66. _ENUM_KEY_VALUE(CERTIFICATE, 11) \
  67. _ENUM_KEY_VALUE(SERVER_KEY_EXCHANGE_RESERVED, 12) \
  68. _ENUM_KEY_VALUE(CERTIFICATE_REQUEST, 13) \
  69. _ENUM_KEY_VALUE(SERVER_HELLO_DONE_RESERVED, 14) \
  70. _ENUM_KEY_VALUE(CERTIFICATE_VERIFY, 15) \
  71. _ENUM_KEY_VALUE(CLIENT_KEY_EXCHANGE_RESERVED, 16) \
  72. _ENUM_KEY_VALUE(FINISHED, 20) \
  73. _ENUM_KEY_VALUE(CERTIFICATE_URL_RESERVED, 21) \
  74. _ENUM_KEY_VALUE(CERTIFICATE_STATUS_RESERVED, 22) \
  75. _ENUM_KEY_VALUE(SUPPLEMENTAL_DATA_RESERVED, 23) \
  76. _ENUM_KEY_VALUE(KEY_UPDATE, 24) \
  77. _ENUM_KEY_VALUE(COMPRESSED_CERTIFICATE, 25) \
  78. _ENUM_KEY_VALUE(EKT_KEY, 26) \
  79. _ENUM_KEY_VALUE(MESSAGE_HASH, 254)
  80. enum class HandshakeType : u8 {
  81. __ENUM_HANDSHAKE_TYPES
  82. };
  83. // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-1
  84. #define __ENUM_EXTENSION_TYPES \
  85. _ENUM_KEY_VALUE(SERVER_NAME, 0) \
  86. _ENUM_KEY_VALUE(MAX_FRAGMENT_LENGTH, 1) \
  87. _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_URL, 2) \
  88. _ENUM_KEY_VALUE(TRUSTED_CA_KEYS, 3) \
  89. _ENUM_KEY_VALUE(TRUNCATED_HMAC, 4) \
  90. _ENUM_KEY_VALUE(STATUS_REQUEST, 5) \
  91. _ENUM_KEY_VALUE(USER_MAPPING, 6) \
  92. _ENUM_KEY_VALUE(CLIENT_AUTHZ, 7) \
  93. _ENUM_KEY_VALUE(SERVER_AUTHZ, 8) \
  94. _ENUM_KEY_VALUE(CERT_TYPE, 9) \
  95. _ENUM_KEY_VALUE(SUPPORTED_GROUPS, 10) \
  96. _ENUM_KEY_VALUE(EC_POINT_FORMATS, 11) \
  97. _ENUM_KEY_VALUE(SRP, 12) \
  98. _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS, 13) \
  99. _ENUM_KEY_VALUE(USE_SRTP, 14) \
  100. _ENUM_KEY_VALUE(HEARTBEAT, 15) \
  101. _ENUM_KEY_VALUE(APPLICATION_LAYER_PROTOCOL_NEGOTIATION, 16) \
  102. _ENUM_KEY_VALUE(STATUS_REQUEST_V2, 17) \
  103. _ENUM_KEY_VALUE(SIGNED_CERTIFICATE_TIMESTAMP, 18) \
  104. _ENUM_KEY_VALUE(CLIENT_CERTIFICATE_TYPE, 19) \
  105. _ENUM_KEY_VALUE(SERVER_CERTIFICATE_TYPE, 20) \
  106. _ENUM_KEY_VALUE(PADDING, 21) \
  107. _ENUM_KEY_VALUE(ENCRYPT_THEN_MAC, 22) \
  108. _ENUM_KEY_VALUE(EXTENDED_MASTER_SECRET, 23) \
  109. _ENUM_KEY_VALUE(TOKEN_BINDING, 24) \
  110. _ENUM_KEY_VALUE(CACHED_INFO, 25) \
  111. _ENUM_KEY_VALUE(TLS_LTS, 26) \
  112. _ENUM_KEY_VALUE(COMPRESS_CERTIFICATE, 27) \
  113. _ENUM_KEY_VALUE(RECORD_SIZE_LIMIT, 28) \
  114. _ENUM_KEY_VALUE(PWD_PROTECT, 29) \
  115. _ENUM_KEY_VALUE(PWD_CLEAR, 30) \
  116. _ENUM_KEY_VALUE(PASSWORD_SALT, 31) \
  117. _ENUM_KEY_VALUE(TICKET_PINNING, 32) \
  118. _ENUM_KEY_VALUE(TLS_CERT_WITH_EXTERN_PSK, 33) \
  119. _ENUM_KEY_VALUE(DELEGATED_CREDENTIALS, 34) \
  120. _ENUM_KEY_VALUE(SESSION_TICKET, 35) \
  121. _ENUM_KEY_VALUE(TLMSP, 36) \
  122. _ENUM_KEY_VALUE(TLMSP_PROXYING, 37) \
  123. _ENUM_KEY_VALUE(TLMSP_DELEGATE, 38) \
  124. _ENUM_KEY_VALUE(SUPPORTED_EKT_CIPHERS, 39) \
  125. _ENUM_KEY_VALUE(PRE_SHARED_KEY, 41) \
  126. _ENUM_KEY_VALUE(EARLY_DATA, 42) \
  127. _ENUM_KEY_VALUE(SUPPORTED_VERSIONS, 43) \
  128. _ENUM_KEY_VALUE(COOKIE, 44) \
  129. _ENUM_KEY_VALUE(PSK_KEY_EXCHANGE_MODES, 45) \
  130. _ENUM_KEY_VALUE(CERTIFICATE_AUTHORITIES, 47) \
  131. _ENUM_KEY_VALUE(OID_FILTERS, 48) \
  132. _ENUM_KEY_VALUE(POST_HANDSHAKE_AUTH, 49) \
  133. _ENUM_KEY_VALUE(SIGNATURE_ALGORITHMS_CERT, 50) \
  134. _ENUM_KEY_VALUE(KEY_SHARE, 51) \
  135. _ENUM_KEY_VALUE(TRANSPARENCY_INFO, 52) \
  136. _ENUM_KEY_VALUE(CONNECTION_ID_DEPRECATED, 53) \
  137. _ENUM_KEY_VALUE(CONNECTION_ID, 54) \
  138. _ENUM_KEY_VALUE(EXTERNAL_ID_HASH, 55) \
  139. _ENUM_KEY_VALUE(EXTERNAL_SESSION_ID, 56) \
  140. _ENUM_KEY_VALUE(QUIC_TRANSPORT_PARAMETERS, 57) \
  141. _ENUM_KEY_VALUE(TICKET_REQUEST, 58) \
  142. _ENUM_KEY_VALUE(DNSSEC_CHAIN, 59) \
  143. _ENUM_KEY_VALUE(RENEGOTIATION_INFO, 65281)
  144. enum class ExtensionType : u16 {
  145. __ENUM_EXTENSION_TYPES
  146. };
  147. #define __ENUM_NAME_TYPES \
  148. _ENUM_KEY_VALUE(HOST_NAME, 0)
  149. enum class NameType : u8 {
  150. __ENUM_NAME_TYPES
  151. };
  152. // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-10
  153. #define __ENUM_EC_CURVE_TYPES \
  154. _ENUM_KEY_VALUE(EXPLICIT_PRIME, 1) \
  155. _ENUM_KEY_VALUE(EXPLICIT_CHAR2, 2) \
  156. _ENUM_KEY_VALUE(NAMED_CURVE, 3)
  157. enum class ECCurveType : u8 {
  158. __ENUM_EC_CURVE_TYPES
  159. };
  160. // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
  161. #define __ENUM_SUPPORTED_GROUPS \
  162. _ENUM_KEY_VALUE(SECT163K1, 0x0001) \
  163. _ENUM_KEY_VALUE(SECT163R1, 0x0002) \
  164. _ENUM_KEY_VALUE(SECT163R2, 0x0003) \
  165. _ENUM_KEY_VALUE(SECT193R1, 0x0004) \
  166. _ENUM_KEY_VALUE(SECT193R2, 0x0005) \
  167. _ENUM_KEY_VALUE(SECT233K1, 0x0006) \
  168. _ENUM_KEY_VALUE(SECT233R1, 0x0007) \
  169. _ENUM_KEY_VALUE(SECT239K1, 0x0008) \
  170. _ENUM_KEY_VALUE(SECT283K1, 0x0009) \
  171. _ENUM_KEY_VALUE(SECT283R1, 0x000a) \
  172. _ENUM_KEY_VALUE(SECT409K1, 0x000b) \
  173. _ENUM_KEY_VALUE(SECT409R1, 0x000c) \
  174. _ENUM_KEY_VALUE(SECT571K1, 0x000d) \
  175. _ENUM_KEY_VALUE(SECT571R1, 0x000e) \
  176. _ENUM_KEY_VALUE(SECP160K1, 0x000f) \
  177. _ENUM_KEY_VALUE(SECP160R1, 0x0010) \
  178. _ENUM_KEY_VALUE(SECP160R2, 0x0011) \
  179. _ENUM_KEY_VALUE(SECP192K1, 0x0012) \
  180. _ENUM_KEY_VALUE(SECP192R1, 0x0013) \
  181. _ENUM_KEY_VALUE(SECP224K1, 0x0014) \
  182. _ENUM_KEY_VALUE(SECP224R1, 0x0015) \
  183. _ENUM_KEY_VALUE(SECP256K1, 0x0016) \
  184. _ENUM_KEY_VALUE(SECP256R1, 0x0017) \
  185. _ENUM_KEY_VALUE(SECP384R1, 0x0018) \
  186. _ENUM_KEY_VALUE(SECP521R1, 0x0019) \
  187. _ENUM_KEY_VALUE(BRAINPOOLP256R1, 0x001a) \
  188. _ENUM_KEY_VALUE(BRAINPOOLP384R1, 0x001b) \
  189. _ENUM_KEY_VALUE(BRAINPOOLP512R1, 0x001c) \
  190. _ENUM_KEY_VALUE(X25519, 0x001d) \
  191. _ENUM_KEY_VALUE(X448, 0x001e) \
  192. _ENUM_KEY_VALUE(BRAINPOOLP256R1TLS13, 0x001f) \
  193. _ENUM_KEY_VALUE(BRAINPOOLP384R1TLS13, 0x0020) \
  194. _ENUM_KEY_VALUE(BRAINPOOLP512R1TLS13, 0x0021) \
  195. _ENUM_KEY_VALUE(GC256A, 0x0022) \
  196. _ENUM_KEY_VALUE(GC256B, 0x0023) \
  197. _ENUM_KEY_VALUE(GC256C, 0x0024) \
  198. _ENUM_KEY_VALUE(GC256D, 0x0025) \
  199. _ENUM_KEY_VALUE(GC512A, 0x0026) \
  200. _ENUM_KEY_VALUE(GC512B, 0x0027) \
  201. _ENUM_KEY_VALUE(GC512C, 0x0028) \
  202. _ENUM_KEY_VALUE(CURVESM2, 0x0029) \
  203. _ENUM_KEY_VALUE(FFDHE2048, 0x0100) \
  204. _ENUM_KEY_VALUE(FFDHE3072, 0x0101) \
  205. _ENUM_KEY_VALUE(FFDHE4096, 0x0102) \
  206. _ENUM_KEY_VALUE(FFDHE6144, 0x0103) \
  207. _ENUM_KEY_VALUE(FFDHE8192, 0x0104) \
  208. _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_PRIME_CURVES, 0xff01) \
  209. _ENUM_KEY_VALUE(ARBITRARY_EXPLICIT_CHAR2_CURVES, 0xff02) \
  210. _ENUM_KEY_VALUE(GREASE_0, 0x0A0A) \
  211. _ENUM_KEY_VALUE(GREASE_1, 0x1A1A) \
  212. _ENUM_KEY_VALUE(GREASE_2, 0x2A2A) \
  213. _ENUM_KEY_VALUE(GREASE_3, 0x3A3A) \
  214. _ENUM_KEY_VALUE(GREASE_4, 0x4A4A) \
  215. _ENUM_KEY_VALUE(GREASE_5, 0x5A5A) \
  216. _ENUM_KEY_VALUE(GREASE_6, 0x6A6A) \
  217. _ENUM_KEY_VALUE(GREASE_7, 0x7A7A) \
  218. _ENUM_KEY_VALUE(GREASE_8, 0x8A8A) \
  219. _ENUM_KEY_VALUE(GREASE_9, 0x9A9A) \
  220. _ENUM_KEY_VALUE(GREASE_A, 0xAAAA) \
  221. _ENUM_KEY_VALUE(GREASE_B, 0xBABA) \
  222. _ENUM_KEY_VALUE(GREASE_C, 0xCACA) \
  223. _ENUM_KEY_VALUE(GREASE_D, 0xDADA) \
  224. _ENUM_KEY_VALUE(GREASE_E, 0xEAEA) \
  225. _ENUM_KEY_VALUE(GREASE_F, 0xFAFA)
  226. enum class SupportedGroup : u16 {
  227. __ENUM_SUPPORTED_GROUPS
  228. };
  229. #undef _ENUM_KEY
  230. #undef _ENUM_KEY_VALUE
  231. }