1#ifndef SCHEDULE_DRIVE_KEYSCHEDULE_H
2#define SCHEDULE_DRIVE_KEYSCHEDULE_H
RFC 9001 5.2: Initial packet protection keys derived from the client's Destination Connection ID.
void keysched_wipe(keysched *st)
RFC 8446 E.1.4 / 7.5: erase every retained secret (Master Secret, the traffic secrets and keys,...
void keysched_set_suite(keysched *st, u16 suite)
Override the cipher suite advance_handshake/advance_master derive Handshake/1-RTT keys for (RFC 8446 ...
int keysched_client_ap_secret(const keysched *st, const u8 **out)
The retained client_application_traffic_secret_0, valid once stage 2 is reached (same guard as keysch...
int keysched_advance_handshake(keysched *st, wired_span ecdhe, wired_span transcript)
ServerHello received: derive Handshake Secret from the ECDHE shared secret and the client/server hand...
@ KS_CLIENT_AP
client application (1-RTT) traffic keys
Definition keyschedule.h:22
@ KS_SERVER_AP
server application (1-RTT) traffic keys
Definition keyschedule.h:23
@ KS_SERVER_HS
server handshake traffic keys
Definition keyschedule.h:21
@ KS_CLIENT_HS
client handshake traffic keys
Definition keyschedule.h:20
int keysched_server_ap_secret(const keysched *st, const u8 **out)
The retained server_application_traffic_secret_0, valid once stage 2 is reached.
void keysched_init(keysched *st)
Enter the Early Secret stage.
int keysched_advance_master(keysched *st, const u8 *transcript, usz transcript_len)
Finished processed: derive Master Secret and the application traffic keys.
int keysched_get(const keysched *st, int which, const initial_keys **out)
If the keys for which have been derived, point *out at them and return 1; otherwise return 0.
void keysched_set_version(keysched *st, u32 version)
Override the QUIC version whose label prefix advance_handshake/ advance_master derive Handshake/1-RTT...
int keysched_exporter_secret(const keysched *st, const u8 **out)
The retained exporter_master_secret (RFC 8446 7.1/7.5), valid once stage 2 is reached (same guard as ...
int keysched_advance_handshake_psk(keysched *st, wired_span psk, wired_span ecdhe, wired_span transcript)
Same as keysched_advance_handshake, but for a PSK-resumption handshake (RFC 8446 7....
Value-type views that fold the SDK's recurring argument shapes into single parameters,...
One direction's packet protection keys (RFC 9001 5.1/5.2).
Definition initial.h:28
Key schedule state: the current stage, the Master Secret once reached, and the four traffic key sets ...
Definition keyschedule.h:30
u8 exporter_secret[TLS_HASH_MAX]
exporter_master_secret (RFC 8446 7.1/7.5), derived alongside the application traffic secrets on reach...
Definition keyschedule.h:42
int stage
0=init/early, 1=handshake, 2=master
Definition keyschedule.h:31
u8 master[TLS_HASH_MAX]
Master Secret (derived on reaching stage 1).
Definition keyschedule.h:32
u8 server_ap_secret[TLS_HASH_MAX]
server_application_traffic_secret_0, retained for the same reason on the send side (RFC 9001 6....
Definition keyschedule.h:39
initial_keys keys[4]
traffic keys indexed by KS_*
Definition keyschedule.h:34
u32 version
QUIC version whose label prefix the Handshake/1-RTT packet-protection expands use ("quic " for v1,...
Definition keyschedule.h:56
u16 suite
negotiated TLS 1.3 cipher suite (RFC 8446 B.4) for the Handshake/1-RTT levels this schedule derives; ...
Definition keyschedule.h:50
u8 client_ap_secret[TLS_HASH_MAX]
client_application_traffic_secret_0 (RFC 8446 7.1), retained past stage 2 so RFC 9001 6 key updates c...
Definition keyschedule.h:35
Cumulative Transcript-Hash state.
Definition transcript.h:11
Read-only view of a byte range.
Definition span.h:30
RFC 8446 B.4 / 7.1: the hash a TLS 1.3 cipher suite runs its key schedule, transcript and Finished MA...
#define TLS_HASH_MAX
Largest Hash.length of any supported suite (SHA-384).
Definition suitehash.h:12
unsigned int u32
unsigned 32-bit integer
Definition types.h:15
u64 usz
unsigned size (size_t equivalent)
Definition types.h:20
unsigned short u16
unsigned 16-bit integer
Definition types.h:17
unsigned char u8
unsigned 8-bit integer / byte
Definition types.h:18