Firmá tu credencial
Para poder firmar tu credencial debes intanciar el kms para requerir las claves con las que firmarás tu credencial.
Importa las siguientes dependencias en el archivo credential.ts.
import { KMSClient } from "@quarkid/kms-client"; import { LANG, Suite } from "@quarkid/kms-core"; import { AssertionMethodPurpose } from "@quarkid/did-core"; import { FileSystemKMSSecureStorage } from "./storage";
Agrega el siguiente código a la función credential a continuación de lo escrito.
const kms = new KMSClient({ lang: LANG.es, storage: new FileSystemKMSSecureStorage({ filepath: "file-system-storage", }), }); const bbsbls2020 = await kms.getPublicKeysBySuiteType(Suite.Bbsbls2020);
Usamos el algoritmo de claves bbsbls2020 para firmar una credencial ya que nos permite el uso de selective disclousure y zero knowlegde proof.
El kms provee un methodo signVC que nos permite firmar una credencial.
Agrega el siguiente código a la función credential, a continuación de lo escrito anteriormente, pero reemplaza el string "TU DID" con el did que creaste en los pasos enteriores.
const vc = await kms.signVC( Suite.Bbsbls2020, bbsbls2020[0], credential, "TU DID", "TU DID" + "#bbsbls", new AssertionMethodPurpose() ); console.log("Verifiable Credential Signed", vc);
Prueba tu código
Para probar tu codigo deberás llamar a la funcion credential.
credential();
Si seguiste bien los pasos deberías tener un archivo credential.ts como el siguiente:
import { VerifiableCredentialService } from "@quarkid/vc-core"; import { KMSClient } from "@quarkid/kms-client"; import { LANG, Suite } from "@quarkid/kms-core"; import { AssertionMethodPurpose } from "@quarkid/did-core"; import { FileSystemKMSSecureStorage } from "./storage"; const credential = async () => { const vcService = new VerifiableCredentialService(); const credential = await vcService.createCredential({ context: [ "https://w3id.org/vaccination/v1", "https://w3id.org/security/v2", "https://w3id.org/security/bbs/v1", ], vcInfo: { issuer: "did:quarkid:EiBA3ihJrI5fSsdpZWd3H_-0Wr4rEL8muoDOsuDQDhe2FQ", expirationDate: new Date("2026/05/05"), id: "123456789", types: ["VaccinationCertificate"], }, data: { type: "VaccinationEvent", batchNumber: "1183738569", administeringCentre: "MoH", healthProfessional: "MoH", countryOfVaccination: "NZ", recipient: { type: "VaccineRecipient", givenName: "JOHN", familyName: "SMITH", gender: "Male", birthDate: "1958-07-17", }, vaccine: { type: "Vaccine", disease: "COVID-19", atcCode: "J07BX03", medicinalProductName: "COVID-19 Vaccine Moderna", marketingAuthorizationHolder: "Moderna Biotech", }, }, mappingRules: null, }); console.log("Credential", credential); const kms = new KMSClient({ lang: LANG.es, storage: new FileSystemKMSSecureStorage({ filepath: "file-system-storage", }), }); const bbsbls2020 = await kms.getPublicKeysBySuiteType(Suite.Bbsbls2020); const vc = await kms.signVC( Suite.Bbsbls2020, bbsbls2020[0], credential, "did:quarkid:EiBA3ihJrI5fSsdpZWd3H_-0Wr4rEL8muoDOsuDQDhe2FQ", "did:quarkid:EiBA3ihJrI5fSsdpZWd3H_-0Wr4rEL8muoDOsuDQDhe2FQ" + "#bbsbls", new AssertionMethodPurpose() ); console.log("Verifiable Credential Signed", vc); }; credential();
Nota:
Recuerda que siempre debes probar con el DID creado en la seccion Creacion de un DID, esto es porque para firmar la credencial busca las claves guardadas en el storage que creaste.
El próximo paso es ejecutar la funcion credential, para ello abre una terminal y usa ts-node/npx para ejecutar tu código.
ts-node credential.ts
o
npx ts-node credential.ts
En tu terminal verás el resultado de los console.log que tienes en tu código, es decir, verás una credencial creada y luego la misma credencial pero firmada.