arnaucube
arnaucube/poulpyPublic Self-hosted repository
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}