pub struct ECTranscript<C: PrimeOrderCurve, T> {
sponge: T,
transcript: Transcript<C::Base>,
debug: bool,
}Expand description
A transcript that operates over the base field of a prime-order curve, while also allowing for the absorption and sampling of scalar field elements (and of course, EC points).
Fields§
§sponge: TThe sponge that this writer is using to append/squeeze elements.
transcript: Transcript<C::Base>A mutable transcript which keeps a record of all the append/squeeze operations.
debug: boolWhether to print debug information.
Implementations§
Source§impl<C: PrimeOrderCurve, Tr: ECTranscriptSponge<C> + Default> ECTranscript<C, Tr>
impl<C: PrimeOrderCurve, Tr: ECTranscriptSponge<C> + Default> ECTranscript<C, Tr>
Sourcepub fn get_transcript(self) -> Transcript<C::Base>
pub fn get_transcript(self) -> Transcript<C::Base>
Destructively extract the transcript produced by this writer.
This should be the last operation performed on a TranscriptWriter.
Sourcepub fn new(label: &str) -> Self
pub fn new(label: &str) -> Self
Creates an empty sponge.
label is an identifier used for debugging purposes.
Sourcepub fn new_with_debug(label: &str) -> Self
pub fn new_with_debug(label: &str) -> Self
Creates an empty sponge in debug mode (i.e. with debug information printed).
label is an identifier used for debugging purposes.
Trait Implementations§
Source§impl<C: PrimeOrderCurve, Sp: ECTranscriptSponge<C>> Display for ECTranscript<C, Sp>
impl<C: PrimeOrderCurve, Sp: ECTranscriptSponge<C>> Display for ECTranscript<C, Sp>
Source§impl<C: PrimeOrderCurve, Tr: ECTranscriptSponge<C> + Default> ECTranscriptTrait<C> for ECTranscript<C, Tr>
impl<C: PrimeOrderCurve, Tr: ECTranscriptSponge<C> + Default> ECTranscriptTrait<C> for ECTranscript<C, Tr>
Source§fn get_scalar_field_challenge(
&mut self,
label: &str,
) -> <C as PrimeOrderCurve>::Scalar
fn get_scalar_field_challenge( &mut self, label: &str, ) -> <C as PrimeOrderCurve>::Scalar
Literally takes the byte representation of the base field element and dumps it (TODO: in an unsafe manner! Make this return an error rather than just panicking) into a scalar field element’s representation.
Source§fn get_ec_challenge(&mut self, label: &str) -> C
fn get_ec_challenge(&mut self, label: &str) -> C
Generates two base field elements, and uses only the parity of the second
to determine the actual y-coordinate to be used.
WARNING/TODO(ryancao): USING THIS FUNCTION num_elements TIMES WILL
NOT PRODUCE THE SAME EC CHALLENGES AS CALLING Self::get_ec_challenges
WITH num_elements AS A PARAMETER!!!
IN PARTICULAR, THIS FUNCTION GENERATES (x, y) ELEMENTS IN INDIVIDUAL PAIRS, WHILE THE Self::get_ec_challenges FUNCTION GENERATES (x, y) ELEMENTS BY FIRST GENERATING ALL x-coordinates AND THEN GENERATING ALL ELEMENTS DETERMINING THE PARITY OF THE CORRESPONDING y-coordinates.
Source§fn get_ec_challenges(&mut self, label: &str, num_elements: usize) -> Vec<C>
fn get_ec_challenges(&mut self, label: &str, num_elements: usize) -> Vec<C>
Generates two base field elements for each element requested, by FIRST generating ALL of the x-coords and AFTERWARDS generating ALL of the base field elements whose parity determines the sign of the corresponding y-coord.
WARNING/TODO(ryancao): SEE WARNING FOR Self::get_ec_challenge!!!
fn append_ec_point(&mut self, label: &str, elem: C)
fn append_ec_points(&mut self, label: &str, elements: &[C])
fn append_scalar_field_elem(&mut self, label: &str, elem: C::Scalar)
fn append_scalar_field_elems(&mut self, label: &str, elements: &[C::Scalar])
fn get_scalar_field_challenges( &mut self, label: &str, num_elements: usize, ) -> Vec<<C as PrimeOrderCurve>::Scalar>
Source§fn append_input_ec_points(&mut self, label: &str, elements: Vec<C>)
fn append_input_ec_points(&mut self, label: &str, elements: Vec<C>)
Source§fn append_input_scalar_field_elems(
&mut self,
label: &str,
elements: &[<C as PrimeOrderCurve>::Scalar],
)
fn append_input_scalar_field_elems( &mut self, label: &str, elements: &[<C as PrimeOrderCurve>::Scalar], )
Source§fn append_base_field_elems(
&mut self,
label: &str,
elements: &[<C as PrimeOrderCurve>::Base],
)
fn append_base_field_elems( &mut self, label: &str, elements: &[<C as PrimeOrderCurve>::Base], )
Source§impl<C: PrimeOrderCurve, Sp: TranscriptSponge<C::Base>> ProverTranscript<<C as PrimeOrderCurve>::Base> for ECTranscript<C, Sp>
impl<C: PrimeOrderCurve, Sp: TranscriptSponge<C::Base>> ProverTranscript<<C as PrimeOrderCurve>::Base> for ECTranscript<C, Sp>
fn append(&mut self, label: &str, elem: C::Base)
fn append_elements(&mut self, label: &str, elements: &[C::Base])
fn get_challenge(&mut self, label: &str) -> C::Base
fn get_challenges(&mut self, label: &str, num_elements: usize) -> Vec<C::Base>
fn append_input_elements(&mut self, label: &str, elements: &[C::Base])
Auto Trait Implementations§
impl<C, T> Freeze for ECTranscript<C, T>where
T: Freeze,
impl<C, T> RefUnwindSafe for ECTranscript<C, T>
impl<C, T> Send for ECTranscript<C, T>where
T: Send,
impl<C, T> Sync for ECTranscript<C, T>where
T: Sync,
impl<C, T> Unpin for ECTranscript<C, T>
impl<C, T> UnwindSafe for ECTranscript<C, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.