poulpy_core/
utils.rs

1use crate::layouts::{GLWEPlaintext, Infos, LWEPlaintext};
2use poulpy_hal::layouts::{DataMut, DataRef};
3use rug::Float;
4
5impl<D: DataMut> GLWEPlaintext<D> {
6    pub fn encode_vec_i64(&mut self, data: &[i64], k: usize) {
7        let basek: usize = self.basek();
8        self.data
9            .encode_vec_i64(basek, 0, k, data, i64::BITS as usize);
10    }
11
12    pub fn encode_coeff_i64(&mut self, data: i64, k: usize, idx: usize) {
13        let basek: usize = self.basek();
14        self.data
15            .encode_coeff_i64(basek, 0, k, idx, data, i64::BITS as usize);
16    }
17}
18
19impl<D: DataRef> GLWEPlaintext<D> {
20    pub fn decode_vec_i64(&self, data: &mut [i64], k: usize) {
21        self.data.decode_vec_i64(self.basek(), 0, k, data);
22    }
23
24    pub fn decode_coeff_i64(&self, k: usize, idx: usize) -> i64 {
25        self.data.decode_coeff_i64(self.basek(), 0, k, idx)
26    }
27
28    pub fn decode_vec_float(&self, data: &mut [Float]) {
29        self.data.decode_vec_float(self.basek(), 0, data);
30    }
31
32    pub fn std(&self) -> f64 {
33        self.data.std(self.basek(), 0)
34    }
35}
36
37impl<D: DataMut> LWEPlaintext<D> {
38    pub fn encode_i64(&mut self, data: i64, k: usize) {
39        let basek: usize = self.basek();
40        self.data
41            .encode_coeff_i64(basek, 0, k, 0, data, i64::BITS as usize);
42    }
43}
44
45impl<D: DataRef> LWEPlaintext<D> {
46    pub fn decode_i64(&self, k: usize) -> i64 {
47        self.data.decode_coeff_i64(self.basek(), 0, k, 0)
48    }
49
50    pub fn decode_float(&self) -> Float {
51        let mut data: Vec<Float> = vec![Float::new(self.k() as u32)];
52        self.data.decode_vec_float(self.basek(), 0, &mut data);
53        data[0].clone()
54    }
55}