Validación de la política de firma PAdES

HotPDF crea y valida el atributo firmado explícito signature-policy-identifier de CMS usado por las firmas PAdES E-EPES

Generar una política explícita

Establezca SignaturePolicyOID y el resumen del documento de política en THPDFCMSSignOptions y, luego, elija calificadores estructurados opcionales

Options := HPDFCMSDefaultOptions(palExtended_E_EPES);
Options.SignaturePolicyOID := '1.2.3.4.5.1';
Options.SignaturePolicyHash := HPDFCMSDigestBytes(PolicyDocument, cmsdaSHA256);
Options.SignaturePolicyURI := 'https://policies.example/approval-v1';

SetLength(Options.SignaturePolicyQualifiers, 1);
Options.SignaturePolicyQualifiers[0].Kind := cmsqUserNotice;
Options.SignaturePolicyQualifiers[0].ExplicitText := 'Approval policy applies';

CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);

SignaturePolicyHashAlgOID se establece de forma predeterminada en SHA-256 cuando está vacío, mientras que SignaturePolicyURI sigue siendo un atajo de compatibilidad para un calificador SPuri y se puede combinar con SignaturePolicyQualifiers

El modelo de calificadores estructurados admite SPuri, SPUserNotice con una referencia de aviso y un texto explícito opcionales, y SPDocSpecification identificado por un OID o URI

Establezca SignaturePolicyHashIsUnknown solo cuando el firmante no conozca el resumen de la política; HotPDF entonces emite la representación ETSI de todo ceros en la longitud de resumen seleccionada

Analizar e informar

HPDFParseCMSSignature expone el atributo mediante THPDFSignatureInfo.SignaturePolicy, incluidos su identificador, algoritmo de resumen, bytes de resumen, indicador de resumen desconocido, calificadores y estado de validación

Los valores de calificador conocidos se decodifican en campos tipados, mientras que un calificador no reconocido conserva su OID y su valor DER en bruto para el manejo a nivel de aplicación

HPDFSignatureValidationReportToJSON serializa los mismos datos de política y calificadores con un estado de validación legible por máquina

Fijar una política requerida

VerifyOptions := THPDFCMSVerifyOptions.Default;
VerifyOptions.RequireSignaturePolicy := True;
VerifyOptions.ExpectedSignaturePolicyOID := '1.2.3.4.5.1';
VerifyOptions.ExpectedSignaturePolicyHash := ExpectedPolicyHash;
VerifyOptions.SignaturePolicyDocument := PolicyDocument;
VerifyOptions.VerifySignaturePolicyDocumentHash := True;
VerifyOptions.RejectUnknownSignaturePolicyHash := True;

Status := HPDFVerifyCMSSignatureEx(Source, ByteRange, CMS,
  VerifyOptions, SignatureInfo);

Los campos de OID y resumen esperados limitan solo el valor correspondiente, y la verificación del documento de política calcula el resumen incluso de un documento intencionalmente vacío cuando VerifySignaturePolicyDocumentHash es verdadero

Las políticas desconocidas ausentes, no coincidentes, no admitidas o rechazadas devuelven svSignaturePolicyMismatch y vfcSignaturePolicyMismatch con un THPDFSignaturePolicyValidationStatus preciso

Las comprobaciones de política se ejecutan antes del trabajo de proveedor de firma, ruta de certificado o evidencia y se aplican solo a los registros SignerInfo primarios, por lo que una política de documento principal no limita las contrafirmas

Rigurosidad y límites

El analizador rechaza atributos de política duplicados, valores múltiples, NULL de política implícita, calificadores conocidos malformados, valores IA5String no ASCII, Unicode inválido, longitudes de resumen conocido incorrectas y tamaños de colección superiores a los límites de implementación configurados

PAdES E-EPES requiere el atributo de política explícito exactamente una vez y prohíbe la entrada /Reason del diccionario de firma PDF cuando ese atributo está presente; la capa CMS no puede inspeccionar el diccionario PDF, por lo que el flujo de trabajo de generación de PDF debe imponer esa restricción final

Consulte firmantes primarios múltiples de CMS, consistencia del algoritmo de resumen de CMS y informes de validación de CMS