arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/rlwe/src/plaintext.rs
rlwe/src/plaintext.rsRaw
 1use crate::ciphertext::Ciphertext;
 2use crate::elem::Elem;
 3use crate::parameters::Parameters;
 4use base2k::{Module, VecZnx};
 5
 6pub struct Plaintext(pub Elem);
 7
 8impl Parameters {
 9    pub fn new_plaintext(&self, log_q: usize) -> Plaintext {
10        Plaintext::new(self.module(), self.log_base2k(), log_q, self.log_scale())
11    }
12
13    pub fn bytes_of_plaintext(&self, log_q: usize) -> usize {
14        Elem::bytes_of(self.module(), self.log_base2k(), log_q, 0)
15    }
16
17    pub fn plaintext_from_bytes(&self, log_q: usize, bytes: &mut [u8]) -> Plaintext {
18        Plaintext(self.elem_from_bytes(log_q, 0, bytes))
19    }
20}
21
22impl Plaintext {
23    pub fn new(module: &Module, log_base2k: usize, log_q: usize, log_scale: usize) -> Self {
24        Self(Elem::new(module, log_base2k, log_q, 0, log_scale))
25    }
26
27    pub fn bytes_of(module: &Module, log_base2k: usize, log_q: usize) -> usize {
28        Elem::bytes_of(module, log_base2k, log_q, 0)
29    }
30
31    pub fn from_bytes(module: &Module, log_base2k: usize, log_q: usize, bytes: &mut [u8]) -> Self {
32        Self(Elem::from_bytes(module, log_base2k, log_q, 0, bytes))
33    }
34
35    pub fn n(&self) -> usize {
36        self.0.n()
37    }
38
39    pub fn degree(&self) -> usize {
40        self.0.degree()
41    }
42
43    pub fn log_q(&self) -> usize {
44        self.0.log_q()
45    }
46
47    pub fn limbs(&self) -> usize {
48        self.0.limbs()
49    }
50
51    pub fn at(&self, i: usize) -> &VecZnx {
52        self.0.at(i)
53    }
54
55    pub fn at_mut(&mut self, i: usize) -> &mut VecZnx {
56        self.0.at_mut(i)
57    }
58
59    pub fn log_base2k(&self) -> usize {
60        self.0.log_base2k()
61    }
62
63    pub fn log_scale(&self) -> usize {
64        self.0.log_scale()
65    }
66
67    pub fn zero(&mut self){
68        self.0.zero()
69    }
70
71    pub fn as_ciphertext(&self) -> Ciphertext {
72        unsafe { Ciphertext(std::ptr::read(&self.0)) }
73    }
74}