arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/rlwe/src/keys.rs
rlwe/src/keys.rsRaw
 1use crate::ciphertext::GadgetCiphertext;
 2use crate::elem::Elem;
 3use crate::encryptor::{encrypt_rlwe_sk_thread_safe, encrypt_rlwe_sk_tmp_bytes};
 4use crate::parameters::Parameters;
 5use base2k::{Module, Scalar, SvpPPol, SvpPPolOps, VmpPMat, VmpPMatOps};
 6use sampling::source::Source;
 7
 8pub struct SecretKey(pub Scalar);
 9
10impl SecretKey {
11    pub fn new(module: &Module) -> Self {
12        SecretKey(Scalar::new(module.n()))
13    }
14
15    pub fn fill_ternary_prob(&mut self, prob: f64, source: &mut Source) {
16        self.0.fill_ternary_prob(prob, source);
17    }
18
19    pub fn fill_ternary_hw(&mut self, hw: usize, source: &mut Source) {
20        self.0.fill_ternary_hw(hw, source);
21    }
22
23    pub fn prepare(&self, module: &Module, sk_ppol: &mut SvpPPol) {
24        module.svp_prepare(sk_ppol, &self.0)
25    }
26}
27
28pub struct PublicKey(pub Elem);
29
30impl PublicKey {
31    pub fn new(module: &Module, log_base2k: usize, log_q: usize) -> PublicKey {
32        PublicKey(Elem::new(module, log_base2k, log_q, 1, 0))
33    }
34
35    pub fn gen_thread_safe(
36        &mut self,
37        module: &Module,
38        sk: &SvpPPol,
39        xe: f64,
40        xa_source: &mut Source,
41        xe_source: &mut Source,
42        tmp_bytes: &mut [u8],
43    ) {
44        encrypt_rlwe_sk_thread_safe(
45            module,
46            &mut self.0,
47            None,
48            sk,
49            xa_source,
50            xe_source,
51            xe,
52            tmp_bytes,
53        );
54    }
55
56    pub fn gen_thread_safe_tmp_bytes(module: &Module, log_base2k: usize, log_q: usize) -> usize {
57        encrypt_rlwe_sk_tmp_bytes(module, log_base2k, log_q)
58    }
59}
60
61pub struct SwitchingKey(pub GadgetCiphertext);
62
63impl SwitchingKey {
64    pub fn new(module: &Module, log_base2k: usize, rows: usize, log_q: usize) -> SwitchingKey {
65        SwitchingKey(GadgetCiphertext::new(module, log_base2k, rows, log_q))
66    }
67
68    pub fn gen_thread_safe(
69        &mut self,
70        params: &mut Parameters,
71        sk_in: &SvpPPol,
72        sk_out: &SvpPPol,
73        xa_source: &mut Source,
74        xe_source: &mut Source,
75        tmp_bytes: &mut [u8],
76    ) {
77    }
78}