Function concrete_core::crypto::cross::bootstrap [−][src]
pub fn bootstrap<OutCont, InCont, BskCont, AccCont, Scalar>(
lwe_out: &mut LweCiphertext<OutCont>,
lwe_in: &LweCiphertext<InCont>,
bootstrap_key: &BootstrapKey<BskCont>,
accumulator: &mut GlweCiphertext<AccCont>
) where
LweCiphertext<OutCont>: AsMutTensor<Element = Scalar>,
LweCiphertext<InCont>: AsRefTensor<Element = Scalar>,
BootstrapKey<BskCont>: AsMutTensor<Element = Complex64>,
GlweCiphertext<AccCont>: AsMutTensor<Element = Scalar>,
Scalar: UnsignedTorus,
Performs the bootstrapping of an LWE ciphertext, with a bootstrapping key.
Example
use concrete_core::crypto::bootstrap::BootstrapKey; use concrete_core::crypto::{GlweSize, LweSize, LweDimension, GlweDimension}; use concrete_core::math::decomposition::{DecompositionLevelCount, DecompositionBaseLog}; use concrete_core::math::polynomial::PolynomialSize; use concrete_core::crypto::secret::{LweSecretKey, GlweSecretKey}; use concrete_core::math::dispersion::LogStandardDev; use concrete_core::crypto::lwe::LweCiphertext; use concrete_core::crypto::glwe::GlweCiphertext; use concrete_core::crypto::cross::bootstrap; use concrete_core::math::fft::Complex64; let (lwe_dim, glwe_dim, poly_size) = (LweDimension(4), GlweDimension(6), PolynomialSize(512)); let (dec_lc, dec_bl) = (DecompositionLevelCount(3), DecompositionBaseLog(5)); let mut bsk = BootstrapKey::allocate( 9u32, glwe_dim.to_glwe_size(), poly_size, dec_lc, dec_bl, lwe_dim ); let lwe_sk = LweSecretKey::generate(lwe_dim); let glwe_sk = GlweSecretKey::generate(glwe_dim, poly_size); bsk.fill_with_new_key(&lwe_sk, &glwe_sk, LogStandardDev::from_log_standard_dev(-15.)); let mut frr_bsk = BootstrapKey::allocate_complex( Complex64::new(0.,0.), glwe_dim.to_glwe_size(), poly_size, dec_lc, dec_bl, lwe_dim ); frr_bsk.fill_with_forward_fourier(&bsk); let lwe_in = LweCiphertext::allocate(9u32, lwe_dim.to_lwe_size()); let mut lwe_out = LweCiphertext::allocate(9u32, LweSize(glwe_dim.0 * poly_size.0 + 1)); let mut accumulator = GlweCiphertext::allocate(0u32, poly_size, glwe_dim.to_glwe_size()); bootstrap(&mut lwe_out, &lwe_in, &frr_bsk, &mut accumulator);