poulpy_ckks/delegates/
encryption.rs1use anyhow::Result;
2use poulpy_core::layouts::{GLWEInfos, GLWESecretPreparedToBackendRef, GLWEToBackendMut, GLWEToBackendRef};
3use poulpy_core::{EncryptionInfos, GLWEDecrypt, GLWEEncryptSk};
4use poulpy_hal::{
5 api::{VecZnxLshBackend, VecZnxLshTmpBytes, VecZnxRshAddIntoBackend, VecZnxRshBackend, VecZnxRshTmpBytes},
6 layouts::{Backend, HostDataMut, Module, ScratchArena},
7 source::Source,
8};
9
10use crate::{
11 CKKSCtBounds, SetCKKSInfos,
12 api::{CKKSDecrypt, CKKSEncrypt},
13 oep::CKKSEncryptionImpl,
14};
15
16impl<BE: Backend + CKKSEncryptionImpl<BE>> CKKSEncrypt<BE> for Module<BE>
17where
18 BE: poulpy_hal::oep::HalVecZnxImpl<BE>,
19 Self: GLWEEncryptSk<BE> + VecZnxRshAddIntoBackend<BE> + VecZnxRshTmpBytes,
20{
21 fn ckks_encrypt_sk_tmp_bytes<A>(&self, ct_infos: &A) -> usize
22 where
23 A: CKKSCtBounds,
24 {
25 BE::ckks_encrypt_sk_tmp_bytes(self, ct_infos)
26 }
27
28 #[allow(clippy::too_many_arguments)]
29 fn ckks_encrypt_sk<Dct, Dpt, S, E: EncryptionInfos>(
30 &self,
31 ct: &mut Dct,
32 pt: &Dpt,
33 sk: &S,
34 enc_infos: &E,
35 source_xa: &mut Source,
36 source_xe: &mut Source,
37 scratch: &mut ScratchArena<'_, BE>,
38 ) -> Result<()>
39 where
40 S: GLWESecretPreparedToBackendRef<BE>,
41 Dct: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
42 Dpt: GLWEToBackendRef<BE> + CKKSCtBounds,
43 {
44 BE::ckks_encrypt_sk(self, ct, pt, sk, enc_infos, source_xa, source_xe, scratch)
45 }
46}
47
48impl<BE: Backend + CKKSEncryptionImpl<BE>> CKKSDecrypt<BE> for Module<BE>
49where
50 BE: poulpy_hal::oep::HalVecZnxImpl<BE>,
51 Self: GLWEDecrypt<BE>
52 + VecZnxLshBackend<BE>
53 + VecZnxLshTmpBytes
54 + VecZnxRshBackend<BE>
55 + VecZnxRshTmpBytes
56 + poulpy_core::layouts::ModuleCoreAlloc<OwnedBuf = BE::OwnedBuf>,
57 BE::OwnedBuf: HostDataMut,
58{
59 fn ckks_decrypt_tmp_bytes<A>(&self, ct_infos: &A) -> usize
60 where
61 A: CKKSCtBounds,
62 {
63 BE::ckks_decrypt_tmp_bytes(self, ct_infos)
64 }
65
66 fn ckks_decrypt<Dpt, Dct, S>(&self, pt: &mut Dpt, ct: &Dct, sk: &S, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
67 where
68 S: GLWESecretPreparedToBackendRef<BE> + GLWEInfos,
69 Dpt: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
70 Dct: GLWEToBackendRef<BE> + CKKSCtBounds,
71 {
72 BE::ckks_decrypt(self, pt, ct, sk, scratch)
73 }
74}