poulpy/rlwe/src/ciphertext.rs
rlwe/src/ciphertext.rsRaw
1use crate::elem::Elem;
2use crate::plaintext::Plaintext;
3use base2k::VecZnx;
4
5pub struct Ciphertext(pub Elem);
6
7/*
8impl Parameters {
9 pub fn new_ciphertext(&self, degree: usize, log_base2k: usize, log_q: usize) -> Ciphertext {
10 Ciphertext(self.new_elem(degree, log_base2k, log_q))
11 }
12}
13 */
14
15impl Ciphertext {
16 pub fn new(n: usize, log_base2k: usize, log_q: usize, degree: usize) -> Self {
17 Self(Elem::new(n, log_base2k, log_q, degree))
18 }
19
20 pub fn n(&self) -> usize {
21 self.0.n()
22 }
23
24 pub fn degree(&self) -> usize {
25 self.0.degree()
26 }
27
28 pub fn log_q(&self) -> usize {
29 self.0.log_q()
30 }
31
32 pub fn limbs(&self) -> usize {
33 self.0.limbs()
34 }
35
36 pub fn at(&self, i: usize) -> &VecZnx {
37 self.0.at(i)
38 }
39
40 pub fn at_mut(&mut self, i: usize) -> &mut VecZnx {
41 self.0.at_mut(i)
42 }
43
44 pub fn log_base2k(&self) -> usize {
45 self.0.log_base2k()
46 }
47
48 pub fn as_plaintext(&self) -> Plaintext {
49 unsafe { Plaintext(std::ptr::read(&self.0)) }
50 }
51}