arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/core/src/glwe_plaintext.rs
core/src/glwe_plaintext.rsRaw
 1use backend::{Backend, FFT64, Module, VecZnx, VecZnxAlloc, VecZnxToMut, VecZnxToRef};
 2
 3use crate::{
 4    elem::{Infos, SetMetaData},
 5    glwe_ciphertext::{GLWECiphertext, GLWECiphertextToMut, GLWECiphertextToRef},
 6    glwe_ops::GLWEOps,
 7    utils::derive_size,
 8};
 9
10pub struct GLWEPlaintext<C> {
11    pub data: VecZnx<C>,
12    pub basek: usize,
13    pub k: usize,
14}
15
16impl<T> Infos for GLWEPlaintext<T> {
17    type Inner = VecZnx<T>;
18
19    fn inner(&self) -> &Self::Inner {
20        &self.data
21    }
22
23    fn basek(&self) -> usize {
24        self.basek
25    }
26
27    fn k(&self) -> usize {
28        self.k
29    }
30}
31
32impl<DataSelf: AsMut<[u8]> + AsRef<[u8]>> SetMetaData for GLWEPlaintext<DataSelf> {
33    fn set_k(&mut self, k: usize) {
34        self.k = k
35    }
36
37    fn set_basek(&mut self, basek: usize) {
38        self.basek = basek
39    }
40}
41
42impl GLWEPlaintext<Vec<u8>> {
43    pub fn alloc<B: Backend>(module: &Module<B>, basek: usize, k: usize) -> Self {
44        Self {
45            data: module.new_vec_znx(1, derive_size(basek, k)),
46            basek: basek,
47            k,
48        }
49    }
50
51    pub fn byte_of(module: &Module<FFT64>, basek: usize, k: usize) -> usize {
52        module.bytes_of_vec_znx(1, derive_size(basek, k))
53    }
54}
55
56impl<D: AsRef<[u8]>> GLWECiphertextToRef for GLWEPlaintext<D> {
57    fn to_ref(&self) -> GLWECiphertext<&[u8]> {
58        GLWECiphertext {
59            data: self.data.to_ref(),
60            basek: self.basek,
61            k: self.k,
62        }
63    }
64}
65
66impl<D: AsMut<[u8]> + AsRef<[u8]>> GLWECiphertextToMut for GLWEPlaintext<D> {
67    fn to_mut(&mut self) -> GLWECiphertext<&mut [u8]> {
68        GLWECiphertext {
69            data: self.data.to_mut(),
70            basek: self.basek,
71            k: self.k,
72        }
73    }
74}
75
76impl<D> GLWEOps for GLWEPlaintext<D>
77where
78    D: AsRef<[u8]> + AsMut<[u8]>,
79    GLWEPlaintext<D>: GLWECiphertextToMut + Infos + SetMetaData,
80{
81}