added va_mul_vb_montgomery_add_vc_into_vc

This commit is contained in:
Jean-Philippe Bossuat
2025-01-21 13:50:01 +01:00
parent 0cf1229be5
commit c2d47a6af9
2 changed files with 54 additions and 2 deletions

View File

@@ -114,6 +114,14 @@ pub trait ScalarOperations<O> {
c: &mut O, c: &mut O,
); );
// Assigns a * b + c to c.
fn sa_mul_sb_montgomery_add_sc_into_sc<const REDUCE1: REDUCEMOD, const REDUCE2: REDUCEMOD>(
&self,
a: &O,
b: &montgomery::Montgomery<O>,
c: &mut O,
);
// Assigns a * b to b. // Assigns a * b to b.
fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>( fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>(
&self, &self,
@@ -288,6 +296,18 @@ pub trait VectorOperations<O> {
c: &mut [O], c: &mut [O],
); );
// vec(c) <- vec(a) * vec(b) + vec(c).
fn va_mul_vb_montgomery_add_vc_into_vc<
const CHUNK: usize,
const REDUCE1: REDUCEMOD,
const REDUCE2: REDUCEMOD,
>(
&self,
a: &[O],
b: &[montgomery::Montgomery<O>],
c: &mut [O],
);
// vec(a) <- vec(a) * vec(b). // vec(a) <- vec(a) * vec(b).
fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>( fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>(
&self, &self,

View File

@@ -4,8 +4,8 @@ use crate::modulus::prime::Prime;
use crate::modulus::{ScalarOperations, VectorOperations}; use crate::modulus::{ScalarOperations, VectorOperations};
use crate::modulus::{NONE, REDUCEMOD}; use crate::modulus::{NONE, REDUCEMOD};
use crate::{ use crate::{
apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv, apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv, apply_vvssv,
apply_vvssv, apply_vvsv, apply_vvv, apply_vvsv, apply_vvv,
}; };
use itertools::izip; use itertools::izip;
@@ -118,6 +118,17 @@ impl ScalarOperations<u64> for Prime<u64> {
*c = self.montgomery.mul_external::<REDUCE>(*a, *b); *c = self.montgomery.mul_external::<REDUCE>(*a, *b);
} }
#[inline(always)]
fn sa_mul_sb_montgomery_add_sc_into_sc<const REDUCE1: REDUCEMOD, const REDUCE2: REDUCEMOD>(
&self,
a: &u64,
b: &Montgomery<u64>,
c: &mut u64,
) {
*c += self.montgomery.mul_external::<REDUCE1>(*a, *b);
self.sa_reduce_into_sa::<REDUCE2>(c);
}
#[inline(always)] #[inline(always)]
fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>( fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>(
&self, &self,
@@ -418,6 +429,27 @@ impl VectorOperations<u64> for Prime<u64> {
); );
} }
#[inline(always)]
fn va_mul_vb_montgomery_add_vc_into_vc<
const CHUNK: usize,
const REDUCE1: REDUCEMOD,
const REDUCE2: REDUCEMOD,
>(
&self,
a: &[Montgomery<u64>],
b: &[u64],
c: &mut [u64],
) {
apply_vvv!(
self,
Self::sa_mul_sb_montgomery_add_sc_into_sc::<REDUCE1, REDUCE2>,
a,
b,
c,
CHUNK
);
}
#[inline(always)] #[inline(always)]
fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>( fn va_mul_vb_montgomery_into_va<const CHUNK: usize, const REDUCE: REDUCEMOD>(
&self, &self,