Creates and returns credential schema entity builder.
The purpose of credential schema builder is building of credential schema entity that
represents credential schema attributes set.
use indy_crypto::cl::issuer::Issuer;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("sex").unwrap();
credential_schema_builder.add_attr("name").unwrap();
let _credential_schema = credential_schema_builder.finalize().unwrap();
Creates and returns credential definition (public and private keys, correctness proof) entities.
credential_schema
- Credential schema entity.
support_revocation
- If true non revocation part of keys will be generated.
use indy_crypto::cl::issuer::Issuer;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("name").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 (_cred_pub_key, _cred_priv_key, _cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, true).unwrap();
Creates and returns revocation registry definition (public and private keys, accumulator and tails generator) entities.
credential_pub_key
- Credential public key entity.
max_cred_num
- Max credential number in generated registry.
issuance_by_default
- Type of issuance.
If true all indices are assumed to be issued and initial accumulator is calculated over all indices
If false nothing is issued initially accumulator is 1
use indy_crypto::cl::issuer::Issuer;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("name").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 (_cred_pub_key, _cred_priv_key, _cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, true).unwrap();
let (_rev_key_pub, _rev_key_priv, _rev_reg, _rev_tails_generator) = Issuer::new_revocation_registry_def(&_cred_pub_key, 5, false).unwrap();
Creates and returns credential values entity builder.
The purpose of credential values builder is building of credential values entity that
represents credential attributes values map.
use indy_crypto::cl::issuer::Issuer;
let mut credential_values_builder = Issuer::new_credential_values_builder().unwrap();
credential_values_builder.add_dec_known("sex", "5944657099558967239210949258394887428692050081607692519917050011144233115103").unwrap();
credential_values_builder.add_dec_known("name", "1139481716457488690172217916278103335").unwrap();
let _credential_values = credential_values_builder.finalize().unwrap();
Signs credential values with primary keys only.
prover_id
- Prover identifier.
blinded_credential_secrets
- Blinded credential secrets generated by Prover.
blinded_credential_secrets_correctness_proof
- Blinded credential secrets correctness proof.
credential_nonce
- Nonce used for verification of blinded_credential_secrets_correctness_proof.
credential_issuance_nonce
- Nonce used for creation of signature_correctness_proof.
credential_values
- Credential values to be signed.
credential_pub_key
- Credential public key.
credential_priv_key
- Credential private key.
use indy_crypto::cl::new_nonce;
use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::prover::Prover;
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());
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, _, 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 (_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();
Signs credential values with both primary and revocation keys.
prover_id
- Prover identifier.
blinded_credential_secrets
- Blinded credential secrets generated by Prover.
blinded_credential_secrets_correctness_proof
- Blinded credential secrets correctness proof.
credential_nonce
- Nonce used for verification of blinded_credential_secrets_correctness_proof.
credential_issuance_nonce
- Nonce used for creation of signature_correctness_proof.
credential_values
- Credential values to be signed.
credential_pub_key
- Credential public key.
credential_priv_key
- Credential private key.
rev_idx
- User index in revocation accumulator. Required for non-revocation credential_signature part generation.
max_cred_num
- Max credential number in generated registry.
rev_reg
- Revocation registry.
rev_key_priv
- Revocation registry private key.
rev_tails_accessor
- Revocation registry tails accessor.
use indy_crypto::cl::{new_nonce, SimpleTailsAccessor};
use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::prover::Prover;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("name").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 (cred_pub_key, cred_priv_key, cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, true).unwrap();
let max_cred_num = 5;
let (_rev_key_pub, rev_key_priv, mut rev_reg, mut rev_tails_generator) = Issuer::new_revocation_registry_def(&cred_pub_key, max_cred_num, false).unwrap();
let simple_tail_accessor = SimpleTailsAccessor::new(&mut rev_tails_generator).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());
credential_values_builder.add_dec_known("name", "1139481716457488690172217916278103335").unwrap();
let cred_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(&cred_pub_key, &cred_key_correctness_proof, &cred_values, &credential_nonce).unwrap();
let credential_issuance_nonce = new_nonce().unwrap();
let (_cred_signature, _signature_correctness_proof, _rev_reg_delta) =
Issuer::sign_credential_with_revoc("CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW",
&blinded_credential_secrets,
&blinded_credential_secrets_correctness_proof,
&credential_nonce,
&credential_issuance_nonce,
&cred_values,
&cred_pub_key,
&cred_priv_key,
1,
max_cred_num,
false,
&mut rev_reg,
&rev_key_priv,
&simple_tail_accessor).unwrap();
Revokes a credential by a rev_idx in a given revocation registry.
rev_reg
- Revocation registry.
max_cred_num
- Max credential number in revocation registry.
- rev_idx` - Index of the user in the revocation registry.
rev_tails_accessor
- Revocation registry tails accessor.
use indy_crypto::cl::{new_nonce, SimpleTailsAccessor};
use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::prover::Prover;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("name").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 (cred_pub_key, cred_priv_key, cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, true).unwrap();
let max_cred_num = 5;
let (_rev_key_pub, rev_key_priv, mut rev_reg, mut rev_tails_generator) = Issuer::new_revocation_registry_def(&cred_pub_key, max_cred_num, false).unwrap();
let simple_tail_accessor = SimpleTailsAccessor::new(&mut rev_tails_generator).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());
credential_values_builder.add_dec_known("name", "1139481716457488690172217916278103335").unwrap();
let cred_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(&cred_pub_key, &cred_key_correctness_proof, &cred_values, &credential_nonce).unwrap();
let credential_issuance_nonce = new_nonce().unwrap();
let rev_idx = 1;
let (_cred_signature, _signature_correctness_proof, _rev_reg_delta) =
Issuer::sign_credential_with_revoc("CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW",
&blinded_credential_secrets,
&blinded_credential_secrets_correctness_proof,
&credential_nonce,
&credential_issuance_nonce,
&cred_values,
&cred_pub_key,
&cred_priv_key,
rev_idx,
max_cred_num,
false,
&mut rev_reg,
&rev_key_priv,
&simple_tail_accessor).unwrap();
Issuer::revoke_credential(&mut rev_reg, max_cred_num, rev_idx, &simple_tail_accessor).unwrap();
Recovery a credential by a rev_idx in a given revocation registry
rev_reg
- Revocation registry.
max_cred_num
- Max credential number in revocation registry.
- rev_idx` - Index of the user in the revocation registry.
rev_tails_accessor
- Revocation registry tails accessor.
use indy_crypto::cl::{new_nonce, SimpleTailsAccessor};
use indy_crypto::cl::issuer::Issuer;
use indy_crypto::cl::prover::Prover;
let mut credential_schema_builder = Issuer::new_credential_schema_builder().unwrap();
credential_schema_builder.add_attr("name").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 (cred_pub_key, cred_priv_key, cred_key_correctness_proof) = Issuer::new_credential_def(&credential_schema, &non_credential_schema, true).unwrap();
let max_cred_num = 5;
let (_rev_key_pub, rev_key_priv, mut rev_reg, mut rev_tails_generator) = Issuer::new_revocation_registry_def(&cred_pub_key, max_cred_num, false).unwrap();
let simple_tail_accessor = SimpleTailsAccessor::new(&mut rev_tails_generator).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());
credential_values_builder.add_dec_known("name", "1139481716457488690172217916278103335").unwrap();
let cred_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(&cred_pub_key, &cred_key_correctness_proof, &cred_values, &credential_nonce).unwrap();
let credential_issuance_nonce = new_nonce().unwrap();
let rev_idx = 1;
let (_cred_signature, _signature_correctness_proof, _rev_reg_delta) =
Issuer::sign_credential_with_revoc("CnEDk9HrMnmiHXEV1WFgbVCRteYnPqsJwrTdcZaNhFVW",
&blinded_credential_secrets,
&blinded_credential_secrets_correctness_proof,
&credential_nonce,
&credential_issuance_nonce,
&cred_values,
&cred_pub_key,
&cred_priv_key,
rev_idx,
max_cred_num,
false,
&mut rev_reg,
&rev_key_priv,
&simple_tail_accessor).unwrap();
Issuer::revoke_credential(&mut rev_reg, max_cred_num, rev_idx, &simple_tail_accessor).unwrap();
Issuer::recovery_credential(&mut rev_reg, max_cred_num, rev_idx, &simple_tail_accessor).unwrap();