Firmas de certificación y bloqueos de campos

HotPDF puede crear las estructuras de permiso de PDF adjuntas a las firmas de certificación y a los bloqueos de campos firmados, para luego inspeccionar las mismas estructuras en un documento cargado

API de productor

procedure AddCertificationSignatureField(
  const FieldName: AnsiString;
  Rectangle: TRect;
  Permission: THPDFDocMDPPermission;
  ContentsBytes: Integer = 8192;
  const SubFilter: AnsiString = 'adbe.pkcs7.detached';
  const Reason: AnsiString = '';
  const Location: AnsiString = '';
  const ContactName: AnsiString = '';
  Flags: THPDFFormFieldFlags = []);

procedure ConfigureCertificationSignature(
  const FieldName: AnsiString;
  Permission: THPDFDocMDPPermission);

procedure AttachSignatureFieldLock(
  const FieldName: AnsiString;
  Action: THPDFFieldLockAction;
  const Fields: array of AnsiString);

AddCertificationSignatureField combina la creación del marcador firmado con la configuración de certificación

ConfigureCertificationSignature es para un marcador firmado ya creado y exige que ese campo sea el primer campo que lleve un diccionario de firma

Un documento puede contener únicamente una firma de certificación, de modo que una segunda solicitud de configuración se rechaza antes de que el grafo de objetos cambie

Estas APIs negocian la salida PDF 1.5 de forma automática

Niveles de permiso DocMDP

Valor Permiso de certificación
dmpNoChangesNo se permiten cambios después de la certificación
dmpFormFillAndSignSe permiten el llenado de formularios, la instanciación de plantillas y la firma
dmpFormFillSignAndAnnotateLos cambios anteriores más la creación, eliminación y modificación de anotaciones se permiten

dmpNone se reserva para resultados de inspección sin una transformación DocMDP y los métodos productores lo rechazan

Alcances de bloqueo de campos

Valor Argumento Fields Efecto después de firmar
flaAllDebe quedar vacíoBloquea todos los campos de formulario
flaIncludeUno o más nombres de campo únicosBloquea únicamente los campos listados
flaExcludeUno o más nombres de campo únicosBloquea todos los campos excepto los listados

AttachSignatureFieldLock rechaza nombres vacíos, nombres duplicados, valores de acción inválidos, una forma de Fields incompatible, un campo destino sin firmar o un campo que ya lleva un bloqueo o una política FieldMDP

Estructura generada

Ejemplo en Delphi

var
  LockedFields: THPDFAnsiStringArray;
begin
  HotPDF.CurrentPage.AddTextField(
    'InternalCode', '', Rect(40, 80, 220, 108));

  HotPDF.CurrentPage.AddCertificationSignatureField(
    'CertSig', Rect(40, 140, 260, 190),
    dmpFormFillAndSign, 8192,
    'adbe.pkcs7.detached', 'Document approval');

  SetLength(LockedFields, 1);
  LockedFields[0] := 'InternalCode';
  HotPDF.CurrentPage.AttachSignatureFieldLock(
    'CertSig', flaInclude, LockedFields);
end;

Inspección cargada

function GetLoadedSignaturePermissions(
  SigIndex: Integer;
  out Info: THPDFSignaturePermissionInfo): Boolean;

El lector reporta el permiso DocMDP, el enlace con Catalog, el alcance de SigFieldLock, el alcance de FieldMDP, los nombres de campo, la validez estructural y una cadena de problema de diagnóstico

Verifica las formas de objeto directas e indirectas requeridas y confirma que Catalog /Perms /DocMDP/P 2 apunte al mismo diccionario de firma

Si SigFieldLock y FieldMDP están ambos presentes, sus acciones y listas de campos deben coincidir

El recorrido del ámbito Identity es seguro frente a ciclos y está acotado a 64 niveles y 100000 objetos indirectos, mientras que la inspección nunca ejecuta JavaScript, acciones ni contenido de firmas

Cobertura de transformaciones estándar

MétodoPolítica informada
DocMDPPermiso de certificación y objetivo /Perms /DocMDP del Catalog correspondiente
URDerechos de documento, anotación, formulario, firma y archivo embebido, más el origen heredado /UR o /UR3 de rango de bytes
FieldMDPÁmbito de bloqueo de campos All, Include o Exclude y acuerdo SigFieldLock copiado
IdentityNúmeros de objeto transitivos alcanzables desde la raíz indirecta /Data obligatoria, seguros frente a ciclos

Los nombres de método desconocidos se retienen en UnknownTransformMethods y dejan la estructura de permisos como inválida, para que una transformación crítica no pase desapercibida

Límite de validación

GetLoadedSignaturePermissions reporta únicamente la estructura de la política

VerifyLoadedSignature continúa reportando la integridad criptográfica por separado

AnalyzeLoadedSignatureRevisions realiza un análisis semántico de cambios revisión a revisión para las políticas DocMDP de rango de bytes, FieldMDP, UR3 e Identity, mientras que las firmas UR de resumen de objeto sin rango de bytes, obsoletas, siguen estando disponibles para la inspección estructural

SaveIncrementalUpdateAuthenticated convierte la inspección en aplicación: lee las políticas desde sus snapshots firmados, autentica las firmas de control, valida todas las revisiones posteriores y publica mediante reemplazo atómico solo cuando cada política ha tenido éxito

Rendimiento

La validación del productor escanea únicamente los campos AcroForm creados y el arreglo pequeño de referencias de firma, mientras que la inspección cargada lee únicamente la firma seleccionada, su bloqueo, sus referencias y la entrada de permiso de Catalog

No se decodifica contenido de página, flujo de imagen, programa de fuente ni objeto indirecto sin relación

Véase también