THotPDF.ValidatePDFMACChain Method
Validerer hver PDF MAC-revision fra den ældste krydsreferencesektion til den aktive revision og returnerer revisionsspecifik integritetsdiagnostik
Deklaration
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;
Valideringsmodel
- Revisionsindeks er nul-baserede og ordnet fra den originale revision til den aktive revision
- Den første revision, der indeholder
AuthCode, bliver kædens anker, og hver senere revision skal indeholde en gyldig PDF MAC - Hver MAC verificeres mod det nøjagtige byte-præfiks, der slutter ved revisionens matchende
startxref- og%%EOF-grænse - Validatoren afviser en udskiftet historisk MAC, selv når en nyere aktive-revisions MAC stadig er gyldig
KDFSaltskal forblive stabilt efter ankeret, og digest-styrken må ikke falde mellem validerede MAC-revisioner- Autentificerede
/P- og/Perms-værdier kontrolleres pr. revision, inklusive PDF MAC-kravets tilladelsesbit
Resultatposter
THPDFPDFMACChainValidationInfo rapporterer RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, tilladelsesdækning, saltstabilitet, digest-monotonicitet og én THPDFPDFMACRevisionValidation-post pr. revision
THPDFPDFMACChainFailure skelner mellem revisionsgrænsefejl, manglende MAC'er, ugyldige eller udskiftede MAC'er, ændret KDFSalt, digest-nedgradering og autentificeret tilladelsesnedgradering
Implementeringen optæller revisionskæden én gang og opdaterer én kumulativ krydsreferencetilstand, hvilket undgår midlertidige PDF-kopier og gentagen objektindeksering, samtidig med at uafhængig kryptografisk verificering bevares for hver beskyttet revision
Delphi-eksempel
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 eksponerer det samme resultat som PDFMACRevisionChain, hvilket lader automatiserede workflows skelne aktive-revisions gyldighed fra komplet kædegyldighed
Se ValidatePDFMAC, når kun den aktive revision skal tjekkes, eller PDF MAC-algoritmeagilitet og politikprofiler for digest-politik-semantik