From 26eb05ceeb4afdb1f51bab33937e5b28f26cec8d Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Sat, 9 Jun 2018 17:32:15 -0700 Subject: [PATCH] Don't use Vecs in modmul, use fixed-size buffers --- src/cryptonum/multiplication.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/cryptonum/multiplication.rs b/src/cryptonum/multiplication.rs index 7ed9b51..bbf272f 100644 --- a/src/cryptonum/multiplication.rs +++ b/src/cryptonum/multiplication.rs @@ -85,16 +85,12 @@ macro_rules! generate_multipliers impl ModMul for $name { fn modmul(&mut self, x: &$name, m: &$name) { - let mut mulres = Vec::with_capacity(2 * self.values.len()); - mulres.resize(2 * self.values.len(), 0); + let mut mulres = [0; $size/32]; raw_multiplication(&self.values, &x.values, &mut mulres); - let mut widerm = Vec::with_capacity(mulres.len()); - widerm.extend_from_slice(&m.values); - widerm.resize(mulres.len(), 0); - let mut dead = Vec::with_capacity(widerm.len()); - dead.resize(widerm.len(), 0); - let mut answer = Vec::with_capacity(widerm.len()); - answer.resize(widerm.len(), 0); + let mut widerm = [0; $size/32]; + for (idx,val) in m.values.iter().enumerate() { widerm[idx] = *val; } + let mut dead = [0; $size/32]; + let mut answer = [0; $size/32]; divmod(&mulres, &widerm, &mut dead, &mut answer); for i in 0..answer.len() { if i < self.values.len() {