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;
FPdfPkcs11, taşınabilir PAdES imzalama arka ucu ve Windows CNG arka ucunun karşılığıdır. İmzalayan sertifikasını ve özel anahtarını bir PKCS#11 token'ından çözer; ardından ICmsSigner imzası SignerInfo imzasını token üzerinden üreten bir TPadesResolvedSigner döndürür, böylece anahtar asla token'dan ayrılmaz
Modül çalışma zamanında yola göre yüklenir - opensc-pkcs11.so, libsofthsm2.so, bir üretici DLL'i - böylece derleme zamanında hiçbir şey bağlanmaz ve eksik bir modül ölümcül değil, bildirilen bir durum olur. Ada göre yalnızca C_GetFunctionList çözülür; diğer tüm giriş noktaları onun döndürdüğü işlev tablosundan alınır, bu da standardın bir modüle ulaşılmasını amaçladığı biçimdir
ConfigurePkcs11SignerProvider, bir TPdfPkcs11Options değerinden bir TPdfPkcs11SignerProvider kurar, etkin PAdES imzalayan arka ucu olarak yükler ve token numaralandırma methodlarını da taşıyan IPdfPkcs11SignerProvider arayüzünü döndürür
Pkcs11ModuleAvailable ve Pkcs11ModuleVersion, verilen bir modülün yüklenip kullanılabilir bir işlev tablosu açığa çıkarıp çıkarmadığını bildirir; böylece bir uygulama başlangıçta bu makinede token imzalamanın mümkün olup olmayacağına karar verebilir. Yüklenen modüller yola göre önbelleğe alınır, çünkü standart modül başına süreç başına yalnızca bir başlatmaya izin verir
Resolve, sertifika için sağlandığında TPadesSignerOptions.CertificateThumbprint, aksi halde CertificateLabel değerini kullanır ve ardından sertifikayla aynı token tanımlayıcısını taşıyan özel anahtar nesnesini bulur. Sertifikanın anahtar algoritması algoritma ailesini belirler: bir EC anahtarı ECDSA ile imzalar ve ham imzası CMS'nin beklediği DER SEQUENCE olarak yeniden kodlanır; bir RSA anahtarı ise istenen dolgu şemasını izler
EnumerateSlots ve EnumerateCertificates seçim kullanıcı arayüzlerine hizmet eder; bir uygulamanın herhangi bir imzalama seçeneği sabitlenmeden önce bir modülün bildirdiği yuvaları ve seçilen bir yuvanın taşıdığı sertifikaları listelemesini sağlar
| Function | Description |
|---|---|
Pkcs11ModuleAvailable | Verilen yoldaki modül yüklendiğinde ve kullanılabilir bir işlev tablosu açığa çıkardığında True döndürür |
Pkcs11ModuleVersion | Modülün bildirdiği sürüm dizesini döndürür; modül yüklenmezken boş bir dize döndürür |
Pkcs11AbiLayout | Bu derlemenin çözdüğü ABI düzenini ulong=<n> attr=<n> pss=<n> table=<n> biçiminde döndürür |
ConfigurePkcs11SignerProvider | Sağlanan seçeneklerden bir sağlayıcı kurar, PAdES imzalayan arka ucu olarak yükler ve IPdfPkcs11SignerProvider olarak döndürür |
| Type | Purpose |
|---|---|
EPdfPkcs11Error | Modül yolu yapılandırılmadığında, modül yüklenemediğinde, bir token çağrısı başarısız olduğunda ya da eşleşen sertifika veya özel anahtar bulunamadığında fırlatılan istisna |
TPdfPkcs11Options | Sağlayıcının çalıştığı modülü, yuvayı, PIN'i ve sertifikayı adlandıran kayıt |
TPdfPkcs11SignerProvider | Bir PKCS#11 modülü üzerinde IPadesSignerProvider ve IPdfPkcs11SignerProvider arayüzlerini uygulayan sağlayıcı sınıfı |
| Field | Description |
|---|---|
ModulePath | PKCS#11 modülünün yolu; zorunludur, çünkü bir token'a hangi modülün hizmet edeceği bir dağıtım kararındır ve işe yarar bir varsayılan yoktur |
SlotId | Açılacak token yuvası; yalnızca UseSpecificSlot True olduğunda dikkate alınır |
UseSpecificSlot | Token mevcut bildiren ilk yuvanın alınmasını istiyorsanız False bırakın |
Pin | Kullanıcı PIN'i; sağlayıcı kendi kopyasını token tükettikten sonra temizler, geçilen dizenin ömründen ise çağıran sorumludur |
CertificateLabel | İmzalanacak sertifikanın isteğe bağlı nesne etiketi; yalnızca TPadesSignerOptions.CertificateThumbprint boş olduğunda kullanılır |
Default | Boş modül yolu, 0 yuvası, otomatik yuva seçimi ve PIN ya da etiket olmadan seçenekler döndüren statik fabrika |
| Member | Description |
|---|---|
Create | Sağlayıcıyı bir TPdfPkcs11Options değerinden kurar; modülün kendisi ilk kullanımda açılır |
Destroy | Örnek serbest bırakılmadan önce açık token oturumlarını kapatır |
BackendName | Arka uç adını döndürür; bir modül yolu yapılandırılmışken modül dosya adını sona ekler |
Resolve | TPadesSignerOptions değerini token imzalayanını ve imzalayan sertifikası DER'ini tutan bir TPadesResolvedSigner değerine çözer |
EnumerateSlots | Modülün bildirdiği her yuvayı, token taşımayan yuvalar dahil TPdfPkcs11Slots olarak döndürür |
EnumerateCertificates | Tek bir yuvadaki sertifikaları, önce o yuvada oturum açarak TPdfPkcs11Certificates olarak döndürür |
CloseProtectedSessions | Oturum açılan yerlerde çıkış yapar, açık oturumu kapatır ve token'ı diğer tüketicilere serbest bırakır |
CK_ULONG, C unsigned long türünü izler; Windows'ta (LLP64) 4 bayt, Linux ve macOS'ta (LP64) 8 bayttır. Her tanıtıcı, sayaç ve öznitelik türü bir CK_ULONG'durPkcs11AbiLayout bu derlemenin çözdüğü düzeni bildirir; böylece bir uyuşmazlık sessiz bir çökme yerine teşhis edilebilir: Win32 ulong=4 attr=12 pss=12 table=2, Win64 ulong=4 attr=16 pss=12 table=2 bildirir, bir LP64 hedefi ise ulong=8 attr=24 pss=24 table=8 bildirirCertificateLabel olduğunda token'daki ilk sertifika kazanır; bu tek sertifikalı bir token'a uyar, üretim dağıtımına değil