Deux signatures ajoutées à un fichier reçu

Un contrat arrive souvent sous la forme d’un fichier terminé, écrit par quelqu’un d’autre, sans emplacement prévu pour la signature. Deux personnes doivent pourtant le signer — l’une approuve, l’autre relit — et la seconde signature ne doit pas casser la première. Réécrire le fichier ferait exactement cela : une signature est calculée à partir des octets du fichier, et un seul octet déplacé la casse.

Cet exemple ne réécrit jamais le fichier qu’il reçoit. Il ajoute les deux cadres de signature dans une section écrite après le dernier octet du fichier, puis signe l’approbation, puis la relecture, chacune de nouveau dans une section à elle. La relecture couvre tout le fichier ; l’approbation couvre toujours exactement les octets qu’elle couvrait, et reste valide. Les deux signatures utilisent un certificat fait uniquement pour cet exemple, et la page donne la commande OpenSSL qui vérifie chacune d’elles sans cette bibliothèque.

Enfin, le certificat sur lequel reposent les deux signatures est conservé dans le fichier, rattaché à chacune d’elles, dans une section à part. Des années plus tard, une fois le certificat expiré, le fichier contient encore de quoi montrer que les deux signatures étaient valides le jour où elles ont été apposées.

Ce que montre cet exemple

  • Un fichier dépourvu de formulaire qui reçoit deux cadres de signature, sans qu’un seul de ses octets bouge.
  • Deux signatures l’une après l’autre, la première toujours valide une fois la seconde posée.
  • La commande OpenSSL qui vérifie les deux signatures sans cette bibliothèque.
  • Le certificat conservé dans le fichier, pour que les deux signatures restent vérifiables après son expiration.

Le code source complet

Rien n’est omis et rien n’est simplifié : c’est le programme exactement tel qu’il tourne, pour le développeur qui utilise cette bibliothèque.

Voir le code Rust Voir le code Python

Le document lui-même

Ouvrir le document en anglais Ouvrir le document en français Ouvrir le document en allemand Ouvrir le document en espagnol Ouvrir le document en italien Ouvrir le document en portugais

Exemples proches de celui-ci

Un contrat reçu, complété sans déplacer un octet

Un contrat de maintenance reçu d’un tiers. Sur sa dernière page s’ajoutent un emplacement de signature, une date et une ligne de texte ; après elle, une annexe ; sur l’emplacement de signature, un espace vide où signer. Chaque octet du contrat reste à sa place.

Un contrat bâti sur trois modèles fournis

Un contrat d’approvisionnement posé sur trois modèles envoyés par le client : une page à en-tête sous la première page, une page nue sous chaque page de l’annexe, et une page de conditions qui entre entière.

Un modèle dont les zones se remplissent par leur nom

Une étiquette de livraison dont le graphiste a nommé quatre rectangles dans le fichier même de l’étiquette ; le programme les relit, pose l’étiquette quatre fois et remplit chaque zone en la désignant par son nom : une adresse, un numéro de commande, un logo tiré d’un fichier SVG et un bon de retour.

Le filigrane d’une copie d’essai

Ce que vous obtenez avant de payer quoi que ce soit : un filigrane en travers de chaque page, et sous lui les mêmes pages, mises en page exactement comme une copie payée les met en page. C’est aussi le document qui dit ce qu’une clé de licence change, et pourquoi chaque chiffre de ce site est mesuré avec une clé.

Un formulaire interactif

Un formulaire que le lecteur remplit : champs de texte, case à cocher, liste déroulante, boutons radio.

Tous les exemples, par sujet