Firmas de certificación y bloqueos de campos

HotPDF puede crear las estructuras de permiso PDF adjuntas a firmas de certificación y 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 de marcador firmado con la configuración de certificación

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

Un documento puede contener solo una firma de certificación, por lo que una segunda solicitud de configuración se rechaza antes de que cambie el grafo de objetos

Estas APIs negocian la salida PDF 1.5 automáticamente

Niveles de permiso DocMDP

ValorPermiso de certificación
dmpNoChangesNo se permiten cambios después de la certificación
dmpFormFillAndSignSe permiten el relleno 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 es rechazado por los métodos productor

Ámbitos de bloqueo de campo

ValorArgumento FieldsEfecto tras firmar
flaAllDebe estar vacíoBloquea todos los campos de formulario
flaIncludeUno o más nombres de campo únicosBloquea solo 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 no firmado o un campo que ya lleva un bloqueo o política FieldMDP

Estructura emitida

Ejemplo 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 informa del permiso DocMDP, el enlace Catalog, el ámbito SigFieldLock, el ámbito FieldMDP, los nombres de campo, la validez estructural y una cadena de problema de diagnóstico

Verifica las formas de objeto directo e indirecto requeridas y confirma que Catalog /Perms /DocMDP apunta al mismo diccionario de firma

Si tanto SigFieldLock como FieldMDP están presentes, sus acciones y listas de campos deben concordar

El lector realiza una inspección acotada de diccionarios y arrays y no ejecuta JavaScript, acciones ni contenido de firma

Límite de validación

GetLoadedSignaturePermissions informa solo de la estructura de políticas

VerifyLoadedSignature sigue informando de la integridad criptográfica por separado

Ningún método afirma que cada revisión incremental posterior obedezca el permiso DocMDP o FieldMDP informado, porque eso requiere un análisis de cambio semántico revisión por revisión

Rendimiento

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

No se decodifica ningún contenido de página, flujo de imagen, programa de fuente u objeto indirecto no relacionado

Véase también