diff --git a/src/lib.rs b/src/lib.rs index 87b97f3..d5c8b7a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,6 +2,7 @@ pub const SERVER_PORT: u16 = 3543; pub const BUFFER_SIZE: usize = 65535; pub const DEFAULT_TIMEOUT: u64 = 30; pub const VERSION: &str = "v0.1"; +pub const RSA_SIZE: usize = 2048; #[repr(u8)] pub enum ServerMethods { diff --git a/src/server/main.rs b/src/server/main.rs index de2104f..4a473a3 100644 --- a/src/server/main.rs +++ b/src/server/main.rs @@ -1,5 +1,7 @@ mod net; use std::{net::UdpSocket, process::exit, sync::Arc}; + +use rsa::pkcs8::der::zeroize::Zeroize; fn main() -> std::io::Result<()> { { let socket: Arc = Arc::new( @@ -19,6 +21,7 @@ fn main() -> std::io::Result<()> { let mut buf: [u8; pea_2_pea::BUFFER_SIZE] = [0; pea_2_pea::BUFFER_SIZE]; smol::block_on(async { loop { + buf.zeroize(); match socket.recv_from(&mut buf) { Ok((data_length, src)) => { smol::spawn(net::handle_request( diff --git a/src/server/net.rs b/src/server/net.rs index 1c4e12b..8110d1d 100644 --- a/src/server/net.rs +++ b/src/server/net.rs @@ -1,18 +1,31 @@ +use rsa::pkcs1::{DecodeRsaPublicKey, EncodeRsaPublicKey}; pub async fn handle_request( - mut buf: [u8; pea_2_pea::BUFFER_SIZE], + buf: [u8; pea_2_pea::BUFFER_SIZE], socket: std::sync::Arc, src: core::net::SocketAddr, data_len: usize, server_key_pair: pea_2_pea::shared::crypto::KeyPair, ) { - #[cfg(target_endian = "little")] - buf.reverse(); - match buf[0] { x if x == pea_2_pea::ServerMethods::QUERY as u8 => { #[cfg(debug_assertions)] - println!("QUERY method"); + eprintln!("QUERY method"); + let pkcs_encoded_public_key: rsa::pkcs8::Document = + server_key_pair.public_key.to_pkcs1_der().unwrap(); + let mut send_vec: Vec = pkcs_encoded_public_key.into_vec(); + send_vec.insert(0, pea_2_pea::ServerMethods::QUERY as u8); + + match socket.send_to(&send_vec, &src) { + Ok(s) => { + #[cfg(debug_assertions)] + eprintln!("send {} bytes", s); + } + Err(e) => { + eprintln!("Error snding data: {}", e); + } + } } + x if x == pea_2_pea::ServerMethods::GET as u8 => { #[cfg(debug_assertions)] println!("GET method"); diff --git a/src/shared/crypto.rs b/src/shared/crypto.rs index 81e2278..e7d14a0 100644 --- a/src/shared/crypto.rs +++ b/src/shared/crypto.rs @@ -1,7 +1,7 @@ #[derive(Clone)] pub struct KeyPair { - private_key: rsa::RsaPrivateKey, - public_key: rsa::RsaPublicKey, + pub private_key: rsa::RsaPrivateKey, + pub public_key: rsa::RsaPublicKey, } pub fn generate_rsa_private_key() -> Result { let mut rng: rand::prelude::ThreadRng = rand::thread_rng(); @@ -11,8 +11,8 @@ pub fn generate_rsa_private_key() -> Result { } pub fn generate_rsa_key_pair() -> KeyPair { - let private_key = generate_rsa_private_key().unwrap(); - let public_key = rsa::RsaPublicKey::from(&private_key); + let private_key: rsa::RsaPrivateKey = generate_rsa_private_key().unwrap(); + let public_key: rsa::RsaPublicKey = rsa::RsaPublicKey::from(&private_key); KeyPair { private_key,