s2n_tls_parameters.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. /*
  2. * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License").
  5. * You may not use this file except in compliance with the License.
  6. * A copy of the License is located at
  7. *
  8. * http://aws.amazon.com/apache2.0
  9. *
  10. * or in the "license" file accompanying this file. This file is distributed
  11. * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  12. * express or implied. See the License for the specific language governing
  13. * permissions and limitations under the License.
  14. */
  15. #pragma once
  16. #include "crypto/s2n_hash.h"
  17. /* Codes from http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-5 */
  18. #define TLS_NULL_WITH_NULL_NULL 0x00, 0x00
  19. #define TLS_RSA_WITH_AES_256_CBC_SHA256 0x00, 0x3D
  20. #define TLS_RSA_WITH_AES_256_CBC_SHA 0x00, 0x35
  21. #define TLS_RSA_WITH_AES_128_CBC_SHA256 0x00, 0x3C
  22. #define TLS_RSA_WITH_AES_128_CBC_SHA 0x00, 0x2F
  23. #define TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x00, 0x0A
  24. #define TLS_RSA_WITH_RC4_128_MD5 0x00, 0x04
  25. #define TLS_RSA_WITH_RC4_128_SHA 0x00, 0x05
  26. #define TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x00, 0x33
  27. #define TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x00, 0x67
  28. #define TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x00, 0x39
  29. #define TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x00, 0x6B
  30. #define TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x00, 0x16
  31. #define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC0, 0x09
  32. #define TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC0, 0x23
  33. #define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC0, 0x0A
  34. #define TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC0, 0x24
  35. #define TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC0, 0x11
  36. #define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC0, 0x13
  37. #define TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC0, 0x27
  38. #define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC0, 0x14
  39. #define TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC0, 0x28
  40. #define TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC0, 0x12
  41. #define TLS_RSA_WITH_AES_128_GCM_SHA256 0x00, 0x9C
  42. #define TLS_RSA_WITH_AES_256_GCM_SHA384 0x00, 0x9D
  43. #define TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x00, 0x9E
  44. #define TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x00, 0x9F
  45. #define TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC0, 0x2B
  46. #define TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC0, 0x2C
  47. #define TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC0, 0x2F
  48. #define TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC0, 0x30
  49. #define TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCC, 0xA8
  50. #define TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCC, 0xA9
  51. #define TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCC, 0xAA
  52. /* TLS 1.2 hybrid post-quantum definitions from https://tools.ietf.org/html/draft-campagna-tls-bike-sike-hybrid */
  53. #define TLS_ECDHE_KYBER_RSA_WITH_AES_256_GCM_SHA384 0xFF, 0x0C
  54. #define TLS_EXTENSION_PQ_KEM_PARAMETERS 0xFE01
  55. #define TLS_PQ_KEM_EXTENSION_ID_KYBER_512_R3 28
  56. /* TLS 1.3 hybrid post-quantum definitions are from the proposed reserved range defined
  57. * in https://tools.ietf.org/html/draft-stebila-tls-hybrid-design. Values for interoperability are defined in
  58. * https://github.com/open-quantum-safe/oqs-provider/blob/main/oqs-template/oqs-kem-info.md and
  59. * https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
  60. */
  61. #define TLS_PQ_KEM_GROUP_ID_X25519_KYBER_512_R3 0x2F39
  62. #define TLS_PQ_KEM_GROUP_ID_SECP256R1_KYBER_512_R3 0x2F3A
  63. #define TLS_PQ_KEM_GROUP_ID_SECP384R1_KYBER_768_R3 0x2F3C
  64. #define TLS_PQ_KEM_GROUP_ID_SECP521R1_KYBER_1024_R3 0x2F3D
  65. #define TLS_PQ_KEM_GROUP_ID_X25519_KYBER_768_R3 0x6399
  66. #define TLS_PQ_KEM_GROUP_ID_SECP256R1_KYBER_768_R3 0x639A
  67. /* From https://tools.ietf.org/html/rfc7507 */
  68. #define TLS_FALLBACK_SCSV 0x56, 0x00
  69. #define TLS_EMPTY_RENEGOTIATION_INFO_SCSV 0x00, 0xff
  70. /* TLS 1.3 cipher suites from https://tools.ietf.org/html/rfc8446#appendix-B.4 */
  71. #define TLS_AES_128_GCM_SHA256 0x13, 0x01
  72. #define TLS_AES_256_GCM_SHA384 0x13, 0x02
  73. #define TLS_CHACHA20_POLY1305_SHA256 0x13, 0x03
  74. #define TLS_AES_128_CCM_SHA256 0x13, 0x04
  75. #define TLS_AES_128_CCM_8_SHA256 0x13, 0x05
  76. /* TLS extensions from https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml */
  77. #define TLS_EXTENSION_SERVER_NAME 0
  78. #define TLS_EXTENSION_MAX_FRAG_LEN 1
  79. #define TLS_EXTENSION_STATUS_REQUEST 5
  80. #define TLS_EXTENSION_SUPPORTED_GROUPS 10
  81. #define TLS_EXTENSION_EC_POINT_FORMATS 11
  82. #define TLS_EXTENSION_SIGNATURE_ALGORITHMS 13
  83. #define TLS_EXTENSION_ALPN 16
  84. #define TLS_EXTENSION_SCT_LIST 18
  85. #define TLS_EXTENSION_EMS 23
  86. #define TLS_EXTENSION_SESSION_TICKET 35
  87. #define TLS_EXTENSION_PRE_SHARED_KEY 41
  88. #define TLS_EXTENSION_CERT_AUTHORITIES 47
  89. #define TLS_EXTENSION_RENEGOTIATION_INFO 65281
  90. /* The NPN extension was never standardized, therefore there is no official
  91. * iana value. However, Openssl does have a chosen value for this extension
  92. * and that is what is used here.
  93. */
  94. #define TLS_EXTENSION_NPN 13172
  95. /* TLS 1.3 extensions from https://tools.ietf.org/html/rfc8446#section-4.2 */
  96. #define TLS_EXTENSION_EARLY_DATA 42
  97. #define TLS_EXTENSION_SUPPORTED_VERSIONS 43
  98. #define TLS_EXTENSION_COOKIE 44
  99. #define TLS_EXTENSION_PSK_KEY_EXCHANGE_MODES 45
  100. #define TLS_EXTENSION_KEY_SHARE 51
  101. /* TLS 1.3 pre-shared key exchange modes from https://tools.ietf.org/html/rfc8446#section-4.2.9 */
  102. #define TLS_PSK_KE_MODE 0
  103. #define TLS_PSK_DHE_KE_MODE 1
  104. /**
  105. *= https://tools.ietf.org/rfc/rfc9001.txt#8.2
  106. *# enum {
  107. *# quic_transport_parameters(0x39), (65535)
  108. *# } ExtensionType;
  109. */
  110. #define TLS_QUIC_TRANSPORT_PARAMETERS 0x39
  111. /* TLS SignatureScheme (Backwards compatible with SigHash and SigAlg values above) */
  112. /* Defined here: https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-signaturescheme */
  113. #define TLS_SIGNATURE_SCHEME_RSA_PKCS1_SHA1 0x0201
  114. #define TLS_SIGNATURE_SCHEME_RSA_PKCS1_SHA224 0x0301
  115. #define TLS_SIGNATURE_SCHEME_RSA_PKCS1_SHA256 0x0401
  116. #define TLS_SIGNATURE_SCHEME_RSA_PKCS1_SHA384 0x0501
  117. #define TLS_SIGNATURE_SCHEME_RSA_PKCS1_SHA512 0x0601
  118. /* In TLS 1.0 and 1.1 the hard-coded default scheme was RSA_PKCS1_MD5_SHA1, but there's no IANA defined backwards
  119. * compatible value for that Scheme for TLS 1.2 and 1.3. So we define an internal value in the private range that won't
  120. * match anything in the valid range so that all TLS Versions can use the same SignatureScheme negotiation abstraction
  121. * layer. This scheme isn't in any preference list, so it can't be negotiated even if a client sent it in its pref list. */
  122. #define TLS_SIGNATURE_SCHEME_PRIVATE_INTERNAL_RSA_PKCS1_MD5_SHA1 0xFFFF
  123. /* TLS 1.2 Backwards Compatible ECDSA Schemes */
  124. #define TLS_SIGNATURE_SCHEME_ECDSA_SHA1 0x0203
  125. #define TLS_SIGNATURE_SCHEME_ECDSA_SHA224 0x0303
  126. #define TLS_SIGNATURE_SCHEME_ECDSA_SHA256 0x0403
  127. #define TLS_SIGNATURE_SCHEME_ECDSA_SHA384 0x0503
  128. #define TLS_SIGNATURE_SCHEME_ECDSA_SHA512 0x0603
  129. /* TLS 1.3 ECDSA Signature Schemes */
  130. #define TLS_SIGNATURE_SCHEME_ECDSA_SECP256R1_SHA256 0x0403
  131. #define TLS_SIGNATURE_SCHEME_ECDSA_SECP384R1_SHA384 0x0503
  132. #define TLS_SIGNATURE_SCHEME_ECDSA_SECP521R1_SHA512 0x0603
  133. #define TLS_SIGNATURE_SCHEME_RSA_PSS_RSAE_SHA256 0x0804
  134. #define TLS_SIGNATURE_SCHEME_RSA_PSS_RSAE_SHA384 0x0805
  135. #define TLS_SIGNATURE_SCHEME_RSA_PSS_RSAE_SHA512 0x0806
  136. #define TLS_SIGNATURE_SCHEME_ED25519 0x0807
  137. #define TLS_SIGNATURE_SCHEME_ED448 0x0808
  138. #define TLS_SIGNATURE_SCHEME_RSA_PSS_PSS_SHA256 0x0809
  139. #define TLS_SIGNATURE_SCHEME_RSA_PSS_PSS_SHA384 0x080A
  140. #define TLS_SIGNATURE_SCHEME_RSA_PSS_PSS_SHA512 0x080B
  141. #define TLS_SIGNATURE_SCHEME_LEN 2
  142. #define TLS_SIGNATURE_SCHEME_LIST_MAX_LEN 64
  143. /* The TLS record types we support */
  144. #define SSLv2_CLIENT_HELLO 1
  145. #define TLS_CHANGE_CIPHER_SPEC 20
  146. #define TLS_ALERT 21
  147. #define TLS_HANDSHAKE 22
  148. #define TLS_APPLICATION_DATA 23
  149. /* Elliptic curve formats from http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-9
  150. * Only uncompressed is supported.
  151. */
  152. #define TLS_EC_FORMAT_UNCOMPRESSED 0
  153. #define TLS_EC_FORMAT_ANSIX962_COMPRESSED_PRIME 1
  154. #define TLS_EC_FORMAT_ANSIX962_COMPRESSED_CHAR2 2
  155. /* Elliptic curves from https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8 */
  156. #define TLS_EC_CURVE_SECP_256_R1 23
  157. #define TLS_EC_CURVE_SECP_384_R1 24
  158. #define TLS_EC_CURVE_SECP_521_R1 25
  159. #define TLS_EC_CURVE_ECDH_X25519 29
  160. #define TLS_EC_CURVE_ECDH_X448 30
  161. /* Ethernet maximum transmission unit (MTU)
  162. * MTU is usually associated with the Ethernet protocol,
  163. * where a 1500-byte packet is the largest allowed in it
  164. */
  165. #define ETH_MTU 1500
  166. #define IP_V4_HEADER_LENGTH 20
  167. #define IP_V6_HEADER_LENGTH 40
  168. #define TCP_HEADER_LENGTH 20
  169. #define TCP_OPTIONS_LENGTH 40
  170. #define S2N_TLS_MAX_FRAG_LEN_EXT_NONE 0
  171. /* The maximum size of an SSL2 message is 2^14 - 1, as neither of the first two
  172. * bits in the length field are usable. Per;
  173. * http://www-archive.mozilla.org/projects/security/pki/nss/ssl/draft02.html
  174. * section 1.1
  175. */
  176. #define S2N_SSL2_RECORD_HEADER_LENGTH 2
  177. #define S2N_SSL2_MAXIMUM_MESSAGE_LENGTH 16383
  178. #define S2N_SSL2_MAXIMUM_RECORD_LENGTH (S2N_SSL2_MAXIMUM_MESSAGE_LENGTH + S2N_SSL2_RECORD_HEADER_LENGTH)
  179. /* s2n can use a "small" record length that is aligned to the dominant internet MTU;
  180. * 1500 bytes, minus 20 bytes for an IP header, minus 20 bytes for a tcp
  181. * header and 20 bytes for tcp/ip options (timestamp, sack etc) and a "large" record
  182. * length that is designed to maximize throughput (fewer MACs per byte transferred
  183. * and better efficiency of crypto engines).
  184. */
  185. #define S2N_SMALL_RECORD_LENGTH (1500 - 20 - 20 - 20)
  186. #define S2N_SMALL_FRAGMENT_LENGTH (S2N_SMALL_RECORD_LENGTH - S2N_TLS_RECORD_HEADER_LENGTH)
  187. /* Testing in the wild has found 8k max record sizes give a good balance of low latency
  188. * and throughput.
  189. */
  190. #define S2N_DEFAULT_RECORD_LENGTH 8092
  191. #define S2N_DEFAULT_FRAGMENT_LENGTH (S2N_DEFAULT_RECORD_LENGTH - S2N_TLS_RECORD_HEADER_LENGTH)
  192. /* S2N_LARGE_RECORD_LENGTH is used for initializing output buffers, we use the largest
  193. * possible value of all supported protocols to avoid branching at runtime
  194. */
  195. #define S2N_LARGE_RECORD_LENGTH S2N_TLS_MAXIMUM_RECORD_LENGTH
  196. #define S2N_LARGE_FRAGMENT_LENGTH S2N_TLS_MAXIMUM_FRAGMENT_LENGTH
  197. /* Cap dynamic record resize threshold to 8M */
  198. #define S2N_TLS_MAX_RESIZE_THRESHOLD (1024 * 1024 * 8)
  199. /* Put a 64k cap on the size of any handshake message */
  200. #define S2N_MAXIMUM_HANDSHAKE_MESSAGE_LENGTH (64 * 1024)
  201. /* Maximum size for full encoded TLSInnerPlaintext (https://tools.ietf.org/html/rfc8446#section-5.4) */
  202. #define S2N_MAXIMUM_INNER_PLAINTEXT_LENGTH ((1 << 14) + 1)
  203. /* Alert messages are always 2 bytes long */
  204. #define S2N_ALERT_LENGTH 2
  205. /* Handshake messages have their own header too */
  206. #define TLS_HANDSHAKE_HEADER_LENGTH 4
  207. #define S2N_MAX_SERVER_NAME 255