query metod is now working on server

This commit is contained in:
PoliEcho 2025-07-25 17:50:38 +02:00
parent 3e4f722b12
commit 7cb9b6619d
4 changed files with 26 additions and 9 deletions

View File

@ -2,6 +2,7 @@ pub const SERVER_PORT: u16 = 3543;
pub const BUFFER_SIZE: usize = 65535; pub const BUFFER_SIZE: usize = 65535;
pub const DEFAULT_TIMEOUT: u64 = 30; pub const DEFAULT_TIMEOUT: u64 = 30;
pub const VERSION: &str = "v0.1"; pub const VERSION: &str = "v0.1";
pub const RSA_SIZE: usize = 2048;
#[repr(u8)] #[repr(u8)]
pub enum ServerMethods { pub enum ServerMethods {

View File

@ -1,5 +1,7 @@
mod net; mod net;
use std::{net::UdpSocket, process::exit, sync::Arc}; use std::{net::UdpSocket, process::exit, sync::Arc};
use rsa::pkcs8::der::zeroize::Zeroize;
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
{ {
let socket: Arc<UdpSocket> = Arc::new( let socket: Arc<UdpSocket> = 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]; let mut buf: [u8; pea_2_pea::BUFFER_SIZE] = [0; pea_2_pea::BUFFER_SIZE];
smol::block_on(async { smol::block_on(async {
loop { loop {
buf.zeroize();
match socket.recv_from(&mut buf) { match socket.recv_from(&mut buf) {
Ok((data_length, src)) => { Ok((data_length, src)) => {
smol::spawn(net::handle_request( smol::spawn(net::handle_request(

View File

@ -1,18 +1,31 @@
use rsa::pkcs1::{DecodeRsaPublicKey, EncodeRsaPublicKey};
pub async fn handle_request( pub async fn handle_request(
mut buf: [u8; pea_2_pea::BUFFER_SIZE], buf: [u8; pea_2_pea::BUFFER_SIZE],
socket: std::sync::Arc<std::net::UdpSocket>, socket: std::sync::Arc<std::net::UdpSocket>,
src: core::net::SocketAddr, src: core::net::SocketAddr,
data_len: usize, data_len: usize,
server_key_pair: pea_2_pea::shared::crypto::KeyPair, server_key_pair: pea_2_pea::shared::crypto::KeyPair,
) { ) {
#[cfg(target_endian = "little")]
buf.reverse();
match buf[0] { match buf[0] {
x if x == pea_2_pea::ServerMethods::QUERY as u8 => { x if x == pea_2_pea::ServerMethods::QUERY as u8 => {
#[cfg(debug_assertions)] #[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<u8> = 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 => { x if x == pea_2_pea::ServerMethods::GET as u8 => {
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
println!("GET method"); println!("GET method");

View File

@ -1,7 +1,7 @@
#[derive(Clone)] #[derive(Clone)]
pub struct KeyPair { pub struct KeyPair {
private_key: rsa::RsaPrivateKey, pub private_key: rsa::RsaPrivateKey,
public_key: rsa::RsaPublicKey, pub public_key: rsa::RsaPublicKey,
} }
pub fn generate_rsa_private_key() -> Result<rsa::RsaPrivateKey, rsa::Error> { pub fn generate_rsa_private_key() -> Result<rsa::RsaPrivateKey, rsa::Error> {
let mut rng: rand::prelude::ThreadRng = rand::thread_rng(); let mut rng: rand::prelude::ThreadRng = rand::thread_rng();
@ -11,8 +11,8 @@ pub fn generate_rsa_private_key() -> Result<rsa::RsaPrivateKey, rsa::Error> {
} }
pub fn generate_rsa_key_pair() -> KeyPair { pub fn generate_rsa_key_pair() -> KeyPair {
let private_key = generate_rsa_private_key().unwrap(); let private_key: rsa::RsaPrivateKey = generate_rsa_private_key().unwrap();
let public_key = rsa::RsaPublicKey::from(&private_key); let public_key: rsa::RsaPublicKey = rsa::RsaPublicKey::from(&private_key);
KeyPair { KeyPair {
private_key, private_key,