fix(hlapi): clear rerand metadata once rerand is done

This commit is contained in:
Arthur Meyre
2025-09-29 17:35:23 +02:00
parent 06dffc60bd
commit 2602c9e1b3
6 changed files with 26 additions and 0 deletions

View File

@@ -2071,6 +2071,8 @@ impl ReRandomize for FheBool {
seed,
)?;
self.re_randomization_metadata_mut().clear();
Ok(())
}
#[cfg(feature = "gpu")]

View File

@@ -1162,6 +1162,8 @@ where
seed,
)?;
self.re_randomization_metadata_mut().clear();
Ok(())
}
#[cfg(feature = "gpu")]

View File

@@ -1672,6 +1672,8 @@ where
seed,
)?;
self.re_randomization_metadata_mut().clear();
Ok(())
}
#[cfg(feature = "gpu")]

View File

@@ -231,4 +231,8 @@ impl ReRandomizationMetadata {
pub fn set_data(&mut self, data: &[u8]) {
self.inner.set_data(data);
}
pub fn clear(&mut self) {
self.inner.clear();
}
}

View File

@@ -174,6 +174,16 @@ impl SmallVec {
self.set_data(le_bytes.as_slice());
}
/// Clears the vector, removing all values.
///
/// Note that this method has no effect on the allocated capacity of the vector.
pub fn clear(&mut self) {
match self {
Self::Stack { bytes: _, len } => *len = 0,
Self::Heap(items) => items.clear(),
}
}
// Creates a SmallVec from the vec, but, only re-uses the vec
// if its len would not fit on the stack part.
//

View File

@@ -78,8 +78,10 @@ fn test_re_rand() {
let mut seed_gen = re_rand_context.finalize();
a.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(a.re_randomization_metadata().data().is_empty());
b.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(b.re_randomization_metadata().data().is_empty());
let c = a + b;
let dec: u64 = c.decrypt(&cks);
@@ -130,8 +132,10 @@ fn test_re_rand() {
let mut seed_gen = re_rand_context.finalize();
a.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(a.re_randomization_metadata().data().is_empty());
b.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(b.re_randomization_metadata().data().is_empty());
let c = a + b;
let dec: i8 = c.decrypt(&cks);
@@ -181,8 +185,10 @@ fn test_re_rand() {
let mut seed_gen = re_rand_context.finalize();
a.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(a.re_randomization_metadata().data().is_empty());
b.re_randomize(&cpk, seed_gen.next_seed().unwrap()).unwrap();
assert!(b.re_randomization_metadata().data().is_empty());
let c = a & b;
let dec: bool = c.decrypt(&cks);