1use rivide::dsa::MlDsa65;
19
20fn main() {
21 println!("Rivide Rust: ML-DSA-65 Digital Signature Demonstration");
22
23 println!("\n[Signer] Generating ML-DSA-65 signature keypair...");
25 let signer = MlDsa65::keypair().expect("Failed to generate signer keypair");
26 println!(
27 " Public Key : {} bytes",
28 signer.public_key.as_bytes().len()
29 );
30 println!(
31 " Secret Key : {} bytes",
32 signer.secret_key.as_bytes().len()
33 );
34
35 let message = b"Post-quantum signed contract payload: Transfer $100,000 to Bob.";
37 println!(
38 "\n[Signer] Signing message: \"{}\"...",
39 std::str::from_utf8(message).unwrap()
40 );
41 let signature = MlDsa65::sign(message, &signer.secret_key).expect("Failed to sign message");
42 println!(" Signature : {} bytes", signature.as_bytes().len());
43
44 println!("\n[Verifier] Verifying signature against public key...");
46 let is_valid = MlDsa65::verify(&signature, message, &signer.public_key);
47 if is_valid {
48 println!("[SUCCESS] Signature is VALID and AUTHENTIC!");
49 } else {
50 panic!("FATAL: Signature verification failed!");
51 }
52
53 let tampered_msg = b"Post-quantum signed contract payload: Transfer $1,000,000 to Bob.";
55 println!(
56 "\n[Verifier] Testing tampered message: \"{}\"...",
57 std::str::from_utf8(tampered_msg).unwrap()
58 );
59 let is_tampered_valid = MlDsa65::verify(&signature, tampered_msg, &signer.public_key);
60 if !is_tampered_valid {
61 println!("[SUCCESS] Tampered message correctly REJECTED!");
62 } else {
63 panic!("FATAL: Tampered message was incorrectly accepted!");
64 }
65}