pub struct Response<G: AffineRepr> {
pub z_prime_0: G::ScalarField,
pub z_prime_1: G::ScalarField,
pub A: Vec<G>,
pub B: Vec<G>,
}Fields§
§z_prime_0: G::ScalarField§z_prime_1: G::ScalarField§A: Vec<G>§B: Vec<G>Implementations§
Source§impl<G> Response<G>where
G: AffineRepr,
impl<G> Response<G>where
G: AffineRepr,
Sourcepub fn is_valid_recursive<D: Digest, L: LinearForm<G::ScalarField>>(
&self,
g: &[G],
h: &G,
k: &G,
P: &G,
y: &G::ScalarField,
linear_form: &L,
A_hat: &G,
t: &G::ScalarField,
c_0: &G::ScalarField,
c_1: &G::ScalarField,
) -> Result<(), CompSigmaError>
pub fn is_valid_recursive<D: Digest, L: LinearForm<G::ScalarField>>( &self, g: &[G], h: &G, k: &G, P: &G, y: &G::ScalarField, linear_form: &L, A_hat: &G, t: &G::ScalarField, c_0: &G::ScalarField, c_1: &G::ScalarField, ) -> Result<(), CompSigmaError>
Validate the proof of knowledge in the recursive manner where the size of the various
vectors is reduced to half in each iteration. This execution is similar to the prover’s.
A naive and thus slower implementation than is_valid
Sourcepub fn is_valid<D: Digest, L: LinearForm<G::ScalarField>>(
&self,
g: &[G],
h: &G,
k: &G,
P: &G,
y: &G::ScalarField,
linear_form: &L,
A_hat: &G,
t: &G::ScalarField,
c_0: &G::ScalarField,
c_1: &G::ScalarField,
) -> Result<(), CompSigmaError>
pub fn is_valid<D: Digest, L: LinearForm<G::ScalarField>>( &self, g: &[G], h: &G, k: &G, P: &G, y: &G::ScalarField, linear_form: &L, A_hat: &G, t: &G::ScalarField, c_0: &G::ScalarField, c_1: &G::ScalarField, ) -> Result<(), CompSigmaError>
Validate the proof of knowledge in the non-recursive manner. This will delay scalar multiplications
till the end similar to whats described in the Bulletproofs paper, thus is faster than the recursive
version above. The key idea is that the verifier knows both A and B at the start and thus he knows
all the immediate challenges c also at the start. Thus the verifier can create the final g’ and Q
in a single multi-scalar multiplication
pub fn recursively_validate_compressed<D: Digest, L: LinearForm<G::ScalarField>>( &self, Q: G::Group, g_hat: Vec<G>, L_tilde: L, k: &G, ) -> Result<(), CompSigmaError>
pub fn validate_compressed<D: Digest, L: LinearForm<G::ScalarField>>( &self, Q: G::Group, g_hat: Vec<G>, L_tilde: L, k: &G, ) -> Result<(), CompSigmaError>
Trait Implementations§
Source§impl<G: AffineRepr> CanonicalDeserialize for Response<G>
impl<G: AffineRepr> CanonicalDeserialize for Response<G>
Source§fn deserialize_with_mode<R: Read>(
reader: R,
compress: Compress,
validate: Validate,
) -> Result<Self, SerializationError>
fn deserialize_with_mode<R: Read>( reader: R, compress: Compress, validate: Validate, ) -> Result<Self, SerializationError>
The general deserialize method that takes in customization flags.
fn deserialize_compressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_compressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed<R>(reader: R) -> Result<Self, SerializationError>where
R: Read,
fn deserialize_uncompressed_unchecked<R>(
reader: R,
) -> Result<Self, SerializationError>where
R: Read,
Source§impl<G: AffineRepr> CanonicalSerialize for Response<G>
impl<G: AffineRepr> CanonicalSerialize for Response<G>
Source§fn serialize_with_mode<W: Write>(
&self,
writer: W,
compress: Compress,
) -> Result<(), SerializationError>
fn serialize_with_mode<W: Write>( &self, writer: W, compress: Compress, ) -> Result<(), SerializationError>
The general serialize method that takes in customization flags.
fn serialized_size(&self, compress: Compress) -> usize
fn serialize_compressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn compressed_size(&self) -> usize
fn serialize_uncompressed<W>(&self, writer: W) -> Result<(), SerializationError>where
W: Write,
fn uncompressed_size(&self) -> usize
Source§impl<G: Clone + AffineRepr> Clone for Response<G>where
G::ScalarField: Clone,
impl<G: Clone + AffineRepr> Clone for Response<G>where
G::ScalarField: Clone,
Source§impl<G: Debug + AffineRepr> Debug for Response<G>where
G::ScalarField: Debug,
impl<G: Debug + AffineRepr> Debug for Response<G>where
G::ScalarField: Debug,
Source§impl<G: PartialEq + AffineRepr> PartialEq for Response<G>where
G::ScalarField: PartialEq,
impl<G: PartialEq + AffineRepr> PartialEq for Response<G>where
G::ScalarField: PartialEq,
Source§impl<G: AffineRepr> Valid for Response<G>
impl<G: AffineRepr> Valid for Response<G>
fn check(&self) -> Result<(), SerializationError>
fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
impl<G: Eq + AffineRepr> Eq for Response<G>where
G::ScalarField: Eq,
impl<G: AffineRepr> StructuralPartialEq for Response<G>
Auto Trait Implementations§
impl<G> Freeze for Response<G>
impl<G> RefUnwindSafe for Response<G>
impl<G> Send for Response<G>
impl<G> Sync for Response<G>
impl<G> Unpin for Response<G>
impl<G> UnwindSafe for Response<G>
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
Mutably borrows from an owned value. Read more
Source§impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
impl<T> CanonicalSerializeHashExt for Twhere
T: CanonicalSerialize,
fn hash<H>(&self) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
fn hash_uncompressed<H>(
&self,
) -> GenericArray<u8, <H as OutputSizeUser>::OutputSize>where
H: Digest,
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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>
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 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>
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