code: async def verify(self, proofRequest: ProofRequest, proof: FullProof):
          
  
          if proofRequest.verifiableAttributes.keys() != proof.requestedProof.revealed_attrs.keys():
              raise ValueError('Received attributes ={} do not correspond to requested={}'.format(
                  proof.requestedProof.revealed_attrs.keys(), proofRequest.verifiableAttributes.keys()))
  
          if proofRequest.predicates.keys() != proof.requestedProof.predicates.keys():
              raise ValueError('Received predicates ={} do not correspond to requested={}'.format(
                  proof.requestedProof.predicates.keys(), proofRequest.predicates.keys()))
  
          TauList = []
          for (uuid, proofItem) in proof.proofs.items():
              if proofItem.proof.nonRevocProof:
                  TauList += await self._nonRevocVerifier.verifyNonRevocation(
                      proofRequest, proofItem.schema_seq_no, proof.aggregatedProof.cHash,
                      proofItem.proof.nonRevocProof)
              if proofItem.proof.primaryProof:
                  TauList += await self._primaryVerifier.verify(proofItem.schema_seq_no,
                                                                proof.aggregatedProof.cHash,
                                                                proofItem.proof.primaryProof)
  
          CHver = self._get_hash(proof.aggregatedProof.CList, self._prepare_collection(TauList),
                                 cmod.integer(proofRequest.nonce))
  
          return CHver == proof.aggregatedProof.cHash
docs: Verifies a proof from the prover.
  
          :param proofRequest: description of a proof to be presented (revealed
          attributes, predicates, timestamps for non-revocation)
          :param proof: a proof
          :return: True if verified successfully and false otherwise.