poulpy_core/layouts/
glwe_pt.rs

1use std::fmt;
2
3use poulpy_hal::layouts::{Data, DataMut, DataRef, VecZnx, VecZnxToMut, VecZnxToRef};
4
5use crate::layouts::{GLWECiphertext, GLWECiphertextToMut, GLWECiphertextToRef, Infos, SetMetaData};
6
7pub struct GLWEPlaintext<D: Data> {
8    pub data: VecZnx<D>,
9    pub basek: usize,
10    pub k: usize,
11}
12
13impl<D: DataRef> fmt::Display for GLWEPlaintext<D> {
14    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15        write!(
16            f,
17            "GLWEPlaintext: basek={} k={}: {}",
18            self.basek(),
19            self.k(),
20            self.data
21        )
22    }
23}
24
25impl<D: Data> Infos for GLWEPlaintext<D> {
26    type Inner = VecZnx<D>;
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<D: DataMut> SetMetaData for GLWEPlaintext<D> {
42    fn set_k(&mut self, k: usize) {
43        self.k = k
44    }
45
46    fn set_basek(&mut self, basek: usize) {
47        self.basek = basek
48    }
49}
50
51impl GLWEPlaintext<Vec<u8>> {
52    pub fn alloc(n: usize, basek: usize, k: usize) -> Self {
53        Self {
54            data: VecZnx::alloc(n, 1, k.div_ceil(basek)),
55            basek,
56            k,
57        }
58    }
59
60    pub fn byte_of(n: usize, basek: usize, k: usize) -> usize {
61        VecZnx::alloc_bytes(n, 1, k.div_ceil(basek))
62    }
63}
64
65impl<D: DataRef> GLWECiphertextToRef for GLWEPlaintext<D> {
66    fn to_ref(&self) -> GLWECiphertext<&[u8]> {
67        GLWECiphertext {
68            data: self.data.to_ref(),
69            basek: self.basek,
70            k: self.k,
71        }
72    }
73}
74
75impl<D: DataMut> GLWECiphertextToMut for GLWEPlaintext<D> {
76    fn to_mut(&mut self) -> GLWECiphertext<&mut [u8]> {
77        GLWECiphertext {
78            data: self.data.to_mut(),
79            basek: self.basek,
80            k: self.k,
81        }
82    }
83}