Método THotPDF.ValidatePDFMACChain
Valida cada revisión PDF MAC desde la sección de referencias cruzadas más antigua hasta la revisión activa y devuelve diagnósticos de integridad específicos de cada 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
- Los índices de revisión están basados en cero y se ordenan desde la revisión original hasta la revisión activa
- La primera revisión que contiene
AuthCodese convierte en el ancla de la cadena, y cada revisión posterior debe contener un PDF MAC válido - Cada MAC se verifica contra el prefijo de bytes exacto que termina en el límite
startxrefy%%EOFde esa revisión - El validador rechaza un MAC histórico reemplazado incluso cuando un MAC activo más nuevo sigue siendo válido
KDFSaltdebe permanecer estable después del ancla y la fortaleza del resumen no debe disminuir entre las revisiones de MAC validadas- Los valores autenticados
/Py/Permsse comprueban por revisión, incluido el bit de permiso de requisito de PDF MAC
Registros de resultado
THPDFPDFMACChainValidationInfo informa de RevisionCount, FirstMACRevisionIndex, ValidatedRevisionCount, FailureRevisionIndex, FailureXRefOffset, cobertura de permisos, estabilidad de la sal, monotonicidad del resumen y un registro THPDFPDFMACRevisionValidation por revisión
THPDFPDFMACChainFailure distingue errores de límite de revisión, MAC ausentes, MAC inválidos o reemplazados, KDFSalt cambiado, degradación del resumen y degradación de permisos autenticados
La implementación enumera la cadena de revisiones una vez y actualiza un estado de referencias cruzadas acumulativo, evitando copias PDF temporales e indexación de objetos repetida mientras conserva 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;
Comprobación previa
CreatePreflightReport expone el mismo resultado que PDFMACRevisionChain, lo que permite que los flujos de trabajo automatizados distingan la validez de la revisión activa de la validez completa de la cadena de revisiones
Consulte ValidatePDFMAC cuando solo deba comprobarse la revisión activa, o Agilidad de algoritmos PDF MAC y perfiles de política para la semántica de la política de resumen