MCPcopy Create free account
hub / github.com/docknetwork/crypto / verify_common

Method verify_common

kvac/src/bbs_sharp/proof.rs:547–606  ·  view source on GitHub ↗

Verify Schnorr proofs and proof of knowledge of public key if designated verifier proof

(
        &self,
        revealed_msgs: &BTreeMap<usize, G::ScalarField>,
        challenge: &G::ScalarField,
        params: &MACParams<G>,
        verifier_pub_key: Option<&G>,
    )

Source from the content-addressed store, hash-verified

545
546 /// Verify Schnorr proofs and proof of knowledge of public key if designated verifier proof
547 pub fn verify_common(
548 &self,
549 revealed_msgs: &BTreeMap<usize, G::ScalarField>,
550 challenge: &G::ScalarField,
551 params: &MACParams<G>,
552 verifier_pub_key: Option<&G>,
553 ) -> Result<(), KVACError> {
554 // Adjust challenge if designated verifier proof provided
555 let chal = if let Some(dvp) = &self.designated_verifier_pk_proof {
556 if let Some(vpk) = verifier_pub_key {
557 dvp.verify(vpk, &params.g_tilde)?;
558 *challenge - dvp.challenge
559 } else {
560 return Err(KVACError::MissingVerifierPubKeyForDesignatedVerifierProof);
561 }
562 } else {
563 *challenge
564 };
565 if !self
566 .sc_B_bar
567 .verify(&self.B_bar, &self.A_hat, &self.D, &chal)
568 {
569 return Err(KVACError::InvalidSchnorrProof);
570 }
571 let mut bases = Vec::with_capacity(2 + params.g_vec.len() - revealed_msgs.len());
572 let mut bases_revealed = Vec::with_capacity(revealed_msgs.len());
573 let mut exponents = Vec::with_capacity(revealed_msgs.len());
574 for i in 0..params.g_vec.len() {
575 if revealed_msgs.contains_key(&i) {
576 let message = revealed_msgs.get(&i).unwrap();
577 bases_revealed.push(params.g_vec[i]);
578 exponents.push(*message);
579 } else {
580 bases.push(params.g_vec[i]);
581 }
582 }
583 bases.push(self.D);
584 let y = match self.hw_sig_type {
585 HardwareSignatureType::Schnorr => {
586 bases.push(params.g);
587 -(G::Group::msm_unchecked(&bases_revealed, &exponents)
588 + params.g_0
589 + self.blinded_pk)
590 }
591 HardwareSignatureType::Ecdsa => {
592 // As described in the paper
593 // let F = (G::Group::msm_unchecked(&bases_revealed, &exponents) + params.g_0).into_affine();
594 // bases.push(F);
595 // self.blinded_pk.into_group().neg()
596
597 // An optimized approach with other benefits. See more details in comments in the proof generation code
598 bases.push(self.blinded_pk);
599 -(G::Group::msm_unchecked(&bases_revealed, &exponents) + params.g_0)
600 }
601 };
602
603 self.sc_resp_msgs
604 .is_valid(&bases, &y.into(), &self.t_msgs, &chal)?;

Calls 4

getMethod · 0.80
verifyMethod · 0.45
lenMethod · 0.45
is_validMethod · 0.45