chore(cpu): remove GlweMask container

This commit is contained in:
Mayeul@Zama
2023-03-13 11:44:31 +01:00
committed by mayeul-zama
parent ec1e06b367
commit 8744e4f264
4 changed files with 41 additions and 76 deletions

View File

@@ -505,9 +505,7 @@ impl GlweSecretKey<&[u64]> {
let mask = mask.as_view();
for idx in 0..mask.glwe_params.dimension {
let poly = mask.get_polynomial(idx);
let bin_poly = self.get_polynomial(idx);
for (poly, bin_poly) in zip_eq(mask.iter_polynomial(), self.iter()) {
let body = body.as_mut_view();
update_with_wrapping_add_mul(body, poly, bin_poly)
}
@@ -517,9 +515,7 @@ impl GlweSecretKey<&[u64]> {
let mask = mask.as_view();
out.copy_from_slice(body.into_data());
for idx in 0..mask.glwe_params.dimension {
let poly = mask.get_polynomial(idx);
let bin_poly = self.get_polynomial(idx);
for (poly, bin_poly) in zip_eq(mask.iter_polynomial(), self.iter()) {
update_with_wrapping_sub_mul(
Polynomial::new(out, encrypted.glwe_params.polynomial_size),
poly,
@@ -616,9 +612,7 @@ impl GlweSecretKey<&[u64]> {
let (mask, mut body) = encrypted.into_mask_and_body();
let mask = mask.as_view();
for idx in 0..mask.glwe_params.dimension {
let poly = mask.get_polynomial(idx);
let bin_poly = self.get_polynomial(idx);
for (poly, bin_poly) in zip_eq(mask.iter_polynomial(), self.iter()) {
update_with_wrapping_add_mul(body.as_mut_view(), poly, bin_poly)
}
}

View File

@@ -1,8 +1,7 @@
use crate::implementation::{zip_eq, Container, ContainerMut, Split};
use super::polynomial::Polynomial;
use super::polynomial_list::PolynomialList;
use super::GlweParams;
use crate::implementation::{zip_eq, Container, ContainerMut, Split};
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[readonly::make]
@@ -11,13 +10,6 @@ pub struct GlweCiphertext<C: Container> {
pub glwe_params: GlweParams,
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
#[readonly::make]
pub struct GlweMask<C: Container> {
pub data: C,
pub glwe_params: GlweParams,
}
impl<C: Container> GlweCiphertext<C> {
pub fn data_len(glwe_params: GlweParams) -> usize {
glwe_params.polynomial_size * (glwe_params.dimension + 1)
@@ -67,7 +59,7 @@ impl<C: Container> GlweCiphertext<C> {
self.data
}
pub fn into_mask_and_body(self) -> (GlweMask<C>, Polynomial<C>)
pub fn into_mask_and_body(self) -> (PolynomialList<C>, Polynomial<C>)
where
C: Split,
{
@@ -76,10 +68,11 @@ impl<C: Container> GlweCiphertext<C> {
.split_at(self.glwe_params.polynomial_size * self.glwe_params.dimension);
(
GlweMask {
data: mask,
glwe_params: self.glwe_params,
},
PolynomialList::new(
mask,
self.glwe_params.polynomial_size,
self.glwe_params.dimension,
),
Polynomial::new(body, self.glwe_params.polynomial_size),
)
}
@@ -102,56 +95,3 @@ impl GlweCiphertext<&mut [u64]> {
}
}
}
impl<C: Container> GlweMask<C> {
pub fn data_len(glwe_params: GlweParams) -> usize {
glwe_params.polynomial_size * glwe_params.dimension
}
pub fn new(data: C, glwe_params: GlweParams) -> Self {
debug_assert_eq!(data.len(), Self::data_len(glwe_params));
Self { data, glwe_params }
}
pub unsafe fn from_raw_parts(data: C::Pointer, glwe_params: GlweParams) -> Self
where
C: Split,
{
let data = C::from_raw_parts(data, Self::data_len(glwe_params));
Self { data, glwe_params }
}
pub fn as_view(&self) -> GlweMask<&[C::Item]> {
GlweMask {
data: self.data.as_ref(),
glwe_params: self.glwe_params,
}
}
pub fn as_mut_view(&mut self) -> GlweMask<&mut [C::Item]>
where
C: ContainerMut,
{
GlweMask {
data: self.data.as_mut(),
glwe_params: self.glwe_params,
}
}
pub fn into_data(self) -> C {
self.data
}
pub fn get_polynomial(self, idx: usize) -> Polynomial<C>
where
C: Split,
{
Polynomial::new(
self.data.chunk(
idx * self.glwe_params.polynomial_size,
(idx + 1) * self.glwe_params.polynomial_size,
),
self.glwe_params.polynomial_size,
)
}
}

View File

@@ -22,6 +22,10 @@ impl<C: Container> PolynomialList<C> {
fn container_len(&self) -> usize {
self.data.len()
}
pub fn into_data(self) -> C {
self.data
}
}
impl PolynomialList<&[u64]> {
@@ -48,6 +52,13 @@ impl PolynomialList<&[u64]> {
count,
})
}
pub fn as_view(&self) -> PolynomialList<&[u64]> {
PolynomialList {
data: self.data,
count: self.count,
polynomial_size: self.polynomial_size,
}
}
}
impl PolynomialList<&mut [u64]> {
@@ -58,4 +69,20 @@ impl PolynomialList<&mut [u64]> {
.chunks_exact_mut(self.polynomial_size)
.map(|a| Polynomial::new(a, self.polynomial_size))
}
pub fn as_mut_view(&mut self) -> PolynomialList<&mut [u64]> {
PolynomialList {
data: self.data,
count: self.count,
polynomial_size: self.polynomial_size,
}
}
pub fn as_view(&self) -> PolynomialList<&[u64]> {
PolynomialList {
data: self.data,
count: self.count,
polynomial_size: self.polynomial_size,
}
}
}

View File

@@ -397,6 +397,10 @@ impl<C: Container> GlweCiphertextList<C> {
}
}
pub fn into_data(self) -> C {
self.data
}
pub fn as_view(&self) -> GlweCiphertextListView<'_, C::Item> {
GlweCiphertextListView {
data: self.data.as_ref(),