HPDFVerifyHeadlessCMS
HPDFHeadlessCMS verifica firmas CMS detached contra un TStream propiedad del llamante usando OpenSSL 3 y el validador ByteRange de firmas compartido
function HPDFVerifyHeadlessCMS(Source: TStream; const ByteRange: array of Int64; const CMSDER: SysUtils.TBytes; const Options: THPDFHeadlessCMSOptions): THPDFHeadlessCMSResult;
Un rango de dos elementos debe cubrir el stream completo; un rango de cuatro elementos empieza en cero y excluye un intervalo no vacío, con pares ordenados y acotados y aritmética segura ante overflow
El CMS debe contener contenido detached y al menos un firmante; el verifier autentica el digest del contenido, los atributos firmados y cada firmante sin agregar todo el origen, acepta padding de ceros final y rechaza datos CMS finales no nulos
La propiedad del origen sigue siendo del llamante, su posición se restaura, y el llamante debe proporcionar acceso serial exclusivo durante la verificación
SignatureValid describe la integridad criptográfica; el trust de certificados se evalúa por separado solo cuando TrustedCAFile suministra anclas de trust PEM explícitas
RequireCAdES exige un binding signing-certificate ESS v1 o v2 autenticado; su hash de certificado y su issuer y número de serie opcionales deben identificar al firmante real, con independencia del trust del certificado
Los atributos ESS existentes se comprueban incluso cuando RequireCAdES es false; los atributos duplicados, los valores múltiples, las secuencias mal formadas y los bytes ASN.1 finales se rechazan, mientras que las anclas de trust explícitas activan una pasada separada de verificación de cadena de certificados
La función valida los rangos numéricos pero no vincula un hueco excluido a un token Contents PDF; usa THPDFHeadlessDocument.VerifySignature para esa comprobación a nivel de documento
El loader usa HOTPDF_OPENSSL_LIBRARY si está establecida; en caso contrario libcrypto.so.3 en Linux o libcrypto-3.dll en Windows; la librería runtime debe coincidir con la arquitectura del proceso, y la primera librería cargada con éxito permanece activa hasta la finalización de la unit
El CMS mal formado, los presupuestos, los símbolos runtime ausentes, los fallos de lectura del origen y la cancelación lanzan EHPDFHeadlessCMSError; las firmas inválidas y las cadenas de certificados de confianza dudosa devuelven campos de resultado false explícitos con detalles de OpenSSL
Esta función no obtiene evidencia de revocación, anclas de trust, timestamps ni datos de certificados remotos, y no establece un tiempo de firma histórico