Método THotPDF.ValidatePDFMACChain

Valida cada revisión de PDF MAC desde la sección de cross-reference más antigua hasta la revisión activa y devuelve diagnósticos de integridad específicos por revisión

Declaración

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 validación

Records de resultado

THPDFPDFMACChainValidationInfo reporta RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, la cobertura de permisos, la estabilidad del salt, la monotonía del digest y un record THPDFPDFMACRevisionValidation por revisión

THPDFPDFMACChainFailure distingue errores de boundary de revisión, MACs faltantes, MACs inválidos o reemplazados, KDFSalt cambiado, downgrade de digest y downgrade de permisos autenticados

La implementación enumera la cadena de revisiones una sola vez y actualiza un único estado acumulado de cross-reference, evitando copias temporales del PDF e indexados repetidos de objetos, a la vez que preserva la verificación criptográfica independiente de cada revisión protegida

Ejemplo en 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 expone el mismo resultado como PDFMACRevisionChain, lo que permite a los flujos automatizados distinguir la validez de la revisión activa de la validez de toda la cadena de revisiones

Vea ValidatePDFMAC cuando solo haya que verificar la revisión activa, o PDF MAC Algorithm Agility and Policy Profiles para la semántica de la política de digests