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}