Signature Transform Methods and Permissions

O HotPDF pode criar estruturas de permissões DocMDP e FieldMDP e depois inspecionar e classificar todo método de transform de assinatura padrão em um documento carregado

Producer API

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

ConfigureCertificationSignature serve para um placeholder assinado já criado e exige que esse campo seja o primeiro campo com um dicionário de assinatura

Um documento só pode conter uma assinatura de certificação, então uma segunda requisição de configuração é rejeitada antes que o grafo de objetos mude

Essas APIs negociam saída PDF 1.5 automaticamente

Níveis de permissão DocMDP

Valor Permissão de certificação
dmpNoChangesNenhuma mudança é permitida após a certificação
dmpFormFillAndSignPreenchimento de formulários, instanciação de templates e assinatura são permitidos
dmpFormFillSignAndAnnotateAs mudanças anteriores mais criação, exclusão e modificação de anotações são permitidas

dmpNone é reservado para resultados de inspeção sem um transform DocMDP e é rejeitado pelos métodos do produtor

Escopos de lock de campos

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

AttachSignatureFieldLock rejeita nomes vazios, nomes duplicados, valores de ação inválidos, um formato de Fields incompatível, um campo alvo não assinado ou um campo que já carrega um lock ou política FieldMDP

Estrutura emitida

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

Inspeção de documentos carregados

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

O leitor reporta o conjunto completo de transforms, contagem de referências, permissão DocMDP, escopos SigFieldLock e FieldMDP, usage rights UR, origem UR ou UR3 do Catalog, escopo de objetos Identity, métodos desconhecidos, validade estrutural e uma string de issue de diagnóstico

Ele verifica formatos diretos e indiretos exigidos, alvos /Perms do Catalog, versões de transforms, referências duplicadas, restrições UR versus UR3 e o padrão opcional DocMDP /P 2

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

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

Cobertura de transforms padrão

MétodoPolítica reportada
DocMDPPermissão de certificação e alvo /Perms /DocMDP correspondente no Catalog
URDireitos de documento, anotação, formulário, assinatura e arquivo embutido, mais origem legada /UR ou byte-range /UR3
FieldMDPEscopo de lock de campos All, Include ou Exclude e concordância com o SigFieldLock copiado
IdentityNúmeros de objeto transitivos seguros contra ciclos alcançáveis a partir da raiz indireta /Data exigida

Nomes de métodos desconhecidos são retidos em UnknownTransformMethods e tornam a estrutura de permissão inválida, para que um transform crítico não passe despercebido

Fronteira de validação

GetLoadedSignaturePermissions reporta apenas a estrutura da política

VerifyLoadedSignature segue reportando a integridade criptográfica separadamente

AnalyzeLoadedSignatureRevisions faz análise semântica de mudanças revisão por revisão para políticas DocMDP, FieldMDP, UR3 e Identity de byte-range, enquanto assinaturas UR de digest de objeto sem byte-range, obsoletas, seguem disponíveis para inspeção estrutural

SaveIncrementalUpdateAuthenticated turns inspection into enforcement: it reads policies from their signed snapshots, authenticates the controlling signatures, validates all later revisions, and publishes through atomic replacement only after every policy succeeds

Performance

A validação do produtor escaneia apenas campos AcroForm criados e o pequeno array de referências de assinatura, enquanto a inspeção de carregados lê apenas a assinatura selecionada, o lock dela, as referências dela e a entrada de permissão do Catalog

Nenhum conteúdo de página, stream de imagem, programa de fonte ou objeto indireto não relacionado é decodificado

Veja também