PDFium Delphi Component Docs

FPdfPkcs11 Unité

Module: FPdfPkcs11
Backend de signature PKCS#11 pour PAdES, qui résout un certificat de signataire et sa clé privée depuis un jeton et produit la signature SignerInfo à l’intérieur du jeton

Syntax

EPdfPkcs11Error = class(Exception);

TPdfPkcs11Options = record
  ModulePath: string;
  SlotId: UInt64;
  UseSpecificSlot: Boolean;
  Pin: string;
  CertificateLabel: string;
  class function Default: TPdfPkcs11Options; static;
end;

TPdfPkcs11SignerProvider = class(TInterfacedObject, IPadesSignerProvider,
  IPdfPkcs11SignerProvider)
  constructor Create(const Options: TPdfPkcs11Options);
  destructor Destroy; override;
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
  function EnumerateSlots: TPdfPkcs11Slots;
  function EnumerateCertificates(SlotID: UInt64): TPdfPkcs11Certificates;
  procedure CloseProtectedSessions;
end;

function Pkcs11ModuleAvailable(const ModulePath: string): Boolean;
function Pkcs11ModuleVersion(const ModulePath: string): string;
function Pkcs11AbiLayout: string;
function ConfigurePkcs11SignerProvider(
  const Options: TPdfPkcs11Options): IPdfPkcs11SignerProvider;

Description

FPdfPkcs11 est le backend de signature PAdES portable et le pendant du backend CNG de Windows. Il résout un certificat de signataire et sa clé privée depuis un jeton PKCS#11, puis renvoie un TPadesResolvedSigner dont l’ICmsSigner produit la signature SignerInfo à travers le jeton, de sorte que la clé ne le quitte jamais

Le module est chargé à l’exécution par chemin - opensc-pkcs11.so, libsofthsm2.so, une DLL fournisseur - donc rien n’est lié au moment du build et un module absent est signalé au lieu d’être fatal. Seul C_GetFunctionList est résolu par nom ; tout autre point d’entrée sort de la table de fonctions qu’il renvoie, ce qui correspond à la façon dont la norme entend qu’on joigne un module

ConfigurePkcs11SignerProvider construit un TPdfPkcs11SignerProvider à partir d’une valeur TPdfPkcs11Options et l’installe comme backend de signataires PAdES actif, en renvoyant l’interface IPdfPkcs11SignerProvider qui porte aussi les méthodes d’énumération du jeton

Pkcs11ModuleAvailable et Pkcs11ModuleVersion signalent si un module donné se charge et expose une table de fonctions utilisable, si bien qu’une application peut décider au démarrage si la signature par jeton est possible sur cette machine. Les modules chargés sont mis en cache par chemin, car la norme n’autorise qu’une seule initialisation par processus et par module

Resolve sélectionne le certificat par TPadesSignerOptions.CertificateThumbprint lorsqu’une empreinte est fournie et par CertificateLabel sinon, puis localise l’objet de clé privée qui porte le même identifiant de jeton que le certificat. L’algorithme de la clé du certificat décide de la famille d’algorithmes : une clé EC signe avec ECDSA et sa signature brute est réencodée dans la SEQUENCE DER qu’attend CMS, tandis qu’une clé RSA suit le schéma de remplissage demandé

EnumerateSlots et EnumerateCertificates servent aux interfaces utilisateur de sélection, permettant à une application de lister les emplacements qu’un module signale et les certificats qu’un emplacement choisi contient avant de fixer une option de signature

Functions

FunctionDescription
Pkcs11ModuleAvailableRenvoie True lorsque le module du chemin donné se charge et expose une table de fonctions utilisable
Pkcs11ModuleVersionRenvoie la chaîne de version que le module signale, ou une chaîne vide lorsque le module ne se charge pas
Pkcs11AbiLayoutRenvoie la disposition ABI que ce build a résolue, sous la forme ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderConstruit un fournisseur à partir des options fournies, l’installe comme backend de signataires PAdES et le renvoie comme IPdfPkcs11SignerProvider

Types

TypePurpose
EPdfPkcs11ErrorException levée lorsqu’aucun chemin de module n’est configuré, que le module ne peut pas être chargé, qu’un appel au jeton échoue ou qu’aucun certificat ou clé privée correspondante n’est trouvé
TPdfPkcs11OptionsEnregistrement nommant le module, l’emplacement, le PIN et le certificat avec lesquels le fournisseur travaille
TPdfPkcs11SignerProviderClasse fournisseur implémentant IPadesSignerProvider et IPdfPkcs11SignerProvider par-dessus un module PKCS#11

TPdfPkcs11Options fields

FieldDescription
ModulePathChemin du module PKCS#11 ; requis, car le module qui dessert un jeton est une décision de déploiement et il n’existe aucun défaut utile
SlotIdEmplacement de jeton à ouvrir, honoré uniquement lorsque UseSpecificSlot est True
UseSpecificSlotLaissez False pour prendre le premier emplacement qui signale un jeton présent
PinPIN utilisateur ; le fournisseur efface sa propre copie une fois que le jeton l’a consommé, et l’appelant reste responsable de la durée de vie de la chaîne qu’il passe
CertificateLabelÉtiquette d’objet facultative du certificat avec lequel signer, utilisée uniquement lorsque TPadesSignerOptions.CertificateThumbprint est vide
DefaultFabrique statique renvoyant des options avec un chemin de module vide, l’emplacement 0, la sélection automatique d’emplacement, et ni PIN ni étiquette

TPdfPkcs11SignerProvider members

MemberDescription
CreateConstruit le fournisseur à partir d’une valeur TPdfPkcs11Options ; le module lui-même est ouvert à la première utilisation
DestroyFerme toute session de jeton ouverte avant que l’instance ne soit libérée
BackendNameRenvoie le nom du backend, avec le nom de fichier du module ajouté lorsqu’un chemin de module est configuré
ResolveRésout TPadesSignerOptions en un TPadesResolvedSigner contenant le signataire du jeton et le DER du certificat du signataire
EnumerateSlotsRenvoie chaque emplacement que le module signale comme TPdfPkcs11Slots, y compris les emplacements sans jeton présent
EnumerateCertificatesRenvoie les certificats détenus dans un emplacement comme TPdfPkcs11Certificates, en ouvrant d’abord une session sur cet emplacement
CloseProtectedSessionsSe déconnecte là où une connexion a eu lieu et ferme la session ouverte, libérant le jeton pour d’autres consommateurs

Remarks

See Also

FPdfCrypto, FPdfCryptoWin, FPdfCms