Skip to content

Commit 3843326

Browse files
committed
Updated to match indy crypto
Signed-off-by: Michael Lodder <[email protected]>
1 parent f85f87d commit 3843326

File tree

10 files changed

+97
-503
lines changed

10 files changed

+97
-503
lines changed

libindy/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ path = "src/lib.rs"
2020
crate-type = ["staticlib","rlib", "dylib"]
2121

2222
[features]
23-
default = ["bn_openssl", "box_sodium", "sealedbox_sodium", "base58_rust_base58", "xsalsa20_sodium", "pair_amcl", "hash_openssl", "local_nodes_pool", "revocation_tests"]
24-
bn_openssl = ["openssl", "int_traits"]
23+
default = ["box_sodium", "sealedbox_sodium", "base58_rust_base58", "xsalsa20_sodium", "pair_amcl", "hash_openssl", "local_nodes_pool", "revocation_tests"]
2524
box_sodium = ["sodiumoxide"]
2625
sealedbox_sodium = ["sodiumoxide"]
2726
base58_rust_base58 = ["rust-base58"]
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM ubuntu:16.04
2+
LABEL maintainer="Michael Lodder <[email protected]>"
3+
4+
ENV SODIUM_LIB_DIR /home/indy_user/libsodium/lib
5+
ENV SODIUM_INCLUDE_DIR /home/indy_user/libsodium/include
6+
ENV PATH /home/indy_user/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
7+
8+
RUN DEBIAN_FRONTEND=noninteractive apt-get -qq update -y && apt-get -qq install -y sudo zip unzip cmake autoconf libtool curl wget python3 pkg-config libssl-dev libzmq3-dev 2>&1 > /dev/null
9+
RUN useradd -m -d /home/indy_user -s /bin/bash -p $(openssl passwd -1 "indy") indy_user
10+
RUN usermod -aG sudo indy_user
11+
12+
USER indy_user
13+
WORKDIR /home/indy_user
14+
15+
RUN wget -q https://github.com/jedisct1/libsodium/releases/download/1.0.12/libsodium-1.0.12.tar.gz
16+
RUN tar xf /home/indy_user/libsodium-1.0.12.tar.gz
17+
WORKDIR /home/indy_user/libsodium-1.0.12
18+
RUN ./autogen.sh
19+
RUN ./configure --prefix=/home/indy_user/libsodium
20+
RUN make
21+
RUN make install
22+
23+
WORKDIR /home/indy_user
24+
RUN rm -f libsodium-1.0.12.tar.gz
25+
RUN rm -rf libsodium-1.0.12
26+
RUN curl https://sh.rustup.rs -sSf > rustup-init.sh
27+
RUN chmod a+x rustup-init.sh
28+
RUN ./rustup-init.sh -y
29+
RUN rm -f rustup-init.sh
30+
RUN echo "libindy configured successful"
File renamed without changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/bin/bash
2+
3+
docker build -t libindy:latest -f Dockerfile.ubuntu1604 .
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
extern crate indy_crypto;
22

33
use self::indy_crypto::cl::{
4-
BlindedMasterSecret,
5-
BlindedMasterSecretCorrectnessProof,
6-
MasterSecretBlindingData,
4+
BlindedCredentialSecrets,
5+
BlindedCredentialSecretsCorrectnessProof,
6+
CredentialSecretsBlindingFactors,
77
Nonce
88
};
99
use self::indy_crypto::utils::json::{JsonDecodable, JsonEncodable};
@@ -12,8 +12,8 @@ use self::indy_crypto::utils::json::{JsonDecodable, JsonEncodable};
1212
pub struct CredentialRequest {
1313
pub prover_did: String,
1414
pub cred_def_id: String,
15-
pub blinded_ms: BlindedMasterSecret,
16-
pub blinded_ms_correctness_proof: BlindedMasterSecretCorrectnessProof,
15+
pub blinded_ms: BlindedCredentialSecrets,
16+
pub blinded_ms_correctness_proof: BlindedCredentialSecretsCorrectnessProof,
1717
pub nonce: Nonce,
1818
}
1919

@@ -23,11 +23,11 @@ impl<'a> JsonDecodable<'a> for CredentialRequest {}
2323

2424
#[derive(Debug, Serialize, Deserialize)]
2525
pub struct CredentialRequestMetadata {
26-
pub master_secret_blinding_data: MasterSecretBlindingData,
26+
pub master_secret_blinding_data: CredentialSecretsBlindingFactors,
2727
pub nonce: Nonce,
2828
pub master_secret_name: String
2929
}
3030

3131
impl JsonEncodable for CredentialRequestMetadata {}
3232

33-
impl<'a> JsonDecodable<'a> for CredentialRequestMetadata {}
33+
impl<'a> JsonDecodable<'a> for CredentialRequestMetadata {}

libindy/src/services/anoncreds/helpers.rs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use errors::common::CommonError;
55
use domain::credential::AttributeValues;
66
use domain::proof_request::{AttributeInfo, PredicateInfo};
77

8-
use self::indy_crypto::cl::{issuer, verifier, CredentialSchema, CredentialValues, SubProofRequest};
8+
use self::indy_crypto::cl::{issuer, verifier, CredentialSchema, NonCredentialSchema, MasterSecret, CredentialValues, SubProofRequest};
99

1010

1111
use std::collections::{HashSet, HashMap};
@@ -29,12 +29,26 @@ pub fn build_credential_schema(attrs: &HashSet<String>) -> Result<CredentialSche
2929
Ok(res)
3030
}
3131

32-
pub fn build_credential_values(credential_values: &HashMap<String, AttributeValues>) -> Result<CredentialValues, CommonError> {
32+
pub fn build_non_credential_schema() -> Result<NonCredentialSchema, CommonError> {
33+
trace!("build_non_credential_schema");
34+
35+
let mut non_credential_schema_builder = issuer::Issuer::new_non_credential_schema_builder()?;
36+
non_credential_schema_builder.add_attr("master_secret")?;
37+
let res = non_credential_schema_builder.finalize()?;
38+
39+
trace!("build_non_credential_schema <<< res: {:?}", res);
40+
Ok(res)
41+
}
42+
43+
pub fn build_credential_values(credential_values: &HashMap<String, AttributeValues>, master_secret: Option<&MasterSecret>) -> Result<CredentialValues, CommonError> {
3344
trace!("build_credential_values >>> credential_values: {:?}", credential_values);
3445

3546
let mut credential_values_builder = issuer::Issuer::new_credential_values_builder()?;
3647
for (attr, values) in credential_values {
37-
credential_values_builder.add_value(&attr_common_view(attr), &values.encoded)?;
48+
credential_values_builder.add_dec_known(&attr_common_view(attr), &values.encoded)?;
49+
}
50+
if let Some(ms) = master_secret {
51+
credential_values_builder.add_value_hidden("master_secret", &ms.value()?)?;
3852
}
3953

4054
let res = credential_values_builder.finalize()?;
@@ -74,4 +88,4 @@ pub fn parse_cred_rev_id(cred_rev_id: &str) -> Result<u32, CommonError> {
7488
trace!("parse_cred_rev_id <<< res: {:?}", res);
7589

7690
Ok(res)
77-
}
91+
}

libindy/src/services/anoncreds/issuer.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,10 @@ impl Issuer {
4242
trace!("new_credential_definition >>> issuer_did: {:?}, schema: {:?}, support_revocation: {:?}", issuer_did, schema, support_revocation);
4343

4444
let credential_schema = build_credential_schema(&schema.attr_names)?;
45+
let non_credential_schema = build_non_credential_schema()?;
4546

4647
let (credential_public_key, credential_private_key, credential_key_correctness_proof) =
47-
CryptoIssuer::new_credential_def(&credential_schema, support_revocation)?;
48+
CryptoIssuer::new_credential_def(&credential_schema, &non_credential_schema, support_revocation)?;
4849

4950
let credential_definition_value = CredentialDefinitionData {
5051
primary: credential_public_key.get_primary_key()?.clone()?,
@@ -87,7 +88,7 @@ impl Issuer {
8788
pub fn new_credential<RTA>(&self,
8889
cred_def: &CredentialDefinition,
8990
cred_priv_key: &CredentialPrivateKey,
90-
master_secret_blinding_nonce: &Nonce,
91+
cred_issuance_blinding_nonce: &Nonce,
9192
cred_request: &CredentialRequest,
9293
cred_values: &HashMap<String, AttributeValues>,
9394
rev_idx: Option<u32>,
@@ -97,11 +98,11 @@ impl Issuer {
9798
rev_tails_accessor: Option<&RTA>) -> Result<(CredentialSignature,
9899
SignatureCorrectnessProof,
99100
Option<RevocationRegistryDelta>), AnoncredsError> where RTA: RevocationTailsAccessor {
100-
trace!("new_credential >>> cred_def: {:?}, cred_priv_key: {:?}, master_secret_blinding_nonce: {:?}, cred_request: {:?},\
101+
trace!("new_credential >>> cred_def: {:?}, cred_priv_key: {:?}, cred_issuance_blinding_nonce: {:?}, cred_request: {:?},\
101102
cred_values: {:?}, rev_idx: {:?}, rev_reg_def: {:?}, rev_reg: {:?}, rev_key_priv: {:?}",
102-
cred_def, cred_priv_key, master_secret_blinding_nonce, cred_request, cred_values, rev_idx, rev_reg_def, rev_reg, rev_key_priv);
103+
cred_def, cred_priv_key, cred_issuance_blinding_nonce, cred_request, cred_values, rev_idx, rev_reg_def, rev_reg, rev_key_priv);
103104

104-
let credential_values = build_credential_values(&cred_values)?;
105+
let credential_values = build_credential_values(&cred_values, None)?;
105106
let credential_pub_key = CredentialPublicKey::build_from_parts(&cred_def.value.primary, cred_def.value.revocation.as_ref())?;
106107

107108
let (credential_signature, signature_correctness_proof, rev_reg_delta) =
@@ -119,7 +120,7 @@ impl Issuer {
119120
CryptoIssuer::sign_credential_with_revoc(&cred_request.prover_did,
120121
&cred_request.blinded_ms,
121122
&cred_request.blinded_ms_correctness_proof,
122-
master_secret_blinding_nonce,
123+
cred_issuance_blinding_nonce,
123124
&cred_request.nonce,
124125
&credential_values,
125126
&credential_pub_key,
@@ -135,7 +136,7 @@ impl Issuer {
135136
CryptoIssuer::sign_credential(&cred_request.prover_did,
136137
&cred_request.blinded_ms,
137138
&cred_request.blinded_ms_correctness_proof,
138-
master_secret_blinding_nonce,
139+
cred_issuance_blinding_nonce,
139140
&cred_request.nonce,
140141
&credential_values,
141142
&credential_pub_key,
@@ -177,4 +178,4 @@ impl Issuer {
177178

178179
Ok(rev_reg_delta)
179180
}
180-
}
181+
}

libindy/src/services/anoncreds/prover.rs

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ use errors::anoncreds::AnoncredsError;
2020
use services::anoncreds::helpers::*;
2121

2222
use 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;
3031
use self::indy_crypto::cl::prover::Prover as CryptoProver;
3132
use 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+
}

libindy/src/services/anoncreds/verifier.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ impl Verifier {
3131
full_proof, proof_req, schemas, cred_defs, rev_reg_defs, rev_regs);
3232

3333
let mut proof_verifier = CryptoVerifier::new_proof_verifier()?;
34+
let non_credential_schema = build_non_credential_schema()?;
3435

3536
for sub_proof_index in 0..full_proof.identifiers.len() {
3637
let identifier = full_proof.identifiers[sub_proof_index].clone();
@@ -62,6 +63,7 @@ impl Verifier {
6263

6364
proof_verifier.add_sub_proof_request(&sub_proof_request,
6465
&credential_schema,
66+
&non_credential_schema,
6567
&credential_pub_key,
6668
rev_reg_def.as_ref().map(|r_reg_def| &r_reg_def.value.public_keys.accum_key),
6769
rev_reg.as_ref().map(|r_reg| &r_reg.value))?;
@@ -111,4 +113,4 @@ impl Verifier {
111113

112114
Ok(predicates_for_credential)
113115
}
114-
}
116+
}

0 commit comments

Comments
 (0)