Skip to content

Arquitetura

O proofmark liga afirmações assinadas ao conteúdo por hash. Assinar produz um manifesto destacado; a verificação recalcula o hash e valida a assinatura e a ligação de cada afirmação.

flowchart TB
  subgraph Carimbar
    C1["bytes do conteúdo"] --> H1["hashContent → sha256:…"]
    H1 --> A["signAssertion (VC)<br/>action · tool · createdAt"]
    A --> M["Manifesto<br/>{ contentHash, assertions[] }"]
  end
  subgraph Verificar
    C2["bytes do conteúdo"] --> H2["recalcular hash"]
    M --> VC["verificar cada afirmação (VC)"]
    H2 --> CHK{"hash corresponde E<br/>assinaturas válidas E ligadas?"}
    VC --> CHK
    CHK --> R["{ valid, contentMatches, assertions[] }"]
  end

Mapa de módulos

Módulo Responsabilidade
hash.ts Hash de ligação ao conteúdo (sha256:…) e comparação
did.ts Identidades signatárias did:key Ed25519
manifest.ts Assinar afirmações, construir/estender manifestos, verificar

Princípios de design

  • Ligado ao conteúdo — cada afirmação embebe o hash; muda um byte e a verificação falha.
  • Sidecar destacado — o manifesto é JSON portátil; guarda-o onde quiseres (ao contrário do C2PA embebido).
  • Prova o signatário, não a verdade — a confiança depende de que DIDs de signatários aceitas.
  • Quaisquer bytes — texto, imagens, PDFs; a API recebe Uint8Array.