enigma_storage/
codec.rs

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}