1#[cfg(test)]
5use curve25519_dalek::scalar::Scalar;
6use itertools::Itertools;
7
8pub trait SharedValueSource<T> {
14    fn next_shared_bit(&mut self) -> T;
16    fn next_shared_bit_batch(&mut self, num_values: usize) -> Vec<T> {
18        (0..num_values)
19            .map(|_| self.next_shared_bit())
20            .collect_vec()
21    }
22    fn next_shared_value(&mut self) -> T;
24    fn next_shared_value_batch(&mut self, num_values: usize) -> Vec<T> {
26        (0..num_values)
27            .map(|_| self.next_shared_value())
28            .collect_vec()
29    }
30    fn next_shared_inverse_pair(&mut self) -> (T, T);
32    fn next_shared_inverse_pair_batch(&mut self, num_pairs: usize) -> Vec<(T, T)> {
34        (0..num_pairs)
35            .map(|_| self.next_shared_inverse_pair())
36            .collect_vec()
37    }
38    fn next_triplet(&mut self) -> (T, T, T);
40    fn next_triplet_batch(&mut self, num_triplets: usize) -> Vec<(T, T, T)> {
42        (0..num_triplets).map(|_| self.next_triplet()).collect_vec()
43    }
44}
45
46#[cfg(test)]
49#[derive(Debug, Default)]
50pub struct DummySharedScalarSource;
51
52#[cfg(test)]
53#[allow(dead_code)]
54impl DummySharedScalarSource {
55    pub fn new() -> Self {
56        Self
57    }
58}
59
60#[cfg(test)]
61impl SharedValueSource<Scalar> for DummySharedScalarSource {
62    fn next_shared_bit(&mut self) -> Scalar {
63        Scalar::one()
64    }
65
66    fn next_shared_value(&mut self) -> Scalar {
67        Scalar::one()
68    }
69
70    fn next_shared_inverse_pair(&mut self) -> (Scalar, Scalar) {
71        (Scalar::one(), Scalar::one())
72    }
73
74    fn next_triplet(&mut self) -> (Scalar, Scalar, Scalar) {
75        (Scalar::one(), Scalar::one(), Scalar::one())
76    }
77}