Skip to content

Commit 9be3a46

Browse files
committed
Update W3C "credentials" context URL
1 parent ff19539 commit 9be3a46

File tree

9 files changed

+58
-30
lines changed

9 files changed

+58
-30
lines changed

examples-jwt.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Verifiable Credentials with JSON Web Tokens:
44

55
### Example Verifiable Credential
66

7-
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJpYXQiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93M2lkLm9yZy9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vdHJhZmkuZmkvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkRyaXZlcnNMaWNlbnNlQ3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJkcml2ZXJzTGljZW5zZSI6eyJsaWNlbnNlQ2xhc3MiOiJ0cnVja3MifX19fQ.sBLdUmYcys7ewHG_4iXGwPH3oayKC8qJmHqLbaKrlJhgPPxYGayUM7JD_HlS0GWaudTMaQ5nK2Dkvwka0PuzoFdJemKdy_ua8Qobe_h6BLdtiCV_3063D_KNyiGu7SBhfemL0lcaLo6rCKcPrd5ZdSi0_vfAXH1ZlMS-oBYpdXWompbY87-H1H-ARW0aicN6YofMzewwKKrgPLsNih603hgzJj63M1HbbIiKjMMzGNwGFn96vUQ-ZC24O-i_Fgl4BWTK2a9bIcq4zzzUfQ7TxnI9f0Y08O5hxBZq71ZQtDfebkEvOv-XL73L_sw7GMXBE_j-mcif8OehkHOnesvXBQ
7+
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJpYXQiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3RyYWZpLmZpL2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJEcml2ZXJzTGljZW5zZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiZHJpdmVyc0xpY2Vuc2UiOnsibGljZW5zZUNsYXNzIjoidHJ1Y2tzIn19fX0.FAuGkiVhfW2-9vmijXzcBoVaB4ygm28hcE9J5N6yZbPPNR_dcjhFOPDP3n3scHLNQ2rk4CQD6sOGA2p7FJfSlZZ4JnNkLmkBfPkzeXzn6O7gNRIatm7a7vJwJyYuvdA4GlbF6zAJqULT1nGO5DDEb52AY5-02vgJU5cPBG7sDljsw8zq_hmeXSMFVEw5A68GIh2_Wwefqhuy96aPdM6Rf69zPboxrLpPuq-LfS0cyOt4Jk27kqvZCl8xTrwA41iJGc3l2Rb0nA9jE11ppxb1JfrMbU3U4Nj50Z7mtIgtEYzembsw1sfCIZeTqjL-jlJku6b4Dofd_Qq-nOuj4HJ8TA
88

99
JWT Payload:
1010

@@ -15,7 +15,7 @@ JWT Payload:
1515
"iat": 1560711419,
1616
"exp": 1560797819,
1717
"vc": {
18-
"@context": ["https://w3id.org/credentials/v1", "https://trafi.fi/credentials/v1"],
18+
"@context": ["https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1"],
1919
"type": ["VerifiableCredential", "DriversLicenseCredential"],
2020
"credentialSubject": {
2121
"driversLicense": {
@@ -36,10 +36,10 @@ JWT Payload:
3636
verifiableCredential.setExpirationDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"));
3737

3838
verifiableCredential.setCredentialSubject("did:sov:21tDAKCERh95uGgKbJNHYp");
39-
LinkedHashMap<String, Object> jsonLdClaimsObject = verifiableCredential.getJsonLdCredentialSubject();
40-
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = new LinkedHashMap<String, Object> ();
41-
jsonLdDriversLicenseObject.put("licenseClass", "trucks");
42-
jsonLdClaimsObject.put("driversLicense", jsonLdDriversLicenseObject);
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);
4343

4444
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromVerifiableCredential(verifiableCredential);
4545

examples-ldp.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@ Verifiable Credentials with Linked Data Proofs:
55
### Example Verifiable Credential
66

77
{
8-
"@context": ["https://w3id.org/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1"],
8+
"@context": ["https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1"],
99
"type": ["VerifiableCredential", "DriversLicenseCredential"],
1010
"credentialSubject": {
1111
"id": "did:sov:21tDAKCERh95uGgKbJNHYp",
1212
"driversLicense": {
1313
"licenseClass": "trucks"
1414
}
1515
},
16-
"id": "urn:uuid:163f6260-c674-4988-bc68-526cdc4fcca3",
16+
"id": "urn:uuid:54ac93ea-6db3-4e7f-9ba7-7bb5d81c7e7e",
1717
"issuer": "did:sov:1yvXbmgPoUm4dl66D7KhyD",
18-
"issuanceDate": "2019-06-15T19:44:08Z",
18+
"issuanceDate": "2019-06-18T07:43:03Z",
1919
"proof": {
2020
"type": "RsaSignature2018",
2121
"creator": "did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1",
2222
"created": "2018-01-01T21:19:10Z",
2323
"domain": null,
2424
"nonce": "c0ae1c8e-c7e7-469f-b252-86e6a0e7387e",
25-
"signatureValue": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..ES8g88t7Y-eOxZ2kmJy35F7KABbVwmDcUeI67AtUfMgXt-ETXp4VetCA9MKWzdWgrEu_xg157unLWepdyrf8zprM3H0UNqS4PIHP7R3dK1V7n-lDd4VgcjzuJrdwrYHcHTj_oQJfGSZoC9128r0jAn5lK4DQ4YV1JKc8nogOy15Wkj9rDPlMFiuRhRJ0GHMm5gbhYCebbu8A-Gn4PFf7IZHpvcKfytGchz13P0EZIYz8qDZ79tORpp2BhiOFb4MODMqArdRs0yeePxrlWAXvH9JqppVUOWI_3Fw2jaqlxWw5R2fcJNGC61WzLv9rFbeq1FUGfKIqBAL7eHM4zYceew"
25+
"signatureValue": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..XiAK8PoseWt2KygoYCKjlGQyzhrpOoDrWpM2qI2dqQPZbCykyWkH6oHBx2uUhZImfQAY_Qf9rICFSF0L7BhrFMc5Jca9mdzA9jS-S3w1CcX4L-6OVykPGZC7WiPnoboHQiX517F-o-1kjV5B6zUc-kLKH4fO5HPiKkEJoY2QCRKivbr4K5sMbPhveZEGwqKwI7RLDKxXJgvdiLzJDb3wVGV0Ed3IKiAuBdT6d53n1nB3NKoCsGZeiiTCjo3QlT-VuWtc-YRIFAeRnNTKEmQxexiw2Rn5piFOtmiKgrlDSxJrOWkfNaPZq2esDsAW0-lAQqdFJf8_eURfs8SeLA5c1A"
2626
}
2727
}
2828

@@ -36,10 +36,10 @@ Verifiable Credentials with Linked Data Proofs:
3636
verifiableCredential.setIssuanceDate(new Date());
3737

3838
verifiableCredential.setCredentialSubject("did:sov:21tDAKCERh95uGgKbJNHYp");
39-
LinkedHashMap<String, Object> jsonLdClaimsObject = verifiableCredential.getJsonLdCredentialSubject();
40-
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = new LinkedHashMap<String, Object> ();
41-
jsonLdDriversLicenseObject.put("licenseClass", "trucks");
42-
jsonLdClaimsObject.put("driversLicense", jsonLdDriversLicenseObject);
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);
4343

4444
URI creator = URI.create("did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1");
4545
String created = "2018-01-01T21:19:10Z";

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

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,9 @@
1919

2020
public class VerifiableCredential {
2121

22-
public static final String JSONLD_CONTEXT_CREDENTIALS = "https://w3id.org/credentials/v1";
22+
public static final String JSONLD_CONTEXT_CREDENTIALS = "https://www.w3.org/2018/credentials/v1";
2323
public static final String JSONLD_TYPE_VERIFIABLE_CREDENTIAL = "VerifiableCredential";
2424

25-
public static final URI URI_TYPE = URI.create("http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
26-
public static final URI URI_ISSUER = URI.create("https://w3id.org/credentials#issuer");
27-
public static final URI URI_ISSUED = URI.create("https://w3id.org/credentials#issued");
28-
29-
public static final URI URI_CLAIM = URI.create("https://w3id.org/credentials#claim");
30-
3125
public static final String JSONLD_TERM_ID = "id";
3226
public static final String JSONLD_TERM_TYPE = "type";
3327
public static final String JSONLD_TERM_ISSUER = "issuer";
@@ -49,6 +43,8 @@ public class VerifiableCredential {
4943
private VerifiableCredential(LinkedHashMap<String, Object> jsonLdObject) {
5044

5145
this.jsonLdObject = jsonLdObject;
46+
47+
this.validate();
5248
}
5349

5450
public VerifiableCredential() {
@@ -130,12 +126,12 @@ public void setCredentialSubject(String subject) {
130126
this.getJsonLdCredentialSubject().put(JSONLD_TERM_ID, subject);
131127
}
132128

133-
public List<Object> getContext() {
129+
public List<String> getContext() {
134130

135-
return (List<Object>) this.jsonLdObject.get(JsonLdConsts.CONTEXT);
131+
return (List<String>) this.jsonLdObject.get(JsonLdConsts.CONTEXT);
136132
}
137133

138-
public void setContext(List<Object> context) {
134+
public void setContext(List<String> context) {
139135

140136
if (context == null)
141137
this.jsonLdObject.remove(JsonLdConsts.CONTEXT);
@@ -220,6 +216,38 @@ public String toJsonString() throws JsonGenerationException, IOException {
220216
return JsonUtils.toString(this.jsonLdObject);
221217
}
222218

219+
/*
220+
* Validation
221+
*/
222+
223+
private static void validateTrue(boolean valid) throws IllegalStateException {
224+
225+
if (! valid) throw new IllegalStateException();
226+
}
227+
228+
private static void validateRun(Runnable runnable, String message) throws IllegalStateException {
229+
230+
try {
231+
232+
runnable.run();
233+
} catch (Exception ex) {
234+
235+
throw new IllegalStateException(message);
236+
}
237+
}
238+
239+
public void validate() throws IllegalStateException {
240+
241+
validateRun(() -> { validateTrue(JSONLD_CONTEXT_CREDENTIALS.equals(this.getContext().get(0))); }, "First value of @context must be https://www.w3.org/2018/credentials/v1");
242+
validateRun(() -> { for (String context : this.getContext()) URI.create(context); }, "@context must be a valid URI");
243+
validateRun(() -> { for (String type : this.getType()) URI.create(type); }, "@type must be a valid URI");
244+
validateRun(() -> { this.getType().contains(JSONLD_TYPE_VERIFIABLE_CREDENTIAL); }, "@type must contain VerifiableCredential");
245+
}
246+
247+
/*
248+
* Object methods
249+
*/
250+
223251
@Override
224252
public int hashCode() {
225253
final int prime = 31;

src/main/resources/jarcache.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"Content-Type": "application/ld+json"
1111
},
1212
{
13-
"Content-Location": "https://w3id.org/credentials/v1",
13+
"Content-Location": "https://www.w3.org/2018/credentials/v1",
1414
"X-Classpath": "com/danubetech/verifiablecredentials/credentials-v1.jsonld",
1515
"Content-Type": "application/ld+json"
1616
}

src/test/resources/com/danubetech/verifiablecredentials/verifiable-credential.input.jsonld

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"@context": ["https://w3id.org/credentials/v1", "https://trafi.fi/credentials/v1"],
2+
"@context": ["https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1"],
33
"type": ["VerifiableCredential", "DriversLicenseCredential"],
44
"credentialSubject": {
55
"id": "did:sov:21tDAKCERh95uGgKbJNHYp",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJpYXQiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93M2lkLm9yZy9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vdHJhZmkuZmkvY3JlZGVudGlhbHMvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkRyaXZlcnNMaWNlbnNlQ3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJkcml2ZXJzTGljZW5zZSI6eyJsaWNlbnNlQ2xhc3MiOiJ0cnVja3MifX19fQ.sBLdUmYcys7ewHG_4iXGwPH3oayKC8qJmHqLbaKrlJhgPPxYGayUM7JD_HlS0GWaudTMaQ5nK2Dkvwka0PuzoFdJemKdy_ua8Qobe_h6BLdtiCV_3063D_KNyiGu7SBhfemL0lcaLo6rCKcPrd5ZdSi0_vfAXH1ZlMS-oBYpdXWompbY87-H1H-ARW0aicN6YofMzewwKKrgPLsNih603hgzJj63M1HbbIiKjMMzGNwGFn96vUQ-ZC24O-i_Fgl4BWTK2a9bIcq4zzzUfQ7TxnI9f0Y08O5hxBZq71ZQtDfebkEvOv-XL73L_sw7GMXBE_j-mcif8OehkHOnesvXBQ
1+
eyJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJ1cm46dXVpZDphODdiZGZiOC1hN2RmLTRiZDktYWUwZC1kODgzMTMzNTM4ZmUiLCJzdWIiOiJkaWQ6c292OjIxdERBS0NFUmg5NXVHZ0tiSk5IWXAiLCJpc3MiOiJkaWQ6c292OjF5dlhibWdQb1VtNGRsNjZEN0toeUQiLCJpYXQiOjE1NjA3MTE0MTksImV4cCI6MTU2MDc5NzgxOSwidmMiOnsiQGNvbnRleHQiOlsiaHR0cHM6Ly93d3cudzMub3JnLzIwMTgvY3JlZGVudGlhbHMvdjEiLCJodHRwczovL3RyYWZpLmZpL2NyZWRlbnRpYWxzL3YxIl0sInR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJEcml2ZXJzTGljZW5zZUNyZWRlbnRpYWwiXSwiY3JlZGVudGlhbFN1YmplY3QiOnsiZHJpdmVyc0xpY2Vuc2UiOnsibGljZW5zZUNsYXNzIjoidHJ1Y2tzIn19fX0.FAuGkiVhfW2-9vmijXzcBoVaB4ygm28hcE9J5N6yZbPPNR_dcjhFOPDP3n3scHLNQ2rk4CQD6sOGA2p7FJfSlZZ4JnNkLmkBfPkzeXzn6O7gNRIatm7a7vJwJyYuvdA4GlbF6zAJqULT1nGO5DDEb52AY5-02vgJU5cPBG7sDljsw8zq_hmeXSMFVEw5A68GIh2_Wwefqhuy96aPdM6Rf69zPboxrLpPuq-LfS0cyOt4Jk27kqvZCl8xTrwA41iJGc3l2Rb0nA9jE11ppxb1JfrMbU3U4Nj50Z7mtIgtEYzembsw1sfCIZeTqjL-jlJku6b4Dofd_Qq-nOuj4HJ8TA
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"jti":"urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe","sub":"did:sov:21tDAKCERh95uGgKbJNHYp","iss":"did:sov:1yvXbmgPoUm4dl66D7KhyD","iat":1560711419,"exp":1560797819,"vc":{"@context":["https://w3id.org/credentials/v1","https://trafi.fi/credentials/v1"],"type":["VerifiableCredential","DriversLicenseCredential"],"credentialSubject":{"driversLicense":{"licenseClass":"trucks"}}}}
1+
{"jti":"urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe","sub":"did:sov:21tDAKCERh95uGgKbJNHYp","iss":"did:sov:1yvXbmgPoUm4dl66D7KhyD","iat":1560711419,"exp":1560797819,"vc":{"@context":["https://www.w3.org/2018/credentials/v1","https://trafi.fi/credentials/v1"],"type":["VerifiableCredential","DriversLicenseCredential"],"credentialSubject":{"driversLicense":{"licenseClass":"trucks"}}}}

src/test/resources/com/danubetech/verifiablecredentials/verifiable-credential.ldp.bad.jsonld

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"@context" : [ "https://w3id.org/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1" ],
2+
"@context" : [ "https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1" ],
33
"type" : [ "VerifiableCredential", "DriversLicenseCredential" ],
44
"credentialSubject" : {
55
"id" : "did:sov:21tDAKCERh95uGgKbJNHYp",

src/test/resources/com/danubetech/verifiablecredentials/verifiable-credential.ldp.good.jsonld

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"@context" : [ "https://w3id.org/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1" ],
2+
"@context" : [ "https://www.w3.org/2018/credentials/v1", "https://trafi.fi/credentials/v1", "https://w3id.org/security/v1" ],
33
"type" : [ "VerifiableCredential", "DriversLicenseCredential" ],
44
"credentialSubject" : {
55
"id" : "did:sov:21tDAKCERh95uGgKbJNHYp",

0 commit comments

Comments
 (0)