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}