skeleton for new communications module
This commit is contained in:
parent
6a3c4e736c
commit
f7a15623c7
36
src/comms.rs
Normal file
36
src/comms.rs
Normal file
@ -0,0 +1,36 @@
|
||||
use super::crypto;
|
||||
use aes_gcm::{aead::consts::U12, aes::Aes256, AesGcm};
|
||||
use rand::rngs::OsRng;
|
||||
use std::error::Error;
|
||||
use tokio::{
|
||||
io::{AsyncBufReadExt, AsyncWriteExt, BufReader, BufWriter},
|
||||
net::tcp::{ReadHalf, WriteHalf},
|
||||
};
|
||||
|
||||
pub async fn send_bytes(
|
||||
writer: &mut BufWriter<WriteHalf<'_>>,
|
||||
enc: Option<(&mut AesGcm<Aes256, U12>, &mut OsRng)>,
|
||||
data: &Vec<u8>,
|
||||
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let processed = enc.map_or(Ok(data.clone()), |enc| {
|
||||
crypto::aes_encrypt(data, enc.0, enc.1)
|
||||
})?;
|
||||
writer.write_all(&processed).await?;
|
||||
writer.flush().await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn recv_bytes(
|
||||
reader: &mut BufReader<ReadHalf<'_>>,
|
||||
cipher: Option<&mut AesGcm<Aes256, U12>>,
|
||||
buf: &mut Vec<u8>,
|
||||
) -> Result<(), Box<dyn Error + Send + Sync>> {
|
||||
let recv_bytes = reader.read_until(b'\n', buf).await?;
|
||||
*buf = cipher.map_or(Ok(buf.clone()), |c| crypto::aes_decrypt(&buf, c))?;
|
||||
if recv_bytes == 0 {
|
||||
todo!("ERROR: No message received or client <xyz> crashed");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue
Block a user