Crates.io | rustls-tokio-stream |
lib.rs | rustls-tokio-stream |
version | 0.3.0 |
source | src |
created_at | 2023-05-11 19:40:05.256456 |
updated_at | 2024-07-12 22:27:02.334887 |
description | AsyncRead/AsyncWrite interface for RustTLS on Tokio |
homepage | |
repository | https://github.com/denoland/rustls-tokio-stream |
max_upload_size | |
id | 862423 |
size | 152,877 |
rustls-tokio-stream is a Rust crate that provides an AsyncRead/AsyncWrite interface for rustls.
Features:
tokio::io::split
and other methods out-of-the-boxCreate a server and client running on localhost:
fn server_config() -> ServerConfig {
ServerConfig::builder()
.with_safe_defaults()
.with_no_client_auth()
.with_single_cert(vec![certificate()], private_key())
.expect("Failed to build server config")
}
fn client_config() -> ClientConfig {
ClientConfig::builder()
.with_safe_defaults()
.with_no_client_auth()
}
async fn tcp_pair() -> (TcpStream, TcpStream) {
let listener = TcpListener::bind(SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, 0)))
.await
.unwrap();
let port = listener.local_addr().unwrap().port();
let server = spawn(async move { listener.accept().await.unwrap().0 });
let client = spawn(async move {
TcpSocket::new_v4()
.unwrap()
.connect(SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::LOCALHOST, port)))
.await
.unwrap()
});
let (server, client) = (server.await.unwrap(), client.await.unwrap());
(server, client)
}
async fn tls_pair() -> (TlsStream, TlsStream) {
let (server, client) = tcp_pair().await;
let server = TlsStream::new_server_side(server, server_config().into());
let client = TlsStream::new_client_side(
client,
client_config().into(),
"example.com".try_into().unwrap(),
);
(server, client)
}