Validação de assinaturas em lote com caches partilhadas

O HotPDF consegue validar todas as assinaturas de um documento carregado numa única passagem, através de três caches partilhadas: uma cache de caminhos de certificados, indexada pelo conjunto de certificados CMS e pelas opções de validação efetivas; uma cache de timestamps, indexada pelo blob CMS e por /ByteRange; e o repositório de evidências THPDFRevocationEvidenceCache, indexado por emissor e número de série

THotPDF.ValidateLoadedSignatureBatch

O ponto de entrada ao nível do documento enumera todos os campos de assinatura, verifica ao nível do byte cada /ByteRange face à origem, recolhe evidências DSS e /VRI e executa a validação do caminho de certificados com as caches partilhadas. Um WorkerLimit superior a um avalia os caminhos em workers 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 partilhadas

As assinaturas que repetem a mesma cadeia de signatário reutilizam o veredicto do caminho anterior em vez de o recalcularem: as chaves da cache de caminhos cobrem o conjunto de certificados CMS, as trust anchors, os intermédios, todos os blobs OCSP, CRL e delta-CRL pela ordem de avaliação, o modo de revogação, o momento de validação e o bloco de política completo. As evidências injetadas a partir de uma cache são marcadas com a origem de evidência vesCache

A cache de revogação guarda todas as respostas OCSP e CRLs vistas durante um batch, indexadas por DN do emissor, número de série e janela de validade, de modo que as assinaturas seguintes e os batches posteriores que partilhem a mesma instância de THPDFRevocationEvidenceCache resolvem a revogação sem terem de voltar a fornecer evidências

A cache de timestamps memoriza os veredictos de verificação ao nível do byte para timestamps de documento sobre o CMS inteiro (ETSI.RFC3161) e para tokens de timestamp de assinatura embebidos. Um cache hit num token embebido ativa THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, dispensando a reverificação do token enquanto a assinatura CMS principal continua a ser totalmente verificada

Motor de lote autónomo

THPDFSignatureValidationBatch aceita jobs cujo Info já traz o veredicto da verificação ao nível do byte, para quem é dono do stream de origem ou verifica fora do componente. FailFast interrompe o despacho após o primeiro veredicto 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 reporta o estado da assinatura e do certificado, a cache que reutilizou e diagnósticos por assinatura; HPDFSignatureBatchResultToJSON apresenta o batch completo, com estatísticas de cache, em JSON legível por máquina