THotPDF.ValidatePDFMACChain Method
Valide chaque révision PDF MAC depuis la plus ancienne section de références croisées jusqu’à la révision active et renvoie des diagnostics d’intégrité spécifiques à chaque révision
Déclaration
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;
Modèle de validation
- Les indices de révision sont à base zéro et ordonnés de la révision d’origine vers la révision active
- La première révision contenant
AuthCodedevient l’ancre de la chaîne, et chaque révision ultérieure doit contenir un PDF MAC valide - Chaque MAC est vérifié sur le préfixe d’octets exact se terminant à la frontière
startxrefet%%EOFcorrespondante de la révision - Le validateur rejette un MAC historique remplacé même lorsqu’un MAC plus récent de la révision active reste valide
KDFSaltdoit rester stable après l’ancre, et la force du condensat ne doit pas diminuer entre les révisions MAC validées- Les valeurs authentifiées
/Pet/Permssont contrôlées révision par révision, y compris le bit de permission d’exigence PDF MAC
Enregistrements de résultat
THPDFPDFMACChainValidationInfo rapporte RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, la couverture des permissions, la stabilité du sel, la monotonie du condensat et un record THPDFPDFMACRevisionValidation par révision
THPDFPDFMACChainFailure distingue les erreurs de frontière de révision, les MAC manquants, les MAC invalides ou remplacés, le changement de KDFSalt, la régression de condensat et la régression de permissions authentifiées
L’implémentation énumère la chaîne de révisions une seule fois et met à jour un seul état cumulé de références croisées, évitant les copies temporaires du PDF et l’indexation répétée des objets tout en préservant une vérification cryptographique indépendante pour chaque révision protégée
Exemple 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;
Préflight
CreatePreflightReport expose le même résultat que PDFMACRevisionChain, ce qui permet aux workflows automatisés de distinguer la validité de la révision active de la validité de la chaîne complète de révisions
Voir ValidatePDFMAC lorsque seule la révision active doit être contrôlée, ou PDF MAC Algorithm Agility and Policy Profiles pour la sémantique des politiques de condensat