pub const DILITHIUM_N: usize = 256;
pub const DILITHIUM_Q: u32 = 8380417;
pub const FIPS204_SIGN_INTERNAL_MIN_LOOP_LIMIT: u16 = 814;
pub trait DilithiumSchemeParams: Send + Sync + 'static {
const NAME: &'static str;
const N: usize = DILITHIUM_N;
const Q: u32 = DILITHIUM_Q;
const D_PARAM: u32;
const K_DIM: usize;
const L_DIM: usize;
const LAMBDA: usize;
const CHALLENGE_BYTES: usize;
const ETA_S1S2: u32;
const GAMMA1_PARAM: u32;
const GAMMA1_BITS: usize;
const GAMMA2_PARAM: u32;
const BETA_PARAM: u32;
const OMEGA_PARAM: u32;
const TAU_PARAM: usize;
const PUBLIC_KEY_BYTES: usize;
const SECRET_KEY_BYTES: usize;
const SIGNATURE_SIZE: usize;
const SEED_RHO_BYTES: usize = 32;
const SEED_KEY_BYTES: usize = 32;
const SEED_ZETA_BYTES: usize = 32;
const HASH_TR_BYTES: usize = 32;
const MAX_SIGN_ABORTS: u16 = 1000;
const FIXED_SIGNING_WINDOW: u16 = FIPS204_SIGN_INTERNAL_MIN_LOOP_LIMIT;
const W1_BITS: usize;
const Z_BITS: usize;
}
pub struct Dilithium2Params {
pub n: usize,
pub q: u32,
pub d: u32,
pub k: usize,
pub l: usize,
pub eta: u32,
pub tau: usize,
pub public_key_size: usize,
pub secret_key_size: usize,
pub signature_size: usize,
}
pub const DILITHIUM2: Dilithium2Params = Dilithium2Params {
n: DILITHIUM_N,
q: DILITHIUM_Q,
d: 13,
k: 4,
l: 4,
eta: 2,
tau: 39,
public_key_size: 1312,
secret_key_size: 2560, signature_size: 2420, };
impl DilithiumSchemeParams for Dilithium2Params {
const NAME: &'static str = "Dilithium2";
const D_PARAM: u32 = 13;
const K_DIM: usize = 4;
const L_DIM: usize = 4;
const LAMBDA: usize = 128; const CHALLENGE_BYTES: usize = 32; const ETA_S1S2: u32 = 2;
const GAMMA1_PARAM: u32 = 1 << 17; const GAMMA1_BITS: usize = 18; const GAMMA2_PARAM: u32 = (DILITHIUM_Q - 1) / 88; const BETA_PARAM: u32 = 78; const OMEGA_PARAM: u32 = 80;
const TAU_PARAM: usize = 39;
const PUBLIC_KEY_BYTES: usize = 1312;
const SECRET_KEY_BYTES: usize = 2560;
const SIGNATURE_SIZE: usize = 2420;
const W1_BITS: usize = 6;
const Z_BITS: usize = 18;
}
pub struct Dilithium3Params {
pub n: usize,
pub q: u32,
pub d: u32,
pub k: usize,
pub l: usize,
pub eta: u32,
pub tau: usize,
pub public_key_size: usize,
pub secret_key_size: usize,
pub signature_size: usize,
}
pub const DILITHIUM3: Dilithium3Params = Dilithium3Params {
n: DILITHIUM_N,
q: DILITHIUM_Q,
d: 13,
k: 6,
l: 5,
eta: 4,
tau: 49,
public_key_size: 1952,
secret_key_size: 4032, signature_size: 3309, };
impl DilithiumSchemeParams for Dilithium3Params {
const NAME: &'static str = "Dilithium3";
const D_PARAM: u32 = 13;
const K_DIM: usize = 6;
const L_DIM: usize = 5;
const LAMBDA: usize = 192; const CHALLENGE_BYTES: usize = 48; const ETA_S1S2: u32 = 4;
const GAMMA1_PARAM: u32 = 1 << 19; const GAMMA1_BITS: usize = 20; const GAMMA2_PARAM: u32 = (DILITHIUM_Q - 1) / 32; const BETA_PARAM: u32 = 196; const OMEGA_PARAM: u32 = 55;
const TAU_PARAM: usize = 49;
const PUBLIC_KEY_BYTES: usize = 1952;
const SECRET_KEY_BYTES: usize = 4032;
const SIGNATURE_SIZE: usize = 3309;
const W1_BITS: usize = 5;
const Z_BITS: usize = 20;
}
pub struct Dilithium5Params {
pub n: usize,
pub q: u32,
pub d: u32,
pub k: usize,
pub l: usize,
pub eta: u32,
pub tau: usize,
pub public_key_size: usize,
pub secret_key_size: usize,
pub signature_size: usize,
}
pub const DILITHIUM5: Dilithium5Params = Dilithium5Params {
n: DILITHIUM_N,
q: DILITHIUM_Q,
d: 13,
k: 8,
l: 7,
eta: 2,
tau: 60,
public_key_size: 2592,
secret_key_size: 4896, signature_size: 4627, };
impl DilithiumSchemeParams for Dilithium5Params {
const NAME: &'static str = "Dilithium5";
const D_PARAM: u32 = 13;
const K_DIM: usize = 8;
const L_DIM: usize = 7;
const LAMBDA: usize = 256; const CHALLENGE_BYTES: usize = 64; const ETA_S1S2: u32 = 2;
const GAMMA1_PARAM: u32 = 1 << 19; const GAMMA1_BITS: usize = 20; const GAMMA2_PARAM: u32 = (DILITHIUM_Q - 1) / 32; const BETA_PARAM: u32 = 120; const OMEGA_PARAM: u32 = 75;
const TAU_PARAM: usize = 60;
const PUBLIC_KEY_BYTES: usize = 2592;
const SECRET_KEY_BYTES: usize = 4896;
const SIGNATURE_SIZE: usize = 4627;
const W1_BITS: usize = 5;
const Z_BITS: usize = 20;
}