共有キャッシュによる一括署名検証
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 としてレンダリングします