Skip to content

Commit db84d1e

Browse files
qyan-devHaoXuan40404
authored andcommitted
v1.2 clean part 2
1 parent 559f1df commit db84d1e

15 files changed

Lines changed: 336 additions & 286 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ subprojects {
1818

1919
repositories {
2020
mavenLocal()
21+
mavenCentral()
2122
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
2223
maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
23-
mavenCentral()
2424
}
2525

2626
clean {

demo/src/main/java/com/webank/wedpr/demo/CryptoDemo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/** Minimalist demo of WeDPR Crypto Tools. */
1010
public class CryptoDemo {
1111
public static void run(CryptoClient cryptoClient) throws Exception {
12-
System.out.println("\n*******\nCRYPTO TOOL RUN\n*******");
12+
System.out.println("\n*******\nCRYPTO DEMO RUN\n*******");
1313

1414
CryptoResult cryptoResult = cryptoClient.secp256k1GenKeyPair();
1515
String publicKey = cryptoResult.publicKey;

demo/src/main/java/com/webank/wedpr/demo/DemoMain.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
package com.webank.wedpr.demo;
44

55
import com.webank.wedpr.crypto.CryptoClient;
6-
import com.webank.wedpr.scd.ScdClient;
6+
import com.webank.wedpr.scd.IssuerClient;
7+
import com.webank.wedpr.scd.UserClient;
8+
import com.webank.wedpr.scd.VerifierClient;
79
import com.webank.wedpr.vcl.VclClient;
810

911
/** Demo Launcher. */
@@ -20,7 +22,9 @@ public static void main(String[] args) throws Exception {
2022
VclDemo.run(vclClient, 3, 4, 5);
2123
VclDemo.run(vclClient, -1, 4, 3);
2224

23-
ScdClient selectiveDisclosureClient = new ScdClient();
24-
ScdDemo.run(selectiveDisclosureClient);
25+
IssuerClient issuerClient = new IssuerClient();
26+
UserClient userClient = new UserClient();
27+
VerifierClient verifierClient = new VerifierClient();
28+
ScdDemo.run(issuerClient, userClient, verifierClient);
2529
}
2630
}

demo/src/main/java/com/webank/wedpr/demo/ScdDemo.java

Lines changed: 90 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -8,122 +8,128 @@
88
import java.util.*;
99

1010
/**
11-
* Minimalist demo of selective disclosure.
11+
* Minimalist demo of selective certificate disclosure (SCD).
1212
*
1313
* <p>For a better interactive demo, please try our Rust version at
1414
* https://github.com/WeBankBlockchain/WeDPR-Lab-Core
1515
*/
1616
public class ScdDemo {
17-
public static void run(ScdClient scdClient) throws Exception {
18-
System.out.println("\n*******\nSELECTIVE DISCLOSURE RUN\n*******");
19-
20-
// issuer make template
21-
ArrayList<String> attributes = new ArrayList<String>();
22-
attributes.add("name");
23-
attributes.add("age");
24-
attributes.add("gender");
25-
attributes.add("time");
26-
String encodeAttributeTemplate = scdClient.issuerMakeCertificateSchema(attributes);
27-
System.out.println("Encoded attributeTemplate = " + encodeAttributeTemplate);
28-
29-
IssuerResult issuerResult =
30-
scdClient.issuerMakeCertificateTemplate(encodeAttributeTemplate);
31-
32-
String credentialTemplate = issuerResult.certificateTemplate;
33-
String templateSecretKey = issuerResult.templatePrivateKey;
34-
System.out.println("Encoded credentialTemplate = " + credentialTemplate);
35-
System.out.println("Encoded templateSecretKey = " + templateSecretKey);
36-
37-
// User fill template
38-
Map<String, String> maps = new HashMap<String, String>();
39-
maps.put("name", "123");
40-
maps.put("age", "18");
41-
maps.put("gender", "1");
42-
maps.put("time", "12345");
43-
String credentialInfo = scdClient.userMakeAttributeDict(maps);
44-
UserResult userResult =
45-
scdClient.userFillCertificate(credentialInfo, credentialTemplate);
46-
47-
String signatureRequest = userResult.signCertificateRequest;
17+
private static final String NAME = "name";
18+
private static final String AGE = "age";
19+
private static final String GENDER = "gender";
20+
private static final String ISSUE_TIME = "issue_time";
21+
private static final String DEFAULT_USER_ID = "default_user_id";
22+
23+
public static void run(
24+
IssuerClient issuerClient, UserClient userClient, VerifierClient verifierClient)
25+
throws Exception {
26+
System.out.println("\n*******\nSCD DEMO RUN\n*******");
27+
28+
// An issuer defines the certificate schema and generates the certificate template.
29+
List<String> schema = Arrays.asList(NAME, AGE, GENDER, ISSUE_TIME);
30+
System.out.println("Encoded schema = " + schema);
31+
32+
IssuerResult issuerResult = issuerClient.makeCertificateTemplate(schema);
33+
34+
String certificateTemplate = issuerResult.certificateTemplate;
35+
String templatePrivateKey = issuerResult.templatePrivateKey;
36+
System.out.println("Encoded certificateTemplate = " + certificateTemplate);
37+
System.out.println("Encoded templatePrivateKey = " + templatePrivateKey);
38+
39+
// A user fills the certificate template and prepares a request for the issuer to sign.
40+
Map<String, String> certificateDataInput = new HashMap<>();
41+
// TODO: Add a utility function to convert any string to a decimal string.
42+
// Before this utility function is implemented, the attribute value can only be a decimal
43+
// string.
44+
certificateDataInput.put(NAME, "123");
45+
certificateDataInput.put(AGE, "19");
46+
certificateDataInput.put(GENDER, "1");
47+
certificateDataInput.put(ISSUE_TIME, "12345");
48+
String certificateData = userClient.encodeAttributeDict(certificateDataInput);
49+
UserResult userResult = userClient.fillCertificate(certificateData, certificateTemplate);
50+
51+
String signCertificateRequest = userResult.signCertificateRequest;
4852
String userPrivateKey = userResult.userPrivateKey;
49-
String credentialSecretsBlindingFactors = userResult.certificateSecretsBlindingFactors;
53+
String certificateSecretsBlindingFactors = userResult.certificateSecretsBlindingFactors;
5054
String userNonce = userResult.userNonce;
51-
System.out.println("Encoded signatureRequest = " + signatureRequest);
55+
System.out.println("Encoded signCertificateRequest = " + signCertificateRequest);
5256
System.out.println("Encoded userPrivateKey = " + userPrivateKey);
5357
System.out.println(
54-
"Encoded credentialSecretsBlindingFactors = " + credentialSecretsBlindingFactors);
58+
"Encoded certificateSecretsBlindingFactors = " + certificateSecretsBlindingFactors);
5559
System.out.println("Encoded userNonce = " + userNonce);
5660

57-
// Issuer sign user's request to generate credential
61+
// The issuer verifies the certificate signing request from the user and signs the certificate.
5862
issuerResult =
59-
scdClient.issuerSignCertificate(
60-
credentialTemplate, templateSecretKey, signatureRequest, "id1", userNonce);
61-
62-
String credentialSignature = issuerResult.certificateSignature;
63+
issuerClient.signCertificate(
64+
certificateTemplate,
65+
templatePrivateKey,
66+
signCertificateRequest,
67+
DEFAULT_USER_ID,
68+
userNonce);
69+
70+
String certificateSignature = issuerResult.certificateSignature;
6371
String issuerNonce = issuerResult.issuerNonce;
64-
System.out.println("Encoded credentialSignature = " + credentialSignature);
72+
System.out.println("Encoded certificateSignature = " + certificateSignature);
6573
System.out.println("Encoded issuerNonce = " + issuerNonce);
6674

67-
// User generate new credentialSignature
75+
// The user blinds the received certificateSignature to prevent the issuer to track the
76+
// certificate usage.
6877
userResult =
69-
scdClient.userBlindCertificateSignature(
70-
credentialSignature,
71-
credentialInfo,
72-
credentialTemplate,
78+
userClient.blindCertificateSignature(
79+
certificateSignature,
80+
certificateData,
81+
certificateTemplate,
7382
userPrivateKey,
74-
credentialSecretsBlindingFactors,
83+
certificateSecretsBlindingFactors,
7584
issuerNonce);
7685

77-
String credentialSignatureNew = userResult.certificateSignature;
78-
System.out.println("Encoded credentialSignatureNew = " + credentialSignatureNew);
86+
String blindedCertificateSignature = userResult.certificateSignature;
87+
System.out.println("Encoded blindedCertificateSignature = " + blindedCertificateSignature);
7988

80-
// Verifier set verification rules
81-
VerificationRuleSet verificationRuleSet = VerificationRuleSet.getDefaultInstance();
89+
// A verifier sets a verification rule to:
90+
// Check AGE > 18 and,
91+
VerificationRuleSet.Builder verificationRuleSetBuilder = VerificationRuleSet.newBuilder();
8292
Predicate predicate =
8393
Predicate.newBuilder()
84-
.setAttributeName("age")
94+
.setAttributeName(AGE)
8595
.setPredicateType(PredicateType.GT.name())
86-
.setPredicateValue(17)
96+
.setPredicateValue(18)
8797
.build();
88-
verificationRuleSet = verificationRuleSet.toBuilder().addAttributePredicate(predicate).build();
98+
verificationRuleSetBuilder.addAttributePredicate(predicate);
99+
// Reveal the ISSUE_TIME attribute.
100+
verificationRuleSetBuilder.addRevealedAttributeName(ISSUE_TIME);
89101

90-
predicate =
91-
Predicate.newBuilder()
92-
.setAttributeName("gender")
93-
.setPredicateType(PredicateType.EQ.name())
94-
.setPredicateValue(1)
95-
.build();
96-
verificationRuleSet = verificationRuleSet.toBuilder().addAttributePredicate(predicate).build();
102+
String encodedVerificationRuleSet =
103+
verifierClient.protoToEncodedString(verificationRuleSetBuilder.build());
104+
System.out.println("Encoded verificationRuleSet = " + encodedVerificationRuleSet);
97105

98-
String verificationRuleStr =
99-
ScdClient.protoToEncodedString(verificationRuleSet);
100-
System.out.println("Encoded verificationRuleStr = " + verificationRuleStr);
106+
String verificationNonce = verifierClient.getVerificationNonce().verificationNonce;
101107

102-
// User prove by verification rules
103-
String verificationNonce =
104-
scdClient.verifierGetVerificationNonce().verificationNonce;
108+
// The user proves the signed certificate data satisfying the verification rules and does not
109+
// reveal any extra data.
105110
userResult =
106-
scdClient.userProveSelectiveDisclosure(
107-
verificationRuleStr,
108-
credentialSignatureNew,
109-
credentialInfo,
110-
credentialTemplate,
111+
userClient.proveSelectiveDisclosure(
112+
encodedVerificationRuleSet,
113+
blindedCertificateSignature,
114+
certificateData,
115+
certificateTemplate,
111116
userPrivateKey,
112117
verificationNonce);
113118

114-
String verificationRequest = userResult.verifyRequest;
115-
System.out.println("Encoded verificationRequest = " + verificationRequest);
119+
String verifyRequest = userResult.verifyRequest;
120+
System.out.println("Encoded verifyRequest = " + verifyRequest);
116121

117-
// Verifier verify proof
122+
// The verifier verifies the required verification rule is satisfied and extracts the required
123+
// attribute.
124+
// This verification should be done before calling revealedAttributeDict.
118125
VerifierResult verifierResult =
119-
scdClient.verifierVerifySelectiveDisclosure(verificationRuleStr, verificationRequest);
120-
System.out.println("result = " + verifierResult.boolResult);
121-
122-
verifierResult =
123-
scdClient.verifierGetRevealedAttrsFromVerifyRequest(verificationRequest);
124-
String revealedAttributeDict = verifierResult.revealedAttributeDict;
125-
AttributeDict attributeDict =
126-
AttributeDict.parseFrom(Utils.stringToBytes(revealedAttributeDict));
127-
System.out.println("revealedAttributeDict =" + attributeDict);
126+
verifierClient.verifySelectiveDisclosure(encodedVerificationRuleSet, verifyRequest);
127+
System.out.println("Proof verification result = " + verifierResult.boolResult);
128+
129+
verifierResult = verifierClient.getRevealedAttributes(verifyRequest);
130+
String encodedRevealedCertificateData = verifierResult.revealedAttributeDict;
131+
AttributeDict revealedCertificateData =
132+
AttributeDict.parseFrom(Utils.stringToBytes(encodedRevealedCertificateData));
133+
System.out.println("revealedCertificateData =" + revealedCertificateData);
128134
}
129135
}

demo/src/main/java/com/webank/wedpr/demo/VclDemo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
public class VclDemo {
1515
public static void run(VclClient vclClient, long c1Value, long c2Value, long c3Value)
1616
throws Exception {
17-
System.out.println("\n*******\nVCL PROOF RUN\n*******");
17+
System.out.println("\n*******\nVCL DEMO RUN\n*******");
1818
System.out.println(
1919
"c1_value = " + c1Value + ", c2_value = " + c2Value + ", c3_value = " + c3Value + "\n");
2020

release_note.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.1.0
1+
v1.2.0
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright 2020 WeDPR Lab Project Authors. Licensed under Apache-2.0.
2+
3+
package com.webank.wedpr.scd;
4+
5+
import com.webank.wedpr.common.WedprException;
6+
import com.webank.wedpr.scd.proto.CertificateSchema;
7+
import java.util.List;
8+
9+
/**
10+
* Client class used by a SCD certificate issuer. This is the main interface class for Java apps
11+
* using SCD functions.
12+
*/
13+
public class IssuerClient extends ScdClient {
14+
/**
15+
* Makes a certificate template for users to fill data.
16+
*
17+
* @param schema the schema defining the certificate attribute name list.
18+
* @return IssuerResult containing data for certificateTemplate, templatePrivateKey.
19+
* @throws WedprException if any error occurred.
20+
*/
21+
public IssuerResult makeCertificateTemplate(List<String> schema) throws WedprException {
22+
return NativeInterface.issuerMakeCertificateTemplate(
23+
protoToEncodedString(
24+
CertificateSchema.newBuilder().addAllAttributeName(schema).build()))
25+
.expectNoError();
26+
}
27+
28+
/**
29+
* Signs a verified certificate from a user.
30+
*
31+
* @param certificateTemplate the encoded certificate template.
32+
* @param templatePrivateKey the encoded template private key.
33+
* @param signRequest the encoded certificate signing request from the user.
34+
* @param userId the encoded user id.
35+
* @param userNonce the encoded nonce from the user.
36+
* @return IssuerResult containing data for certificateSignature, issuerNonce.
37+
* @throws WedprException if any error occurred.
38+
*/
39+
public IssuerResult signCertificate(
40+
String certificateTemplate,
41+
String templatePrivateKey,
42+
String signRequest,
43+
String userId,
44+
String userNonce)
45+
throws WedprException {
46+
return NativeInterface.issuerSignCertificate(
47+
certificateTemplate, templatePrivateKey, signRequest, userId, userNonce)
48+
.expectNoError();
49+
}
50+
}

solution/scd/src/main/java/com/webank/wedpr/scd/IssuerResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import com.webank.wedpr.common.WedprResult;
77

88
/**
9-
* Result class used by selective disclosure client.
9+
* Result class used by a SCD certificate issuer.
1010
*
1111
* <p>This is an easy way to return multiple data from a single JNI interface.
1212
*/

0 commit comments

Comments
 (0)