use anyhow::Result;
use poulpy_core::{
EncryptionInfos,
layouts::{GLWEInfos, GLWESecretPreparedToBackendRef, GLWEToBackendMut, GLWEToBackendRef},
};
use poulpy_hal::{
layouts::{Backend, ScratchArena},
source::Source,
};
use crate::{CKKSCtBounds, SetCKKSInfos};
pub trait CKKSEncrypt<BE: Backend> {
fn ckks_encrypt_sk_tmp_bytes<A>(&self, ct_infos: &A) -> usize
where
A: CKKSCtBounds;
#[allow(clippy::too_many_arguments)]
fn ckks_encrypt_sk<Dct, Dpt, S, E: EncryptionInfos>(
&self,
ct: &mut Dct,
pt: &Dpt,
sk: &S,
enc_infos: &E,
source_xa: &mut Source,
source_xe: &mut Source,
scratch: &mut ScratchArena<'_, BE>,
) -> Result<()>
where
S: GLWESecretPreparedToBackendRef<BE>,
Dct: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
Dpt: GLWEToBackendRef<BE> + CKKSCtBounds;
}
pub trait CKKSDecrypt<BE: Backend> {
fn ckks_decrypt_tmp_bytes<A>(&self, ct_infos: &A) -> usize
where
A: CKKSCtBounds;
fn ckks_decrypt<Dpt, Dct, S>(&self, pt: &mut Dpt, ct: &Dct, sk: &S, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
where
S: GLWESecretPreparedToBackendRef<BE> + GLWEInfos,
Dpt: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
Dct: GLWEToBackendRef<BE> + CKKSCtBounds;
}