Instalá y creá tu DID

Deberás tener instalado: NODEJS, NPM, TYPESCRIPT y TS-NODE

Compartir en redes

1. Creá un directorio

mkdir quarkid-app cd quarkid-app

 

2. Instalá

Usa NPM para instalar los siguientes paquetes:

npm init

 

npm install @quarkid/did-registry @quarkid/did-core @quarkid/kms-client @quarkid/kms-core

 

3. Creá las claves

Para crear un DID necesitás proveer tus claves públicas. Podés usar el componente KMS para generar tus claves públicas y privadas.

Key Management Service

  • KMS Storage

KMS aplica conceptos de inversión de dependencias por lo que requiere enviar un SecureStorage en su constructor. En esta oportunidad usaremos FileSystem para guardar los datos y poder acceder a ellos de una manera sencilla. Creá un archivo storage.ts con el siguiente codigo:

import { readFileSync, writeFileSync, existsSync } from "fs"; import { KMSStorage } from "@quarkid/kms-core"; export class FileSystemKMSSecureStorage implements KMSStorage { public readonly filepath: string; constructor(params: { filepath: string }) { this.filepath = params.filepath; } async add(key: string, data: any): Promise<void> { const map = this.getData(); map.set(key, data); this.saveData(map); } async get(key: string): Promise<any> { return this.getData().get(key); } async getAll(): Promise<Map<string, any>> { return this.getData(); } update(key: string, data: any) { const map = this.getData(); map.set(key, data); this.saveData(map); } remove(key: string) { const map = this.getData(); map.delete(key); this.saveData(map); } private getData(): Map<string, any> { if (!existsSync(this.filepath)) { return new Map(); } const file = readFileSync(this.filepath, { encoding: "utf-8", }); if (!file) { return new Map(); } return new Map(Object.entries(JSON.parse(file))); } private saveData(data: Map<string, any>) { writeFileSync(this.filepath, JSON.stringify(Object.fromEntries(data)), { encoding: "utf-8", }); } }

 

  • KMS Keys

    Creá un archivo did.ts.

Importá la siguientes dependecias.

import { FileSystemKMSSecureStorage } from "./storage"; import { KMSClient } from "@quarkid/kms-client"; import { LANG, Suite } from "@quarkid/kms-core";

 

Crea una función que se llame createDID como se muestra a continuación.

Creá las claves recoveryKey, updateKey, bbsBlsJwk y didCommJwk.

export const createDID = async () => { const kms = new KMSClient({ lang: LANG.en, storage: new FileSystemKMSSecureStorage({ filepath: "file-system-storage", }), }); const updateKey = await kms.create(Suite.ES256k); const recoveryKey = await kms.create(Suite.ES256k); const didComm = await kms.create(Suite.DIDComm); const bbsbls = await kms.create(Suite.Bbsbls2020); };

 

Para obtener más información sobre KMS, leé la documentación en: @quarkid/kms-client

4. Creá un long DID

Con el servicio de creación de un did podes crear un LONG DID, este es un DID en el que su DID Document se encuentra embebido en la información que devuelve en un formato base64. Es un DID autoresoluble, es decir, desencondeando el base64 podes obtener su DID Document.

En el archivo did.ts importá las dependecias y agregá el código que se muestra a continuación.

import { ModenaUniversalRegistry } from "@quarkid/did-registry"; import { AssertionMethodPurpose, KeyAgreementPurpose } from "@quarkid/did-core";

 

export const createDID = async () => { const kms = new KMSClient({ lang: LANG.en, storage: new FileSystemKMSSecureStorage({ filepath: "file-system-storage", }), }); const updateKey = await kms.create(Suite.ES256k); const recoveryKey = await kms.create(Suite.ES256k); const didComm = await kms.create(Suite.DIDComm); const bbsbls = await kms.create(Suite.Bbsbls2020); const registry = new ModenaUniversalRegistry(); const createDidResponse = await registry.createDID({ updateKeys: [updateKey.publicKeyJWK], recoveryKeys: [recoveryKey.publicKeyJWK], verificationMethods: [ { id: "bbsbls", type: "Bls12381G1Key2020", publicKeyJwk: bbsbls.publicKeyJWK, purpose: [new AssertionMethodPurpose()], }, { id: "didComm", type: "X25519KeyAgreementKey2019", publicKeyJwk: didComm.publicKeyJWK, purpose: [new KeyAgreementPurpose()], }, ], }); console.log(JSON.stringify(createDidResponse.longDid)); };

 

Continuá con el siguiente paso antes de ejecutar tu código.