COOLJAPAN
← All posts

OxiTLS 0.3.0 Released — Leaf-Only-Chain OCSP False-Rejections Fixed, HPKE LabeledExpand Panic Eliminated

OxiTLS 0.3.0 fixes an OCSP staple false-rejection on leaf-only certificate chains, converts an HPKE LabeledExpand panic into a propagated Result, and adds three new fuzz targets covering its own hand-rolled TLS parsers — 364 tests passing, the sovereign Pure Rust TLS layer for the COOLJAPAN ecosystem.

release oxitls pure-rust cooljapan noffi tls security networking cryptography

A security check that rejects legitimate traffic is still a bug, even when the bug is on the paranoid side.

Today we released OxiTLS 0.3.0 — a correctness release for the COOLJAPAN Pure Rust TLS transport stack. It fixes an OCSP staple validation bug that could turn a legitimate, CA-signed certificate into an unconditional handshake failure, converts an RFC 9180 HPKE helper from panicking to returning Result, and hardens the workspace’s own attacker-facing parsers with three new fuzz targets.

No OpenSSL. No native-tls. No ring on the default path. No FFI, no -sys crates on the path you actually ship. OxiTLS compiles to a single static binary with no system libraries and no build-time C toolchain — Pure Rust from the byte that hits the socket to the AEAD that protects it.

Why OxiTLS 0.3.0 is a game changer

Correctness releases are where a TLS stack either earns trust or loses it — a false rejection is embarrassing, but a false acceptance is dangerous, and the fix has to land on the right side of that line every time:

OxiTLS 0.3.0 ends all of that.

Technical Deep Dive: where the fix lives, and what’s new around it

  1. The crypto engine (oxitls-core, oxitls-rustcrypto-provider, oxitls-adapter-rustls-rustcrypto). The HPKE LabeledExpand fix lives in oxitls-adapter-rustls-rustcrypto/src/hpke/kdf.rs; the OCSP and SCT-adjacent verifier hardening lives in oxitls-adapter-rustls-rustcrypto/src/verifier/ocsp_client.rs, specifically the new end_entity_is_self_signed check that replaces the old blanket assumption.
  2. New fuzz targets (oxitls-adapter-rustls-rustcrypto/fuzz). sct_list_parser, precert_hash_parser, and ocsp_staple_parser join client_config_parser, all targeting the crate’s own parsers rather than the upstream rustls-pemfile surface.
  3. Four new runnable examples (oxitls/examples). tls13_client.rs, tls13_server.rs, mtls.rs, and verifier_composition.rs ship in this release — the last one builds the exact layered verifier pipeline (WebPkiServerVerifierCertPinVerifierSctVerifierOcspClientVerifier) that would have surfaced the leaf-only-chain bug this release fixes.
  4. Workspace hygiene. New root-level rustfmt.toml and clippy.toml pin the workspace MSRV (1.89) consistently; stale [compile-blocked] annotations on three already-passing RFC 7250 raw-public-key integration tests were removed from oxitls-adapter-rustls-rustcrypto/TODO.md.

Getting Started

cargo add oxitls

The client and server API is unchanged in 0.3.0 — the fixes in this release are internal correctness hardening, not surface changes:

use oxitls::{ClientBuilder, TlsError};

#[tokio::main]
async fn main() -> Result<(), TlsError> {
    let stream = ClientBuilder::new()
        .server_name("example.com")
        .connect("example.com:443")
        .await?;
    Ok(())
}

Want to see the exact verifier composition that surfaced the leaf-only-chain OCSP bug, and confirm it now resolves correctly? Run the new example directly:

cargo run --example verifier_composition -p oxitls

It layers CertPinVerifierSctVerifierOcspClientVerifier over WebPkiServerVerifier, connects to a local Pure-Rust TLS 1.3 server with no intermediates in its chain, and exercises the exact code path this release fixed.

What’s New in 0.3.0

Tips

This is the foundation

OxiTLS belongs to NoFFI — the COOLJAPAN initiative to replace every C / C++ / Fortran / -sys FFI dependency in the Rust ecosystem with a clean, memory-safe, 100% Pure Rust implementation. A correctness release that closes a false-rejection on a completely ordinary certificate shape is exactly the kind of hardening that keeps that promise credible.

OxiTLS sits underneath a growing list of sibling COOLJAPAN projects — all bumped to oxitls = "0.3.0" (or one of its subcrates) as part of this release: OxiHTTP, OxiQUIC, and OxiRPC carry it as their transport-security layer; OxiSQL depends on it directly for its Postgres and MySQL adapters’ CryptoProvider; OxiGDAL pulls in oxitls-core, oxitls-adapter-rustls-rustcrypto, and oxitls-webpki-roots individually; and OxiRS, CeleRS, MielinOS, and VoiRS round out the list.

Repository: https://github.com/cool-japan/oxitls

Star the repo if you want a TLS stack where a false-rejection bug on an ordinary certificate chain gets fixed at the root cause, not patched around at the call site.

The era of a security check that’s paranoid at the cost of correctness is over. Pure Rust TLS — sovereign, safe, and precise about what it rejects — is here.

KitaSan at COOLJAPAN OÜ August 6, 2026

↑ Back to all posts