Support fast modular exponentiation for when your base is roughly the same order of magnitude as the modulo.

This commit is contained in:
2018-04-13 11:51:39 -04:00
parent 551ebeac3b
commit 109e23789a
4 changed files with 30066 additions and 46 deletions

View File

@@ -3,7 +3,7 @@ use std::fs::File;
use std::io::Read;
use std::str::Lines;
use cryptonum::unsigned::UCN;
use cryptonum::unsigned::{UCN,BarrettUCN};
use cryptonum::signed::SCN;
fn next_value_set(line: &str) -> (String, SCN)
@@ -184,6 +184,23 @@ fn modular_exponentiation_test()
});
}
#[test]
fn fast_modular_exponentiation_test()
{
run_test("tests/math/fastmodexp.tests", 6, |scase| {
let case = make_unsigned(scase);
let a = case.get("a").unwrap();
let b = case.get("b").unwrap();
let kbig = case.get("k").unwrap();
let k = usize::from(kbig);
let m = case.get("m").unwrap();
let u = case.get("u").unwrap();
let z = case.get("z").unwrap();
let mu = BarrettUCN{ k: k, u: u.clone(), m: m.clone() };
assert_eq!(a.fastmodexp(&b, &mu), *z);
});
}
#[test]
fn barrett_reduction_test()
{