arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}