use crate::npe::LWE;
use crate::Types;
pub trait RLWE: Sized {
type STorus;
fn scalar_polynomial_mult(variance: f64, scalar_polynomial: &[Self]) -> f64;
}
macro_rules! impl_trait_npe_rlwe {
($T:ty,$DOC:expr) => {
impl RLWE for $T {
type STorus = <$T as Types>::STorus;
fn scalar_polynomial_mult(variance: f64, scalar_polynomial: &[Self]) -> f64 {
return <$T as LWE>::multisum_uncorrelated(
&vec![variance; scalar_polynomial.len()],
scalar_polynomial,
);
}
}
};
}
impl_trait_npe_rlwe!(u32, "type Torus = u32;");
impl_trait_npe_rlwe!(u64, "type Torus = u64;");