PDFium Delphi Component Docs

FPdfPkcs11-enhet

Unit: FPdfPkcs11
PKCS#11-signeringsbackend för PAdES, som löser ett signerarcertifikat och dess privata nyckel från en token och producerar SignerInfo-signaturen inne i tokenen

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 är den portabla PAdES-signeringsbackenden och motparten till Windows CNG-backenden. Den löser ett signerarcertifikat och dess privata nyckel från en PKCS#11-token och returnerar därefter en TPadesResolvedSigner vars ICmsSigner producerar SignerInfo-signaturen via tokenen, så att nyckeln aldrig lämnar den

Modulen läses in vid körning efter sökväg - opensc-pkcs11.so, libsofthsm2.so, en vendor-DLL - så inget länkas vid bygget och en saknad modul rapporteras i stället för att vara ödesdiger. Endast C_GetFunctionList slås upp vid namn; alla andra ingångspunkter hämtas ur den funktionstabell den returnerar, vilket är hur standarden avser att en modul ska nås

ConfigurePkcs11SignerProvider bygger en TPdfPkcs11SignerProvider från ett TPdfPkcs11Options-värde och installerar den som aktiv PAdES-signerarbackend och returnerar det IPdfPkcs11SignerProvider-gränssnitt som också bär tokenuppräkningsmetoderna

Pkcs11ModuleAvailable och Pkcs11ModuleVersion rapporterar huruvida en viss modul läses in och exponerar en användbar funktionstabell, så att en applikation kan avgöra vid start om tokensignering är möjlig på den här maskinen. Inlästa moduler cachas efter sökväg, eftersom standarden endast tillåter en initiering per process och modul

Resolve väljer certifikatet via TPadesSignerOptions.CertificateThumbprint när ett anges och annars via CertificateLabel, och lokaliserar därefter det privata nyckelobjekt som bär samma token-identifierare som certifikatet. Certifikatets nyckelalgoritm avgör algoritmfamiljen: en EC-nyckel signerar med ECDSA och dess råa signatur kodas om som den DER SEQUENCE som CMS förväntar sig, medan en RSA-nyckel följer det begärda padding-schemat

EnumerateSlots och EnumerateCertificates betjänar urvalsgränssnitt och låter en applikation lista de slots en modul rapporterar och de certifikat en vald slot håller innan något signeringsalternativ är fastställt

Functions

FunctionDescription
Pkcs11ModuleAvailableReturnerar True när modulen på den angivna sökvägen läses in och exponerar en användbar funktionstabell
Pkcs11ModuleVersionReturnerar versionssträngen som modulen rapporterar, eller en tom sträng när modulen inte läses in
Pkcs11AbiLayoutReturnerar ABI-layouten detta bygge löste ut, som ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderBygger en provider från de angivna alternativen, installerar den som PAdES-signerarbackend och returnerar den som IPdfPkcs11SignerProvider

Types

TypePurpose
EPdfPkcs11ErrorUndantag som kastas när ingen modulsökväg är konfigurerad, modulen inte kan läsas in, ett token-anrop misslyckas eller inget matchande certifikat eller privat nyckel hittas
TPdfPkcs11OptionsPost som namnger modulen, slotten, PIN:en och certifikatet som providern arbetar med
TPdfPkcs11SignerProviderProviderklass som implementerar IPadesSignerProvider och IPdfPkcs11SignerProvider ovanpå en PKCS#11-modul

TPdfPkcs11Options fields

FieldDescription
ModulePathSökväg till PKCS#11-modulen; krävs, eftersom vilken modul som betjänar en token är ett driftbeslut och det inte finns någon användbar standard
SlotIdToken-slot att öppna, respekteras endast när UseSpecificSlot är True
UseSpecificSlotLämna False för att ta första slot som rapporterar en token närvarande
PinAnvändar-PIN; providern rensar sin egen kopia när tokenen har konsumerat den, och anroparen behåller ansvaret för strängens livstid
CertificateLabelValfri objektetikett för certifikatet att signera med, används endast när TPadesSignerOptions.CertificateThumbprint är tom
DefaultStatisk fabriksmetod som returnerar alternativ med en tom modulsökväg, slot 0, automatiskt urval av slot samt ingen PIN eller etikett

TPdfPkcs11SignerProvider members

MemberDescription
CreateKonstruerar providern från ett TPdfPkcs11Options-värde; själva modulen öppnas vid första användning
DestroyStänger öppna tokensessioner innan instansen frigörs
BackendNameReturnerar backend-namnet, med modulens filnamn tillagt när en modulsökväg är konfigurerad
ResolveLöser TPadesSignerOptions till en TPadesResolvedSigner som håller tokensigneraren och signerarcertifikatets DER
EnumerateSlotsReturnerar varje slot modulen rapporterar som TPdfPkcs11Slots, inklusive slots utan token närvarande
EnumerateCertificatesReturnerar de certifikat som hålls i en slot som TPdfPkcs11Certificates, efter att ha öppnat en session på den slotten
CloseProtectedSessionsLoggar ut där en inloggning skedde och ställer den öppna sessionen, vilket frigör tokenen för andra konsumenter

Remarks

See Also

FPdfCrypto, FPdfCryptoWin, FPdfCms