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