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