diff --git a/src/decomposer.rs b/src/decomposer.rs index db9238e..fc291ba 100644 --- a/src/decomposer.rs +++ b/src/decomposer.rs @@ -71,10 +71,14 @@ impl DefaultDecomposer { Op: ArithmeticOps, { let mut value = T::zero(); - for i in self.ignore_limbs..self.ignore_limbs + self.d { + dbg!(self.ignore_limbs); + for i in 0..self.d { value = modq_op.add( &value, - &(modq_op.mul(&limbs[i], &(T::one() << (self.logb * i)))), + &(modq_op.mul( + &limbs[i], + &(T::one() << (self.logb * (i + self.ignore_limbs))), + )), ) } value @@ -85,7 +89,6 @@ impl Decomposer for DefaultDecomposer { type Element = T; fn decompose(&self, value: &T) -> Vec { let value = round_value(*value, self.ignore_bits); - let q = self.q; let logb = self.logb; // let b = T::one() << logb; // base @@ -135,25 +138,29 @@ mod tests { #[test] fn decomposition_works() { - let logq = 50; - let logb = 5; - let d = 10; + let logq = 15; + let logb = 3; + let d = 5; + + let mut rng = thread_rng(); // q is prime of bits logq and i is true, other q = 1<