Use Lsh impl of BigInt. Bitshift to the left instead of multiply by 2 since performs ffaster than mul.
kr0 c.perezbaro@gmail.com
Fri, 19 Jul 2019 10:06:25 +0200
1 files changed,
7 insertions(+),
8 deletions(-)
M
shamirsecretsharing-rs/src/lib.rs
→
shamirsecretsharing-rs/src/lib.rs
@@ -111,7 +111,6 @@ let mut u = modulo.clone();
let mut v = a.clone(); let mut r = BigInt::zero(); let mut s = BigInt::one(); - let two = BigInt::from(2u64); let mut k = 0u64; while v > BigInt::zero() {@@ -120,13 +119,13 @@ // u is even
(true, _, _, _) => { u = u >> 1; - s = &s * &two; + s = s << 1; }, // u isn't even but v is even (false, true, _, _) => { v = v >> 1; - r = &r * &two; + r = &r << 1; }, // u and v aren't even and u > v (false, false, true, _) => {@@ -134,7 +133,7 @@
u = &u - &v; u = u >> 1; r = &r + &s; - s = &s * &two; + s = &s << 1; }, // u and v aren't even and v > u (false, false, false, true) => {@@ -142,7 +141,7 @@
v = &v - &u; v = v >> 1; s = &r + &s; - r = &r * &two; + r = &r << 1; }, (false, false, false, false) => panic!("Unexpected error has ocurred."), }@@ -210,7 +209,7 @@ }
} let modinv_mul: BigInt; if res_d != Zero::zero() { - let modinv = mod_inverse(res_d, p.clone()); + let modinv = kalinski_inv(&res_d, &p); modinv_mul = res_n * modinv; } else { modinv_mul = res_n;@@ -268,13 +267,13 @@ let res3 = kalinski_inv(&c, &modul2);
let expected3 = BigInt::from_str("1").unwrap(); assert_eq!(res3, expected3); - /*// D = 182687704666362864775460604089535377456991567872. + // D = 182687704666362864775460604089535377456991567872. // modul3 = 2^252 + 27742317777372353535851937790883648493. let modul3 = BigInt::from_str("7237005577332262213973186563042994240857116359379907606001950938285454250989").unwrap(); let d = BigInt::from_str("182687704666362864775460604089535377456991567872").unwrap(); let res4 = kalinski_inv(&d, &modul3); println!("RES ON IMPL: {}", res4); let expected4 = BigInt::from_str("7155219595916845557842258654134856828180378438239419449390401977965479867845").unwrap(); - assert_eq!(expected4, res4);*/ + assert_eq!(expected4, res4); } }