THotPDF.ValidatePDFMACChain Method
Zvaliduje každou revizi PDF MAC od nejstarší cross-reference sekce po aktivní revizi a vrátí diagnostiku integrity specifickou pro revize
Deklarace
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;
Validační model
- Indexy revizí se číslují od nuly a řadí od původní revize po aktivní revizi
- První revize obsahující
AuthCodese stane kotvou řetězce a každá pozdější revize musí obsahovat platný PDF MAC - Každý MAC se ověří proti přesnému bajtovému prefixu končícímu na odpovídající hranici
startxrefa%%EOFdané revize - Validátor odmítne vyměněný historický MAC, i když novější MAC aktivní revize zůstává platný
KDFSaltmusí za kotvou zůstat stabilní a síla digestu nesmí mezi validovanými MAC revizemi klesnout- Autentizované hodnoty
/Pa/Permsse kontrolují po jednotlivých revizích, včetně permission bitu vyžadujícího PDF MAC
Záznamy výsledku
THPDFPDFMACChainValidationInfo hlásí RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, pokrytí permission, stabilitu soli, monotonii digestu a jeden záznam THPDFPDFMACRevisionValidation na revizi
THPDFPDFMACChainFailure rozliší chyby hranic revizí, chybějící MAC, neplatné či vyměněné MAC, změněný KDFSalt, downgrade digestu i downgrade autentizovaných permission
Implementace enumeruje řetězec revizí jednou a aktualizuje jeden kumulativní cross-reference stav, takže se vyhne dočasným kopiím PDF a opakovanému indexování objektů, při zachování nezávislé kryptografické verifikace každé chráněné revize
Příklad pro 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 vystaví tentýž výsledek jako PDFMACRevisionChain, takže automatizovaná workflow rozliší platnost aktivní revize od platnosti kompletního řetězce revizí
Viz ValidatePDFMAC, když je třeba zkontrolovat jen aktivní revizi, nebo PDF MAC Algorithm Agility and Policy Profiles pro sémantiku digest politiky