arnaucube
arnaucube/poulpyPublic Self-hosted repository
poulpy/rlwe/src/key_generator.rs
rlwe/src/key_generator.rsRaw
 1use crate::keys::{PublicKey, SecretKey, SwitchingKey};
 2use crate::parameters::Parameters;
 3use base2k::SvpPPol;
 4use sampling::source::Source;
 5
 6pub struct KeyGenerator {}
 7
 8impl KeyGenerator {
 9    pub fn gen_secret_key_thread_safe(
10        &self,
11        params: &Parameters,
12        source: &mut Source,
13    ) -> SecretKey {
14        let mut sk: SecretKey = SecretKey::new(params.module());
15        sk.fill_ternary_hw(params.xs(), source);
16        sk
17    }
18
19    pub fn gen_public_key_thread_safe(
20        &self,
21        params: &Parameters,
22        sk_ppol: &SvpPPol,
23        source: &mut Source,
24        tmp_bytes: &mut [u8],
25    ) -> PublicKey {
26        let mut xa_source: Source = source.branch();
27        let mut xe_source: Source = source.branch();
28        let mut pk: PublicKey =
29            PublicKey::new(params.module(), params.log_base2k(), params.log_qp());
30        pk.gen_thread_safe(
31            params.module(),
32            sk_ppol,
33            params.xe(),
34            &mut xa_source,
35            &mut xe_source,
36            tmp_bytes,
37        );
38        pk
39    }
40
41    pub fn gen_switching_key(
42        &self,
43        params: &Parameters,
44        sk_in: &SecretKey,
45        sk_out: &SecretKey,
46        rows: usize,
47        log_q: usize,
48    ) -> SwitchingKey {
49        let swk = SwitchingKey::new(params.module(), params.log_base2k(), rows, log_q, 0);
50
51        swk
52    }
53}