Merge pull request #45 from imsglc/fix-inspector-vc

Apply fixes to inspector-vc
This commit is contained in:
Xavi Aracil 2022-11-15 10:00:57 +01:00 committed by GitHub
commit ce225fc891
7 changed files with 174 additions and 171 deletions

View File

@ -3,7 +3,6 @@ package org.oneedtech.inspect.vc.probe;
import java.io.StringReader;
import java.net.URI;
import org.bouncycastle.util.Arrays;
import org.oneedtech.inspect.core.probe.Probe;
import org.oneedtech.inspect.core.probe.RunContext;
import org.oneedtech.inspect.core.report.ReportItems;
@ -12,6 +11,8 @@ import org.oneedtech.inspect.vc.util.CachingDocumentLoader;
import com.apicatalog.ld.DocumentError;
import com.apicatalog.multibase.Multibase;
import com.apicatalog.multicodec.Multicodec;
import com.apicatalog.multicodec.Multicodec.Codec;
import com.apicatalog.vc.processor.StatusVerifier;
import com.danubetech.verifiablecredentials.VerifiableCredential;
@ -58,26 +59,28 @@ public class EmbeddedProofProbe extends Probe<Credential> {
// if starts with http and does not have hashcode, try fetch and see if returns Ed25519VerificationKey2020
// property is publicKeyMultibase
if (method.toString().contains("#")) {
publicKeyMultibase = method.toString();
if (method.getFragment() != null) {
publicKeyMultibase = method.getFragment();
} else {
if (method.toString().startsWith("did")) {
String didScheme = method.getSchemeSpecificPart();
if (didScheme.startsWith("key:")) {
publicKeyMultibase = didScheme.substring(4);
if (method.getScheme().equals("did")) {
if (method.getSchemeSpecificPart().startsWith("key:")) {
publicKeyMultibase = method.getSchemeSpecificPart().substring(4);
} else {
return error("Unknown verification method: " + method.toString(), ctx);
return error("Unknown verification method: " + method, ctx);
}
} else {
publicKeyMultibase = method.toString();
} else if (method.getScheme().equals("http") || method.getScheme().equals("https")) {
return error("Cannot parse http verification key yet", ctx);
}
}
// Decode the Multibase to Multicodec and check that it is an Ed25519 public key
// https://w3c-ccg.github.io/di-eddsa-2020/#ed25519verificationkey2020
byte[] publicKeyMulticodec;
try {
publicKeyMulticodec = Multibase.decode(publicKeyMultibase);
if (publicKeyMulticodec[0] != -19 || publicKeyMulticodec[1] != 1) {
if (publicKeyMulticodec[0] != (byte) 0xed || publicKeyMulticodec[1] != (byte) 0x01) {
return error("Verification method does not contain an Ed25519 public key", ctx);
}
} catch (Exception e) {
@ -85,7 +88,7 @@ public class EmbeddedProofProbe extends Probe<Credential> {
}
// Extract the publicKey bytes from the Multicodec
byte[] publicKey = Arrays.copyOfRange(publicKeyMulticodec, 2, publicKeyMulticodec.length);
byte[] publicKey = Multicodec.decode(Codec.Ed25519PublicKey, publicKeyMulticodec);
Ed25519Signature2020LdVerifier verifier = new Ed25519Signature2020LdVerifier(publicKey);

View File

@ -42,6 +42,7 @@ public class CachingDocumentLoader implements DocumentLoader {
static final ImmutableMap<String, URL> bundled = ImmutableMap.<String, URL>builder()
.put("https://purl.imsglobal.org/spec/clr/v2p0/context.json",Resources.getResource("contexts/clr-v2p0.json"))
.put("https://purl.imsglobal.org/spec/ob/v3p0/context.json",Resources.getResource("contexts/ob-v3p0.json"))
.put("https://purl.imsglobal.org/spec/ob/v3p0/extensions.json",Resources.getResource("contexts/ob-v3p0-extensions.json"))
.put("https://imsglobal.github.io/openbadges-specification/context.json",Resources.getResource("contexts/obv3x.jsonld"))
.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"))

View File

@ -0,0 +1,9 @@
{
"@context": {
"id": "@id",
"type": "@type",
"1EdTechJsonSchemaValidator2019": "https://purl.imsglobal.org/spec/vccs/v1p0/context.json#1EdTechJsonSchemaValidator2019",
"1EdTechRevocationList": "https://purl.imsglobal.org/spec/vcrl/v1p0/context.json#1EdTechRevocationList",
"1EdTechCredentialRefresh": "https://purl.imsglobal.org/spec/vccr/v1p0/context.json#1EdTechCredentialRefresh"
}
}

View File

@ -6,56 +6,56 @@
"xsd": "https://www.w3.org/2001/XMLSchema#",
"OpenBadgeCredential": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#OpenBadgeCredential"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#OpenBadgeCredential"
},
"Achievement": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Achievement",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Achievement",
"@context": {
"achievementType": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#achievementType",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievementType",
"@type": "xsd:string"
},
"alignment": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#alignment",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Alignment",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Alignment",
"@container": "@set"
},
"creator": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Profile"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile"
},
"creditsAvailable": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#creditsAvailable",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsAvailable",
"@type": "xsd:float"
},
"criteria": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Criteria",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria",
"@type": "@id"
},
"fieldOfStudy": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#fieldOfStudy",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#fieldOfStudy",
"@type": "xsd:string"
},
"humanCode": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#humanCode",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#humanCode",
"@type": "xsd:string"
},
"otherIdentifier": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#otherIdentifier",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#IdentifierEntry",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentifierEntry",
"@container": "@set"
},
"related": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#related",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Related",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#related",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Related",
"@container": "@set"
},
"resultDescription": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#resultDescription",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#ResultDescription",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#ResultDescription",
"@container": "@set"
},
"specialization": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#specialization",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#specialization",
"@type": "xsd:string"
},
"tag": {
@ -64,7 +64,7 @@
"@container": "@set"
},
"version": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#version",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version",
"@type": "xsd:string"
}
}
@ -73,60 +73,60 @@
"@id": "OpenBadgeCredential"
},
"AchievementSubject": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#AchievementSubject",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#AchievementSubject",
"@context": {
"achievement": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Achievement"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Achievement"
},
"activityEndDate": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#activityEndDate",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityEndDate",
"@type": "xsd:date"
},
"activityStartDate": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#activityStartDate",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#activityStartDate",
"@type": "xsd:date"
},
"creditsEarned": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#creditsEarned",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#creditsEarned",
"@type": "xsd:float"
},
"identifier": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#identifier",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#IdentityObject",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentityObject",
"@container": "@set"
},
"licenseNumber": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#licenseNumber",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#licenseNumber",
"@type": "xsd:string"
},
"result": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#result",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Result",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#result",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Result",
"@container": "@set"
},
"role": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#role",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#role",
"@type": "xsd:string"
},
"source": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#source",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Profile"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#source",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile"
},
"term": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#term",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#term",
"@type": "xsd:string"
}
}
},
"Address": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Address",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Address",
"@context": {
"addressCountry": {
"@id": "https://schema.org/addressCountry",
"@type": "xsd:string"
},
"addressCountryCode": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#CountryCode",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#CountryCode",
"@type": "xsd:string"
},
"addressLocality": {
@ -138,7 +138,7 @@
"@type": "xsd:string"
},
"geo": {
"@id" : "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#GeoCoordinates"
"@id" : "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates"
},
"postOfficeBoxNumber": {
"@id": "https://schema.org/postOfficeBoxNumber",
@ -158,7 +158,7 @@
"@id": "https://schema.org/Alignment",
"@context": {
"targetCode": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#targetCode",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetCode",
"@type": "xsd:string"
},
"targetDescription": {
@ -174,7 +174,7 @@
"@type": "xsd:string"
},
"targetType": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#targetType",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#targetType",
"@type": "xsd:string"
},
"targetUrl": {
@ -184,22 +184,22 @@
}
},
"Criteria": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Criteria"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Criteria"
},
"EndorsementCredential": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#EndorsementCredential"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementCredential"
},
"EndorsementSubject": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#EndorsementSubject",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementSubject",
"@context": {
"endorsementComment": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#endorsementComment",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsementComment",
"@type": "xsd:string"
}
}
},
"Evidence": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Evidence",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Evidence",
"@context": {
"audience": {
"@id": "https://schema.org/audience",
@ -212,7 +212,7 @@
}
},
"GeoCoordinates": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#GeoCoordinates",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#GeoCoordinates",
"@context": {
"latitude": {
"@id": "https://schema.org/latitude",
@ -225,41 +225,41 @@
}
},
"IdentifierEntry": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#IdentifierEntry",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentifierEntry",
"@context": {
"identifier": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#identifier",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifier",
"@type": "xsd:string"
},
"identifierType": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#identifierType",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identifierType",
"@type": "xsd:string"
}
}
},
"IdentityObject": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#IdentityObject",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentityObject",
"@context": {
"hashed": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#hashed",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#hashed",
"@type": "xsd:boolean"
},
"identityHash": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#identityHash",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityHash",
"@type": "xsd:string"
},
"identityType": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#identityType",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#identityType",
"@type": "xsd:string"
},
"salt": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#salt",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#salt",
"@type": "xsd:string"
}
}
},
"Image": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Image",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Image",
"@context": {
"caption": {
"@id": "https://schema.org/caption",
@ -268,17 +268,17 @@
}
},
"Profile": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Profile",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Profile",
"@context": {
"additionalName": {
"@id": "https://schema.org/additionalName",
"@type": "xsd:string"
},
"address": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Address"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Address"
},
"dateOfBirth": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#dateOfBirth",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#dateOfBirth",
"@type": "xsd:date"
},
"email": {
@ -290,7 +290,7 @@
"@type": "xsd:string"
},
"familyNamePrefix": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#familyNamePrefix",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#familyNamePrefix",
"@type": "xsd:string"
},
"givenName": {
@ -306,50 +306,50 @@
"@type": "xsd:string"
},
"otherIdentifier": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#otherIdentifier",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#IdentifierEntry",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#otherIdentifier",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#IdentifierEntry",
"@container": "@set"
},
"parentOrg": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#parentOrg",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#parentOrg",
"@type": "xsd:string"
},
"patronymicName": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#patronymicName",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#patronymicName",
"@type": "xsd:string"
},
"phone": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#PhoneNumber",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#PhoneNumber",
"@type": "xsd:string"
},
"official": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#official",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#official",
"@type": "xsd:string"
}
}
},
"Related": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Related",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Related",
"@context": {
"version": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#version",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#version",
"@type": "xsd:string"
}
}
},
"Result": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Result",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Result",
"@context": {
"achievedLevel": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#achievedLevel",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#achievedLevel",
"@type": "xsd:anyURI"
},
"resultDescription": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#resultDescription",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultDescription",
"@type": "xsd:anyURI"
},
"status": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#status",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#status",
"@type": "xsd:string"
},
"value": {
@ -359,56 +359,56 @@
}
},
"ResultDescription": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#ResultDescription",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#ResultDescription",
"@context": {
"allowedValue": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#allowedValue",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#allowedValue",
"@type": "xsd:string",
"@container": "@set"
},
"requiredLevel": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#requiredLevel",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredLevel",
"@type": "xsd:anyURI"
},
"requiredValue": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#requiredValue",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#requiredValue",
"@type": "xsd:string"
},
"resultType": {
"@id":"https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#resultType",
"@id":"https://purl.imsglobal.org/spec/vc/ob/vocab.html#resultType",
"@type": "xsd:string"
},
"rubricCriterionLevel": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#rubricCriterionLevel",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#RubricCriterionLevel",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#rubricCriterionLevel",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#RubricCriterionLevel",
"@container": "@set"
},
"valueMax": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#valueMax",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMax",
"@type": "xsd:string"
},
"valueMin": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#valueMin",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#valueMin",
"@type": "xsd:string"
}
}
},
"RubricCriterionLevel": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#RubricCriterionLevel",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#RubricCriterionLevel",
"@context": {
"level": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#level",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#level",
"@type": "xsd:string"
},
"points": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#points",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#points",
"@type": "xsd:string"
}
}
},
"alignment": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#alignment",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Alignment",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#alignment",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Alignment",
"@container": "@set"
},
"description": {
@ -416,20 +416,20 @@
"@type": "xsd:string"
},
"endorsement": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#endorsement",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#EndorsementCredential",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#endorsement",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#EndorsementCredential",
"@container": "@set"
},
"image": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#image",
"@type": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#Image"
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#image",
"@type": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#Image"
},
"name": {
"@id": "https://schema.org/name",
"@type": "xsd:string"
},
"narrative": {
"@id": "https://purl.imsglobal.org/spec/ob/v3p0/vocab.html#narrative",
"@id": "https://purl.imsglobal.org/spec/vc/ob/vocab.html#narrative",
"@type": "xsd:string"
},
"url": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

After

Width:  |  Height:  |  Size: 82 KiB

View File

@ -10,50 +10,45 @@
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "http://example.edu/credentials/3732",
"id": "urn:uuid:280c19b6-9680-4a37-ba84-e38b1a4e4584",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
"AchievementCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
"name": "Andy F. Miller",
"id": "urn:uuid:6f2e33e5-7a29-4155-840a-59483ba10164"
},
"issuanceDate": "2010-01-01T00:00:00Z",
"name": "Example University Degree",
"issuanceDate": "2022-11-10T07:38:00-08:00",
"name": "test 1",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"id": "urn:uuid:6f2e33e5-7a29-4155-840a-59483ba10164",
"type": [
"AchievementSubject"
],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"id": "urn:uuid:35258e6f-4c05-4215-8ada-38a5a5b80510",
"type": [
"Achievement"
],
"achievementType": "Achievement",
"name": "test 1",
"description": "This is a test achievement",
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
"narrative": "There is no criteria"
}
}
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"proof": [
{
"type": "Ed25519Signature2020",
"created": "2022-09-15T15:48:32Z",
"verificationMethod": "https://example.edu/issuers/565049#z6MkmY1R6tG2NEdRHzphdRT6JqxeYpHwLAHwbrDfQULpkMAj",
"created": "2022-11-10T19:36:07Z",
"proofPurpose": "assertionMethod",
"proofValue": "z3yUuWbFsLUp2CUrSZRaRbTk1UnkhpoJgJYu1SdMqd3AEMotpY41sKky7VzavnSfjApggtWJg1tcREvs5H4ZNnBRH"
"verificationMethod": "z6Mkt5PKegVQUpjQjoeiqkFa1HqpvMvehiLJuPMJcqX9hxM5",
"proofValue": "z4xh7M5Xpo4hU2bDU6dtQZgnuJCtJUhYCsMPBbCnhAvdnugDidH8anMJ6ayt7vR74iL5mhgJgTDQnNHoYrCnhARVD"
}
]
}

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -5,50 +5,45 @@
"https://purl.imsglobal.org/spec/ob/v3p0/extensions.json",
"https://w3id.org/security/suites/ed25519-2020/v1"
],
"id": "http://example.edu/credentials/3732",
"id": "urn:uuid:280c19b6-9680-4a37-ba84-e38b1a4e4584",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
"AchievementCredential"
],
"issuer": {
"id": "https://example.edu/issuers/565049",
"type": [
"Profile"
],
"name": "Example University"
"name": "Andy F. Miller",
"id": "urn:uuid:6f2e33e5-7a29-4155-840a-59483ba10164"
},
"issuanceDate": "2010-01-01T00:00:00Z",
"name": "Example University Degree",
"issuanceDate": "2022-11-10T07:38:00-08:00",
"name": "test 1",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"id": "urn:uuid:6f2e33e5-7a29-4155-840a-59483ba10164",
"type": [
"AchievementSubject"
],
"achievement": {
"id": "https://example.com/achievements/21st-century-skills/teamwork",
"id": "urn:uuid:35258e6f-4c05-4215-8ada-38a5a5b80510",
"type": [
"Achievement"
],
"achievementType": "Achievement",
"name": "test 1",
"description": "This is a test achievement",
"criteria": {
"narrative": "Team members are nominated for this badge by their peers and recognized upon review by Example Corp management."
},
"description": "This badge recognizes the development of the capacity to collaborate within a group environment.",
"name": "Teamwork"
"narrative": "There is no criteria"
}
}
},
"credentialSchema": [
{
"id": "https://purl.imsglobal.org/spec/ob/v3p0/schema/json/ob_v3p0_achievementcredential_schema.json",
"type": "1EdTechJsonSchemaValidator2019"
}
],
"proof": [
{
"type": "Ed25519Signature2020",
"created": "2022-09-15T15:48:32Z",
"verificationMethod": "https://example.edu/issuers/565049#z6MkmY1R6tG2NEdRHzphdRT6JqxeYpHwLAHwbrDfQULpkMAj",
"created": "2022-11-10T19:36:07Z",
"proofPurpose": "assertionMethod",
"proofValue": "z3yUuWbFsLUp2CUrSZRaRbTk1UnkhpoJgJYu1SdMqd3AEMotpY41sKky7VzavnSfjApggtWJg1tcREvs5H4ZNnBRH"
"verificationMethod": "z6Mkt5PKegVQUpjQjoeiqkFa1HqpvMvehiLJuPMJcqX9hxM5",
"proofValue": "z4xh7M5Xpo4hU2bDU6dtQZgnuJCtJUhYCsMPBbCnhAvdnugDidH8anMJ6ayt7vR74iL5mhgJgTDQnNHoYrCnhARVD"
}
]
}