use okami::identity::{AgentIdentity, DOMAIN_AUDIT, DOMAIN_TOKEN};
fn main() {
let identity =
AgentIdentity::new("example.org", "agent/verifier").expect("identity generation failed");
let vk_bytes = identity.credential().verifying_key_bytes.clone();
let payload = b"sensitive-payload-for-cross-protocol-test";
println!("sign under DOMAIN_TOKEN => ok");
let sig = identity
.sign_with_domain(DOMAIN_TOKEN, payload)
.expect("sign_with_domain failed");
let result_correct = AgentIdentity::verify_with_domain(&vk_bytes, DOMAIN_TOKEN, payload, &sig)
.expect("verify_with_domain returned Err unexpectedly");
print!("verify DOMAIN_TOKEN (same) => {:?}", result_correct);
if result_correct {
println!(" [PASS]");
} else {
println!(" [FAIL — same-domain verify returned false]");
std::process::exit(1);
}
let result_wrong = AgentIdentity::verify_with_domain(&vk_bytes, DOMAIN_AUDIT, payload, &sig)
.expect("verify_with_domain returned Err unexpectedly");
print!("verify DOMAIN_AUDIT (wrong) => {:?}", result_wrong);
if !result_wrong {
println!(" [PASS — cross-protocol blocked]");
} else {
println!(" [FAIL — cross-protocol replay succeeded, domain separation is broken]");
std::process::exit(1);
}
println!("\nAll cross-protocol checks passed.");
}