rust-nex/rnex-prudp/src/socket_addr.rs
Maple Nebel 3f07e45f08
Some checks failed
Build and Test / wii-sports-club (push) Failing after 20m22s
Build and Test / puyopuyo (push) Failing after 20m41s
Build and Test / minecraft-wiiu (push) Failing after 20m54s
Build and Test / sonic-transformed (push) Failing after 21m17s
Build and Test / mario-tennis (push) Failing after 21m34s
Build and Test / fast-racing-neo (push) Failing after 21m37s
Build and Test / splatoon-testfire (push) Failing after 22m11s
Build and Test / wii-u-chat (push) Failing after 23m6s
Build and Test / splatoon (push) Failing after 23m23s
Build and Test / friends (push) Failing after 3m51s
Build and Test / super-mario-maker (push) Failing after 3m50s
datastore refactor
2026-07-13 19:38:43 +02:00

39 lines
1.1 KiB
Rust

use hmac::Hmac;
use md5::digest::Mac;
use rc4::KeyInit;
use std::net::{IpAddr, SocketAddr};
use crate::virtual_port::VirtualPort;
type Md5Hmac = Hmac<md5::Md5>;
#[derive(Eq, PartialEq, Hash, Debug, Copy, Clone, Ord, PartialOrd)]
pub struct PRUDPSockAddr {
pub regular_socket_addr: SocketAddr,
pub virtual_port: VirtualPort,
}
impl PRUDPSockAddr {
pub fn new(regular_socket_addr: SocketAddr, virtual_port: VirtualPort) -> Self {
Self {
regular_socket_addr,
virtual_port,
}
}
pub fn calculate_connection_signature(&self) -> [u8; 16] {
let mut hmac = Md5Hmac::new_from_slice(&[0; 16]).expect("incorrect slice size");
let data = match self.regular_socket_addr.ip() {
IpAddr::V4(v) => v.octets().to_vec(),
IpAddr::V6(v) => v.octets().to_vec(),
};
//data.extend_from_slice(&self.regular_socket_addr.port().to_be_bytes());
hmac.update(&data);
let result: [u8; 16] = hmac.finalize().into_bytes()[0..16]
.try_into()
.expect("incorrect result size");
result
}
}