pub struct PoKOfSignatureG1Proof<E: Pairing> {
pub A_prime: E::G1Affine,
pub A_bar: E::G1Affine,
pub d: E::G1Affine,
pub sc_resp_1: PokTwoDiscreteLogs<E::G1Affine>,
pub T2: E::G1Affine,
pub sc_resp_2: Option<SchnorrResponse<E::G1Affine>>,
pub sc_partial_resp_2: Option<PartialSchnorrResponse<E::G1Affine>>,
}Expand description
Proof of knowledge of BBS+ signature in G1. It contains the randomized signature, commitment (Schnorr step 1)
and response (Schnorr step 3) to both Schnorr protocols in T_ and sc_resp_
Fields§
§A_prime: E::G1Affine§A_bar: E::G1Affine§d: E::G1Affine§sc_resp_1: PokTwoDiscreteLogs<E::G1Affine>Proof of relation A_bar - d = A_prime * -e + h_0 * r2
T2: E::G1AffineProof of relation g1 + h1*m1 + h2*m2 +.... + h_i*m_i = d*r3 + {h_0}*{-s'} + h1*{-m1} + h2*{-m2} + .... + h_j*{-m_j} for all disclosed messages m_i and for all undisclosed messages m_j
sc_resp_2: Option<SchnorrResponse<E::G1Affine>>The following could be achieved by using Either<SchnorrResponse, PartialSchnorrResponse> but serialization for Either is not supported out of the box and had to be implemented
sc_partial_resp_2: Option<PartialSchnorrResponse<E::G1Affine>>Implementations§
Source§impl<E: Pairing> PoKOfSignatureG1Proof<E>
impl<E: Pairing> PoKOfSignatureG1Proof<E>
Sourcepub fn verify(
&self,
revealed_msgs: &BTreeMap<usize, E::ScalarField>,
challenge: &E::ScalarField,
pk: impl Into<PreparedPublicKeyG2<E>>,
params: impl Into<PreparedSignatureParamsG1<E>>,
) -> Result<(), BBSPlusError>
pub fn verify( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, ) -> Result<(), BBSPlusError>
Verify if the proof is valid. Assumes that the public key and parameters have been validated already.
pub fn verify_with_randomized_pairing_checker( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, pairing_checker: &mut RandomizedPairingChecker<E>, ) -> Result<(), BBSPlusError>
Sourcepub fn verify_partial(
&self,
revealed_msgs: &BTreeMap<usize, E::ScalarField>,
challenge: &E::ScalarField,
pk: impl Into<PreparedPublicKeyG2<E>>,
params: impl Into<PreparedSignatureParamsG1<E>>,
missing_responses: BTreeMap<usize, E::ScalarField>,
) -> Result<(), BBSPlusError>
pub fn verify_partial( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, missing_responses: BTreeMap<usize, E::ScalarField>, ) -> Result<(), BBSPlusError>
Similar to Self::verify but responses for some messages (witnesses) are provided in missing_responses.
The keys of the map are message indices.
Sourcepub fn verify_partial_with_randomized_pairing_checker(
&self,
revealed_msgs: &BTreeMap<usize, E::ScalarField>,
challenge: &E::ScalarField,
pk: impl Into<PreparedPublicKeyG2<E>>,
params: impl Into<PreparedSignatureParamsG1<E>>,
pairing_checker: &mut RandomizedPairingChecker<E>,
missing_responses: BTreeMap<usize, E::ScalarField>,
) -> Result<(), BBSPlusError>
pub fn verify_partial_with_randomized_pairing_checker( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, pairing_checker: &mut RandomizedPairingChecker<E>, missing_responses: BTreeMap<usize, E::ScalarField>, ) -> Result<(), BBSPlusError>
Similar to Self::verify_with_randomized_pairing_checker but responses for some messages (witnesses) are provided in missing_responses.
The keys of the map are message indices.
Sourcepub fn challenge_contribution<W: Write>(
&self,
revealed_msgs: &BTreeMap<usize, E::ScalarField>,
params: &SignatureParamsG1<E>,
writer: W,
) -> Result<(), BBSPlusError>
pub fn challenge_contribution<W: Write>( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, params: &SignatureParamsG1<E>, writer: W, ) -> Result<(), BBSPlusError>
For the verifier to independently calculate the challenge
Sourcepub fn get_resp_for_message(
&self,
msg_idx: usize,
revealed_msg_ids: &BTreeSet<usize>,
) -> Result<&E::ScalarField, BBSPlusError>
pub fn get_resp_for_message( &self, msg_idx: usize, revealed_msg_ids: &BTreeSet<usize>, ) -> Result<&E::ScalarField, BBSPlusError>
Get the response from post-challenge phase of the Schnorr protocol for the given message index
msg_idx. Used when comparing message equality
pub fn get_responses( &self, msg_ids: &BTreeSet<usize>, revealed_msg_ids: &BTreeSet<usize>, ) -> Result<BTreeMap<usize, E::ScalarField>, BBSPlusError>
pub fn _verify( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, missing_responses: Option<BTreeMap<usize, E::ScalarField>>, ) -> Result<(), BBSPlusError>
pub fn _verify_with_randomized_pairing_checker( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, pk: impl Into<PreparedPublicKeyG2<E>>, params: impl Into<PreparedSignatureParamsG1<E>>, pairing_checker: &mut RandomizedPairingChecker<E>, missing_responses: Option<BTreeMap<usize, E::ScalarField>>, ) -> Result<(), BBSPlusError>
pub fn verify_schnorr_proofs( &self, revealed_msgs: &BTreeMap<usize, E::ScalarField>, challenge: &E::ScalarField, g1: E::G1Affine, h_0: E::G1Affine, h: Vec<E::G1Affine>, missing_responses: Option<BTreeMap<usize, E::ScalarField>>, ) -> Result<(), BBSPlusError>
Trait Implementations§
Source§impl<E: Pairing> CanonicalDeserialize for PoKOfSignatureG1Proof<E>
impl<E: Pairing> CanonicalDeserialize for PoKOfSignatureG1Proof<E>
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>
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<E: Pairing> CanonicalSerialize for PoKOfSignatureG1Proof<E>
impl<E: Pairing> CanonicalSerialize for PoKOfSignatureG1Proof<E>
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>
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<E: Clone + Pairing> Clone for PoKOfSignatureG1Proof<E>
impl<E: Clone + Pairing> Clone for PoKOfSignatureG1Proof<E>
Source§fn clone(&self) -> PoKOfSignatureG1Proof<E>
fn clone(&self) -> PoKOfSignatureG1Proof<E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'de, E: Pairing> Deserialize<'de> for PoKOfSignatureG1Proof<E>
impl<'de, E: Pairing> Deserialize<'de> for PoKOfSignatureG1Proof<E>
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<E: Pairing> Serialize for PoKOfSignatureG1Proof<E>
impl<E: Pairing> Serialize for PoKOfSignatureG1Proof<E>
Source§impl<E: Pairing> Valid for PoKOfSignatureG1Proof<E>
impl<E: Pairing> Valid for PoKOfSignatureG1Proof<E>
fn check(&self) -> Result<(), SerializationError>
fn batch_check<'a>(
batch: impl Iterator<Item = &'a Self> + Send,
) -> Result<(), SerializationError>where
Self: 'a,
impl<E: Eq + Pairing> Eq for PoKOfSignatureG1Proof<E>
impl<E: Pairing> StructuralPartialEq for PoKOfSignatureG1Proof<E>
Auto Trait Implementations§
impl<E> Freeze for PoKOfSignatureG1Proof<E>
impl<E> RefUnwindSafe for PoKOfSignatureG1Proof<E>
impl<E> Send for PoKOfSignatureG1Proof<E>
impl<E> Sync for PoKOfSignatureG1Proof<E>
impl<E> Unpin for PoKOfSignatureG1Proof<E>
impl<E> UnwindSafe for PoKOfSignatureG1Proof<E>where
<E as Pairing>::G1Affine: UnwindSafe,
<E as Pairing>::ScalarField: UnwindSafe + RefUnwindSafe,
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
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>
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