Validazione della Firma a Lotto con Cache Condivise

HotPDF può validare ogni firma di un documento caricato in un unico passaggio tramite tre cache condivise: una cache del percorso del certificato indicata dal set di certificati CMS e dalle opzioni di validazione effettive, una cache dei timestamp indicata dal blob CMS e da /ByteRange, e l'archivio di prove THPDFRevocationEvidenceCache indicato da emittente e numero di serie

THotPDF.ValidateLoadedSignatureBatch

Il punto di ingresso a livello di documento enumera ogni campo firma, verifica a livello di byte ogni /ByteRange contro la sorgente, raccoglie le prove DSS e /VRI ed esegue la validazione del percorso del certificato con le cache condivise. Un WorkerLimit maggiore di uno valuta i percorsi su worker paralleli

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;

Cache condivise

Le firme che ripetono la stessa catena del firmatario riusano il verdetto di percorso precedente invece di ricalcolarlo: le chiavi della cache del percorso coprono il set di certificati CMS, le ancore di fiducia, gli intermedi, ogni blob OCSP, CRL e delta-CRL in ordine di valutazione, la modalità di revoca, il tempo di validazione e l'intero blocco di criteri. Le prove iniettate da una cache sono etichettate con la sorgente di prove vesCache

La cache di revoca memorizza ogni risposta OCSP e CRL vista durante un lotto, indicata da DN dell'emittente, numero di serie e finestra di validità, così che firme successive e lotti successivi che condividono la stessa istanza THPDFRevocationEvidenceCache risolvano la revoca senza fornire di nuovo le prove

La cache dei timestamp memoizza i verdetti di verifica a livello di byte per i timestamp di documento CMS completi (ETSI.RFC3161) e per i token di firma temporali incorporati. Un hit di cache su un token incorporato imposta THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, saltando la nuova verifica del token mentre la firma CMS primaria viene ancora controllata completamente

Motore di lotto autonomo

THPDFSignatureValidationBatch accetta job il cui Info porta già il verdetto di verifica a livello di byte, per i chiamanti che possiedono il flusso sorgente o verificano al di fuori del componente. FailFast interrompe la distribuzione dopo il primo verdetto negativo e un THPDFCancellationToken lascia le voci rimanenti in sbsCancelled

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

Risultati strutturati

Ogni voce riporta lo stato della firma e del certificato, la cache riusata e la diagnostica per firma; HPDFSignatureBatchResultToJSON renderizza l'intero lotto con le statistiche delle cache come JSON leggibile da macchina