[][src]Struct indy_crypto::cl::verifier::ProofVerifier

pub struct ProofVerifier { /* fields omitted */ }

Methods

impl ProofVerifier
[src]

Add sub proof request to proof verifier. The order of sub-proofs is important: both Prover and Verifier should use the same order.

Arguments

  • proof_verifier - Proof verifier.
  • credential_schema - Credential schema.
  • credential_pub_key - Credential public key.
  • rev_reg_pub - Revocation registry public key.
  • sub_proof_request - Requested attributes and predicates instance pointer.

#Example

use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::verifier::Verifier;

let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("sex").unwrap();
let credential_schema = credential_schema_builder.finalize().unwrap();

let mut non_credential_schema_builder = Issuer::new_non_credential_schema_builder().unwrap();
non_credential_schema_builder.add_attr("master_secret").unwrap();
let non_credential_schema = non_credential_schema_builder.finalize().unwrap();

let (credential_pub_key, credential_priv_key, cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, false).unwrap();

let (credential_pub_key, _credential_priv_key, _credential_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, false).unwrap();

let mut sub_proof_request_builder = Verifier::new_sub_proof_request_builder().unwrap();
sub_proof_request_builder.add_revealed_attr("sex").unwrap();
let sub_proof_request = sub_proof_request_builder.finalize().unwrap();

let mut proof_verifier = Verifier::new_proof_verifier().unwrap();

proof_verifier.add_sub_proof_request(&sub_proof_request,
                                     &credential_schema,
                                     &non_credential_schema,
                                     &credential_pub_key,
                                     None,
                                     None).unwrap();

Verifies proof.

Arguments

  • proof_verifier - Proof verifier.
  • proof - Proof generated by Prover.
  • nonce - Nonce.

#Example

use indy_crypto::cl::new_nonce;
use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::prover::Prover;
use indy_crypto::cl::verifier::Verifier;

let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("sex").unwrap();
let credential_schema = credential_schema_builder.finalize().unwrap();

let mut non_credential_schema_builder = Issuer::new_non_credential_schema_builder().unwrap();
non_credential_schema_builder.add_attr("master_secret").unwrap();
let non_credential_schema = non_credential_schema_builder.finalize().unwrap();

let (credential_pub_key, credential_priv_key, cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, false).unwrap();

let master_secret = Prover::new_master_secret().unwrap();

let mut credential_values_builder = Issuer::new_credential_values_builder().unwrap();
credential_values_builder.add_value_hidden("master_secret", &master_secret.value().unwrap()).unwrap();
credential_values_builder.add_dec_known("sex", "5944657099558967239210949258394887428692050081607692519917050011144233115103").unwrap();
let credential_values = credential_values_builder.finalize().unwrap();

let credential_nonce = new_nonce().unwrap();
let (blinded_credential_secrets, credential_secrets_blinding_factors, blinded_credential_secrets_correctness_proof) =
    Prover::blind_credential_secrets(&credential_pub_key, &cred_key_correctness_proof, &credential_values, &credential_nonce).unwrap();

let credential_issuance_nonce = new_nonce().unwrap();

let (mut credential_signature, signature_correctness_proof) =
    Issuer::sign_credential("CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW",
                            &blinded_credential_secrets,
                            &blinded_credential_secrets_correctness_proof,
                            &credential_nonce,
                            &credential_issuance_nonce,
                            &credential_values,
                            &credential_pub_key,
                            &credential_priv_key).unwrap();

Prover::process_credential_signature(&mut credential_signature,
                                     &credential_values,
                                     &signature_correctness_proof,
                                     &credential_secrets_blinding_factors,
                                     &credential_pub_key,
                                     &credential_issuance_nonce,
                                     None, None, None).unwrap();

let mut sub_proof_request_builder = Verifier::new_sub_proof_request_builder().unwrap();
sub_proof_request_builder.add_revealed_attr("sex").unwrap();
let sub_proof_request = sub_proof_request_builder.finalize().unwrap();

let mut proof_builder = Prover::new_proof_builder().unwrap();
proof_builder.add_common_attribute("master_secret").unwrap();
proof_builder.add_sub_proof_request(&sub_proof_request,
                                    &credential_schema,
                                    &non_credential_schema,
                                    &credential_signature,
                                    &credential_values,
                                    &credential_pub_key,
                                    None,
                                    None).unwrap();

let proof_request_nonce = new_nonce().unwrap();
let proof = proof_builder.finalize(&proof_request_nonce).unwrap();

let mut proof_verifier = Verifier::new_proof_verifier().unwrap();

proof_verifier.add_sub_proof_request(&sub_proof_request,
                                     &credential_schema,
                                     &non_credential_schema,
                                     &credential_pub_key,
                                     None,
                                     None).unwrap();
assert!(proof_verifier.verify(&proof, &proof_request_nonce).unwrap());

Trait Implementations

impl Debug for ProofVerifier
[src]

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

impl<T, U> Into for T where
    U: From<T>, 
[src]

Performs the conversion.

impl<T> From for T
[src]

Performs the conversion.

impl<T, U> TryFrom for T where
    T: From<U>, 
[src]

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from)

Performs the conversion.

impl<T> Borrow for T where
    T: ?Sized
[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut for T where
    T: ?Sized
[src]

Mutably borrows from an owned value. Read more

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

🔬 This is a nightly-only experimental API. (try_from)

Performs the conversion.

impl<T> Any for T where
    T: 'static + ?Sized
[src]

🔬 This is a nightly-only experimental API. (get_type_id)

this method will likely be replaced by an associated static

Gets the TypeId of self. Read more

impl<T> Same for T

Should always be Self