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 |
|---|---|
dmpNoChanges | Nenhuma mudança é permitida após a certificação |
dmpFormFillAndSign | Preenchimento de formulários, instanciação de templates e assinatura são permitidos |
dmpFormFillSignAndAnnotate | As 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 |
|---|---|---|
flaAll | Deve estar vazio | Bloqueia todo campo de formulário |
flaInclude | Um ou mais nomes de campo únicos | Bloqueia apenas os campos listados |
flaExclude | Um ou mais nomes de campo únicos | Bloqueia 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
- A assinatura de certificação carrega um array direto
/Referencecontendo um dicionário direto de referência de assinatura DocMDP e parâmetros diretos de transform - A entrada
/Perms /DocMDPdo Catalog aponta para o mesmo dicionário indireto de assinatura - A entrada
/Lockdo campo aponta para um dicionário indireto/Type /SigFieldLock - O escopo do lock é copiado para uma referência direta de assinatura FieldMDP e a entrada
/Datadela aponta para a raiz indireta do Catalog - O dicionário de assinatura marca as referências de transform como críticas por meio de
/V 1
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étodo | Política reportada |
|---|---|
DocMDP | Permissão de certificação e alvo /Perms /DocMDP correspondente no Catalog |
UR | Direitos de documento, anotação, formulário, assinatura e arquivo embutido, mais origem legada /UR ou byte-range /UR3 |
FieldMDP | Escopo de lock de campos All, Include ou Exclude e concordância com o SigFieldLock copiado |
Identity | Nú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