use rivide::dsa::MlDsa65;
fn main() {
println!("Rivide Rust: ML-DSA-65 Digital Signature Demonstration");
println!("\n[Signer] Generating ML-DSA-65 signature keypair...");
let signer = MlDsa65::keypair().expect("Failed to generate signer keypair");
println!(
" Public Key : {} bytes",
signer.public_key.as_bytes().len()
);
println!(
" Secret Key : {} bytes",
signer.secret_key.as_bytes().len()
);
let message = b"Post-quantum signed contract payload: Transfer $100,000 to Bob.";
println!(
"\n[Signer] Signing message: \"{}\"...",
std::str::from_utf8(message).unwrap()
);
let signature = MlDsa65::sign(message, &signer.secret_key).expect("Failed to sign message");
println!(" Signature : {} bytes", signature.as_bytes().len());
println!("\n[Verifier] Verifying signature against public key...");
let is_valid = MlDsa65::verify(&signature, message, &signer.public_key);
if is_valid {
println!("[SUCCESS] Signature is VALID and AUTHENTIC!");
} else {
panic!("FATAL: Signature verification failed!");
}
let tampered_msg = b"Post-quantum signed contract payload: Transfer $1,000,000 to Bob.";
println!(
"\n[Verifier] Testing tampered message: \"{}\"...",
std::str::from_utf8(tampered_msg).unwrap()
);
let is_tampered_valid = MlDsa65::verify(&signature, tampered_msg, &signer.public_key);
if !is_tampered_valid {
println!("[SUCCESS] Tampered message correctly REJECTED!");
} else {
panic!("FATAL: Tampered message was incorrectly accepted!");
}
}