Skip to main content

ReplayChannel

Struct ReplayChannel 

Source
pub struct ReplayChannel<F: Field> { /* private fields */ }
Expand description

A channel that replays recorded interaction values through a WitnessGenerator, filling both inout and private wires in the outer witness.

This mirrors IronSpartanBuilderChannel but uses concrete evaluation instead of symbolic constraint building. Each operation consumes the next value and writes it to the corresponding inout wire in the WitnessGenerator. When the verifier’s arithmetic runs on the returned CircuitElem values, the WitnessGenerator fills private wires.

Implementations§

Source§

impl<F: Field> ReplayChannel<F>

Source

pub fn new(layout: Arc<WitnessLayout<F>>, keys: Vec<F>, events: Vec<F>) -> Self

Creates a new replay channel.

TODO: Document args. Keys are the symmetric OTP keys for the received values.

Takes a shared Arc<WitnessLayout<F>>, not a borrow. The backing WitnessGenerator must be 'static: its CircuitElems outlive this call. The Arc is a bumped reference count on the layout the config already owns, not a clone.

Source

pub fn finish(self) -> Result<Witness<F>, WitnessError>

Consumes the channel and builds the outer witness.

Trait Implementations§

Source§

impl<F: Field> IOPVerifierChannel<F> for ReplayChannel<F>

Source§

type Oracle = ()

Source§

fn remaining_oracle_specs(&self) -> &[OracleSpec]

Returns the specifications for the remaining oracles to be received. Read more
Source§

fn recv_oracle( &mut self, _log_msg_len: usize, _is_witness_dependent: bool, ) -> Result<Self::Oracle, Error>

Receives an oracle commitment from the prover. Read more
Source§

fn verify_oracle_relation( &mut self, _oracle: Self::Oracle, _transparent: TransparentEvalFn<Self::Elem>, claim: Self::Elem, ) -> Result<(), Error>

Queues one oracle linear relation to be opened. Read more
Source§

impl<F: Field> IPVerifierChannel<F> for ReplayChannel<F>

Source§

type Elem = CircuitElem<F, WitnessGenerator<F>>

The element type returned by receive and sample methods.
Source§

fn recv_one(&mut self) -> Result<Self::Elem, Error>

Receives a single field element from the prover.
Source§

fn recv_public_claim(&mut self) -> Result<Self::Elem, Error>

Receives a value the verifier could compute for itself, taken as advice. Read more
Source§

fn sample(&mut self) -> Self::Elem

Samples a random challenge. Read more
Source§

fn observe_one(&mut self, _val: F) -> Self::Elem

Observes a single field element, feeding it into the Fiat-Shamir state. Read more
Source§

fn assert_zero(&mut self, val: Self::Elem) -> Result<(), Error>

Asserts that a value is zero. Read more
Source§

fn recv_many(&mut self, n: usize) -> Result<Vec<Self::Elem>, Error>

Receives n field elements from the prover.
Source§

fn recv_array<const N: usize>(&mut self) -> Result<[Self::Elem; N], Error>

Receives a fixed-size array of field elements from the prover.
Source§

fn sample_many(&mut self, n: usize) -> Vec<Self::Elem>

Samples n random challenges.
Source§

fn sample_array<const N: usize>(&mut self) -> [Self::Elem; N]

Samples a fixed-size array of random challenges.
Source§

fn observe_many(&mut self, vals: &[F]) -> Vec<Self::Elem>

Observes multiple field elements, feeding them into the Fiat-Shamir state. Read more
Source§

impl<F: BinaryField> WordIPVerifierChannel<F> for ReplayChannel<F>

Source§

type Word = Word

The word type this channel carries. Read more
Source§

fn observe_words(&mut self, words: &[Word]) -> Vec<Word>

Feeds words into the Fiat-Shamir state, each as eight little-endian bytes, and returns them as this channel’s word type. Read more
Source§

fn subset_sum(&mut self, elems: &[Self::Elem], word: &Word) -> Self::Elem

Returns the sum of the elems selected by the low bits of word, low bit first. Read more
Source§

fn select(&mut self, elems: &[Self::Elem], word: &Word) -> Self::Elem

Returns the element of elems at the index in the low bits of word. Read more
Source§

fn sample_bits(&mut self, _bits: usize) -> Word

Samples a uniform word of the given bit width. Read more
Source§

fn pack_words(&mut self, words: &[Word]) -> Vec<Self::Elem>

Packs words into field elements, as many words to an element as one holds. Read more

Auto Trait Implementations§

§

impl<F> !RefUnwindSafe for ReplayChannel<F>

§

impl<F> !Send for ReplayChannel<F>

§

impl<F> !Sync for ReplayChannel<F>

§

impl<F> !UnwindSafe for ReplayChannel<F>

§

impl<F> Freeze for ReplayChannel<F>

§

impl<F> Unpin for ReplayChannel<F>
where F: Unpin,

§

impl<F> UnsafeUnpin for ReplayChannel<F>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more