Validare în lot a semnăturilor cu cache-uri partajate

HotPDF poate valida fiecare semnătură a unui document încărcat într-o singură trecere prin trei cache-uri partajate: un cache de căi de certificate cheiat după setul de certificate CMS și opțiunile efective de validare, un cache de ștampile de timp cheiat după blob-ul CMS și /ByteRange și magazinul de probe THPDFRevocationEvidenceCache cheiat după emitent și serial

THotPDF.ValidateLoadedSignatureBatch

Punctul de intrare la nivel de document enumeră fiecare câmp de semnătură, verifică la nivel de octeți fiecare /ByteRange față de sursă, colectează probe DSS și /VRI și rulează validarea căilor de certificate cu cache-urile partajate. Un WorkerLimit mai mare de unu evaluează căile pe worker-i paraleli

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-uri partajate

Semnăturile care repetă același lanț de semnatari reutilizează verdictul anterior al căii în loc să îl recalculeze: cheile cache-ului de căi acoperă setul de certificate CMS, ancorele de încredere, intermediarii, fiecare blob OCSP, CRL și delta-CRL în ordinea evaluării, modul de revocare, timpul de validare și blocul complet de politici. Probele injectate dintr-un cache sunt etichetate cu sursa de probe vesCache

Cache-ul de revocare stochează fiecare răspuns OCSP și CRL văzut în timpul unui lot, cheiat după DN-ul emitentului, numărul de serie și fereastra de valabilitate, astfel încât semnăturile ulterioare și loturile ulterioare care partajează aceeași instanță THPDFRevocationEvidenceCache rezolvă revocarea fără a re-furniza probe

Cache-ul de ștampile de timp memorează verdictele de verificare la nivel de octeți pentru ștampilele de timp de document CMS întreg (ETSI.RFC3161) și token-urile de ștampilă de timp de semnătură încorporate. O lovitură de cache pe un token încorporat setează THPDFCMSVerifyOptions.SkipSignatureTimestampVerification, sărind re-verificarea token-ului, în timp ce semnătura CMS primară este încă verificată complet

Motor de lot autonom

THPDFSignatureValidationBatch acceptă job-uri al căror Info poartă deja verdictul de verificare la nivel de octeți, pentru apelanții care dețin fluxul sursă sau verifică în afara componentei. FailFast oprește expedierea după primul verdict negativ, iar un THPDFCancellationToken lasă intrările rămase sbsCancelled

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

Rezultate structurate

Fiecare intrare raportează starea semnăturii și a certificatului, cache-ul reutilizat și diagnosticarea per semnătură; HPDFSignatureBatchResultToJSON redă întregul lot cu statistici de cache ca JSON lizibil de mașină