@@ -20,13 +20,14 @@ use errors::anoncreds::AnoncredsError;
2020use services:: anoncreds:: helpers:: * ;
2121
2222use self :: indy_crypto:: cl:: {
23- BlindedMasterSecret ,
24- BlindedMasterSecretCorrectnessProof ,
23+ BlindedCredentialSecrets ,
24+ BlindedCredentialSecretsCorrectnessProof ,
2525 CredentialPublicKey ,
2626 MasterSecret ,
27- MasterSecretBlindingData ,
27+ CredentialSecretsBlindingFactors ,
2828 SubProofRequest
2929} ;
30+ use self :: indy_crypto:: cl:: issuer:: Issuer as CryptoIssuer ;
3031use self :: indy_crypto:: cl:: prover:: Prover as CryptoProver ;
3132use self :: indy_crypto:: cl:: verifier:: Verifier as CryptoVerifier ;
3233
@@ -53,24 +54,27 @@ impl Prover {
5354 pub fn new_credential_request ( & self ,
5455 cred_def : & CredentialDefinition ,
5556 master_secret : & MasterSecret ,
56- credential_offer : & CredentialOffer ) -> Result < ( BlindedMasterSecret ,
57- MasterSecretBlindingData ,
58- BlindedMasterSecretCorrectnessProof ) , CommonError > {
57+ credential_offer : & CredentialOffer ) -> Result < ( BlindedCredentialSecrets ,
58+ CredentialSecretsBlindingFactors ,
59+ BlindedCredentialSecretsCorrectnessProof ) , CommonError > {
5960 trace ! ( "new_credential_request >>> cred_def: {:?}, master_secret: {:?}, credential_offer: {:?}" ,
6061 cred_def, master_secret, credential_offer) ;
6162
6263 let credential_pub_key = CredentialPublicKey :: build_from_parts ( & cred_def. value . primary , cred_def. value . revocation . as_ref ( ) ) ?;
64+ let mut credential_values_builder = CryptoIssuer :: new_credential_values_builder ( ) ?;
65+ credential_values_builder. add_value_hidden ( "master_secret" , & master_secret. value ( ) ?) ?;
66+ let cred_values = credential_values_builder. finalize ( ) ?;
6367
64- let ( blinded_ms , master_secret_blinding_data , blinded_ms_correctness_proof ) =
65- CryptoProver :: blind_master_secret ( & credential_pub_key,
66- & credential_offer. key_correctness_proof ,
67- & master_secret ,
68- & credential_offer. nonce ) ?;
68+ let ( blinded_credential_secrets , credential_secrets_blinding_factors , blinded_credential_secrets_correctness_proof ) =
69+ CryptoProver :: blind_credential_secrets ( & credential_pub_key,
70+ & credential_offer. key_correctness_proof ,
71+ & cred_values ,
72+ & credential_offer. nonce ) ?;
6973
70- trace ! ( "new_credential_request <<< blinded_ms : {:?}, master_secret_blinding_data : {:?}, blinded_ms_correctness_proof : {:?}" ,
71- blinded_ms , master_secret_blinding_data , blinded_ms_correctness_proof ) ;
74+ trace ! ( "new_credential_request <<< blinded_credential_secrets : {:?}, credential_secrets_blinding_factors : {:?}, blinded_credential_secrets_correctness_proof : {:?}" ,
75+ blinded_credential_secrets , credential_secrets_blinding_factors , blinded_credential_secrets_correctness_proof ) ;
7276
73- Ok ( ( blinded_ms , master_secret_blinding_data , blinded_ms_correctness_proof ) )
77+ Ok ( ( blinded_credential_secrets , credential_secrets_blinding_factors , blinded_credential_secrets_correctness_proof ) )
7478 }
7579
7680 pub fn process_credential ( & self ,
@@ -83,13 +87,12 @@ impl Prover {
8387 credential, cred_request_metadata, master_secret, cred_def, rev_reg_def) ;
8488
8589 let credential_pub_key = CredentialPublicKey :: build_from_parts ( & cred_def. value . primary , cred_def. value . revocation . as_ref ( ) ) ?;
86- let credential_values = build_credential_values ( & credential. values ) ?;
90+ let credential_values = build_credential_values ( & credential. values , Some ( master_secret ) ) ?;
8791
8892 CryptoProver :: process_credential_signature ( & mut credential. signature ,
8993 & credential_values,
9094 & credential. signature_correctness_proof ,
9195 & cred_request_metadata. master_secret_blinding_data ,
92- & master_secret,
9396 & credential_pub_key,
9497 & cred_request_metadata. nonce ,
9598 rev_reg_def. as_ref ( ) . map ( |r_reg_def| & r_reg_def. value . public_keys . accum_key ) ,
@@ -161,6 +164,7 @@ impl Prover {
161164 credentials, proof_req, requested_credentials, master_secret, schemas, cred_defs, rev_states) ;
162165
163166 let mut proof_builder = CryptoProver :: new_proof_builder ( ) ?;
167+ proof_builder. add_common_attribute ( "master_secret" ) ?;
164168
165169 let mut identifiers: Vec < Identifier > = Vec :: new ( ) ;
166170
@@ -194,11 +198,14 @@ impl Prover {
194198 let credential_pub_key = CredentialPublicKey :: build_from_parts ( & cred_def. value . primary , cred_def. value . revocation . as_ref ( ) ) ?;
195199
196200 let credential_schema = build_credential_schema ( & schema. attr_names ) ?;
197- let credential_values = build_credential_values ( & credential. values ) ?;
201+ let non_credential_schema = build_non_credential_schema ( ) ?;
202+ let credential_values = build_credential_values ( & credential. values , Some ( master_secret) ) ?;
203+
198204 let sub_proof_request = Prover :: _build_sub_proof_request ( req_attrs_for_cred, req_predicates_for_cred) ?;
199205
200206 proof_builder. add_sub_proof_request ( & sub_proof_request,
201207 & credential_schema,
208+ & non_credential_schema,
202209 & credential. signature ,
203210 & credential_values,
204211 & credential_pub_key,
@@ -221,7 +228,7 @@ impl Prover {
221228 sub_proof_index += 1 ;
222229 }
223230
224- let proof = proof_builder. finalize ( & proof_req. nonce , & master_secret ) ?;
231+ let proof = proof_builder. finalize ( & proof_req. nonce ) ?;
225232
226233 let full_proof = Proof {
227234 proof,
@@ -439,4 +446,4 @@ impl Prover {
439446
440447 Ok ( sub_proof_request)
441448 }
442- }
449+ }
0 commit comments