From 464b23297c19f0f6d53d0dda80aba086957453de Mon Sep 17 00:00:00 2001 From: Daniel Lubarov Date: Mon, 22 Aug 2022 11:15:06 -0700 Subject: [PATCH] Check each `PolynomialValues` len I.e. that it is the length of some power-of-two subgroup. --- field/src/fft.rs | 2 +- field/src/interpolation.rs | 4 +--- field/src/polynomial/mod.rs | 2 ++ 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/field/src/fft.rs b/field/src/fft.rs index 7e9deae5..6ede8af6 100644 --- a/field/src/fft.rs +++ b/field/src/fft.rs @@ -61,7 +61,7 @@ pub fn fft_with_options( ) -> PolynomialValues { let PolynomialCoeffs { coeffs: mut buffer } = poly; fft_dispatch(&mut buffer, zero_factor, root_table); - PolynomialValues { values: buffer } + PolynomialValues::new(buffer) } #[inline] diff --git a/field/src/interpolation.rs b/field/src/interpolation.rs index d0675715..8f64e9d7 100644 --- a/field/src/interpolation.rs +++ b/field/src/interpolation.rs @@ -19,9 +19,7 @@ pub fn interpolant(points: &[(F, F)]) -> PolynomialCoeffs { .map(|x| interpolate(points, x, &barycentric_weights)) .collect(); - let mut coeffs = ifft(PolynomialValues { - values: subgroup_evals, - }); + let mut coeffs = ifft(PolynomialValues::new(subgroup_evals)); coeffs.trim(); coeffs } diff --git a/field/src/polynomial/mod.rs b/field/src/polynomial/mod.rs index 82c4a41c..6577dc52 100644 --- a/field/src/polynomial/mod.rs +++ b/field/src/polynomial/mod.rs @@ -24,6 +24,8 @@ pub struct PolynomialValues { impl PolynomialValues { pub fn new(values: Vec) -> Self { + // Check that a subgroup exists of this size, which should be a power of two. + debug_assert!(log2_strict(values.len()) <= F::TWO_ADICITY); PolynomialValues { values } }