#[path = "common/rec.rs"]
mod rec;
use std::sync::Arc;
use lens::rspcs::backend;
use rec::Rec;
use zheng::envelope::{Profile, keys, recursive, wrapped};
use zheng::recursion::ivc;
#[test]
fn keys_derived_under_a_corrupting_backend_are_refused() {
backend::install(Arc::new(Rec::new("evil-device", true)));
let (ivc_whir, _) = wrapped::chain();
let step = wrapped::admitted_ivc().1;
let raw = ivc::key(&recursive::params(), step).unwrap();
assert_ne!(
Some(raw.kw_root.map(|x| x.as_u64())),
recursive::KEY_ROOTS
.iter()
.find(|r| r.0 == recursive::params().header())
.map(|r| r.1)
);
let r5 = recursive::key(&recursive::params(), step as u32);
assert!(
r5.as_ref()
.is_err_and(|e| e.contains("not the pinned ones")),
"{:?}",
r5.map(|_| ())
);
assert!(keys::export(Profile::Recursive).is_err());
let w6 = ivc::key(&ivc_whir, step).unwrap();
assert!(recursive::pinned_key(&ivc_whir, w6).is_err());
assert!(wrapped::final_key().is_err());
eprintln!(
"keys derived under a corrupting backend: every verifier-facing key path refuses them"
);
}