ELSEIF
Your brief EB
522 stories from 174 feeds 1056 clusters Refreshed 12 minutes ago next pull 19:10

SECURITY Signal 663 2 feeds carried it

rustls 0.24 introduces external buffering, async-friendly usage, split mode, and modular cryptography providers

Illustration only Photo by luca romano on Unsplash

rustls, a Rust-based TLS implementation, marks a decade with its 0.24 release, adding performance and usability improvements while modularizing cryptography providers.

WHY IT MATTERS

For engineers building secure networked applications, rustls 0.24 reduces overhead, simplifies async integration, and enables full-duplex workloads. The shift to external cryptography providers also removes feature-unification pitfalls, making dependency management cleaner.

Written by elseif from the cluster below · every claim links back to a source

The three things worth knowing

01

External buffering in 0.24 eliminates copies and enables no-std support by moving TLS input/output to user-provided buffers.

02

Split mode separates sending and receiving into thread-safe objects, doubling throughput for full-duplex workloads.

03

Cryptography providers are now modular crates, removing feature conflicts and allowing global provider selection at runtime.

THE READ

What the cluster adds up to.

ORIGINAL ANALYSIS

rustls 0.24 reworks its I/O model to address long-standing inefficiencies. By moving buffering outside the library, it avoids extra copies and awkward error handling tied to std::io traits. The new TlsInputBuffer trait lets users provide their own buffers, with plaintext returned as a borrow into the input buffer. This change also unlocks no-std support, a requirement for embedded or resource-constrained environments. The trade-off is that porting existing code requires adapting to the new trait-based I/O, though VecInput offers a compatibility path for io::Read users.

The release introduces a session-type system to model the TLS handshake process, replacing the previous Acceptor API. Servers and clients now progress through distinct states (e.g., NeedsInput → Accepted → VerifyClientIdentity → Complete), each of which can be driven synchronously, asynchronously, or via completion-based callbacks. This design avoids waiting for Rust language features like async dyn traits, but it may feel unfamiliar to developers accustomed to monolithic connection objects. The approach allows future handshake steps to be added without breaking changes, though it shifts complexity to the caller for state management.

Split mode is the most novel feature in 0.24, separating post-handshake sending and receiving into SendTraffic and ReceiveTraffic objects. Both are Send, enabling full-duplex workloads to run on separate threads with minimal contention. This addresses a 2019 request and is described as unique among TLS libraries, but it requires applications to manage two objects instead of one. The internal back-channel between them is low-contention, but the performance gains may be limited to workloads that can fully utilize parallel sending and receiving.

Cryptography providers are now modular crates, such as rustls-aws-lc-rs and rustls-ring, rather than built-in features. This removes feature-unification panics and allows providers to be selected globally at runtime, simplifying dependency management. However, it also means users must explicitly choose and include a provider crate, adding a small setup step. The change reflects a broader trend toward modularity in security libraries, but it may complicate builds for projects that previously relied on default features.

Written by elseif from the cluster below · checked for specifics the sources never contained

THE CLUSTER

Same story, 2 feeds.

ORDERED BY FIRST SEEN
rustls.dev via Lobsters A decade of rustls Open ↗
LWN.net A decade of Rustls Open ↗