use super::engine_error;
use crate::prelude::{DecompositionBaseLog, DecompositionLevelCount, Variance};
use crate::specification::engines::AbstractEngine;
use crate::specification::entities::{GgswCiphertextEntity, GlweSecretKeyEntity, PlaintextEntity};
engine_error! {
GgswCiphertextScalarEncryptionError for GgswCiphertextScalarEncryptionEngine @
}
pub trait GgswCiphertextScalarEncryptionEngine<SecretKey, Plaintext, Ciphertext>:
AbstractEngine
where
SecretKey: GlweSecretKeyEntity,
Plaintext: PlaintextEntity,
Ciphertext: GgswCiphertextEntity,
{
fn encrypt_scalar_ggsw_ciphertext(
&mut self,
key: &SecretKey,
input: &Plaintext,
noise: Variance,
decomposition_level_count: DecompositionLevelCount,
decomposition_base_log: DecompositionBaseLog,
) -> Result<Ciphertext, GgswCiphertextScalarEncryptionError<Self::EngineError>>;
unsafe fn encrypt_scalar_ggsw_ciphertext_unchecked(
&mut self,
key: &SecretKey,
input: &Plaintext,
noise: Variance,
decomposition_level_count: DecompositionLevelCount,
decomposition_base_log: DecompositionBaseLog,
) -> Ciphertext;
}