使用共用快取的批次簽章驗證

HotPDF 可以透過三個共享快取一次驗證已載入文件的每個簽章:以 CMS 憑證集合與有效驗證選項為索引鍵的憑證路徑快取、以 CMS blob 與 /ByteRange 為索引鍵的時間戳記快取,以及以發行者與序號為索引鍵的 THPDFRevocationEvidenceCache 證據儲存區

THotPDF.ValidateLoadedSignatureBatch

文件層級的進入點會列舉每個簽章欄位、針對來源逐位元組驗證每個 /ByteRange、收集 DSS 與 /VRI 證據,並以共享快取執行憑證路徑驗證。大於 1 的 WorkerLimit 會在並行工作執行緒上求值路徑

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;

共享快取

重複相同簽署者鏈的簽章會重用先前的路徑判定,而不重新計算:路徑快取索引鍵涵蓋以求值順序排列的 CMS 憑證集合、信任錨、中繼憑證、每個 OCSP、CRL 與 delta-CRL blob、撤銷模式、驗證時間與完整原則區塊。從快取注入的證據會以 vesCache 證據來源標記

撤銷快取會以發行者 DN、序號與有效期間為索引鍵,儲存批次期間看到的每個 OCSP 回應與 CRL,因此後續的簽章與共享同一個 THPDFRevocationEvidenceCache 執行個體的後續批次,都可以在不必重新提供證據的情況下解析撤銷

時間戳記快取會記住整個 CMS 文件時間戳記(ETSI.RFC3161)與內嵌簽章時間戳記符記的逐位元組驗證判定。內嵌符記的快取命中會設定 THPDFCMSVerifyOptions.SkipSignatureTimestampVerification,在主要 CMS 簽章仍被完整檢查的同時略過符記的重新驗證

獨立的批次引擎

THPDFSignatureValidationBatch 接受其 Info 已經帶有逐位元組驗證判定的工作,供掌管來源串流或在元件外驗證的呼叫端使用。FailFast 會在第一次負面判定後停止派送,而 THPDFCancellationToken 會把剩餘項目留在 sbsCancelled

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

結構化結果

每個項目回報簽章與憑證狀態、它重用的快取,以及每個簽章的診斷;HPDFSignatureBatchResultToJSON 會把整個批次連同快取統計資料轉譯為機器可讀的 JSON