arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/spqlios/src/module.rs
spqlios/src/module.rsRaw
 1use crate::bindings::{
 2    module_info_t, new_module_info, svp_ppol_t, vec_znx_bigcoeff_t, vec_znx_dft_t, MODULE,
 3};
 4
 5pub type MODULETYPE = u8;
 6pub const FFT64: u8 = 0;
 7pub const NTT120: u8 = 1;
 8
 9pub struct Module(pub *mut MODULE);
10
11impl Module {
12    // Instantiates a new module.
13    pub fn new<const MODULETYPE: MODULETYPE>(n: usize) -> Self {
14        unsafe {
15            let m: *mut module_info_t = new_module_info(n as u64, MODULETYPE as u32);
16            if m.is_null() {
17                panic!("Failed to create module.");
18            }
19            Self(m)
20        }
21    }
22}
23
24pub struct SVPPOL(pub *mut svp_ppol_t);
25
26pub struct VECZNXBIG(pub *mut vec_znx_bigcoeff_t, pub usize);
27
28// Stores a vector of
29impl VECZNXBIG {
30    pub fn as_vec_znx_dft(&mut self) -> VECZNXDFT {
31        VECZNXDFT(self.0 as *mut vec_znx_dft_t, self.1)
32    }
33    pub fn limbs(&self) -> usize {
34        self.1
35    }
36}
37
38pub struct VECZNXDFT(pub *mut vec_znx_dft_t, pub usize);
39
40impl VECZNXDFT {
41    pub fn as_vec_znx_big(&mut self) -> VECZNXBIG {
42        VECZNXBIG(self.0 as *mut vec_znx_bigcoeff_t, self.1)
43    }
44    pub fn limbs(&self) -> usize {
45        self.1
46    }
47}