27#ifndef DETERMINISTICESPASYNCWEBSERVER_TLS13_MSG_H
28#define DETERMINISTICESPASYNCWEBSERVER_TLS13_MSG_H
35#if (DETWS_ENABLE_HTTP3 || DETWS_ENABLE_DTLS)
43 static constexpr uint8_t TLS_HS_CLIENT_HELLO = 1;
44 static constexpr uint8_t TLS_HS_SERVER_HELLO = 2;
45 static constexpr uint8_t TLS_HS_ENCRYPTED_EXTENSIONS = 8;
46 static constexpr uint8_t TLS_HS_CERTIFICATE = 11;
47 static constexpr uint8_t TLS_HS_CERTIFICATE_VERIFY = 15;
48 static constexpr uint8_t TLS_HS_FINISHED = 20;
51#define TLS_CIPHER_AES_128_GCM_SHA256 0x1301
52#define TLS_GROUP_X25519 0x001d
53#define TLS_GROUP_X25519MLKEM768 0x11ec
54#define TLS_SIG_ED25519 0x0807
55#define TLS_VERSION_1_3 0x0304
56static constexpr uint16_t TLS_VERSION_DTLS_1_3 = 0xFEFC;
57static constexpr uint16_t TLS_LEGACY_VERSION_DTLS = 0xFEFD;
58#define TLS_EXT_QUIC_TRANSPORT_PARAMS 0x0039
61struct Tls13ClientHello
63 const uint8_t *session_id;
64 uint8_t session_id_len;
65 uint8_t client_x25519[32];
67#if DETWS_ENABLE_PQC_KEX
68 bool offers_x25519mlkem768;
69 bool has_hybrid_share;
70 const uint8_t *client_mlkem_ek;
76 const uint8_t *quic_tp;
80 const uint8_t *cookie;
83 const uint8_t *conn_id;
95bool tls13_parse_client_hello(
const uint8_t *msg,
size_t len, Tls13ClientHello *out,
bool dtls =
false);
113size_t tls13_build_server_hello(uint8_t *out,
size_t cap,
const uint8_t random[32],
const uint8_t *session_id,
114 uint8_t session_id_len,
const uint8_t *share,
size_t share_len = 32,
115 uint16_t group = TLS_GROUP_X25519,
bool dtls =
false,
const uint8_t *conn_id =
nullptr,
116 size_t conn_id_len = 0);
122size_t tls13_build_encrypted_extensions(uint8_t *out,
size_t cap,
const uint8_t *quic_tp,
size_t quic_tp_len);
128size_t tls13_build_certificate(uint8_t *out,
size_t cap,
const uint8_t *cert_der,
size_t cert_len);
141size_t tls13_build_cert_verify(uint8_t *out,
size_t cap,
const uint8_t transcript_hash[32],
const uint8_t seed[32]);
147size_t tls13_build_finished(uint8_t *out,
size_t cap,
const uint8_t verify_data[32]);
156size_t tls13_cert_verify_content(uint8_t *out,
size_t cap,
const uint8_t transcript_hash[32],
bool is_server);
164extern const uint8_t tls13_hrr_random[32];
178size_t tls13_build_hello_retry_request(uint8_t *out,
size_t cap,
const uint8_t *session_id, uint8_t session_id_len,
179 uint16_t selected_group,
const uint8_t *cookie,
size_t cookie_len,
186size_t tls13_build_encrypted_extensions_empty(uint8_t *out,
size_t cap);
193size_t tls13_build_message_hash(uint8_t *out,
size_t cap,
const uint8_t ch1_hash[32]);
User-facing configuration for DeterministicESPAsyncWebServer.