带共享缓存的批量签名验证
HotPDF 可以通过三个共享缓存在一次遍历中验证已加载文档的每个签名:以 CMS 证书集和有效验证选项为键的证书路径缓存、以 CMS 数据块和 /ByteRange 为键的时间戳缓存,以及以颁发者和序列号为键的 THPDFRevocationEvidenceCache 证据存储
THotPDF.ValidateLoadedSignatureBatch
文档级入口点枚举每个签名字段,对照源逐字节验证每个 /ByteRange,收集 DSS 和 /VRI 证据,并使用共享缓存运行证书路径验证。大于一的 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 数据块、吊销模式、验证时间以及完整的策略块。从缓存注入的证据会标记为 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