30#ifndef PROTOCORE_DTLS_HANDSHAKE_H
31#define PROTOCORE_DTLS_HANDSHAKE_H
42#define PC_DTLS_HS_HDR_LEN 12
46#define PC_DTLS_HS_TYPE_MESSAGE_HASH 254
60 const uint8_t *fragment;
71size_t pc_dtls_hs_header_parse(
const uint8_t *p,
size_t len, DtlsHsHeader *out);
84size_t pc_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);
93#define PC_DTLS_HS_REASM_MAX_RANGES 8
111 uint32_t range_lo[PC_DTLS_HS_REASM_MAX_RANGES];
112 uint32_t range_hi[PC_DTLS_HS_REASM_MAX_RANGES];
121void pc_dtls_hs_reasm_init(DtlsHsReasm *r, uint16_t msg_seq, uint8_t *buf,
size_t buf_cap);
133int pc_dtls_hs_reasm_add(DtlsHsReasm *r,
const DtlsHsHeader *frag);
141struct DtlsRecordNumber
152size_t pc_dtls_ack_build(
const DtlsRecordNumber *nums,
size_t count, uint8_t *out,
size_t out_cap);
161bool pc_dtls_ack_parse(
const uint8_t *body,
size_t len, DtlsRecordNumber *out,
size_t out_cap,
size_t *out_count);
169#define PC_DTLS_COOKIE_MAX 128
187size_t pc_dtls_cookie_make(
const uint8_t pc_hmac_key[32], uint64_t timestamp,
const uint8_t *payload,
188 size_t payload_len,
const uint8_t *client_addr,
size_t addr_len, uint8_t *out,
205bool pc_dtls_cookie_verify(
const uint8_t pc_hmac_key[32], uint64_t now, uint64_t max_age,
const uint8_t *client_addr,
206 size_t addr_len,
const uint8_t *cookie,
size_t cookie_len, uint8_t *payload_out,
207 size_t payload_cap,
size_t *payload_len_out);
User-facing configuration for ProtoCore.