Validação de assinaturas em lote com caches compartilhados

O HotPDF pode validar cada assinatura de um documento carregado em uma única passagem por meio de três caches compartilhados: um cache de caminho de certificado com chave no conjunto de certificados CMS e nas opções de validação efetivas, um cache de carimbo de tempo com chave no blob CMS e no /ByteRange, e o armazenamento de evidências THPDFRevocationEvidenceCache com chave no emissor e no número de série

THotPDF.ValidateLoadedSignatureBatch

O ponto de entrada no nível do documento enumera cada campo de assinatura, verifica por bytes cada /ByteRange contra a origem, coleta evidências DSS e /VRI e executa a validação de caminho de certificado com os caches compartilhados. WorkerLimit maior que um avalia caminhos em trabalhadores paralelos

var
  Options: THPDFSignatureBatchOptions;
  Result: THPDFSignatureBatchResult;
begin
  PDF.LoadFromFile('Signed.pdf');
  Options:= THPDFSignatureBatchOptions.Default;
  Options.CertificateOptions.TrustAnchors:= MyAnchors;
  Result:= PDF.ValidateLoadedSignatureBatch(Options);
  if Result.AllSignaturesValid then
    WriteLn('All ', Result.SignatureCount, ' signatures valid');
end;

Caches compartilhados

Assinaturas que repetem a mesma cadeia de signatário reutilizam o veredito de caminho anterior em vez de recomputá-lo: as chaves do cache de caminho cobrem o conjunto de certificados CMS, âncoras de confiança, intermediários, cada blob OCSP, CRL e CRL delta na ordem de avaliação, modo de revogação, tempo de validação e o bloco de política completo. Evidências injetadas de um cache são marcadas com a origem de evidência vesCache

O cache de revogação armazena cada resposta OCSP e CRL vista durante um lote, com chave no DN do emissor, número de série e janela de validade, para que assinaturas posteriores e lotes posteriores que compartilham a mesma instância de THPDFRevocationEvidenceCache resolvam a revogação sem reabastecer evidências

O cache de carimbo de tempo memoriza vereditos de verificação por bytes para carimbos de tempo de documento CMS inteiros (ETSI.RFC3161) e tokens de carimbo de tempo de assinatura embarcados. Um acerto de cache em um token embarcado define THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, ignorando a reverificação do token enquanto a assinatura CMS primária ainda é totalmente verificada

Mecanismo de lote independente

THPDFSignatureValidationBatch aceita trabalhos cujo Info já carrega o veredito de verificação por bytes, para chamadores que possuem o stream de origem ou verificam fora do componente. FailFast interrompe o despacho após o primeiro veredito negativo, e um THPDFCancellationToken deixa as entradas restantes como sbsCancelled

Batch:= THPDFSignatureValidationBatch.Create(Options);
try
  Batch.AddJob(Job);
  Result:= Batch.Run;
finally
  Batch.Free;
end;

Resultados estruturados

Cada entrada relata o status da assinatura e do certificado, o cache que reutilizou e diagnósticos por assinatura; HPDFSignatureBatchResultToJSON renderiza todo o lote com estatísticas de cache como JSON legível por máquina