#![cfg_attr(not(feature = "std"), no_std)]
use dcrypt_algorithms::poly::params::{Modulus, NttModulus, PostInvNtt};
use dcrypt_params::pqc::kyber as global_params;
pub const KYBER_N: usize = global_params::KYBER_N;
pub const KYBER_Q: u32 = global_params::KYBER_Q as u32;
pub const KYBER_SS_BYTES: usize = 32;
pub trait KyberParams: Send + Sync + 'static {
const K: usize;
const ETA1: u8;
const ETA2: u8;
const DU: usize;
const DV: usize;
const NAME: &'static str;
const PUBLIC_KEY_BYTES: usize;
const SECRET_KEY_BYTES: usize;
const CIPHERTEXT_BYTES: usize;
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct KyberPolyModParams;
impl Modulus for KyberPolyModParams {
const Q: u32 = KYBER_Q;
const N: usize = KYBER_N;
}
impl NttModulus for KyberPolyModParams {
const ZETA: u32 = 17; const ZETAS: &'static [u32] = &[]; const N_INV: u32 = 2385; const MONT_R: u32 = 1353; const NEG_QINV: u32 = 0x94570CFF;
const PSIS: &'static [u32] = &[];
const INV_PSIS: &'static [u32] = &[];
const POST_INVNTT_MODE: PostInvNtt = PostInvNtt::Standard;
}
pub struct Kyber512ParamsImpl;
impl KyberParams for Kyber512ParamsImpl {
const K: usize = global_params::KYBER512.k;
const ETA1: u8 = global_params::KYBER512.eta1;
const ETA2: u8 = global_params::KYBER512.eta2;
const DU: usize = global_params::KYBER512.du;
const DV: usize = global_params::KYBER512.dv;
const NAME: &'static str = "Kyber-512";
const PUBLIC_KEY_BYTES: usize = global_params::KYBER512.public_key_size;
const SECRET_KEY_BYTES: usize = global_params::KYBER512.secret_key_size;
const CIPHERTEXT_BYTES: usize = global_params::KYBER512.ciphertext_size;
}
pub struct Kyber768ParamsImpl;
impl KyberParams for Kyber768ParamsImpl {
const K: usize = global_params::KYBER768.k;
const ETA1: u8 = global_params::KYBER768.eta1;
const ETA2: u8 = global_params::KYBER768.eta2;
const DU: usize = global_params::KYBER768.du;
const DV: usize = global_params::KYBER768.dv;
const NAME: &'static str = "Kyber-768";
const PUBLIC_KEY_BYTES: usize = global_params::KYBER768.public_key_size;
const SECRET_KEY_BYTES: usize = global_params::KYBER768.secret_key_size;
const CIPHERTEXT_BYTES: usize = global_params::KYBER768.ciphertext_size;
}
pub struct Kyber1024ParamsImpl;
impl KyberParams for Kyber1024ParamsImpl {
const K: usize = global_params::KYBER1024.k;
const ETA1: u8 = global_params::KYBER1024.eta1;
const ETA2: u8 = global_params::KYBER1024.eta2;
const DU: usize = global_params::KYBER1024.du;
const DV: usize = global_params::KYBER1024.dv;
const NAME: &'static str = "Kyber-1024";
const PUBLIC_KEY_BYTES: usize = global_params::KYBER1024.public_key_size;
const SECRET_KEY_BYTES: usize = global_params::KYBER1024.secret_key_size;
const CIPHERTEXT_BYTES: usize = global_params::KYBER1024.ciphertext_size;
}
pub const KYBER_SYMKEY_SEED_BYTES: usize = 32;
pub const KYBER_RHO_SEED_BYTES: usize = 32;
pub const KYBER_NOISE_SEED_BYTES: usize = 32;