poulpy/rns/src/modulus/impl_u64/mod.rs
rns/src/modulus/impl_u64/mod.rsRaw
1pub mod barrett;
2pub mod montgomery;
3pub mod operations;
4pub mod prime;
5
6use crate::modulus::ReduceOnce;
7
8impl ReduceOnce<u64> for u64 {
9 #[inline(always)]
10 fn reduce_once_constant_time_assign(&mut self, q: u64) {
11 debug_assert!(q < 0x8000000000000000, "2q >= 2^64");
12 *self -= (q.wrapping_sub(*self) >> 63) * q;
13 }
14
15 #[inline(always)]
16 fn reduce_once_constant_time(&self, q: u64) -> u64 {
17 debug_assert!(q < 0x8000000000000000, "2q >= 2^64");
18 self - (q.wrapping_sub(*self) >> 63) * q
19 }
20
21 #[inline(always)]
22 fn reduce_once_assign(&mut self, q: u64) {
23 debug_assert!(q < 0x8000000000000000, "2q >= 2^64");
24 *self = *self.min(&mut self.wrapping_sub(q))
25 }
26
27 #[inline(always)]
28 fn reduce_once(&self, q: u64) -> u64 {
29 debug_assert!(q < 0x8000000000000000, "2q >= 2^64");
30 *self.min(&mut self.wrapping_sub(q))
31 }
32}