可按条款定位的 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 签名策略验证、批量签名验证和 签名证据获取