From 4e77e67f1085cbf3802f930dc1aeb4f0185130ea Mon Sep 17 00:00:00 2001 From: Karolin Varner Date: Sun, 1 Jun 2025 20:10:03 +0200 Subject: [PATCH] chore: Split utils for zerocopy in protocol into own file --- rosenpass/src/protocol/mod.rs | 1 + rosenpass/src/protocol/protocol.rs | 15 +-------------- rosenpass/src/protocol/test.rs | 5 +++-- rosenpass/src/protocol/zerocopy.rs | 21 +++++++++++++++++++++ 4 files changed, 26 insertions(+), 16 deletions(-) create mode 100644 rosenpass/src/protocol/zerocopy.rs diff --git a/rosenpass/src/protocol/mod.rs b/rosenpass/src/protocol/mod.rs index eb20947..93f9e86 100644 --- a/rosenpass/src/protocol/mod.rs +++ b/rosenpass/src/protocol/mod.rs @@ -81,6 +81,7 @@ pub mod basic_types; pub mod constants; pub mod testutils; pub mod timing; +pub mod zerocopy; #[allow(clippy::module_inception)] mod protocol; diff --git a/rosenpass/src/protocol/protocol.rs b/rosenpass/src/protocol/protocol.rs index b36ee6d..2464b06 100644 --- a/rosenpass/src/protocol/protocol.rs +++ b/rosenpass/src/protocol/protocol.rs @@ -45,6 +45,7 @@ use super::constants::{ RETRANSMIT_DELAY_GROWTH, RETRANSMIT_DELAY_JITTER, }; use super::timing::{has_happened, Timing, BCE, UNENDING}; +use super::zerocopy::{truncating_cast_into, truncating_cast_into_nomut}; #[cfg(feature = "trace_bench")] use rosenpass_util::trace_bench::Trace as _; @@ -3949,17 +3950,3 @@ impl CryptoServer { } } } - -/// Used to parse a network message using [zerocopy] -pub fn truncating_cast_into( - buf: &mut [u8], -) -> Result, RosenpassError> { - Ref::new(&mut buf[..size_of::()]).ok_or(RosenpassError::BufferSizeMismatch) -} - -/// Used to parse a network message using [zerocopy], mutably -pub fn truncating_cast_into_nomut( - buf: &[u8], -) -> Result, RosenpassError> { - Ref::new(&buf[..size_of::()]).ok_or(RosenpassError::BufferSizeMismatch) -} diff --git a/rosenpass/src/protocol/test.rs b/rosenpass/src/protocol/test.rs index 1873a57..f62775b 100644 --- a/rosenpass/src/protocol/test.rs +++ b/rosenpass/src/protocol/test.rs @@ -14,8 +14,9 @@ use crate::msgs::{EmptyData, Envelope, InitConf, InitHello, MsgType, RespHello, use super::{ basic_types::{MsgBuf, SPk, SSk, SymKey}, constants::REKEY_AFTER_TIME_RESPONDER, - truncating_cast_into, truncating_cast_into_nomut, CryptoServer, HandleMsgResult, - HostIdentification, KnownInitConfResponsePtr, PeerPtr, PollResult, ProtocolVersion, + zerocopy::{truncating_cast_into, truncating_cast_into_nomut}, + CryptoServer, HandleMsgResult, HostIdentification, KnownInitConfResponsePtr, PeerPtr, + PollResult, ProtocolVersion, }; struct VecHostIdentifier(Vec); diff --git a/rosenpass/src/protocol/zerocopy.rs b/rosenpass/src/protocol/zerocopy.rs new file mode 100644 index 0000000..3e8639b --- /dev/null +++ b/rosenpass/src/protocol/zerocopy.rs @@ -0,0 +1,21 @@ +//! Helpers for working with the zerocopy crate + +use std::mem::size_of; + +use zerocopy::{FromBytes, Ref}; + +use crate::RosenpassError; + +/// Used to parse a network message using [zerocopy] +pub fn truncating_cast_into( + buf: &mut [u8], +) -> Result, RosenpassError> { + Ref::new(&mut buf[..size_of::()]).ok_or(RosenpassError::BufferSizeMismatch) +} + +/// Used to parse a network message using [zerocopy], mutably +pub fn truncating_cast_into_nomut( + buf: &[u8], +) -> Result, RosenpassError> { + Ref::new(&buf[..size_of::()]).ok_or(RosenpassError::BufferSizeMismatch) +}