refactor(proto): centralize packet envelope handling

This commit is contained in:
Nils Andreas Svee committed 2026-08-04 00:27:45 +07:00
1 parent 6ba76abca0
commit e908c4ce4f
5 files changed
+273 -120

No files matched your search

+16 -17
View File
@@ -1,6 +1,8 @@
use crate::{
flags::{FLAG_CLOSE, FLAG_HMAC},
hmac, write_header, Result, HMAC_SIZE,
envelope::{self, FlagRule},
flags::{FLAG_CLOSE, FLAG_OPEN, FLAG_REPLY},
layout::PacketLayout,
Result,
};
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -9,27 +11,24 @@ pub struct CloseRequest {
}
pub fn encode_close_request(request: &CloseRequest, hmac_key: Option<&[u8]>) -> Result<Vec<u8>> {
let mut flags = FLAG_CLOSE;
if hmac_key.is_some() {
flags |= FLAG_HMAC;
}
let mut out = Vec::new();
write_header(&mut out, flags);
if hmac_key.is_some() {
out.extend_from_slice(&[0; HMAC_SIZE]);
}
let mut out = envelope::begin(
FLAG_CLOSE,
hmac_key,
&[
FlagRule::Require(FLAG_CLOSE),
FlagRule::Reject(FLAG_OPEN),
FlagRule::Reject(FLAG_REPLY),
],
PacketLayout::close_request(hmac_key.is_some()).header_len(),
)?;
out.extend_from_slice(&request.token.to_le_bytes());
if let Some(key) = hmac_key {
hmac::compute_hmac_in_place(key, &mut out, hmac::hmac_offset())?;
}
Ok(out)
envelope::finish(out, hmac_key)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::{hmac, FLAG_HMAC};
use crate::{hmac, FLAG_HMAC, HMAC_SIZE};
#[test]
fn hmac_close_request_places_token_after_hmac() {