THotPDF.ValidatePDFMACChain Method
Valida cada revisão PDF MAC da seção de referência cruzada mais antiga até a revisão ativa e retorna diagnósticos de integridade específicos da revisão
Declaração
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;
Modelo de validação
- Os índices de revisão são baseados em zero e ordenados da revisão original até a revisão ativa
- A primeira revisão que contém
AuthCodese torna a âncora da cadeia, e toda revisão posterior deve conter um PDF MAC válido - Cada MAC é verificado em relação ao prefixo de bytes exato que termina no limite correspondente de
startxrefe%%EOFdessa revisão - O validador rejeita um MAC histórico substituído mesmo quando um MAC mais novo da revisão ativa permanece válido
KDFSaltdeve permanecer estável após a âncora, e a força do digest não deve diminuir entre revisões MAC validadas- Valores autenticados de
/Pe/Permssão verificados por revisão, incluindo o bit de permissão de exigência de PDF MAC
Registros de resultado
THPDFPDFMACChainValidationInfo relata RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, cobertura de permissão, estabilidade de sal, monotonicidade de digest e um registro THPDFPDFMACRevisionValidation por revisão
THPDFPDFMACChainFailure distingue erros de limite de revisão, MACs ausentes, MACs inválidos ou substituídos, KDFSalt alterado, rebaixamento de digest e rebaixamento de permissão autenticada
A implementação enumera a cadeia de revisões uma vez e atualiza um único estado de referência cruzada cumulativo, evitando cópias temporárias de PDF e indexação repetida de objetos, preservando a verificação criptográfica independente para cada revisão protegida
Exemplo 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é-verificação
CreatePreflightReport expõe o mesmo resultado que PDFMACRevisionChain, permitindo que fluxos de trabalho automatizados distingam validade da revisão ativa de validade completa da cadeia de revisões
Veja ValidatePDFMAC quando apenas a revisão ativa deve ser verificada, ou Agilidade de algoritmo PDF MAC e perfis de política para semântica de política de digest