Подписываем JSON-LD с помощью Verifiable Credentials

1 апреля, 2023
1 минута чтения

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

Денис Сергеевич Басковский

Философ, изобретатель и поэт.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
prismatic highlight.js
Предыдущая статья

Сниппет highlight.js для ленивой загрузки постов

Следующая статья

Открытие изображения в новом окне