Skip to content

Commit 4edac66

Browse files
committed
Examples for JWT Verifiable Presentation
Signed-off-by: Markus Sabadello <[email protected]>
1 parent aaa1b4c commit 4edac66

File tree

2 files changed

+59
-1
lines changed

2 files changed

+59
-1
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
This is a work-in-progress implementation of the [Verifiable Credentials](https://w3c.github.io/vc-data-model/) data model.
55

6-
Highly experimental, incomplete, and not ready for production use! Use at your own risk! Pull requests welcome.
6+
Not ready for production use! Use at your own risk! Pull requests welcome.
77

88
### Maven
99

@@ -26,6 +26,7 @@ Dependency:
2626

2727
* [examples-ldp.md](examples-ldp.md) - Examples of Verifiable Credentials with Linked Data Proofs
2828
* [examples-jwt.md](examples-jwt.md) - Examples of Verifiable Credentials with JSON Web Tokens
29+
* [examples-jwt-vp.md](examples-jwt-vp.md) - Examples of Verifiable Presentations with JSON Web Tokens
2930

3031
### About
3132

examples-jwt-vp.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
## Examples
2+
3+
Verifiable Credentials with JSON Web Tokens:
4+
5+
### Example Verifiable Presentation
6+
7+
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDo3OWU1ZDI1MC02YmQ4LTQ3NTMtYjZlMy00MmQ5MjdlMDlhYWEiLCJpc3MiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpYXQiOjE1NjE0NTA3ODMsInZwIjp7IkBjb250ZXh0IjpbImh0dHBzOi8vd3d3LnczLm9yZy8yMDE4L2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZVByZXNlbnRhdGlvbiJdLCJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6WyJleUpoYkdjaU9pSlNVekkxTmlKOS5leUpxZEdraU9pSjFjbTQ2ZFhWcFpEcGhPRGRpWkdaaU9DMWhOMlJtTFRSaVpEa3RZV1V3WkMxa09EZ3pNVE16TlRNNFptVWlMQ0p6ZFdJaU9pSmthV1E2YzI5Mk9qSXhkRVJCUzBORlVtZzVOWFZIWjB0aVNrNUlXWEFpTENKcGMzTWlPaUprYVdRNmMyOTJPakY1ZGxoaWJXZFFiMVZ0TkdSc05qWkVOMHRvZVVRaUxDSnVZbVlpT2pFMU5qQTNNVEUwTVRrc0ltVjRjQ0k2TVRVMk1EYzVOemd4T1N3aWRtTWlPbnNpUUdOdmJuUmxlSFFpT2xzaWFIUjBjSE02THk5M2QzY3Vkek11YjNKbkx6SXdNVGd2WTNKbFpHVnVkR2xoYkhNdmRqRWlMQ0pvZEhSd2N6b3ZMM1J5WVdacExtWnBMMk55WldSbGJuUnBZV3h6TDNZeElsMHNJblI1Y0dVaU9sc2lWbVZ5YVdacFlXSnNaVU55WldSbGJuUnBZV3dpTENKRWNtbDJaWEp6VEdsalpXNXpaVU55WldSbGJuUnBZV3dpWFN3aVkzSmxaR1Z1ZEdsaGJGTjFZbXBsWTNRaU9uc2laSEpwZG1WeWMweHBZMlZ1YzJVaU9uc2liR2xqWlc1elpVTnNZWE56SWpvaWRISjFZMnR6SW4xOWZYMC5aZEp4TTBrSmFrS0FmSkkyaDNEaHZmX0FIVWdDOC1OeVFScjJETW5sekN4SFp5VkVqaTBzNVNsOGNOeDZhUHd3akRhZ3AyS0hGeTZNOWVPTkhycnBkYjQ5QXVLZXR5SlpRVW9CNWFRZy1zQzVHTUhQVnllVHh6YXphRFd5c0VpQ1pTWGM2R2NpckxEbUhYVldNVWlkS0RsR2g4dmRVdHJIUjBheVZieHJYUS16S2FrZmx0YVJhd1E0T0lSUEotMGZzc29qU0RiUk82S25ySDZNUWJzbC1md1RSY1lubGloTklIcE5URXBUNjhEQTNRekhVMS1UQVgxeFkzSngydllvcmloRmYwMm1ubjVkM2dXNEd2MktzTmJOcGV3SUFtZkwtcC1hYk9GTm10MmNMeEZVU0xzZ2FFNXVwRHcyeEFHVGMzbEF4dmJKN0dtNGVhTDhTWFRRMkEiXX19.AzTG2TKVAYV7FsPdOt3j4VFIXHbyT_nr0S35oOV-naV0PtzWeknc4WfP2Vn-pTDtVOkcH_r7mVl92r2nny2mszKuCZjE6suFdJy92RsQD5fWZDtNgOxQ1RVEaxf1eVEX2jsTPoybMpRSSITLe-Plo3eNW__OROkyUkyd5AobtKGhRxIWjMYStK1ZfCpdMAKEA2ZJyUJbz6GJS2fR21-L4Cr6cXy5RyQRBiDA58CXhJNuZ7m6Nd_NM-OEiM1Jsa6sZUPVas44FF84ISAraqqN5FFWN6P6Gy0HWffX-Xgf2tvxE8I0jnZu2LpE-aPPa6z2cuiKCJtxhEQBLYf2kBKO4A
8+
9+
JWT Payload:
10+
11+
{
12+
"jti": "urn:uuid:79e5d250-6bd8-4753-b6e3-42d927e09aaa",
13+
"iss": "did:sov:21tDAKCERh95uGgKbJNHYp",
14+
"iat": 1561450783,
15+
"vp": {
16+
"@context": [
17+
"https://www.w3.org/2018/credentials/v1"
18+
],
19+
"type": [
20+
"VerifiablePresentation"
21+
],
22+
"verifiableCredential": [
23+
"eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJuYmYiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3RyYWZpLmZpL2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJEcml2ZXJzTGljZW5zZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiZHJpdmVyc0xpY2Vuc2UiOnsibGljZW5zZUNsYXNzIjoidHJ1Y2tzIn19fX0.ZdJxM0kJakKAfJI2h3Dhvf_AHUgC8-NyQRr2DMnlzCxHZyVEji0s5Sl8cNx6aPwwjDagp2KHFy6M9eONHrrpdb49AuKetyJZQUoB5aQg-sC5GMHPVyeTxzazaDWysEiCZSXc6GcirLDmHXVWMUidKDlGh8vdUtrHR0ayVbxrXQ-zKakfltaRawQ4OIRPJ-0fssojSDbRO6KnrH6MQbsl-fwTRcYnlihNIHpNTEpT68DA3QzHU1-TAX1xY3Jx2vYorihFf02mnn5d3gW4Gv2KsNbNpewIAmfL-p-abOFNmt2cLxFUSLsgaE5upDw2xAGTc3lAxvbJ7Gm4eaL8SXTQ2A"
24+
]
25+
}
26+
}
27+
28+
### Example code (signing)
29+
30+
VerifiableCredential verifiableCredential = new VerifiableCredential();
31+
verifiableCredential.getContext().add("https://trafi.fi/credentials/v1");
32+
verifiableCredential.getType().add("DriversLicenseCredential");
33+
verifiableCredential.setId("urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe");
34+
verifiableCredential.setIssuer("did:sov:1yvXbmgPoUm4dl66D7KhyD");
35+
verifiableCredential.setIssuanceDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-16T18:56:59Z"));
36+
verifiableCredential.setExpirationDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"));
37+
38+
verifiableCredential.setCredentialSubject("did:sov:21tDAKCERh95uGgKbJNHYp");
39+
LinkedHashMap<String, Object> jsonLdCredentialSubject = verifiableCredential.getJsonLdCredentialSubject();
40+
LinkedHashMap<String, Object> jsonLdDriversLicense = new LinkedHashMap<String, Object> ();
41+
jsonLdDriversLicense.put("licenseClass", "trucks");
42+
jsonLdCredentialSubject.put("driversLicense", jsonLdDriversLicense);
43+
44+
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromVerifiableCredential(verifiableCredential);
45+
46+
String jwtString1 = jwtVerifiableCredential.toJwt(AlgorithmIdentifiers.RSA_USING_SHA256, TestUtil.testRSAPrivateKey);
47+
System.out.println(jwtString1);
48+
49+
String jwtPayload1 = jwtVerifiableCredential.getPayload().toJson();
50+
System.out.println(jwtPayload1);
51+
52+
JwtVerifiablePresentation jwtVerifiablePresentation = JwtVerifiablePresentation.fromJwtVerifiableCredential(jwtVerifiableCredential);
53+
String jwtPayload2 = jwtVerifiablePresentation.getPayload().toJson();
54+
System.out.println(jwtPayload2);
55+
56+
String jwtString2 = jwtVerifiablePresentation.toJwt(AlgorithmIdentifiers.RSA_USING_SHA256, TestUtil.testRSAPrivateKey);
57+
System.out.println(jwtString2);

0 commit comments

Comments
 (0)