cttps 0.1.2

Crypto Transfer Protocol Secure (CTTPS) - A high-performance secure transport protocol using X25519 and AES-256-GCM.
pub mod crypto;
pub mod stream;

pub use stream::CttpsStream;
pub use crypto::CttpsCrypto;

/// The default port for CTTPS if not specified.
pub const DEFAULT_PORT: u16 = 443;

#[cfg(test)]
mod tests {
    use super::*;
    use tokio::net::{TcpListener, TcpStream};

    #[tokio::test]
    async fn test_handshake() -> anyhow::Result<()> {
        let listener = TcpListener::bind("127.0.0.1:0").await?;
        let addr = listener.local_addr()?;

        let server_task = tokio::spawn(async move {
            let (stream, _) = listener.accept().await.unwrap();
            let mut server = CttpsStream::accept(stream).await.unwrap();
            let msg = server.read_packet().await.unwrap();
            assert_eq!(msg, b"hello from client");
            server.write_packet(b"hello from server").await.unwrap();
        });

        let client_stream = TcpStream::connect(addr).await?;
        let mut client = CttpsStream::connect(client_stream).await?;
        client.write_packet(b"hello from client").await?;
        let resp = client.read_packet().await?;
        assert_eq!(resp, b"hello from server");

        server_task.await?;
        Ok(())
    }
}