pub struct Convolve<M>(PhantomData<fn() -> M>);Tuple Fields§
§0: PhantomData<fn() -> M>Trait Implementations§
Source§impl<M> ConvolveSteps for Convolve<M>where
M: Montgomery32NttModulus,
impl<M> ConvolveSteps for Convolve<M>where
M: Montgomery32NttModulus,
Source§const CYCLIC: bool = true
const CYCLIC: bool = true
Whether transform multiplication computes modulo x^n - 1 in the coefficient ring.
type T = Vec<MInt<M>>
type F = Vec<MInt<M>>
fn length(t: &Self::T) -> usize
fn transform(t: Self::T, len: usize) -> Self::F
fn inverse_transform(f: Self::F, len: usize) -> Self::T
fn multiply(f: &mut Self::F, g: &Self::F)
fn square(t: Self::T, len: usize) -> Self::T
fn convolve(a: Self::T, b: Self::T) -> Self::T
Source§impl<M, N1, N2, N3> ConvolveSteps for Convolve<(M, (N1, N2, N3))>where
M: MIntConvert + MIntConvert<u32>,
N1: Montgomery32NttModulus,
N2: Montgomery32NttModulus,
N3: Montgomery32NttModulus,
impl<M, N1, N2, N3> ConvolveSteps for Convolve<(M, (N1, N2, N3))>where
M: MIntConvert + MIntConvert<u32>,
N1: Montgomery32NttModulus,
N2: Montgomery32NttModulus,
N3: Montgomery32NttModulus,
type T = Vec<MInt<M>>
type F = (Vec<MInt<N1>>, Vec<MInt<N2>>, Vec<MInt<N3>>)
fn length(t: &Self::T) -> usize
fn transform(t: Self::T, len: usize) -> Self::F
fn inverse_transform(f: Self::F, len: usize) -> Self::T
fn multiply(f: &mut Self::F, g: &Self::F)
fn convolve(a: Self::T, b: Self::T) -> Self::T
Source§const CYCLIC: bool = false
const CYCLIC: bool = false
Whether transform multiplication computes modulo x^n - 1 in the coefficient ring.
fn square(t: Self::T, len: usize) -> Self::T
Source§impl<N1, N2, N3> ConvolveSteps for Convolve<(u64, (N1, N2, N3))>
impl<N1, N2, N3> ConvolveSteps for Convolve<(u64, (N1, N2, N3))>
type T = Vec<u64>
type F = ([Vec<MInt<N1>>; 3], [Vec<MInt<N2>>; 3], [Vec<MInt<N3>>; 3])
fn length(t: &Self::T) -> usize
fn transform(t: Self::T, len: usize) -> Self::F
fn inverse_transform(f: Self::F, len: usize) -> Self::T
fn multiply(f: &mut Self::F, g: &Self::F)
fn square(t: Self::T, len: usize) -> Self::T
fn convolve(a: Self::T, b: Self::T) -> Self::T
Source§impl<M> NttReuse for Convolve<M>where
M: Montgomery32NttModulus,
impl<M> NttReuse for Convolve<M>where
M: Montgomery32NttModulus,
const MULTIPLE: bool = false
Source§fn transform_ntt(t: Self::T, len: usize) -> Self::F
fn transform_ntt(t: Self::T, len: usize) -> Self::F
Transforms coefficients into the usual NTT frequency order.
Source§fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T
fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T
Inverts a value produced by
transform_ntt.Source§fn ntt_doubling(f: Self::F, monic: bool) -> Self::F
fn ntt_doubling(f: Self::F, monic: bool) -> Self::F
Extends a value produced by
transform_ntt to twice its length.
If monic, the input represents a monic degree-n polynomial modulo
x^n - 1, where n is the transform length.Source§fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
Extracts the even coefficients of
a(x) * b(-x) in the usual NTT frequency order.Source§fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
Extracts the odd coefficients of
a(x) * b(-x) in the usual NTT frequency order.Source§fn multiply_prefix(f: &mut Self::F, g: &Self::F)
fn multiply_prefix(f: &mut Self::F, g: &Self::F)
Multiplies a usual NTT transform by the corresponding prefix of another one.
Source§fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)
fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)
Adds the pointwise product of two usual NTT transforms to
sum.fn power_projection_step( p_flat: Vec<MInt<M>>, q_flat: Vec<MInt<M>>, n: usize, py: usize, qy: usize, ) -> (Vec<MInt<M>>, Vec<MInt<M>>)
Source§fn max_product_sum_count(_f: &Self::F) -> usize
fn max_product_sum_count(_f: &Self::F) -> usize
Maximum number of products that can be summed before reconstruction.
Both factors must transform canonical coefficients at the supplied transform’s length,
and each cyclic product must itself be reconstructible.
Source§impl<M, N1, N2, N3> NttReuse for Convolve<(M, (N1, N2, N3))>where
M: MIntConvert + MIntConvert<u32>,
N1: Montgomery32NttModulus,
N2: Montgomery32NttModulus,
N3: Montgomery32NttModulus,
impl<M, N1, N2, N3> NttReuse for Convolve<(M, (N1, N2, N3))>where
M: MIntConvert + MIntConvert<u32>,
N1: Montgomery32NttModulus,
N2: Montgomery32NttModulus,
N3: Montgomery32NttModulus,
Source§fn max_product_sum_count(f: &Self::F) -> usize
fn max_product_sum_count(f: &Self::F) -> usize
Maximum number of products that can be summed before reconstruction.
Both factors must transform canonical coefficients at the supplied transform’s length,
and each cyclic product must itself be reconstructible.
Source§fn transform_ntt(t: Self::T, len: usize) -> Self::F
fn transform_ntt(t: Self::T, len: usize) -> Self::F
Transforms coefficients into the usual NTT frequency order.
Source§fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T
fn inverse_transform_ntt(f: Self::F, len: usize) -> Self::T
Inverts a value produced by
transform_ntt.Source§fn ntt_doubling(f: Self::F, monic: bool) -> Self::F
fn ntt_doubling(f: Self::F, monic: bool) -> Self::F
Extends a value produced by
transform_ntt to twice its length.
If monic, the input represents a monic degree-n polynomial modulo
x^n - 1, where n is the transform length.Source§fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
fn even_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
Extracts the even coefficients of
a(x) * b(-x) in the usual NTT frequency order.Source§fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
fn odd_mul_normal_neg(f: &Self::F, g: &Self::F) -> Self::F
Extracts the odd coefficients of
a(x) * b(-x) in the usual NTT frequency order.Source§fn multiply_prefix(f: &mut Self::F, g: &Self::F)
fn multiply_prefix(f: &mut Self::F, g: &Self::F)
Multiplies a usual NTT transform by the corresponding prefix of another one.
Source§fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)
fn multiply_add(sum: &mut Self::F, f: &Self::F, g: &Self::F)
Adds the pointwise product of two usual NTT transforms to
sum.const MULTIPLE: bool = true
fn power_projection_step( p_flat: Self::T, q_flat: Self::T, n: usize, py: usize, qy: usize, ) -> (Self::T, Self::T)
Auto Trait Implementations§
impl<M> Freeze for Convolve<M>
impl<M> RefUnwindSafe for Convolve<M>
impl<M> Send for Convolve<M>
impl<M> Sync for Convolve<M>
impl<M> Unpin for Convolve<M>
impl<M> UnsafeUnpin for Convolve<M>
impl<M> UnwindSafe for Convolve<M>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more