#![deny(unsafe_code)]
#![deny(missing_docs)]
#![deny(clippy::unwrap_used)]
#![deny(clippy::panic)]
pub mod constants;
pub mod reduction;
pub mod ntt;
pub mod multiply;
#[cfg(test)]
pub(crate) mod test_utils;
#[cfg(target_feature = "avx2")]
pub mod avx2;
#[cfg(target_arch = "aarch64")]
pub mod neon;
pub use constants::{MLKEM_N, MLKEM_Q, ZETAS};
pub use reduction::{barrett_reduce, montgomery_reduce};
pub use ntt::{basemul, invntt, ntt};
pub use multiply::{polynomial_multiply, polynomial_multiply_ntt};
#[cfg(target_feature = "avx2")]
pub use avx2::{barrett_reduce_simd, basemul_simd, invntt_avx2, montgomery_reduce_simd, ntt_avx2};
#[cfg(target_feature = "avx2")]
pub use multiply::polynomial_multiply_avx2;
#[cfg(target_arch = "aarch64")]
pub use neon::{barrett_reduce_simd_neon, basemul_simd_neon, invntt_neon, montgomery_reduce_simd_neon, ntt_neon};
#[cfg(target_arch = "aarch64")]
pub use multiply::polynomial_multiply_neon;
#[cfg(not(any(target_feature = "avx2", target_arch = "aarch64")))]
pub use multiply::polynomial_multiply_simd;