Skip to content

Commit 1891f62

Browse files
committed
feat: More support for Data Integrity proofs
1 parent d333067 commit 1891f62

File tree

50 files changed

+1992
-231
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1992
-231
lines changed

pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,12 @@
179179
<version>5.15.2</version>
180180
<scope>test</scope>
181181
</dependency>
182+
<dependency>
183+
<groupId>org.apache.logging.log4j</groupId>
184+
<artifactId>log4j-slf4j-impl</artifactId>
185+
<version>2.24.3</version>
186+
<scope>test</scope>
187+
</dependency>
182188
<dependency>
183189
<groupId>org.hyperledger</groupId>
184190
<artifactId>indy</artifactId>

src/main/resources/com/danubetech/verifiablecredentials/jsonld/credentials-v2-unstable.jsonld

Lines changed: 0 additions & 111 deletions
This file was deleted.

src/main/resources/com/danubetech/verifiablecredentials/jsonld/credentials-v2.jsonld

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -154,28 +154,8 @@
154154
"@id": "https://www.w3.org/ns/credentials/status#encodedList",
155155
"@type": "https://w3id.org/security#multibase"
156156
},
157-
"statusMessage": {
158-
"@id": "https://www.w3.org/ns/credentials/status#statusMessage",
159-
"@context": {
160-
"@protected": true,
161-
162-
"id": "@id",
163-
"type": "@type",
164-
165-
"message": "https://www.w3.org/ns/credentials/status#message",
166-
"status": "https://www.w3.org/ns/credentials/status#status"
167-
}
168-
},
169157
"statusPurpose":
170158
"https://www.w3.org/ns/credentials/status#statusPurpose",
171-
"statusReference": {
172-
"@id": "https://www.w3.org/ns/credentials/status#statusReference",
173-
"@type": "@id"
174-
},
175-
"statusSize": {
176-
"@id": "https://www.w3.org/ns/credentials/status#statusSize",
177-
"@type": "https://www.w3.org/2001/XMLSchema#positiveInteger"
178-
},
179159
"ttl": "https://www.w3.org/ns/credentials/status#ttl"
180160
}
181161
},
@@ -197,7 +177,27 @@
197177
"statusListIndex":
198178
"https://www.w3.org/ns/credentials/status#statusListIndex",
199179
"statusPurpose":
200-
"https://www.w3.org/ns/credentials/status#statusPurpose"
180+
"https://www.w3.org/ns/credentials/status#statusPurpose",
181+
"statusMessage": {
182+
"@id": "https://www.w3.org/ns/credentials/status#statusMessage",
183+
"@context": {
184+
"@protected": true,
185+
186+
"id": "@id",
187+
"type": "@type",
188+
189+
"message": "https://www.w3.org/ns/credentials/status#message",
190+
"status": "https://www.w3.org/ns/credentials/status#status"
191+
}
192+
},
193+
"statusReference": {
194+
"@id": "https://www.w3.org/ns/credentials/status#statusReference",
195+
"@type": "@id"
196+
},
197+
"statusSize": {
198+
"@id": "https://www.w3.org/ns/credentials/status#statusSize",
199+
"@type": "https://www.w3.org/2001/XMLSchema#integer"
200+
}
201201
}
202202
},
203203

src/test/java/com/danubetech/verifiablecredentials/SignCredentialTest.java renamed to src/test/java/com/danubetech/verifiablecredentials/BasicSignCredentialTest.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.danubetech.dataintegrity.signer.RsaSignature2018LdSigner;
55
import com.danubetech.dataintegrity.suites.DataIntegritySuites;
66
import com.danubetech.dataintegrity.verifier.RsaSignature2018LdVerifier;
7+
import com.danubetech.verifiablecredentials.util.TestKeys;
78
import com.danubetech.verifiablecredentials.validation.Validation;
89
import foundation.identity.jsonld.JsonLDUtils;
910
import org.junit.jupiter.api.Test;
@@ -16,19 +17,19 @@
1617
import static org.junit.jupiter.api.Assertions.assertEquals;
1718
import static org.junit.jupiter.api.Assertions.assertTrue;
1819

19-
public class SignCredentialTest {
20+
public class BasicSignCredentialTest {
2021

2122
@Test
2223
void testSign() throws Throwable {
2324

24-
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyCredentialTest.class.getResourceAsStream("input.vc.jsonld"))));
25+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyCredentialTest.class.getResourceAsStream("input.vc.jsonld"))));
2526

2627
URI verificationMethod = URI.create("did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1");
2728
Date created = JsonLDUtils.DATE_FORMAT.parse("2018-01-01T21:19:10Z");
2829
String domain = null;
2930
String nonce = "c0ae1c8e-c7e7-469f-b252-86e6a0e7387e";
3031

31-
RsaSignature2018LdSigner signer = new RsaSignature2018LdSigner(TestUtil.testRSAPrivateKey);
32+
RsaSignature2018LdSigner signer = new RsaSignature2018LdSigner(TestKeys.testRSAPrivateKey);
3233
signer.setVerificationMethod(verificationMethod);
3334
signer.setCreated(created);
3435
signer.setDomain(domain);
@@ -40,11 +41,11 @@ void testSign() throws Throwable {
4041
assertEquals(created, dataIntegrityProof.getCreated());
4142
assertEquals(domain, dataIntegrityProof.getDomain());
4243
assertEquals(nonce, dataIntegrityProof.getNonce());
43-
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..Sn-LB5t_x-kh9mUDq1DaS1GScj3PY_2fMnNnhq09x-ZBf6_EzYfvgFOpEvdLUwxkJiEt7B2x-LGg7bp-o7UEGCbIxWdGUTG7BGAsKsU18hUwOHrVNZ6VHovbxeFgK0iNMn0MObDiGdQbYMG8C71m3AvquUP00-2UiDcqNxmGAYg5tHv7SHXLEgvaz7SnIkBklj1yj_TMXreSGa_okbXFYxh7SkMfFcxHbBFShr0Fzd8DTn8tr_WvPHR7Tx3bkJHmqFx9Wo-0e7FkLeICsgmBKa5Hzz-y_1yEQPsDaZRRsbXfBD4krL7WTplJtAwnQ5Sy-L9cwZzNhCQC6KsggGjTgQ", dataIntegrityProof.getJws());
44+
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..PsLGdGwDk19y1MTC6_jpBzLqwE43877Z8LtgVcJNSxmdjdltiC_yu3ZN0YxWGenfkywFAkockuqGjqGGy4v90I6k4PvkubgWSofhrjcmiFnKRqClRHRbHS6lB1-NBJJcfOz4OQtkKg0NxtMO0jwZWEGPS97IUeR0aDGLAj2raU8ai1hMIfEx0M4ntq6rsaKileQC5_k6SuOMkycNIgdN1-WX8WvK_36i0BZwOzPTmFEt-J66X7HaYT8ZEpq0xl2WYBKmg8Vnf4MaZLIInJyGi7kJ1kvUFw7pIok_vZMyOW0O8P8TjzRTSNhJKeznLJBEEg-YkNPpMZZBm6-gY54Clg", dataIntegrityProof.getJws());
4445

4546
Validation.validate(verifiableCredential);
4647

47-
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
48+
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestKeys.testRSAPublicKey);
4849
boolean verify = verifier.verify(verifiableCredential);
4950
assertTrue(verify);
5051
}

src/test/java/com/danubetech/verifiablecredentials/SignPresentationTest.java renamed to src/test/java/com/danubetech/verifiablecredentials/BasicSignPresentationTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.danubetech.dataintegrity.signer.RsaSignature2018LdSigner;
55
import com.danubetech.dataintegrity.suites.DataIntegritySuites;
66
import com.danubetech.dataintegrity.verifier.RsaSignature2018LdVerifier;
7+
import com.danubetech.verifiablecredentials.util.TestKeys;
8+
import com.danubetech.verifiablecredentials.util.TestUtil;
79
import com.danubetech.verifiablecredentials.validation.Validation;
810
import foundation.identity.jsonld.JsonLDUtils;
911
import org.junit.jupiter.api.Test;
@@ -16,19 +18,19 @@
1618
import static org.junit.jupiter.api.Assertions.assertEquals;
1719
import static org.junit.jupiter.api.Assertions.assertTrue;
1820

19-
public class SignPresentationTest {
21+
public class BasicSignPresentationTest {
2022

2123
@Test
2224
void testSign() throws Throwable {
2325

24-
VerifiablePresentation verifiablePresentation = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyCredentialTest.class.getResourceAsStream("input.vp.jsonld"))));
26+
VerifiablePresentation verifiablePresentation = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyCredentialTest.class.getResourceAsStream("input.vp.jsonld"))));
2527

2628
URI verificationMethod = URI.create("did:sov:1yvXbmgPoUm4dl66D7KhyD#keys-1");
2729
Date created = JsonLDUtils.DATE_FORMAT.parse("2018-01-01T21:19:10Z");
2830
String domain = null;
2931
String nonce = "c0ae1c8e-c7e7-469f-b252-86e6a0e7387e";
3032

31-
RsaSignature2018LdSigner signer = new RsaSignature2018LdSigner(TestUtil.testRSAPrivateKey);
33+
RsaSignature2018LdSigner signer = new RsaSignature2018LdSigner(TestKeys.testRSAPrivateKey);
3234
signer.setVerificationMethod(verificationMethod);
3335
signer.setCreated(created);
3436
signer.setDomain(domain);
@@ -40,11 +42,11 @@ void testSign() throws Throwable {
4042
assertEquals(created, dataIntegrityProof.getCreated());
4143
assertEquals(domain, dataIntegrityProof.getDomain());
4244
assertEquals(nonce, dataIntegrityProof.getNonce());
43-
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..PexTQ753-C3IjZwC0F5yA-06EuiM_McqPBRcyPhHw0PdCaVdvK628kqG8PWABJ1oISU8Z75lzpfhwNwD2qRiPTLg6uQqbmm8p633hM0HCIih8Uf3QzflrUlxfPIiAdUmWZiNRHNPbm4KD4hvPl4S0kYmCLJEp0evMbazZHKgnKOzzGsvOIqpCwheH30uzbk5--z8XJGflMLEHqrp42DWuYB8y9l_yn830mC6xAzWe25KRSbODDk2xy1gjIcMeBYPkMuZ4MCamRUYsPuj-aLHq8q8iDrhUoUDH307v0OevDlyu6cG7_H0bgG6fGTzAT5EGkb-EhE3NfAvKo7nh3d6Mw", dataIntegrityProof.getJws());
45+
assertEquals("eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJSUzI1NiJ9..P5YxXCKV-bkWU0BmsFgvmG9bslwUcPMi6F6YpXZsy7bqFtfbb0y09syhydWMe0iKDa43_dbKBqvzfrLyHwIxQYYzU_AXggOy0sjUfc2ni-LhTHBxSBANPWkSjWgc2XAb26KvdlGmbnSI76gq-4ItiA43xYhRdocseqfQznOsYrDSg4FIxJE_Hn_kZR1srxAeyFhOfKdGufk57TH56v8uLJulnkyGDw2T1DSfD1sGj8R-rnWXZlY6lLcbIUMza4QeRu9SZj2gkHnE8sR3RDm52_jHx2keYbJkj8b4FacVSPGa1hXEIryQOt6EScf9SwLx1ojwMAPJp2BHCVZsF5MAog", dataIntegrityProof.getJws());
4446

4547
Validation.validate(verifiablePresentation);
4648

47-
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
49+
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestKeys.testRSAPublicKey);
4850
boolean verify = verifier.verify(verifiablePresentation);
4951
assertTrue(verify);
5052
}

src/test/java/com/danubetech/verifiablecredentials/VerifyCredentialTest.java renamed to src/test/java/com/danubetech/verifiablecredentials/BasicVerifyCredentialTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.danubetech.verifiablecredentials;
22

33
import com.danubetech.dataintegrity.verifier.RsaSignature2018LdVerifier;
4+
import com.danubetech.verifiablecredentials.util.TestKeys;
5+
import com.danubetech.verifiablecredentials.util.TestUtil;
46
import com.danubetech.verifiablecredentials.validation.Validation;
57
import org.junit.jupiter.api.Test;
68

@@ -9,16 +11,16 @@
911

1012
import static org.junit.jupiter.api.Assertions.*;
1113

12-
public class VerifyCredentialTest {
14+
public class BasicVerifyCredentialTest {
1315

1416
@Test
1517
void testVerify() throws Throwable {
1618

17-
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyCredentialTest.class.getResourceAsStream("signed.good.vc.jsonld"))));
19+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyCredentialTest.class.getResourceAsStream("signed.good.vc.jsonld"))));
1820

1921
Validation.validate(verifiableCredential);
2022

21-
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
23+
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestKeys.testRSAPublicKey);
2224
boolean verify = verifier.verify(verifiableCredential);
2325

2426
assertTrue(verify);
@@ -32,11 +34,11 @@ void testVerify() throws Throwable {
3234
@Test
3335
void testBadVerify() throws Throwable {
3436

35-
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyCredentialTest.class.getResourceAsStream("signed.bad.vc.jsonld"))));
37+
VerifiableCredential verifiableCredential = VerifiableCredential.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyCredentialTest.class.getResourceAsStream("signed.bad.vc.jsonld"))));
3638

3739
Validation.validate(verifiableCredential);
3840

39-
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestUtil.testRSAPublicKey);
41+
RsaSignature2018LdVerifier verifier = new RsaSignature2018LdVerifier(TestKeys.testRSAPublicKey);
4042
boolean verify = verifier.verify(verifiableCredential);
4143

4244
assertFalse(verify);

src/test/java/com/danubetech/verifiablecredentials/VerifyPresentationTest.java renamed to src/test/java/com/danubetech/verifiablecredentials/BasicVerifyPresentationTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import static org.junit.jupiter.api.Assertions.*;
2020

21-
public class VerifyPresentationTest {
21+
public class BasicVerifyPresentationTest {
2222

2323
final static byte[] publicKeyPresentation1;
2424
final static byte[] publicKeyPresentation2;
@@ -43,10 +43,10 @@ public class VerifyPresentationTest {
4343
publicKeyCredential1 = Base58.decode("5TVraf9itbKXrRvt2DSS95Gw4vqU3CHAdetoufdcKazA");
4444
publicKeyCredential2 = Base58.decode("5yKdnU7ToTjAoRNDzfuzVTfWBH38qyhE1b9xh4v8JaWF");
4545

46-
verifiablePresentationGood1 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyPresentationTest.class.getResourceAsStream("signed.good.vp1.jsonld"))));
47-
verifiablePresentationGood2 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyPresentationTest.class.getResourceAsStream("signed.good.vp2.jsonld"))));
48-
verifiablePresentationBad1 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyPresentationTest.class.getResourceAsStream("signed.bad.vp1.jsonld"))));
49-
verifiablePresentationBad2 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(VerifyPresentationTest.class.getResourceAsStream("signed.bad.vp2.jsonld"))));
46+
verifiablePresentationGood1 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyPresentationTest.class.getResourceAsStream("signed.good.vp1.jsonld"))));
47+
verifiablePresentationGood2 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyPresentationTest.class.getResourceAsStream("signed.good.vp2.jsonld"))));
48+
verifiablePresentationBad1 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyPresentationTest.class.getResourceAsStream("signed.bad.vp1.jsonld"))));
49+
verifiablePresentationBad2 = VerifiablePresentation.fromJson(new InputStreamReader(Objects.requireNonNull(BasicVerifyPresentationTest.class.getResourceAsStream("signed.bad.vp2.jsonld"))));
5050
verifiableCredentialGood1 = verifiablePresentationGood1.getVerifiableCredential();
5151
verifiableCredentialGood2 = verifiablePresentationGood2.getVerifiableCredential();
5252
verifiableCredentialBad1 = verifiablePresentationBad1.getVerifiableCredential();

src/test/java/com/danubetech/verifiablecredentials/JwtTest.java renamed to src/test/java/com/danubetech/verifiablecredentials/jwt/JwtTest.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package com.danubetech.verifiablecredentials;
1+
package com.danubetech.verifiablecredentials.jwt;
22

3-
import com.danubetech.verifiablecredentials.jwt.FromJwtConverter;
4-
import com.danubetech.verifiablecredentials.jwt.JwtVerifiableCredential;
5-
import com.danubetech.verifiablecredentials.jwt.ToJwtConverter;
3+
import com.danubetech.verifiablecredentials.CredentialSubject;
4+
import com.danubetech.verifiablecredentials.VerifiableCredential;
5+
import com.danubetech.verifiablecredentials.util.TestKeys;
6+
import com.danubetech.verifiablecredentials.util.TestUtil;
67
import com.nimbusds.jose.jwk.RSAKey;
78
import foundation.identity.jsonld.JsonLDUtils;
89
import org.junit.jupiter.api.Test;
@@ -19,8 +20,7 @@ public class JwtTest {
1920
static final RSAKey rsaKey;
2021

2122
static {
22-
23-
rsaKey = new RSAKey.Builder(TestUtil.testRSAPublicKey).privateKey(TestUtil.testRSAPrivateKey.getPrivate()).build();
23+
rsaKey = new RSAKey.Builder(TestKeys.testRSAPublicKey).privateKey(TestKeys.testRSAPrivateKey.getPrivate()).build();
2424
}
2525

2626
@Test
@@ -55,23 +55,23 @@ void testSign() throws Exception {
5555
assertNotNull(jwtString);
5656
assertNotNull(jwtPayload);
5757

58-
assertEquals(TestUtil.read(VerifyCredentialTest.class.getResourceAsStream("jwt.vc.jsonld")).trim(), jwtString.trim());
59-
assertEquals(TestUtil.read(VerifyCredentialTest.class.getResourceAsStream("jwt.payload.vc.jsonld")).trim(), jwtPayload.trim());
58+
assertEquals(TestUtil.read(JwtTest.class.getResourceAsStream("jwt.vc.jsonld")).trim(), jwtString.trim());
59+
assertEquals(TestUtil.read(JwtTest.class.getResourceAsStream("jwt.payload.vc.jsonld")).trim(), jwtPayload.trim());
6060
}
6161

6262
@Test
6363
void testVerify() throws Exception {
6464

65-
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromCompactSerialization(TestUtil.read(VerifyCredentialTest.class.getResourceAsStream("jwt.vc.jsonld")));
66-
if (! jwtVerifiableCredential.verify_RSA_RS256(TestUtil.testRSAPublicKey)) throw new GeneralSecurityException("Invalid signature.");
65+
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromCompactSerialization(TestUtil.read(JwtTest.class.getResourceAsStream("jwt.vc.jsonld")));
66+
if (! jwtVerifiableCredential.verify_RSA_RS256(TestKeys.testRSAPublicKey)) throw new GeneralSecurityException("Invalid signature.");
6767

6868
String jwtPayload = jwtVerifiableCredential.getJwsObject().getPayload().toString();
6969
String jwtPayloadVerifiableCredential = jwtVerifiableCredential.getPayloadObject().toJson();
7070

7171
assertNotNull(jwtPayload);
7272
assertNotNull(jwtPayloadVerifiableCredential);
7373

74-
assertEquals(TestUtil.read(VerifyCredentialTest.class.getResourceAsStream("jwt.payload.vc.jsonld")).trim(), jwtPayload.trim());
74+
assertEquals(TestUtil.read(JwtTest.class.getResourceAsStream("jwt.payload.vc.jsonld")).trim(), jwtPayload.trim());
7575

7676
VerifiableCredential verifiableCredential = FromJwtConverter.fromJwtVerifiableCredential(jwtVerifiableCredential);
7777

0 commit comments

Comments
 (0)