diff --git a/inspector-vc/pom.xml b/inspector-vc/pom.xml
index d0c5c65..841ab84 100644
--- a/inspector-vc/pom.xml
+++ b/inspector-vc/pom.xml
@@ -12,7 +12,7 @@
org.1edtech
inspector-core
-
+
com.auth0
auth0
@@ -28,14 +28,30 @@
java-jwt
3.19.2
+
+
+
+ com.danubetech
+ verifiable-credentials-java
+
+ 1.1-SNAPSHOT
+
+
+
+
+ com.danubetech
+ key-formats-java
+ 2.1-SNAPSHOT
+
+
com.apicatalog
iron-verifiable-credentials-jre8
0.7.0
-
-
+
+
com.apicatalog
titanium-json-ld
@@ -48,27 +64,22 @@
4.5.13
-
+
org.glassfish
jakarta.json
2.0.1
+
+
+
+ danubetech-maven-public
+ https://repo.danubetech.com/repository/maven-public/
+
+
\ No newline at end of file
diff --git a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/EmbeddedProofProbe.java b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/EmbeddedProofProbe.java
index b3f3140..0beff3c 100644
--- a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/EmbeddedProofProbe.java
+++ b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/probe/EmbeddedProofProbe.java
@@ -1,6 +1,7 @@
package org.oneedtech.inspect.vc.probe;
import java.io.StringReader;
+import java.net.URI;
import org.oneedtech.inspect.core.probe.Probe;
import org.oneedtech.inspect.core.probe.RunContext;
@@ -8,23 +9,50 @@ import org.oneedtech.inspect.core.report.ReportItems;
import org.oneedtech.inspect.vc.Credential;
import org.oneedtech.inspect.vc.util.CachingDocumentLoader;
-import com.apicatalog.jsonld.document.JsonDocument;
import com.apicatalog.ld.DocumentError;
-import com.apicatalog.ld.signature.VerificationError;
-import com.apicatalog.ld.signature.VerificationError.Code;
-import com.apicatalog.vc.Vc;
import com.apicatalog.vc.processor.StatusVerifier;
+import com.danubetech.verifiablecredentials.VerifiableCredential;
-import jakarta.json.JsonObject;
+import info.weboftrust.ldsignatures.verifier.Ed25519Signature2020LdVerifier;
/**
* A Probe that verifies a credential's embedded proof.
* @author mgylling
*/
public class EmbeddedProofProbe extends Probe {
+
+ public EmbeddedProofProbe() {
+ super(ID);
+ }
+
+
+ /*
+ * Using verifiable-credentials-java (https://github.com/danubetech/verifiable-credentials-java)
+ */
+ @Override
+ public ReportItems run(Credential crd, RunContext ctx) throws Exception {
+
+ VerifiableCredential vc = VerifiableCredential.fromJson(new StringReader(crd.getJson().toString()));
+ vc.setDocumentLoader(new CachingDocumentLoader());
+
+ URI method = vc.getLdProof().getVerificationMethod();
+ byte[] publicKey = method.toString().getBytes();
+
+ Ed25519Signature2020LdVerifier verifier = new Ed25519Signature2020LdVerifier(publicKey);
+
+ try {
+ verifier.verify(vc);
+ } catch (Exception e) {
+ return fatal("Embedded proof verification failed:" + e.getMessage(), ctx);
+ }
+
+ return success(ctx);
+ }
+
+
/*
- * Note: using com.apicatalog Iron, we get a generic VC verifier that
+ * Note: if using com.apicatalog Iron, we get a generic VC verifier that
* will test other stuff than the Proof. So sometimes it may be that
* Iron internally retests something that we're already testing out in the
* Inspector class (e.g. expiration). But use this for now -- and remember
@@ -32,39 +60,38 @@ public class EmbeddedProofProbe extends Probe {
* (aka is not a jwt).
*/
- public EmbeddedProofProbe() {
- super(ID);
- }
-
- @Override
- public ReportItems run(Credential crd, RunContext ctx) throws Exception {
- JsonDocument jsonDoc = JsonDocument.of(new StringReader(crd.getJson().toString()));
- JsonObject json = jsonDoc.getJsonContent().get().asJsonObject();
- try {
- Vc.verify(json)
- .loader(new CachingDocumentLoader())
- .useBundledContexts(false) //we control the cache in the loader
- .statusVerifier(new NoopStatusVerifier())
- //.domain(...)
- //.didResolver(...)
- .isValid();
- } catch (DocumentError e) {
- return error(e.getType() + " " + e.getSubject(), ctx);
- } catch (VerificationError e) {
- //System.err.println(e.getCode() + " (ProofVerifierProbe)");
- if(e.getCode() == Code.Internal) {
- return exception(e.getMessage(), ctx.getResource());
- } else if(e.getCode().equals(Code.Expired)) {
- //handled by other probe
- } else {
- return fatal(e.getCode().name() + " " + e.getMessage(), ctx);
- }
-
- }
- return success(ctx);
- }
+// /*
+// * Using iron-verifiable-credentials (https://github.com/filip26/iron-verifiable-credentials)
+// */
+// @Override
+// public ReportItems run(Credential crd, RunContext ctx) throws Exception {
+// JsonDocument jsonDoc = JsonDocument.of(new StringReader(crd.getJson().toString()));
+// JsonObject json = jsonDoc.getJsonContent().get().asJsonObject();
+// try {
+// Vc.verify(json)
+// .loader(new CachingDocumentLoader())
+// .useBundledContexts(false) //we control the cache in the loader
+// .statusVerifier(new IronNoopStatusVerifier())
+// //.domain(...)
+// //.didResolver(...)
+// .isValid();
+// } catch (DocumentError e) {
+// return error(e.getType() + " " + e.getSubject(), ctx);
+// } catch (VerificationError e) {
+// //System.err.println(e.getCode() + " (ProofVerifierProbe)");
+// if(e.getCode() == Code.Internal) {
+// return exception(e.getMessage(), ctx.getResource());
+// } else if(e.getCode().equals(Code.Expired)) {
+// //handled by other probe
+// } else {
+// return fatal(e.getCode().name() + " " + e.getMessage(), ctx);
+// }
+//
+// }
+// return success(ctx);
+// }
- private static final class NoopStatusVerifier implements StatusVerifier {
+ private static final class IronNoopStatusVerifier implements StatusVerifier {
@Override
public void verify(Status status) throws DocumentError, VerifyError {
// noop
diff --git a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/util/CachingDocumentLoader.java b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/util/CachingDocumentLoader.java
index 2cefa2e..3c97a09 100644
--- a/inspector-vc/src/main/java/org/oneedtech/inspect/vc/util/CachingDocumentLoader.java
+++ b/inspector-vc/src/main/java/org/oneedtech/inspect/vc/util/CachingDocumentLoader.java
@@ -22,47 +22,54 @@ import com.google.common.collect.ImmutableMap;
import com.google.common.io.Resources;
/**
- * A com.apicatalog DocumentLoader with a threadsafe static cache.
+ * A com.apicatalog DocumentLoader with a threadsafe static cache.
+ *
* @author mgylling
*/
public class CachingDocumentLoader implements DocumentLoader {
-
+
@Override
- public Document loadDocument(URI url, DocumentLoaderOptions options) throws JsonLdError {
+ public Document loadDocument(URI url, DocumentLoaderOptions options) throws JsonLdError {
Tuple tpl = new Tuple<>(url.toASCIIString(), options);
try {
- return documentCache.get(tpl);
+ return documentCache.get(tpl);
} catch (Exception e) {
logger.error("documentCache not able to load {}", url);
throw new JsonLdError(JsonLdErrorCode.INVALID_REMOTE_CONTEXT, e.getMessage());
- }
+ }
}
-
- static final ImmutableMap bundled = ImmutableMap.builder()
- .put("https://www.w3.org/ns/did/v1", Resources.getResource("contexts/did-v1.jsonld"))
- .put("https://www.w3.org/ns/odrl.jsonld", Resources.getResource("contexts/odrl.jsonld"))
- .put("https://w3id.org/security/suites/ed25519-2020/v1", Resources.getResource("contexts/security-suites-ed25519-2020-v1.jsonld"))
- .put("https://www.w3.org/2018/credentials/v1", Resources.getResource("contexts/2018-credentials-v1.jsonld"))
- .put("https://imsglobal.github.io/openbadges-specification/context.json", Resources.getResource("contexts/obv3.jsonld"))
- .build();
-
+
+ static final ImmutableMap bundled = ImmutableMap.builder()
+ .put("https://www.w3.org/ns/did/v1", Resources.getResource("contexts/did-v1.jsonld"))
+ .put("https://www.w3.org/ns/odrl.jsonld", Resources.getResource("contexts/odrl.jsonld"))
+ .put("https://w3id.org/security/suites/ed25519-2020/v1",Resources.getResource("contexts/security-suites-ed25519-2020-v1.jsonld"))
+ .put("https://www.w3.org/2018/credentials/v1", Resources.getResource("contexts/2018-credentials-v1.jsonld"))
+ .put("https://imsglobal.github.io/openbadges-specification/context.json",Resources.getResource("contexts/obv3.jsonld"))
+ .put("https://w3id.org/security/v1", Resources.getResource("contexts/security-v1.jsonld"))
+ .put("https://w3id.org/security/v2", Resources.getResource("contexts/security-v2.jsonld"))
+ .put("https://w3id.org/security/v3", Resources.getResource("contexts/security-v3-unstable.jsonld"))
+ .put("https://w3id.org/security/bbs/v1", Resources.getResource("contexts/security-bbs-v1.jsonld"))
+ .put("https://w3id.org/security/suites/secp256k1-2019/v1", Resources.getResource("contexts/suites-secp256k1-2019.jsonld"))
+ .put("https://w3id.org/security/suites/ed25519-2018/v1", Resources.getResource("contexts/suites-ed25519-2018.jsonld"))
+ .put("https://w3id.org/security/suites/x25519-2019/v1", Resources.getResource("contexts/suites-x25519-2019.jsonld"))
+ .put("https://w3id.org/security/suites/jws-2020/v1", Resources.getResource("contexts/suites-jws-2020.jsonld"))
+
+ .build();
+
static final LoadingCache, Document> documentCache = CacheBuilder.newBuilder()
- .initialCapacity(32)
- .maximumSize(64)
- .expireAfterAccess(Duration.ofHours(24))
+ .initialCapacity(32).maximumSize(64).expireAfterAccess(Duration.ofHours(24))
.build(new CacheLoader, Document>() {
- public Document load(final Tuple id) throws Exception {
- try (InputStream is = bundled.keySet().contains(id.t1)
- ? bundled.get(id.t1).openStream()
+ public Document load(final Tuple id) throws Exception {
+ try (InputStream is = bundled.keySet().contains(id.t1) ? bundled.get(id.t1).openStream()
: new URI(id.t1).toURL().openStream();) {
- return JsonDocument.of(is);
- }
+ return JsonDocument.of(is);
+ }
}
});
public static void reset() {
documentCache.invalidateAll();
}
-
+
private static final Logger logger = LogManager.getLogger();
}
diff --git a/inspector-vc/src/main/resources/contexts/security-bbs-v1.jsonld b/inspector-vc/src/main/resources/contexts/security-bbs-v1.jsonld
new file mode 100644
index 0000000..2bffafe
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/security-bbs-v1.jsonld
@@ -0,0 +1,92 @@
+{
+ "@context": {
+ "@version": 1.1,
+ "id": "@id",
+ "type": "@type",
+ "BbsBlsSignature2020": {
+ "@id": "https://w3id.org/security#BbsBlsSignature2020",
+ "@context": {
+ "@version": 1.1,
+ "@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",
+ "proofValue": "https://w3id.org/security#proofValue",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "BbsBlsSignatureProof2020": {
+ "@id": "https://w3id.org/security#BbsBlsSignatureProof2020",
+ "@context": {
+ "@version": 1.1,
+ "@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",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "sec": "https://w3id.org/security#",
+ "assertionMethod": {
+ "@id": "https://w3id.org/security#assertionMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "authentication": {
+ "@id": "https://w3id.org/security#authenticationMethod",
+ "@type": "@id",
+ "@container": "@set"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "Bls12381G2Key2020": "https://w3id.org/security#Bls12381G2Key2020"
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/security-v1.jsonld b/inspector-vc/src/main/resources/contexts/security-v1.jsonld
new file mode 100644
index 0000000..7529505
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/security-v1.jsonld
@@ -0,0 +1,50 @@
+{
+ "@context": {
+ "id": "@id",
+ "type": "@type",
+
+ "dc": "http://purl.org/dc/terms/",
+ "sec": "https://w3id.org/security#",
+ "xsd": "http://www.w3.org/2001/XMLSchema#",
+
+ "EcdsaKoblitzSignature2016": "sec:EcdsaKoblitzSignature2016",
+ "Ed25519Signature2018": "sec:Ed25519Signature2018",
+ "EncryptedMessage": "sec:EncryptedMessage",
+ "GraphSignature2012": "sec:GraphSignature2012",
+ "LinkedDataSignature2015": "sec:LinkedDataSignature2015",
+ "LinkedDataSignature2016": "sec:LinkedDataSignature2016",
+ "CryptographicKey": "sec:Key",
+
+ "authenticationTag": "sec:authenticationTag",
+ "canonicalizationAlgorithm": "sec:canonicalizationAlgorithm",
+ "cipherAlgorithm": "sec:cipherAlgorithm",
+ "cipherData": "sec:cipherData",
+ "cipherKey": "sec:cipherKey",
+ "created": {"@id": "dc:created", "@type": "xsd:dateTime"},
+ "creator": {"@id": "dc:creator", "@type": "@id"},
+ "digestAlgorithm": "sec:digestAlgorithm",
+ "digestValue": "sec:digestValue",
+ "domain": "sec:domain",
+ "encryptionKey": "sec:encryptionKey",
+ "expiration": {"@id": "sec:expiration", "@type": "xsd:dateTime"},
+ "expires": {"@id": "sec:expiration", "@type": "xsd:dateTime"},
+ "initializationVector": "sec:initializationVector",
+ "iterationCount": "sec:iterationCount",
+ "nonce": "sec:nonce",
+ "normalizationAlgorithm": "sec:normalizationAlgorithm",
+ "owner": {"@id": "sec:owner", "@type": "@id"},
+ "password": "sec:password",
+ "privateKey": {"@id": "sec:privateKey", "@type": "@id"},
+ "privateKeyPem": "sec:privateKeyPem",
+ "publicKey": {"@id": "sec:publicKey", "@type": "@id"},
+ "publicKeyBase58": "sec:publicKeyBase58",
+ "publicKeyPem": "sec:publicKeyPem",
+ "publicKeyWif": "sec:publicKeyWif",
+ "publicKeyService": {"@id": "sec:publicKeyService", "@type": "@id"},
+ "revoked": {"@id": "sec:revoked", "@type": "xsd:dateTime"},
+ "salt": "sec:salt",
+ "signature": "sec:signature",
+ "signatureAlgorithm": "sec:signingAlgorithm",
+ "signatureValue": "sec:signatureValue"
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/security-v2.jsonld b/inspector-vc/src/main/resources/contexts/security-v2.jsonld
new file mode 100644
index 0000000..5f43a0c
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/security-v2.jsonld
@@ -0,0 +1,59 @@
+{
+ "@context": [{
+ "@version": 1.1
+ }, "https://w3id.org/security/v1", {
+ "AesKeyWrappingKey2019": "sec:AesKeyWrappingKey2019",
+ "DeleteKeyOperation": "sec:DeleteKeyOperation",
+ "DeriveSecretOperation": "sec:DeriveSecretOperation",
+ "EcdsaSecp256k1Signature2019": "sec:EcdsaSecp256k1Signature2019",
+ "EcdsaSecp256r1Signature2019": "sec:EcdsaSecp256r1Signature2019",
+ "EcdsaSecp256k1VerificationKey2019": "sec:EcdsaSecp256k1VerificationKey2019",
+ "EcdsaSecp256r1VerificationKey2019": "sec:EcdsaSecp256r1VerificationKey2019",
+ "Ed25519Signature2018": "sec:Ed25519Signature2018",
+ "Ed25519VerificationKey2018": "sec:Ed25519VerificationKey2018",
+ "EquihashProof2018": "sec:EquihashProof2018",
+ "ExportKeyOperation": "sec:ExportKeyOperation",
+ "GenerateKeyOperation": "sec:GenerateKeyOperation",
+ "KmsOperation": "sec:KmsOperation",
+ "RevokeKeyOperation": "sec:RevokeKeyOperation",
+ "RsaSignature2018": "sec:RsaSignature2018",
+ "RsaVerificationKey2018": "sec:RsaVerificationKey2018",
+ "Sha256HmacKey2019": "sec:Sha256HmacKey2019",
+ "SignOperation": "sec:SignOperation",
+ "UnwrapKeyOperation": "sec:UnwrapKeyOperation",
+ "VerifyOperation": "sec:VerifyOperation",
+ "WrapKeyOperation": "sec:WrapKeyOperation",
+ "X25519KeyAgreementKey2019": "sec:X25519KeyAgreementKey2019",
+
+ "allowedAction": "sec:allowedAction",
+ "assertionMethod": {"@id": "sec:assertionMethod", "@type": "@id", "@container": "@set"},
+ "authentication": {"@id": "sec:authenticationMethod", "@type": "@id", "@container": "@set"},
+ "capability": {"@id": "sec:capability", "@type": "@id"},
+ "capabilityAction": "sec:capabilityAction",
+ "capabilityChain": {"@id": "sec:capabilityChain", "@type": "@id", "@container": "@list"},
+ "capabilityDelegation": {"@id": "sec:capabilityDelegationMethod", "@type": "@id", "@container": "@set"},
+ "capabilityInvocation": {"@id": "sec:capabilityInvocationMethod", "@type": "@id", "@container": "@set"},
+ "caveat": {"@id": "sec:caveat", "@type": "@id", "@container": "@set"},
+ "challenge": "sec:challenge",
+ "ciphertext": "sec:ciphertext",
+ "controller": {"@id": "sec:controller", "@type": "@id"},
+ "delegator": {"@id": "sec:delegator", "@type": "@id"},
+ "equihashParameterK": {"@id": "sec:equihashParameterK", "@type": "xsd:integer"},
+ "equihashParameterN": {"@id": "sec:equihashParameterN", "@type": "xsd:integer"},
+ "invocationTarget": {"@id": "sec:invocationTarget", "@type": "@id"},
+ "invoker": {"@id": "sec:invoker", "@type": "@id"},
+ "jws": "sec:jws",
+ "keyAgreement": {"@id": "sec:keyAgreementMethod", "@type": "@id", "@container": "@set"},
+ "kmsModule": {"@id": "sec:kmsModule"},
+ "parentCapability": {"@id": "sec:parentCapability", "@type": "@id"},
+ "plaintext": "sec:plaintext",
+ "proof": {"@id": "sec:proof", "@type": "@id", "@container": "@graph"},
+ "proofPurpose": {"@id": "sec:proofPurpose", "@type": "@vocab"},
+ "proofValue": "sec:proofValue",
+ "referenceId": "sec:referenceId",
+ "unwrappedKey": "sec:unwrappedKey",
+ "verificationMethod": {"@id": "sec:verificationMethod", "@type": "@id"},
+ "verifyData": "sec:verifyData",
+ "wrappedKey": "sec:wrappedKey"
+ }]
+}
diff --git a/inspector-vc/src/main/resources/contexts/security-v3-unstable.jsonld b/inspector-vc/src/main/resources/contexts/security-v3-unstable.jsonld
new file mode 100644
index 0000000..9c76d1a
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/security-v3-unstable.jsonld
@@ -0,0 +1,710 @@
+{
+ "@context": [{
+ "@version": 1.1,
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "JsonWebKey2020": {
+ "@id": "https://w3id.org/security#JsonWebKey2020"
+ },
+ "JsonWebSignature2020": {
+ "@id": "https://w3id.org/security#JsonWebSignature2020",
+ "@context": {
+ "@version": 1.1,
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "Ed25519VerificationKey2020": {
+ "@id": "https://w3id.org/security#Ed25519VerificationKey2020"
+ },
+ "Ed25519Signature2020": {
+ "@id": "https://w3id.org/security#Ed25519Signature2020",
+ "@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",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": {
+ "@id": "https://w3id.org/security#proofValue"
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "publicKeyJwk": {
+ "@id": "https://w3id.org/security#publicKeyJwk",
+ "@type": "@json"
+ },
+ "ethereumAddress": {
+ "@id": "https://w3id.org/security#ethereumAddress"
+ },
+ "publicKeyHex": {
+ "@id": "https://w3id.org/security#publicKeyHex"
+ },
+ "blockchainAccountId": {
+ "@id": "https://w3id.org/security#blockchainAccountId"
+ },
+ "MerkleProof2019": {
+ "@id": "https://w3id.org/security#MerkleProof2019"
+ },
+ "Bls12381G1Key2020": {
+ "@id": "https://w3id.org/security#Bls12381G1Key2020"
+ },
+ "Bls12381G2Key2020": {
+ "@id": "https://w3id.org/security#Bls12381G2Key2020"
+ },
+ "BbsBlsSignature2020": {
+ "@id": "https://w3id.org/security#BbsBlsSignature2020",
+ "@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",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "BbsBlsSignatureProof2020": {
+ "@id": "https://w3id.org/security#BbsBlsSignatureProof2020",
+ "@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",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+
+ "EcdsaKoblitzSignature2016": "https://w3id.org/security#EcdsaKoblitzSignature2016",
+ "Ed25519Signature2018": {
+ "@id": "https://w3id.org/security#Ed25519Signature2018",
+ "@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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "EncryptedMessage": "https://w3id.org/security#EncryptedMessage",
+ "GraphSignature2012": "https://w3id.org/security#GraphSignature2012",
+ "LinkedDataSignature2015": "https://w3id.org/security#LinkedDataSignature2015",
+ "LinkedDataSignature2016": "https://w3id.org/security#LinkedDataSignature2016",
+ "CryptographicKey": "https://w3id.org/security#Key",
+ "authenticationTag": "https://w3id.org/security#authenticationTag",
+ "canonicalizationAlgorithm": "https://w3id.org/security#canonicalizationAlgorithm",
+ "cipherAlgorithm": "https://w3id.org/security#cipherAlgorithm",
+ "cipherData": "https://w3id.org/security#cipherData",
+ "cipherKey": "https://w3id.org/security#cipherKey",
+ "created": {
+ "@id": "http://purl.org/dc/terms/created",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "creator": {
+ "@id": "http://purl.org/dc/terms/creator",
+ "@type": "@id"
+ },
+ "digestAlgorithm": "https://w3id.org/security#digestAlgorithm",
+ "digestValue": "https://w3id.org/security#digestValue",
+ "domain": "https://w3id.org/security#domain",
+ "encryptionKey": "https://w3id.org/security#encryptionKey",
+ "expiration": {
+ "@id": "https://w3id.org/security#expiration",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "expires": {
+ "@id": "https://w3id.org/security#expiration",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "initializationVector": "https://w3id.org/security#initializationVector",
+ "iterationCount": "https://w3id.org/security#iterationCount",
+ "nonce": "https://w3id.org/security#nonce",
+ "normalizationAlgorithm": "https://w3id.org/security#normalizationAlgorithm",
+ "owner": "https://w3id.org/security#owner",
+ "password": "https://w3id.org/security#password",
+ "privateKey": "https://w3id.org/security#privateKey",
+ "privateKeyPem": "https://w3id.org/security#privateKeyPem",
+ "publicKey": "https://w3id.org/security#publicKey",
+ "publicKeyBase58": "https://w3id.org/security#publicKeyBase58",
+ "publicKeyPem": "https://w3id.org/security#publicKeyPem",
+ "publicKeyWif": "https://w3id.org/security#publicKeyWif",
+ "publicKeyService": "https://w3id.org/security#publicKeyService",
+ "revoked": {
+ "@id": "https://w3id.org/security#revoked",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "salt": "https://w3id.org/security#salt",
+ "signature": "https://w3id.org/security#signature",
+ "signatureAlgorithm": "https://w3id.org/security#signingAlgorithm",
+ "signatureValue": "https://w3id.org/security#signatureValue",
+ "proofValue": "https://w3id.org/security#proofValue",
+
+ "AesKeyWrappingKey2019": "https://w3id.org/security#AesKeyWrappingKey2019",
+ "DeleteKeyOperation": "https://w3id.org/security#DeleteKeyOperation",
+ "DeriveSecretOperation": "https://w3id.org/security#DeriveSecretOperation",
+ "EcdsaSecp256k1Signature2019": {
+ "@id": "https://w3id.org/security#EcdsaSecp256k1Signature2019",
+ "@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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "EcdsaSecp256r1Signature2019": {
+ "@id": "https://w3id.org/security#EcdsaSecp256r1Signature2019",
+ "@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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "EcdsaSecp256k1VerificationKey2019": "https://w3id.org/security#EcdsaSecp256k1VerificationKey2019",
+ "EcdsaSecp256r1VerificationKey2019": "https://w3id.org/security#EcdsaSecp256r1VerificationKey2019",
+ "Ed25519VerificationKey2018": "https://w3id.org/security#Ed25519VerificationKey2018",
+ "EquihashProof2018": "https://w3id.org/security#EquihashProof2018",
+ "ExportKeyOperation": "https://w3id.org/security#ExportKeyOperation",
+ "GenerateKeyOperation": "https://w3id.org/security#GenerateKeyOperation",
+ "KmsOperation": "https://w3id.org/security#KmsOperation",
+ "RevokeKeyOperation": "https://w3id.org/security#RevokeKeyOperation",
+ "RsaSignature2018": {
+ "@id": "https://w3id.org/security#RsaSignature2018",
+ "@context": {
+ "@protected": true,
+
+ "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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "proofValue": "https://w3id.org/security#proofValue",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ },
+ "RsaVerificationKey2018": "https://w3id.org/security#RsaVerificationKey2018",
+ "Sha256HmacKey2019": "https://w3id.org/security#Sha256HmacKey2019",
+ "SignOperation": "https://w3id.org/security#SignOperation",
+ "UnwrapKeyOperation": "https://w3id.org/security#UnwrapKeyOperation",
+ "VerifyOperation": "https://w3id.org/security#VerifyOperation",
+ "WrapKeyOperation": "https://w3id.org/security#WrapKeyOperation",
+ "X25519KeyAgreementKey2019": "https://w3id.org/security#X25519KeyAgreementKey2019",
+
+ "allowedAction": "https://w3id.org/security#allowedAction",
+ "assertionMethod": {
+ "@id": "https://w3id.org/security#assertionMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "authentication": {
+ "@id": "https://w3id.org/security#authenticationMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "capability": {
+ "@id": "https://w3id.org/security#capability",
+ "@type": "@id"
+ },
+ "capabilityAction": "https://w3id.org/security#capabilityAction",
+ "capabilityChain": {
+ "@id": "https://w3id.org/security#capabilityChain",
+ "@type": "@id",
+ "@container": "@list"
+ },
+ "capabilityDelegation": {
+ "@id": "https://w3id.org/security#capabilityDelegationMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "capabilityInvocation": {
+ "@id": "https://w3id.org/security#capabilityInvocationMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "caveat": {
+ "@id": "https://w3id.org/security#caveat",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "challenge": "https://w3id.org/security#challenge",
+ "ciphertext": "https://w3id.org/security#ciphertext",
+ "controller": {
+ "@id": "https://w3id.org/security#controller",
+ "@type": "@id"
+ },
+ "delegator": {
+ "@id": "https://w3id.org/security#delegator",
+ "@type": "@id"
+ },
+ "equihashParameterK": {
+ "@id": "https://w3id.org/security#equihashParameterK",
+ "@type": "http://www.w3.org/2001/XMLSchema#:integer"
+ },
+ "equihashParameterN": {
+ "@id": "https://w3id.org/security#equihashParameterN",
+ "@type": "http://www.w3.org/2001/XMLSchema#:integer"
+ },
+ "invocationTarget": {
+ "@id": "https://w3id.org/security#invocationTarget",
+ "@type": "@id"
+ },
+ "invoker": {
+ "@id": "https://w3id.org/security#invoker",
+ "@type": "@id"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "keyAgreement": {
+ "@id": "https://w3id.org/security#keyAgreementMethod",
+ "@type": "@id",
+ "@container": "@set"
+ },
+ "kmsModule": {
+ "@id": "https://w3id.org/security#kmsModule"
+ },
+ "parentCapability": {
+ "@id": "https://w3id.org/security#parentCapability",
+ "@type": "@id"
+ },
+ "plaintext": "https://w3id.org/security#plaintext",
+ "proof": {
+ "@id": "https://w3id.org/security#proof",
+ "@type": "@id",
+ "@container": "@graph"
+ },
+ "proofPurpose": {
+ "@id": "https://w3id.org/security#proofPurpose",
+ "@type": "@vocab",
+ "@context": {
+ "@version": 1.1,
+ "@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"
+ }
+ }
+ },
+ "referenceId": "https://w3id.org/security#referenceId",
+ "unwrappedKey": "https://w3id.org/security#unwrappedKey",
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ },
+ "verifyData": "https://w3id.org/security#verifyData",
+ "wrappedKey": "https://w3id.org/security#wrappedKey"
+ }]
+}
\ No newline at end of file
diff --git a/inspector-vc/src/main/resources/contexts/suites-ed25519-2018.jsonld b/inspector-vc/src/main/resources/contexts/suites-ed25519-2018.jsonld
new file mode 100644
index 0000000..6533c28
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/suites-ed25519-2018.jsonld
@@ -0,0 +1,91 @@
+{
+ "@context": {
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "proof": {
+ "@id": "https://w3id.org/security#proof",
+ "@type": "@id",
+ "@container": "@graph"
+ },
+ "Ed25519VerificationKey2018": {
+ "@id": "https://w3id.org/security#Ed25519VerificationKey2018",
+ "@context": {
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "controller": {
+ "@id": "https://w3id.org/security#controller",
+ "@type": "@id"
+ },
+ "revoked": {
+ "@id": "https://w3id.org/security#revoked",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "publicKeyBase58": {
+ "@id": "https://w3id.org/security#publicKeyBase58"
+ }
+ }
+ },
+ "Ed25519Signature2018": {
+ "@id": "https://w3id.org/security#Ed25519Signature2018",
+ "@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",
+ "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"
+ }
+ }
+ },
+ "jws": {
+ "@id": "https://w3id.org/security#jws"
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ }
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/suites-ed25519-2020.jsonld b/inspector-vc/src/main/resources/contexts/suites-ed25519-2020.jsonld
new file mode 100644
index 0000000..b74da8c
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/suites-ed25519-2020.jsonld
@@ -0,0 +1,93 @@
+{
+ "@context": {
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "proof": {
+ "@id": "https://w3id.org/security#proof",
+ "@type": "@id",
+ "@container": "@graph"
+ },
+ "Ed25519VerificationKey2020": {
+ "@id": "https://w3id.org/security#Ed25519VerificationKey2020",
+ "@context": {
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "controller": {
+ "@id": "https://w3id.org/security#controller",
+ "@type": "@id"
+ },
+ "revoked": {
+ "@id": "https://w3id.org/security#revoked",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "publicKeyMultibase": {
+ "@id": "https://w3id.org/security#publicKeyMultibase",
+ "@type": "https://w3id.org/security#multibase"
+ }
+ }
+ },
+ "Ed25519Signature2020": {
+ "@id": "https://w3id.org/security#Ed25519Signature2020",
+ "@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",
+ "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"
+ }
+ }
+ },
+ "proofValue": {
+ "@id": "https://w3id.org/security#proofValue",
+ "@type": "https://w3id.org/security#multibase"
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ }
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/suites-jws-2020.jsonld b/inspector-vc/src/main/resources/contexts/suites-jws-2020.jsonld
new file mode 100644
index 0000000..17186cd
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/suites-jws-2020.jsonld
@@ -0,0 +1,82 @@
+{
+ "@context": {
+ "privateKeyJwk": {
+ "@id": "https://w3id.org/security#privateKeyJwk",
+ "@type": "@json"
+ },
+ "JsonWebKey2020": {
+ "@id": "https://w3id.org/security#JsonWebKey2020",
+ "@context": {
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "publicKeyJwk": {
+ "@id": "https://w3id.org/security#publicKeyJwk",
+ "@type": "@json"
+ }
+ }
+ },
+ "JsonWebSignature2020": {
+ "@id": "https://w3id.org/security#JsonWebSignature2020",
+ "@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"
+ },
+ "jws": "https://w3id.org/security#jws",
+ "nonce": "https://w3id.org/security#nonce",
+ "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"
+ }
+ }
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ }
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/suites-secp256k1-2019.jsonld b/inspector-vc/src/main/resources/contexts/suites-secp256k1-2019.jsonld
new file mode 100644
index 0000000..5a345df
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/suites-secp256k1-2019.jsonld
@@ -0,0 +1,102 @@
+{
+ "@context": {
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "proof": {
+ "@id": "https://w3id.org/security#proof",
+ "@type": "@id",
+ "@container": "@graph"
+ },
+ "EcdsaSecp256k1VerificationKey2019": {
+ "@id": "https://w3id.org/security#EcdsaSecp256k1VerificationKey2019",
+ "@context": {
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "controller": {
+ "@id": "https://w3id.org/security#controller",
+ "@type": "@id"
+ },
+ "revoked": {
+ "@id": "https://w3id.org/security#revoked",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "blockchainAccountId": {
+ "@id": "https://w3id.org/security#blockchainAccountId"
+ },
+ "publicKeyJwk": {
+ "@id": "https://w3id.org/security#publicKeyJwk",
+ "@type": "@json"
+ },
+ "publicKeyBase58": {
+ "@id": "https://w3id.org/security#publicKeyBase58"
+ },
+ "publicKeyMultibase": {
+ "@id": "https://w3id.org/security#publicKeyMultibase",
+ "@type": "https://w3id.org/security#multibase"
+ }
+ }
+ },
+ "EcdsaSecp256k1Signature2019": {
+ "@id": "https://w3id.org/security#EcdsaSecp256k1Signature2019",
+ "@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",
+ "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"
+ }
+ }
+ },
+ "jws": {
+ "@id": "https://w3id.org/security#jws"
+ },
+ "verificationMethod": {
+ "@id": "https://w3id.org/security#verificationMethod",
+ "@type": "@id"
+ }
+ }
+ }
+ }
+}
diff --git a/inspector-vc/src/main/resources/contexts/suites-x25519-2019.jsonld b/inspector-vc/src/main/resources/contexts/suites-x25519-2019.jsonld
new file mode 100644
index 0000000..d01bac0
--- /dev/null
+++ b/inspector-vc/src/main/resources/contexts/suites-x25519-2019.jsonld
@@ -0,0 +1,26 @@
+{
+ "@context": {
+ "id": "@id",
+ "type": "@type",
+ "@protected": true,
+ "X25519KeyAgreementKey2019": {
+ "@id": "https://w3id.org/security#X25519KeyAgreementKey2019",
+ "@context": {
+ "@protected": true,
+ "id": "@id",
+ "type": "@type",
+ "controller": {
+ "@id": "https://w3id.org/security#controller",
+ "@type": "@id"
+ },
+ "revoked": {
+ "@id": "https://w3id.org/security#revoked",
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
+ },
+ "publicKeyBase58": {
+ "@id": "https://w3id.org/security#publicKeyBase58"
+ }
+ }
+ }
+ }
+}
diff --git a/inspector-vc/src/test/java/org/oneedtech/inspect/vc/OB30Tests.java b/inspector-vc/src/test/java/org/oneedtech/inspect/vc/OB30Tests.java
index 15acfe5..4417dc2 100644
--- a/inspector-vc/src/test/java/org/oneedtech/inspect/vc/OB30Tests.java
+++ b/inspector-vc/src/test/java/org/oneedtech/inspect/vc/OB30Tests.java
@@ -21,7 +21,7 @@ import com.google.common.collect.Iterables;
public class OB30Tests {
private static OB30Inspector validator;
- private static boolean verbose = false;
+ private static boolean verbose = true;
@BeforeAll
static void setup() {