29#ifndef PROTOCORE_QUIC_CRYPTO_H
30#define PROTOCORE_QUIC_CRYPTO_H
54struct QuicInitialSecrets
56 QuicPacketKeys client;
57 QuicPacketKeys server;
67void pc_quic_derive_initial_secrets(
const uint8_t *dcid,
size_t dcid_len, QuicInitialSecrets *out);
76void pc_quic_keys_from_secret(
const uint8_t secret[PC_HKDF_HASH_LEN], QuicPacketKeys *out);
97size_t pc_quic_packet_protect(uint8_t *pkt,
size_t cap,
size_t pn_offset, uint8_t pn_len, uint64_t full_pn,
98 size_t payload_len, QuicPacketKeys &keys,
bool is_long);
119size_t pc_quic_packet_unprotect(uint8_t *pkt,
size_t pn_offset,
size_t length, uint64_t largest_pn,
120 QuicPacketKeys &keys,
bool is_long, uint8_t *out, uint64_t *out_pn);
135void pc_quic_retry_integrity_tag(
const uint8_t *odcid,
size_t odcid_len,
const uint8_t *retry,
size_t retry_len,
AES-128 block cipher + AEAD_AES_128_GCM (RFC 5116 / NIST SP 800-38D).
HKDF-SHA256 (RFC 5869) and TLS 1.3 HKDF-Expand-Label (RFC 8446 sec 7.1).
User-facing configuration for ProtoCore.
#define PC_WORK_AES128GCM