use zeroize::{Zeroize, ZeroizeOnDrop};
pub enum Ph {
SHA256,
SHA512,
SHAKE128,
}
#[derive(Clone, Zeroize, ZeroizeOnDrop)]
#[repr(align(8))]
pub struct PrivateKey<const K: usize, const L: usize> {
pub(crate) rho: [u8; 32],
pub(crate) cap_k: [u8; 32],
pub(crate) tr: [u8; 64],
pub(crate) s_1_hat_mont: [T; L],
pub(crate) s_2_hat_mont: [T; K],
pub(crate) t_0_hat_mont: [T; K],
}
#[derive(Clone, Zeroize, ZeroizeOnDrop)]
#[repr(align(8))]
pub struct PublicKey<const K: usize, const L: usize> {
pub(crate) rho: [u8; 32],
pub(crate) tr: [u8; 64],
pub(crate) t1_d2_hat_mont: [T; K],
}
#[derive(Clone, Debug, PartialEq, Zeroize, ZeroizeOnDrop)]
#[repr(align(8))]
pub(crate) struct R(pub(crate) [i32; 256]);
pub(crate) const R0: R = R([0i32; 256]);
#[derive(Clone, Zeroize, ZeroizeOnDrop)]
#[repr(align(8))]
pub(crate) struct T(pub(crate) [i32; 256]);
pub(crate) const T0: T = T([0i32; 256]);
pub(crate) type Zq = i32;