THotPDF.ValidatePDFMACChain Method
Validerar varje PDF MAC-revision från den äldsta korsreferenssektionen till den aktiva revisionen och returnerar 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;
Valideringsmodell
- Revisionsindex är nollbaserade och ordnade från ursprungsrevisionen till den aktiva revisionen
- Den första revisionen som innehåller
AuthCodeblir kedjans ankare, och varje senare revision måste innehålla en giltig PDF MAC - Varje MAC verifieras mot det exakta byte-prefix som slutar vid revisionens matchande
startxref- och%%EOF-gräns - Valideraren avvisar en ersatt historisk MAC även när en nyare MAC i den aktiva revisionen fortfarande är giltig
KDFSaltmåste förbli stabilt efter ankaret, och digeststyrkan får inte minska mellan validerade MAC-revisioner- Autentiserade
/P- och/Perms-värden kontrolleras per revision, inklusive behörighetsbiten för PDF MAC-kravet
Resultatposter
THPDFPDFMACChainValidationInfo rapporterar RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, behörighetstäckning, saltstabilitet, digestmonotoni och en THPDFPDFMACRevisionValidation-post per revision
THPDFPDFMACChainFailure skiljer på fel vid revisionsgränser, saknade MAC:er, ogiltiga eller ersatta MAC:er, ändrad KDFSalt, digestnedgradering och autentiserad behörighetsnedgradering
Implementationen går igenom revisionskedjan en gång och uppdaterar ett kumulativt korsreferenstillstånd, vilket undviker temporära PDF-kopior och upprepad objektindexering samtidigt som varje skyddad revision fortfarande verifieras kryptografiskt oberoende
Delphi-exempel
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 exponerar samma resultat som PDFMACRevisionChain, så att automatiserade workflows kan skilja giltigheten för den aktiva revisionen från giltigheten för hela revisionskedjan
Se ValidatePDFMAC när bara den aktiva revisionen behöver kontrolleras, eller PDF MAC Algorithm Agility and Policy Profiles för semantiken kring digestpolicy