THotPDF.ValidatePDFMACChain Method
Valida ogni revisione PDF MAC dalla sezione cross-reference più vecchia alla revisione attiva e restituisce diagnostica di integrità specifica per revisione
Dichiarazione
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;
Modello di validazione
- Gli indici di revisione sono zero-based e ordinati dalla revisione originale alla revisione attiva
- La prima revisione che contiene
AuthCodediventa l'ancora della catena, e ogni revisione successiva deve contenere un PDF MAC valido - Ogni MAC viene verificato contro il prefisso di byte esatto che termina al confine
startxrefe%%EOFcorrispondente di quella revisione - Il validatore respinge un MAC storico sostituito anche quando un MAC più recente della revisione attiva resta valido
KDFSaltdeve restare stabile dopo l'ancora, e la forza del digest non deve diminuire fra le revisioni MAC validate- I valori autenticati
/Pe/Permsvengono controllati per ogni revisione, incluso il bit di permesso che richiede il PDF MAC
Record dei risultati
THPDFPDFMACChainValidationInfo riporta RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, copertura dei permessi, stabilità del salt, monotonia del digest e un record THPDFPDFMACRevisionValidation per revisione
THPDFPDFMACChainFailure distingue errori al confine di revisione, MAC mancanti, MAC non validi o sostituiti, KDFSalt modificato, downgrade del digest e downgrade autenticato dei permessi
L'implementazione enumera la catena di revisioni una sola volta e aggiorna un unico stato cumulativo del cross-reference, evitando copie temporanee del PDF e indicizzazioni ripetute degli oggetti, pur preservando la verifica crittografica indipendente di ogni revisione protetta
Esempio 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 espone lo stesso risultato di PDFMACRevisionChain, permettendo ai workflow automatizzati di distinguere la validità della revisione attiva dalla validità dell'intera catena di revisioni
Vedi ValidatePDFMAC quando serve controllare solo la revisione attiva, oppure Agilità Algoritmica del PDF MAC e Profili di Politica per la semantica della policy sui digest