4#ifndef PROTOCORE_QUIC_CRYPTO_H
5#define PROTOCORE_QUIC_CRYPTO_H
65 void (*derive_initial_secrets)(uint8_t *, uint8_t *,
const uint8_t *, size_t,
QuicInitialSecrets *);
66 void (*keys_from_secret)(uint8_t *, uint8_t *,
const uint8_t *,
QuicPacketKeys *);
67 size_t (*packet_protect)(uint8_t *, uint8_t *, size_t, size_t, uint8_t, uint64_t, size_t,
QuicPacketKeys *,
71 void (*retry_integrity_tag)(uint8_t *,
const uint8_t *, size_t,
const uint8_t *, size_t, uint8_t *);
126 uint8_t *out, uint64_t *out_pn);
137 const uint8_t *retry,
size_t retry_len, uint8_t *tag);
#define PROTOCORE_AES128GCM_BORROW
HKDF-SHA256 (RFC 5869) and TLS 1.3 HKDF-Expand-Label (RFC 8446 sec 7.1).
#define PROTOCORE_NS_LAYOUT(T,...)
Pin every dispatch slot of a table that is nothing but function pointers.
#define PROTOCORE_NS
Storage for a dispatch table. The const is load bearing.
void protocore_quic_crypto_keys_from_secret(uint8_t *work, uint8_t *keys_work, const uint8_t *secret, QuicPacketKeys *out)
Expand one traffic secret into a {key, iv, hp} triple (RFC 9001 sec .
size_t protocore_quic_crypto_packet_unprotect(uint8_t *work, uint8_t *pkt, size_t pn_offset, size_t length, uint64_t largest_pn, QuicPacketKeys *keys, proto_bool is_long, uint8_t *out, uint64_t *out_pn)
Remove header protection and AEAD-open one QUIC packet in place .
size_t protocore_quic_crypto_packet_protect(uint8_t *work, uint8_t *pkt, size_t cap, size_t pn_offset, uint8_t pn_len, uint64_t full_pn, size_t payload_len, QuicPacketKeys *keys, proto_bool is_long)
Protect one QUIC packet in place: AEAD-seal the payload, then apply .
void protocore_quic_crypto_retry_integrity_tag(uint8_t *work, const uint8_t *odcid, size_t odcid_len, const uint8_t *retry, size_t retry_len, uint8_t *tag)
Compute the Retry Integrity Tag (RFC 9001 sec 5.8). .
void protocore_quic_crypto_derive_initial_secrets(uint8_t *work, uint8_t *keys_work, const uint8_t *dcid, size_t dcid_len, QuicInitialSecrets *out)
Derive the Initial packet-protection secrets (RFC 9001 sec 5.2). .
PROTOCORE_NS QuicCryptoNs QuicCrypto PROTOCORE_UNUSED
Module namespace.
Dispatch table. Addressed by offset, so the layout is asserted below.
void(* derive_initial_secrets)(uint8_t *, uint8_t *, const uint8_t *, size_t, QuicInitialSecrets *)
Both directions' Initial secrets derived from the client's Destination Connection ID.
QuicPacketKeys server
Protects server-sent Initial packets (server seals with this).
QuicPacketKeys client
Protects client-sent Initial packets (server opens with this).
The client/server packet-protection secrets for one QUIC encryption level.
#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