PDFium Component Docs

FPdfPkcs11 Moduł

Unit: FPdfPkcs11
Zaplecze podpisywania PKCS#11 dla PAdES, rozwiązujące certyfikat podpisującego i jego klucz prywatny z tokena oraz produkujące podpis SignerInfo wewnątrz tokena

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 to przenośne zaplecze podpisywania PAdES i odpowiednik zaplecza CNG z Windows. Rozwiązuje certyfikat podpisującego i jego klucz prywatny z tokena PKCS#11, po czym zwraca TPadesResolvedSigner, którego ICmsSigner produkuje podpis SignerInfo przez token, więc klucz nigdy go nie opuszcza

Moduł jest ładowany w czasie działania po ścieżce - opensc-pkcs11.so, libsofthsm2.so, DLL dostawcy - więc nic nie jest konsolidowane w czasie budowania, a nieobecny moduł jest raportowany zamiast kończyć się katastrofą. Tylko C_GetFunctionList jest rozwiązywane po nazwie; każdy pozostały punkt wejścia pochodzi z tabeli funkcji, którą on zwraca, i dokładnie tak standard przewiduje dostęp do modułu

ConfigurePkcs11SignerProvider buduje TPdfPkcs11SignerProvider z wartości TPdfPkcs11Options i instaluje go jako aktywne zaplecze podpisującego PAdES, zwracając interfejs IPdfPkcs11SignerProvider, który dodatkowo niesie metody wyliczania tokena

Pkcs11ModuleAvailable i Pkcs11ModuleVersion raportują, czy dany moduł się ładuje i udostępnia użyteczną tabelę funkcji, więc aplikacja może przy starcie zdecydować, czy podpisywanie tokenem jest na tej maszynie możliwe. Załadowane moduły są cache'owane po ścieżce, ponieważ standard dopuszcza tylko jedną inicjalizację na moduł w obrębie procesu

Resolve wybiera certyfikat po TPadesSignerOptions.CertificateThumbprint, gdy ten jest podany, a w przeciwnym razie po CertificateLabel, po czym odnajduje obiekt klucza prywatnego niosący ten sam identyfikator tokena co certyfikat. Algorytm klucza certyfikatu rozstrzyga rodzinę algorytmu: klucz EC podpisuje ECDSA, a jego surowy podpis jest przekodowywany na strukturę SEQUENCE w DER, której oczekuje CMS, podczas gdy klucz RSA stosuje żądany schemat dopełnienia

EnumerateSlots i EnumerateCertificates obsługują graficzne interfejsy wyboru, pozwalając aplikacji wypisać gniazda raportowane przez moduł i certyfikaty przechowywane w wybranym gnieździe, zanim jakakolwiek opcja podpisywania zostanie ustalona

Functions

FunctionDescription
Pkcs11ModuleAvailableZwraca True, gdy moduł pod podaną ścieżką się ładuje i udostępnia użyteczną tabelę funkcji
Pkcs11ModuleVersionZwraca ciąg wersji zgłaszany przez moduł albo pusty ciąg, gdy moduł się nie ładuje
Pkcs11AbiLayoutZwraca układ ABI rozstrzygnięty przez tę kompilację, jako ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderBuduje dostawcę z przekazanych opcji, instaluje go jako zaplecze podpisującego PAdES i zwraca jako IPdfPkcs11SignerProvider

Types

TypePurpose
EPdfPkcs11ErrorWyjątek zgłaszany, gdy nie skonfigurowano ścieżki modułu, gdy modułu nie da się załadować, gdy wywołanie tokena zawodzi albo gdy nie znajduje się pasującego certyfikatu lub klucza prywatnego
TPdfPkcs11OptionsRekord nazywający moduł, gniazdo, PIN i certyfikat, z którymi pracuje dostawca
TPdfPkcs11SignerProviderKlasa dostawcy implementująca IPadesSignerProvider i IPdfPkcs11SignerProvider na bazie modułu PKCS#11

TPdfPkcs11Options fields

FieldDescription
ModulePathŚcieżka do modułu PKCS#11; wymagana, ponieważ o tym, który moduł obsługuje token, decyduje wdrożenie, a użyteczna wartość domyślna nie istnieje
SlotIdGniazdo tokena do otwarcia, respektowane tylko gdy UseSpecificSlot jest True
UseSpecificSlotPozostaw False, aby wziąć pierwsze gniazdo zgłaszające obecność tokena
PinPIN użytkownika; dostawca czyści własną kopię, gdy token go skonsumuje, a odpowiedzialność za czas życia przekazanego ciągu pozostaje po stronie wywołującego
CertificateLabelOpcjonalna etykieta obiektu certyfikatu do podpisywania, używana tylko gdy TPadesSignerOptions.CertificateThumbprint jest pusty
DefaultStatyczna fabryka zwracająca opcje z pustą ścieżką modułu, gniazdem 0, automatycznym wyborem gniazda oraz bez PIN-u i etykiety

TPdfPkcs11SignerProvider members

MemberDescription
CreateKonstruuje dostawcę z wartości TPdfPkcs11Options; sam moduł jest otwierany przy pierwszym użyciu
DestroyZamyka wszelkie otwarte sesje tokena, zanim instancja zostanie zwolniona
BackendNameZwraca nazwę zaplecza z dołączoną nazwą pliku modułu, gdy ścieżka modułu jest skonfigurowana
ResolveRozwiązuje TPadesSignerOptions w TPadesResolvedSigner z podpisującym tokena i certyfikatem DER podpisującego
EnumerateSlotsZwraca każde gniazdo raportowane przez moduł jako TPdfPkcs11Slots, łącznie z gniazdami bez tokena
EnumerateCertificatesZwraca certyfikaty przechowywane w jednym gnieździe jako TPdfPkcs11Certificates, otwierając najpierw sesję na tym gnieździe
CloseProtectedSessionsWylogowuje tam, gdzie doszło do logowania, i zamyka otwartą sesję, uwalniając token dla pozostałych konsumentów

Remarks

See Also

FPdfCrypto, FPdfCryptoWin, FPdfCms