code wiki / (root) / nx_tls13_client_session_emit_finished.nx

nx_tls13_client_session_emit_finished.nx

buildroot/runtime/nx_tls13_client_session_emit_finished.nx

6236 B158 linesdepth 11pulls 42 transitivereach 494 importersview sourcekind tooltopic tls13
docsdependenciesstructsconstsfunctions

about

nx_tls13_client_session_emit_finished.nx -- step 3c.4 of the nx_https_client wiring arc. Builds the client_Finished handshake message + wraps it in an AEAD-encrypted TLS record under the client handshake traffic key. Caller writes the resulting bytes to fd. After this primitive returns OK, the session is ready for step 3c.5 (derive application traffic keys; state -> CONNECTED). Composes 2 shipped primitives: tls13_client_emit_finished -- 36-byte Finished + transcript update (CRITICAL: appends CF to transcript so app-key derivation matches server's view) nx_tls13_record_encrypt -- ChaCha20-Poly1305 record wrap Pipeline: transcript_state at WAIT_CLIENT_FIN (covers CH..server_Finished) ↓ snapshot transcript_hash_CH..SF ↓ tls13_finished_key(client_hs_traffic_secret) -> finished_key ↓ HMAC(finished_key, transcript_hash) verify_data (32 bytes) ↓ wrap in handshake message: [HT_FINISHED][3-byte len=32][verify_data] client_Finished_msg (36 bytes) ↓ append to transcript (for app-key derivation hash) ↓ AEAD encrypt under client_hs_traffic_key + client_hs_iv + client_seq encrypted_record (5-byte header + 36+1 inner + 16-byte tag = 58 bytes) Caller calls sys_write(fd, record_bytes, record_len) to send. Public API: nx_tls13_client_session_emit_finished( session, out_buf, out_cap ) -> positive bytes-written | negative -NX_TLS13_EMIT_CF_* code nx_tls13_emit_cf_verdict_is_valid(v) -> 0|1 Sealed verdict: NX_TLS13_EMIT_CF_OK positive rc = bytes written

dependencies 6 imports · 3 importers

nx_syscalls.nx nx_tls13.nx nx_tls13_record.nx nx_tls13_client.nx nx_tls13_client_session.nx nx_tls13_transcript.nx nx_tls13_client_session_emit_f nx_tls13_client_h2run.nx nx_tls13_client_session_emit_finis nx_tls13_client_session_run.nx

imports: nx_syscalls.nxnx_tls13.nxnx_tls13_record.nxnx_tls13_client.nxnx_tls13_client_session.nxnx_tls13_transcript.nx

imported by: nx_tls13_client_h2run.nxnx_tls13_client_session_emit_finished_test.nxnx_tls13_client_session_run.nx

structs

none

consts

70const NX_TLS13_EMIT_CF_OK: i64 = 1
71const NX_TLS13_EMIT_CF_BAD_STATE: i64 = 2
72const NX_TLS13_EMIT_CF_BUF_OVERFLOW: i64 = 3
73const NX_TLS13_EMIT_CF_INTERNAL: i64 = 4
74const NX_TLS13_EMIT_CF_VERDICT_N: i64 = 5
78const NX_TLS13_CF_RECORD_BYTES: i64 = 58

functions

80func nx_tls13_emit_cf_verdict_is_valid(v: i64) -> i64
called by 1: main
90func nx_tls13_client_session_emit_finished(
156func main() -> i64