Skip to main content

poulpy_core/api/
noise.rs

1use poulpy_hal::layouts::{Backend, HostBackend, HostDataMut, HostDataRef, ScalarZnx, ScratchArena, Stats};
2
3use crate::layouts::{
4    GGLWEInfos, GGLWEToBackendRef, GGSWInfos, GGSWToBackendRef, GLWEInfos, GLWESecretPreparedToBackendRef, GLWEToBackendRef,
5};
6
7pub trait GLWENoise<BE: Backend> {
8    fn glwe_noise_tmp_bytes<A>(&self, infos: &A) -> usize
9    where
10        A: GLWEInfos;
11
12    fn glwe_noise<R, P, S>(&self, res: &R, pt_want: &P, sk_prepared: &S, scratch: &mut ScratchArena<'_, BE>) -> Stats
13    where
14        R: GLWEToBackendRef<BE> + GLWEInfos,
15        P: GLWEToBackendRef<BE>,
16        S: GLWESecretPreparedToBackendRef<BE> + GLWEInfos,
17        BE: HostBackend,
18        for<'a> BE::BufRef<'a>: HostDataRef,
19        for<'a> BE::BufMut<'a>: poulpy_hal::layouts::HostDataMut;
20}
21
22pub trait GGLWENoise<BE: Backend> {
23    fn gglwe_noise_tmp_bytes<A>(&self, infos: &A) -> usize
24    where
25        A: GGLWEInfos;
26
27    fn gglwe_noise<R, S>(
28        &self,
29        res: &R,
30        res_row: usize,
31        res_col: usize,
32        pt_want: &ScalarZnx<&[u8]>,
33        sk_prepared: &S,
34        scratch: &mut ScratchArena<'_, BE>,
35    ) -> Stats
36    where
37        R: GGLWEToBackendRef<BE> + GGLWEInfos,
38        S: GLWESecretPreparedToBackendRef<BE> + GLWEInfos,
39        BE: HostBackend,
40        for<'a> BE::BufRef<'a>: HostDataRef,
41        for<'a> BE::BufMut<'a>: HostDataMut;
42}
43
44pub trait GGSWNoise<BE: Backend> {
45    fn ggsw_noise_tmp_bytes<A>(&self, infos: &A) -> usize
46    where
47        A: GGSWInfos;
48
49    fn ggsw_noise<R, S>(
50        &self,
51        res: &R,
52        res_row: usize,
53        res_col: usize,
54        pt_want: &ScalarZnx<&[u8]>,
55        sk_prepared: &S,
56        scratch: &mut ScratchArena<'_, BE>,
57    ) -> Stats
58    where
59        R: GGSWToBackendRef<BE> + GGSWInfos,
60        S: GLWESecretPreparedToBackendRef<BE>,
61        BE: HostBackend,
62        for<'a> BE::BufRef<'a>: HostDataRef,
63        for<'a> BE::BufMut<'a>: HostDataMut;
64}