HPDFVerifyHeadlessCMS
HPDFHeadlessCMS verifica firmas CMS detached contra un TStream propiedad del llamador usando OpenSSL 3 y el validador compartido de ByteRange de firmas
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 contra overflow
El CMS debe contener contenido detached y al menos un firmante; el verificador autentica el digest del contenido, los atributos firmados y cada firmante sin agregar todo el source, acepta padding de ceros final y rechaza datos CMS finales distintos de cero
La propiedad del source permanece en el llamador, su posición se restaura, y el llamador 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 de signing-certificate ESS v1 o v2 autenticado; su hash de certificado y el issuer y número de serie opcionales deben identificar al firmante real, independientemente del trust de certificados
Los atributos ESS existentes se verifican incluso cuando RequireCAdES es false; los atributos duplicados, los valores múltiples, las secuencias malformadas y los bytes ASN.1 finales se rechazan, mientras que las anclas de trust explícitas habilitan una pasada separada de verificación de cadenas de certificados
La función valida los rangos numéricos pero no vincula un hueco excluido a un token Contents del PDF; usa THPDFHeadlessDocument.VerifySignature para esa verificación a nivel de documento
El loader usa HOTPDF_OPENSSL_LIBRARY cuando está asignada; de lo contrario, libcrypto.so.3 en Linux o libcrypto-3.dll en Windows; la librería de 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 malformado, los presupuestos, los símbolos de runtime faltantes, los fallos de lectura del source y la cancelación lanzan EHPDFHeadlessCMSError; las firmas inválidas y las cadenas de certificados no confiables 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