enc_rust 0.2.2

A pure rust implementation of the Module-Lattice-based standards ML-KEM and (soon) ML-DSA, also known as the PQC scheme Crystals Kyber and Dilithium.
Documentation
#![allow(warnings)]
#[cfg(test)]
mod kem_tests {
    use crate::{kem::*, params::SecurityLevel, tests::params::params_tests::sec_level_strategy};
    use proptest::prelude::*;

    prop_compose! {
        fn new_keypair()
            (sec_level in sec_level_strategy())
            -> (PublicKey, PrivateKey) {
                generate_key_pair(None, sec_level.k()).unwrap()
            }
    }

    proptest! {
        #[test]
        fn encapsulate_decapsulate((pk, sk) in new_keypair()) {
            let (ciphertext, shared_secret) = pk.encapsulate(None, None).unwrap();

            let decap_secret = sk.decapsulate(ciphertext.as_bytes()).unwrap();

            assert_eq!(shared_secret, decap_secret);
        }

        #[test]
        fn pack_unpack((pk, sk) in new_keypair()) {
            let mut pk_bytes = [0u8; 1568];
            pk.pack(&mut pk_bytes[..pk.sec_level().public_key_bytes()]);
            let unpacked_pk = PublicKey::unpack(&pk_bytes[..pk.sec_level().public_key_bytes()]).unwrap();
            assert_eq!(pk, unpacked_pk);

            #[cfg(feature = "decap_key")]
            {
                let mut sk_bytes = [0u8; 3168];
                sk.pack(&mut sk_bytes[..pk.sec_level().private_key_bytes()]);
                let unpacked_sk = PrivateKey::unpack(&sk_bytes[..sk.sec_level().private_key_bytes()]).unwrap();
                assert_eq!(sk, unpacked_sk);
            }
            #[cfg(not(feature = "decap_key"))]
            {
                let sk_bytes = sk.pack();
                let unpacked_sk = match pk.sec_level() {
                    SecurityLevel::FiveOneTwo { .. } => PrivateKey::unpack_512(sk_bytes),
                    SecurityLevel::SevenSixEight { .. } => PrivateKey::unpack_768(sk_bytes),
                    SecurityLevel::TenTwoFour { .. } => PrivateKey::unpack_1024(sk_bytes),
                };

                assert_eq!(sk, unpacked_sk);
            }

        }
    }
}