Verifiable Credentials (верифицируемые удостоверения) — это формат данных, разработанный W3C, который позволяет создавать и проверять удостоверения в цифровой среде.
Для подписания с помощью JavaScript установим необходимые библиотеки.
npm i credentials-context ed25519-signature-2020-context jsonld-document-loader @digitalbazaar/ed25519-verification-key-2020 @digitalbazaar/ed25519-signature-2020 @digitalbazaar/vc
Ниже простая демонстрация работы библиотек на NodeJS.
import cred from 'credentials-context'
import ed25519Ctx from 'ed25519-signature-2020-context'
import { JsonLdDocumentLoader } from 'jsonld-document-loader'
import { Ed25519VerificationKey2020 } from '@digitalbazaar/ed25519-verification-key-2020'
import { Ed25519Signature2020 } from '@digitalbazaar/ed25519-signature-2020'
import * as vc from '@digitalbazaar/vc'
const jdl = new JsonLdDocumentLoader()
jdl.addStatic(ed25519Ctx.CONTEXT_URL, ed25519Ctx.CONTEXT)
jdl.addStatic(cred.CREDENTIALS_CONTEXT_V1_URL, cred.contexts.get(cred.constants.CREDENTIALS_CONTEXT_V1_URL))
// Ваш не подписанный документ в формате JSON-LD
const credential = {
"@context": [
"https://www.w3.org/2018/credentials/v1",
{
"OrganizeAction": "https://schema.org/OrganizeAction",
"agent": "https://schema.org/Person",
"name": "https://schema.org/Person"
}
],
"type": [
"VerifiableCredential",
"OrganizeAction"
],
"issuer": {
"id": "https://baskovsky.ru"
},
"issuanceDate": new Date().toISOString(),
"credentialSubject": {
"id": "https://example.com/#Foo",
"agent": {
"name": "Foo"
}
}
}
// Генерируем пару асимметричных ключей
const key = await Ed25519VerificationKey2020.generate()
// Устанавливаем метод верификации
const suite = new Ed25519Signature2020({ key })
suite.verificationMethod = 'https://gotointeractive.com'
// Производим подпись
const signedVC = await vc.issue({
credential,
suite,
documentLoader: jdl.build(),
})
console.log(signedVC) // -> Получаем подписанный JSON-LD