miden_stark_transcript/
channel.rs1use p3_challenger::{CanFinalizeDigest, CanObserve, CanSample, CanSampleBits, GrindingChallenger};
4use p3_field::{BasedVectorSpace, Field};
5
6pub trait TranscriptChallenger<F: Field, C>:
12 Clone
13 + CanObserve<F>
14 + CanObserve<C>
15 + CanSample<F>
16 + CanSampleBits<usize>
17 + GrindingChallenger<Witness = F>
18 + CanFinalizeDigest
19{
20}
21
22impl<F, C, Ch> TranscriptChallenger<F, C> for Ch
23where
24 F: Field,
25 Ch: Clone
26 + CanObserve<F>
27 + CanObserve<C>
28 + CanSample<F>
29 + CanSampleBits<usize>
30 + GrindingChallenger<Witness = F>
31 + CanFinalizeDigest,
32{
33}
34
35pub trait Channel {
40 type F: Field;
41 type Commitment: Clone;
42 type Challenger: TranscriptChallenger<Self::F, Self::Commitment>;
43
44 fn sample(&mut self) -> Self::F;
46
47 fn sample_bits(&mut self, bits: usize) -> usize;
49
50 fn sample_algebra_element<A: BasedVectorSpace<Self::F>>(&mut self) -> A {
52 A::from_basis_coefficients_fn(|_| self.sample())
53 }
54}