Implementation of Scuttlebutt Handshake and Box Stream to establish a secure authenticated and encrypted connection between two peers.
A simple echo server (see examples/echo_server.rs
)
```rust let serveridentity = sodiumoxide::crypto::sign::genkeypair().unwrap();
let listener = asyncstd::net::TcpListener::bind("localhost:5555").await?; let (stream, _) = listener.accept().await?; let server = ssbboxstream::Server::new(&NETWORKIDENTIFIER, &serveridentity.0, &serveridentity.1); let (mut sender, mut receiver, clientkey) = server.accept(stream).await?; println!("Connected to client {:?}", clientkey);
while let Some(data) = receiver.trynext().await? { println!("<- {}", String::fromutf8_lossy(&data)); sender.send(data).await? }
sender.close().await? ```
A client (see examples/client.rs
).
```rust // This needs to match the server identity keypair let serveridentitypk = sodiumoxide::crypto::sign::genkeypair().0; let clientidentity = sodiumoxide::crypto::sign::gen_keypair();
let stream = async_std::net::TcpStream::connect("localhost:5555").await?;
let client = ssbboxstream::Client::new( &NETWORKIDENTIFIER, &serveridentitypk, &clientidentity.0, &client_identity.1, );
let (mut sender, _receiver) = client.connect(stream).await?; sender.send(Vec::from(b"hello world")).await?; ```