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