arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/math/src/modulus/impl_u64/mod.rs
math/src/modulus/impl_u64/mod.rsRaw
 1pub mod prime;
 2pub mod barrett;
 3pub mod montgomery;
 4pub mod operations;
 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}