27#ifndef PROTOCORE_TLS13_MSG_H
28#define PROTOCORE_TLS13_MSG_H
32#if (PROTOCORE_ENABLE_HTTP3 || PROTOCORE_ENABLE_DTLS || PROTOCORE_ENABLE_TLS)
47#define TLS_HS_CLIENT_HELLO 1
48#define TLS_HS_SERVER_HELLO 2
49#define TLS_HS_ENCRYPTED_EXTENSIONS 8
50#define TLS_HS_CERTIFICATE 11
51#define TLS_HS_CERTIFICATE_VERIFY 15
52#define TLS_HS_FINISHED 20
56#define PROTOCORE_TLS_SUITE_AES_128_GCM_SHA256 0x1301
57#define PROTOCORE_TLS_SUITE_AES_256_GCM_SHA384 0x1302
58#define TLS_GROUP_X25519 0x001d
59#define TLS_X25519_SHARE_LEN 32
60#define TLS_GROUP_X25519MLKEM768 0x11ec
61#define TLS_SIG_ED25519 0x0807
66#define TLS_SIG_ECDSA_SECP256R1_SHA256 0x0403
67#define TLS_SIG_RSA_PSS_RSAE_SHA256 0x0804
68#define TLS_CERT_TYPE_X509 0
69#define TLS_CERT_TYPE_RAW_PUBLIC_KEY \
71#define TLS_VERSION_1_3 0x0304
72#define PROTOCORE_TLS_VERSION_DTLS_1_3 0xFEFC
73#define PROTOCORE_TLS_LEGACY_VERSION_DTLS 0xFEFD
74#define TLS_EXT_QUIC_TRANSPORT_PARAMS 0x0039
79 const uint8_t *session_id;
80 uint8_t session_id_len;
81 uint8_t client_x25519[32];
83#if PROTOCORE_ENABLE_PQC_KEX
86 const uint8_t *client_mlkem_ek;
95#if PROTOCORE_ENABLE_TLS_RPK
99 const uint8_t *alpn_list;
100 size_t alpn_list_len;
101 const uint8_t *quic_tp;
105 const uint8_t *cookie;
108 const uint8_t *conn_id;
115 const uint8_t *random;
116 const uint8_t *session_id;
117 uint8_t session_id_len;
118 uint16_t cipher_suite;
123 const uint8_t *share;
125 const uint8_t *cookie;
128 const uint8_t *conn_id;
134extern const uint8_t protocore_tls13_hrr_random[32];
141 Tls13ClientHello *out;
143} Tls13MsgParseClientHelloArgs;
150 Tls13ServerHello *out;
152} Tls13MsgParseServerHelloArgs;
159 const uint8_t *random;
160 const uint8_t *session_id;
161 uint8_t session_id_len;
162 const uint8_t *share;
168 const uint8_t *cookie;
172} Tls13MsgBuildClientHelloArgs;
179 const uint8_t **cert;
181} Tls13MsgParseCertificateArgs;
191} Tls13MsgParseCertVerifyArgs;
200} Tls13MsgParseFinishedArgs;
207 const uint8_t *random;
208 const uint8_t *session_id;
209 uint8_t session_id_len;
216 const uint8_t *conn_id;
218} Tls13MsgBuildServerHelloArgs;
225 const uint8_t *quic_tp;
229} Tls13MsgBuildEncryptedExtensionsArgs;
236 const uint8_t *cert_der;
238} Tls13MsgBuildCertificateArgs;
246 const uint8_t *transcript_hash;
249} Tls13MsgBuildCertVerifyArgs;
256 const uint8_t *verify_data;
258} Tls13MsgBuildFinishedArgs;
265 const uint8_t *transcript_hash;
268} Tls13MsgCertVerifyContentArgs;
275 const uint8_t *session_id;
276 uint8_t session_id_len;
277 uint16_t selected_group;
279 const uint8_t *cookie;
282} Tls13MsgBuildHelloRetryRequestArgs;
291} Tls13MsgBuildEncryptedExtensionsEmptyArgs;
298 const uint8_t *ch1_hash;
299} Tls13MsgBuildMessageHashArgs;
353 Tls13MsgParseClientHelloArgs parse_client_hello_args;
354 Tls13MsgParseServerHelloArgs parse_server_hello_args;
355 Tls13MsgBuildClientHelloArgs build_client_hello_args;
356 Tls13MsgParseCertificateArgs parse_certificate_args;
357 Tls13MsgParseCertVerifyArgs parse_cert_verify_args;
358 Tls13MsgParseFinishedArgs parse_finished_args;
359 Tls13MsgBuildServerHelloArgs build_server_hello_args;
360 Tls13MsgBuildEncryptedExtensionsArgs build_encrypted_extensions_args;
361 Tls13MsgBuildCertificateArgs build_certificate_args;
362 Tls13MsgBuildCertVerifyArgs build_cert_verify_args;
363 Tls13MsgBuildFinishedArgs build_finished_args;
364 Tls13MsgCertVerifyContentArgs cert_verify_content_args;
365 Tls13MsgBuildHelloRetryRequestArgs build_hello_retry_request_args;
366 Tls13MsgBuildEncryptedExtensionsEmptyArgs build_encrypted_extensions_empty_args;
367 Tls13MsgBuildMessageHashArgs build_message_hash_args;
373extern Tls13MsgVars Tls13MsgV;
378 void (*
const parse_client_hello)(uint8_t *work);
379 void (*
const parse_server_hello)(uint8_t *work);
380 void (*
const build_client_hello)(uint8_t *work);
381 void (*
const parse_certificate)(uint8_t *work);
382 void (*
const parse_cert_verify)(uint8_t *work);
383 void (*
const parse_finished)(uint8_t *work);
384 void (*
const build_server_hello)(uint8_t *work);
385 void (*
const build_encrypted_extensions)(uint8_t *work);
386 void (*
const build_certificate)(uint8_t *work);
387 void (*
const build_cert_verify)(uint8_t *work);
388 void (*
const build_finished)(uint8_t *work);
389 void (*
const cert_verify_content)(uint8_t *work);
390 void (*
const build_hello_retry_request)(uint8_t *work);
391 void (*
const build_encrypted_extensions_empty)(uint8_t *work);
392 void (*
const build_message_hash)(uint8_t *work);
397void protocore_tls13_msg_parse_client_hello(uint8_t *work);
398void protocore_tls13_msg_parse_server_hello(uint8_t *work);
399void protocore_tls13_msg_build_client_hello(uint8_t *work);
400void protocore_tls13_msg_parse_certificate(uint8_t *work);
401void protocore_tls13_msg_parse_cert_verify(uint8_t *work);
402void protocore_tls13_msg_parse_finished(uint8_t *work);
403void protocore_tls13_msg_build_server_hello(uint8_t *work);
404void protocore_tls13_msg_build_encrypted_extensions(uint8_t *work);
405void protocore_tls13_msg_build_certificate(uint8_t *work);
406void protocore_tls13_msg_build_cert_verify(uint8_t *work);
407void protocore_tls13_msg_build_finished(uint8_t *work);
408void protocore_tls13_msg_cert_verify_content(uint8_t *work);
409void protocore_tls13_msg_build_hello_retry_request(uint8_t *work);
410void protocore_tls13_msg_build_encrypted_extensions_empty(uint8_t *work);
411void protocore_tls13_msg_build_message_hash(uint8_t *work);
417static const Tls13MsgNs Tls13Msg __attribute__((unused)) = {
418 .parse_client_hello = protocore_tls13_msg_parse_client_hello,
419 .parse_server_hello = protocore_tls13_msg_parse_server_hello,
420 .build_client_hello = protocore_tls13_msg_build_client_hello,
421 .parse_certificate = protocore_tls13_msg_parse_certificate,
422 .parse_cert_verify = protocore_tls13_msg_parse_cert_verify,
423 .parse_finished = protocore_tls13_msg_parse_finished,
424 .build_server_hello = protocore_tls13_msg_build_server_hello,
425 .build_encrypted_extensions = protocore_tls13_msg_build_encrypted_extensions,
426 .build_certificate = protocore_tls13_msg_build_certificate,
427 .build_cert_verify = protocore_tls13_msg_build_cert_verify,
428 .build_finished = protocore_tls13_msg_build_finished,
429 .cert_verify_content = protocore_tls13_msg_cert_verify_content,
430 .build_hello_retry_request = protocore_tls13_msg_build_hello_retry_request,
431 .build_encrypted_extensions_empty = protocore_tls13_msg_build_encrypted_extensions_empty,
432 .build_message_hash = protocore_tls13_msg_build_message_hash,
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS