poulpy/rlwe/src/keys.rs
rlwe/src/keys.rsRaw
1use crate::elem::Elem;
2use crate::encryptor::{encrypt_rlwe_sk, encrypt_rlwe_sk_tmp_bytes};
3use crate::parameters::Parameters;
4use base2k::{Module, Sampling, Scalar, SvpPPol, SvpPPolOps, VecZnx};
5use sampling::source::Source;
6
7pub struct SecretKey(pub Scalar);
8
9impl SecretKey {
10 pub fn new_ternary_prob(module: &Module, limbs: usize, prob: f64, source: &mut Source) -> Self {
11 let mut sk: Scalar = Scalar::new(module.n());
12 sk.fill_ternary_prob(prob, source);
13 SecretKey(sk)
14 }
15}
16
17pub struct PublicKey(pub Elem);
18
19impl PublicKey {
20 pub fn new(
21 params: &Parameters,
22 sk: &SvpPPol,
23 xa_source: &mut Source,
24 xe_source: &mut Source,
25 tmp_bytes: &mut [u8],
26 ) -> Self {
27 let mut pk: Elem = Elem::new(params.n(), params.log_base2k(), params.log_qp(), 1);
28 encrypt_rlwe_sk(
29 params.module(),
30 &mut pk,
31 None,
32 sk,
33 xa_source,
34 xe_source,
35 params.xe(),
36 tmp_bytes,
37 );
38 PublicKey(pk)
39 }
40
41 pub fn new_tmp_bytes(params: &Parameters) -> usize {
42 encrypt_rlwe_sk_tmp_bytes(params.module(), params.limbs_qp())
43 }
44}