use hanzo_pqc::{
kem::{Kem, KemAlgorithm, MlKem},
signature::{Signature, SignatureAlgorithm, MlDsa},
hybrid::{HybridMode, HybridKem},
privacy_tiers::PrivacyTier,
config::PqcConfig,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== Hanzo PQC Example Usage ===\n");
basic_kem_example().await?;
signature_example().await?;
hybrid_example().await?;
privacy_tier_example();
Ok(())
}
async fn basic_kem_example() -> Result<(), Box<dyn std::error::Error>> {
println!("1. ML-KEM Key Encapsulation Example");
println!("------------------------------------");
let kem = MlKem::new();
let keypair = kem.generate_keypair(KemAlgorithm::MlKem768).await?;
println!("✓ Generated ML-KEM-768 keypair");
println!(" Public key size: {} bytes", keypair.encap_key.key_bytes.len());
println!(" Private key size: {} bytes", keypair.decap_key.key_bytes.len());
let encap_output = kem.encapsulate(&keypair.encap_key).await?;
println!("\n✓ Encapsulation complete");
println!(" Ciphertext size: {} bytes", encap_output.ciphertext.len());
println!(" Shared secret: {} bytes", encap_output.shared_secret.len());
let recovered_secret = kem.decapsulate(&keypair.decap_key, &encap_output.ciphertext).await?;
println!("\n✓ Decapsulation complete");
assert_eq!(encap_output.shared_secret, recovered_secret);
println!("✓ Shared secrets match!\n");
Ok(())
}
async fn signature_example() -> Result<(), Box<dyn std::error::Error>> {
println!("2. ML-DSA Digital Signature Example");
println!("------------------------------------");
let dsa = MlDsa::new();
let (verifying_key, signing_key) = dsa.generate_keypair(SignatureAlgorithm::MlDsa65).await?;
println!("✓ Generated ML-DSA-65 keypair");
println!(" Public key size: {} bytes", verifying_key.key_bytes.len());
println!(" Private key size: {} bytes", signing_key.key_bytes.len());
let message = b"This is a quantum-safe signed message from Hanzo Node";
let signature = dsa.sign(&signing_key, message).await?;
println!("\n✓ Message signed");
println!(" Signature size: {} bytes", signature.signature_bytes.len());
let is_valid = dsa.verify(&verifying_key, message, &signature).await?;
println!("\n✓ Signature verification: {}", if is_valid { "VALID" } else { "INVALID" });
let tampered_message = b"This is a MODIFIED message";
let is_invalid = dsa.verify(&verifying_key, tampered_message, &signature).await?;
println!("✓ Tampered message verification: {}\n", if !is_invalid { "VALID" } else { "INVALID (as expected)" });
Ok(())
}
async fn hybrid_example() -> Result<(), Box<dyn std::error::Error>> {
println!("3. Hybrid Mode Example (ML-KEM + X25519)");
println!("-----------------------------------------");
let hybrid_kem = HybridKem::new(HybridMode::MlKem768X25519);
let (encap_key, decap_key) = hybrid_kem.generate_keypair(HybridMode::MlKem768X25519).await?;
println!("✓ Generated hybrid keypair");
println!(" PQ public key size: {} bytes", encap_key.pq_key.key_bytes.len());
println!(" Classical public key size: {} bytes", encap_key.classical_key.key_bytes.len());
let context = b"example context";
let (ciphertext, shared_secret) = hybrid_kem.encapsulate(&encap_key, context).await?;
println!("\n✓ Hybrid encapsulation complete");
println!(" PQ ciphertext: {} bytes", ciphertext.pq_ciphertext.len());
println!(" Classical ciphertext: {} bytes", ciphertext.classical_ciphertext.len());
println!(" Combined shared secret: {} bytes", shared_secret.len());
let recovered = hybrid_kem.decapsulate(
&decap_key,
&ciphertext,
context
).await?;
assert_eq!(shared_secret, recovered);
println!("\n✓ Hybrid shared secrets match!");
println!(" Defense-in-depth: Protected against both classical and quantum attacks\n");
Ok(())
}
fn privacy_tier_example() {
println!("4. Privacy Tier Configuration Example");
println!("--------------------------------------");
let tiers = [
PrivacyTier::AccessOpen,
PrivacyTier::AccessAtRest,
PrivacyTier::AccessCpuTee,
PrivacyTier::AccessCpuTeePlusGpuCc,
PrivacyTier::AccessGpuTeeIoMax,
];
for tier in tiers {
let config = PqcConfig::for_privacy_tier(tier);
println!("\n{:?} Configuration:", tier);
println!(" KEM Algorithm: {:?}", config.kem);
println!(" Signature Algorithm: {:?}", config.sig);
println!(" Hybrid Mode: {}", if config.hybrid { "Enabled" } else { "Disabled" });
println!(" FIPS Mode: {}", if config.fips_mode { "Enabled" } else { "Disabled" });
println!(" Attestation Required: {}", if config.verify_attestation { "Yes" } else { "No" });
println!(" Key Lifetime: {} seconds", config.key_lifetime);
}
println!("\n✓ Privacy tiers provide automatic security level selection");
println!("✓ Higher tiers use stronger algorithms and shorter key lifetimes\n");
}