THotPDF.ValidatePDFMACChain Method

가장 오래된 cross-reference section부터 활성 revision까지 모든 PDF MAC revision을 검증하고 revision별 무결성 진단을 돌려줍니다

선언

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;

검증 모델

결과 레코드

THPDFPDFMACChainValidationInfo는 RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, permission 적용 범위, salt 안정성, digest 단조성, revision별 THPDFPDFMACRevisionValidation 레코드를 보고합니다

THPDFPDFMACChainFailure는 revision 경계 error, 누락된 MAC, invalid 또는 교체된 MAC, 바뀐 KDFSalt, digest 다운그레이드, 인증 permission 다운그레이드를 구분합니다

구현은 revision 체인을 한 번만 순회하면서 누적 cross-reference 상태 하나를 갱신하고, 보호되는 각 revision의 독립적인 암호학적 검증은 그대로 유지하면서 임시 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으로 노출하므로, 자동화 워크플로우가 활성 revision의 유효성과 전체 revision 체인의 유효성을 구분할 수 있습니다

활성 revision만 검사하면 되는 경우는 ValidatePDFMAC를, digest policy 의미 체계는 PDF MAC 알고리즘 민첩성 및 정책 프로필을 참고하세요