diff --git a/poulpy-core/src/decryption/glwe_ct.rs b/poulpy-core/src/decryption/glwe_ct.rs index f40d765..3c64fda 100644 --- a/poulpy-core/src/decryption/glwe_ct.rs +++ b/poulpy-core/src/decryption/glwe_ct.rs @@ -15,7 +15,7 @@ impl GLWE> { pub fn decrypt_tmp_bytes(module: &M, a_infos: &A) -> usize where A: GLWEInfos, - M: GLWEDecryption, + M: GLWEDecrypt, { module.glwe_decrypt_tmp_bytes(a_infos) } @@ -26,14 +26,14 @@ impl GLWE { where P: GLWEPlaintextToMut, S: GLWESecretPreparedToRef, - M: GLWEDecryption, + M: GLWEDecrypt, Scratch: ScratchTakeBasic, { module.glwe_decrypt(self, pt, sk, scratch); } } -pub trait GLWEDecryption +pub trait GLWEDecrypt where Self: Sized + ModuleN @@ -110,7 +110,7 @@ where } } -impl GLWEDecryption for Module where +impl GLWEDecrypt for Module where Self: ModuleN + VecZnxDftBytesOf + VecZnxNormalizeTmpBytes diff --git a/poulpy-core/src/encryption/compressed/mod.rs b/poulpy-core/src/encryption/compressed/mod.rs index e763db4..a2f7b9a 100644 --- a/poulpy-core/src/encryption/compressed/mod.rs +++ b/poulpy-core/src/encryption/compressed/mod.rs @@ -4,3 +4,10 @@ mod gglwe_ksk; mod gglwe_tsk; mod ggsw_ct; mod glwe_ct; + +pub use gglwe_atk::*; +pub use gglwe_ct::*; +pub use gglwe_ksk::*; +pub use gglwe_tsk::*; +pub use ggsw_ct::*; +pub use glwe_ct::*; diff --git a/poulpy-core/src/encryption/mod.rs b/poulpy-core/src/encryption/mod.rs index fb9a459..9cc3a4b 100644 --- a/poulpy-core/src/encryption/mod.rs +++ b/poulpy-core/src/encryption/mod.rs @@ -11,5 +11,18 @@ mod lwe_ct; mod lwe_ksk; mod lwe_to_glwe_ksk; +pub use compressed::*; +pub use gglwe_atk::*; +pub use gglwe_ct::*; +pub use gglwe_ksk::*; +pub use gglwe_tsk::*; +pub use ggsw_ct::*; +pub use glwe_ct::*; +pub use glwe_pk::*; +pub use glwe_to_lwe_ksk::*; +pub use lwe_ct::*; +pub use lwe_ksk::*; +pub use lwe_to_glwe_ksk::*; + pub const SIGMA: f64 = 3.2; pub(crate) const SIGMA_BOUND: f64 = 6.0 * SIGMA; diff --git a/poulpy-core/src/lib.rs b/poulpy-core/src/lib.rs index 88a0ac5..8c45893 100644 --- a/poulpy-core/src/lib.rs +++ b/poulpy-core/src/lib.rs @@ -17,6 +17,7 @@ pub mod layouts; pub use automorphism::*; pub use conversion::*; pub use dist::*; +pub use encryption::*; pub use external_product::*; pub use glwe_packing::*; pub use keyswitching::*; diff --git a/poulpy-core/src/noise/gglwe_ct.rs b/poulpy-core/src/noise/gglwe_ct.rs index 189f471..48c2df8 100644 --- a/poulpy-core/src/noise/gglwe_ct.rs +++ b/poulpy-core/src/noise/gglwe_ct.rs @@ -4,7 +4,7 @@ use poulpy_hal::{ oep::{ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl, VecZnxSubScalarInplaceImpl}, }; -use crate::decryption::GLWEDecryption; +use crate::decryption::GLWEDecrypt; use crate::layouts::{ GGLWE, GGLWEInfos, GGLWEToRef, GLWEPlaintext, LWEInfos, prepared::{GLWESecretPrepared, GLWESecretPreparedToRef}, @@ -90,7 +90,7 @@ pub trait GGLWENoise { impl GGLWENoise for Module where - Module: GLWEDecryption, + Module: GLWEDecrypt, Scratch: ScratchTakeBasic + ScratchOwnedAllocImpl + ScratchOwnedBorrowImpl diff --git a/poulpy-core/src/noise/ggsw_ct.rs b/poulpy-core/src/noise/ggsw_ct.rs index aa270a5..13531e3 100644 --- a/poulpy-core/src/noise/ggsw_ct.rs +++ b/poulpy-core/src/noise/ggsw_ct.rs @@ -9,7 +9,7 @@ use poulpy_hal::{ oep::{ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl}, }; -use crate::decryption::GLWEDecryption; +use crate::decryption::GLWEDecrypt; use crate::layouts::prepared::GLWESecretPreparedToRef; use crate::layouts::{GGSW, GGSWInfos, GGSWToRef, GLWEInfos, GLWEPlaintext, LWEInfos, prepared::GLWESecretPrepared}; @@ -79,7 +79,7 @@ where + VecZnxIdftApplyTmpA + VecZnxAddScalarInplace + VecZnxSubInplace - + GLWEDecryption, + + GLWEDecrypt, Scratch: ScratchTakeBasic, { fn ggsw_assert_noise(&self, res: &R, sk_prepared: &S, pt_want: &P, max_noise: F) diff --git a/poulpy-core/src/noise/glwe_ct.rs b/poulpy-core/src/noise/glwe_ct.rs index d21ae60..b89bdc6 100644 --- a/poulpy-core/src/noise/glwe_ct.rs +++ b/poulpy-core/src/noise/glwe_ct.rs @@ -9,7 +9,7 @@ use poulpy_hal::{ }; use crate::{ - decryption::GLWEDecryption, + decryption::GLWEDecrypt, layouts::{ GLWE, GLWEPlaintext, GLWEPlaintextToRef, GLWEToRef, LWEInfos, prepared::{GLWESecretPrepared, GLWESecretPreparedToRef}, @@ -124,7 +124,7 @@ where + VecZnxNormalizeTmpBytes + VecZnxSubInplace + VecZnxNormalizeInplace - + GLWEDecryption, + + GLWEDecrypt, Scratch: ScratchTakeBasic + ScratchOwnedAllocImpl + ScratchOwnedBorrowImpl diff --git a/poulpy-core/src/tests/mod.rs b/poulpy-core/src/tests/mod.rs index 5dcd276..6d94982 100644 --- a/poulpy-core/src/tests/mod.rs +++ b/poulpy-core/src/tests/mod.rs @@ -1,4 +1,4 @@ -// pub mod test_suite; +pub mod test_suite; #[cfg(test)] mod serialization; diff --git a/poulpy-core/src/tests/test_suite/encryption/glwe_ct.rs b/poulpy-core/src/tests/test_suite/encryption/glwe_ct.rs index ed2c1e3..73d1679 100644 --- a/poulpy-core/src/tests/test_suite/encryption/glwe_ct.rs +++ b/poulpy-core/src/tests/test_suite/encryption/glwe_ct.rs @@ -1,60 +1,38 @@ use poulpy_hal::{ api::{ - ScratchOwnedAlloc, ScratchOwnedBorrow, SvpApplyDftToDft, SvpApplyDftToDftInplace, SvpPPolAlloc, SvpPPolBytesOf, - SvpPrepare, VecZnxAddInplace, VecZnxAddNormal, VecZnxBigAddInplace, VecZnxBigAddNormal, VecZnxBigAddSmallInplace, - VecZnxBigBytesOf, VecZnxBigNormalize, VecZnxCopy, VecZnxDftAlloc, VecZnxDftApply, VecZnxDftBytesOf, VecZnxFillUniform, - VecZnxIdftApplyConsume, VecZnxNormalize, VecZnxNormalizeInplace, VecZnxNormalizeTmpBytes, VecZnxSub, VecZnxSubInplace, - }, - layouts::{Backend, Module, ScratchOwned}, - oep::{ - ScratchAvailableImpl, ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl, TakeScalarZnxImpl, TakeSvpPPolImpl, - TakeVecZnxBigImpl, TakeVecZnxDftImpl, TakeVecZnxImpl, + ScratchAvailable, ScratchOwnedAlloc, ScratchOwnedBorrow, SvpApplyDftToDft, SvpApplyDftToDftInplace, SvpPPolAlloc, + SvpPPolBytesOf, SvpPrepare, VecZnxAddInplace, VecZnxAddNormal, VecZnxBigAddInplace, VecZnxBigAddNormal, + VecZnxBigAddSmallInplace, VecZnxBigBytesOf, VecZnxBigNormalize, VecZnxCopy, VecZnxDftAlloc, VecZnxDftApply, + VecZnxDftBytesOf, VecZnxFillUniform, VecZnxIdftApplyConsume, VecZnxNormalize, VecZnxNormalizeInplace, + VecZnxNormalizeTmpBytes, VecZnxSub, VecZnxSubInplace, }, + layouts::{Backend, Module, Scratch, ScratchOwned}, source::Source, }; use crate::{ + GLWEEncryptSk, GLWESub, ScratchTakeCore, + decryption::GLWEDecrypt, encryption::SIGMA, layouts::{ - GLWE, GLWELayout, GLWEPlaintext, GLWEPlaintextLayout, GLWEPublicKey, GLWESecret, LWEInfos, - compressed::{Decompress, GLWECompressed}, - prepared::{GLWEPublicKeyPrepared, GLWESecretPrepared, PrepareAlloc}, + GLWE, GLWEAlloc, GLWELayout, GLWEPlaintext, GLWEPlaintextLayout, GLWEPublicKey, GLWESecret, GLWESecretPrepare, + GLWESecretPreparedAlloc, LWEInfos, + compressed::GLWECompressed, + prepared::{GLWEPublicKeyPrepared, GLWESecretPrepared}, }, - operations::GLWEOperations, }; -pub fn test_glwe_encrypt_sk(module: &Module) +pub fn test_glwe_encrypt_sk(module: &Module) where - Module: VecZnxDftBytesOf - + VecZnxBigBytesOf - + VecZnxDftApply - + SvpApplyDftToDftInplace - + VecZnxIdftApplyConsume - + VecZnxBigAddInplace - + VecZnxBigAddSmallInplace - + VecZnxBigNormalize - + VecZnxNormalizeTmpBytes - + SvpPrepare - + SvpPPolBytesOf - + SvpPPolAlloc - + SvpApplyDftToDft - + VecZnxBigAddNormal + Module: GLWEAlloc + + GLWEEncryptSk + + GLWEDecrypt + + GLWESecretPreparedAlloc + + GLWESecretPrepare + VecZnxFillUniform - + VecZnxSubInplace - + VecZnxAddInplace - + VecZnxNormalizeInplace - + VecZnxAddNormal - + VecZnxNormalize - + VecZnxSub, - B: Backend - + TakeVecZnxDftImpl - + TakeVecZnxBigImpl - + TakeSvpPPolImpl - + ScratchOwnedAllocImpl - + ScratchOwnedBorrowImpl - + ScratchAvailableImpl - + TakeScalarZnxImpl - + TakeVecZnxImpl, + + GLWESub, + ScratchOwned: ScratchOwnedAlloc + ScratchOwnedBorrow, + Scratch: ScratchAvailable + ScratchTakeCore, { let base2k: usize = 8; let k_ct: usize = 54; @@ -76,21 +54,22 @@ where k: k_pt.into(), }; - let mut ct: GLWE> = GLWE::alloc_from_infos(&glwe_infos); - let mut pt_want: GLWEPlaintext> = GLWEPlaintext::alloc_from_infos(&pt_infos); - let mut pt_have: GLWEPlaintext> = GLWEPlaintext::alloc_from_infos(&pt_infos); + let mut ct: GLWE> = GLWE::alloc_from_infos(module, &glwe_infos); + let mut pt_want: GLWEPlaintext> = GLWEPlaintext::alloc_from_infos(module, &pt_infos); + let mut pt_have: GLWEPlaintext> = GLWEPlaintext::alloc_from_infos(module, &pt_infos); let mut source_xs: 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 scratch: ScratchOwned = ScratchOwned::alloc( - GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos) | GLWE::decrypt_tmp_bytes(module, &glwe_infos), - ); + let mut scratch: ScratchOwned = + ScratchOwned::alloc(GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos) | GLWE::decrypt_tmp_bytes(module, &glwe_infos)); - let mut sk: GLWESecret> = GLWESecret::alloc_from_infos(&glwe_infos); + let mut sk: GLWESecret> = GLWESecret::alloc_from_infos(module, &glwe_infos); sk.fill_ternary_prob(0.5, &mut source_xs); - let sk_prepared: GLWESecretPrepared, B> = sk.prepare_alloc(module, scratch.borrow()); + let mut sk_prepared: GLWESecretPrepared, B> = GLWESecretPrepared::alloc(module, rank.into()); + + sk_prepared.prepare(module, &sk); module.vec_znx_fill_uniform(base2k, &mut pt_want.data, 0, &mut source_xa); @@ -105,7 +84,7 @@ where ct.decrypt(module, &mut pt_have, &sk_prepared, scratch.borrow()); - pt_want.sub_inplace_ab(module, &pt_have); + module.glwe_sub_inplace(&mut pt_want, &pt_have); let noise_have: f64 = pt_want.data.std(base2k, 0) * (ct.k().as_u32() as f64).exp2(); let noise_want: f64 = SIGMA; @@ -138,15 +117,6 @@ where + VecZnxNormalize + VecZnxSub + VecZnxCopy, - B: Backend - + TakeVecZnxDftImpl - + TakeVecZnxBigImpl - + TakeSvpPPolImpl - + ScratchOwnedAllocImpl - + ScratchOwnedBorrowImpl - + ScratchAvailableImpl - + TakeScalarZnxImpl - + TakeVecZnxImpl, { let base2k: usize = 8; let k_ct: usize = 54; @@ -239,15 +209,6 @@ where + VecZnxAddNormal + VecZnxNormalize + VecZnxSub, - B: Backend - + TakeVecZnxDftImpl - + TakeVecZnxBigImpl - + TakeSvpPPolImpl - + ScratchOwnedAllocImpl - + ScratchOwnedBorrowImpl - + ScratchAvailableImpl - + TakeScalarZnxImpl - + TakeVecZnxImpl, { let base2k: usize = 8; let k_ct: usize = 54; @@ -268,9 +229,8 @@ where let mut source_xe: Source = Source::new([1u8; 32]); let mut source_xa: Source = Source::new([0u8; 32]); - let mut scratch: ScratchOwned = ScratchOwned::alloc( - GLWE::decrypt_tmp_bytes(module, &glwe_infos) | GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos), - ); + let mut scratch: ScratchOwned = + ScratchOwned::alloc(GLWE::decrypt_tmp_bytes(module, &glwe_infos) | GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos)); let mut sk: GLWESecret> = GLWESecret::alloc_from_infos(&glwe_infos); sk.fill_ternary_prob(0.5, &mut source_xs); @@ -316,15 +276,6 @@ where + VecZnxDftAlloc + SvpApplyDftToDft + VecZnxBigAddNormal, - B: Backend - + TakeVecZnxDftImpl - + TakeVecZnxBigImpl - + TakeSvpPPolImpl - + ScratchOwnedAllocImpl - + ScratchOwnedBorrowImpl - + ScratchAvailableImpl - + TakeScalarZnxImpl - + TakeVecZnxImpl, { let base2k: usize = 8; let k_ct: usize = 54; diff --git a/poulpy-core/src/tests/test_suite/encryption/mod.rs b/poulpy-core/src/tests/test_suite/encryption/mod.rs index d871177..33fd5a1 100644 --- a/poulpy-core/src/tests/test_suite/encryption/mod.rs +++ b/poulpy-core/src/tests/test_suite/encryption/mod.rs @@ -1,11 +1,11 @@ -mod gglwe_atk; -mod gglwe_ct; -mod ggsw_ct; +// mod gglwe_atk; +// mod gglwe_ct; +// mod ggsw_ct; mod glwe_ct; -mod glwe_tsk; +// mod glwe_tsk; -pub use gglwe_atk::*; -pub use gglwe_ct::*; -pub use ggsw_ct::*; +// pub use gglwe_atk::*; +// pub use gglwe_ct::*; +// pub use ggsw_ct::*; pub use glwe_ct::*; -pub use glwe_tsk::*; +// pub use glwe_tsk::*; diff --git a/poulpy-core/src/tests/test_suite/mod.rs b/poulpy-core/src/tests/test_suite/mod.rs index 624b9c3..54157bd 100644 --- a/poulpy-core/src/tests/test_suite/mod.rs +++ b/poulpy-core/src/tests/test_suite/mod.rs @@ -1,12 +1,12 @@ -pub mod automorphism; +// pub mod automorphism; pub mod encryption; -pub mod external_product; -pub mod keyswitch; +// pub mod external_product; +// pub mod keyswitch; -mod conversion; -mod packing; -mod trace; +// mod conversion; +// mod packing; +// mod trace; -pub use conversion::*; -pub use packing::*; -pub use trace::*; +// pub use conversion::*; +// pub use packing::*; +// pub use trace::*;