arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/core/src/fourier_glwe/ciphertext.rs
core/src/fourier_glwe/ciphertext.rsRaw
 1use backend::{Backend, Module, VecZnxDft, VecZnxDftAlloc};
 2
 3use crate::{Infos, div_ceil};
 4
 5pub struct FourierGLWECiphertext<C, B: Backend> {
 6    pub data: VecZnxDft<C, B>,
 7    pub basek: usize,
 8    pub k: usize,
 9}
10
11impl<B: Backend> FourierGLWECiphertext<Vec<u8>, B> {
12    pub fn alloc(module: &Module<B>, basek: usize, k: usize, rank: usize) -> Self {
13        Self {
14            data: module.new_vec_znx_dft(rank + 1, div_ceil(k, basek)),
15            basek: basek,
16            k: k,
17        }
18    }
19
20    pub fn bytes_of(module: &Module<B>, basek: usize, k: usize, rank: usize) -> usize {
21        module.bytes_of_vec_znx_dft(rank + 1, div_ceil(k, basek))
22    }
23}
24
25impl<T, B: Backend> Infos for FourierGLWECiphertext<T, B> {
26    type Inner = VecZnxDft<T, B>;
27
28    fn inner(&self) -> &Self::Inner {
29        &self.data
30    }
31
32    fn basek(&self) -> usize {
33        self.basek
34    }
35
36    fn k(&self) -> usize {
37        self.k
38    }
39}
40
41impl<T, B: Backend> FourierGLWECiphertext<T, B> {
42    pub fn rank(&self) -> usize {
43        self.cols() - 1
44    }
45}