Skip to content

Commit c78fe8d

Browse files
committed
feat: Add vp2 converter methods
1 parent 393cca2 commit c78fe8d

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.danubetech.verifiablecredentials.VerifiableCredential;
55
import com.danubetech.verifiablecredentials.VerifiableCredentialV2;
66
import com.danubetech.verifiablecredentials.VerifiablePresentation;
7+
import com.danubetech.verifiablecredentials.VerifiablePresentationV2;
78
import com.danubetech.verifiablecredentials.jsonld.VerifiableCredentialKeywords;
89
import com.nimbusds.jwt.JWTClaimsSet;
910
import foundation.identity.jsonld.JsonLDKeywords;
@@ -237,4 +238,45 @@ public static JwtVerifiableCredentialV2 toJwtVerifiableCredentialV2(VerifiableCr
237238

238239
return toJwtVerifiableCredentialV2(verifiableCredential, null, false, false);
239240
}
241+
242+
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentation(VerifiablePresentationV2 verifiablePresentation, String aud) {
243+
244+
JWTClaimsSet.Builder jwtPayloadBuilder = new JWTClaimsSet.Builder();
245+
246+
VerifiablePresentationV2 payloadVerifiablePresentation = VerifiablePresentationV2.builder()
247+
.defaultContexts(false)
248+
.defaultTypes(false)
249+
.build();
250+
251+
JsonLDUtils.jsonLdAddAll(payloadVerifiablePresentation, verifiablePresentation.getJsonObject());
252+
253+
URI id = verifiablePresentation.getId();
254+
if (id != null) {
255+
jwtPayloadBuilder.jwtID(id.toString());
256+
JsonLDUtils.jsonLdRemove(payloadVerifiablePresentation, JsonLDKeywords.JSONLD_TERM_ID);
257+
}
258+
259+
URI holder = verifiablePresentation.getHolder();
260+
if (holder != null) {
261+
jwtPayloadBuilder.issuer(holder.toString());
262+
jwtPayloadBuilder.subject(holder.toString());
263+
JsonLDUtils.jsonLdRemove(payloadVerifiablePresentation, VerifiableCredentialKeywords.JSONLD_TERM_HOLDER);
264+
}
265+
266+
if (aud != null) {
267+
jwtPayloadBuilder.audience(aud);
268+
}
269+
270+
Map<String, Object> vpContent = new LinkedHashMap<>(payloadVerifiablePresentation.getJsonObject());
271+
jwtPayloadBuilder.claim(JwtKeywords.JWT_CLAIM_VP, vpContent);
272+
273+
JWTClaimsSet jwtPayload = jwtPayloadBuilder.build();
274+
275+
return new JwtVerifiablePresentationV2(jwtPayload, payloadVerifiablePresentation, null, null);
276+
}
277+
278+
public static JwtVerifiablePresentationV2 toJwtVerifiablePresentation(VerifiablePresentationV2 verifiablePresentation) {
279+
280+
return toJwtVerifiablePresentation(verifiablePresentation, null);
281+
}
240282
}

src/main/java/com/danubetech/verifiablecredentials/validation/Validation.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.danubetech.verifiablecredentials.VerifiableCredential;
44
import com.danubetech.verifiablecredentials.VerifiableCredentialV2;
55
import com.danubetech.verifiablecredentials.VerifiablePresentation;
6+
import com.danubetech.verifiablecredentials.VerifiablePresentationV2;
67
import com.danubetech.verifiablecredentials.credentialstatus.CredentialStatus;
78

89
import java.net.URI;
@@ -118,6 +119,21 @@ public static void validate(VerifiableCredentialV2 verifiableCredential) throws
118119
validateStatus(verifiableCredential);
119120
}
120121

122+
public static void validate(VerifiablePresentationV2 verifiablePresentation) throws IllegalStateException {
123+
124+
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
125+
126+
validateRun(() -> validateTrue(verifiablePresentation.getJsonObject() != null), "Bad or missing JSON object.");
127+
validateRun(() -> validateTrue(! verifiablePresentation.getContexts().isEmpty()), "Bad or missing '@context'.");
128+
validateRun(() -> validateUrl(verifiablePresentation.getContexts().get(0)), "@context must be a valid URI: " + verifiablePresentation.getContexts().get(0));
129+
validateRun(() -> validateTrue(VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0].equals(verifiablePresentation.getContexts().get(0))), "First value of @context must be " + VerifiableCredentialV2.DEFAULT_JSONLD_CONTEXTS[0] + ": " + verifiablePresentation.getContexts().get(0));
130+
validateRun(() -> { if (verifiablePresentation.getId() != null) validateUrl(verifiablePresentation.getId()); }, "'id' must be a valid URI.");
131+
132+
validateRun(() -> validateTrue(! verifiablePresentation.getTypes().isEmpty()), "Bad or missing 'type'.");
133+
validateRun(() -> validateTrue(verifiablePresentation.getTypes().contains(VerifiablePresentationV2.DEFAULT_JSONLD_TYPES[0])), "type must contain VerifiablePresentation: " + verifiablePresentation.getTypes());
134+
validateOneOfRuns(List.of(() -> validateTrue(verifiablePresentation.getVerifiableCredentialAsList() != null), () -> validateTrue(verifiablePresentation.getJwtVerifiableCredentialString() != null)), "Bad or missing 'verifiableCredential'.");
135+
}
136+
121137
private static void validateIssuer(VerifiableCredentialV2 verifiableCredential) throws IllegalStateException {
122138

123139
validateRun(() -> validateTrue(verifiableCredential.getIssuer() != null), "Bad or missing 'issuer'.");

0 commit comments

Comments
 (0)