function ValidatePadesTrust(const Options: TPadesTrustValidationOptions): TPadesValidationResult;
function ValidatePadesTrustAsync(const Options: TPadesTrustValidationOptions; const Reply: TPadesTrustValidationReply): Boolean;
两个方法都会捕获活动组件所保留的原始文件、内存缓冲区、自定义流或已完成的渐进式源,绝不会验证 PDFium 重新保存的副本
每个普通签名都会对照其原始 ByteRange、CMS 签名属性和签名值、signing-certificate-v2 绑定、所配置后端的当前证书链以及可选的吊销证据进行检查
签名时间戳和文档时间戳还会额外验证其 SHA-256 消息 imprint、附带的 CMS 签名、TSA 链以及可选的吊销状态
按 RFC 3161 section 2.3,时间戳签名者证书必须包含标记为 critical、且只含 id-kp-timeStamping 的 Extended Key Usage 扩展。EKU 缺失、非 critical、混有其他用途或用途不同,即使 token 的 CMS 签名和基本证书链有效,也会得到无效的 TimeStampTrustStatus;外层文档签名保留独立结果
异步重载在派发之前捕获源,并通过 TPadesTrustValidationReply 报告完成
| NetworkPolicy | ptnpOffline 仅使用缓存的证书数据,而 ptnpOnline 允许 Windows 链检索 |
| CheckRevocation | 请求所配置后端的链吊销评估;Windows 不包括根证书,OpenSSL 则用配置的 CRL 对照证书链进行检查 |
| CheckTimeStamps | 在存在时验证签名时间戳和文档时间戳令牌 |
| UrlRetrievalTimeoutMs | 为链和吊销处理所用的本机 URL 检索设定时限 |
| QualifiedTrustEvaluator | 可选地根据已认证的离线受信任列表快照评估签名者和收集的证书链 |
| QualifiedValidationTime | 选择 UTC 服务历史评估时间,零表示使用当前时间 |
| CancellationToken | 在下一个验证阶段边界停止 |
| OnProgress | 接收阶段、签名索引、签名数量和整体百分比 |
TPadesValidationResult.Signatures 报告独立的 ByteRangeStatus、CmsSignatureStatus、AlgorithmPolicyStatus、SigningCertificateStatus、CertificateTrustStatus、QualifiedTrustStatus、RevocationStatus、TimeStampStatus、TimeStampSignatureStatus、TimeStampTrustStatus 和 TimeStampRevocationStatus 值,而 QualifiedTrust 标识匹配的国家地区、提供方、服务、类型、状态和开始时间
AlgorithmInfo 记录 CMS 摘要和签名 OID,以及签名证书公钥和命名曲线 OID,并在接受完整性之前应用 ISO/TS 32002 的 NIST、Brainpool、Ed25519、Ed448 和曲线到摘要规则
不受支持的算法、不可用的平台信任服务、不完整的吊销证据和已取消的验证都不会被提升为有效状态
每个签名条目包含来自其 CMS 验证的 RevocationReason 和 NativeRevocationError,外加来自时间戳令牌验证的独立 TimeStampRevocationReason 和 NativeTimeStampRevocationError。reason 字段使用 TPdfCmsRevocationReason;原生错误字段是所选后端错误空间中的 Cardinal 值,例如 OpenSSL 的 X509_V_ERR_* 代码,或原始的 Windows 提供方 / GetLastError DWORD。Windows 的值原样保留,不会转换为统一的 HRESULT 空间
时间戳那一对描述嵌入的签名时间戳或文档时间戳,不会覆盖普通签名的那一对。只有令牌结构和消息 imprint 检查允许 CMS 验证执行之后,才会填充时间戳诊断
CheckRevocation = False 时,诊断 reason 保持 pcrrNone,错误保持 0。检查未被执行或后端未提供详细 reason 时同样是这些默认值,因此请始终读取相应的状态字段,不要把空诊断当成成功
Active 为 True,并需要完整的原始源快照ValidatePadesTrustAsync 调用时,OnProgress 在工作线程上运行,不得直接操作 UI 控件TPdfFuture 主线程同步模式
var
Options: TPadesTrustValidationOptions;
Validation: TPadesValidationResult;
begin
Options := TPadesTrustValidationOptions.Default;
Options.NetworkPolicy := ptnpOnline;
Options.CheckRevocation := True;
Validation := Pdf1.ValidatePadesTrust(Options);
end;