PDFium Component Docs

FPdfPkcs11 unit

Unit: FPdfPkcs11
PKCS#11-ondertekeningsbackend voor PAdES, die een signercertificaat en de bijbehorende private sleutel uit een token haalt en de SignerInfo-handtekening binnen het token produceert

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 is de draagbare PAdES-ondertekeningsbackend en de tegenhanger van de Windows-CNG-backend. Hij haalt een signercertificaat en de bijbehorende private sleutel uit een PKCS#11-token en geeft vervolgens een TPadesResolvedSigner terug waarvan de ICmsSigner de SignerInfo-handtekening via het token produceert, zodat de sleutel het token nooit verlaat

De module wordt tijdens runtime op pad geladen - opensc-pkcs11.so, libsofthsm2.so, een DLL van de leverancier - dus er wordt niets gekoppeld tijdens het bouwen en een ontbrekende module wordt gemeld in plaats van fataal te zijn. Alleen C_GetFunctionList wordt op naam opgezocht; alle andere entry points komen uit de functietabel die hij teruggeeft, precies zoals de standaard bedoelt dat een module wordt benaderd

ConfigurePkcs11SignerProvider bouwt een TPdfPkcs11SignerProvider op basis van een TPdfPkcs11Options-waarde en installeert hem als de actieve PAdES-signerbackend, met als retour de IPdfPkcs11SignerProvider-interface die ook de token-enumeratiemethoden draagt

Pkcs11ModuleAvailable en Pkcs11ModuleVersion rapporteren of een gegeven module laadt en een bruikbare functietabel blootlegt, zodat een toepassing bij het opstarten kan beslissen of tokenondertekening op deze machine mogelijk is. Geladen modules worden op pad gecacht, omdat de standaard per proces per module slechts één initialisatie toestaat

Resolve kiest het certificaat via TPadesSignerOptions.CertificateThumbprint wanneer die is opgegeven en anders via CertificateLabel, en zoekt vervolgens het private-sleutelobject dat dezelfde token-identificatie draagt als het certificaat. Het sleutelalgoritme van het certificaat bepaalt de algoritmefamilie: een EC-sleutel ondertekent met ECDSA en zijn ruwe handtekening wordt opnieuw gecodeerd als de DER SEQUENCE die CMS verwacht, terwijl een RSA-sleutel het gevraagde paddingschema volgt

EnumerateSlots en EnumerateCertificates dienen voor keuze-interfaces, zodat een toepassing de slots kan opnoemen die een module rapporteert en de certificaten die een gekozen slot bevat, voordat een ondertekeningsoptie is vastgelegd

Functions

FunctionDescription
Pkcs11ModuleAvailableGeeft True terug wanneer de module op het gegeven pad laadt en een bruikbare functietabel blootlegt
Pkcs11ModuleVersionGeeft de versiestring terug die de module rapporteert, of een lege string wanneer de module niet laadt
Pkcs11AbiLayoutGeeft de ABI-layout terug die deze build heeft bepaald, als ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderBouwt een provider op basis van de opgegeven opties, installeert hem als de PAdES-signerbackend en geeft hem terug als IPdfPkcs11SignerProvider

Types

TypePurpose
EPdfPkcs11ErrorExceptie die wordt verhoogd wanneer geen modulepad is geconfigureerd, de module niet kan worden geladen, een token-aanroep faalt, of geen overeenkomend certificaat of private sleutel wordt gevonden
TPdfPkcs11OptionsRecord dat de module, het slot, de PIN en het certificaat noemt waarmee de provider werkt
TPdfPkcs11SignerProviderProviderklasse die IPadesSignerProvider en IPdfPkcs11SignerProvider implementeert bovenop een PKCS#11-module

TPdfPkcs11Options fields

FieldDescription
ModulePathPad naar de PKCS#11-module; verplicht, want welke module een token bedient is een inzettingskeuze en er is geen nuttige standaardwaarde
SlotIdTe openen token-slot, alleen van kracht wanneer UseSpecificSlot True is
UseSpecificSlotLaat False staan om het eerste slot te nemen dat een aanwezig token rapporteert
PinGebruikers-PIN; de provider wist zijn eigen exemplaar zodra het token die heeft verbruikt, en de aanroeper blijft verantwoordelijk voor de levensduur van de string die hij doorgeeft
CertificateLabelOptioneel objectlabel van het certificaat waarmee wordt ondertekend, alleen gebruikt wanneer TPadesSignerOptions.CertificateThumbprint leeg is
DefaultStatische factory die opties teruggeeft met een leeg modulepad, slot 0, automatische slotkeuze, en geen PIN of label

TPdfPkcs11SignerProvider members

MemberDescription
CreateConstrueert de provider op basis van een TPdfPkcs11Options-waarde; de module zelf wordt geopend bij eerste gebruik
DestroySluit elke open tokensessie voordat de instantie wordt vrijgegeven
BackendNameGeeft de backendnaam terug, aangevuld met de modulebestandsnaam wanneer een modulepad is geconfigureerd
ResolveZet TPadesSignerOptions om in een TPadesResolvedSigner met de tokensigner en het certificaat-DER van de signer
EnumerateSlotsGeeft elk slot dat de module rapporteert terug als TPdfPkcs11Slots, inclusief slots zonder aanwezig token
EnumerateCertificatesGeeft de certificaten in één slot terug als TPdfPkcs11Certificates, na eerst een sessie op dat slot te openen
CloseProtectedSessionsMeldt af waar een aanmelding heeft plaatsgevonden en sluit de open sessie, waarmee het token voor andere gebruikers wordt vrijgegeven

Remarks

See Also

FPdfCrypto, FPdfCryptoWin, FPdfCms