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}