A very slightly faster modexp.

This commit is contained in:
2018-05-01 23:04:06 -07:00
parent 9c60a3bc3e
commit bd0ddd848b

View File

@@ -165,21 +165,23 @@ impl UCN {
pub fn fastmodexp(&self, e: &UCN, mu: &BarrettUCN) -> UCN { pub fn fastmodexp(&self, e: &UCN, mu: &BarrettUCN) -> UCN {
let mut b = self.reduce(&mu); let mut b = self.reduce(&mu);
let mut eprime = e.clone();
let mut result = UCN::from(1 as u8); let mut result = UCN::from(1 as u8);
loop { for digit in e.contents.iter() {
if eprime.is_zero() { let mut work = *digit;
return result;
}
if eprime.is_odd() { for _ in 0..64 {
result = (result * &b).reduce(&mu); if (work & 0x1) == 1 {
} result = (result * &b).reduce(&mu);
}
b = (&b * &b).reduce(&mu); b = (&b * &b).reduce(&mu);
eprime >>= 1;
work >>= 1;
}
} }
result
} }
pub fn to_bytes(&self, len: usize) -> Vec<u8> { pub fn to_bytes(&self, len: usize) -> Vec<u8> {