30#ifndef DETERMINISTICESPASYNCWEBSERVER_DTLS_HANDSHAKE_H
31#define DETERMINISTICESPASYNCWEBSERVER_DTLS_HANDSHAKE_H
42static constexpr size_t DTLS_HS_HDR_LEN = 12;
46static constexpr uint8_t DTLS_HS_TYPE_MESSAGE_HASH = 254;
60 const uint8_t *fragment;
71size_t dtls_hs_header_parse(
const uint8_t *p,
size_t len, DtlsHsHeader *out);
84size_t dtls_hs_frag_build(uint8_t msg_type, uint16_t msg_seq, uint32_t full_len, uint32_t frag_offset,
85 const uint8_t *frag, uint32_t frag_len, uint8_t *out,
size_t out_cap);
93static constexpr size_t DTLS_HS_REASM_MAX_RANGES = 8;
111 uint32_t range_lo[DTLS_HS_REASM_MAX_RANGES];
112 uint32_t range_hi[DTLS_HS_REASM_MAX_RANGES];
121void dtls_hs_reasm_init(DtlsHsReasm *r, uint16_t msg_seq, uint8_t *buf,
size_t buf_cap);
133int dtls_hs_reasm_add(DtlsHsReasm *r,
const DtlsHsHeader *frag);
141struct DtlsRecordNumber
152size_t dtls_ack_build(
const DtlsRecordNumber *nums,
size_t count, uint8_t *out,
size_t out_cap);
161bool dtls_ack_parse(
const uint8_t *body,
size_t len, DtlsRecordNumber *out,
size_t out_cap,
size_t *out_count);
169static constexpr size_t DTLS_COOKIE_MAX = 128;
187size_t dtls_cookie_make(
const uint8_t hmac_key[32], uint64_t timestamp,
const uint8_t *payload,
size_t payload_len,
188 const uint8_t *client_addr,
size_t addr_len, uint8_t *out,
size_t out_cap);
204bool dtls_cookie_verify(
const uint8_t hmac_key[32], uint64_t now, uint64_t max_age,
const uint8_t *client_addr,
205 size_t addr_len,
const uint8_t *cookie,
size_t cookie_len, uint8_t *payload_out,
206 size_t payload_cap,
size_t *payload_len_out);
User-facing configuration for DeterministicESPAsyncWebServer.