async-psec/tests/psec_test.rs

57 lines
2.0 KiB
Rust
Raw Normal View History

2021-05-16 13:53:39 +02:00
use rand::rngs::OsRng;
use tokio::{net::{TcpListener, TcpStream}};
use async_psec::{Session, Identity, PsecReader, PsecWriter, PsecError};
#[tokio::main]
async fn tokio_main() {
let server_keypair = Identity::generate(&mut OsRng);
let server_public_key = server_keypair.public.to_bytes();
let client_keypair = Identity::generate(&mut OsRng);
let client_public_key = client_keypair.public.to_bytes();
let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
let bind_addr = listener.local_addr().unwrap();
2021-06-18 19:24:57 +02:00
let handle = tokio::spawn(async move {
2021-05-16 13:53:39 +02:00
let (stream, addr) = listener.accept().await.unwrap();
2021-05-18 22:17:21 +02:00
let mut session = Session::from(stream);
assert_eq!(session.peer_addr().unwrap(), addr);
2021-05-16 13:53:39 +02:00
session.do_handshake(&server_keypair).await.unwrap();
assert_eq!(session.peer_public_key.unwrap(), client_public_key);
session.encrypt_and_send(b"Hello I'm Bob", true).await.unwrap();
assert_eq!(session.receive_and_decrypt().await.unwrap(), b"Hello I'm Alice");
2021-06-18 19:33:54 +02:00
let (mut reader, mut writer) = session.into_split().unwrap();
2021-05-16 13:53:39 +02:00
2021-06-18 19:33:54 +02:00
writer.encrypt_and_send("!".repeat(997).as_bytes(), true).await.unwrap();
assert_eq!(reader.receive_and_decrypt().await, Err(PsecError::TransmissionCorrupted));
2021-05-16 13:53:39 +02:00
});
let stream = TcpStream::connect(format!("127.0.0.1:{}", bind_addr.port())).await.unwrap();
2021-05-18 22:17:21 +02:00
let mut session = Session::from(stream);
assert_eq!(session.peer_addr().unwrap(), bind_addr);
2021-05-16 13:53:39 +02:00
session.do_handshake(&client_keypair).await.unwrap();
assert_eq!(session.peer_public_key.unwrap(), server_public_key);
2021-06-18 19:24:57 +02:00
session.set_max_recv_size(996, false);
2021-05-16 13:53:39 +02:00
session.encrypt_and_send(b"Hello I'm Alice", true).await.unwrap();
assert_eq!(session.receive_and_decrypt().await.unwrap(), b"Hello I'm Bob");
assert_eq!(session.receive_and_decrypt().await, Err(PsecError::BufferTooLarge));
session.send(b"\x00\x00\x00\x00not encrypted data").await.unwrap();
2021-06-18 19:24:57 +02:00
handle.await.unwrap();
2021-05-16 13:53:39 +02:00
}
#[test]
fn psec_session() {
tokio_main();
2021-05-18 22:17:21 +02:00
}