Velocity issuance commands are available under issue
command as follows:
offer management
credential management
./ssikit.sh velocity issue -h
Before being able to issue verifiable credentials, the credential data needs to be prepared. Offers represent the way to set up credential data. Basically, an offer is a credential that has not been signed. The offer management functions can be accessed from the command:
./ssikit.sh velocity issue offer -h
Currently available functions are:
create offer
E.g. Create an offer.
./ssikit.sh velocity issue -i did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692 -d 61966dfc4732da2ea0e64826 -m adam.smith@example.com
{
"type":
[
"PastEmploymentPosition"
],
"credentialSubject":
{
"vendorUserId": "adam.smith@example.com",
"company": "did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692",
"companyName":
{
"localized":
{
"en": "Microsoft Corporation"
}
},
"title":
{
"localized":
{
"en": "Director, Communications (HoloLens & Mixed Reality Experiences)"
}
},
"startMonthYear":
{
"month": 10,
"year": 2010
},
"endMonthYear":
{
"month": 5,
"year": 2022
},
"location":
{
"countryCode": "US",
"regionCode": "MA"
},
"description":
{
"localized":
{
"en": "Big Data, AI, Hybrid, IoT, Datacenter, Mixed Reality/HoloLens, D365, Power Platform - all kinds of fun stuff!!!"
}
}
},
"offerCreationDate": "2020-08-04T21:13:32.019Z",
"offerExpirationDate": "2021-08-04T21:13:32.019Z",
"offerId": "ptIQrgxaicFX0QPVf_Z1L"
}
{
"type":
[
"PastEmploymentPosition"
],
"credentialSubject":
{
"vendorUserId": "adam.smith@example.com",
"company": "did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692",
"companyName":
{
"localized":
{
"en": "Microsoft Corporation"
}
},
"title":
{
"localized":
{
"en": "Director, Communications (HoloLens & Mixed Reality Experiences)"
}
},
"startMonthYear":
{
"month": 10,
"year": 2010
},
"endMonthYear":
{
"month": 5,
"year": 2022
},
"location":
{
"countryCode": "US",
"regionCode": "MA"
},
"description":
{
"localized":
{
"en": "Big Data, AI, Hybrid, IoT, Datacenter, Mixed Reality/HoloLens, D365, Power Platform - all kinds of fun stuff!!!"
}
}
},
"offerCreationDate": "2020-08-04T21:13:32.019Z",
"offerExpirationDate": "2021-08-04T21:13:32.019Z",
"offerId": "ptIQrgxaicFX0QPVf_Z1L",
"id": "634d9aacb6b4b8ab66563fac",
"createdAt": "2022-10-14T18:10:52.726Z",
"updatedAt": "2022-10-14T18:10:52.726Z",
"exchangeId": "634d9a9caa4dc9cf44a8f37f",
"issuer":
{
"id": "did:velocity:0x6872fedef46b03e9863a56859a1cdb45648907f7"
}
}
Credential management functions include:
issue credential
./ssikit.sh velocity issue credential -h
E.g. Issue credential.
./ssikit.sh velocity issue credential -i did:velocity:0x6872fedef46b03e9863a56859a1cdb45648907f7 -c PastEmploymentCredential credential-data.json
{
"type":
[
"PastEmploymentPosition"
],
"credentialSubject":
{
"vendorUserId": "adam.smith@example.com",
"company": "did:velocity:0xd4df29726d500f9b85bc6c7f1b3c021f16305692",
"companyName":
{
"localized":
{
"en": "Microsoft Corporation"
}
},
"title":
{
"localized":
{
"en": "Director, Communications (HoloLens & Mixed Reality Experiences)"
}
},
"startMonthYear":
{
"month": 10,
"year": 2010
},
"endMonthYear":
{
"month": 5,
"year": 2022
},
"location":
{
"countryCode": "US",
"regionCode": "MA"
},
"description":
{
"localized":
{
"en": "Big Data, AI, Hybrid, IoT, Datacenter, Mixed Reality/HoloLens, D365, Power Platform - all kinds of fun stuff!!!"
}
}
},
"offerCreationDate": "2020-08-04T21:13:32.019Z",
"offerExpirationDate": "2021-08-04T21:13:32.019Z",
"offerId": "ptIQrgxaicFX0QPVf_Z1L"
}
velocity-network://issue?request_uri=https://stagingagent.velocitycareerlabs.io/api/holder/v0.6/org/did:velocity:0x6872fedef46b03e9863a56859a1cdb45648907f7/issue/get-credential-manifest?exchange_id=634d9a9caa4dc9cf44a8f37f&credential_types=PastEmploymentPosition
Velocity credential verification is available with the verify
command:
E.g. Verify credential.
./ssikit.sh velocity verify -i did:ion:1234567890 credential.jwt checks.json
eyJqd2siOnsia3R5IjoiRUMiLCJleHQiOnRydWUsImtleV9vcHMiOlsidmVyaWZ5Il0sIngiOiJVd3V5Y2lfMUJNa05DdVkwZ0lPWFZ3ZDZTOXBPMldOUWpsdUVXbWd3TGNBIiwieSI6Ik5vYlp6WFh1VUtNQmIwU1ZpaGo2cG10RWY2cXd4Y1FwSHlOMmRwSHBjM1kiLCJjcnYiOiJQLTI1NiJ9LCJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJpZCI6Ijc1NmZlMWIzLWYwOGEtNDgxYy05ZWFlLTU2ZWIwMGI2NWQ1NyIsInR5cGUiOlsiSWREb2N1bWVudCIsIlZlcmlmaWFibGVDcmVkZW50aWFsIl0sImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImZpcnN0TmFtZSI6eyJsb2NhbGl6ZWQiOnsiZW4iOiJBZGFtIn19LCJsYXN0TmFtZSI6eyJsb2NhbGl6ZWQiOnsiZW4iOiJTbWl0aCJ9fSwia2luZCI6IkRyaXZlcnNMaWNlbnNlIiwiYXV0aG9yaXR5Ijp7ImxvY2FsaXplZCI6eyJlbiI6IkNhbGlmb3JuaWEgRE1WIn19LCJsb2NhdGlvbiI6eyJjb3VudHJ5Q29kZSI6IlVTIiwicmVnaW9uQ29kZSI6IkNBIn0sImRvYiI6eyJkYXkiOjIwLCJtb250aCI6NiwieWVhciI6MTk2Nn0sImlkZW50aXR5TnVtYmVyIjoiMTIzMTAzMTIzMTIiLCJkZWZhdWx0Ijp0cnVlfX0sInN1YiI6ImFkYW0uc21pdGhAZXhhbXBsZS5jb20iLCJhdWQiOiIgIiwiaXNzIjoiNzU2ZmUxYjMtZjA4YS00ODFjLTllYWUtNTZlYjAwYjY1ZDU3IiwianRpIjoiNzU2ZmUxYjMtZjA4YS00ODFjLTllYWUtNTZlYjAwYjY1ZDU3IiwiaWF0IjoxNjIwMTI4NjgyLCJuYmYiOjE2MjAxMjg2ODJ9.iqbGO5LfYzUmvesVSCquWHekbC-z3VCvls156zsNnmvz7y6sFtcH7lH0IkRNwljGQQvsce50O7RG06QOSnMS4g
{
"TRUSTED_ISSUER": "SELF_SIGNED",
"UNREVOKED": "PASS",
"UNEXPIRED": "NOT_APPLICABLE",
"UNTAMPERED": "PASS"
}
Verification result:
true
{
"TRUSTED_ISSUER": "SELF_SIGNED",
"UNREVOKED": "PASS",
"UNEXPIRED": "NOT_APPLICABLE",
"UNTAMPERED": "PASS"
}
./ssikit.sh velocity verify -h
This section describes the following functions implemented as part of Velocity network integration:
Velocity network specific operation are available under the velocity
command:
./ssikit.sh velocity -h
Velocity onboading commands are available under the onboard
command as follows:
./ssikit.sh velocity onboard -h
Once an account was set up with the registrar (see onboarding), cli-tool can be used to register the organization, using the command:
./ssikit.sh velocity onboard organization <org-file>
E.g. Onboarding organization.
./ssikit.sh velocity onboard organization organization.json
{
"profile":
{
"name": "WaltID",
"location":
{
"countryCode": "AT",
"regionCode": "W"
},
"founded": "2021",
"logo": "https://images.squarespace-cdn.com/content/v1/609c0ddf94bcc0278a7cbdb4/d7a7bc88-c700-4efe-a95f-8d3086bccb9d/Walt.id_Logo_round.png?format=1500w"
},
"serviceEndpoints":
[
{
"id": "#credential-agent-operator-1",
"serviceEndpoint": "https://agent.velocity.walt.id",
"type": "VlcCredentialAgentOperator_v1"
},
{
"id": "#credential-agent-inspector-1",
"serviceEndpoint": "https://agent.velocity.walt.id",
"type": "VlcInspector_v1"
},
{
"id": "#credential-agent-issuer-1",
"serviceEndpoint": "https://agent.velocity.walt.id",
"type": "VlcCareerIssuer_v1",
"credentialTypes":
[
"OpenBadgeCredential",
"EducationDegree",
"CurrentEmploymentPosition",
"PastEmploymentPosition",
"Badge",
"Certification",
"Course",
"Assessment",
"AssessmentDec2020",
"VaccinationCertificate-Apr2021",
"CourseRegistrationV1.0",
"CourseCompletionV1.0",
"CourseAttendanceV1.0",
"EducationDegreeRegistrationV1.0",
"EducationDegreeStudyV1.0",
"EducationDegreeGraduationV1.0",
"CertificationV1.0",
"LicenseV1.0",
"OpenBadgeV1.0",
"AssessmentV1.0",
"EmploymentCurrentV1.0",
"EmploymentPastV1.0",
"VerifiableCredential",
"ComprehensiveLearnerRecord",
"CourseRegistrationV1.1",
"CourseCompletionV1.1",
"CourseAttendanceV1.1",
"EducationDegreeRegistrationV1.1",
"EducationDegreeStudyV1.1",
"EducationDegreeGraduationV1.1",
"CertificationV1.1",
"LicenseV1.1",
"AssessmentV1.1",
"EmploymentCurrentV1.1",
"EmploymentPastV1.1",
"BadgeV1.1",
"OpenBadgeV2.0",
"OpenBadgeV2.1"
]
}
]
}
{
"id": "did:ion:org-did",
"didDoc":
{
"@context":
[
"https://www.w3.org/ns/did/v1",
{
"@base": "<did:ion:org-did>"
}
],
"id": "<did:ion:org-did>",
"verificationMethod":
[
{
"id": "#vc-signing-key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"controller": "",
"publicKeyJwk":
{
"crv": "secp256k1",
"x": "<x-value>",
"y": "<y-value>",
"kty": "EC"
}
},
{
"id": "#eth-account-key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"controller": "",
"publicKeyJwk":
{
"crv": "secp256k1",
"x": "<x-value>",
"y": "<y-value>",
"kty": "EC"
}
},
{
"id": "#exchange-key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"controller": "",
"publicKeyJwk":
{
"crv": "secp256k1",
"x": "<x-value>",
"y": "<y-value>",
"kty": "EC"
}
}
],
"assertionMethod":
[
"#vc-signing-key-1",
"#eth-account-key-1",
"#exchange-key-1"
],
"service":
[
{
"type": "VlcCredentialAgentOperator_v1",
"id": "#credentialagent-1",
"serviceEndpoint": "https://agent.samplevendor.com/acme"
},
{
"type": "VlcCareerIssuer_v1",
"id": "#issuer-1",
"serviceEndpoint": "https://agent.samplevendor.com/acme",
"credentialTypes":
[
"CertificationV1.1",
"LicenseV1.1",
"CourseCompletionV1.1",
"EducationDegreeGraduationV1.1",
"EmploymentCurrentV1.1",
"EmploymentPastV1.1"
]
},
{
"type": "VlcInspector_v1",
"id": "#inspector-1",
"serviceEndpoint": "https://agent.samplevendor.com/acme"
}
]
},
"profile":
{
"name": "Test Organization",
"location":
{
"countryCode": "US",
"regionCode": "NY"
},
"logo": "https://images.squarespace-cdn.com/content/v1/609c0ddf94bcc0278a7cbdb4/d7a7bc88-c700-4efe-a95f-8d3086bccb9d/Walt.id_Logo_round.png?format=1500w",
"website": "http://www.organization.com",
"cntactEmail": "contact@example.com",
"founded": "2021-01-01",
"registrationNumbers":
[
{
"authority": "DunnAndBradstreet",
"number": "1",
"uri": "uri://uri"
}
],
"id": "<did:ion:org-did>",
"verifiableCredentialJwt": "http://registrar.velocitynetwork.foundation/api/v0.6/organizations/<did:ion:org-did>/resolve-vc/<token>",
"permittedVelocityServiceCategory":
[
"CredentialAgentOperator",
"Issuer",
"Inspector"
]
},
"keys":
[
{
"id": "#vc-signing-key-1",
"purposes":
[
"ISSUING_METADATA"
],
"key": "<key-value>",
"publicKey": "<key-value>",
"algorithm": "SECP256K1",
"encoding": "hex",
"controller": "<did:ion:org-did>"
},
{
"id": "#eth-account-key-1",
"purposes":
[
"DLT_TRANSACTIONS"
],
"key": "<key-value>",
"publicKey": "<key-value>",
"algorithm": "SECP256K1",
"encoding": "hex",
"controller": "<did:ion:org-did>"
},
{
"id": "#exchange-key-1",
"purposes":
[
"EXCHANGES"
],
"key": "<key-value>",
"publicKey": "<key-value>",
"algorithm": "SECP256K1",
"encoding": "hex",
"controller": "<did:ion:org-did>"
}
],
"authClients":
[
{
"type": "auth0",
"clientType": "cao-node-client",
"clientId": "<id-value>",
"clientSecret": "<secret-value>",
"serviceId": "#credentialagent-1"
}
]
}
Every organization needs a tenant on the credential agent. Tenant functions are available under the tenant
command:
create tenant
./ssikit.sh velocity onboard tenant -h
E.g. Add a tenant having verifier, issuer and agent operator purposes.
./ssikit.sh velocity onboard tenant tenant.json
{
"serviceIds":
[
"#credential-agent-operator-1",
"#credential-agent-inspector-1",
"#credential-agent-issuer-1"
],
"did": "<did:ion:org-did>",
"keys":
[
{
"purposes":
[
"DLT_TRANSACTIONS"
],
"algorithm": "SECP256K1",
"encoding": "hex",
"kidFragment": "#eth-account-key-1",
"key": "<key-value>"
},
{
"purposes":
[
"EXCHANGES"
],
"algorithm": "SECP256K1",
"encoding": "hex",
"kidFragment": "#exchange-key-1",
"key": "<key-value>"
},
{
"purposes":
[
"ISSUING_METADATA"
],
"algorithm": "SECP256K1",
"encoding": "hex",
"kidFragment": "#vc-signing-key-1",
"key": "<key-value>"
}
]
}
{
"id": "634d9327aa4dc9cf44a8f37a",
"createdAt": "2022-10-14T17:38:47.231Z"
}
In order to be able to issue / verify credential, it is required to have the correct identification disclosure set up. Current disclosure management functions are:
create disclosure
./ssikit.sh velocity onboard disclosure -h
E.g. Create an integrated issuing identification disclosure.
./ssikit.sh velocity onboard disclosure -i did:ion:1234567890 disclosure.json
{
"types":
[
{
"type": "EmailV1.0"
}
],
"vendorEndpoint": "integrated-issuing-identification",
"vendorDisclosureId": "MSFT0001",
"purpose": "Id Check",
"duration": "16m",
"termsUrl": "https://www.velocityexperiencecenter.com/terms-and-conditions-vnf",
"activationDate": "2021-02-16T00:00:01Z",
"identityMatchers":
{
"vendorUserIdIndex": 0,
"rules":
[
{
"valueIndex": 0,
"path":
[
"$.emails"
],
"rule": "pick"
}
]
}
}
{
"types":
[
{
"type": "EmailV1.0"
}
],
"vendorDisclosureId": "MSFT0001",
"vendorEndpoint": "integrated-issuing-identification",
"identityMatchers":
{
"rules":
[
{
"path":
[
"$.emails"
],
"rule": "pick",
"valueIndex": 0
}
],
"vendorUserIdIndex": 0
},
"purpose": "Id Check",
"duration": "16m",
"termsUrl": "https://www.velocityexperiencecenter.com/terms-and-conditions-vnf",
"activationDate": "2021-02-16T00:00:01.000Z",
"id": "634d9625b6b4b8ab66563fab",
"createdAt": "2022-10-14T17:51:33.769Z",
"updatedAt": "2022-10-14T17:51:33.769Z"
}