1use crate::error::{EnigmaStorageError, Result};
2
3pub const ENVELOPE_VERSION: u8 = 1;
4
5pub fn encode_envelope(nonce: &[u8; 24], ciphertext: &[u8]) -> Vec<u8> {
6 let mut out = Vec::with_capacity(1 + nonce.len() + ciphertext.len());
7 out.push(ENVELOPE_VERSION);
8 out.extend_from_slice(nonce);
9 out.extend_from_slice(ciphertext);
10 out
11}
12
13pub fn decode_envelope(data: &[u8]) -> Result<(u8, [u8; 24], Vec<u8>)> {
14 if data.len() < 1 + 24 {
15 return Err(EnigmaStorageError::CorruptedData);
16 }
17 let version = data[0];
18 let mut nonce = [0u8; 24];
19 nonce.copy_from_slice(&data[1..25]);
20 let ciphertext = data[25..].to_vec();
21 Ok((version, nonce, ciphertext))
22}