Challenge Assignment
Implement pqc-demo/src/hybrid.rs:
pub struct HybridKeyPair {
pub x25519_public: Vec<u8>,
pub mlkem_public: Vec<u8>,
}
pub fn server_keygen() -> anyhow::Result<(HybridKeyPair, ...)>;
pub fn client_encaps(server_keys: &HybridKeyPair) -> anyhow::Result<(Vec<u8>, Vec<u8>)>;
pub fn server_decaps(private_state: .., ciphertext: &[u8]) -> anyhow::Result<Vec<u8>>;
Write a test verifying:
- Both sides derive the same
combined_shared_secret
- A corrupted x25519 contribution → different combined secret
- A corrupted ML-KEM contribution → different combined secret