#[cfg(test)]
use curve25519_dalek::scalar::Scalar;
use itertools::Itertools;
pub trait SharedValueSource<T> {
fn next_shared_bit(&mut self) -> T;
fn next_shared_bit_batch(&mut self, num_values: usize) -> Vec<T> {
(0..num_values)
.map(|_| self.next_shared_bit())
.collect_vec()
}
fn next_shared_value(&mut self) -> T;
fn next_shared_value_batch(&mut self, num_values: usize) -> Vec<T> {
(0..num_values)
.map(|_| self.next_shared_value())
.collect_vec()
}
fn next_shared_inverse_pair(&mut self) -> (T, T);
fn next_shared_inverse_pair_batch(&mut self, num_pairs: usize) -> Vec<(T, T)> {
(0..num_pairs)
.map(|_| self.next_shared_inverse_pair())
.collect_vec()
}
fn next_triplet(&mut self) -> (T, T, T);
fn next_triplet_batch(&mut self, num_triplets: usize) -> Vec<(T, T, T)> {
(0..num_triplets).map(|_| self.next_triplet()).collect_vec()
}
}
#[cfg(test)]
#[derive(Debug, Default)]
pub struct DummySharedScalarSource;
#[cfg(test)]
#[allow(dead_code)]
impl DummySharedScalarSource {
pub fn new() -> Self {
Self
}
}
#[cfg(test)]
impl SharedValueSource<Scalar> for DummySharedScalarSource {
fn next_shared_bit(&mut self) -> Scalar {
Scalar::one()
}
fn next_shared_value(&mut self) -> Scalar {
Scalar::one()
}
fn next_shared_inverse_pair(&mut self) -> (Scalar, Scalar) {
(Scalar::one(), Scalar::one())
}
fn next_triplet(&mut self) -> (Scalar, Scalar, Scalar) {
(Scalar::one(), Scalar::one(), Scalar::one())
}
}