use hexvault::stack::{self, Layer, LayerContext};
use hexvault::{generate_master_key, keys};
#[test]
fn test_layer_peeling_order() {
let master = generate_master_key().unwrap();
let partition = keys::derive_partition_key(&master, "p").unwrap();
let cell_id = "test-cell";
let plaintext = b"layered secret";
let ctx = LayerContext::new(Some("policy".into()), Some("session".into())).unwrap();
let sealed = stack::seal(&partition, cell_id, Layer::SessionBound, &ctx, plaintext).unwrap();
let result = stack::peel(&partition, cell_id, Layer::AccessGated, &ctx, &sealed);
assert!(result.is_err(), "Managed to peel bypassing the top layer!");
}
#[test]
fn test_invalid_context_rejection() {
let master = generate_master_key().unwrap();
let partition = keys::derive_partition_key(&master, "p").unwrap();
let cell_id = "test-auth";
let plaintext = b"guarded secret";
let correct_ctx = LayerContext::new(Some("secret-policy".into()), None).unwrap();
let sealed = stack::seal(
&partition,
cell_id,
Layer::AccessGated,
&correct_ctx,
plaintext,
)
.unwrap();
let wrong_ctx = LayerContext::new(Some("public-policy".into()), None).unwrap();
let result = stack::peel(&partition, cell_id, Layer::AccessGated, &wrong_ctx, &sealed);
assert!(
result.is_err(),
"Peeling succeeded with wrong access policy ID!"
);
let missing_ctx = LayerContext::new(None, None).unwrap();
let result_missing = stack::peel(
&partition,
cell_id,
Layer::AccessGated,
&missing_ctx,
&sealed,
);
assert!(
result_missing.is_err(),
"Peeling succeeded with missing access policy ID!"
);
}