(
&self,
revealed_msgs: &BTreeMap<usize, E::ScalarField>,
challenge: &E::ScalarField,
pk: impl Into<PreparedPublicKeyG2<E>>,
params: impl Into<PreparedSignature
| 476 | } |
| 477 | |
| 478 | pub fn _verify( |
| 479 | &self, |
| 480 | revealed_msgs: &BTreeMap<usize, E::ScalarField>, |
| 481 | challenge: &E::ScalarField, |
| 482 | pk: impl Into<PreparedPublicKeyG2<E>>, |
| 483 | params: impl Into<PreparedSignatureParamsG1<E>>, |
| 484 | missing_responses: Option<BTreeMap<usize, E::ScalarField>>, |
| 485 | ) -> Result<(), BBSPlusError> { |
| 486 | let params = params.into(); |
| 487 | let g1 = params.g1; |
| 488 | let g2 = params.g2; |
| 489 | let h0 = params.h_0; |
| 490 | let h = params.h; |
| 491 | self.verify_except_pairings(revealed_msgs, challenge, g1, h0, h, missing_responses)?; |
| 492 | |
| 493 | // Verify the randomized signature |
| 494 | if !E::multi_pairing( |
| 495 | [ |
| 496 | E::G1Prepared::from(self.A_prime), |
| 497 | E::G1Prepared::from(-(self.A_bar.into_group())), |
| 498 | ], |
| 499 | [pk.into().0, g2], |
| 500 | ) |
| 501 | .is_zero() |
| 502 | { |
| 503 | return Err(BBSPlusError::PairingCheckFailed); |
| 504 | } |
| 505 | Ok(()) |
| 506 | } |
| 507 | |
| 508 | pub fn _verify_with_randomized_pairing_checker( |
| 509 | &self, |
no test coverage detected