THotPDF.ValidatePDFMACChain-Methode
Validiert jede PDF-MAC-Revision von der ältesten Cross-Reference-Section bis zur aktiven Revision und liefert revisionsspezifische Integritätsdiagnostik
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;
Validierungsmodell
- Revisionsindizes sind nullbasiert und vom Original bis zur aktiven Revision geordnet
- Die erste Revision mit
AuthCodewird zum Anker der Kette, und jede spätere Revision muss einen gültigen PDF-MAC enthalten - Jeder MAC wird gegen das exakte Byte-Präfix bis zur
startxref- und%%EOF-Grenze der jeweiligen Revision verifiziert - Der Validator weist einen ersetzten historischen MAC zurück, selbst wenn ein neuerer MAC der aktiven Revision gültig bleibt
KDFSaltmuss nach dem Anker stabil bleiben, und die Digest-Stärke darf zwischen validierten MAC-Revisionen nicht abnehmen- Authentifizierte
/P- und/Perms-Werte werden je Revision geprüft, einschließlich des Permission-Bits für die PDF-MAC-Anforderung
Ergebnisdatensätze
THPDFPDFMACChainValidationInfo meldet RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, Permission-Abdeckung, Salt-Stabilität, Digest-Monotonie und je Revision einen THPDFPDFMACRevisionValidation-Datensatz
THPDFPDFMACChainFailure unterscheidet Revisionsgrenzfehler, fehlende MACs, ungültige oder ersetzte MACs, geändertes KDFSalt, Digest-Downgrade und authentifiziertes Permission-Downgrade
Die Implementierung enumeriert die Revisionskette einmal und pflegt einen kumulativen Cross-Reference-Zustand; das vermeidet temporäre PDF-Kopien und wiederholte Objektindizierung und bewahrt dennoch unabhängige kryptografische Verifikation für jede geschützte Revision
Delphi-Beispiel
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 legt dasselbe Ergebnis als PDFMACRevisionChain offen, sodass automatisierte Workflows die Gültigkeit der aktiven Revision von der Gültigkeit der vollständigen Revisionskette unterscheiden können
Siehe ValidatePDFMAC, wenn nur die aktive Revision geprüft werden muss, oder PDF MAC Algorithm Agility und Policy-Profile für die Digest-Policy-Semantik