mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
improve glwe_trace noise
This commit is contained in:
@@ -20,7 +20,7 @@ pub trait GLWEPacking<BE: Backend> {
|
|||||||
keys: &H,
|
keys: &H,
|
||||||
scratch: &mut Scratch<BE>,
|
scratch: &mut Scratch<BE>,
|
||||||
) where
|
) where
|
||||||
R: GLWEToMut,
|
R: GLWEToMut + GLWEInfos,
|
||||||
A: GLWEToMut + GLWEToRef + GLWEInfos,
|
A: GLWEToMut + GLWEToRef + GLWEInfos,
|
||||||
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
||||||
H: GLWEAutomorphismKeyHelper<K, BE>;
|
H: GLWEAutomorphismKeyHelper<K, BE>;
|
||||||
@@ -50,7 +50,7 @@ where
|
|||||||
keys: &H,
|
keys: &H,
|
||||||
scratch: &mut Scratch<BE>,
|
scratch: &mut Scratch<BE>,
|
||||||
) where
|
) where
|
||||||
R: GLWEToMut,
|
R: GLWEToMut + GLWEInfos,
|
||||||
A: GLWEToMut + GLWEToRef + GLWEInfos,
|
A: GLWEToMut + GLWEToRef + GLWEInfos,
|
||||||
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
||||||
H: GLWEAutomorphismKeyHelper<K, BE>,
|
H: GLWEAutomorphismKeyHelper<K, BE>,
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ impl GLWE<Vec<u8>> {
|
|||||||
impl<D: DataMut> GLWE<D> {
|
impl<D: DataMut> GLWE<D> {
|
||||||
pub fn trace<A, H, K, M, BE: Backend>(&mut self, module: &M, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
pub fn trace<A, H, K, M, BE: Backend>(&mut self, module: &M, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
||||||
where
|
where
|
||||||
A: GLWEToRef,
|
A: GLWEToRef + GLWEInfos,
|
||||||
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
||||||
H: GLWEAutomorphismKeyHelper<K, BE>,
|
H: GLWEAutomorphismKeyHelper<K, BE>,
|
||||||
Scratch<BE>: ScratchTakeCore<BE>,
|
Scratch<BE>: ScratchTakeCore<BE>,
|
||||||
@@ -98,18 +98,31 @@ where
|
|||||||
return glwe_conv + trace;
|
return glwe_conv + trace;
|
||||||
}
|
}
|
||||||
|
|
||||||
trace
|
let tmp = if res_infos.k() > a_infos.k() {
|
||||||
|
GLWE::bytes_of_from_infos(res_infos)
|
||||||
|
} else {
|
||||||
|
GLWE::bytes_of_from_infos(a_infos)
|
||||||
|
};
|
||||||
|
|
||||||
|
trace + tmp
|
||||||
}
|
}
|
||||||
|
|
||||||
fn glwe_trace<R, A, K, H>(&self, res: &mut R, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
fn glwe_trace<R, A, K, H>(&self, res: &mut R, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
||||||
where
|
where
|
||||||
R: GLWEToMut,
|
R: GLWEToMut + GLWEInfos,
|
||||||
A: GLWEToRef,
|
A: GLWEToRef + GLWEInfos,
|
||||||
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
||||||
H: GLWEAutomorphismKeyHelper<K, BE>,
|
H: GLWEAutomorphismKeyHelper<K, BE>,
|
||||||
{
|
{
|
||||||
self.glwe_copy(res, a);
|
let (mut tmp, scratch_1) = if a.k() > res.k() {
|
||||||
self.glwe_trace_inplace(res, skip, keys, scratch);
|
scratch.take_glwe(a)
|
||||||
|
} else {
|
||||||
|
scratch.take_glwe(res)
|
||||||
|
};
|
||||||
|
|
||||||
|
self.glwe_copy(&mut tmp, a);
|
||||||
|
self.glwe_trace_inplace(&mut tmp, skip, keys, scratch_1);
|
||||||
|
self.glwe_copy(res, &tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn glwe_trace_inplace<R, K, H>(&self, res: &mut R, skip: usize, keys: &H, scratch: &mut Scratch<BE>)
|
fn glwe_trace_inplace<R, K, H>(&self, res: &mut R, skip: usize, keys: &H, scratch: &mut Scratch<BE>)
|
||||||
@@ -177,8 +190,6 @@ where
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// println!("res: {}", res);
|
|
||||||
|
|
||||||
for i in skip..log_n {
|
for i in skip..log_n {
|
||||||
self.glwe_rsh(1, res, scratch);
|
self.glwe_rsh(1, res, scratch);
|
||||||
|
|
||||||
@@ -209,8 +220,8 @@ pub trait GLWETrace<BE: Backend> {
|
|||||||
|
|
||||||
fn glwe_trace<R, A, K, H>(&self, res: &mut R, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
fn glwe_trace<R, A, K, H>(&self, res: &mut R, skip: usize, a: &A, keys: &H, scratch: &mut Scratch<BE>)
|
||||||
where
|
where
|
||||||
R: GLWEToMut,
|
R: GLWEToMut + GLWEInfos,
|
||||||
A: GLWEToRef,
|
A: GLWEToRef + GLWEInfos,
|
||||||
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
K: GGLWEPreparedToRef<BE> + GetGaloisElement + GGLWEInfos,
|
||||||
H: GLWEAutomorphismKeyHelper<K, BE>;
|
H: GLWEAutomorphismKeyHelper<K, BE>;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user