Assinaturas de certificação e bloqueios de campos

O HotPDF pode criar as estruturas de permissão de PDF anexadas a assinaturas de certificação e a bloqueios de campos assinados, para de seguida inspecionar as mesmas estruturas num documento carregado

API de produtor

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 a criação do marcador assinado com a configuração de certificação

ConfigureCertificationSignature destina-se a um marcador assinado já criado e exige que esse campo seja o primeiro campo a transportar um dicionário de assinatura

Um documento pode conter apenas uma assinatura de certificação, pelo que um segundo pedido de configuração é rejeitado antes que o grafo de objetos seja alterado

Estas APIs negociam a saída PDF 1.5 automaticamente

Níveis de permissão DocMDP

Valor Permissão de certificação
dmpNoChangesNenhuma alteração é permitida após a certificação
dmpFormFillAndSignSão permitidos o preenchimento de formulários, a instanciação de modelos e a assinatura
dmpFormFillSignAndAnnotateSão permitidas as alterações anteriores mais a criação, eliminação e modificação de anotações

dmpNone está reservado para resultados de inspeção sem uma transformação DocMDP e é rejeitado pelos métodos de produtor

Âmbitos de bloqueio de campos

Valor Argumento Fields Efeito após assinar
flaAllDeve estar vazioBloqueia todos os campos de formulário
flaIncludeUm ou mais nomes de campo únicosBloqueia apenas os campos listados
flaExcludeUm ou mais nomes de campo únicosBloqueia todos os campos exceto os listados

AttachSignatureFieldLock rejeita nomes vazios, nomes duplicados, valores de ação inválidos, uma forma de Fields incompatível, um campo de destino não assinado ou um campo que já transporta um bloqueio ou uma política FieldMDP

Estrutura emitida

Exemplo em 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;

Inspecção carregada

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

O leitor reporta a permissão DocMDP, a ligação com o Catalog, o âmbito do SigFieldLock, o âmbito do FieldMDP, os nomes dos campos, a validade estrutural e uma cadeia de problema de diagnóstico

Verifica as formas diretas e indiretas exigidas, os alvos /Perms do Catalog, as versões de transformações, referências duplicadas, restrições UR vs. UR3, e a predefinição opcional DocMDP /P 2

Se SigFieldLock e FieldMDP estiverem ambos presentes, as suas ações e listas de campos devem concordar

A travessia do âmbito Identity é segura contra ciclos e limitada a 64 níveis e 100 000 objetos indiretos, enquanto a inspeção nunca executa JavaScript, ações ou conteúdo de assinaturas

Limite de validação

MethodPolítica reportada
DocMDPPermissão de certificação e /Perms /DocMDP target
URDireitos de documento, anotação, formulário, assinatura e ficheiro incorporado, mais /UR ou intervalo de bytes /UR3 source
FieldMDPÂmbito de bloqueio de campos All, Include ou Exclude e concordância copiada de SigFieldLock
IdentityNúmeros de objetos indiretos transitivos, seguros contra ciclos, alcançáveis a partir do /Data root

Os nomes de métodos desconhecidos são retidos em UnknownTransformMethods e tornam a estrutura de permissões inválida, para que uma transformação crítica não passe despercebida

Limite de validação

GetLoadedSignaturePermissions informa apenas a estrutura da política

GetLoadedSignaturePermissions reporta apenas a estrutura da política

VerifyLoadedSignature continua a reportar a integridade criptográfica separadamente

AnalyzeLoadedSignatureRevisions executa análise semântica de mudanças revisão a revisão para políticas DocMDP, FieldMDP, UR3 e Identity de intervalos de bytes, enquanto as assinaturas legadas UR de digest de objeto fora de intervalos de bytes continuam disponíveis para inspeção estrutural

Desempenho

A validação do produtor analisa apenas os campos AcroForm criados e a pequena matriz de referências de assinatura, enquanto a inspeção carregada lê apenas a assinatura selecionada, o seu bloqueio, as suas referências e a entrada de permissão do Catalog

Nenhum conteúdo de página, fluxo de imagem, programa de tipo de letra ou objeto indireto não relacionado é descodificado

Ver também