|
@@ -4,7 +4,7 @@ use crate::{
|
|
|
use rand::{Rng, SeedableRng};
|
|
|
use rand_chacha::ChaCha20Rng;
|
|
|
use std::{iter::once, mem::size_of};
|
|
|
-use std::sync::Mutex;
|
|
|
+use std::cell::RefCell;
|
|
|
use thread_local::ThreadLocal;
|
|
|
|
|
|
fn new_vec_raw<'a>(
|
|
@@ -212,7 +212,7 @@ pub struct Client<'a, T: Rng + Send> {
|
|
|
sk_gsw_full: PolyMatrixRaw<'a>,
|
|
|
sk_reg_full: PolyMatrixRaw<'a>,
|
|
|
dg: DiscreteGaussian<T>,
|
|
|
- public_rng: ThreadLocal<Mutex<ChaCha20Rng>>,
|
|
|
+ public_rng: ThreadLocal<RefCell<ChaCha20Rng>>,
|
|
|
public_seed: ThreadLocal<<ChaCha20Rng as SeedableRng>::Seed>,
|
|
|
}
|
|
|
|
|
@@ -300,9 +300,9 @@ impl<'a, T: Rng + Send> Client<'a, T> {
|
|
|
let params = self.params;
|
|
|
let a = {
|
|
|
let public_rng = &mut *self.public_rng.get_or(|| {
|
|
|
- Mutex::new(ChaCha20Rng::from_seed(self.get_public_seed()))
|
|
|
+ RefCell::new(ChaCha20Rng::from_seed(self.get_public_seed()))
|
|
|
})
|
|
|
- .lock().unwrap();
|
|
|
+ .borrow_mut();
|
|
|
PolyMatrixRaw::random_rng(params, 1, 1, public_rng)
|
|
|
};
|
|
|
let e = PolyMatrixRaw::noise(params, 1, 1, &self.dg);
|