可按条款定位的 PAdES Profile Preflight

THotPDF.PreflightLoadedPAdES 把已加载的签名对照某个累积式 PAdES baseline 或 extended profile 做评估,返回所有适用的要求(包括通过的检查),并附带标准条款与 PDF 证据溯源

支持的 target

baseline target 包括 palBaseline_B_B、palBaseline_B_T、palBaseline_B_LT 和 palBaseline_B_LTA;extended target 包括 palExtended_E_BES、palExtended_E_EPES 和 palExtended_E_LTV

通用的 palLegacy_adbePkcs7 值不是 PAdES profile,作为 target 传入会被拒绝

评估契约

流重载保留调用方持有的源位置,文件重载则重新打开 LoadFromFile 使用的源。函数返回 True 表示评估完成;是否符合规范要用 THPDFPAdESPreflightReport.Compliant 判断

var
  Report: THPDFPAdESPreflightReport;
  Requirement: THPDFPAdESPreflightRequirement;
begin
  PDF.LoadFromFile('Signed.pdf');
  if not PDF.PreflightLoadedPAdES(0, palBaseline_B_LT, Report) then
    raise Exception.Create(string(Report.Issue));

  for Requirement in Report.Requirements do
    WriteLn(string(Requirement.RuleID), ': ',
      BoolToStr(Requirement.Passed, True), ' at ',
      string(Requirement.Clause), ' object ',
      Requirement.ObjectNumber, ' revision ',
      Requirement.RevisionIndex);
end;

检查的证据

baseline 与 extended 检查会检查签名字典、完整的 /ByteRange 覆盖、CMS 签名有效性、签名属性基数、content type、message digest、签名时间约束、/M、/Filter、/SubFilter、/Reason,以及被禁止的 /Cert 条目

ESS signing-certificate 和 signing-certificate-v2 检查会对实际的签名者证书做 hash,并要求存在匹配的 ESSCertID 引用,而不是仅凭名称接受某个属性

更高的层级还会检查有效的签名或文档时间戳、DSS 证书与吊销数组、引入验证材料的修订版本,以及后面的文档时间戳是否覆盖该 DSS 修订

结构化发现

每个 THPDFPAdESPreflightRequirement 都报告其引入的 Profile、规范性 Level、稳定的 RuleID、Clause、PDF Path、ObjectNumber、RevisionIndex、Passed 状态和诊断 Message

FailedRequirementCount 统计未通过的 shall 级规则,WarningCount 统计未通过的 should 级指引。HighestConformingProfile 指向通过的最高累积 profile,只有在 HasConformingProfile 为 true 时才有意义

参见 PAdES 签名策略验证、批量签名验证和 签名证据获取