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