trace test

This commit is contained in:
Pro7ech
2025-10-20 17:34:30 +02:00
parent 749552801c
commit 77b49ea530
4 changed files with 129 additions and 158 deletions

View File

@@ -27,7 +27,7 @@ glwe_automorphism_inplace => crate::tests::test_suite::automorphism::test_glwe_a
glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product, glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product,
glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace, glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace,
// GLWE Trace // GLWE Trace
// glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace, glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace,
glwe_packing => crate::tests::test_suite::test_glwe_packing, glwe_packing => crate::tests::test_suite::test_glwe_packing,
// GGLWE Encryption // GGLWE Encryption
gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk, gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk,
@@ -63,119 +63,119 @@ glwe_to_lwe => crate::tests::test_suite::test_glwe_to_lwe,
lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe, lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe,
} }
); );
// #[cfg(test)] #[cfg(test)]
// backend_test_suite!( backend_test_suite!(
// mod cpu_ref, mod cpu_ref,
// backend = poulpy_backend::cpu_fft64_ref::FFT64Ref, backend = poulpy_backend::cpu_fft64_ref::FFT64Ref,
// size = 1<<8, size = 1<<8,
// tests = { tests = {
//GLWE Encryption //GLWE Encryption
// glwe_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_sk, glwe_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_sk,
// glwe_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_compressed_encrypt_sk, glwe_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_compressed_encrypt_sk,
// glwe_encrypt_zero_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_zero_sk, glwe_encrypt_zero_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_zero_sk,
// glwe_encrypt_pk => crate::tests::test_suite::encryption::test_glwe_encrypt_pk, glwe_encrypt_pk => crate::tests::test_suite::encryption::test_glwe_encrypt_pk,
// GLWE Keyswitch // GLWE Keyswitch
// glwe_keyswitch => crate::tests::test_suite::keyswitch::test_glwe_keyswitch, glwe_keyswitch => crate::tests::test_suite::keyswitch::test_glwe_keyswitch,
// glwe_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_glwe_keyswitch_inplace, glwe_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_glwe_keyswitch_inplace,
// GLWE Automorphism // GLWE Automorphism
// glwe_automorphism => crate::tests::test_suite::automorphism::test_glwe_automorphism, glwe_automorphism => crate::tests::test_suite::automorphism::test_glwe_automorphism,
// glwe_automorphism_inplace => crate::tests::test_suite::automorphism::test_glwe_automorphism_inplace, glwe_automorphism_inplace => crate::tests::test_suite::automorphism::test_glwe_automorphism_inplace,
// GLWE External Product // GLWE External Product
// glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product, glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product,
// glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace, glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace,
// GLWE Trace // GLWE Trace
// glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace, glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace,
// glwe_packing => crate::tests::test_suite::test_glwe_packing, glwe_packing => crate::tests::test_suite::test_glwe_packing,
// GGLWE Encryption // GGLWE Encryption
// gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk, gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk,
// gglwe_switching_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_compressed_encrypt_sk, gglwe_switching_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_compressed_encrypt_sk,
// gglwe_automorphisk_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphisk_key_encrypt_sk, gglwe_automorphism_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphism_key_encrypt_sk,
// gglwe_automorphisk_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphisk_key_compressed_encrypt_sk, gglwe_automorphism_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphism_key_compressed_encrypt_sk,
// gglwe_tensor_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_encrypt_sk, gglwe_tensor_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_encrypt_sk,
// gglwe_tensor_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_compressed_encrypt_sk, gglwe_tensor_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_compressed_encrypt_sk,
// GGLWE Keyswitching // GGLWE Keyswitching
// gglwe_switching_key_keyswitch => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch, gglwe_switching_key_keyswitch => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch,
// gglwe_switching_key_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch_inplace, gglwe_switching_key_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch_inplace,
// GGLWE External Product // GGLWE External Product
// gglwe_switching_key_external_product => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product, gglwe_switching_key_external_product => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product,
// gglwe_switching_key_external_product_inplace => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product_inplace, gglwe_switching_key_external_product_inplace => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product_inplace,
// GGLWE Automorphism // GGLWE Automorphism
// gglwe_automorphism_key_automorphism => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism, gglwe_automorphism_key_automorphism => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism,
// gglwe_automorphism_key_automorphism_inplace => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism_inplace, gglwe_automorphism_key_automorphism_inplace => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism_inplace,
// GGSW Encryption // GGSW Encryption
// ggsw_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_encrypt_sk, ggsw_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_encrypt_sk,
// ggsw_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_compressed_encrypt_sk, ggsw_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_compressed_encrypt_sk,
// GGSW Keyswitching // GGSW Keyswitching
// ggsw_keyswitch => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch, ggsw_keyswitch => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch,
// ggsw_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch_inplace, ggsw_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch_inplace,
// GGSW External Product // GGSW External Product
// ggsw_external_product => crate::tests::test_suite::external_product::test_ggsw_external_product, ggsw_external_product => crate::tests::test_suite::external_product::test_ggsw_external_product,
// ggsw_external_product_inplace => crate::tests::test_suite::external_product::test_ggsw_external_product_inplace, ggsw_external_product_inplace => crate::tests::test_suite::external_product::test_ggsw_external_product_inplace,
// GGSW Automorphism // GGSW Automorphism
// ggsw_automorphism => crate::tests::test_suite::automorphism::test_ggsw_automorphism, ggsw_automorphism => crate::tests::test_suite::automorphism::test_ggsw_automorphism,
// ggsw_automorphism_inplace => crate::tests::test_suite::automorphism::test_ggsw_automorphism_inplace, ggsw_automorphism_inplace => crate::tests::test_suite::automorphism::test_ggsw_automorphism_inplace,
// LWE // LWE
// lwe_keyswitch => crate::tests::test_suite::keyswitch::test_lwe_keyswitch, lwe_keyswitch => crate::tests::test_suite::keyswitch::test_lwe_keyswitch,
// glwe_to_lwe => crate::tests::test_suite::test_glwe_to_lwe, glwe_to_lwe => crate::tests::test_suite::test_glwe_to_lwe,
// lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe, lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe,
// } }
// ); );
//
// #[cfg(any(target_arch = "x86_64", target_arch = "x86"))] #[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
// #[cfg(test)] #[cfg(test)]
// backend_test_suite!( backend_test_suite!(
// mod cpu_avx, mod cpu_avx,
// backend = poulpy_backend::cpu_fft64_avx::FFT64Avx, backend = poulpy_backend::cpu_fft64_avx::FFT64Avx,
// size = 1<<8, size = 1<<8,
// tests = { tests = {
//GLWE Encryption //GLWE Encryption
// glwe_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_sk, glwe_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_sk,
// glwe_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_compressed_encrypt_sk, glwe_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_glwe_compressed_encrypt_sk,
// glwe_encrypt_zero_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_zero_sk, glwe_encrypt_zero_sk => crate::tests::test_suite::encryption::test_glwe_encrypt_zero_sk,
// glwe_encrypt_pk => crate::tests::test_suite::encryption::test_glwe_encrypt_pk, glwe_encrypt_pk => crate::tests::test_suite::encryption::test_glwe_encrypt_pk,
// GLWE Keyswitch // GLWE Keyswitch
// glwe_keyswitch => crate::tests::test_suite::keyswitch::test_glwe_keyswitch, glwe_keyswitch => crate::tests::test_suite::keyswitch::test_glwe_keyswitch,
// glwe_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_glwe_keyswitch_inplace, glwe_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_glwe_keyswitch_inplace,
// GLWE Automorphism // GLWE Automorphism
// glwe_automorphism => crate::tests::test_suite::automorphism::test_glwe_automorphism, glwe_automorphism => crate::tests::test_suite::automorphism::test_glwe_automorphism,
// glwe_automorphism_inplace => crate::tests::test_suite::automorphism::test_glwe_automorphism_inplace, glwe_automorphism_inplace => crate::tests::test_suite::automorphism::test_glwe_automorphism_inplace,
// GLWE External Product // GLWE External Product
// glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product, glwe_external_product => crate::tests::test_suite::external_product::test_glwe_external_product,
// glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace, glwe_external_product_inplace => crate::tests::test_suite::external_product::test_glwe_external_product_inplace,
// GLWE Trace // GLWE Trace
// glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace, glwe_trace_inplace => crate::tests::test_suite::test_glwe_trace_inplace,
// glwe_packing => crate::tests::test_suite::test_glwe_packing, glwe_packing => crate::tests::test_suite::test_glwe_packing,
// GGLWE Encryption // GGLWE Encryption
// gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk, gglwe_switching_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_encrypt_sk,
// gglwe_switching_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_compressed_encrypt_sk, gglwe_switching_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_switching_key_compressed_encrypt_sk,
// gglwe_automorphisk_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphisk_key_encrypt_sk, gglwe_automorphism_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphism_key_encrypt_sk,
// gglwe_automorphisk_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphisk_key_compressed_encrypt_sk, gglwe_automorphism_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_automorphism_key_compressed_encrypt_sk,
// gglwe_tensor_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_encrypt_sk, gglwe_tensor_key_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_encrypt_sk,
// gglwe_tensor_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_compressed_encrypt_sk, gglwe_tensor_key_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_gglwe_tensor_key_compressed_encrypt_sk,
// GGLWE Keyswitching // GGLWE Keyswitching
// gglwe_switching_key_keyswitch => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch, gglwe_switching_key_keyswitch => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch,
// gglwe_switching_key_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch_inplace, gglwe_switching_key_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_gglwe_switching_key_keyswitch_inplace,
// GGLWE External Product // GGLWE External Product
// gglwe_switching_key_external_product => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product, gglwe_switching_key_external_product => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product,
// gglwe_switching_key_external_product_inplace => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product_inplace, gglwe_switching_key_external_product_inplace => crate::tests::test_suite::external_product::test_gglwe_switching_key_external_product_inplace,
// GGLWE Automorphism // GGLWE Automorphism
// gglwe_automorphism_key_automorphism => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism, gglwe_automorphism_key_automorphism => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism,
// gglwe_automorphism_key_automorphism_inplace => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism_inplace, gglwe_automorphism_key_automorphism_inplace => crate::tests::test_suite::automorphism::test_gglwe_automorphism_key_automorphism_inplace,
// GGSW Encryption // GGSW Encryption
// ggsw_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_encrypt_sk, ggsw_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_encrypt_sk,
// ggsw_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_compressed_encrypt_sk, ggsw_compressed_encrypt_sk => crate::tests::test_suite::encryption::test_ggsw_compressed_encrypt_sk,
// GGSW Keyswitching // GGSW Keyswitching
// ggsw_keyswitch => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch, ggsw_keyswitch => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch,
// ggsw_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch_inplace, ggsw_keyswitch_inplace => crate::tests::test_suite::keyswitch::test_ggsw_keyswitch_inplace,
// GGSW External Product // GGSW External Product
// ggsw_external_product => crate::tests::test_suite::external_product::test_ggsw_external_product, ggsw_external_product => crate::tests::test_suite::external_product::test_ggsw_external_product,
// ggsw_external_product_inplace => crate::tests::test_suite::external_product::test_ggsw_external_product_inplace, ggsw_external_product_inplace => crate::tests::test_suite::external_product::test_ggsw_external_product_inplace,
// GGSW Automorphism // GGSW Automorphism
// ggsw_automorphism => crate::tests::test_suite::automorphism::test_ggsw_automorphism, ggsw_automorphism => crate::tests::test_suite::automorphism::test_ggsw_automorphism,
// ggsw_automorphism_inplace => crate::tests::test_suite::automorphism::test_ggsw_automorphism_inplace, ggsw_automorphism_inplace => crate::tests::test_suite::automorphism::test_ggsw_automorphism_inplace,
// LWE // LWE
// lwe_keyswitch => crate::tests::test_suite::keyswitch::test_lwe_keyswitch, lwe_keyswitch => crate::tests::test_suite::keyswitch::test_lwe_keyswitch,
// glwe_to_lwe => crate::tests::test_suite::test_glwe_to_lwe, glwe_to_lwe => crate::tests::test_suite::test_glwe_to_lwe,
// lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe, lwe_to_glwe => crate::tests::test_suite::test_lwe_to_glwe,
// } }
// ); );

View File

@@ -5,8 +5,8 @@ pub mod keyswitch;
mod conversion; mod conversion;
mod packing; mod packing;
// mod trace; mod trace;
pub use conversion::*; pub use conversion::*;
pub use packing::*; pub use packing::*;
// pub use trace::*; pub use trace::*;

View File

@@ -1,76 +1,38 @@
use std::collections::HashMap; use std::collections::HashMap;
use poulpy_hal::{ use poulpy_hal::{
api::{ api::{ScratchAvailable, ScratchOwnedAlloc, ScratchOwnedBorrow, VecZnxFillUniform, VecZnxNormalizeInplace, VecZnxSubInplace},
ScratchOwnedAlloc, ScratchOwnedBorrow, SvpApplyDftToDftInplace, SvpPPolAlloc, SvpPPolBytesOf, SvpPrepare, layouts::{Backend, Module, Scratch, ScratchOwned, ZnxView, ZnxViewMut},
VecZnxAddInplace, VecZnxAddNormal, VecZnxAddScalarInplace, VecZnxAutomorphism, VecZnxBigAddInplace,
VecZnxBigAddSmallInplace, VecZnxBigAutomorphismInplace, VecZnxBigBytesOf, VecZnxBigNormalize, VecZnxBigNormalizeTmpBytes,
VecZnxBigSubSmallNegateInplace, VecZnxCopy, VecZnxDftApply, VecZnxDftBytesOf, VecZnxFillUniform, VecZnxIdftApplyConsume,
VecZnxNormalize, VecZnxNormalizeInplace, VecZnxNormalizeTmpBytes, VecZnxRotateInplace, VecZnxRshInplace, VecZnxSub,
VecZnxSubInplace, VecZnxSwitchRing, VmpApplyDftToDft, VmpApplyDftToDftAdd, VmpApplyDftToDftTmpBytes, VmpPMatAlloc,
VmpPrepare,
},
layouts::{Backend, Module, ScratchOwned, ZnxView, ZnxViewMut},
oep::{
ScratchAvailableImpl, ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl, TakeScalarZnxImpl, TakeSvpPPolImpl,
TakeVecZnxBigImpl, TakeVecZnxDftImpl, TakeVecZnxImpl,
},
source::Source, source::Source,
}; };
use crate::{ use crate::{
AutomorphismKeyEncryptSk, GLWEDecrypt, GLWEEncryptSk, ScratchTakeCore,
encryption::SIGMA, encryption::SIGMA,
glwe_trace::GLWETrace,
layouts::{ layouts::{
AutomorphismKey, AutomorphismKeyLayout, GLWE, GLWELayout, GLWEPlaintext, GLWESecret, LWEInfos, AutomorphismKey, AutomorphismKeyLayout, AutomorphismKeyPrepare, AutomorphismKeyPreparedAlloc, GLWE, GLWELayout,
prepared::{AutomorphismKeyPrepared, GLWESecretPrepared, PrepareAlloc}, GLWEPlaintext, GLWESecret, GLWESecretPrepare, GLWESecretPreparedAlloc, LWEInfos,
prepared::{AutomorphismKeyPrepared, GLWESecretPrepared},
}, },
noise::var_noise_gglwe_product, noise::var_noise_gglwe_product,
}; };
pub fn test_glwe_trace_inplace<B>(module: &Module<B>) pub fn test_glwe_trace_inplace<BE: Backend>(module: &Module<BE>)
where where
Module<B>: VecZnxDftBytesOf Module<BE>: GLWETrace<BE>
+ VecZnxAutomorphism + GLWEEncryptSk<BE>
+ VecZnxBigAutomorphismInplace<B> + GLWEDecrypt<BE>
+ VecZnxBigSubSmallNegateInplace<B> + AutomorphismKeyEncryptSk<BE>
+ VecZnxRshInplace<B> + AutomorphismKeyPrepare<BE>
+ VecZnxRotateInplace<B> + AutomorphismKeyPreparedAlloc<BE>
+ VecZnxBigNormalize<B>
+ VecZnxDftApply<B>
+ SvpApplyDftToDftInplace<B>
+ VecZnxIdftApplyConsume<B>
+ VecZnxFillUniform + VecZnxFillUniform
+ GLWESecretPrepare<BE>
+ GLWESecretPreparedAlloc<BE>
+ VecZnxSubInplace + VecZnxSubInplace
+ VecZnxAddInplace + VecZnxNormalizeInplace<BE>,
+ VecZnxNormalizeInplace<B> ScratchOwned<BE>: ScratchOwnedAlloc<BE> + ScratchOwnedBorrow<BE>,
+ VecZnxAddNormal Scratch<BE>: ScratchAvailable + ScratchTakeCore<BE>,
+ VecZnxNormalize<B>
+ VecZnxSub
+ SvpPrepare<B>
+ SvpPPolBytesOf
+ SvpPPolAlloc<B>
+ VecZnxBigBytesOf
+ VecZnxBigAddInplace<B>
+ VecZnxBigAddSmallInplace<B>
+ VecZnxNormalizeTmpBytes
+ VecZnxAddScalarInplace
+ VmpPMatAlloc<B>
+ VmpPrepare<B>
+ VmpApplyDftToDftTmpBytes
+ VmpApplyDftToDft<B>
+ VmpApplyDftToDftAdd<B>
+ VecZnxBigNormalizeTmpBytes
+ VecZnxSwitchRing
+ VecZnxCopy,
B: Backend
+ TakeVecZnxDftImpl<B>
+ TakeVecZnxBigImpl<B>
+ TakeSvpPPolImpl<B>
+ ScratchOwnedAllocImpl<B>
+ ScratchOwnedBorrowImpl<B>
+ ScratchAvailableImpl<B>
+ TakeScalarZnxImpl<B>
+ TakeVecZnxImpl<B>,
{ {
let base2k: usize = 8; let base2k: usize = 8;
let k: usize = 54; let k: usize = 54;
@@ -106,16 +68,18 @@ where
let mut source_xe: Source = Source::new([0u8; 32]); let mut source_xe: Source = Source::new([0u8; 32]);
let mut source_xa: Source = Source::new([0u8; 32]); let mut source_xa: Source = Source::new([0u8; 32]);
let mut scratch: ScratchOwned<B> = ScratchOwned::alloc( let mut scratch: ScratchOwned<BE> = ScratchOwned::alloc(
GLWE::encrypt_sk_tmp_bytes(module, &glwe_out_infos) GLWE::encrypt_sk_tmp_bytes(module, &glwe_out_infos)
| GLWE::decrypt_tmp_bytes(module, &glwe_out_infos) | GLWE::decrypt_tmp_bytes(module, &glwe_out_infos)
| AutomorphismKey::encrypt_sk_tmp_bytes(module, &key_infos) | AutomorphismKey::encrypt_sk_tmp_bytes(module, &key_infos)
| GLWE::trace_inplace_tmp_bytes(module, &glwe_out_infos, &key_infos), | GLWE::trace_tmp_bytes(module, &glwe_out_infos, &glwe_out_infos, &key_infos),
); );
let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_out_infos); let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_out_infos);
sk.fill_ternary_prob(0.5, &mut source_xs); sk.fill_ternary_prob(0.5, &mut source_xs);
let sk_dft: GLWESecretPrepared<Vec<u8>, B> = sk.prepare_alloc(module, scratch.borrow());
let mut sk_dft: GLWESecretPrepared<Vec<u8>, BE> = GLWESecretPrepared::alloc_from_infos(module, &sk);
sk_dft.prepare(module, &sk);
let mut data_want: Vec<i64> = vec![0i64; n]; let mut data_want: Vec<i64> = vec![0i64; n];
@@ -134,7 +98,7 @@ where
scratch.borrow(), scratch.borrow(),
); );
let mut auto_keys: HashMap<i64, AutomorphismKeyPrepared<Vec<u8>, B>> = HashMap::new(); let mut auto_keys: HashMap<i64, AutomorphismKeyPrepared<Vec<u8>, BE>> = HashMap::new();
let gal_els: Vec<i64> = GLWE::trace_galois_elements(module); let gal_els: Vec<i64> = GLWE::trace_galois_elements(module);
let mut tmp: AutomorphismKey<Vec<u8>> = AutomorphismKey::alloc_from_infos(&key_infos); let mut tmp: AutomorphismKey<Vec<u8>> = AutomorphismKey::alloc_from_infos(&key_infos);
gal_els.iter().for_each(|gal_el| { gal_els.iter().for_each(|gal_el| {
@@ -146,7 +110,8 @@ where
&mut source_xe, &mut source_xe,
scratch.borrow(), scratch.borrow(),
); );
let atk_prepared: AutomorphismKeyPrepared<Vec<u8>, B> = tmp.prepare_alloc(module, scratch.borrow()); let mut atk_prepared: AutomorphismKeyPrepared<Vec<u8>, BE> = AutomorphismKeyPrepared::alloc_from_infos(module, &tmp);
atk_prepared.prepare(module, &tmp, scratch.borrow());
auto_keys.insert(*gal_el, atk_prepared); auto_keys.insert(*gal_el, atk_prepared);
}); });

View File

@@ -1,4 +1,8 @@
use std::{fmt::{Debug, Display}, marker::PhantomData, ptr::NonNull}; use std::{
fmt::{Debug, Display},
marker::PhantomData,
ptr::NonNull,
};
use rand_distr::num_traits::Zero; use rand_distr::num_traits::Zero;
@@ -113,8 +117,10 @@ where
panic!("cannot invert 0") panic!("cannot invert 0")
} }
let g_exp: u64 = let g_exp: u64 = mod_exp_u64(
mod_exp_u64(gal_el.unsigned_abs(), (self.cyclotomic_order() - 1) as usize) & (self.cyclotomic_order() - 1) as u64; gal_el.unsigned_abs(),
(self.cyclotomic_order() - 1) as usize,
) & (self.cyclotomic_order() - 1) as u64;
g_exp as i64 * gal_el.signum() g_exp as i64 * gal_el.signum()
} }
} }