mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 21:26:41 +01:00
Remove Zn (replaced by VecZnx), add more cross-base2k ops & tests
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
use std::fmt;
|
||||
|
||||
use poulpy_hal::{
|
||||
api::ZnFillUniform,
|
||||
api::VecZnxFillUniform,
|
||||
layouts::{
|
||||
Backend, Data, DataMut, DataRef, FillUniform, Module, ReaderFrom, WriterTo, Zn, ZnToMut, ZnToRef, ZnxInfos, ZnxView,
|
||||
ZnxViewMut,
|
||||
Backend, Data, DataMut, DataRef, FillUniform, Module, ReaderFrom, VecZnx, VecZnxToMut, VecZnxToRef, WriterTo, ZnxInfos,
|
||||
ZnxView, ZnxViewMut,
|
||||
},
|
||||
source::Source,
|
||||
};
|
||||
@@ -13,7 +13,7 @@ use crate::layouts::{Base2K, Degree, LWE, LWEInfos, LWEToMut, TorusPrecision};
|
||||
|
||||
#[derive(PartialEq, Eq, Clone)]
|
||||
pub struct LWECompressed<D: Data> {
|
||||
pub(crate) data: Zn<D>,
|
||||
pub(crate) data: VecZnx<D>,
|
||||
pub(crate) k: TorusPrecision,
|
||||
pub(crate) base2k: Base2K,
|
||||
pub(crate) seed: [u8; 32],
|
||||
@@ -72,7 +72,7 @@ impl LWECompressed<Vec<u8>> {
|
||||
|
||||
pub fn alloc(base2k: Base2K, k: TorusPrecision) -> Self {
|
||||
LWECompressed {
|
||||
data: Zn::alloc(1, 1, k.0.div_ceil(base2k.0) as usize),
|
||||
data: VecZnx::alloc(1, 1, k.0.div_ceil(base2k.0) as usize),
|
||||
k,
|
||||
base2k,
|
||||
seed: [0u8; 32],
|
||||
@@ -87,7 +87,7 @@ impl LWECompressed<Vec<u8>> {
|
||||
}
|
||||
|
||||
pub fn bytes_of(base2k: Base2K, k: TorusPrecision) -> usize {
|
||||
Zn::bytes_of(1, 1, k.0.div_ceil(base2k.0) as usize)
|
||||
VecZnx::bytes_of(1, 1, k.0.div_ceil(base2k.0) as usize)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ impl<D: DataRef> WriterTo for LWECompressed<D> {
|
||||
|
||||
pub trait LWEDecompress
|
||||
where
|
||||
Self: ZnFillUniform,
|
||||
Self: VecZnxFillUniform,
|
||||
{
|
||||
fn decompress_lwe<R, O>(&self, res: &mut R, other: &O)
|
||||
where
|
||||
@@ -126,20 +126,14 @@ where
|
||||
assert_eq!(res.lwe_layout(), other.lwe_layout());
|
||||
|
||||
let mut source: Source = Source::new(other.seed);
|
||||
self.zn_fill_uniform(
|
||||
res.n().into(),
|
||||
other.base2k().into(),
|
||||
&mut res.data,
|
||||
0,
|
||||
&mut source,
|
||||
);
|
||||
self.vec_znx_fill_uniform(other.base2k().into(), &mut res.data, 0, &mut source);
|
||||
for i in 0..res.size() {
|
||||
res.data.at_mut(0, i)[0] = other.data.at(0, i)[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<B: Backend> LWEDecompress for Module<B> where Self: ZnFillUniform {}
|
||||
impl<B: Backend> LWEDecompress for Module<B> where Self: VecZnxFillUniform {}
|
||||
|
||||
impl<D: DataMut> LWE<D> {
|
||||
pub fn decompress<O, M>(&mut self, module: &M, other: &O)
|
||||
|
||||
@@ -158,3 +158,15 @@ impl<D: DataMut> GLWEPlaintextToMut for GLWEPlaintext<D> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataMut> GLWEPlaintext<D> {
|
||||
pub fn data_mut(&mut self) -> &mut VecZnx<D> {
|
||||
&mut self.data
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataRef> GLWEPlaintext<D> {
|
||||
pub fn data(&self) -> &VecZnx<D> {
|
||||
&self.data
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use std::fmt;
|
||||
|
||||
use poulpy_hal::{
|
||||
layouts::{Data, DataMut, DataRef, FillUniform, ReaderFrom, WriterTo, Zn, ZnToMut, ZnToRef, ZnxInfos},
|
||||
layouts::{Data, DataMut, DataRef, FillUniform, ReaderFrom, VecZnx, VecZnxToMut, VecZnxToRef, WriterTo, ZnxInfos},
|
||||
source::Source,
|
||||
};
|
||||
|
||||
@@ -57,7 +57,7 @@ impl LWEInfos for LWELayout {
|
||||
}
|
||||
#[derive(PartialEq, Eq, Clone)]
|
||||
pub struct LWE<D: Data> {
|
||||
pub(crate) data: Zn<D>,
|
||||
pub(crate) data: VecZnx<D>,
|
||||
pub(crate) k: TorusPrecision,
|
||||
pub(crate) base2k: Base2K,
|
||||
}
|
||||
@@ -90,13 +90,13 @@ impl<D: Data> SetLWEInfos for LWE<D> {
|
||||
}
|
||||
|
||||
impl<D: DataRef> LWE<D> {
|
||||
pub fn data(&self) -> &Zn<D> {
|
||||
pub fn data(&self) -> &VecZnx<D> {
|
||||
&self.data
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataMut> LWE<D> {
|
||||
pub fn data_mut(&mut self) -> &Zn<D> {
|
||||
pub fn data_mut(&mut self) -> &VecZnx<D> {
|
||||
&mut self.data
|
||||
}
|
||||
}
|
||||
@@ -121,7 +121,7 @@ impl<D: DataRef> fmt::Display for LWE<D> {
|
||||
|
||||
impl<D: DataMut> FillUniform for LWE<D>
|
||||
where
|
||||
Zn<D>: FillUniform,
|
||||
VecZnx<D>: FillUniform,
|
||||
{
|
||||
fn fill_uniform(&mut self, log_bound: usize, source: &mut Source) {
|
||||
self.data.fill_uniform(log_bound, source);
|
||||
@@ -138,7 +138,7 @@ impl LWE<Vec<u8>> {
|
||||
|
||||
pub fn alloc(n: Degree, base2k: Base2K, k: TorusPrecision) -> Self {
|
||||
LWE {
|
||||
data: Zn::alloc((n + 1).into(), 1, k.0.div_ceil(base2k.0) as usize),
|
||||
data: VecZnx::alloc((n + 1).into(), 1, k.0.div_ceil(base2k.0) as usize),
|
||||
k,
|
||||
base2k,
|
||||
}
|
||||
@@ -152,7 +152,7 @@ impl LWE<Vec<u8>> {
|
||||
}
|
||||
|
||||
pub fn bytes_of(n: Degree, base2k: Base2K, k: TorusPrecision) -> usize {
|
||||
Zn::bytes_of((n + 1).into(), 1, k.0.div_ceil(base2k.0) as usize)
|
||||
VecZnx::bytes_of((n + 1).into(), 1, k.0.div_ceil(base2k.0) as usize)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use std::fmt;
|
||||
|
||||
use poulpy_hal::layouts::{Data, DataMut, DataRef, Zn, ZnToMut, ZnToRef, ZnxInfos};
|
||||
use poulpy_hal::layouts::{Data, DataMut, DataRef, VecZnx, VecZnxToMut, VecZnxToRef, ZnxInfos};
|
||||
|
||||
use crate::layouts::{Base2K, Degree, LWEInfos, TorusPrecision};
|
||||
|
||||
@@ -29,7 +29,7 @@ impl LWEInfos for LWEPlaintextLayout {
|
||||
}
|
||||
|
||||
pub struct LWEPlaintext<D: Data> {
|
||||
pub(crate) data: Zn<D>,
|
||||
pub(crate) data: VecZnx<D>,
|
||||
pub(crate) k: TorusPrecision,
|
||||
pub(crate) base2k: Base2K,
|
||||
}
|
||||
@@ -62,7 +62,7 @@ impl LWEPlaintext<Vec<u8>> {
|
||||
|
||||
pub fn alloc(base2k: Base2K, k: TorusPrecision) -> Self {
|
||||
LWEPlaintext {
|
||||
data: Zn::alloc(1, 1, k.0.div_ceil(base2k.0) as usize),
|
||||
data: VecZnx::alloc(1, 1, k.0.div_ceil(base2k.0) as usize),
|
||||
k,
|
||||
base2k,
|
||||
}
|
||||
@@ -111,8 +111,14 @@ impl<D: DataMut> LWEPlaintextToMut for LWEPlaintext<D> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataRef> LWEPlaintext<D> {
|
||||
pub fn data(&self) -> &VecZnx<D> {
|
||||
&self.data
|
||||
}
|
||||
}
|
||||
|
||||
impl<D: DataMut> LWEPlaintext<D> {
|
||||
pub fn data_mut(&mut self) -> &mut Zn<D> {
|
||||
pub fn data_mut(&mut self) -> &mut VecZnx<D> {
|
||||
&mut self.data
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user