mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 05:06:44 +01:00
Distinguish between gglwe_to_ggsw key and tensor_key + update key repreentation
This commit is contained in:
@@ -10,8 +10,8 @@ use crate::tfhe::{
|
||||
use poulpy_core::{
|
||||
GLWEToLWESwitchingKeyEncryptSk, GetDistribution, LWEFromGLWE, ScratchTakeCore,
|
||||
layouts::{
|
||||
GGSWInfos, GGSWPreparedFactory, GLWEInfos, GLWESecretToRef, GLWEToLWEKeyLayout, GLWEToLWESwitchingKey,
|
||||
GLWEToLWESwitchingKeyPreparedFactory, LWE, LWEInfos, LWESecretToRef, prepared::GLWEToLWESwitchingKeyPrepared,
|
||||
GGSWInfos, GGSWPreparedFactory, GLWEInfos, GLWESecretToRef, GLWEToLWEKey, GLWEToLWEKeyLayout,
|
||||
GLWEToLWEKeyPreparedFactory, LWE, LWEInfos, LWESecretToRef, prepared::GLWEToLWEKeyPrepared,
|
||||
},
|
||||
};
|
||||
use poulpy_hal::{
|
||||
@@ -46,7 +46,7 @@ where
|
||||
BRA: BlindRotationAlgo,
|
||||
{
|
||||
cbt: CircuitBootstrappingKey<D, BRA>,
|
||||
ks: GLWEToLWESwitchingKey<D>,
|
||||
ks: GLWEToLWEKey<D>,
|
||||
}
|
||||
|
||||
impl<BRA: BlindRotationAlgo> BDDKey<Vec<u8>, BRA>
|
||||
@@ -59,7 +59,7 @@ where
|
||||
{
|
||||
Self {
|
||||
cbt: CircuitBootstrappingKey::alloc_from_infos(&infos.cbt_infos()),
|
||||
ks: GLWEToLWESwitchingKey::alloc_from_infos(&infos.ks_infos()),
|
||||
ks: GLWEToLWEKey::alloc_from_infos(&infos.ks_infos()),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,12 +130,12 @@ where
|
||||
BE: Backend,
|
||||
{
|
||||
pub(crate) cbt: CircuitBootstrappingKeyPrepared<D, BRA, BE>,
|
||||
pub(crate) ks: GLWEToLWESwitchingKeyPrepared<D, BE>,
|
||||
pub(crate) ks: GLWEToLWEKeyPrepared<D, BE>,
|
||||
}
|
||||
|
||||
pub trait BDDKeyPreparedFactory<BRA: BlindRotationAlgo, BE: Backend>
|
||||
where
|
||||
Self: Sized + CircuitBootstrappingKeyPreparedFactory<BRA, BE> + GLWEToLWESwitchingKeyPreparedFactory<BE>,
|
||||
Self: Sized + CircuitBootstrappingKeyPreparedFactory<BRA, BE> + GLWEToLWEKeyPreparedFactory<BE>,
|
||||
{
|
||||
fn alloc_bdd_key_from_infos<A>(&self, infos: &A) -> BDDKeyPrepared<Vec<u8>, BRA, BE>
|
||||
where
|
||||
@@ -143,7 +143,7 @@ where
|
||||
{
|
||||
BDDKeyPrepared {
|
||||
cbt: CircuitBootstrappingKeyPrepared::alloc_from_infos(self, &infos.cbt_infos()),
|
||||
ks: GLWEToLWESwitchingKeyPrepared::alloc_from_infos(self, &infos.ks_infos()),
|
||||
ks: GLWEToLWEKeyPrepared::alloc_from_infos(self, &infos.ks_infos()),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ where
|
||||
A: BDDKeyInfos,
|
||||
{
|
||||
self.circuit_bootstrapping_key_prepare_tmp_bytes(&infos.cbt_infos())
|
||||
.max(self.prepare_glwe_to_lwe_switching_key_tmp_bytes(&infos.ks_infos()))
|
||||
.max(self.prepare_glwe_to_lwe_key_tmp_bytes(&infos.ks_infos()))
|
||||
}
|
||||
|
||||
fn prepare_bdd_key<DM, DR>(&self, res: &mut BDDKeyPrepared<DM, BRA, BE>, other: &BDDKey<DR, BRA>, scratch: &mut Scratch<BE>)
|
||||
@@ -166,7 +166,7 @@ where
|
||||
}
|
||||
}
|
||||
impl<BRA: BlindRotationAlgo, BE: Backend> BDDKeyPreparedFactory<BRA, BE> for Module<BE> where
|
||||
Self: Sized + CircuitBootstrappingKeyPreparedFactory<BRA, BE> + GLWEToLWESwitchingKeyPreparedFactory<BE>
|
||||
Self: Sized + CircuitBootstrappingKeyPreparedFactory<BRA, BE> + GLWEToLWEKeyPreparedFactory<BE>
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ use poulpy_hal::{
|
||||
};
|
||||
|
||||
use poulpy_core::{
|
||||
GGSWFromGGLWE, GLWEDecrypt, GLWEPacking, GLWETrace, ScratchTakeCore,
|
||||
GGSWFromGGLWE, GLWEDecrypt, GLWEPacking, GLWERotate, GLWETrace, ScratchTakeCore,
|
||||
layouts::{
|
||||
Dsize, GGLWELayout, GGSWInfos, GGSWToMut, GLWEInfos, GLWESecretPreparedFactory, GLWEToMut, GLWEToRef, LWEInfos, LWEToRef,
|
||||
},
|
||||
@@ -115,7 +115,8 @@ where
|
||||
+ GLWEPacking<BE>
|
||||
+ GGSWFromGGLWE<BE>
|
||||
+ GLWESecretPreparedFactory<BE>
|
||||
+ GLWEDecrypt<BE>,
|
||||
+ GLWEDecrypt<BE>
|
||||
+ GLWERotate<BE>,
|
||||
ScratchOwned<BE>: ScratchOwnedAlloc<BE> + ScratchOwnedBorrow<BE>,
|
||||
Scratch<BE>: ScratchTakeCore<BE>,
|
||||
{
|
||||
@@ -216,7 +217,9 @@ pub fn circuit_bootstrap_core<R, L, D, M, BRA: BlindRotationAlgo, BE: Backend>(
|
||||
+ GLWEPacking<BE>
|
||||
+ GGSWFromGGLWE<BE>
|
||||
+ GLWESecretPreparedFactory<BE>
|
||||
+ GLWEDecrypt<BE>,
|
||||
+ GLWEDecrypt<BE>
|
||||
+ GLWERotate<BE>
|
||||
+ ModuleLogN,
|
||||
ScratchOwned<BE>: ScratchOwnedAlloc<BE> + ScratchOwnedBorrow<BE>,
|
||||
Scratch<BE>: ScratchTakeCore<BE>,
|
||||
{
|
||||
@@ -332,7 +335,7 @@ fn post_process<R, A, M, BE: Backend>(
|
||||
) where
|
||||
R: GLWEToMut,
|
||||
A: GLWEToRef,
|
||||
M: ModuleLogN + GLWETrace<BE> + GLWEPacking<BE>,
|
||||
M: ModuleLogN + GLWETrace<BE> + GLWEPacking<BE> + GLWERotate<BE>,
|
||||
Scratch<BE>: ScratchTakeCore<BE>,
|
||||
{
|
||||
let res: &mut GLWE<&mut [u8]> = &mut res.to_mut();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use poulpy_core::{
|
||||
Distribution, GLWEAutomorphismKeyEncryptSk, GLWETensorKeyEncryptSk, GetDistribution, ScratchTakeCore,
|
||||
Distribution, GGLWEToGGSWKeyEncryptSk, GLWEAutomorphismKeyEncryptSk, GetDistribution, ScratchTakeCore,
|
||||
layouts::{
|
||||
GGLWEInfos, GGSWInfos, GLWEAutomorphismKey, GLWEAutomorphismKeyLayout, GLWEInfos, GLWESecretPreparedFactory,
|
||||
GLWESecretToRef, GLWETensorKey, GLWETensorKeyLayout, LWEInfos, LWESecretToRef, prepared::GLWESecretPrepared,
|
||||
GGLWEInfos, GGLWEToGGSWKey, GGSWInfos, GLWEAutomorphismKey, GLWEAutomorphismKeyLayout, GLWEInfos,
|
||||
GLWESecretPreparedFactory, GLWESecretToRef, GLWETensorKeyLayout, LWEInfos, LWESecretToRef, prepared::GLWESecretPrepared,
|
||||
},
|
||||
trace_galois_elements,
|
||||
};
|
||||
@@ -81,14 +81,14 @@ impl<BRA: BlindRotationAlgo> CircuitBootstrappingKey<Vec<u8>, BRA> {
|
||||
(gal_el, key)
|
||||
})
|
||||
.collect(),
|
||||
tsk: GLWETensorKey::alloc_from_infos(trk_infos),
|
||||
tsk: GGLWEToGGSWKey::alloc_from_infos(trk_infos),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CircuitBootstrappingKey<D: Data, BRA: BlindRotationAlgo> {
|
||||
pub(crate) brk: BlindRotationKey<D, BRA>,
|
||||
pub(crate) tsk: GLWETensorKey<Vec<u8>>,
|
||||
pub(crate) tsk: GGLWEToGGSWKey<Vec<u8>>,
|
||||
pub(crate) atk: HashMap<i64, GLWEAutomorphismKey<Vec<u8>>>,
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ impl<D: DataMut, BRA: BlindRotationAlgo> CircuitBootstrappingKey<D, BRA> {
|
||||
|
||||
impl<BRA: BlindRotationAlgo, BE: Backend> CircuitBootstrappingKeyEncryptSk<BRA, BE> for Module<BE>
|
||||
where
|
||||
Self: GLWETensorKeyEncryptSk<BE>
|
||||
Self: GGLWEToGGSWKeyEncryptSk<BE>
|
||||
+ BlindRotationKeyEncryptSk<BRA, BE>
|
||||
+ GLWEAutomorphismKeyEncryptSk<BE>
|
||||
+ GLWESecretPreparedFactory<BE>,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
use poulpy_core::{
|
||||
layouts::{
|
||||
GGLWEInfos, GGSWInfos, GLWEAutomorphismKeyLayout, GLWEAutomorphismKeyPreparedFactory, GLWEInfos, GLWETensorKeyLayout,
|
||||
GLWETensorKeyPreparedFactory, LWEInfos,
|
||||
prepared::{GLWEAutomorphismKeyPrepared, GLWETensorKeyPrepared},
|
||||
GGLWEInfos, GGLWEToGGSWKeyPrepared, GGLWEToGGSWKeyPreparedFactory, GGSWInfos, GLWEAutomorphismKeyLayout,
|
||||
GLWEAutomorphismKeyPreparedFactory, GLWEInfos, GLWETensorKeyLayout, GLWETensorKeyPreparedFactory, LWEInfos,
|
||||
prepared::GLWEAutomorphismKeyPrepared,
|
||||
},
|
||||
trace_galois_elements,
|
||||
};
|
||||
@@ -50,7 +50,7 @@ pub trait CircuitBootstrappingKeyPreparedFactory<BRA: BlindRotationAlgo, BE: Bac
|
||||
where
|
||||
Self: Sized
|
||||
+ BlindRotationKeyPreparedFactory<BRA, BE>
|
||||
+ GLWETensorKeyPreparedFactory<BE>
|
||||
+ GGLWEToGGSWKeyPreparedFactory<BE>
|
||||
+ GLWEAutomorphismKeyPreparedFactory<BE>,
|
||||
{
|
||||
fn circuit_bootstrapping_key_prepared_alloc_from_infos<A>(
|
||||
@@ -65,7 +65,7 @@ where
|
||||
|
||||
CircuitBootstrappingKeyPrepared {
|
||||
brk: BlindRotationKeyPrepared::alloc(self, &infos.brk_infos()),
|
||||
tsk: GLWETensorKeyPrepared::alloc_from_infos(self, &infos.tsk_infos()),
|
||||
tsk: GGLWEToGGSWKeyPrepared::alloc_from_infos(self, &infos.tsk_infos()),
|
||||
atk: gal_els
|
||||
.iter()
|
||||
.map(|&gal_el| {
|
||||
@@ -81,7 +81,7 @@ where
|
||||
A: CircuitBootstrappingKeyInfos,
|
||||
{
|
||||
self.blind_rotation_key_prepare_tmp_bytes(&infos.brk_infos())
|
||||
.max(self.prepare_tensor_key_tmp_bytes(&infos.tsk_infos()))
|
||||
.max(self.prepare_gglwe_to_ggsw_key_tmp_bytes(&infos.tsk_infos()))
|
||||
.max(self.prepare_glwe_automorphism_key_tmp_bytes(&infos.atk_infos()))
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ where
|
||||
|
||||
pub struct CircuitBootstrappingKeyPrepared<D: Data, BRA: BlindRotationAlgo, B: Backend> {
|
||||
pub(crate) brk: BlindRotationKeyPrepared<D, BRA, B>,
|
||||
pub(crate) tsk: GLWETensorKeyPrepared<Vec<u8>, B>,
|
||||
pub(crate) tsk: GGLWEToGGSWKeyPrepared<Vec<u8>, B>,
|
||||
pub(crate) atk: HashMap<i64, GLWEAutomorphismKeyPrepared<Vec<u8>, B>>,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user