From 18e0e6992bd4301e27f94783c497deafb546997d Mon Sep 17 00:00:00 2001 From: "shoney.arickathil" Date: Wed, 9 Sep 2026 04:28:56 +0200 Subject: [PATCH] docs(rv2-tls): phase G2 server FSM landed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §G sub-phase G2: the sans-io server handshake FSM (wo_tls_server) landed, loopback-KAT'd against the client driver (EC + RSA identities, app round-trip). Remaining G3: net.accept_tls + private-key parse + live gate. Co-Authored-By: Claude Opus 4.8 (cherry picked from commit 57613bddc621a90970d9443ae5a5deacffe0cfca) --- docs/stories/runtime-v2/09-in-process-tls.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/stories/runtime-v2/09-in-process-tls.md b/docs/stories/runtime-v2/09-in-process-tls.md index 865a958..1e4dab9 100644 --- a/docs/stories/runtime-v2/09-in-process-tls.md +++ b/docs/stories/runtime-v2/09-in-process-tls.md @@ -284,11 +284,14 @@ when picked up. vs the RFC 6979 A.2.5 vectors) + sign→verify round-trip, ASan/UBSan clean. **Remaining G1c**: private-key PEM/DER parsing (PKCS#8, PKCS#1, SEC1) — lands with G3, which is what reads key files (the FSM takes raw key material). -- **G2 — the server handshake FSM.** `wo_tls_server`: parse ClientHello, select - the suite, generate the ephemeral, send ServerHello + EncryptedExtensions + - Certificate + a signed CertificateVerify + Finished, then verify the client - Finished. KAT by **loopback** — our client driver against our server driver - in-process, reaching ESTABLISHED with matching keys and an app round-trip. +- **G2 — the server handshake FSM.** ✅ **LANDED 2026-09-09** — `wo_tls_server` + (sans-io): parse ClientHello (pick suite, x25519 share, echo session id; reject + no-x25519/no-1.3), build ServerHello, derive the role-symmetric keys, emit the + encrypted flight (EncryptedExtensions + Certificate + a signed CertificateVerify + + Finished), verify the client Finished, switch to application keys. Signs with + the G1 primitives (RSA-PSS or ECDSA + a DER SEQ{r,s} encoder). **KAT by + loopback** — our client driver against our server driver, EC then RSA server + identity, ESTABLISHED with an app round-trip both ways. test_tls 123, ASan clean. - **G3 — `net.accept_tls` + the live gate.** The VM builtin (id 118, `WO_B_MAX`→118) + the shard identity cache, gated live by **`openssl s_client`** completing a handshake against our server and exchanging data — real-world