mirror of
https://github.com/arnaucube/phantom-zone.git
synced 2026-01-09 15:41:30 +01:00
use decomposer_iter
This commit is contained in:
@@ -231,9 +231,8 @@ impl<T: PrimInt> Iterator for DecomposerIter<T> {
|
|||||||
// T::one()) == T::one())), );
|
// T::one()) == T::one())), );
|
||||||
// self.value = self.value + carry;
|
// self.value = self.value + carry;
|
||||||
|
|
||||||
// Some(
|
// Some((self.q & ((carry << 55) - (T::one() & carry))) + k_i -
|
||||||
// (self.q & ((carry << self.logq) - (T::one() & carry))) + k_i
|
// (carry << self.logb))
|
||||||
// - (carry << self.logb), )
|
|
||||||
|
|
||||||
// Some(k_i)
|
// Some(k_i)
|
||||||
} else {
|
} else {
|
||||||
@@ -254,6 +253,7 @@ fn round_value<T: PrimInt>(value: T, ignore_bits: usize) -> T {
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
use rand::{thread_rng, Rng};
|
use rand::{thread_rng, Rng};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@@ -285,6 +285,8 @@ mod tests {
|
|||||||
for _ in 0..100000 {
|
for _ in 0..100000 {
|
||||||
let value = rng.gen_range(0..q);
|
let value = rng.gen_range(0..q);
|
||||||
let limbs = decomposer.decompose_to_vec(&value);
|
let limbs = decomposer.decompose_to_vec(&value);
|
||||||
|
let limbs_from_iter = decomposer.decompose_iter(&value).collect_vec();
|
||||||
|
assert_eq!(limbs, limbs_from_iter);
|
||||||
let value_back = round_value(
|
let value_back = round_value(
|
||||||
decomposer.recompose(&limbs, &modq_op),
|
decomposer.recompose(&limbs, &modq_op),
|
||||||
decomposer.ignore_bits,
|
decomposer.ignore_bits,
|
||||||
|
|||||||
31
src/rgsw.rs
31
src/rgsw.rs
@@ -518,11 +518,18 @@ pub(crate) fn decompose_r<R: RowMut, D: Decomposer<Element = R::Element>>(
|
|||||||
let d = decomposer.decomposition_count();
|
let d = decomposer.decomposition_count();
|
||||||
|
|
||||||
for ri in 0..ring_size {
|
for ri in 0..ring_size {
|
||||||
let el_decomposed = decomposer.decompose_to_vec(&r[ri]);
|
// let el_decomposed = decomposer.decompose_to_vec(&r[ri]);
|
||||||
|
|
||||||
for j in 0..d {
|
decomposer
|
||||||
decomp_r[j].as_mut()[ri] = el_decomposed[j];
|
.decompose_iter(&r[ri])
|
||||||
}
|
.enumerate()
|
||||||
|
.for_each(|(index, el)| {
|
||||||
|
decomp_r[index].as_mut()[ri] = el;
|
||||||
|
});
|
||||||
|
|
||||||
|
// for j in 0..d {
|
||||||
|
// decomp_r[j].as_mut()[ri] = el_decomposed[j];
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -571,10 +578,18 @@ pub(crate) fn galois_auto<
|
|||||||
.for_each(|(el_in, to_index, sign)| {
|
.for_each(|(el_in, to_index, sign)| {
|
||||||
let el_out = if !*sign { mod_op.neg(el_in) } else { *el_in };
|
let el_out = if !*sign { mod_op.neg(el_in) } else { *el_in };
|
||||||
|
|
||||||
let el_out_decomposed = decomposer.decompose_to_vec(&el_out);
|
// let el_out_decomposed = decomposer.decompose_to_vec(&el_out);
|
||||||
for j in 0..d {
|
|
||||||
scratch_matrix_d_ring[j].as_mut()[*to_index] = el_out_decomposed[j];
|
decomposer
|
||||||
}
|
.decompose_iter(&el_out)
|
||||||
|
.enumerate()
|
||||||
|
.for_each(|(index, el)| {
|
||||||
|
scratch_matrix_d_ring[index].as_mut()[*to_index] = el;
|
||||||
|
});
|
||||||
|
|
||||||
|
// for j in 0..d {
|
||||||
|
// scratch_matrix_d_ring[j].as_mut()[*to_index] =
|
||||||
|
// el_out_decomposed[j]; }
|
||||||
});
|
});
|
||||||
|
|
||||||
// transform decomposed a(X^k) to evaluation domain
|
// transform decomposed a(X^k) to evaluation domain
|
||||||
|
|||||||
Reference in New Issue
Block a user