arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/core/src/lwe/plaintext.rs
core/src/lwe/plaintext.rsRaw
 1use backend::hal::layouts::{Data, DataMut, DataRef, VecZnx, VecZnxToMut, VecZnxToRef};
 2
 3use crate::{Infos, SetMetaData};
 4
 5pub struct LWEPlaintext<D: Data> {
 6    pub(crate) data: VecZnx<D>,
 7    pub(crate) k: usize,
 8    pub(crate) basek: usize,
 9}
10
11impl LWEPlaintext<Vec<u8>> {
12    pub fn alloc(basek: usize, k: usize) -> Self {
13        Self {
14            data: VecZnx::alloc::<i64>(1, 1, k.div_ceil(basek)),
15            k: k,
16            basek: basek,
17        }
18    }
19}
20
21impl<D: Data> Infos for LWEPlaintext<D> {
22    type Inner = VecZnx<D>;
23
24    fn inner(&self) -> &Self::Inner {
25        &self.data
26    }
27
28    fn basek(&self) -> usize {
29        self.basek
30    }
31
32    fn k(&self) -> usize {
33        self.k
34    }
35}
36
37impl<D: DataMut> SetMetaData for LWEPlaintext<D> {
38    fn set_k(&mut self, k: usize) {
39        self.k = k
40    }
41
42    fn set_basek(&mut self, basek: usize) {
43        self.basek = basek
44    }
45}
46
47pub trait LWEPlaintextToRef {
48    #[allow(dead_code)]
49    fn to_ref(&self) -> LWEPlaintext<&[u8]>;
50}
51
52impl<D: DataRef> LWEPlaintextToRef for LWEPlaintext<D> {
53    fn to_ref(&self) -> LWEPlaintext<&[u8]> {
54        LWEPlaintext {
55            data: self.data.to_ref(),
56            basek: self.basek,
57            k: self.k,
58        }
59    }
60}
61
62pub trait LWEPlaintextToMut {
63    #[allow(dead_code)]
64    fn to_mut(&mut self) -> LWEPlaintext<&mut [u8]>;
65}
66
67impl<D: DataMut> LWEPlaintextToMut for LWEPlaintext<D> {
68    fn to_mut(&mut self) -> LWEPlaintext<&mut [u8]> {
69        LWEPlaintext {
70            data: self.data.to_mut(),
71            basek: self.basek,
72            k: self.k,
73        }
74    }
75}