THotPDF.ValidatePDFMACChain Method
Waliduje każdą rewizję PDF MAC od najstarszej sekcji xref do rewizji aktywnej i zwraca diagnostykę integralności przypisaną do konkretnych rewizji
Deklaracja
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;
Model walidacji
- Indeksy rewizji są liczone od zera i uporządkowane od rewizji pierwotnej do rewizji aktywnej
- Pierwsza rewizja zawierająca
AuthCodestaje się kotwicą łańcucha, a każda późniejsza rewizja musi zawierać poprawny PDF MAC - Każdy MAC jest weryfikowany względem dokładnego prefiksu bajtów kończącego się na granicy pasujących
startxrefi%%EOFdanej rewizji - Walidator odrzuca podmieniony historyczny MAC, nawet gdy nowszy MAC rewizji aktywnej pozostaje poprawny
KDFSaltmusi pozostać stabilny po kotwicy, a siła skrótu nie może maleć między walidowanymi rewizjami MAC- Uwierzytelnione wartości
/Pi/Permssą sprawdzane dla każdej rewizji, w tym bit uprawnienia wymagającego PDF MAC
Rekordy wyników
THPDFPDFMACChainValidationInfo raportuje RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, pokrycie uprawnień, stabilność soli, monotoniczność skrótu oraz po jednym rekordzie THPDFPDFMACRevisionValidation na rewizję
THPDFPDFMACChainFailure rozróżnia błędy granic rewizji, brakujące MAC, niepoprawne albo podmienione MAC, zmieniony KDFSalt, obniżenie siły skrótu i obniżenie uwierzytelnionych uprawnień
Implementacja wylicza łańcuch rewizji raz i aktualizuje jeden skumulowany stan xref, unikając tymczasowych kopii PDF i powtórnego indeksowania obiektów, zachowując przy tym niezależną weryfikację kryptograficzną każdej chronionej rewizji
Przykład 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 udostępnia ten sam wynik co PDFMACRevisionChain, pozwalając zautomatyzowanym workflow odróżnić poprawność rewizji aktywnej od poprawności całego łańcucha rewizji
Zobacz ValidatePDFMAC, gdy sprawdzana ma być tylko rewizja aktywna, albo Zwinność algorytmów PDF MAC i profile polityk dla semantyki polityk skrótów