wip test glwe encryption
jump to
@@ -15,7 +15,7 @@ impl GLWE<Vec<u8>> {
pub fn decrypt_tmp_bytes<A, M, BE: Backend>(module: &M, a_infos: &A) -> usize where A: GLWEInfos, - M: GLWEDecryption<BE>, + M: GLWEDecrypt<BE>, { module.glwe_decrypt_tmp_bytes(a_infos) }@@ -26,14 +26,14 @@ pub fn decrypt<P, S, M, BE: Backend>(&mut self, module: &M, pt: &mut P, sk: &S, scratch: &mut Scratch<BE>)
where P: GLWEPlaintextToMut, S: GLWESecretPreparedToRef<BE>, - M: GLWEDecryption<BE>, + M: GLWEDecrypt<BE>, Scratch<BE>: ScratchTakeBasic, { module.glwe_decrypt(self, pt, sk, scratch); } } -pub trait GLWEDecryption<BE: Backend> +pub trait GLWEDecrypt<BE: Backend> where Self: Sized + ModuleN@@ -110,7 +110,7 @@ pt.k = pt.k().min(res.k());
} } -impl<BE: Backend> GLWEDecryption<BE> for Module<BE> where +impl<BE: Backend> GLWEDecrypt<BE> for Module<BE> where Self: ModuleN + VecZnxDftBytesOf + VecZnxNormalizeTmpBytes
@@ -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::*;
@@ -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;
@@ -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::*;
@@ -4,7 +4,7 @@ layouts::{Backend, DataRef, Module, ScalarZnx, ScalarZnxToRef, Scratch, ScratchOwned, ZnxZero},
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 @@ }
impl<BE: Backend> GGLWENoise<BE> for Module<BE> where - Module<BE>: GLWEDecryption<BE>, + Module<BE>: GLWEDecrypt<BE>, Scratch<BE>: ScratchTakeBasic + ScratchOwnedAllocImpl<BE> + ScratchOwnedBorrowImpl<BE>
@@ -9,7 +9,7 @@ layouts::{Backend, DataRef, Module, ScalarZnx, ScalarZnxToRef, Scratch, ScratchOwned, VecZnxBig, VecZnxDft, ZnxZero},
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 @@ + VecZnxBigNormalizeTmpBytes
+ VecZnxIdftApplyTmpA<BE> + VecZnxAddScalarInplace + VecZnxSubInplace - + GLWEDecryption<BE>, + + GLWEDecrypt<BE>, Scratch<BE>: ScratchTakeBasic, { fn ggsw_assert_noise<R, S, P, F>(&self, res: &R, sk_prepared: &S, pt_want: &P, max_noise: F)
@@ -9,7 +9,7 @@ oep::{ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl},
}; use crate::{ - decryption::GLWEDecryption, + decryption::GLWEDecrypt, layouts::{ GLWE, GLWEPlaintext, GLWEPlaintextToRef, GLWEToRef, LWEInfos, prepared::{GLWESecretPrepared, GLWESecretPreparedToRef},@@ -124,7 +124,7 @@ + VecZnxBigNormalize<BE>
+ VecZnxNormalizeTmpBytes + VecZnxSubInplace + VecZnxNormalizeInplace<BE> - + GLWEDecryption<BE>, + + GLWEDecrypt<BE>, Scratch<BE>: ScratchTakeBasic + ScratchOwnedAllocImpl<BE> + ScratchOwnedBorrowImpl<BE>
@@ -1,4 +1,4 @@
-// pub mod test_suite; +pub mod test_suite; #[cfg(test)] mod serialization;
@@ -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, + 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, ScratchOwned}, - oep::{ - ScratchAvailableImpl, ScratchOwnedAllocImpl, ScratchOwnedBorrowImpl, TakeScalarZnxImpl, TakeSvpPPolImpl, - TakeVecZnxBigImpl, TakeVecZnxDftImpl, TakeVecZnxImpl, - }, + 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<B>(module: &Module<B>) +pub fn test_glwe_encrypt_sk<B: Backend>(module: &Module<B>) where - Module<B>: VecZnxDftBytesOf - + VecZnxBigBytesOf - + VecZnxDftApply<B> - + SvpApplyDftToDftInplace<B> - + VecZnxIdftApplyConsume<B> - + VecZnxBigAddInplace<B> - + VecZnxBigAddSmallInplace<B> - + VecZnxBigNormalize<B> - + VecZnxNormalizeTmpBytes - + SvpPrepare<B> - + SvpPPolBytesOf - + SvpPPolAlloc<B> - + SvpApplyDftToDft<B> - + VecZnxBigAddNormal<B> + Module<B>: GLWEAlloc + + GLWEEncryptSk<B> + + GLWEDecrypt<B> + + GLWESecretPreparedAlloc<B> + + GLWESecretPrepare<B> + VecZnxFillUniform - + VecZnxSubInplace - + VecZnxAddInplace - + VecZnxNormalizeInplace<B> - + VecZnxAddNormal - + VecZnxNormalize<B> - + VecZnxSub, - B: Backend - + TakeVecZnxDftImpl<B> - + TakeVecZnxBigImpl<B> - + TakeSvpPPolImpl<B> - + ScratchOwnedAllocImpl<B> - + ScratchOwnedBorrowImpl<B> - + ScratchAvailableImpl<B> - + TakeScalarZnxImpl<B> - + TakeVecZnxImpl<B>, + + GLWESub, + ScratchOwned<B>: ScratchOwnedAlloc<B> + ScratchOwnedBorrow<B>, + Scratch<B>: ScratchAvailable + ScratchTakeCore<B>, { let base2k: usize = 8; let k_ct: usize = 54;@@ -76,21 +54,22 @@ base2k: base2k.into(),
k: k_pt.into(), }; - let mut ct: GLWE<Vec<u8>> = GLWE::alloc_from_infos(&glwe_infos); - let mut pt_want: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&pt_infos); - let mut pt_have: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(&pt_infos); + let mut ct: GLWE<Vec<u8>> = GLWE::alloc_from_infos(module, &glwe_infos); + let mut pt_want: GLWEPlaintext<Vec<u8>> = GLWEPlaintext::alloc_from_infos(module, &pt_infos); + let mut pt_have: GLWEPlaintext<Vec<u8>> = 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<B> = ScratchOwned::alloc( - GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos) | GLWE::decrypt_tmp_bytes(module, &glwe_infos), - ); + let mut scratch: ScratchOwned<B> = + ScratchOwned::alloc(GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos) | GLWE::decrypt_tmp_bytes(module, &glwe_infos)); - let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_infos); + let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(module, &glwe_infos); sk.fill_ternary_prob(0.5, &mut source_xs); - let sk_prepared: GLWESecretPrepared<Vec<u8>, B> = sk.prepare_alloc(module, scratch.borrow()); + let mut sk_prepared: GLWESecretPrepared<Vec<u8>, 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 @@ );
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 @@ + VecZnxAddNormal
+ VecZnxNormalize<B> + VecZnxSub + VecZnxCopy, - B: Backend - + TakeVecZnxDftImpl<B> - + TakeVecZnxBigImpl<B> - + TakeSvpPPolImpl<B> - + ScratchOwnedAllocImpl<B> - + ScratchOwnedBorrowImpl<B> - + ScratchAvailableImpl<B> - + TakeScalarZnxImpl<B> - + TakeVecZnxImpl<B>, { let base2k: usize = 8; let k_ct: usize = 54;@@ -239,15 +209,6 @@ + VecZnxNormalizeInplace<B>
+ VecZnxAddNormal + VecZnxNormalize<B> + VecZnxSub, - B: Backend - + TakeVecZnxDftImpl<B> - + TakeVecZnxBigImpl<B> - + TakeSvpPPolImpl<B> - + ScratchOwnedAllocImpl<B> - + ScratchOwnedBorrowImpl<B> - + ScratchAvailableImpl<B> - + TakeScalarZnxImpl<B> - + TakeVecZnxImpl<B>, { let base2k: usize = 8; let k_ct: usize = 54;@@ -268,9 +229,8 @@ let mut source_xs: Source = Source::new([0u8; 32]);
let mut source_xe: Source = Source::new([1u8; 32]); let mut source_xa: Source = Source::new([0u8; 32]); - let mut scratch: ScratchOwned<B> = ScratchOwned::alloc( - GLWE::decrypt_tmp_bytes(module, &glwe_infos) | GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos), - ); + let mut scratch: ScratchOwned<B> = + ScratchOwned::alloc(GLWE::decrypt_tmp_bytes(module, &glwe_infos) | GLWE::encrypt_sk_tmp_bytes(module, &glwe_infos)); let mut sk: GLWESecret<Vec<u8>> = GLWESecret::alloc_from_infos(&glwe_infos); sk.fill_ternary_prob(0.5, &mut source_xs);@@ -316,15 +276,6 @@ + VecZnxCopy
+ VecZnxDftAlloc<B> + SvpApplyDftToDft<B> + VecZnxBigAddNormal<B>, - B: Backend - + TakeVecZnxDftImpl<B> - + TakeVecZnxBigImpl<B> - + TakeSvpPPolImpl<B> - + ScratchOwnedAllocImpl<B> - + ScratchOwnedBorrowImpl<B> - + ScratchAvailableImpl<B> - + TakeScalarZnxImpl<B> - + TakeVecZnxImpl<B>, { let base2k: usize = 8; let k_ct: usize = 54;
@@ -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::*;
@@ -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::*;