PDFium Delphi Component Docs

FPdfPkcs11 الوحدة

الوحدة: FPdfPkcs11
خلفية توقيع PKCS#11 لـ PAdES، تحل شهادة موقِّع ومفتاحه الخاص من رمز وتنتج توقيع SignerInfo داخل الرمز

الصياغة

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 هو خلفية توقيع PAdES المحمولة والمقابل لخلفية CNG في Windows. يحل شهادة موقِّع ومفتاحه الخاص من رمز PKCS#11، ثم يعيد TPadesResolvedSigner ينتج ICmsSigner الخاص به توقيع SignerInfo عبر الرمز، فلا يغادر المفتاح الرمز أبدًا

تُحمَّل الوحدة عند التشغيل بمسار - opensc-pkcs11.so أو libsofthsm2.so أو DLL من المورّد - فلا يُربط شيء عند البناء ويُبلَّغ عن وحدة غائبة بدل اعتبارها قاتلة. يُحل C_GetFunctionList بالاسم وحده؛ وكل نقاط الدخول الأخرى تخرج من جدول الدوال الذي يعيده، وهو ما تقصده المواصفة في بلوغ الوحدة

يبني ConfigurePkcs11SignerProvider نسخة TPdfPkcs11SignerProvider من قيمة TPdfPkcs11Options ويثبته كخلفية موقِّع PAdES النشطة، ويعيد الواجهة IPdfPkcs11SignerProvider التي تحمل أيضًا أساليب حصر الرموز

يُبلِّغ Pkcs11ModuleAvailable و Pkcs11ModuleVersion عمّا إذا كانت وحدة معطاة تُحمَّل وتكشف جدول دوال قابلًا للاستخدام، فيستطيع التطبيق أن يقرر عند الإقلاع ما إذا كان التوقيع بالرمز ممكنًا على هذه الآلة. وتُخزَّن الوحدات المحمَّلة مؤقتًا حسب المسار، لأن المواصفة تسمح بتهيئة واحدة فقط لكل عملية لكل وحدة

ينتقي Resolve الشهادة بـ TPadesSignerOptions.CertificateThumbprint عند تزويده وبـ CertificateLabel خلاف ذلك، ثم يعثر على كائن المفتاح الخاص الحامل لمعرِّف الرمز نفسه الذي تحمله الشهادة. تقرر خوارزمية مفتاح الشهادة عائلة الخوارزمية: يوقِّع مفتاح EC بـ ECDSA وتُعاد ترميز توقيعه الخام كـ SEQUENCE بترميز DER الذي يتوقعه CMS، بينما يتبع مفتاح RSA مخطط الحشو المطلوب

تخدم EnumerateSlots و EnumerateCertificates واجهات اختيار المستخدم، فتتيح للتطبيق سرد المنافذ التي تُبلِّغ عنها الوحدة والشهادات التي يحملها منفذ منتقى قبل تثبيت أي خيار توقيع

الدوال

الدالةالوصف
Pkcs11ModuleAvailableيعيد True عندما تُحمَّل الوحدة في المسار المعطى وتكشف جدول دوال قابلًا للاستخدام
Pkcs11ModuleVersionيعيد سلسلة الإصدار التي تُبلِّغ عنها الوحدة، أو سلسلة فارغة عندما لا تُحمَّل الوحدة
Pkcs11AbiLayoutيعيد تخطيط ABI الذي حله هذا البناء، بالصيغة ulong=<n> attr=<n> pss=<n> table=<n>
ConfigurePkcs11SignerProviderيبني مزوِّدًا من الخيارات المُزوَّدة ويثبته كخلفية موقِّع PAdES ويعيده كـ IPdfPkcs11SignerProvider

الأنواع

النوعالغرض
EPdfPkcs11Errorاستثناء يُرفع عندما لا يُضبط مسار وحدة، أو تعذر تحميل الوحدة، أو فشل استدعاء رمز، أو عدم العثور على شهادة أو مفتاح خاص مطابق
TPdfPkcs11Optionsسجل يسمّي الوحدة والمنفذ و PIN والشهادة التي يعمل معها المزوِّد
TPdfPkcs11SignerProviderفئة مزوِّد تنفذ IPadesSignerProvider و IPdfPkcs11SignerProvider فوق وحدة PKCS#11

حقول TPdfPkcs11Options

الحقلالوصف
ModulePathمسار وحدة PKCS#11؛ وهو مطلوب، لأن أي وحدة تخدم رمزًا قرار نشر ولا يوجد افتراض نافع
SlotIdمنفذ الرمز المطلوب فتحه، ويُراعى فقط عندما تكون UseSpecificSlot بقيمة True
UseSpecificSlotاتركها False لتناول أول منفذ يُبلِّغ عن رمز موجود
PinPIN المستخدم؛ يمسح المزوِّد نسخته الخاصة بمجرد أن يستهلك الرمزها، ويبقى المستدعي مسؤولًا عن عمر السلسلة التي يمررها
CertificateLabelوسم كائن اختياري للشهادة المراد التوقيع بها، ويُستخدم فقط عندما تكون TPadesSignerOptions.CertificateThumbprint فارغة
Defaultمصنع ساكن يعيد خيارات بمسار وحدة فارغ ومنفذ 0 وانتقاء منفذ تلقائي وبلا PIN أو وسم

أعضاء TPdfPkcs11SignerProvider

العضوالوصف
Createيبني المزوِّد من قيمة TPdfPkcs11Options؛ وتُفتح الوحدة نفسها عند أول استخدام
Destroyيغلق أي جلسة رمز مفتوحة قبل تحرير النسخة
BackendNameيعيد اسم الخلفية، مع إلحاق اسم ملف الوحدة عندما يُضبط مسار وحدة
Resolveيحل TPadesSignerOptions إلى TPadesResolvedSigner يحمل موقِّع الرمز و DER شهادة الموقِّع
EnumerateSlotsيعيد كل منفذ تُبلِّغ عنه الوحدة كـ TPdfPkcs11Slots، بما في ذلك المنافذ بلا رمز موجود
EnumerateCertificatesيعيد الشهادات المحمولة في منفذ واحد كـ TPdfPkcs11Certificates، مع فتح جلسة على ذلك المنفذ أولًا
CloseProtectedSessionsيسجّل الخروج حيث جرى تسجيل دخول ويغلق الجلسة المفتوحة، محررًا الرمز لغير المستهلكين

ملاحظات

انظر أيضًا

FPdfCrypto, FPdfCryptoWin, FPdfCms