mirror of
https://github.com/zama-ai/tfhe-rs.git
synced 2026-01-08 22:28:01 -05:00
refactor(tfhe): refactor serizalization, unplug core_crypto::prelude
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use crate::c_api::utils::*;
|
||||
use crate::core_crypto::prelude::{
|
||||
pub use crate::core_crypto::specification::dispersion::StandardDev;
|
||||
pub use crate::core_crypto::specification::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
|
||||
StandardDev,
|
||||
};
|
||||
use std::os::raw::c_int;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::core_crypto::commons::numeric::Numeric;
|
||||
|
||||
/// A cleartext, not encoded, value
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct Cleartext<T: Numeric>(pub T);
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct GgswCiphertext<C: Container> {
|
||||
data: C,
|
||||
polynomial_size: PolynomialSize,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct GgswCiphertextList<C: Container> {
|
||||
data: C,
|
||||
glwe_size: GlweSize,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct GlweBody<C: Container> {
|
||||
data: C,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct GlweCiphertextList<C: Container> {
|
||||
data: C,
|
||||
polynomial_size: PolynomialSize,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct GlweSecretKey<C: Container> {
|
||||
data: C,
|
||||
polynomial_size: PolynomialSize,
|
||||
|
||||
@@ -4,7 +4,7 @@ use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
// An LweBootstrapKey is literally a GgswCiphertextList, so we wrap a GgswCiphetextList and use
|
||||
// Deref to have access to all the primitives of the GgswCiphertextList easily
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LweBootstrapKey<C: Container> {
|
||||
ggsw_list: GgswCiphertextList<C>,
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ impl<T, C: ContainerMut<Element = T>> AsMut<[T]> for LweMask<C> {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LweCiphertext<C: Container> {
|
||||
data: C,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LweCiphertextList<C: Container> {
|
||||
data: C,
|
||||
lwe_size: LweSize,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LweKeyswitchKey<C: Container> {
|
||||
data: C,
|
||||
decomp_base_log: DecompositionBaseLog,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LwePrivateFunctionalPackingKeyswitchKey<C: Container> {
|
||||
data: C,
|
||||
decomp_base_log: DecompositionBaseLog,
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LwePrivateFunctionalPackingKeyswitchKeyList<C: Container> {
|
||||
data: C,
|
||||
decomp_base_log: DecompositionBaseLog,
|
||||
|
||||
@@ -4,7 +4,7 @@ use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
// An LwePublicKey is literally an LweCiphertextList, so we wrap an LweCiphertextList and use
|
||||
// Deref to have access to all the primitives of the LweCiphertextList easily
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LwePublicKey<C: Container> {
|
||||
lwe_list: LweCiphertextList<C>,
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::prelude::LweDimension;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LweSecretKey<C: Container> {
|
||||
data: C,
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use crate::core_crypto::commons::traits::*;
|
||||
|
||||
/// A plaintext (encoded) value.
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
|
||||
pub struct Plaintext<T>(pub T);
|
||||
|
||||
impl<'data, T> CreateFrom<&'data [T]> for Plaintext<&'data T> {
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct PlaintextList<C: Container> {
|
||||
data: C,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
use std::ops::{Deref, DerefMut};
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct Polynomial<C: Container> {
|
||||
data: C,
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::core_crypto::commons::traits::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, serde::Serialize, serde::Deserialize)]
|
||||
pub struct PolynomialList<C: Container> {
|
||||
data: C,
|
||||
polynomial_size: PolynomialSize,
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
//! Module with the definition of a short-integer ciphertext.
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::{
|
||||
AbstractEngine, DefaultSerializationEngine, EntityDeserializationEngine,
|
||||
EntitySerializationEngine, LweCiphertext64,
|
||||
};
|
||||
use crate::shortint::parameters::{CarryModulus, MessageModulus};
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
use std::cmp;
|
||||
@@ -105,13 +101,7 @@ impl Serialize for Ciphertext {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
let old_ct: LweCiphertext64 = self.ct.clone().into();
|
||||
|
||||
let data = ser_eng
|
||||
.serialize(&old_ct)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let data = bincode::serialize(&self.ct).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
SerializableCiphertext {
|
||||
data,
|
||||
@@ -130,14 +120,10 @@ impl<'de> Deserialize<'de> for Ciphertext {
|
||||
{
|
||||
let thing = SerializableCiphertext::deserialize(deserializer)?;
|
||||
|
||||
let mut de_eng = DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
let old_ct: LweCiphertext64 = de_eng
|
||||
.deserialize(thing.data.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
let ct = bincode::deserialize(thing.data.as_slice()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(Self {
|
||||
ct: old_ct.into(),
|
||||
ct,
|
||||
degree: thing.degree,
|
||||
message_modulus: thing.message_modulus,
|
||||
carry_modulus: thing.carry_modulus,
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
//! Module with the definition of the ClientKey.
|
||||
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::shortint::ciphertext::Ciphertext;
|
||||
use crate::shortint::engine::ShortintEngine;
|
||||
use crate::shortint::parameters::{MessageModulus, Parameters};
|
||||
@@ -333,25 +332,12 @@ impl Serialize for ClientKey {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
// TODO REFACTOR
|
||||
// Remove the clone + into and serialize properly when we want to change the key caches
|
||||
let tmp_lwe_secret_key: LweSecretKey64 = self.lwe_secret_key.clone().into();
|
||||
let tmp_lwe_secret_key_after_ks: LweSecretKey64 =
|
||||
self.lwe_secret_key_after_ks.clone().into();
|
||||
|
||||
let tmp_glwe_secret_key: GlweSecretKey64 = self.glwe_secret_key.clone().into();
|
||||
|
||||
let lwe_secret_key = ser_eng
|
||||
.serialize(&tmp_lwe_secret_key)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let glwe_secret_key = ser_eng
|
||||
.serialize(&tmp_glwe_secret_key)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let lwe_secret_key_after_ks = ser_eng
|
||||
.serialize(&tmp_lwe_secret_key_after_ks)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let lwe_secret_key =
|
||||
bincode::serialize(&self.lwe_secret_key).map_err(serde::ser::Error::custom)?;
|
||||
let glwe_secret_key =
|
||||
bincode::serialize(&self.glwe_secret_key).map_err(serde::ser::Error::custom)?;
|
||||
let lwe_secret_key_after_ks =
|
||||
bincode::serialize(&self.lwe_secret_key_after_ks).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
SerializableClientKey {
|
||||
lwe_secret_key,
|
||||
@@ -370,25 +356,19 @@ impl<'de> Deserialize<'de> for ClientKey {
|
||||
{
|
||||
let thing =
|
||||
SerializableClientKey::deserialize(deserializer).map_err(serde::de::Error::custom)?;
|
||||
let mut de_eng = DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
// TODO REFACTOR
|
||||
// Remove the clone + into and serialize properly when we want to change the key caches
|
||||
let tmp_lwe_secret_key: LweSecretKey64 = de_eng
|
||||
.deserialize(thing.lwe_secret_key.as_slice())
|
||||
let lwe_secret_key = bincode::deserialize(thing.lwe_secret_key.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
let tmp_lwe_secret_key_after_ks: LweSecretKey64 = de_eng
|
||||
.deserialize(thing.lwe_secret_key_after_ks.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_glwe_secret_key: GlweSecretKey64 = de_eng
|
||||
.deserialize(thing.glwe_secret_key.as_slice())
|
||||
let lwe_secret_key_after_ks =
|
||||
bincode::deserialize(thing.lwe_secret_key_after_ks.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
let glwe_secret_key = bincode::deserialize(thing.glwe_secret_key.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(Self {
|
||||
lwe_secret_key: tmp_lwe_secret_key.into(),
|
||||
glwe_secret_key: tmp_glwe_secret_key.into(),
|
||||
lwe_secret_key_after_ks: tmp_lwe_secret_key_after_ks.into(),
|
||||
lwe_secret_key,
|
||||
glwe_secret_key,
|
||||
lwe_secret_key_after_ks,
|
||||
parameters: thing.parameters,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,8 +2,9 @@ use crate::core_crypto::algorithms::*;
|
||||
use crate::core_crypto::commons::crypto::secret::generators::{
|
||||
EncryptionRandomGenerator, SecretRandomGenerator,
|
||||
};
|
||||
use crate::core_crypto::commons::math::random::Seeder;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::{Seeder, *};
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
use crate::seeders::new_seeder;
|
||||
use crate::shortint::ServerKey;
|
||||
use core::mem::MaybeUninit;
|
||||
@@ -109,7 +110,7 @@ pub struct ShortintEngine {
|
||||
/// A structure containing two CSPRNGs to generate material for encryption like public masks
|
||||
/// and secret errors.
|
||||
///
|
||||
/// The [`ImplEncryptionRandomGenerator`] contains two CSPRNGs, one publicly seeded used to
|
||||
/// The [`EncryptionRandomGenerator`] contains two CSPRNGs, one publicly seeded used to
|
||||
/// generate mask coefficients and one privately seeded used to generate errors during
|
||||
/// encryption.
|
||||
pub(crate) encryption_generator: EncryptionRandomGenerator<ActivatedRandomGenerator>,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
use super::{EngineResult, ShortintEngine};
|
||||
use crate::core_crypto::algorithms::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
use crate::shortint::ciphertext::Degree;
|
||||
use crate::shortint::parameters::{CarryModulus, MessageModulus};
|
||||
use crate::shortint::{Ciphertext, ClientKey, PublicKey, ServerKey};
|
||||
|
||||
@@ -3,7 +3,7 @@ use crate::core_crypto::algorithms::*;
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::fft_impl::crypto::bootstrap::FourierLweBootstrapKey;
|
||||
use crate::core_crypto::fft_impl::math::fft::Fft;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
use crate::shortint::ciphertext::Degree;
|
||||
use crate::shortint::engine::{EngineResult, ShortintEngine};
|
||||
use crate::shortint::server_key::MaxDegree;
|
||||
@@ -91,41 +91,34 @@ impl ShortintEngine {
|
||||
// Conversion to fourier domain
|
||||
convert_standard_lwe_bootstrap_key_to_fourier(&bootstrap_key, &mut small_bsk, fft, stack);
|
||||
|
||||
// Convert into a variance for lwe context
|
||||
let var_lwe = Variance(parameters.lwe_modular_std_dev.get_variance());
|
||||
//KSK encryption_key -> small WoPBS key (used in the 1st KS in the extract bit)
|
||||
let ksk_wopbs_large_to_wopbs_small = allocate_and_generate_new_lwe_keyswitch_key(
|
||||
&large_lwe_secret_key,
|
||||
&small_lwe_secret_key,
|
||||
parameters.ks_base_log,
|
||||
parameters.ks_level,
|
||||
var_lwe,
|
||||
parameters.lwe_modular_std_dev,
|
||||
&mut self.encryption_generator,
|
||||
);
|
||||
|
||||
//KSK to convert from input ciphertext key to the wopbs input one
|
||||
// TODO REFACTOR
|
||||
// Remove the clone + into
|
||||
// KSK to convert from input ciphertext key to the wopbs input one
|
||||
let ksk_pbs_large_to_wopbs_large = allocate_and_generate_new_lwe_keyswitch_key(
|
||||
&cks.lwe_secret_key,
|
||||
&large_lwe_secret_key,
|
||||
cks.parameters.ks_base_log,
|
||||
cks.parameters.ks_level,
|
||||
var_lwe,
|
||||
parameters.lwe_modular_std_dev,
|
||||
&mut self.encryption_generator,
|
||||
);
|
||||
|
||||
//KSK large_wopbs_key -> small PBS key (used after the WoPBS computation to compute a
|
||||
// KSK large_wopbs_key -> small PBS key (used after the WoPBS computation to compute a
|
||||
// classical PBS. This allows compatibility between PBS and WoPBS
|
||||
// TODO REFACTOR
|
||||
// Remove the clone + into
|
||||
let var_lwe_pbs = Variance(cks.parameters.lwe_modular_std_dev.get_variance());
|
||||
let ksk_wopbs_large_to_pbs_small = allocate_and_generate_new_lwe_keyswitch_key(
|
||||
&large_lwe_secret_key,
|
||||
&cks.lwe_secret_key_after_ks,
|
||||
cks.parameters.ks_base_log,
|
||||
cks.parameters.ks_level,
|
||||
var_lwe_pbs,
|
||||
cks.parameters.lwe_modular_std_dev,
|
||||
&mut self.encryption_generator,
|
||||
);
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
//! homomorphic evaluation of integer circuits as well as a list of secure cryptographic parameter
|
||||
//! sets.
|
||||
|
||||
pub use crate::core_crypto::prelude::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
|
||||
LweDimension, PolynomialSize, StandardDev,
|
||||
pub use crate::core_crypto::specification::dispersion::{DispersionParameter, StandardDev};
|
||||
pub use crate::core_crypto::specification::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pub use crate::core_crypto::prelude::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
|
||||
LweDimension, PolynomialSize, StandardDev,
|
||||
pub use crate::core_crypto::specification::dispersion::{DispersionParameter, StandardDev};
|
||||
pub use crate::core_crypto::specification::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
|
||||
};
|
||||
use crate::shortint::parameters::{CarryModulus, MessageModulus};
|
||||
use crate::shortint::Parameters;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pub use crate::core_crypto::prelude::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
|
||||
LweDimension, PolynomialSize, StandardDev,
|
||||
pub use crate::core_crypto::specification::dispersion::{DispersionParameter, StandardDev};
|
||||
pub use crate::core_crypto::specification::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
|
||||
};
|
||||
use crate::shortint::parameters::parameters_wopbs::*;
|
||||
use crate::shortint::parameters::parameters_wopbs_prime_moduli::*;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
pub use crate::core_crypto::prelude::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, DispersionParameter, GlweDimension,
|
||||
LweDimension, PolynomialSize, StandardDev,
|
||||
pub use crate::core_crypto::specification::dispersion::{DispersionParameter, StandardDev};
|
||||
pub use crate::core_crypto::specification::parameters::{
|
||||
DecompositionBaseLog, DecompositionLevelCount, GlweDimension, LweDimension, PolynomialSize,
|
||||
};
|
||||
use crate::shortint::parameters::{CarryModulus, MessageModulus};
|
||||
use crate::shortint::Parameters;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
//! Module with the definition of the PublicKey.
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::shortint::ciphertext::Ciphertext;
|
||||
use crate::shortint::engine::ShortintEngine;
|
||||
use crate::shortint::parameters::{MessageModulus, Parameters};
|
||||
@@ -212,13 +211,8 @@ impl Serialize for PublicKey {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
let tmp_public_key: LwePublicKey64 = self.lwe_public_key.clone().into();
|
||||
|
||||
let lwe_public_key = ser_eng
|
||||
.serialize(&tmp_public_key)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let lwe_public_key =
|
||||
bincode::serialize(&self.lwe_public_key).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
SerializablePublicKey {
|
||||
lwe_public_key,
|
||||
@@ -235,14 +229,12 @@ impl<'de> Deserialize<'de> for PublicKey {
|
||||
{
|
||||
let thing =
|
||||
SerializablePublicKey::deserialize(deserializer).map_err(serde::de::Error::custom)?;
|
||||
let mut de_eng = DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_public_key: LwePublicKey64 = de_eng
|
||||
.deserialize(thing.lwe_public_key.as_slice())
|
||||
let lwe_public_key = bincode::deserialize(thing.lwe_public_key.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(Self {
|
||||
lwe_public_key: tmp_public_key.into(),
|
||||
lwe_public_key,
|
||||
parameters: thing.parameters,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -19,7 +19,6 @@ mod tests;
|
||||
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::fft_impl::crypto::bootstrap::FourierLweBootstrapKeyOwned;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::shortint::ciphertext::Ciphertext;
|
||||
use crate::shortint::client_key::ClientKey;
|
||||
use crate::shortint::engine::ShortintEngine;
|
||||
@@ -554,17 +553,9 @@ impl Serialize for ServerKey {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
let mut fft_ser_eng = FftSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
let tmp_ksk: LweKeyswitchKey64 = self.key_switching_key.clone().into();
|
||||
let tmp_bsk: FftFourierLweBootstrapKey64 = self.bootstrapping_key.clone().into();
|
||||
|
||||
let key_switching_key = ser_eng
|
||||
.serialize(&tmp_ksk)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let bootstrapping_key = fft_ser_eng
|
||||
.serialize(&tmp_bsk)
|
||||
let key_switching_key =
|
||||
bincode::serialize(&self.key_switching_key).map_err(serde::ser::Error::custom)?;
|
||||
let bootstrapping_key = bincode::serialize(&self.bootstrapping_key.as_view())
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
|
||||
SerializableServerKey {
|
||||
@@ -585,20 +576,16 @@ impl<'de> Deserialize<'de> for ServerKey {
|
||||
{
|
||||
let thing =
|
||||
SerializableServerKey::deserialize(deserializer).map_err(serde::de::Error::custom)?;
|
||||
let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
let mut fft_ser_eng = FftSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_ksk: LweKeyswitchKey64 = ser_eng
|
||||
.deserialize(thing.key_switching_key.as_slice())
|
||||
let key_switching_key = bincode::deserialize(thing.key_switching_key.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_bsk: FftFourierLweBootstrapKey64 = fft_ser_eng
|
||||
.deserialize(thing.bootstrapping_key.as_slice())
|
||||
let bootstrapping_key = bincode::deserialize(thing.bootstrapping_key.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(Self {
|
||||
key_switching_key: tmp_ksk.into(),
|
||||
bootstrapping_key: tmp_bsk.into(),
|
||||
key_switching_key,
|
||||
bootstrapping_key,
|
||||
message_modulus: thing.message_modulus,
|
||||
carry_modulus: thing.carry_modulus,
|
||||
max_degree: thing.max_degree,
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
//! both uses.
|
||||
|
||||
use crate::core_crypto::entities::*;
|
||||
use crate::core_crypto::prelude::*;
|
||||
use crate::core_crypto::specification::parameters::*;
|
||||
use crate::shortint::engine::ShortintEngine;
|
||||
use crate::shortint::{Ciphertext, ClientKey, Parameters, ServerKey};
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
@@ -390,21 +390,10 @@ impl Serialize for WopbsKey {
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
let mut default_ser_eng =
|
||||
DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
|
||||
let cbs_pfpksk = bincode::serialize(&self.cbs_pfpksk).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
let tmp_cbs_pfpksk: LweCircuitBootstrapPrivateFunctionalPackingKeyswitchKeys64 =
|
||||
self.cbs_pfpksk.clone().into();
|
||||
|
||||
let cbs_pfpksk = default_ser_eng
|
||||
.serialize(&tmp_cbs_pfpksk)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
|
||||
let tmp_ksk_pbs_to_wopbs: LweKeyswitchKey64 = self.ksk_pbs_to_wopbs.clone().into();
|
||||
|
||||
let ksk_pbs_to_wopbs = default_ser_eng
|
||||
.serialize(&tmp_ksk_pbs_to_wopbs)
|
||||
.map_err(serde::ser::Error::custom)?;
|
||||
let ksk_pbs_to_wopbs =
|
||||
bincode::serialize(&self.ksk_pbs_to_wopbs).map_err(serde::ser::Error::custom)?;
|
||||
|
||||
SerializableWopbsKey {
|
||||
wopbs_server_key: &self.wopbs_server_key,
|
||||
@@ -425,23 +414,17 @@ impl<'de> Deserialize<'de> for WopbsKey {
|
||||
let thing =
|
||||
DeserializableWopbsKey::deserialize(deserializer).map_err(serde::de::Error::custom)?;
|
||||
|
||||
let mut default_ser_eng =
|
||||
DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
|
||||
let cbs_pfpksk =
|
||||
bincode::deserialize(thing.cbs_pfpksk.as_slice()).map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_cbs_pfpksk: LweCircuitBootstrapPrivateFunctionalPackingKeyswitchKeys64 =
|
||||
default_ser_eng
|
||||
.deserialize(thing.cbs_pfpksk.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
let tmp_ksk_pbs_to_wopbs: LweKeyswitchKey64 = default_ser_eng
|
||||
.deserialize(thing.ksk_pbs_to_wopbs.as_slice())
|
||||
let ksk_pbs_to_wopbs = bincode::deserialize(thing.ksk_pbs_to_wopbs.as_slice())
|
||||
.map_err(serde::de::Error::custom)?;
|
||||
|
||||
Ok(Self {
|
||||
wopbs_server_key: thing.wopbs_server_key,
|
||||
pbs_server_key: thing.pbs_server_key,
|
||||
cbs_pfpksk: tmp_cbs_pfpksk.into(),
|
||||
ksk_pbs_to_wopbs: tmp_ksk_pbs_to_wopbs.into(),
|
||||
cbs_pfpksk,
|
||||
ksk_pbs_to_wopbs,
|
||||
param: thing.param,
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user