arnaucube
arnaucube/poulpyPublic Self-hosted repository
added va_mul_vb_montgomery_add_vc_into_vc
Jean-Philippe Bossuat jeanphilippe.bossuat@gmail.com
Tue, 21 Jan 2025 13:50:01 +0100
commit

c2d47a6af987a3610689ba4f1ca8a7fe39e2886a

parent

0cf1229be59498d0641ea63d36b17885bc3cdb99

2 files changed, 54 insertions(+), 2 deletions(-)

jump to
M math/src/modulus.rs → math/src/modulus.rs

@@ -114,6 +114,14 @@ b: &montgomery::Montgomery<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. fn sa_mul_sb_montgomery_into_sa<const REDUCE: REDUCEMOD>( &self,

@@ -282,6 +290,18 @@ );

// vec(c) <- vec(a) * vec(b). fn va_mul_vb_montgomery_into_vc<const CHUNK: usize, const REDUCE: REDUCEMOD>( + &self, + a: &[O], + b: &[montgomery::Montgomery<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>],
M math/src/modulus/impl_u64/operations.rs → math/src/modulus/impl_u64/operations.rs

@@ -4,8 +4,8 @@ use crate::modulus::prime::Prime;

use crate::modulus::{ScalarOperations, VectorOperations}; use crate::modulus::{NONE, REDUCEMOD}; use crate::{ - apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv, - apply_vvssv, apply_vvsv, apply_vvv, + apply_ssv, apply_sv, apply_v, apply_vsssvv, apply_vssv, apply_vsv, apply_vv, apply_vvssv, + apply_vvsv, apply_vvv, }; use itertools::izip;

@@ -116,6 +116,17 @@ b: &Montgomery<u64>,

c: &mut u64, ) { *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)]

@@ -411,6 +422,27 @@ ) {

apply_vvv!( self, Self::sa_mul_sb_montgomery_into_sc::<REDUCE>, + a, + b, + c, + CHUNK + ); + } + + #[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,