shared_types/transcript/
counting_transcript.rs

1//! An implementation of a `TranscriptSponge` that increments an internal counter for each squeeze.
2//! For testing purposes only!
3
4use std::marker::PhantomData;
5
6use super::TranscriptSponge;
7use crate::Field;
8use itertools::Itertools;
9use std::fmt::Debug;
10
11/// An implementation of a transcript sponge that increments an internal counter for each squeeze.
12#[derive(Clone, Default, Debug)]
13pub struct CountingSponge<F: Field + Debug> {
14    counter: usize,
15    _marker: PhantomData<F>,
16}
17
18impl<F: Field + Debug> TranscriptSponge<F> for CountingSponge<F> {
19    fn absorb(&mut self, _elem: F) {}
20
21    fn absorb_elements(&mut self, _elements: &[F]) {}
22
23    fn squeeze(&mut self) -> F {
24        let res = self.counter;
25        self.counter += 1;
26        F::from(res as u64)
27    }
28
29    fn squeeze_elements(&mut self, num_elements: usize) -> Vec<F> {
30        (0..num_elements).map(|_| self.squeeze()).collect_vec()
31    }
32
33    fn absorb_initialization_label(&mut self, _label: &str) {}
34}