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