Skip to main content

Crate giong_tls

Crate giong_tls 

Source
Expand description

§giong-tls

Server-side TLS for the giong thread-per-core runtime, built on rustls (TLS 1.2 and 1.3, ring for cryptography).

use giong::net::TcpListener;
use giong_tls::TlsAcceptor;

let cert = std::fs::read("cert.pem")?;
let key = std::fs::read("key.pem")?;
let acceptor = TlsAcceptor::from_pem(&cert, &key)?;

giong::block_on(async move {
    let listener = TcpListener::bind("0.0.0.0:8443")?;
    loop {
        let tcp = listener.accept().await?;
        let acceptor = acceptor.clone();
        giong::spawn(async move {
            let Ok(tls) = acceptor.accept(tcp).await else { return };
            while let Ok(data) = tls.recv().await {
                if data.is_empty() {
                    break; // closed by the peer
                }
                if tls.write_all(data).await.0.is_err() {
                    break;
                }
            }
            let _ = tls.shutdown().await;
        });
    }
})

The API mirrors giong::net::TcpStream: TlsStream::recv returns the next piece of decrypted data and TlsStream::write_all takes a buffer by value and hands it back.

Re-exports§

pub use rustls;

Structs§

TlsAcceptor
Turns accepted TCP connections into TLS connections.
TlsStream
A TLS connection over a TcpStream.