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 |
|---|---|
dmpNoChanges | Nenhuma alteração é permitida após a certificação |
dmpFormFillAndSign | São permitidos o preenchimento de formulários, a instanciação de modelos e a assinatura |
dmpFormFillSignAndAnnotate | Sã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 |
|---|---|---|
flaAll | Deve estar vazio | Bloqueia todos os campos 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 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
- A assinatura de certificação transporta uma matriz direta
/Referencecontendo um dicionário direto de referência de assinatura DocMDP e parâmetros diretos de transformação - A entrada Catalog
/Perms /DocMDPaponta para o mesmo dicionário indireto de assinatura - A entrada do campo
/Lockaponta para um dicionário indireto/Type /SigFieldLock - O âmbito do bloqueio é copiado para uma referência de assinatura FieldMDP direta e a sua entrada
/Dataaponta para a raiz Catalog indireta - O dicionário de assinatura marca as referências de transformação como críticas através de
/V 1
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
| Method | Política reportada |
|---|---|
DocMDP | Permissão de certificação e /Perms /DocMDP target |
UR | Direitos 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 |
Identity | Nú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