use enprot::pki::{self, SigAlgKind};
fn main() -> enprot::Result<()> {
let mut rng = botan::RandomNumberGenerator::new_system().map_err(enprot::Error::botan)?;
let (priv_pem, pub_pem) = pki::keygen(SigAlgKind::Ed25519, &mut rng)?;
println!("Generated Ed25519 keypair.");
println!(" priv PEM: {} bytes", priv_pem.len());
println!(" pub PEM: {} bytes", pub_pem.len());
let fp = enprot::capability::KeyFp::from_pem(&pub_pem)?;
println!(" fingerprint: {}", fp);
let msg = b"hello enprot";
let sig = pki::sign(SigAlgKind::Ed25519, &priv_pem, msg, &mut rng)?;
println!("\nSigned {} bytes.", msg.len());
println!(" signature: {} bytes", sig.len());
let ok = pki::verify(SigAlgKind::Ed25519, &pub_pem, msg, &sig)?;
println!("\nVerification: {}", if ok { "VALID" } else { "INVALID" });
let ok_tampered = pki::verify(SigAlgKind::Ed25519, &pub_pem, b"tampered", &sig)?;
println!(
"Tampered message: {}",
if ok_tampered { "VALID" } else { "INVALID" }
);
Ok(())
}