#[cfg(test)]
mod integration_tests {
use qudag_crypto::{
hqc::HQC,
ml_dsa::{MLDsa, SIGNATURE_LENGTH},
ml_kem::{KeyEncapsulation, MlKem768},
};
use std::time::Instant;
#[test]
fn test_kem_integration() {
let (pk, sk) = MlKem768::keygen().expect("Failed to generate ML-KEM keypair");
let (ct, ss1) = MlKem768::encapsulate(&pk).expect("Failed to encapsulate");
let ss2 = MlKem768::decapsulate(&sk, &ct).expect("Failed to decapsulate");
assert_eq!(ss1.as_ref(), ss2.as_ref());
}
#[test]
fn test_signature_integration() {
let message = b"Test message for integration testing";
let (pk, sk) = MLDsa::keygen().expect("Failed to generate ML-DSA keypair");
let signature = sk.sign(message).expect("Failed to sign message");
assert_eq!(signature.len(), SIGNATURE_LENGTH);
let pk_bytes = pk.public_key.expect("Missing public key");
MLDsa::verify(message, &signature, &pk_bytes).expect("Failed to verify signature");
}
#[test]
fn test_encryption_integration() {
let message = b"Test message for HQC encryption";
let (pk, sk) = HQC::keygen().expect("Failed to generate HQC keypair");
let ciphertext = pk.encrypt(message).expect("Failed to encrypt message");
let decrypted = sk.decrypt(&ciphertext).expect("Failed to decrypt message");
assert_eq!(message[..], decrypted[..32]);
}
#[test]
fn test_performance_requirements() {
let iterations = 100;
let mut total_time = std::time::Duration::new(0, 0);
for _ in 0..iterations {
let start = Instant::now();
let message = b"Performance test message";
let (pk, sk) = MLDsa::keygen().expect("Failed to generate keypair");
let signature = sk.sign(message).expect("Failed to sign");
let pk_bytes = pk.public_key.expect("Missing public key");
MLDsa::verify(message, &signature, &pk_bytes).expect("Failed to verify");
total_time += start.elapsed();
}
let avg_time = total_time / iterations;
println!("Average operation time: {:?}", avg_time);
assert!(
avg_time.as_millis() < 100,
"Performance requirements not met"
);
}
#[test]
fn test_memory_safety() {
use std::mem;
let (pk, sk) = MlKem768::keygen().expect("Failed to generate keypair");
assert!(
mem::align_of_val(&pk) >= 16,
"Public key not properly aligned"
);
assert!(
mem::align_of_val(&sk) >= 16,
"Secret key not properly aligned"
);
let mut secret = [0u8; 32];
{
let (ct, ss) = MlKem768::encapsulate(&pk).expect("Failed to encapsulate");
secret.copy_from_slice(ss.as_ref());
}
assert_ne!(secret, [0u8; 32]);
}
}