Skip to content

Commit 620820c

Browse files
committed
doc: Update examples.
Signed-off-by: Markus Sabadello <[email protected]>
1 parent 14c1d41 commit 620820c

File tree

2 files changed

+127
-96
lines changed

2 files changed

+127
-96
lines changed

examples-jwt.md

Lines changed: 69 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,59 +4,81 @@ Verifiable Credentials with JSON Web Tokens:
44

55
### Example Verifiable Credential
66

7-
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJuYmYiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3RyYWZpLmZpL2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJEcml2ZXJzTGljZW5zZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiZHJpdmVyc0xpY2Vuc2UiOnsibGljZW5zZUNsYXNzIjoidHJ1Y2tzIn19fX0.ZdJxM0kJakKAfJI2h3Dhvf_AHUgC8-NyQRr2DMnlzCxHZyVEji0s5Sl8cNx6aPwwjDagp2KHFy6M9eONHrrpdb49AuKetyJZQUoB5aQg-sC5GMHPVyeTxzazaDWysEiCZSXc6GcirLDmHXVWMUidKDlGh8vdUtrHR0ayVbxrXQ-zKakfltaRawQ4OIRPJ-0fssojSDbRO6KnrH6MQbsl-fwTRcYnlihNIHpNTEpT68DA3QzHU1-TAX1xY3Jx2vYorihFf02mnn5d3gW4Gv2KsNbNpewIAmfL-p-abOFNmt2cLxFUSLsgaE5upDw2xAGTc3lAxvbJ7Gm4eaL8SXTQ2A
7+
eyJhbGciOiJFZERTQSJ9.eyJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEiLCJuYmYiOjE1NjA3MTE0MTksImlzcyI6ImRpZDpleGFtcGxlOjc2ZTEyZWM3MTJlYmM2ZjFjMjIxZWJmZWIxZiIsImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy9leGFtcGxlcy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiVW5pdmVyc2l0eURlZ3JlZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiY29sbGVnZSI6IlRlc3QgVW5pdmVyc2l0eSIsImRlZ3JlZSI6eyJuYW1lIjoiQmFjaGVsb3Igb2YgU2NpZW5jZSBhbmQgQXJ0cyIsInR5cGUiOiJCYWNoZWxvckRlZ3JlZSJ9fX0sImp0aSI6Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIn0.GDpCOlxiZ2isBQn151i5Pj2e-kUgkNg_wzxCPAfxLxtdOz4fpDimg81mNw3LsnO0G56AOTvD4SuzSQyj1cP3Bg
88

99
JWT Payload:
1010

11-
{
12-
"jti": "urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe",
13-
"sub": "did:sov:21tDAKCERh95uGgKbJNHYp",
14-
"iss": "did:sov:1yvXbmgPoUm4dl66D7KhyD",
15-
"nbf": 1560711419,
16-
"exp": 1560797819,
17-
"vc": {
18-
"@context": ["https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1"],
19-
"type": ["VerifiableCredential", "DriversLicenseCredential"],
20-
"credentialSubject": {
21-
"driversLicense": {
22-
"licenseClass": "trucks"
23-
}
24-
}
25-
}
26-
}
11+
{
12+
"sub": "did:example:ebfeb1f712ebc6f1c276e12ec21",
13+
"nbf": 1560711419,
14+
"iss": "did:example:76e12ec712ebc6f1c221ebfeb1f",
15+
"exp": 1560797819,
16+
"vc": {
17+
"@context": [
18+
"https://www.w3.org/2018/credentials/v1",
19+
"https://www.w3.org/2018/credentials/examples/v1"
20+
],
21+
"type": [
22+
"VerifiableCredential",
23+
"UniversityDegreeCredential"
24+
],
25+
"credentialSubject": {
26+
"college": "Test University",
27+
"degree": {
28+
"name": "Bachelor of Science and Arts",
29+
"type": "BachelorDegree"
30+
}
31+
}
32+
},
33+
"jti": "http://example.edu/credentials/3732"
34+
}
2735

2836
### Example code (signing)
2937

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 jwtPayload = jwtVerifiableCredential.getPayload().toJson();
47-
System.out.println(jwtPayload);
48-
49-
String jwtString = jwtVerifiableCredential.toJwt(AlgorithmIdentifiers.RSA_USING_SHA256, TestUtil.testRSAPrivateKey);
50-
System.out.println(jwtString);
38+
Map<String, Object> claims = new LinkedHashMap<>();
39+
Map<String, Object> degree = new LinkedHashMap<String, Object>();
40+
degree.put("name", "Bachelor of Science and Arts");
41+
degree.put("type", "BachelorDegree");
42+
claims.put("college", "Test University");
43+
claims.put("degree", degree);
44+
45+
CredentialSubject credentialSubject = CredentialSubject.builder()
46+
.id(URI.create("did:example:ebfeb1f712ebc6f1c276e12ec21"))
47+
.claims(claims)
48+
.build();
49+
50+
VerifiableCredential verifiableCredential = VerifiableCredential.builder()
51+
.context(VerifiableCredentialContexts.JSONLD_CONTEXT_W3C_2018_CREDENTIALS_EXAMPLES_V1)
52+
.type("UniversityDegreeCredential")
53+
.id(URI.create("http://example.edu/credentials/3732"))
54+
.issuer(URI.create("did:example:76e12ec712ebc6f1c221ebfeb1f"))
55+
.issuanceDate(JsonLDUtils.stringToDate("2019-06-16T18:56:59Z"))
56+
.expirationDate(JsonLDUtils.stringToDate("2019-06-17T18:56:59Z"))
57+
.credentialSubject(credentialSubject)
58+
.build();
59+
60+
byte[] testEd25519PrivateKey = Hex.decodeHex("984b589e121040156838303f107e13150be4a80fc5088ccba0b0bdc9b1d89090de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580".toCharArray());
61+
62+
JwtVerifiableCredential jwtVerifiableCredential = ToJwtConverter.toJwtVerifiableCredential(verifiableCredential);
63+
64+
String jwtPayload = jwtVerifiableCredential.getPayload().toString();
65+
System.out.println(jwtPayload);
66+
67+
String jwtString = jwtVerifiableCredential.sign_Ed25519_EdDSA(testEd25519PrivateKey);
68+
System.out.println(jwtString);
5169

5270
### Example code (verifying)
5371

54-
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromJwt(...JWT..., AlgorithmIdentifiers.RSA_USING_SHA256, TestUtil.testRSAPublicKey);
55-
56-
String jwtPayload = jwtVerifiableCredential.getPayload().toJson();
57-
String jwtPayloadVerifiableCredential = jwtVerifiableCredential.getPayloadVerifiableCredential().toJsonString();
58-
System.out.println(jwtPayload);
59-
System.out.println(jwtPayloadVerifiableCredential);
60-
61-
VerifiableCredential verifiableCredential = jwtVerifiableCredential.toVerifiableCredential();
62-
System.out.println(verifiableCredential.toJsonString());
72+
byte[] testEd25519PublicKey = Hex.decodeHex("de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580".toCharArray());
73+
74+
String jwt = "eyJhbGciOiJFZERTQSJ9.eyJzdWIiOiJkaWQ6ZXhhbXBsZTplYmZlYjFmNzEyZWJjNmYxYzI3NmUxMmVjMjEiLCJuYmYiOjE1NjA3MTE0MTksImlzcyI6ImRpZDpleGFtcGxlOjc2ZTEyZWM3MTJlYmM2ZjFjMjIxZWJmZWIxZiIsImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy9leGFtcGxlcy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiVW5pdmVyc2l0eURlZ3JlZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiY29sbGVnZSI6IlRlc3QgVW5pdmVyc2l0eSIsImRlZ3JlZSI6eyJuYW1lIjoiQmFjaGVsb3Igb2YgU2NpZW5jZSBhbmQgQXJ0cyIsInR5cGUiOiJCYWNoZWxvckRlZ3JlZSJ9fX0sImp0aSI6Imh0dHA6Ly9leGFtcGxlLmVkdS9jcmVkZW50aWFscy8zNzMyIn0.GDpCOlxiZ2isBQn151i5Pj2e-kUgkNg_wzxCPAfxLxtdOz4fpDimg81mNw3LsnO0G56AOTvD4SuzSQyj1cP3Bg";
75+
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromCompactSerialization(jwt);
76+
System.out.println(jwtVerifiableCredential.verify_Ed25519_EdDSA(testEd25519PublicKey));
77+
78+
String jwtPayload = jwtVerifiableCredential.getPayload().toString();
79+
String jwtPayloadVerifiableCredential = jwtVerifiableCredential.getPayloadObject().toJson(true);
80+
System.out.println(jwtPayload);
81+
System.out.println(jwtPayloadVerifiableCredential);
82+
83+
VerifiableCredential verifiableCredential = FromJwtConverter.fromJwtVerifiableCredential(jwtVerifiableCredential);
84+
System.out.println(verifiableCredential.toJson(true));

examples-ldp.md

Lines changed: 58 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,65 +4,74 @@ Verifiable Credentials with Linked Data Proofs:
44

55
### Example Verifiable Credential
66

7-
{
8-
"@context": ["https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1"],
9-
"type": ["VerifiableCredential", "DriversLicenseCredential"],
10-
"credentialSubject": {
11-
"id": "did:sov:21tDAKCERh95uGgKbJNHYp",
12-
"driversLicense": {
13-
"licenseClass": "trucks"
14-
}
15-
},
16-
"id": "urn:uuid:54ac93ea-6db3-4e7f-9ba7-7bb5d81c7e7e",
17-
"issuer": "did:sov:1yvXbmgPoUm4dl66D7KhyD",
18-
"issuanceDate": "2019-06-18T07:43:03Z",
19-
"proof": {
20-
"type": "RsaSignature2018",
21-
"creator": "did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1",
22-
"created": "2018-01-01T21:19:10Z",
23-
"domain": null,
24-
"nonce": "c0ae1c8e-c7e7-469f-b252-86e6a0e7387e",
25-
"signatureValue": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..XiAK8PoseWt2KygoYCKjlGQyzhrpOoDrWpM2qI2dqQPZbCykyWkH6oHBx2uUhZImfQAY_Qf9rICFSF0L7BhrFMc5Jca9mdzA9jS-S3w1CcX4L-6OVykPGZC7WiPnoboHQiX517F-o-1kjV5B6zUc-kLKH4fO5HPiKkEJoY2QCRKivbr4K5sMbPhveZEGwqKwI7RLDKxXJgvdiLzJDb3wVGV0Ed3IKiAuBdT6d53n1nB3NKoCsGZeiiTCjo3QlT-VuWtc-YRIFAeRnNTKEmQxexiw2Rn5piFOtmiKgrlDSxJrOWkfNaPZq2esDsAW0-lAQqdFJf8_eURfs8SeLA5c1A"
26-
}
27-
}
7+
{
8+
"@context" : [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1" ],
9+
"type" : [ "VerifiableCredential", "UniversityDegreeCredential" ],
10+
"id" : "http://example.edu/credentials/3732",
11+
"issuer" : "did:example:76e12ec712ebc6f1c221ebfeb1f",
12+
"issuanceDate" : "2019-06-16T18:56:59Z",
13+
"expirationDate" : "2019-06-17T18:56:59Z",
14+
"credentialSubject" : {
15+
"id" : "did:example:ebfeb1f712ebc6f1c276e12ec21",
16+
"college" : "Test University",
17+
"degree" : {
18+
"name" : "Bachelor of Science and Arts",
19+
"type" : "BachelorDegree"
20+
}
21+
},
22+
"proof" : {
23+
"type" : "Ed25519Signature2018",
24+
"created" : "2020-10-15T09:44:25Z",
25+
"domain" : "example.com",
26+
"nonce" : "343s$FSFDa-",
27+
"proofPurpose" : "assertionMethod",
28+
"verificationMethod" : "did:example:76e12ec712ebc6f1c221ebfeb1f#keys-1",
29+
"jws" : "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJFZERTQSJ9..yJbi7RlKaNTNf3lhaOXUotKUNBg9N4llcD7--QRFYid_WjRcAovU-qOqtlVWngL_6vbjZWeBCRG-fv2Q9o4_CQ"
30+
}
31+
}
32+
33+
Process finished with exit code 0
2834

2935
### Example code (signing)
3036

31-
VerifiableCredential verifiableCredential = new VerifiableCredential();
32-
verifiableCredential.getContext().add("https://trafi.fi/credentials/v1");
33-
verifiableCredential.getType().add("DriversLicenseCredential");
34-
verifiableCredential.setId("urn:uuid:" + UUID.randomUUID());
35-
verifiableCredential.setIssuer("did:sov:1yvXbmgPoUm4dl66D7KhyD");
36-
verifiableCredential.setIssuanceDate(new Date());
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);
37+
Map<String, Object> claims = new LinkedHashMap<>();
38+
Map<String, Object> degree = new LinkedHashMap<String, Object>();
39+
degree.put("name", "Bachelor of Science and Arts");
40+
degree.put("type", "BachelorDegree");
41+
claims.put("college", "Test University");
42+
claims.put("degree", degree);
4343

44-
byte[] testEd25519PrivateKey = Hex.decodeHex("984b589e121040156838303f107e13150be4a80fc5088ccba0b0bdc9b1d89090de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580".toCharArray());
44+
CredentialSubject credentialSubject = CredentialSubject.builder()
45+
.id(URI.create("did:example:ebfeb1f712ebc6f1c276e12ec21"))
46+
.claims(claims)
47+
.build();
4548

46-
JsonLDObject jsonLdObject = JsonLDObject.fromJson(new FileReader("input.jsonld"));
47-
String verificationMethod = "https://example.com/jdoe/keys/1";
48-
String domain = "example.com";
49-
String nonce = null;
49+
VerifiableCredential verifiableCredential = VerifiableCredential.builder()
50+
.context(VerifiableCredentialContexts.JSONLD_CONTEXT_W3C_2018_CREDENTIALS_EXAMPLES_V1)
51+
.type("UniversityDegreeCredential")
52+
.id(URI.create("http://example.edu/credentials/3732"))
53+
.issuer(URI.create("did:example:76e12ec712ebc6f1c221ebfeb1f"))
54+
.issuanceDate(JsonLDUtils.stringToDate("2019-06-16T18:56:59Z"))
55+
.expirationDate(JsonLDUtils.stringToDate("2019-06-17T18:56:59Z"))
56+
.credentialSubject(credentialSubject)
57+
.build();
58+
59+
byte[] testEd25519PrivateKey = Hex.decodeHex("984b589e121040156838303f107e13150be4a80fc5088ccba0b0bdc9b1d89090de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580".toCharArray());
5060

5161
Ed25519Signature2018LdSigner signer = new Ed25519Signature2018LdSigner(testEd25519PrivateKey);
5262
signer.setCreated(new Date());
5363
signer.setProofPurpose(LDSecurityKeywords.JSONLD_TERM_ASSERTIONMETHOD);
54-
signer.setVerificationMethod(verificationMethod);
55-
signer.setDomain(domain);
56-
signer.setNonce(nonce);
57-
LdProof ldProof = signer.sign(jsonLdObject);
64+
signer.setVerificationMethod(URI.create("did:example:76e12ec712ebc6f1c221ebfeb1f#keys-1"));
65+
signer.setDomain("example.com");
66+
signer.setNonce("343s$FSFDa-");
67+
LdProof ldProof = signer.sign(verifiableCredential);
5868

59-
System.out.println(ldProof.toJson(true));
69+
System.out.println(verifiableCredential.toJson(true));
6070

6171
### Example code (verifying)
6272

63-
LinkedHashMap<String, Object> jsonLdObject = (LinkedHashMap<String, Object>) JsonUtils.fromString(...JSON-LD...);
64-
VerifiableCredential verifiableCredential = VerifiableCredential.fromJsonLdObject(jsonLdObject);
65-
66-
RsaSignature2018LdValidator validator = new RsaSignature2018LdValidator(TestUtil.testRSAPublicKey);
67-
68-
System.out.println(validator.validate(verifiableCredential.getJsonLdObject()));
73+
byte[] testEd25519PublicKey = Hex.decodeHex("de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580".toCharArray());
74+
75+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new FileReader("input.jsonld"));
76+
Ed25519Signature2018LdVerifier verifier = new Ed25519Signature2018LdVerifier(testEd25519PublicKey);
77+
System.out.println(verifier.verify(verifiableCredential));

0 commit comments

Comments
 (0)