Skip to content

Commit 40b824e

Browse files
author
Thomas Diesler
committed
[#35] Separate subject validation from JSON-LD schema validation
1 parent 57585c6 commit 40b824e

File tree

3 files changed

+76
-6
lines changed

3 files changed

+76
-6
lines changed

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

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,32 @@ private static void validateRun(Runnable runnable, String message) throws Illega
3636
}
3737
}
3838

39+
@Deprecated
3940
public static void validate(VerifiableCredential verifiableCredential) throws IllegalStateException {
41+
validateJsonLd(verifiableCredential);
42+
}
43+
44+
@Deprecated
45+
public static void validate(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
46+
validateJsonLd(verifiablePresentation);
47+
}
48+
49+
public static void validateJsonLd(VerifiableCredential verifiableCredential) throws IllegalStateException {
4050

4151
foundation.identity.jsonld.validation.Validation.validate(verifiableCredential);
4252

53+
validateJson(verifiableCredential);
54+
}
55+
56+
public static void validateJsonLd(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
57+
58+
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
59+
60+
validateJson(verifiablePresentation);
61+
}
62+
63+
public static void validateJson(VerifiableCredential verifiableCredential) throws IllegalStateException {
64+
4365
validateRun(() -> { validateTrue(verifiableCredential.getJsonObject() != null); }, "Bad or missing JSON object.");
4466
validateRun(() -> { validateTrue(verifiableCredential.getContexts().size() > 0); }, "Bad or missing '@context'.");
4567
validateRun(() -> { validateUrl(verifiableCredential.getContexts().get(0)); }, "@context must be a valid URI: " + verifiableCredential.getContexts().get(0));
@@ -56,9 +78,7 @@ public static void validate(VerifiableCredential verifiableCredential) throws Il
5678
validateRun(() -> { validateTrue(verifiableCredential.getCredentialSubject() != null); }, "Bad or missing 'credentialSubject'.");
5779
}
5880

59-
public static void validate(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
60-
61-
foundation.identity.jsonld.validation.Validation.validate(verifiablePresentation);
81+
public static void validateJson(VerifiablePresentation verifiablePresentation) throws IllegalStateException {
6282

6383
validateRun(() -> { validateTrue(verifiablePresentation.getJsonObject() != null); }, "Bad or missing JSON object.");
6484
validateRun(() -> { validateTrue(verifiablePresentation.getContexts().size() > 0); }, "Bad or missing '@context'.");

src/test/java/com/danubetech/verifiablecredentials/SignCredentialTest.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
public class SignCredentialTest {
1919

2020
@Test
21-
void testSign() throws Throwable {
21+
void testSignJsonLd() throws Throwable {
2222

23-
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(VerifyCredentialTest.class.getResourceAsStream("input.vc.jsonld")));
23+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(
24+
new InputStreamReader(getClass().getResourceAsStream("input.vc.jsonld")));
2425

2526
URI verificationMethod = URI.create("did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1");
2627
Date created = JsonLDUtils.DATE_FORMAT.parse("2018-01-01T21:19:10Z");
@@ -41,7 +42,39 @@ void testSign() throws Throwable {
4142
assertEquals(nonce, ldProof.getNonce());
4243
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..Sn-LB5t_x-kh9mUDq1DaS1GScj3PY_2fMnNnhq09x-ZBf6_EzYfvgFOpEvdLUwxkJiEt7B2x-LGg7bp-o7UEGCbIxWdGUTG7BGAsKsU18hUwOHrVNZ6VHovbxeFgK0iNMn0MObDiGdQbYMG8C71m3AvquUP00-2UiDcqNxmGAYg5tHv7SHXLEgvaz7SnIkBklj1yj_TMXreSGa_okbXFYxh7SkMfFcxHbBFShr0Fzd8DTn8tr_WvPHR7Tx3bkJHmqFx9Wo-0e7FkLeICsgmBKa5Hzz-y_1yEQPsDaZRRsbXfBD4krL7WTplJtAwnQ5Sy-L9cwZzNhCQC6KsggGjTgQ", ldProof.getJws());
4344

44-
Validation.validate(verifiableCredential);
45+
Validation.validateJsonLd(verifiableCredential);
46+
47+
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
48+
boolean verify = verifier.verify(verifiableCredential);
49+
assertTrue(verify);
50+
}
51+
52+
@Test
53+
void testSignJson() throws Throwable {
54+
55+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(
56+
new InputStreamReader(getClass().getResourceAsStream("input.vc.json")));
57+
58+
URI verificationMethod = URI.create("did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1");
59+
Date created = JsonLDUtils.DATE_FORMAT.parse("2018-01-01T21:19:10Z");
60+
String domain = null;
61+
String nonce = "c0ae1c8e-c7e7-469f-b252-86e6a0e7387e";
62+
63+
RsaSignature2018LdSigner signer = new RsaSignature2018LdSigner(TestUtil.testRSAPrivateKey);
64+
signer.setVerificationMethod(verificationMethod);
65+
signer.setCreated(created);
66+
signer.setDomain(domain);
67+
signer.setNonce(nonce);
68+
LdProof ldProof = signer.sign(verifiableCredential, true, false);
69+
70+
assertEquals(SignatureSuites.SIGNATURE_SUITE_RSASIGNATURE2018.getTerm(), ldProof.getType());
71+
assertEquals(verificationMethod, ldProof.getVerificationMethod());
72+
assertEquals(created, ldProof.getCreated());
73+
assertEquals(domain, ldProof.getDomain());
74+
assertEquals(nonce, ldProof.getNonce());
75+
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..GZYi1V8tbMLl5rLIZarlj-aX3KDTTqFJFtQr-2cV910J6embA7_fQPalX3pZLzld9mQ0SdJq2hlxWpMzujXKOElfWidtxJzOyp93ZsSbrtfj7fGSV_CYOSfQ7A8n3SR4O3pp6ja4vmDmBhP95oJXh_BVTbtqvU7e-_GngC2B9uoBr4JJd2mxsOu2_97u_-scPWv9xUIm5rFTGfLz5sUGbMihY96fywSATn9mD5aLDql2thHnrkfYHgsxAqQDV-gcvlZHw5-TtxN-NnG3DD5K_mugmlV3x10ZGLC5QCw0q83LGVi7NmBMShALOFtcO5CourGDSmc1jL9qA95GXMH_dA", ldProof.getJws());
76+
77+
Validation.validateJson(verifiableCredential);
4578

4679
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
4780
boolean verify = verifier.verify(verifiableCredential);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"@context": [
3+
"https://www.w3.org/2018/credentials/v1"
4+
],
5+
"id": "http://example.edu/credentials/1872",
6+
"type": ["VerifiableCredential", "UniversityDegreeCredential"],
7+
"issuer": "https://example.edu/issuers/565049",
8+
"issuanceDate": "2010-01-01T19:73:24Z",
9+
"credentialSubject": {
10+
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
11+
"givenName": "Manu",
12+
"familyName": "Sporny",
13+
"college": {
14+
"id": "did:example:c276e12ec21ebfeb1f712ebc6f1"
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)