use crate::commons::crypto::glwe::GlweCiphertext as ImplGlweCiphertext;
use crate::prelude::{GlweDimension, PolynomialSize};
use crate::specification::entities::markers::GlweCiphertextKind;
use crate::specification::entities::{AbstractEntity, GlweCiphertextEntity};
#[cfg(feature = "backend_default_serialization")]
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GlweCiphertext32(pub(crate) ImplGlweCiphertext<Vec<u32>>);
impl AbstractEntity for GlweCiphertext32 {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertext32 {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}
#[cfg(feature = "backend_default_serialization")]
#[derive(Serialize, Deserialize)]
pub(crate) enum GlweCiphertext32Version {
V0,
#[serde(other)]
Unsupported,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct GlweCiphertext64(pub(crate) ImplGlweCiphertext<Vec<u64>>);
impl AbstractEntity for GlweCiphertext64 {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertext64 {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}
#[cfg(feature = "backend_default_serialization")]
#[derive(Serialize, Deserialize)]
pub(crate) enum GlweCiphertext64Version {
V0,
#[serde(other)]
Unsupported,
}
#[derive(Debug, PartialEq, Eq)]
pub struct GlweCiphertextView32<'a>(pub(crate) ImplGlweCiphertext<&'a [u32]>);
impl AbstractEntity for GlweCiphertextView32<'_> {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertextView32<'_> {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct GlweCiphertextMutView32<'a>(pub(crate) ImplGlweCiphertext<&'a mut [u32]>);
impl AbstractEntity for GlweCiphertextMutView32<'_> {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertextMutView32<'_> {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct GlweCiphertextView64<'a>(pub(crate) ImplGlweCiphertext<&'a [u64]>);
impl AbstractEntity for GlweCiphertextView64<'_> {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertextView64<'_> {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}
#[derive(Debug, PartialEq, Eq)]
pub struct GlweCiphertextMutView64<'a>(pub(crate) ImplGlweCiphertext<&'a mut [u64]>);
impl AbstractEntity for GlweCiphertextMutView64<'_> {
type Kind = GlweCiphertextKind;
}
impl GlweCiphertextEntity for GlweCiphertextMutView64<'_> {
fn glwe_dimension(&self) -> GlweDimension {
self.0.size().to_glwe_dimension()
}
fn polynomial_size(&self) -> PolynomialSize {
self.0.polynomial_size()
}
}