#tls #rama

rama-boring-tokio

An implementation of SSL streams for Tokio backed by BoringSSL in function of Rama

6 releases

new 0.2.0-alpha.6 Apr 3, 2025
0.2.0-alpha.5 Mar 29, 2025
0.2.0-alpha.4 Mar 28, 2025
0.2.0-alpha.2 Mar 24, 2025
0.2.0-alpha.1 Mar 19, 2025

#14 in #rama

Download history 634/week @ 2025-03-19 730/week @ 2025-03-26

1,364 downloads per month

MIT/Apache

16MB
464K SLoC

GNU Style Assembly 206K SLoC // 0.0% comments C++ 98K SLoC // 0.2% comments C 78K SLoC // 0.2% comments Assembly 63K SLoC // 0.0% comments Rust 18K SLoC // 0.0% comments Bazel 1K SLoC

rama-boring-tokio

An implementation of SSL streams for Tokio backed by BoringSSL in function of Rama.

Documentation

Usage

First, add this to your Cargo.toml:

[dependencies]
rama-boring-tokio = "0.2.0"

Then, use either accept or connect as appropriate.

use rama_boring::ssl;
use tokio::net::TcpListener;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080").await?;
    let (tcp_stream, _addr) = listener.accept().await?;

    let server = ssl::SslMethod::tls_server();
    let mut ssl_builder = rama_boring::ssl::SslAcceptor::mozilla_modern(server)?;
    ssl_builder.set_default_verify_paths()?;
    ssl_builder.set_verify(ssl::SslVerifyMode::PEER);
    let acceptor = ssl_builder.build();
    let _ssl_stream = rama_boring_tokio::accept(&acceptor, tcp_stream).await?;
    Ok(())
}

This library is an implementation of TLS streams using BoringSSL for negotiating the connection. Each TLS stream implements the Read and Write traits to interact and interoperate with the rest of the futures I/O ecosystem. Client connections initiated from this crate verify hostnames automatically and by default.

rama-boring-tokio exports this ability through accept and connect. accept should be used by servers, and connect by clients. These augment the functionality provided by the boring crate, on which this crate is built. Configuration of TLS parameters is still primarily done through the boring crate.

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Accolades

The project is based on a tokio-boring which itself is based on a fork of tokio-openssl.

Dependencies

~2–11MB
~109K SLoC