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) {
|
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) {
|
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 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_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 Map<URI, JsonDocument> CONTEXTS;
|
||||||
public static final DocumentLoader DOCUMENT_LOADER;
|
public static final DocumentLoader DOCUMENT_LOADER;
|
||||||
@ -29,6 +30,8 @@ public class LDSecurityContexts {
|
|||||||
|
|
||||||
CONTEXTS.put(JSONLD_CONTEXT_W3ID_SUITES_ED25519_2022_V1,
|
CONTEXTS.put(JSONLD_CONTEXT_W3ID_SUITES_ED25519_2022_V1,
|
||||||
JsonDocument.of(MediaType.JSON_LD, Resources.getResource("contexts/data-integrity-v1.jsonld").openStream()));
|
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()) {
|
for (Map.Entry<URI, JsonDocument> context : CONTEXTS.entrySet()) {
|
||||||
context.getValue().setDocumentUrl(context.getKey());
|
context.getValue().setDocumentUrl(context.getKey());
|
||||||
|
@ -1,28 +1,29 @@
|
|||||||
package org.oneedtech.inspect.vc.verification;
|
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.JsonLDException;
|
||||||
import foundation.identity.jsonld.JsonLDObject;
|
import foundation.identity.jsonld.JsonLDObject;
|
||||||
import info.weboftrust.ldsignatures.LdProof;
|
import info.weboftrust.ldsignatures.LdProof;
|
||||||
import info.weboftrust.ldsignatures.canonicalizer.Canonicalizer;
|
import info.weboftrust.ldsignatures.canonicalizer.Canonicalizer;
|
||||||
import info.weboftrust.ldsignatures.util.SHAUtil;
|
import info.weboftrust.ldsignatures.util.SHAUtil;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.security.GeneralSecurityException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class URDNA2015Canonicalizer extends Canonicalizer {
|
public class URDNA2015Canonicalizer extends Canonicalizer {
|
||||||
|
|
||||||
public URDNA2015Canonicalizer() {
|
private LdProof.Builder<?> proofBuilder;
|
||||||
|
|
||||||
|
public URDNA2015Canonicalizer(LdProof.Builder<?> proofBuilder) {
|
||||||
super(List.of("urdna2015"));
|
super(List.of("urdna2015"));
|
||||||
|
this.proofBuilder = proofBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] canonicalize(LdProof ldProof, JsonLDObject jsonLdObject) throws IOException, GeneralSecurityException, JsonLDException {
|
public byte[] canonicalize(LdProof ldProof, JsonLDObject jsonLdObject) throws IOException, GeneralSecurityException, JsonLDException {
|
||||||
|
|
||||||
// construct the LD proof without proof values
|
// construct the LD proof without proof values
|
||||||
|
LdProof ldProofWithoutProofValues = proofBuilder
|
||||||
LdProof ldProofWithoutProofValues = Eddsa2022LdProof.builder()
|
|
||||||
.base(ldProof)
|
.base(ldProof)
|
||||||
.defaultContexts(true)
|
.defaultContexts(true)
|
||||||
.build();
|
.build();
|
||||||
|
@ -1,322 +1,290 @@
|
|||||||
{
|
{
|
||||||
"@context": {
|
"@context": {
|
||||||
"@protected": true,
|
"@protected": true,
|
||||||
"@vocab": "https://www.w3.org/ns/credentials/issuer-dependent#",
|
"@vocab": "https://www.w3.org/ns/credentials/issuer-dependent#",
|
||||||
|
"id": "@id",
|
||||||
"id": "@id",
|
"type": "@type",
|
||||||
"type": "@type",
|
"kid": {
|
||||||
|
"@id": "https://www.iana.org/assignments/jose#kid",
|
||||||
"kid": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jose#kid",
|
},
|
||||||
"@type": "@id"
|
"iss": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jose#iss",
|
||||||
"iss": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jose#iss",
|
},
|
||||||
"@type": "@id"
|
"sub": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jose#sub",
|
||||||
"sub": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jose#sub",
|
},
|
||||||
"@type": "@id"
|
"jku": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jose#jku",
|
||||||
"jku": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jose#jku",
|
},
|
||||||
"@type": "@id"
|
"x5u": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jose#x5u",
|
||||||
"x5u": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jose#x5u",
|
},
|
||||||
"@type": "@id"
|
"aud": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jwt#aud",
|
||||||
"aud": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jwt#aud",
|
},
|
||||||
"@type": "@id"
|
"exp": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jwt#exp",
|
||||||
"exp": {
|
"@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger"
|
||||||
"@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",
|
||||||
"nbf": {
|
"@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger"
|
||||||
"@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",
|
||||||
"iat": {
|
"@type": "https://www.w3.org/2001/XMLSchema#nonNegativeInteger"
|
||||||
"@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",
|
||||||
"cnf": {
|
"@context": {
|
||||||
"@id": "https://www.iana.org/assignments/jwt#cnf",
|
"@protected": true,
|
||||||
"@context": {
|
"kid": {
|
||||||
"@protected": true,
|
"@id": "https://www.iana.org/assignments/jwt#kid",
|
||||||
"kid": {
|
"@type": "@id"
|
||||||
"@id": "https://www.iana.org/assignments/jwt#kid",
|
},
|
||||||
"@type": "@id"
|
"jwk": {
|
||||||
},
|
"@id": "https://www.iana.org/assignments/jwt#jwk",
|
||||||
"jwk": {
|
"@type": "@json"
|
||||||
"@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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"_sd_alg": {
|
},
|
||||||
"@id": "https://www.iana.org/assignments/jwt#_sd_alg"
|
"BitstringStatusListEntry": {
|
||||||
},
|
"@id": "https://www.w3.org/ns/credentials/status#BitstringStatusListEntry",
|
||||||
"_sd": {
|
"@context": {
|
||||||
"@id": "https://www.iana.org/assignments/jwt#_sd"
|
"@protected": true,
|
||||||
},
|
"id": "@id",
|
||||||
"...": {
|
"type": "@type",
|
||||||
"@id": "https://www.iana.org/assignments/jwt#..."
|
"statusPurpose": "https://www.w3.org/ns/credentials/status#statusPurpose",
|
||||||
},
|
"statusListIndex": "https://www.w3.org/ns/credentials/status#statusListIndex",
|
||||||
|
"statusListCredential": {
|
||||||
"digestSRI": {
|
"@id": "https://www.w3.org/ns/credentials/status#statusListCredential",
|
||||||
"@id": "https://www.w3.org/2018/credentials#digestSRI",
|
"@type": "@id"
|
||||||
"@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": {
|
"DataIntegrityProof": {
|
||||||
"@id": "https://www.w3.org/2018/credentials#VerifiablePresentation",
|
"@id": "https://w3id.org/security#DataIntegrityProof",
|
||||||
"@context": {
|
"@context": {
|
||||||
"@protected": true,
|
"@protected": true,
|
||||||
|
"id": "@id",
|
||||||
"id": "@id",
|
"type": "@type",
|
||||||
"type": "@type",
|
"challenge": "https://w3id.org/security#challenge",
|
||||||
|
"created": {
|
||||||
"holder": {
|
"@id": "http://purl.org/dc/terms/created",
|
||||||
"@id": "https://www.w3.org/2018/credentials#holder",
|
"@type": "http://www.w3.org/2001/XMLSchema#dateTime"
|
||||||
"@type": "@id"
|
},
|
||||||
},
|
"domain": "https://w3id.org/security#domain",
|
||||||
"proof": {
|
"expires": {
|
||||||
"@id": "https://w3id.org/security#proof",
|
"@id": "https://w3id.org/security#expiration",
|
||||||
"@type": "@id",
|
"@type": "http://www.w3.org/2001/XMLSchema#dateTime"
|
||||||
"@container": "@graph"
|
},
|
||||||
},
|
"nonce": "https://w3id.org/security#nonce",
|
||||||
"verifiableCredential": {
|
"previousProof": {
|
||||||
"@id": "https://www.w3.org/2018/credentials#verifiableCredential",
|
"@id": "https://w3id.org/security#previousProof",
|
||||||
"@type": "@id",
|
"@type": "@id"
|
||||||
"@container": "@graph",
|
},
|
||||||
"@context": null
|
"proofPurpose": {
|
||||||
},
|
"@id": "https://w3id.org/security#proofPurpose",
|
||||||
"termsOfUse": {
|
"@type": "@vocab",
|
||||||
"@id": "https://www.w3.org/2018/credentials#termsOfUse",
|
"@context": {
|
||||||
"@type": "@id"
|
"@protected": true,
|
||||||
}
|
"id": "@id",
|
||||||
}
|
"type": "@type",
|
||||||
},
|
"assertionMethod": {
|
||||||
|
"@id": "https://w3id.org/security#assertionMethod",
|
||||||
"JsonSchemaCredential": "https://www.w3.org/2018/credentials#JsonSchemaCredential",
|
"@type": "@id",
|
||||||
|
"@container": "@set"
|
||||||
"JsonSchema": {
|
},
|
||||||
"@id": "https://www.w3.org/2018/credentials#JsonSchema",
|
"authentication": {
|
||||||
"@context": {
|
"@id": "https://w3id.org/security#authenticationMethod",
|
||||||
"@protected": true,
|
"@type": "@id",
|
||||||
|
"@container": "@set"
|
||||||
"id": "@id",
|
},
|
||||||
"type": "@type",
|
"capabilityInvocation": {
|
||||||
|
"@id": "https://w3id.org/security#capabilityInvocationMethod",
|
||||||
"jsonSchema": {
|
"@type": "@id",
|
||||||
"@id": "https://w3.org/2018/credentials#jsonSchema",
|
"@container": "@set"
|
||||||
"@type": "@json"
|
},
|
||||||
}
|
"capabilityDelegation": {
|
||||||
}
|
"@id": "https://w3id.org/security#capabilityDelegationMethod",
|
||||||
},
|
"@type": "@id",
|
||||||
|
"@container": "@set"
|
||||||
"BitstringStatusListCredential": "https://www.w3.org/ns/credentials/status#BitstringStatusListCredential",
|
},
|
||||||
|
"keyAgreement": {
|
||||||
"BitstringStatusList": {
|
"@id": "https://w3id.org/security#keyAgreementMethod",
|
||||||
"@id": "https://www.w3.org/ns/credentials/status#BitstringStatusList",
|
"@type": "@id",
|
||||||
"@context": {
|
"@container": "@set"
|
||||||
"@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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
},
|
"cryptosuite": {
|
||||||
|
"@id": "https://w3id.org/security#cryptosuite",
|
||||||
"BitstringStatusListEntry": {
|
"@type": "https://w3id.org/security#cryptosuiteString"
|
||||||
"@id":
|
},
|
||||||
"https://www.w3.org/ns/credentials/status#BitstringStatusListEntry",
|
"proofValue": {
|
||||||
"@context": {
|
"@id": "https://w3id.org/security#proofValue",
|
||||||
"@protected": true,
|
"@type": "https://w3id.org/security#multibase"
|
||||||
|
},
|
||||||
"id": "@id",
|
"verificationMethod": {
|
||||||
"type": "@type",
|
"@id": "https://w3id.org/security#verificationMethod",
|
||||||
|
"@type": "@id"
|
||||||
"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…
Reference in New Issue
Block a user