35#ifndef DETERMINISTICESPASYNCWEBSERVER_DTLS_CONN_H
36#define DETERMINISTICESPASYNCWEBSERVER_DTLS_CONN_H
50static constexpr size_t DTLS_CONN_REASM_CAP = 1024;
54static constexpr size_t DTLS_CONN_MSG_CAP = 1024;
57static constexpr size_t DTLS_PEER_ADDR_MAX = 18;
62static constexpr size_t DTLS_CONN_LOCAL_CID_LEN = 4;
65static constexpr size_t DTLS_FLIGHT_MSGS = 6;
69static constexpr size_t DTLS_FLIGHT_CAP = DTLS_CONN_MSG_CAP + 512;
73static constexpr uint32_t DTLS_PTO_INITIAL_MS = 1000u;
74static constexpr uint32_t DTLS_PTO_MAX_MS = 60000u;
75static constexpr uint8_t 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[DTLS_PEER_ADDR_MAX];
140 uint8_t peer_addr_len;
144 uint8_t peer_cid[DTLS_CID_MAX];
145 uint8_t peer_cid_len;
146 uint8_t local_cid[DTLS_CID_MAX];
147 uint8_t local_cid_len;
151 DtlsFlightMsg flight_msgs[DTLS_FLIGHT_MSGS];
152 DtlsRecordNumber flight_rec[DTLS_FLIGHT_MSGS];
153 uint8_t flight_count;
158 uint32_t flight_sent_ms;
161 uint8_t reasm_buf[4 + DTLS_CONN_REASM_CAP];
162 uint8_t msgbuf[DTLS_CONN_MSG_CAP];
163 uint8_t flight_buf[DTLS_FLIGHT_CAP];
174void dtls_conn_init(DtlsConn *c,
const DtlsServerConfig *cfg,
const uint8_t *peer_addr,
size_t peer_addr_len);
186int dtls_conn_process(DtlsConn *c,
const uint8_t *dgram,
size_t len, uint8_t *out,
size_t out_cap);
195int dtls_conn_timeout_ms(
const DtlsConn *c);
206int dtls_conn_on_timeout(DtlsConn *c, uint8_t *out,
size_t out_cap);
209bool dtls_conn_established(
const DtlsConn *c);
212uint8_t dtls_conn_alert(
const DtlsConn *c);
215const DtlsRecordKeys *dtls_conn_app_write_keys(
const DtlsConn *c);
218const DtlsRecordKeys *dtls_conn_app_read_keys(
const DtlsConn *c);
229size_t dtls_conn_local_cid(
const DtlsConn *c, uint8_t *out);
240bool dtls_conn_open_app(DtlsConn *c,
const uint8_t *rec,
size_t rec_len, uint8_t *out,
size_t out_cap,
size_t *out_len);
247size_t dtls_conn_seal_app(DtlsConn *c,
const uint8_t *data,
size_t len, uint8_t *out,
size_t out_cap);
User-facing configuration for DeterministicESPAsyncWebServer.
DTLS 1.3 handshake framing and reliability (RFC 9147 §5, §7).
DTLS 1.3 record layer (RFC 9147 §4).
SHA-256 (FIPS 180-4) - streaming context and one-shot API.
#define SSH_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.