35#ifndef PROTOCORE_DTLS_CONN_H
36#define PROTOCORE_DTLS_CONN_H
50#define PC_DTLS_CONN_REASM_CAP 1024
54#define PC_DTLS_CONN_MSG_CAP 1024
57#define PC_DTLS_PEER_ADDR_MAX 18
62#define PC_DTLS_CONN_LOCAL_CID_LEN 4
65#define PC_DTLS_FLIGHT_MSGS 6
69#define PC_DTLS_FLIGHT_CAP (PC_DTLS_CONN_MSG_CAP + 512)
73#define PC_DTLS_PTO_INITIAL_MS 1000u
74#define PC_DTLS_PTO_MAX_MS 60000u
75#define PC_DTLS_MAX_RETRANSMITS 8
87enum class DtlsConnState : uint8_t
102struct DtlsServerConfig
104 const uint8_t *cert_der;
106 const uint8_t *ed25519_seed;
107 const uint8_t *ephemeral_priv;
108 const uint8_t *server_random;
109 const uint8_t *cookie_key;
115 DtlsServerConfig cfg;
121 DtlsRecordKeys ep2_srv;
122 DtlsRecordKeys ep2_cli;
123 DtlsRecordKeys ep3_srv;
124 DtlsRecordKeys ep3_cli;
134 uint16_t next_recv_msg_seq;
135 DtlsReplayWindow replay_ep2;
136 DtlsReplayWindow replay_ep3;
139 uint8_t peer_addr[PC_DTLS_PEER_ADDR_MAX];
140 uint8_t peer_addr_len;
145 peer_cid[PC_DTLS_CID_MAX];
146 uint8_t peer_cid_len;
147 uint8_t local_cid[PC_DTLS_CID_MAX];
148 uint8_t local_cid_len;
152 DtlsFlightMsg flight_msgs[PC_DTLS_FLIGHT_MSGS];
153 DtlsRecordNumber flight_rec[PC_DTLS_FLIGHT_MSGS];
154 uint8_t flight_count;
159 uint32_t flight_sent_ms;
162 uint8_t reasm_buf[4 + PC_DTLS_CONN_REASM_CAP];
163 uint8_t msgbuf[PC_DTLS_CONN_MSG_CAP];
164 uint8_t flight_buf[PC_DTLS_FLIGHT_CAP];
175void pc_dtls_conn_init(DtlsConn *c,
const DtlsServerConfig *cfg,
const uint8_t *peer_addr,
size_t peer_addr_len);
187int pc_dtls_conn_process(DtlsConn *c,
const uint8_t *dgram,
size_t len, uint8_t *out,
size_t out_cap);
196int pc_dtls_conn_timeout_ms(
const DtlsConn *c);
207int pc_dtls_conn_on_timeout(DtlsConn *c, uint8_t *out,
size_t out_cap);
210bool pc_dtls_conn_established(
const DtlsConn *c);
213uint8_t pc_dtls_conn_alert(
const DtlsConn *c);
216DtlsRecordKeys *pc_dtls_conn_app_write_keys(DtlsConn *c);
219DtlsRecordKeys *pc_dtls_conn_app_read_keys(DtlsConn *c);
230size_t pc_dtls_conn_local_cid(
const DtlsConn *c, uint8_t *out);
241bool pc_dtls_conn_open_app(DtlsConn *c,
const uint8_t *rec,
size_t rec_len, uint8_t *out,
size_t out_cap,
249size_t pc_dtls_conn_seal_app(DtlsConn *c,
const uint8_t *data,
size_t len, uint8_t *out,
size_t out_cap);
User-facing configuration for ProtoCore.
SHA-256 (FIPS 180-4) - streaming context and one-shot API.
#define PC_SHA256_DIGEST_LEN
SHA-256 digest length in bytes.
Streaming SHA-256 context.
TLS 1.3 key schedule (RFC 8446 sec 7.1) for the QUIC handshake.