Signatures de certification et verrous de champs
HotPDF peut créer les structures de permission PDF attachées aux signatures de certification et aux verrous de champs signés, puis inspecter les mêmes structures dans un document chargé
API producteur
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 combine la création d'espace réservé signé avec la configuration de certification
ConfigureCertificationSignature est pour un espace réservé signé créé existant et nécessite que ce champ soit le premier champ portant un dictionnaire de signature
Un document ne peut contenir qu'une seule signature de certification, donc une seconde demande de configuration est rejetée avant que le graphe d'objets ne soit modifié
Ces API négocient automatiquement la sortie PDF 1.5
Niveaux de permission DocMDP
| Value | Certification permission |
|---|---|
dmpNoChanges | Aucune modification n'est permise après certification |
dmpFormFillAndSign | Le remplissage de formulaire, l'instanciation de modèle et la signature sont permis |
dmpFormFillSignAndAnnotate | Les modifications précédentes plus la création, suppression et modification d'annotation sont permises |
dmpNone est réservé aux résultats d'inspection sans transformation DocMDP et est rejeté par les méthodes producteur
Portées de verrouillage de champ
| Valeur | Paramètre Fields | Effet après signature |
|---|---|---|
flaAll | Doit être vide | Verrouille chaque champ de formulaire |
flaInclude | Un ou plusieurs noms de champs uniques | Verrouille uniquement les champs listés |
flaExclude | Un ou plusieurs noms de champs uniques | Verrouille chaque champ sauf les champs listés |
AttachSignatureFieldLock rejette les noms vides, noms dupliqués, valeurs d'action invalides, une forme Fields incompatible, un champ cible non signé ou un champ portant déjà un verrou ou une politique FieldMDP
Structure émise
- La signature de certification porte un tableau direct
/Referencecontenant un dictionnaire direct de référence de signature DocMDP et des paramètres de transformation directs - L’entrée
/Perms /DocMDPdu Catalogue pointe vers le même dictionnaire de signature indirect - L’entrée
/Lockdu champ pointe vers un dictionnaire indirect/Type /SigFieldLock - La portée du verrou est copiée dans une référence de signature FieldMDP directe et son entrée
/Datapointe vers la racine indirecte du Catalogue - Le dictionnaire de signature marque les références de transformation comme critiques via
/V 1
Exemple 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;
Inspection chargée
function GetLoadedSignaturePermissions(
SigIndex: Integer;
out Info: THPDFSignaturePermissionInfo): Boolean;
Le lecteur rapporte la permission DocMDP, la liaison Catalog, la portée SigFieldLock, la portée FieldMDP, les noms de champs, la validité structurelle et une chaîne de problème de diagnostic
La méthode vérifie les formes directes et indirectes requises, les cibles /Perms du Catalogue, les versions de transformation, les références dupliquées, les restrictions UR contre UR3, et la valeur par défaut optionnelle DocMDP /P 2
Si SigFieldLock et FieldMDP sont tous deux présents, leurs actions et listes de champs doivent concorder
Le lecteur effectue une inspection bornée des dictionnaires et tableaux et n'exécute pas JavaScript, actions ou contenu de signature
Limite de validation
| Méthode | Politique rapportée |
|---|---|
DocMDP | Permission de certification et cible /Perms /DocMDP du Catalogue correspondante |
UR | Droits de document, d’annotation, de formulaire, de signature et de fichier embarqué plus la source historique /UR ou à plage d’octets /UR3 |
FieldMDP | Portée de verrou de champs All, Include ou Exclude et accord SigFieldLock copié |
Identity | Numéros d’objets transitifs sûrs face aux cycles, atteignables depuis la racine indirecte /Data exigée |
Les noms de méthodes inconnus sont retenus dans UnknownTransformMethods et rendent la structure de permission invalide afin qu’une transformation critique ne puisse être négligée
Performance
GetLoadedSignaturePermissions ne rapporte que la structure de politique
VerifyLoadedSignature continue de rapporter séparément l’intégrité cryptographique
AnalyzeLoadedSignatureRevisions effectue une analyse sémantique des changements révision par révision pour les politiques DocMDP à plage d’octets, FieldMDP, UR3 et Identity, tandis que les signatures historiques UR à digeste d’objet hors plage d’octets restent accessibles à l’inspection structurelle
SaveIncrementalUpdateAuthenticated transforme l’inspection en application de la politique : il lit les politiques depuis leurs instantanés signés, authentifie les signatures de contrôle, valide toutes les révisions ultérieures et ne publie par remplacement atomique qu’après le succès de chaque politique
Voir aussi
La validation côté producteur ne scanne que les champs AcroForm créés et le petit tableau de références de signature, tandis que l’inspection d’un document chargé ne lit que la signature sélectionnée, son verrou, ses références et l’entrée de permission du Catalogue
Aucun contenu de page, flux d’image, programme de police ou objet indirect sans rapport n’est décodé