refactor(tfhe): refactor serizalization, unplug core_crypto::prelude

This commit is contained in:
Arthur Meyre
2022-12-02 17:38:08 +01:00
committed by jborfila
parent 8ac33a9f63
commit c6060eb478
31 changed files with 79 additions and 157 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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>,
}

View File

@@ -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,
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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>,
}

View File

@@ -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,
}

View File

@@ -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> {

View File

@@ -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,
}

View File

@@ -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,
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,
})
}

View File

@@ -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>,

View File

@@ -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};

View File

@@ -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,
);

View File

@@ -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};

View File

@@ -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;

View File

@@ -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::*;

View File

@@ -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;

View File

@@ -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,
})
}

View File

@@ -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,

View File

@@ -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,
})
}