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 del 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 marcadores firmados con la configuración de certificación

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

Un documento solo puede contener una firma de certificación, de modo que una segunda petición de configuración se rechaza antes de cambiar el grafo de objetos

Estas APIs negocian automáticamente la salida PDF 1.5

Niveles de permisos DocMDP

Valor Permiso de certificación
dmpNoChangesNo se permiten cambios tras la certificación
dmpFormFillAndSignSe permiten rellenar formularios, instanciar plantillas y firmar
dmpFormFillSignAndAnnotateSe permiten los cambios anteriores más la creación, eliminación y modificación de anotaciones

dmpNone está reservado para resultados de inspección sin transform DocMDP y los métodos de productor lo rechazan

Ámbitos de bloqueo de campos

Valor Argumento de campos Efecto tras la firma
flaAllDebe estar vacíoBloquea todos los campos del formulario
flaIncludeUno o más nombres de campo únicosBloquea solo los campos listados
flaExcludeUno o más nombres de campo únicosBloquea todos los campos salvo los listados

AttachSignatureFieldLock rechaza nombres vacíos, nombres duplicados, valores de acción inválidos, una forma de Fields incompatible, un campo de destino sin firmar o un campo que ya lleva un lock o una 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 de documentos cargados

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

El lector informa del conjunto completo de transformadas, el recuento de referencias, el permiso DocMDP, los ámbitos SigFieldLock y FieldMDP, los derechos de uso UR, el fuente Catalog UR o UR3, el alcance de objetos Identity, los métodos desconocidos, la validez estructural y una cadena de diagnóstico

Verifica las formas directas e indirectas requeridas, los destinos /Perms del Catalog, las versiones de transform, las referencias duplicadas, las restricciones UR frente a UR3 y el valor por defecto opcional DocMDP /P 2

Si están presentes SigFieldLock y FieldMDP a la vez, 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 transformadas estándar

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

Los nombres de métodos desconocidos se retienen en UnknownTransformMethods y invalidan la estructura de permisos para que una transform crítica no pueda pasarse por alto

Frontera de validación

GetLoadedSignaturePermissions informa solo de la estructura de la política

VerifyLoadedSignature sigue informando de la integridad criptográfica por separado

AnalyzeLoadedSignatureRevisions realiza un análisis de cambios semánticos revisión a revisión para políticas DocMDP por byte-range, FieldMDP, UR3 e Identity, mientras que las firmas UR de digest de objeto no byte-range, obsoletas, siguen disponibles para la inspección estructural

SaveIncrementalUpdateAuthenticated convierte la inspección en exigencia: lee las políticas de sus instantáneas firmadas, autentica las firmas de control, valida todas las revisiones posteriores y publica mediante sustitución atómica solo después de que cada política tenga éxito

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