Verificar assinaturas
Conferir as assinaturas de um PDF, com erros e avisos prontos para a tela.
POST /v1/signature-verifications confere todas as assinaturas de um PDF contra as raízes de um contexto de segurança e devolve o resultado em um formato pronto para a tela.
$v = $api->verify(file_get_contents($pdf), 'icp-brasil');
$v['allValid']; // true só se TODAS as assinaturas estão "valid"
foreach ($v['signatures'] as $s) { // status: valid | invalid | untrusted | revoked | modified_after_signing
echo $s['signer']['subjectName'], ' ', $s['status'], ' ', $s['policy']['name'] ?? 'sem política', "\n";
}
$v['ltv']['dss']; // o PDF carrega LCR/OCSP embutidos (AD-RC e AD-RA)?
const r = await client.verifyPades({ pdf, securityContextId: "icp-brasil" });
console.log(r.allValid, r.signatures.map((s) => `${s.signer.subjectName}: ${s.status}`));
Em AD-RA aparece também um item com kind: "document_timestamp" (o carimbo do documento). O signatureCount conta só assinaturas de pessoas.
O que cada assinatura traz#
signer: nome,issuerName,issuerDn,issuerCne o blocopkiBrazil(Identidade do certificado).status:valid,invalid,untrusted,revokedoumodified_after_signing.signingTime: a data declarada pelo próprio signatário. Sem carimbo de tempo, ela não prova quando a assinatura foi feita.timestamp: o carimbo de tempo (present,time,valid,trusted).policy: a política ICP-Brasil declarada, quando houver.messages: erros e avisos já em português, cada um comlevel(errorouwarning), umcodeestável e otextpara a tela.
Decida pelo code, nunca pelo texto:
code |
level |
Quando |
|---|---|---|
invalid, unreadable |
error | A assinatura não confere com o conteúdo, ou é ilegível. |
untrusted, revoked |
error | A cadeia não chega a uma raiz do contexto, ou o certificado foi revogado. |
modified_after_signing |
error | O documento foi alterado depois desta assinatura. |
timestamp_missing |
warning | Sem carimbo de tempo: a data é só a declarada pelo signatário. |
later_visible_signature |
warning | Outra assinatura visível foi acrescentada depois desta (later_visible traz o campo, a posição e a fração da página): confira se o selo dela não cobre o documento. |
later_visible_covers_content |
error | A assinatura visível posterior ocupa mais de 10% da página e pode ter coberto o conteúdo assinado: esta assinatura passa a modified_after_signing. |
timestamp_invalid, timestamp_untrusted |
warning | O carimbo está presente mas não confere, ou a autoridade de carimbo não é confiável. |
policy_unknown_or_altered, policy_not_in_force |
warning | A política ICP-Brasil declarada não consta na lista oficial, ou está fora de vigência. |
allValid é "todas as assinaturas valid". O aviso de carimbo ausente não reprova (é uma ressalva), mas mostre-o ao usuário em AD-RT, AD-RC e AD-RA, onde a data precisa de prova.
Vários signatários#
Quando outra pessoa assina depois, o PDF muda (entra a nova assinatura), e as anteriores continuam valid: coversWholeFile é falso e laterSignatures lista as que vieram depois. Veja Vários signatários.
Cobrança#
Cada verificação é registrada como uma transação própria, com preço definido no seu plano. Veja Limites e cotas.