mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 21:26:41 +01:00
Dev serialization (#64)
* Added compressed serialization for GLWECiphertext + Ciphertext decompression * Added compressed serialization for GGLWECiphertext & GLWESwitchingkey * generalized automorphism test * Removed ops on scalar_znx, replaced by as_vec_znx/as_vec_znx_mut and then call op on vec_znx * Added tests for automorphism key encryption * Added tensorkey compressed * added ggsw compressed
This commit is contained in:
committed by
GitHub
parent
4c59733566
commit
9aa4b1f1e2
@@ -1 +1,2 @@
|
||||
pub mod serialization;
|
||||
pub mod vec_znx;
|
||||
|
||||
56
backend/src/hal/tests/serialization.rs
Normal file
56
backend/src/hal/tests/serialization.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
use std::fmt::Debug;
|
||||
|
||||
use sampling::source::Source;
|
||||
|
||||
use crate::hal::{
|
||||
api::{FillUniform, ZnxZero},
|
||||
layouts::{ReaderFrom, WriterTo},
|
||||
};
|
||||
|
||||
/// Generic test for serialization and deserialization.
|
||||
///
|
||||
/// - `T` must implement I/O traits, zeroing, cloning, and random filling.
|
||||
pub fn test_reader_writer_interface<T>(mut original: T)
|
||||
where
|
||||
T: WriterTo + ReaderFrom + PartialEq + Eq + Debug + Clone + ZnxZero + FillUniform,
|
||||
{
|
||||
// Fill original with uniform random data
|
||||
let mut source = Source::new([0u8; 32]);
|
||||
original.fill_uniform(&mut source);
|
||||
|
||||
// Serialize into a buffer
|
||||
let mut buffer = Vec::new();
|
||||
original.write_to(&mut buffer).expect("write_to failed");
|
||||
|
||||
// Prepare receiver: same shape, but zeroed
|
||||
let mut receiver = original.clone();
|
||||
receiver.zero();
|
||||
|
||||
// Deserialize from buffer
|
||||
let mut reader: &[u8] = &buffer;
|
||||
receiver.read_from(&mut reader).expect("read_from failed");
|
||||
|
||||
// Ensure serialization round-trip correctness
|
||||
assert_eq!(
|
||||
&original, &receiver,
|
||||
"Deserialized object does not match the original"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn scalar_znx_serialize() {
|
||||
let original: crate::hal::layouts::ScalarZnx<Vec<u8>> = crate::hal::layouts::ScalarZnx::alloc(1024, 3);
|
||||
test_reader_writer_interface(original);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn vec_znx_serialize() {
|
||||
let original: crate::hal::layouts::VecZnx<Vec<u8>> = crate::hal::layouts::VecZnx::alloc::<i64>(1024, 3, 4);
|
||||
test_reader_writer_interface(original);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn mat_znx_serialize() {
|
||||
let original: crate::hal::layouts::MatZnx<Vec<u8>> = crate::hal::layouts::MatZnx::alloc(1024, 3, 2, 2, 4);
|
||||
test_reader_writer_interface(original);
|
||||
}
|
||||
Reference in New Issue
Block a user