pub use reddb_crypto::{
decrypt_page, encrypt_page, parse_key, PageEnvelopeError, PAGE_ENVELOPE_OVERHEAD,
};
pub fn key_from_env() -> Result<Option<[u8; 32]>, String> {
match crate::utils::env_with_file_fallback("RED_ENCRYPTION_KEY") {
Some(raw) => parse_key(&raw).map(Some),
None => Ok(None),
}
}
#[cfg(test)]
mod tests {
use super::*;
fn key() -> [u8; 32] {
let mut k = [0u8; 32];
for (i, b) in k.iter_mut().enumerate() {
*b = i as u8;
}
k
}
#[test]
fn facade_round_trips_through_canonical_crate() {
let plaintext = b"facade still encrypts";
let frame = encrypt_page(&key(), 3, plaintext).unwrap();
assert_eq!(frame.len(), PAGE_ENVELOPE_OVERHEAD + plaintext.len());
let recovered = decrypt_page(&key(), 3, &frame).unwrap();
assert_eq!(recovered, plaintext);
}
}