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}