共有キャッシュによる一括署名検証

HotPDF は、ロード済みドキュメントのすべての署名を、CMS 証明書セットと有効な検証オプションをキーとする証明書パスキャッシュ、CMS ブロブと /ByteRange をキーとするタイムスタンプキャッシュ、発行者とシリアルをキーとする THPDFRevocationEvidenceCache エビデンスストアの 3 つの共有キャッシュを通じて 1 パスで検証できます

THotPDF.ValidateLoadedSignatureBatch

ドキュメントレベルのエントリポイントはすべての署名フィールドを列挙し、各 /ByteRange をソースに対してバイト検証し、DSS と /VRI エビデンスを収集し、共有キャッシュで証明書パス検証を実行します。WorkerLimit が 1 を超えると、パスは並列ワーカーで評価されます

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・デルタ CRL ブロブ、失効モード、検証時刻、完全なポリシーブロックをカバーします。キャッシュから注入されたエビデンスには vesCache エビデンスソースがタグ付けされます

失効キャッシュは、バッチ中に確認されたすべての OCSP レスポンスと CRL を、発行者 DN、シリアル番号、有効期間ウィンドウをキーとして格納するため、後続の署名や同じ 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 としてレンダリングします