@@ -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