code wiki / (root) / nx_tls13_schedule.nx

nx_tls13_schedule.nx

buildroot/runtime/nx_tls13_schedule.nx

9908 B236 linesdepth 8pulls 10 transitivereach 520 importersview sourcekind librarytopic tls13
docsdependenciesstructsconstsfunctions

about

nx_tls13_schedule.nx -- TLS 1.3 key schedule cascade (RFC 8446 §7.1). Phase 0b §D of the Nishi TLS 1.3 stack per docs/NISHI_TLS13_GAP_AUDIT.md. Composes the just-landed nx_hkdf + nx_tls13_kdf into the named 5-stage cascade that produces every secret a TLS 1.3 session needs. The cascade (no-PSK case, which is the 99%-common one): 0 | v HKDF-Extract(salt=0^Hash, IKM=0^Hash) = early_secret | v Derive-Secret(., "derived", "") = derived_1 (salt for next HKDF-Extract) | v ECDHE shared HKDF-Extract(salt=derived_1, IKM=ECDHE) = handshake_secret | +--> Derive-Secret(., "c hs traffic", H1) = client_hs_traffic_secret +--> Derive-Secret(., "s hs traffic", H1) = server_hs_traffic_secret v Derive-Secret(., "derived", "") = derived_2 (salt for next HKDF-Extract) | v HKDF-Extract(salt=derived_2, IKM=0^Hash) = master_secret | +--> Derive-Secret(., "c ap traffic", H2) = client_app_traffic_secret_0 +--> Derive-Secret(., "s ap traffic", H2) = server_app_traffic_secret_0 +--> Derive-Secret(., "exp master", H2) = exporter_master_secret +--> Derive-Secret(., "res master", H3) = resumption_master_secret Then per-traffic-secret AEAD key + IV derivation: key = HKDF-Expand-Label(traffic_secret, "key", "", key_length) iv = HKDF-Expand-Label(traffic_secret, "iv", "", iv_length) finished_key = HKDF-Expand-Label(traffic_secret, "finished", "", Hash.length) All transcript hashes (H1, H2, H3) are caller-supplied because

dependencies 3 imports · 12 importers

nx_syscalls.nx nx_hkdf.nx nx_tls13_kdf.nx nx_tls13_schedule.nx nx_https_get_happy_test.nx nx_https_loopback_test.nx nx_tls13_client.nx nx_tls13_client_session_derive_app nx_tls13_client_session_recv_sh.nx nx_tls13_full_tcp_test.nx nx_tls13_handshake.nx nx_tls13_handshake_io.nx nx_tls13_handshake_tcp_test.nx nx_tls13_loopback_test.nx

diagram shows first 10 each side; +0 more imports, +2 more importers in the complete lists below.

imports: nx_syscalls.nxnx_hkdf.nxnx_tls13_kdf.nx

imported by: nx_https_get_happy_test.nxnx_https_loopback_test.nxnx_tls13_client.nxnx_tls13_client_session_derive_app.nxnx_tls13_client_session_recv_sh.nxnx_tls13_full_tcp_test.nxnx_tls13_handshake.nxnx_tls13_handshake_io.nxnx_tls13_handshake_tcp_test.nxnx_tls13_loopback_test.nxnx_tls13_schedule_test.nxnx_tls13_server.nx

structs

none

consts

83const TLS13_HASH_LEN_SHA256: i64 = 32
88const NX_TLS13_LABEL_C_HS_TRAFFIC: i64 = 1
89const NX_TLS13_LABEL_S_HS_TRAFFIC: i64 = 2
90const NX_TLS13_LABEL_C_AP_TRAFFIC: i64 = 3
91const NX_TLS13_LABEL_S_AP_TRAFFIC: i64 = 4
92const NX_TLS13_LABEL_EXP_MASTER: i64 = 5
93const NX_TLS13_LABEL_RES_MASTER: i64 = 6

functions

99func tls13_early_secret(psk: *u8, psk_len: i64, out_32: *u8) -> i64
114func tls13_derived(parent_secret: *u8, empty_hash: *u8, hash_len: i64, out: *u8) -> i64
123func tls13_handshake_secret(
135func tls13_master_secret(
148func tls13_traffic_secret(
212func tls13_traffic_key(traffic_secret: *u8, key_len: i64, out: *u8) -> i64
221func tls13_traffic_iv(traffic_secret: *u8, iv_len: i64, out: *u8) -> i64
230func tls13_finished_key(base_key: *u8, hash_len: i64, out: *u8) -> i64