THotPDF.ValidatePDFMACChain Method

校验从最早的 xref 节到当前修订版本之间的每个 PDF MAC 修订版本,并返回针对各修订版本的完整性诊断

声明

function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;
function ValidatePDFMACChain(const FileName: TFileName; const Password: AnsiString; const Options: THPDFPDFMACOptions; out ValidationInfo: THPDFPDFMACChainValidationInfo): boolean; overload;

Validation model

Result records

THPDFPDFMACChainValidationInfo reports RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, permission coverage, salt stability, digest monotonicity, and one THPDFPDFMACRevisionValidation record per revision

THPDFPDFMACChainFailure distinguishes revision-boundary errors, missing MACs, invalid or replaced MACs, changed KDFSalt, digest downgrade, and authenticated permission downgrade

实现只枚举一次修订版本链,并更新同一个累积的 xref 状态,避免生成临时的 PDF 副本和重复建立对象索引,同时对每个受保护的修订版本仍保持独立的密码学校验

Delphi 示例

var
  ChainInfo: THPDFPDFMACChainValidationInfo;
begin
  if not PDF.ValidatePDFMACChain('authenticated.pdf', 'user-password',
    ChainInfo) then
    raise Exception.CreateFmt('Revision %d at xref %d failed: %s',
      [ChainInfo.FailureRevisionIndex, ChainInfo.FailureXRefOffset,
       ChainInfo.Message]);
end;

Preflight

CreatePreflightReport 通过 PDFMACRevisionChain 暴露同样的结果,使自动化流程能区分“当前修订版本有效”和“完整修订版本链有效”

只需检查当前修订版本时,请参阅 ValidatePDFMAC;摘要策略的语义请参阅 PDF MAC Algorithm Agility and Policy Profiles