in src/rqpoly.rs [311:336]
fn multiply(&self, other: &Self) -> Self {
// check context exists
let context = self.context.as_ref().unwrap();
let f = &self.coeffs;
let g = &other.coeffs;
let n = context.n;
let q = context.q.clone();
let mut res = vec![T::zero(); n];
for i in 0..n {
for j in 0..i + 1 {
let tmp = T::mul_mod(&f[j], &g[i - j], &q);
res[i] = T::add_mod(&res[i], &tmp, &q);
}
for j in i + 1..context.n {
let tmp = T::mul_mod(&f[j], &g[n + i - j], &q);
res[i] = T::sub_mod(&res[i], &tmp, &q);
}
res[i] = T::modulus(&res[i], &q);
}
RqPoly {
coeffs: res,
is_ntt_form: false,
context: Some(context.clone()),
}
}