Skip to content

Commit 86a7da5

Browse files
committed
chore: Update unit tests.
Signed-off-by: Markus Sabadello <[email protected]>
1 parent 2581312 commit 86a7da5

File tree

2 files changed

+137
-56
lines changed

2 files changed

+137
-56
lines changed
Lines changed: 58 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,82 @@
11
package com.danubetech.verifiablecredentials;
22

3-
import com.danubetech.verifiablecredentials.jwt.JwtVerifiableCredential;
4-
import org.junit.jupiter.api.Test;
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertTrue;
56

67
import java.security.GeneralSecurityException;
78
import java.util.LinkedHashMap;
89

9-
import static org.junit.jupiter.api.Assertions.*;
10+
import org.junit.jupiter.api.Test;
11+
12+
import com.danubetech.verifiablecredentials.jwt.JwtVerifiableCredential;
13+
import com.nimbusds.jose.jwk.RSAKey;
1014

1115
class JwtTest {
1216

13-
@Test
14-
void testSign() throws Exception {
17+
static RSAKey rsaKey;
18+
19+
static {
20+
21+
rsaKey = new RSAKey.Builder(TestUtil.testRSAPublicKey).privateKey(TestUtil.testRSAPrivateKey).build();
22+
}
23+
24+
@Test
25+
void testSign() throws Exception {
1526

16-
VerifiableCredential verifiableCredential = new VerifiableCredential();
17-
verifiableCredential.getContext().add("https://trafi.fi/credentials/v1");
18-
verifiableCredential.getType().add("DriversLicenseCredential");
19-
verifiableCredential.setId("urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe");
20-
verifiableCredential.setIssuer("did:sov:1yvXbmgPoUm4dl66D7KhyD");
21-
verifiableCredential.setIssuanceDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-16T18:56:59Z"));
22-
verifiableCredential.setExpirationDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"));
27+
VerifiableCredential verifiableCredential = new VerifiableCredential();
28+
verifiableCredential.getContext().add("https://trafi.fi/credentials/v1");
29+
verifiableCredential.getType().add("DriversLicenseCredential");
30+
verifiableCredential.setId("urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe");
31+
verifiableCredential.setIssuer("did:sov:1yvXbmgPoUm4dl66D7KhyD");
32+
verifiableCredential.setIssuanceDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-16T18:56:59Z"));
33+
verifiableCredential.setExpirationDate(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"));
2334

24-
verifiableCredential.setCredentialSubject("did:sov:21tDAKCERh95uGgKbJNHYp");
25-
LinkedHashMap<String, Object> jsonLdCredentialSubject = verifiableCredential.getJsonLdCredentialSubject();
26-
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = new LinkedHashMap<>();
27-
jsonLdDriversLicenseObject.put("licenseClass", "trucks");
28-
jsonLdCredentialSubject.put("driversLicense", jsonLdDriversLicenseObject);
35+
verifiableCredential.setCredentialSubject("did:sov:21tDAKCERh95uGgKbJNHYp");
36+
LinkedHashMap<String, Object> jsonLdCredentialSubject = verifiableCredential.getJsonLdCredentialSubject();
37+
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = new LinkedHashMap<>();
38+
jsonLdDriversLicenseObject.put("licenseClass", "trucks");
39+
jsonLdCredentialSubject.put("driversLicense", jsonLdDriversLicenseObject);
2940

30-
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromVerifiableCredential(verifiableCredential);
31-
String jwtString = jwtVerifiableCredential.sign_RSA_RS256(TestUtil.rsaKey);
32-
String jwtPayload = jwtVerifiableCredential.getJwsObject().getPayload().toString();
41+
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromVerifiableCredential(verifiableCredential);
42+
String jwtString = jwtVerifiableCredential.sign_RSA_RS256(rsaKey);
43+
String jwtPayload = jwtVerifiableCredential.getJwsObject().getPayload().toString();
3344

34-
assertNotNull(jwtString);
35-
assertNotNull(jwtPayload);
45+
assertNotNull(jwtString);
46+
assertNotNull(jwtPayload);
3647

37-
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.jsonld")).trim(), jwtString.trim());
38-
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.payload.jsonld")).trim(), jwtPayload.trim());
39-
}
48+
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.jsonld")).trim(), jwtString.trim());
49+
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.payload.jsonld")).trim(), jwtPayload.trim());
50+
}
4051

41-
@Test
42-
void testVerify() throws Exception {
52+
@Test
53+
void testVerify() throws Exception {
4354

44-
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromCompactSerialization(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.jsonld")));
45-
if (!jwtVerifiableCredential.verify_RSA_RS256(TestUtil.testRSAPublicKey))
46-
throw new GeneralSecurityException("Invalid signature.");
55+
JwtVerifiableCredential jwtVerifiableCredential = JwtVerifiableCredential.fromCompactSerialization(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.jsonld")));
56+
if (!jwtVerifiableCredential.verify_RSA_RS256(TestUtil.testRSAPublicKey))
57+
throw new GeneralSecurityException("Invalid signature.");
4758

48-
String jwtPayload = jwtVerifiableCredential.getJwsObject().getPayload().toString();
49-
String jwtPayloadVerifiableCredential = jwtVerifiableCredential.getPayloadObject().toJsonString();
59+
String jwtPayload = jwtVerifiableCredential.getJwsObject().getPayload().toString();
60+
String jwtPayloadVerifiableCredential = jwtVerifiableCredential.getPayloadObject().toJsonString();
5061

51-
assertNotNull(jwtPayload);
52-
assertNotNull(jwtPayloadVerifiableCredential);
62+
assertNotNull(jwtPayload);
63+
assertNotNull(jwtPayloadVerifiableCredential);
5364

54-
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.payload.jsonld")).trim(), jwtPayload.trim());
65+
assertEquals(TestUtil.read(VerifyTest.class.getResourceAsStream("verifiable-credential.jwt.payload.jsonld")).trim(), jwtPayload.trim());
5566

56-
VerifiableCredential verifiableCredential = jwtVerifiableCredential.toVerifiableCredential();
67+
VerifiableCredential verifiableCredential = jwtVerifiableCredential.toVerifiableCredential();
5768

58-
assertNotNull(verifiableCredential);
69+
assertNotNull(verifiableCredential);
5970

60-
assertTrue(verifiableCredential.getType().contains("DriversLicenseCredential"));
61-
assertEquals("urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe", verifiableCredential.getId());
62-
assertEquals("did:sov:1yvXbmgPoUm4dl66D7KhyD", verifiableCredential.getIssuer());
63-
assertEquals(VerifiableCredential.DATE_FORMAT.parse("2019-06-16T18:56:59Z"), verifiableCredential.getIssuanceDate());
64-
assertEquals(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"), verifiableCredential.getExpirationDate());
71+
assertTrue(verifiableCredential.getType().contains("DriversLicenseCredential"));
72+
assertEquals("urn:uuid:a87bdfb8-a7df-4bd9-ae0d-d883133538fe", verifiableCredential.getId());
73+
assertEquals("did:sov:1yvXbmgPoUm4dl66D7KhyD", verifiableCredential.getIssuer());
74+
assertEquals(VerifiableCredential.DATE_FORMAT.parse("2019-06-16T18:56:59Z"), verifiableCredential.getIssuanceDate());
75+
assertEquals(VerifiableCredential.DATE_FORMAT.parse("2019-06-17T18:56:59Z"), verifiableCredential.getExpirationDate());
6576

66-
assertEquals("did:sov:21tDAKCERh95uGgKbJNHYp", verifiableCredential.getCredentialSubject());
67-
LinkedHashMap<String, Object> jsonLdCredentialSubject = verifiableCredential.getJsonLdCredentialSubject();
68-
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = (LinkedHashMap<String, Object>) jsonLdCredentialSubject.get("driversLicense");
69-
assertEquals("trucks", jsonLdDriversLicenseObject.get("licenseClass"));
70-
}
77+
assertEquals("did:sov:21tDAKCERh95uGgKbJNHYp", verifiableCredential.getCredentialSubject());
78+
LinkedHashMap<String, Object> jsonLdCredentialSubject = verifiableCredential.getJsonLdCredentialSubject();
79+
LinkedHashMap<String, Object> jsonLdDriversLicenseObject = (LinkedHashMap<String, Object>) jsonLdCredentialSubject.get("driversLicense");
80+
assertEquals("trucks", jsonLdDriversLicenseObject.get("licenseClass"));
81+
}
7182
}

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

Lines changed: 79 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,94 @@
1010
import java.security.spec.X509EncodedKeySpec;
1111

1212
import org.apache.commons.codec.binary.Base64;
13-
14-
import com.nimbusds.jose.jwk.RSAKey;
13+
import org.apache.commons.codec.binary.Hex;
14+
import org.bitcoinj.core.ECKey;
1515

1616
class TestUtil {
1717

18+
static final String testEd25519PrivateKeyString =
19+
"984b589e121040156838303f107e13150be4a80fc5088ccba0b0bdc9b1d89090de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580";
20+
21+
static final String testEd25519PublicKeyString =
22+
"de8777a28f8da1a74e7a13090ed974d879bf692d001cddee16e4cc9f84b60580";
23+
24+
static final String testSecp256k1PrivateKeyString =
25+
"2ff4e6b73bc4c4c185c68b2c378f6b233978a88d3c8ed03df536f707f084e24e";
26+
27+
static final String testSecp256k1PublicKeyString =
28+
"0343f9455cd248e24c262b1341bbe37cea360e1c5ce526e5d1a71373ba6e557018";
29+
30+
static final String testRSAPrivateKeyString =
31+
"-----BEGIN PRIVATE KEY-----\n" +
32+
"MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC2lLVmZ9UpU/kq\n" +
33+
"h8iEwE/S1JZziqWHp+baWtlKS4rFSMRpaPNlLOzvaAQgbGtpa6wx2hG5XnjGxZHJ\n" +
34+
"/kp5lPRL4jk+uV7ch2LeAgKI7g3C8yTonBIFwlbCZIsUQrJRKcHYK1+IZzT/mtAK\n" +
35+
"lwS38OfmIz4E2ft+qmgshuSzytcpQiPz6oxWqRNewQp4qKcTbe3XKQyV2w1po4f6\n" +
36+
"G8a2Lkm3YMycfUmOhd0Nd/G9I//SCNRhvR6S251gVegDrB6SZDIl4ia+DHgzLPUj\n" +
37+
"iIe2Rj8KnsngyfV6Nnoc2bK+hMT/g65jW4J5i/hTJcVzWzW5TJi2PjPnuqwcaxLh\n" +
38+
"1DcDYwmzAgMBAAECggEAKp0KuZwCZGL1BLgsVM+N0edMNitl9wN5Hf2WOYDoIqOZ\n" +
39+
"NAEKzdJuenIMhITJjRFUX05GVL138uyp2js/pqDdY9ipA7rAKThwGuDdNphZHech\n" +
40+
"9ih3DGEPXs+YpmHqvIbCd3GoGm38MKwxYkddEpFnjo8rKna1/BpJthrFxjDRhw9D\n" +
41+
"xJBycOdH2yWTyp62ZENPvneK40H2a57W4QScTgfecZqD59m2fGUaWaX5uUmIxaEm\n" +
42+
"tGoJnd9RE4oywKhgN7/TK7wXRlqA4UoRPiH2ACrdU+/cLQL9Jc0u0GqZJK31LDbO\n" +
43+
"eN95QgtSCc72k3Vtzy3CrVpp5TAA67s1Gj9Skn+CAQKBgQDkEZTVztp//mwXJ+xr\n" +
44+
"6icgmCjkFm7y4e/PdTJvw4DRr4b1Q87VKEtiNfTBR+FlwUHt/A+2CaZgA3rAoZVx\n" +
45+
"714wBtfg+WI+Tev4Fylm48qS4uT/AW+BYBDkerDaIS7BctXT97xzaBpS3+HIwLn6\n" +
46+
"cVzi/QGa/o1Po9+vL5SsrcEpZwKBgQDM8P4H6eueDAX4730Ee9vjtcYpHs43wkIj\n" +
47+
"onFq/MiS6wxcIHyszJhbzMuzrwvwksDNZnfigyrQU9SfKwHFzmdMXw1vgFnFNnn7\n" +
48+
"1wd+gqthMjdhayZVbYWkIkUSMyzg1dnbw8GRL1vjON9LYqE12SYJ45hTS0mk1/CY\n" +
49+
"5Mj3Sp5R1QKBgGia88P5I1ivbg5U3mhEtnuJrr+m1m6KWH6zx1VhuzTxqBnYZwZ3\n" +
50+
"e9Po4YDBIk2UjVPFV8Nru6awEd5GfpAKdQ3cJannWDsxbDiXDwNFGYWzkcqwct9J\n" +
51+
"G5Zf+7ugmpxZul+FcicQqXo3e4yjcOnAkxT9bH4VoOTVSeRFE5D8BOujAoGASwz1\n" +
52+
"+m/vmTFN/pu1bK7vF7S5nNVrL4A0OFiEsGliCmuJWzOKdL14DiYxctvnw3H6qT2d\n" +
53+
"KZZfV2tbse5N9+JecdldUjfuqAoLIe7dD7dKi42YOlTC9QXmqvTh1ohnJu8pmRFX\n" +
54+
"EZQGUm/BVhoIb2/WPkjav6YSkguCUHt4HRd2YwECgYAGhy4I4Q6r6jIsMAvDMxdT\n" +
55+
"yA5/cgvVDX8FbCx2gA2iHqLXv2mzGATgldOhZyldlBCq5vyeDATq5H1+l3ebo388\n" +
56+
"vhPnm9sMPKM8qasva20LaA63H0quk+H5nstBGjgETjycckmvKy0od8WVofYbsnEc\n" +
57+
"2AwFhUAPK203T2oShq/w6w==\n" +
58+
"-----END PRIVATE KEY-----\n";
59+
60+
static final String testRSAPublicKeyString =
61+
"-----BEGIN PUBLIC KEY-----\n" +
62+
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtpS1ZmfVKVP5KofIhMBP\n" +
63+
"0tSWc4qlh6fm2lrZSkuKxUjEaWjzZSzs72gEIGxraWusMdoRuV54xsWRyf5KeZT0\n" +
64+
"S+I5Prle3Idi3gICiO4NwvMk6JwSBcJWwmSLFEKyUSnB2CtfiGc0/5rQCpcEt/Dn\n" +
65+
"5iM+BNn7fqpoLIbks8rXKUIj8+qMVqkTXsEKeKinE23t1ykMldsNaaOH+hvGti5J\n" +
66+
"t2DMnH1JjoXdDXfxvSP/0gjUYb0ektudYFXoA6wekmQyJeImvgx4Myz1I4iHtkY/\n" +
67+
"Cp7J4Mn1ejZ6HNmyvoTE/4OuY1uCeYv4UyXFc1s1uUyYtj4z57qsHGsS4dQ3A2MJ\n" +
68+
"swIDAQAB\n" +
69+
"-----END PUBLIC KEY-----\n";
70+
71+
static final byte[] testEd25519PrivateKey;
72+
static final byte[] testEd25519PublicKey;
73+
static final ECKey testSecp256k1PrivateKey;
74+
static final ECKey testSecp256k1PublicKey;
1875
static final RSAPrivateKey testRSAPrivateKey;
1976
static final RSAPublicKey testRSAPublicKey;
20-
static final RSAKey rsaKey;
2177

2278
static {
2379

2480
try {
2581

26-
String pem = read(TestUtil.class.getResourceAsStream("publickey.pem"));
82+
testEd25519PrivateKey = Hex.decodeHex(testEd25519PrivateKeyString.toCharArray());
83+
testEd25519PublicKey = Hex.decodeHex(testEd25519PublicKeyString.toCharArray());
84+
} catch (Exception ex) {
85+
86+
throw new RuntimeException(ex.getMessage(), ex);
87+
}
88+
89+
try {
90+
91+
testSecp256k1PrivateKey = ECKey.fromPrivate(Hex.decodeHex(testSecp256k1PrivateKeyString.toCharArray()));
92+
testSecp256k1PublicKey = ECKey.fromPublicOnly(Hex.decodeHex(testSecp256k1PublicKeyString.toCharArray()));
93+
} catch (Exception ex) {
94+
95+
throw new RuntimeException(ex.getMessage(), ex);
96+
}
97+
98+
try {
99+
100+
String pem = testRSAPublicKeyString;
27101
pem = pem.replace("-----BEGIN PUBLIC KEY-----", "").replace("\n", "");
28102
pem = pem.replace("-----END PUBLIC KEY-----", "");
29103

@@ -39,7 +113,7 @@ class TestUtil {
39113

40114
try {
41115

42-
String pem = read(TestUtil.class.getResourceAsStream("privatekey.pem"));
116+
String pem = testRSAPrivateKeyString;
43117
pem = pem.replace("-----BEGIN PRIVATE KEY-----", "").replace("\n", "");
44118
pem = pem.replace("-----END PRIVATE KEY-----", "");
45119

@@ -52,10 +126,6 @@ class TestUtil {
52126

53127
throw new RuntimeException(ex.getMessage(), ex);
54128
}
55-
56-
rsaKey = new com.nimbusds.jose.jwk.RSAKey.Builder(testRSAPublicKey)
57-
.privateKey(testRSAPrivateKey)
58-
.build();
59129
}
60130

61131
static String read(InputStream inputStream) throws Exception {

0 commit comments

Comments
 (0)