Added support for VCDM 2.0
This commit is contained in:
		
							parent
							
								
									c97c455d09
								
							
						
					
					
						commit
						be7e496d47
					
				| @ -13,7 +13,7 @@ public class Ed25519Signature2022LdVerifier extends LdVerifier<Ed25519Signature2 | ||||
| 
 | ||||
|     public Ed25519Signature2022LdVerifier(ByteVerifier verifier) { | ||||
| 
 | ||||
|         super(SignatureSuites.SIGNATURE_SUITE_ED25519SIGNATURE2022, verifier, new URDNA2015Canonicalizer()); | ||||
|         super(SignatureSuites.SIGNATURE_SUITE_ED25519SIGNATURE2022, verifier, new URDNA2015Canonicalizer(Eddsa2022LdProof.builder())); | ||||
|     } | ||||
| 
 | ||||
|     public Ed25519Signature2022LdVerifier(byte[] publicKey) { | ||||
|  | ||||
| @ -0,0 +1,53 @@ | ||||
| package org.oneedtech.inspect.vc.verification; | ||||
| 
 | ||||
| import com.danubetech.keyformats.crypto.ByteVerifier; | ||||
| import com.danubetech.keyformats.crypto.impl.Ed25519_EdDSA_PublicKeyVerifier; | ||||
| import com.danubetech.keyformats.jose.JWSAlgorithm; | ||||
| import info.weboftrust.ldsignatures.LdProof; | ||||
| import info.weboftrust.ldsignatures.verifier.LdVerifier; | ||||
| import io.ipfs.multibase.Multibase; | ||||
| 
 | ||||
| import java.security.GeneralSecurityException; | ||||
| 
 | ||||
| public class Ed25519Signature2022VCDM20LdVerifier extends LdVerifier<Ed25519Signature2022SignatureSuite> { | ||||
| 
 | ||||
|     public Ed25519Signature2022VCDM20LdVerifier(ByteVerifier verifier) { | ||||
| 
 | ||||
|         super(SignatureSuites.SIGNATURE_SUITE_ED25519SIGNATURE2022, verifier, new URDNA2015Canonicalizer(Eddsa2022v2LdProof.builder())); | ||||
|     } | ||||
| 
 | ||||
|     public Ed25519Signature2022VCDM20LdVerifier(byte[] publicKey) { | ||||
| 
 | ||||
|         this(new Ed25519_EdDSA_PublicKeyVerifier(publicKey)); | ||||
|     } | ||||
| 
 | ||||
|     public Ed25519Signature2022VCDM20LdVerifier() { | ||||
| 
 | ||||
|         this((ByteVerifier) null); | ||||
|     } | ||||
| 
 | ||||
|     public static boolean verify(byte[] signingInput, LdProof ldProof, ByteVerifier verifier) throws GeneralSecurityException { | ||||
| 
 | ||||
|         // verify | ||||
| 
 | ||||
|         String proofValue = ldProof.getProofValue(); | ||||
|         if (proofValue == null) throw new GeneralSecurityException("No 'proofValue' in proof."); | ||||
| 
 | ||||
|         boolean verify; | ||||
| 
 | ||||
|         byte[] bytes = Multibase.decode(proofValue); | ||||
|         verify = verifier.verify(signingInput, bytes, JWSAlgorithm.EdDSA); | ||||
| 
 | ||||
|         // done | ||||
| 
 | ||||
|         return verify; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public boolean verify(byte[] signingInput, LdProof ldProof) throws GeneralSecurityException { | ||||
| 
 | ||||
|         return verify(signingInput, ldProof, this.getVerifier()); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| @ -0,0 +1,49 @@ | ||||
| package org.oneedtech.inspect.vc.verification; | ||||
| 
 | ||||
| import java.net.URI; | ||||
| 
 | ||||
| import com.apicatalog.jsonld.loader.DocumentLoader; | ||||
| 
 | ||||
| import foundation.identity.jsonld.JsonLDObject; | ||||
| import foundation.identity.jsonld.JsonLDUtils; | ||||
| import info.weboftrust.ldsignatures.LdProof; | ||||
| 
 | ||||
| public class Eddsa2022v2LdProof extends LdProof { | ||||
| 	public static final URI[] DEFAULT_JSONLD_CONTEXTS = { LDSecurityContexts.JSONLD_CONTEXT_W3ID_VC_V2 }; | ||||
| 	public static final DocumentLoader DEFAULT_DOCUMENT_LOADER = LDSecurityContexts.DOCUMENT_LOADER; | ||||
| 
 | ||||
| 	public static Builder<? extends Builder<?>> builder() { | ||||
| 		return new Builder(new Eddsa2022v2LdProof()); | ||||
| 	} | ||||
| 
 | ||||
| 	/* | ||||
| 	 * Factory methods | ||||
| 	 */ | ||||
| 
 | ||||
| 	public static class Builder<B extends Builder<B>> extends LdProof.Builder<B> { | ||||
| 
 | ||||
| 		private boolean addCryptosuite = true; | ||||
| 
 | ||||
| 		public Builder(LdProof jsonLdObject) { | ||||
| 			super(jsonLdObject); | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| 		public B base(JsonLDObject base) { | ||||
| 			addCryptosuite = false; | ||||
| 			return super.base(base); | ||||
| 		} | ||||
| 
 | ||||
| 		@Override | ||||
| 		public LdProof build() { | ||||
| 			super.build(); | ||||
| 
 | ||||
| 			if (addCryptosuite) { | ||||
| 				JsonLDUtils.jsonLdAdd(this.jsonLdObject, "cryptosuite", "eddsa-rdfc-2022"); | ||||
| 			} | ||||
| 
 | ||||
| 			return (LdProof) this.jsonLdObject; | ||||
| 
 | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -15,6 +15,7 @@ import foundation.identity.jsonld.ConfigurableDocumentLoader; | ||||
| 
 | ||||
| public class LDSecurityContexts { | ||||
|     public static final URI JSONLD_CONTEXT_W3ID_SUITES_ED25519_2022_V1 = URI.create("https://w3id.org/security/data-integrity/v1"); | ||||
|     public static final URI JSONLD_CONTEXT_W3ID_VC_V2 = URI.create("https://www.w3.org/ns/credentials/v2"); | ||||
| 
 | ||||
|     public static final Map<URI, JsonDocument> CONTEXTS; | ||||
|     public static final DocumentLoader DOCUMENT_LOADER; | ||||
| @ -29,6 +30,8 @@ public class LDSecurityContexts { | ||||
| 
 | ||||
|             CONTEXTS.put(JSONLD_CONTEXT_W3ID_SUITES_ED25519_2022_V1, | ||||
|                     JsonDocument.of(MediaType.JSON_LD, Resources.getResource("contexts/data-integrity-v1.jsonld").openStream())); | ||||
|             CONTEXTS.put(JSONLD_CONTEXT_W3ID_VC_V2, | ||||
|                     JsonDocument.of(MediaType.JSON_LD, Resources.getResource("contexts/credentials-v2.jsonld").openStream())); | ||||
| 
 | ||||
|             for (Map.Entry<URI, JsonDocument> context : CONTEXTS.entrySet()) { | ||||
|                 context.getValue().setDocumentUrl(context.getKey()); | ||||
|  | ||||
| @ -1,28 +1,29 @@ | ||||
| package org.oneedtech.inspect.vc.verification; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.security.GeneralSecurityException; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import foundation.identity.jsonld.JsonLDException; | ||||
| import foundation.identity.jsonld.JsonLDObject; | ||||
| import info.weboftrust.ldsignatures.LdProof; | ||||
| import info.weboftrust.ldsignatures.canonicalizer.Canonicalizer; | ||||
| import info.weboftrust.ldsignatures.util.SHAUtil; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.security.GeneralSecurityException; | ||||
| import java.util.List; | ||||
| 
 | ||||
| public class URDNA2015Canonicalizer extends Canonicalizer { | ||||
| 
 | ||||
|     public URDNA2015Canonicalizer() { | ||||
|     private LdProof.Builder<?> proofBuilder; | ||||
| 
 | ||||
|     public URDNA2015Canonicalizer(LdProof.Builder<?> proofBuilder) { | ||||
|         super(List.of("urdna2015")); | ||||
|         this.proofBuilder = proofBuilder; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public byte[] canonicalize(LdProof ldProof, JsonLDObject jsonLdObject) throws IOException, GeneralSecurityException, JsonLDException { | ||||
| 
 | ||||
|         // construct the LD proof without proof values | ||||
| 
 | ||||
|         LdProof ldProofWithoutProofValues = Eddsa2022LdProof.builder() | ||||
|         LdProof ldProofWithoutProofValues = proofBuilder | ||||
|                 .base(ldProof) | ||||
|                 .defaultContexts(true) | ||||
|                 .build(); | ||||
|  | ||||
| @ -1,322 +1,290 @@ | ||||
| { | ||||
|     "@context": { | ||||
|       "@protected": true, | ||||
|       "@vocab": "https://www.w3.org/ns/credentials/issuer-dependent#", | ||||
| 
 | ||||
|       "id": "@id", | ||||
|       "type": "@type", | ||||
| 
 | ||||
|       "kid": { | ||||
|         "@id": "https://www.iana.org/assignments/jose#kid", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "iss": { | ||||
|         "@id": "https://www.iana.org/assignments/jose#iss", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "sub": { | ||||
|         "@id": "https://www.iana.org/assignments/jose#sub", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "jku": { | ||||
|         "@id": "https://www.iana.org/assignments/jose#jku", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "x5u": { | ||||
|         "@id": "https://www.iana.org/assignments/jose#x5u", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "aud": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#aud", | ||||
|         "@type": "@id" | ||||
|       }, | ||||
|       "exp": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#exp", | ||||
|         "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|       }, | ||||
|       "nbf": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#nbf", | ||||
|         "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|       }, | ||||
|       "iat": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#iat", | ||||
|         "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|       }, | ||||
|       "cnf": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#cnf", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
|           "kid": { | ||||
|             "@id": "https://www.iana.org/assignments/jwt#kid", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "jwk": { | ||||
|             "@id": "https://www.iana.org/assignments/jwt#jwk", | ||||
|             "@type": "@json" | ||||
|           } | ||||
|   "@context": { | ||||
|     "@protected": true, | ||||
|     "@vocab": "https://www.w3.org/ns/credentials/issuer-dependent#", | ||||
|     "id": "@id", | ||||
|     "type": "@type", | ||||
|     "kid": { | ||||
|       "@id": "https://www.iana.org/assignments/jose#kid", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "iss": { | ||||
|       "@id": "https://www.iana.org/assignments/jose#iss", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "sub": { | ||||
|       "@id": "https://www.iana.org/assignments/jose#sub", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "jku": { | ||||
|       "@id": "https://www.iana.org/assignments/jose#jku", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "x5u": { | ||||
|       "@id": "https://www.iana.org/assignments/jose#x5u", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "aud": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#aud", | ||||
|       "@type": "@id" | ||||
|     }, | ||||
|     "exp": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#exp", | ||||
|       "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|     }, | ||||
|     "nbf": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#nbf", | ||||
|       "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|     }, | ||||
|     "iat": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#iat", | ||||
|       "@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger" | ||||
|     }, | ||||
|     "cnf": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#cnf", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "kid": { | ||||
|           "@id": "https://www.iana.org/assignments/jwt#kid", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "jwk": { | ||||
|           "@id": "https://www.iana.org/assignments/jwt#jwk", | ||||
|           "@type": "@json" | ||||
|         } | ||||
|       }, | ||||
|       "_sd_alg": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#_sd_alg" | ||||
|       }, | ||||
|       "_sd": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#_sd" | ||||
|       }, | ||||
|       "...": { | ||||
|         "@id": "https://www.iana.org/assignments/jwt#..." | ||||
|       }, | ||||
| 
 | ||||
|       "digestSRI": { | ||||
|         "@id": "https://www.w3.org/2018/credentials#digestSRI", | ||||
|         "@type": "https://www.w3.org/2018/credentials#sriString" | ||||
|       }, | ||||
|       "digestMultibase": { | ||||
|         "@id": "https://w3id.org/security#digestMultibase", | ||||
|         "@type": "https://w3id.org/security#multibase" | ||||
|       }, | ||||
| 
 | ||||
|       "mediaType": { | ||||
|         "@id": "https://schema.org/encodingFormat" | ||||
|       }, | ||||
| 
 | ||||
|       "description": "https://schema.org/description", | ||||
|       "name": "https://schema.org/name", | ||||
| 
 | ||||
|       "EnvelopedVerifiableCredential": | ||||
|         "https://www.w3.org/2018/credentials#EnvelopedVerifiableCredential", | ||||
| 
 | ||||
|       "VerifiableCredential": { | ||||
|         "@id": "https://www.w3.org/2018/credentials#VerifiableCredential", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
| 
 | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
| 
 | ||||
|           "credentialSchema": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#credentialSchema", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "credentialStatus": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#credentialStatus", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "credentialSubject": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#credentialSubject", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "description": "https://schema.org/description", | ||||
|           "evidence": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#evidence", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "validFrom": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#validFrom", | ||||
|             "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|           }, | ||||
|           "validUntil": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#validUntil", | ||||
|             "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|           }, | ||||
|           "issuer": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#issuer", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "name": "https://schema.org/name", | ||||
|           "proof": { | ||||
|             "@id": "https://w3id.org/security#proof", | ||||
|             "@type": "@id", | ||||
|             "@container": "@graph" | ||||
|           }, | ||||
|           "refreshService": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#refreshService", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "termsOfUse": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#termsOfUse", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "confidenceMethod": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#confidenceMethod", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "relatedResource": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#relatedResource", | ||||
|             "@type": "@id" | ||||
|           } | ||||
|       } | ||||
|     }, | ||||
|     "_sd_alg": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#_sd_alg" | ||||
|     }, | ||||
|     "_sd": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#_sd" | ||||
|     }, | ||||
|     "...": { | ||||
|       "@id": "https://www.iana.org/assignments/jwt#..." | ||||
|     }, | ||||
|     "digestSRI": { | ||||
|       "@id": "https://www.w3.org/2018/credentials#digestSRI", | ||||
|       "@type": "https://www.w3.org/2018/credentials#sriString" | ||||
|     }, | ||||
|     "digestMultibase": { | ||||
|       "@id": "https://w3id.org/security#digestMultibase", | ||||
|       "@type": "https://w3id.org/security#multibase" | ||||
|     }, | ||||
|     "mediaType": { | ||||
|       "@id": "https://schema.org/encodingFormat" | ||||
|     }, | ||||
|     "description": "https://schema.org/description", | ||||
|     "name": "https://schema.org/name", | ||||
|     "EnvelopedVerifiableCredential": "https://www.w3.org/2018/credentials#EnvelopedVerifiableCredential", | ||||
|     "VerifiableCredential": { | ||||
|       "@id": "https://www.w3.org/2018/credentials#VerifiableCredential", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "credentialSchema": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#credentialSchema", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "credentialStatus": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#credentialStatus", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "credentialSubject": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#credentialSubject", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "description": "https://schema.org/description", | ||||
|         "evidence": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#evidence", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "validFrom": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#validFrom", | ||||
|           "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|         }, | ||||
|         "validUntil": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#validUntil", | ||||
|           "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|         }, | ||||
|         "issuer": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#issuer", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "name": "https://schema.org/name", | ||||
|         "proof": { | ||||
|           "@id": "https://w3id.org/security#proof", | ||||
|           "@type": "@id", | ||||
|           "@container": "@graph" | ||||
|         }, | ||||
|         "refreshService": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#refreshService", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "termsOfUse": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#termsOfUse", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "confidenceMethod": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#confidenceMethod", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "relatedResource": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#relatedResource", | ||||
|           "@type": "@id" | ||||
|         } | ||||
|       }, | ||||
| 
 | ||||
|       "VerifiablePresentation": { | ||||
|         "@id": "https://www.w3.org/2018/credentials#VerifiablePresentation", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
| 
 | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
| 
 | ||||
|           "holder": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#holder", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "proof": { | ||||
|             "@id": "https://w3id.org/security#proof", | ||||
|             "@type": "@id", | ||||
|             "@container": "@graph" | ||||
|           }, | ||||
|           "verifiableCredential": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#verifiableCredential", | ||||
|             "@type": "@id", | ||||
|             "@container": "@graph", | ||||
|             "@context": null | ||||
|           }, | ||||
|           "termsOfUse": { | ||||
|             "@id": "https://www.w3.org/2018/credentials#termsOfUse", | ||||
|             "@type": "@id" | ||||
|           } | ||||
|       } | ||||
|     }, | ||||
|     "VerifiablePresentation": { | ||||
|       "@id": "https://www.w3.org/2018/credentials#VerifiablePresentation", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "holder": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#holder", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "proof": { | ||||
|           "@id": "https://w3id.org/security#proof", | ||||
|           "@type": "@id", | ||||
|           "@container": "@graph" | ||||
|         }, | ||||
|         "verifiableCredential": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#verifiableCredential", | ||||
|           "@type": "@id", | ||||
|           "@container": "@graph", | ||||
|           "@context": null | ||||
|         }, | ||||
|         "termsOfUse": { | ||||
|           "@id": "https://www.w3.org/2018/credentials#termsOfUse", | ||||
|           "@type": "@id" | ||||
|         } | ||||
|       }, | ||||
| 
 | ||||
|       "JsonSchemaCredential": "https://www.w3.org/2018/credentials#JsonSchemaCredential", | ||||
| 
 | ||||
|       "JsonSchema": { | ||||
|         "@id": "https://www.w3.org/2018/credentials#JsonSchema", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
| 
 | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
| 
 | ||||
|           "jsonSchema": { | ||||
|             "@id": "https://w3.org/2018/credentials#jsonSchema", | ||||
|             "@type": "@json" | ||||
|           } | ||||
|       } | ||||
|     }, | ||||
|     "JsonSchemaCredential": "https://www.w3.org/2018/credentials#JsonSchemaCredential", | ||||
|     "JsonSchema": { | ||||
|       "@id": "https://www.w3.org/2018/credentials#JsonSchema", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "jsonSchema": { | ||||
|           "@id": "https://w3.org/2018/credentials#jsonSchema", | ||||
|           "@type": "@json" | ||||
|         } | ||||
|       }, | ||||
| 
 | ||||
|       "BitstringStatusListCredential": "https://www.w3.org/ns/credentials/status#BitstringStatusListCredential", | ||||
| 
 | ||||
|       "BitstringStatusList": { | ||||
|         "@id": "https://www.w3.org/ns/credentials/status#BitstringStatusList", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
| 
 | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
| 
 | ||||
|           "statusPurpose": | ||||
|             "https://www.w3.org/ns/credentials/status#statusPurpose", | ||||
|           "encodedList": { | ||||
|             "@id": "https://www.w3.org/ns/credentials/status#encodedList", | ||||
|             "@type": "https://w3id.org/security#multibase" | ||||
|           }, | ||||
|           "ttl": "https://www.w3.org/ns/credentials/status#ttl", | ||||
|           "statusReference": "https://www.w3.org/ns/credentials/status#statusReference", | ||||
|           "statusSize": "https://www.w3.org/ns/credentials/status#statusSize", | ||||
|           "statusMessage": { | ||||
|             "@id": "https://www.w3.org/ns/credentials/status#statusMessage", | ||||
|             "@context": { | ||||
|               "@protected": true, | ||||
| 
 | ||||
|               "id": "@id", | ||||
|               "type": "@type", | ||||
| 
 | ||||
|               "status": "https://www.w3.org/ns/credentials/status#status", | ||||
|               "message": "https://www.w3.org/ns/credentials/status#message" | ||||
|             } | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
| 
 | ||||
|       "BitstringStatusListEntry": { | ||||
|         "@id": | ||||
|           "https://www.w3.org/ns/credentials/status#BitstringStatusListEntry", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
| 
 | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
| 
 | ||||
|           "statusPurpose": | ||||
|             "https://www.w3.org/ns/credentials/status#statusPurpose", | ||||
|           "statusListIndex": | ||||
|             "https://www.w3.org/ns/credentials/status#statusListIndex", | ||||
|           "statusListCredential": { | ||||
|             "@id": | ||||
|               "https://www.w3.org/ns/credentials/status#statusListCredential", | ||||
|             "@type": "@id" | ||||
|           } | ||||
|         } | ||||
|       }, | ||||
| 
 | ||||
|       "DataIntegrityProof": { | ||||
|         "@id": "https://w3id.org/security#DataIntegrityProof", | ||||
|         "@context": { | ||||
|           "@protected": true, | ||||
|           "id": "@id", | ||||
|           "type": "@type", | ||||
|           "challenge": "https://w3id.org/security#challenge", | ||||
|           "created": { | ||||
|             "@id": "http://purl.org/dc/terms/created", | ||||
|             "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|           }, | ||||
|           "domain": "https://w3id.org/security#domain", | ||||
|           "expires": { | ||||
|             "@id": "https://w3id.org/security#expiration", | ||||
|             "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|           }, | ||||
|           "nonce": "https://w3id.org/security#nonce", | ||||
|           "previousProof": { | ||||
|             "@id": "https://w3id.org/security#previousProof", | ||||
|             "@type": "@id" | ||||
|           }, | ||||
|           "proofPurpose": { | ||||
|             "@id": "https://w3id.org/security#proofPurpose", | ||||
|             "@type": "@vocab", | ||||
|             "@context": { | ||||
|               "@protected": true, | ||||
|               "id": "@id", | ||||
|               "type": "@type", | ||||
|               "assertionMethod": { | ||||
|                 "@id": "https://w3id.org/security#assertionMethod", | ||||
|                 "@type": "@id", | ||||
|                 "@container": "@set" | ||||
|               }, | ||||
|               "authentication": { | ||||
|                 "@id": "https://w3id.org/security#authenticationMethod", | ||||
|                 "@type": "@id", | ||||
|                 "@container": "@set" | ||||
|               }, | ||||
|               "capabilityInvocation": { | ||||
|                 "@id": "https://w3id.org/security#capabilityInvocationMethod", | ||||
|                 "@type": "@id", | ||||
|                 "@container": "@set" | ||||
|               }, | ||||
|               "capabilityDelegation": { | ||||
|                 "@id": "https://w3id.org/security#capabilityDelegationMethod", | ||||
|                 "@type": "@id", | ||||
|                 "@container": "@set" | ||||
|               }, | ||||
|               "keyAgreement": { | ||||
|                 "@id": "https://w3id.org/security#keyAgreementMethod", | ||||
|                 "@type": "@id", | ||||
|                 "@container": "@set" | ||||
|               } | ||||
|             } | ||||
|           }, | ||||
|           "cryptosuite": { | ||||
|             "@id": "https://w3id.org/security#cryptosuite", | ||||
|             "@type": "https://w3id.org/security#cryptosuiteString" | ||||
|           }, | ||||
|           "proofValue": { | ||||
|             "@id": "https://w3id.org/security#proofValue", | ||||
|             "@type": "https://w3id.org/security#multibase" | ||||
|           }, | ||||
|           "verificationMethod": { | ||||
|             "@id": "https://w3id.org/security#verificationMethod", | ||||
|             "@type": "@id" | ||||
|       } | ||||
|     }, | ||||
|     "BitstringStatusListCredential": "https://www.w3.org/ns/credentials/status#BitstringStatusListCredential", | ||||
|     "BitstringStatusList": { | ||||
|       "@id": "https://www.w3.org/ns/credentials/status#BitstringStatusList", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "statusPurpose": "https://www.w3.org/ns/credentials/status#statusPurpose", | ||||
|         "encodedList": { | ||||
|           "@id": "https://www.w3.org/ns/credentials/status#encodedList", | ||||
|           "@type": "https://w3id.org/security#multibase" | ||||
|         }, | ||||
|         "ttl": "https://www.w3.org/ns/credentials/status#ttl", | ||||
|         "statusReference": "https://www.w3.org/ns/credentials/status#statusReference", | ||||
|         "statusSize": "https://www.w3.org/ns/credentials/status#statusSize", | ||||
|         "statusMessage": { | ||||
|           "@id": "https://www.w3.org/ns/credentials/status#statusMessage", | ||||
|           "@context": { | ||||
|             "@protected": true, | ||||
|             "id": "@id", | ||||
|             "type": "@type", | ||||
|             "status": "https://www.w3.org/ns/credentials/status#status", | ||||
|             "message": "https://www.w3.org/ns/credentials/status#message" | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "BitstringStatusListEntry": { | ||||
|       "@id": "https://www.w3.org/ns/credentials/status#BitstringStatusListEntry", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "statusPurpose": "https://www.w3.org/ns/credentials/status#statusPurpose", | ||||
|         "statusListIndex": "https://www.w3.org/ns/credentials/status#statusListIndex", | ||||
|         "statusListCredential": { | ||||
|           "@id": "https://www.w3.org/ns/credentials/status#statusListCredential", | ||||
|           "@type": "@id" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "DataIntegrityProof": { | ||||
|       "@id": "https://w3id.org/security#DataIntegrityProof", | ||||
|       "@context": { | ||||
|         "@protected": true, | ||||
|         "id": "@id", | ||||
|         "type": "@type", | ||||
|         "challenge": "https://w3id.org/security#challenge", | ||||
|         "created": { | ||||
|           "@id": "http://purl.org/dc/terms/created", | ||||
|           "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|         }, | ||||
|         "domain": "https://w3id.org/security#domain", | ||||
|         "expires": { | ||||
|           "@id": "https://w3id.org/security#expiration", | ||||
|           "@type": "http://www.w3.org/2001/XMLSchema#dateTime" | ||||
|         }, | ||||
|         "nonce": "https://w3id.org/security#nonce", | ||||
|         "previousProof": { | ||||
|           "@id": "https://w3id.org/security#previousProof", | ||||
|           "@type": "@id" | ||||
|         }, | ||||
|         "proofPurpose": { | ||||
|           "@id": "https://w3id.org/security#proofPurpose", | ||||
|           "@type": "@vocab", | ||||
|           "@context": { | ||||
|             "@protected": true, | ||||
|             "id": "@id", | ||||
|             "type": "@type", | ||||
|             "assertionMethod": { | ||||
|               "@id": "https://w3id.org/security#assertionMethod", | ||||
|               "@type": "@id", | ||||
|               "@container": "@set" | ||||
|             }, | ||||
|             "authentication": { | ||||
|               "@id": "https://w3id.org/security#authenticationMethod", | ||||
|               "@type": "@id", | ||||
|               "@container": "@set" | ||||
|             }, | ||||
|             "capabilityInvocation": { | ||||
|               "@id": "https://w3id.org/security#capabilityInvocationMethod", | ||||
|               "@type": "@id", | ||||
|               "@container": "@set" | ||||
|             }, | ||||
|             "capabilityDelegation": { | ||||
|               "@id": "https://w3id.org/security#capabilityDelegationMethod", | ||||
|               "@type": "@id", | ||||
|               "@container": "@set" | ||||
|             }, | ||||
|             "keyAgreement": { | ||||
|               "@id": "https://w3id.org/security#keyAgreementMethod", | ||||
|               "@type": "@id", | ||||
|               "@container": "@set" | ||||
|             } | ||||
|           } | ||||
|         }, | ||||
|         "cryptosuite": { | ||||
|           "@id": "https://w3id.org/security#cryptosuite", | ||||
|           "@type": "https://w3id.org/security#cryptosuiteString" | ||||
|         }, | ||||
|         "proofValue": { | ||||
|           "@id": "https://w3id.org/security#proofValue", | ||||
|           "@type": "https://w3id.org/security#multibase" | ||||
|         }, | ||||
|         "verificationMethod": { | ||||
|           "@id": "https://w3id.org/security#verificationMethod", | ||||
|           "@type": "@id" | ||||
|         } | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   } | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user