Skip to content

Commit aaa1b4c

Browse files
committed
Support for JWT Verifiable Presentation.
Signed-off-by: Markus Sabadello <[email protected]>
1 parent 7936b9a commit aaa1b4c

File tree

3 files changed

+165
-12
lines changed

3 files changed

+165
-12
lines changed

src/main/java/com/danubetech/verifiablecredentials/VerifiableCredential.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,18 @@ private VerifiableCredential(LinkedHashMap<String, Object> jsonLdObject, boolean
5252

5353
public VerifiableCredential() {
5454

55-
ArrayList<Object> context = new ArrayList<Object> ();
56-
context.add(JSONLD_CONTEXT_CREDENTIALS);
55+
ArrayList<Object> contextList = new ArrayList<Object> ();
56+
contextList.add(JSONLD_CONTEXT_CREDENTIALS);
5757

58-
ArrayList<String> type = new ArrayList<String> ();
59-
type.add(JSONLD_TYPE_VERIFIABLE_CREDENTIAL);
58+
ArrayList<String> typeList = new ArrayList<String> ();
59+
typeList.add(JSONLD_TYPE_VERIFIABLE_CREDENTIAL);
6060

61-
LinkedHashMap<String, Object> credentialSubject = new LinkedHashMap<String, Object> ();
61+
LinkedHashMap<String, Object> credentialSubjectMap = new LinkedHashMap<String, Object> ();
6262

6363
this.jsonLdObject = new LinkedHashMap<String, Object> ();
64-
this.jsonLdObject.put(JsonLdConsts.CONTEXT, context);
65-
this.jsonLdObject.put(JSONLD_TERM_TYPE, type);
66-
this.jsonLdObject.put(JSONLD_TERM_CREDENTIAL_SUBJECT, credentialSubject);
64+
this.jsonLdObject.put(JsonLdConsts.CONTEXT, contextList);
65+
this.jsonLdObject.put(JSONLD_TERM_TYPE, typeList);
66+
this.jsonLdObject.put(JSONLD_TERM_CREDENTIAL_SUBJECT, credentialSubjectMap);
6767
}
6868

6969
public static VerifiableCredential fromJsonLdObject(LinkedHashMap<String, Object> jsonLdObject, boolean validate) {
@@ -78,7 +78,9 @@ public static VerifiableCredential fromJsonLdObject(LinkedHashMap<String, Object
7878

7979
public static VerifiableCredential fromJsonString(String jsonString, boolean validate) throws JsonParseException, IOException {
8080

81-
return fromJsonLdObject((LinkedHashMap<String, Object>) JsonUtils.fromString(jsonString), validate);
81+
LinkedHashMap<String, Object> jsonLdObject = (LinkedHashMap<String, Object>) JsonUtils.fromString(jsonString);
82+
83+
return fromJsonLdObject(jsonLdObject, validate);
8284
}
8385

8486
public static VerifiableCredential fromJsonString(String jsonString) throws JsonParseException, IOException {
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.danubetech.verifiablecredentials;
2+
3+
import java.io.IOException;
4+
import java.util.ArrayList;
5+
import java.util.LinkedHashMap;
6+
7+
import com.danubetech.verifiablecredentials.jwt.JwtVerifiableCredential;
8+
import com.fasterxml.jackson.core.JsonGenerationException;
9+
import com.fasterxml.jackson.core.JsonParseException;
10+
import com.github.jsonldjava.core.JsonLdConsts;
11+
import com.github.jsonldjava.utils.JsonUtils;
12+
13+
public class VerifiablePresentation {
14+
15+
public static final String JSONLD_CONTEXT_CREDENTIALS = "https://www.w3.org/2018/credentials/v1";
16+
public static final String JSONLD_CONTEXT_CREDENTIALS_NO_WWW = "https://w3.org/2018/credentials/v1";
17+
public static final String JSONLD_TYPE_VERIFIABLE_PRESENTATION = "VerifiablePresentation";
18+
19+
public static final String JSONLD_TERM_ID = "id";
20+
public static final String JSONLD_TERM_TYPE = "type";
21+
22+
public static final String JSONLD_TERM_VERIFIABLE_CREDENTIAL = "verifiableCredential";
23+
24+
private final LinkedHashMap<String, Object> jsonLdObject;
25+
26+
private VerifiablePresentation(LinkedHashMap<String, Object> jsonLdObject, boolean validate) {
27+
28+
this.jsonLdObject = jsonLdObject;
29+
30+
if (validate) this.validate();
31+
}
32+
33+
public VerifiablePresentation() {
34+
35+
ArrayList<Object> context = new ArrayList<Object> ();
36+
context.add(JSONLD_CONTEXT_CREDENTIALS);
37+
38+
ArrayList<String> type = new ArrayList<String> ();
39+
type.add(JSONLD_TYPE_VERIFIABLE_PRESENTATION);
40+
41+
ArrayList<String> verifiableCredential = new ArrayList<String> ();
42+
43+
this.jsonLdObject = new LinkedHashMap<String, Object> ();
44+
this.jsonLdObject.put(JsonLdConsts.CONTEXT, context);
45+
this.jsonLdObject.put(JSONLD_TERM_TYPE, type);
46+
this.jsonLdObject.put(JSONLD_TERM_VERIFIABLE_CREDENTIAL, verifiableCredential);
47+
}
48+
49+
public static VerifiablePresentation fromJsonLdObject(LinkedHashMap<String, Object> jsonLdObject, boolean validate) {
50+
51+
return new VerifiablePresentation(jsonLdObject, validate);
52+
}
53+
54+
public static VerifiablePresentation fromJsonString(String jsonString, boolean validate) throws JsonParseException, IOException {
55+
56+
LinkedHashMap<String, Object> jsonLdObject = (LinkedHashMap<String, Object>) JsonUtils.fromString(jsonString);
57+
58+
return fromJsonLdObject(jsonLdObject, validate);
59+
}
60+
61+
public static VerifiablePresentation fromJsonString(String jsonString) throws JsonParseException, IOException {
62+
63+
return fromJsonString(jsonString, true);
64+
}
65+
66+
public static VerifiablePresentation fromVerifiableCredential(VerifiableCredential verifiableCredential, boolean validate) throws JsonGenerationException, IOException {
67+
68+
LinkedHashMap<String, Object> jsonLdObject = new LinkedHashMap<String, Object> ();
69+
70+
ArrayList<Object> contextList = new ArrayList<Object> ();
71+
contextList.add(JSONLD_CONTEXT_CREDENTIALS);
72+
73+
ArrayList<String> typeList = new ArrayList<String> ();
74+
typeList.add(JSONLD_TYPE_VERIFIABLE_PRESENTATION);
75+
76+
ArrayList<String> verifiableCredentialList = new ArrayList<String> ();
77+
verifiableCredentialList.add(verifiableCredential.toJsonString());
78+
79+
jsonLdObject = new LinkedHashMap<String, Object> ();
80+
jsonLdObject.put(JsonLdConsts.CONTEXT, contextList);
81+
jsonLdObject.put(JSONLD_TERM_TYPE, typeList);
82+
jsonLdObject.put(JSONLD_TERM_VERIFIABLE_CREDENTIAL, verifiableCredentialList);
83+
84+
return fromJsonLdObject(jsonLdObject, validate);
85+
}
86+
87+
public static VerifiablePresentation fromVerifiableCredential(VerifiableCredential verifiableCredential) throws JsonParseException, IOException {
88+
89+
return fromVerifiableCredential(verifiableCredential, true);
90+
}
91+
92+
public static VerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential, boolean validate) {
93+
94+
LinkedHashMap<String, Object> jsonLdObject = new LinkedHashMap<String, Object> ();
95+
96+
ArrayList<Object> contextList = new ArrayList<Object> ();
97+
contextList.add(JSONLD_CONTEXT_CREDENTIALS);
98+
99+
ArrayList<String> typeList = new ArrayList<String> ();
100+
typeList.add(JSONLD_TYPE_VERIFIABLE_PRESENTATION);
101+
102+
ArrayList<String> verifiableCredentialList = new ArrayList<String> ();
103+
verifiableCredentialList.add(jwtVerifiableCredential.getCompactSerialization());
104+
105+
jsonLdObject = new LinkedHashMap<String, Object> ();
106+
jsonLdObject.put(JsonLdConsts.CONTEXT, contextList);
107+
jsonLdObject.put(JSONLD_TERM_TYPE, typeList);
108+
jsonLdObject.put(JSONLD_TERM_VERIFIABLE_CREDENTIAL, verifiableCredentialList);
109+
110+
return fromJsonLdObject(jsonLdObject, validate);
111+
}
112+
113+
public static VerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential) {
114+
115+
return fromJwtVerifiableCredential(jwtVerifiableCredential, true);
116+
}
117+
118+
public LinkedHashMap<String, Object> getJsonLdObject() {
119+
120+
return this.jsonLdObject;
121+
}
122+
123+
public String toPrettyJsonString() throws JsonGenerationException, IOException {
124+
125+
return JsonUtils.toPrettyString(this.jsonLdObject);
126+
}
127+
128+
public String toJsonString() throws JsonGenerationException, IOException {
129+
130+
return JsonUtils.toString(this.jsonLdObject);
131+
}
132+
133+
/*
134+
* Validation
135+
*/
136+
137+
public void validate() throws IllegalStateException {
138+
139+
}
140+
}

src/main/java/com/danubetech/verifiablecredentials/jwt/JwtVerifiablePresentation.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package com.danubetech.verifiablecredentials.jwt;
22

3+
import java.io.IOException;
34
import java.security.PrivateKey;
5+
import java.util.UUID;
46

57
import org.jose4j.jws.JsonWebSignature;
68
import org.jose4j.jwt.JwtClaims;
9+
import org.jose4j.jwt.MalformedClaimException;
710
import org.jose4j.lang.JoseException;
811

12+
import com.danubetech.verifiablecredentials.VerifiablePresentation;
13+
import com.fasterxml.jackson.core.JsonGenerationException;
14+
915
public class JwtVerifiablePresentation {
1016

1117
public static final String JWT_CLAIM_VP = "vp";
@@ -25,7 +31,7 @@ private JwtVerifiablePresentation(JwtClaims payload, JwtVerifiableCredential pay
2531
this.compactSerialization = compactSerialization;
2632
}
2733

28-
public static JwtVerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential, String aud) {
34+
public static JwtVerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential, String aud) throws JsonGenerationException, IOException, MalformedClaimException {
2935

3036
JwtVerifiableCredential payloadJwtVerifiableCredential = jwtVerifiableCredential;
3137

@@ -36,12 +42,17 @@ public static JwtVerifiablePresentation fromJwtVerifiableCredential(JwtVerifiabl
3642
payload.setAudience(aud);
3743
}
3844

39-
payload.setClaim(JWT_CLAIM_VP, payloadJwtVerifiableCredential.getCompactSerialization());
45+
VerifiablePresentation verifiablePresentation = VerifiablePresentation.fromJwtVerifiableCredential(payloadJwtVerifiableCredential);
46+
47+
payload.setJwtId("urn:uuid:" + UUID.randomUUID().toString());
48+
payload.setIssuer(jwtVerifiableCredential.getPayload().getSubject());
49+
payload.setIssuedAtToNow();
50+
payload.setClaim(JWT_CLAIM_VP, verifiablePresentation.getJsonLdObject());
4051

4152
return new JwtVerifiablePresentation(payload, payloadJwtVerifiableCredential, null);
4253
}
4354

44-
public static JwtVerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential) {
55+
public static JwtVerifiablePresentation fromJwtVerifiableCredential(JwtVerifiableCredential jwtVerifiableCredential) throws JsonGenerationException, IOException, MalformedClaimException {
4556

4657
return fromJwtVerifiableCredential(jwtVerifiableCredential, null);
4758
}

0 commit comments

Comments
 (0)