qfall_math/integer_mod_q.rs
1// Copyright © 2023 Marcel Luca Schmidt
2//
3// This file is part of qFALL-math.
4//
5// qFALL-math is free software: you can redistribute it and/or modify it under
6// the terms of the Mozilla Public License Version 2.0 as published by the
7// Mozilla Foundation. See <https://mozilla.org/en-US/MPL/2.0/>.
8
9//! Types for residue classes over integers with arbitrary length based on [`Zq`].
10//!
11//! This module contains the type [`Zq`] for integers with arbitrary length
12//! modulus `q` and constructions over it.
13//! Each struct provides examples regarding usage.
14//! In general you can mix [`Zq`]'s with any type of rust integer, whenever the
15//! corresponding method takes as input integers of type [`Into<Z>`],
16//! e.g. the standard rust integers.
17//! The [`Modulus`] is constructed as an explicit struct and can be shared across several
18//! [`Zq`], [`MatZq`] and [`PolyOverZq`] instances with efficient memory usage.
19
20mod mat_ntt_polynomial_ring_zq;
21mod mat_polynomial_ring_zq;
22mod mat_zq;
23mod modulus;
24mod modulus_polynomial_ring_zq;
25mod ntt_basis_polynomial_ring_zq;
26mod ntt_polynomial_ring_zq;
27mod poly_over_zq;
28mod polynomial_ring_zq;
29mod z_q;
30
31pub use mat_ntt_polynomial_ring_zq::MatNTTPolynomialRingZq;
32pub use mat_polynomial_ring_zq::MatPolynomialRingZq;
33pub use mat_zq::MatZq;
34pub use modulus::Modulus;
35pub use modulus_polynomial_ring_zq::ModulusPolynomialRingZq;
36pub use ntt_basis_polynomial_ring_zq::{ConvolutionType, NTTBasisPolynomialRingZq};
37pub use ntt_polynomial_ring_zq::NTTPolynomialRingZq;
38pub use poly_over_zq::PolyOverZq;
39pub use polynomial_ring_zq::PolynomialRingZq;
40pub use z_q::Zq;
41pub(crate) use z_q::fmpz_mod_helpers;