use hexvault::cell::Cell;
use hexvault::stack::{self, Layer, LayerContext};
use hexvault::{generate_master_key, keys};
#[test]
fn test_cross_cell_decryption_failure() {
let master = generate_master_key().unwrap();
let partition = keys::derive_partition_key(&master, "p").unwrap();
let ctx = LayerContext::empty();
let mut cell_a = Cell::new("cell-a".to_string());
let cell_b_id = "cell-b";
let plaintext = b"sensitive data";
cell_a
.store(&partition, "key1", plaintext, Layer::AtRest, &ctx)
.unwrap();
let sealed_in_a = stack::seal(&partition, "cell-a", Layer::AtRest, &ctx, plaintext).unwrap();
let result = stack::peel(&partition, cell_b_id, Layer::AtRest, &ctx, &sealed_in_a);
assert!(
result.is_err(),
"Cell B keys successfully decrypted Cell A data!"
);
}
#[test]
fn test_unique_key_derivation() {
let master = generate_master_key().unwrap();
let partition = keys::derive_partition_key(&master, "p").unwrap();
let ctx = LayerContext::empty();
let plaintext = b"identical payload";
let sealed_a = stack::seal(&partition, "cell-a", Layer::AtRest, &ctx, plaintext).unwrap();
let sealed_b = stack::seal(&partition, "cell-b", Layer::AtRest, &ctx, plaintext).unwrap();
assert_ne!(
sealed_a, sealed_b,
"Identical plaintext in different cells produced identical ciphertext!"
);
}