streaming_crypto/core_api/stream_v2/framing/
decode.rs1use crate::stream_v2::framing::types::FrameView;
2use crate::stream_v2::framing::types::{FrameHeader, FrameError};
3
4#[inline]
8pub fn decode_frame_header(buf: &[u8]) -> Result<FrameHeader, FrameError> {
9 FrameHeader::from_bytes(buf)
10}
11
12pub fn decode_frame(wire: &[u8]) -> Result<FrameView<'_>, FrameError> {
18 let header = FrameHeader::from_bytes(wire)?;
19
20 let expected_len = FrameHeader::LEN + header.ciphertext_len() as usize;
21 if wire.len() != expected_len {
22 return Err(FrameError::LengthMismatch {
23 expected: expected_len,
24 actual: wire.len(),
25 });
26 }
27
28 let ciphertext = &wire[FrameHeader::LEN..expected_len];
29
30 Ok(FrameView { header, ciphertext })
31
32 }
38
39#[inline]
42pub fn decode_header_in_place(buf: &[u8]) -> Result<FrameHeader, FrameError> {
43 FrameHeader::from_bytes(buf)
44}
45
46pub fn decode_in_place<'a>(wire: &'a [u8]) -> Result<FrameView<'a>, FrameError> {
47 let header = FrameHeader::from_bytes(wire)?;
48
49 let expected_len = FrameHeader::LEN + header.ciphertext_len() as usize;
50 if wire.len() != expected_len {
51 return Err(FrameError::LengthMismatch {
52 expected: expected_len,
53 actual: wire.len(),
54 });
55 }
56
57 let ciphertext = &wire[FrameHeader::LEN..expected_len];
58
59 Ok(FrameView { header, ciphertext })
60}
61
62