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 |
|---|---|
dmpNoChanges | No se permiten cambios tras la certificación |
dmpFormFillAndSign | Se permiten rellenar formularios, instanciar plantillas y firmar |
dmpFormFillSignAndAnnotate | Se 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 |
|---|---|---|
flaAll | Debe estar vacío | Bloquea todos los campos del formulario |
flaInclude | Uno o más nombres de campo únicos | Bloquea solo los campos listados |
flaExclude | Uno o más nombres de campo únicos | Bloquea 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
- La firma de certificación lleva un array
/Referencedirecto que contiene un diccionario de referencia de firma DocMDP directo y parámetros de transformación directos - La entrada Catalog
/Perms /DocMDPapunta al mismo diccionario de firma indirecto - La entrada de campo
/Lockapunta a un diccionario/Type /SigFieldLockindirecto - El ámbito de bloqueo se copia en una referencia de firma FieldMDP directa y su entrada
/Dataapunta a la raíz Catalog indirecta - El diccionario de firma marca las referencias de transformación como críticas a través de
/V 1
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étodo | Política informada |
|---|---|
DocMDP | Permiso de certificación y destino /Perms /DocMDP del Catalog correspondiente |
UR | Derechos 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 |
Identity | Nú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