Published native TLS context checkpoint
fbdfbf890 is pushed on codex/runtime-port as Chris Breuer without coauthors; not merged to main. Private context ownership, CA isolation, binary PKCS#12 parsing, detailed certificate chains, native hostname verification and TLS version options are implemented and verified on Darwin. This issue remains open for platform verification and integration; further socket callback/event gaps are split into #542 and #543.
| Complete unchanged TLS file | Published parent | Final Home | Pinned Bun release |
|---|---|---|---|
| node-tls-context | 3 pass / 4 fail | 7 pass / 0 fail / 28 assertions | 7 pass / 0 fail / 28 assertions |
| ssl-ctx-cache | 4 pass / 5 fail | 9 pass / 0 fail / 16 assertions | Debug-only binding unavailable; not a passing control |
| node-tls-create-secure-context-args | 5 pass | 5 pass / 13 assertions | 5 pass / 13 assertions |
| node-tls-connect-hostname-verification | 4 pass / 1 fail | 5 pass / 0 fail | 5 pass / 0 fail |
| node-tls-cert | 10 pass / 18 fail / 3 TODO | 28 pass / 0 fail / 3 TODO / 70 assertions | 28 pass / 0 fail / 3 TODO / 70 assertions |
The no-cipher-match file also passes (1 test / 3 assertions). User-created contexts bypass both caches while internal contexts keep sharing; their live CA mutations cannot authorize another context. Detailed certificates retain native reference ownership and the JS chain across allocations, include trust-store issuers and self-issued roots, and cap issuer traversal. Version limits survive parsing, cloning, equality/hash and native cache identity. Actual TLS 1.2/1.3 negotiations and disjoint-version rejection pass; this is not merely property acceptance.
The final role check excludes both ordinary and Duplex-server modes from client hostname verification. A mutual-TLS generic-Duplex regression checks native authorization and the exact client certificate with a deliberately different context hostname; the earlier candidate fails, while pinned Bun and the corrected Home artifact pass. Initial probe/control lifecycle mistakes are retained separately from the final explicit-cleanup regression.
Native positive/negative verification includes hostname checks, client certificates, PKCS#12 Buffer/offset-view and malformed inputs, exact certificate representations, repeated conversion and GC. Normal and VM-destruction/exception-check runs pass, the published parent fails at the missing native handle, and pinned Bun passes the adapted identity/path control. The unchanged peer-certificate leak test retains its original workload and memory threshold. Root initialization/immutability, context churn, upgrade and half-open cases pass. Eleven Node parallel programs pass their BoringSSL branches; legacy PFX skips its OpenSSL-only body, and two destructor-UAF cases retain sanitizer guards. Skips/TODOs and controls unavailable in release are not passes.
The full server/connect files are still not green: server 31 pass / 7 fail (Bun 38/0) leaves SNI/ALPN callback behavior in #542. Connect 26 pass / 4 fail / 1 skip (Bun 28/2/1 skip) leaves two local session/keylog cases in #543 plus two live bun.sh OCSP-field expectations that fail in pinned Bun too. Those external assertions are preserved as failures.
Native build 17/17; runtime units 1,828 pass / 19 skip / 0 fail, 19/19 steps; sequential regressions 61/61, including 30 native files. Complete compression 32/32, HTTP/2 client 60/60, HTTP/3 client 52/52, both proxy files, full body-stream 9,086/9,086 / 135,984 assertions, five EOF/fetch files and both abort files pass. The initial HTTP/3 adversarial run failed 24 pass / 3 fail / 160 assertions, followed by three 27/27 / 163 serial replays. #539 remains unresolved; passing retries do not erase the final artifact’s initial failure or prior Home/Bun failures.
All 249 measured TLS test/harness/fixture sources, 48 HTTP/regression sources and 13 consulted TLS implementations match pin 4982b91e3702094330f3be3883354c52b8c01323. Evidence: docs/docs/NATIVE_RUNTIME_BINDINGS.md, zig-out/tls532-publication.json, tls532-candidate5.json, tls532-expanded5.json, tls532-expanded-release1.json, tls532-broader-parent2.json, tls532-unit2.json, tls532-regression5s.json, tls532-final5-results.json, and integrity manifests. Final executable SHA-256: d9649de0fa31c3b0fa935b909cf09e028a088be76bc407e29d66a8927b889e9e.
Failed builds and the incomplete disk-exhausted parent1 attempt remain recorded; parent2 is the complete replay. An initial missing-client-certificate control wrongly required a client error; pinned Bun established that TLS 1.3 can close without one, so the regression checks no server secureConnection and no application bytes instead. No original upstream assertions/workloads/deadlines changed. Shared Darwin checkout; unrelated compiler changes are excluded. Pinned C/C++/JSC dependencies remain, with no Rust archive. Platform/integration, full source ownership and 100% logical parity under #66 remain incomplete.
Historical missing-implementation evidence
Published transport checkpoint
29c196835 is pushed on codex/runtime-port (not merged to main). This issue remains open: its specific missing behavior is not repaired by the TLS ABI/duplex checkpoint. Final native/control results are recorded in #530 and #66; 72 measured test/harness sources match the pin.
Parent: #66. Discovered while repairing the TLS options ABI in #530.
The ABI repair restores HTTP/3 dispatch and advances complete unchanged bun-serve-ssl.test.ts from 12 pass / 4 fail / 20 assertions to 16/16 / 32, matching pinned Bun. It does not establish complete TLS parity.
Remaining complete unchanged files:
node-tls-context.test.ts: published parent 3 pass / 4 fail / 15 assertions; ABI candidate 3 pass / 4 fail / 25 assertions; pinned Bun 7/7 / 28. Failures include client-certificate authorization, most-recent SNI context selection, and CA/peer-certificate handling.ssl-ctx-cache.test.ts: both native runs 4 pass / 5 fail / 9 assertions.tls.createSecureContext().contextis undefined, exclusive user context ownership/addCACert isolation cannot be exercised, and default CA override checks fail. The release control cannot import its debug-only internal binding; it is not a passing control.node-tls-create-secure-context-args.test.ts: all three runs 5/5 / 13 assertions.
Separately, source inspection shows Home SSLConfig and generated option plumbing omit the pin's ssl_min_version/ssl_max_version propagation. Restoring the C struct fields defaults them to zero and fixes layout; it does not implement user-selected TLS version limits. Add actual version-negotiation controls before claiming this path fixed. Preserve config cloning, equality, hashing, native cache identity, and ownership when porting it.
Acceptance: pass the complete original context/cache suites with real native handles and verification, implement and test TLS min/max options, retain positive and negative client/server certificate checks, and verify across platforms. Do not fake certificate objects or make CA verification permissive.
Evidence: zig-out/h3-tls-{parent1,abi1,release1}.json, full logs, and h3-source-integrity1.json. Pin 4982b91e3702094330f3be3883354c52b8c01323; original assertions and deadlines intact. #66 remains incomplete.