Ponte DCP-AI ↔ W3C DID/VC¶
Tradução informativa da versão em inglês, atualizada em 26/10/2026. Em caso de divergência, prevalece a versão em inglês. Identificadores, comandos e blocos de código são mantidos sem tradução.
Converte entre artefatos do DCP e os identificadores descentralizados (DIDs) e credenciais verificáveis (VCs) do W3C.
Instalação¶
A 2.0.1 do npm (26/10/2026) tem o mesmo index.js que o código-fonte em main. Ela roda no Node.js (usa Buffer) e não tem dependências.
Limites (25/10/2026)¶
Leia-os antes de confiar na saída; foram checados contra index.js:
- Chaves.
rprToDIDDocumentlê as chaves derpr.keys. Um RPR V2 que segue o schema as traz embinding_keys, que ele não lê, então o seu DID Document não tem métodos de verificação. - Codificação.
publicKeyMultibaseézseguido de base64url. No Multibase,zsignifica base58btc: isso rotula errado a codificação e pode produzir um erro de decodificação ou bytes de chave diferentes em outras ferramentas. OdidDocumentToRPRdeste pacote usa o decodificador base64url correspondente, não um decodificador multibase conforme. - Sem provas. As credenciais e apresentações verificáveis que ele constrói não trazem
proof: não são assinadas.passportToVCcopia campos selecionados do passaporte e não preserva uma assinatura do DCP.bundleToVPpreserva o bundle assinado recebido emdcpBundle, que precisa ser checado à parte com um verificador do DCP; essa checagem não autentica oholder, ocreatednem os campos copiados da credencial da VP ao redor. - URL de contexto. Os DID Documents que ele produz listam
https://w3id.org/security/suites/ed2519-2020/v1em@context, uma grafia errada da URL da suíte Ed25519-2020 (index.js). Até que isso seja corrigido em outra mudança, não trate a saída como JSON-LD de DID do W3C conforme. - Namespaces. Este repositório usa
did:dcp:ePostQuantumVerificationKey2024como identificadores próprios. Ele não fornece nenhum resolvedor de DID nem evidência de registro para eles; não suponha que ferramentas externas de DID/VC os reconheçam.
Especificações do DCP suportadas¶
Do DCP-01 ao DCP-09, como correspondências parciais dos campos listados abaixo e com os limites acima; não é uma implementação completa dessas especificações.
Visão geral¶
Esta ponte permite a interoperabilidade entre a camada de identidade do DCP-AI e o ecossistema de identidade descentralizada do W3C. Ela suporta a conversão nos dois sentidos de:
- Responsible Principal Records ↔ DID Documents — mapeia as identidades humanas do DCP para DIDs do método
did:dcp:com métodos de verificação derivados das chaves do RPR. - Agent Passports ↔ Verifiable Credentials — representa as certificações de agentes do DCP como VCs do W3C, incluindo capacidades, modo de responsabilidade e jurisdição.
- Signed Bundles → Verifiable Presentations — envolve Citizenship Bundles do DCP completos como VPs do W3C para apresentação a verificadores externos.
Funções¶
| Função | Sentido | Descrição |
|---|---|---|
rprToDIDDocument(rpr) |
DCP → W3C | Converte um Responsible Principal Record em um DID Document |
didDocumentToRPR(didDoc) |
W3C → DCP | Converte um DID Document de volta em um esqueleto de RPR |
passportToVC(passport, issuerDid) |
DCP → W3C | Converte um Agent Passport em uma Verifiable Credential |
vcToPassport(vc) |
W3C → DCP | Converte uma Verifiable Credential de volta em um esqueleto de passaporte |
bundleToVP(signedBundle, holderDid) |
DCP → W3C | Envolve um bundle assinado como Verifiable Presentation |
rightsToServiceEndpoints(rightsDeclaration) |
DCP → W3C | Converte uma declaração de direitos em endpoints de serviço do DID (DCP-08) |
Método DID¶
Esta ponte usa o namespace do método did:dcp:. Os identificadores DID são derivados diretamente dos IDs humanos do RPR:
Os métodos de verificação suportam tanto Ed25519 (clássico) quanto tipos de chave pós-quânticos.
Uso¶
// Fragment: myRpr, myPassport and signedBundle come from your application
import { rprToDIDDocument, passportToVC, bundleToVP } from '@dcp-ai/w3c-did';
// Convert an RPR to a DID Document
const didDoc = rprToDIDDocument(myRpr);
// Issue a Verifiable Credential for an agent
const vc = passportToVC(myPassport, 'did:dcp:issuer-id');
// Wrap a full bundle as a Verifiable Presentation
const vp = bundleToVP(signedBundle, 'did:dcp:holder-id');
Notas¶
- As conversões para esqueleto (W3C → DCP) produzem registros parciais que exigem processamento adicional (recálculo dos IDs de chave, assinatura etc.) antes de serem artefatos do DCP válidos.
- O valor de
publicKeyMultibaserotula base64url como base58btc e não codifica corretamente a chave original para consumidores de multibase (veja os limites).