arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}