use xml_sec::xmldsig::{DefaultKeyResolver, DsigStatus, VerifyContext};
fn main() -> Result<(), Box<dyn std::error::Error>> {
let Some(path) = std::env::args().nth(1) else {
eprintln!("usage: cargo run --example verify --all-features -- <signed.xml>");
std::process::exit(2);
};
let xml = std::fs::read_to_string(path)?;
let resolver = DefaultKeyResolver::default();
let result = VerifyContext::new().key_resolver(&resolver).verify(&xml)?;
match result.status {
DsigStatus::Valid => println!("signature is valid"),
DsigStatus::Invalid(reason) => {
eprintln!("signature is invalid: {reason:?}");
std::process::exit(1);
}
_ => {
eprintln!("signature returned an unknown validation status");
std::process::exit(1);
}
}
Ok(())
}