const N: usize = 677;
const LOGQ: usize = 11;
const Q: u32 = 1 << LOGQ;
const Q_MASK: u16 = (Q as u16).wrapping_sub(1);
const WEIGHT: usize = (Q as usize) / 8 - 2;
const PRFKEYBYTES: usize = 32;
const SHAREDKEYBYTES: usize = 32;
const SAMPLE_IID_BYTES: usize = N - 1;
const SAMPLE_FT_BYTES: usize = (30 * (N - 1) + 7) / 8;
const SAMPLE_FG_BYTES: usize = SAMPLE_IID_BYTES + SAMPLE_FT_BYTES;
const SAMPLE_RM_BYTES: usize = SAMPLE_IID_BYTES + SAMPLE_FT_BYTES;
const PACK_DEG: usize = N - 1;
const PACK_TRINARY_BYTES: usize = (PACK_DEG + 4) / 5;
const OWCPA_MSGBYTES: usize = 2 * PACK_TRINARY_BYTES;
const OWCPA_PUBLICKEYBYTES: usize = (LOGQ * PACK_DEG + 7) / 8;
const OWCPA_SECRETKEYBYTES: usize = 2 * PACK_TRINARY_BYTES + OWCPA_PUBLICKEYBYTES;
const OWCPA_BYTES: usize = (LOGQ * PACK_DEG + 7) / 8;
pub const PUBLIC_KEY_BYTES: usize = OWCPA_PUBLICKEYBYTES;
pub const PRIVATE_KEY_BYTES: usize = OWCPA_SECRETKEYBYTES + PRFKEYBYTES;
pub const CIPHERTEXT_BYTES: usize = OWCPA_BYTES;
pub const SHARED_SECRET_BYTES: usize = SHAREDKEYBYTES;
struct Hps677Variant;
impl crate::public_key::ntru_pqc_shared::NtruVariant<N, LOGQ> for Hps677Variant {
const Q_MASK: u16 = Q_MASK;
const WEIGHT: usize = WEIGHT;
const SAMPLE_FG_BYTES: usize = SAMPLE_FG_BYTES;
const SAMPLE_RM_BYTES: usize = SAMPLE_RM_BYTES;
const PACK_TRINARY_BYTES: usize = PACK_TRINARY_BYTES;
const OWCPA_PUBLICKEYBYTES: usize = OWCPA_PUBLICKEYBYTES;
const OWCPA_SECRETKEYBYTES: usize = OWCPA_SECRETKEYBYTES;
const OWCPA_BYTES: usize = OWCPA_BYTES;
const OWCPA_MSGBYTES: usize = OWCPA_MSGBYTES;
fn poly_sq_tobytes(r: &mut [u8], a: &[u16; N]) {
crate::public_key::ntru_pqc_shared::poly_sq_tobytes_logq11::<N>(r, a);
}
fn poly_sq_frombytes(r: &mut [u16; N], a: &[u8]) {
crate::public_key::ntru_pqc_shared::poly_sq_frombytes_logq11::<N>(r, a);
}
}
crate::public_key::ntru_pqc_shared::define_pqc_kem! {
namespace = NtruHps677,
public_key = NtruHps677PublicKey,
private_key = NtruHps677PrivateKey,
ciphertext = NtruHps677Ciphertext,
shared_secret = NtruHps677SharedSecret,
variant = Hps677Variant,
kat_path = "../../kat/ntruhps677.rsp",
}