PDFium Delphi Component Docs

الوحدة FPdfCryptoMac

الوحدة: FPdfCryptoMac
خلفية Keychain في macOS لتوقيع PAdES، إضافة إلى التحقق من CMS وتقييم ثقة الشهادات عبر Security.framework

الصياغة

EPdfKeychainError = class(Exception);

TPdfKeychainSignerProvider = class(TInterfacedObject, IPadesSignerProvider)
  constructor Create(const KeychainPath: string = '');
  function BackendName: string;
  function Resolve(const Options: TPadesSignerOptions): TPadesResolvedSigner;
end;

TPdfKeychainCmsVerifier = class(TInterfacedObject, IPdfCmsVerifier)
  function BackendName: string;
  function VerifyDetached(const CmsDer: TBytes; Segment1: Pointer; Segment1Length: Cardinal; Segment2: Pointer; Segment2Length: Cardinal; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
  function VerifyAttached(const CmsDer: TBytes; const Options: TPdfCmsVerifyOptions): TPdfCmsVerifyResult;
end;

function KeychainAvailable: Boolean;
function KeychainMissingSymbols: string;
function KeychainVerificationAvailable: Boolean;
function ConfigureKeychainSignerProvider: IPadesSignerProvider;
function ConfigureKeychainCmsVerifier: IPdfCmsVerifier;
procedure ConfigureKeychainTrustAnchors(const Anchors: TPadesChainCertArray);
procedure ConfigureKeychainOcspResponses(const Responses: TPadesChainCertArray);

الوصف

FPdfCryptoMac هو خلفية تعمية macOS التي تستهلكها FPdfCrypto و FPdfCms، ويغطي نصفَي تكامل المنصة: توقيع PAdES عبر هُوية Keychain، والتحقق من CMS عبر مفكك CMS النظامي وتقييم الثقة. تُحمَّل Security.framework و CoreFoundation وتُحل أسماؤها عند التشغيل بدل الربط، فتُصرَّف الوحدة على كل الأهداف وتُبلِّغ عند التشغيل عمّا إذا كانت خدمات المنصة قابلة للوصول فعلًا

على جهة التوقيع، ينفذ TPdfKeychainSignerProvider الواجهة IPadesSignerProvider. يحصي أسلوب Resolve الخاص به هُويات Keychain، وينتقي الهُوية التي تطابق شهادتها بصمة SHA-1 التي يحملها TPadesSignerOptions، ويقرأ DER الشهادة ومرجع المفتاح الخاص المطابق، ويعيد TPadesResolvedSigner يوقِّع ICmsSigner الخاص به سمات CMS الموقَّعة عبر Security.framework، فلا يغادر المفتاح الخاص Keychain أبدًا. تُوفَّق مخطط الحشو المطلوب عبر الخيارات مع ما يستطيع المفتاح فعله فعلًا، ومعاملات RSASSA-PSS هي ذاتها التي تصدرها الخلفيات الأخرى، فيحمل المستند الموقَّع على macOS معرف AlgorithmIdentifier مطابقًا. يبني ConfigureKeychainSignerProvider المزوِّد ويثبته كخلفية توقيع PAdES النشطة، ويعيد الواجهة التي سجلها

ينفذ TPdfKeychainCmsVerifier ‏IPdfCmsVerifier فوق CMSDecoder و SecTrust؛ تجمع VerifyDetached النطاقين الموقعين حول فجوة التوقيع كمحتوى منفصل وتتحقق من CMS؛ تفحص VerifyAttached ‏CMS ذا المحتوى المرفق مثل token الوقت؛ تعيدان TPdfCmsVerifyResult بنتائج توقيع وثقة وإلغاء مستقلة وشهادة الموقع والسلسلة اختياريًا، وتحترمان خيارات الإلغاء والجلب و checkpoints في TPdfCmsVerifyOptions؛ تبني ConfigureKeychainCmsVerifier الخلفية وتثبتها

تبقى صلاحية التوقيع وثقة الشهادة نتيجتين مستقلتين، فيبقى التوقيع الأمين تحت سلسلة غير موثوقة أو موقَّعة ذاتيًا قابلًا للتمييز عن المحتوى العبث به

يمرر تحليل DER المحدود بايتات TSTInfo المغلفة الأصلية لـ RFC 3161 إلى المفكك دون تغيير النوع أو السمات الموقعة؛ يستبعد تحقق CMS العادي السمات غير الموقعة من المدخل الأصلي لمنع فحص الوقت التلقائي من استبدال سلامة التوقيع الخارجي أو سلسلته؛ لا يفحص countersignatures أو بقية السمات غير الموقعة؛ تفحص ValidatePadesTrust كل token أصلي و imprint ودور TSA وثقته وإلغاءه مستقلاً

مرر مسار Keychain إلى TPdfKeychainSignerProvider.Create لقصر بحث الهوية عليه بقائمة خاصة بالاستعلام، ثم سجل عبر ConfigurePadesSignerProvider؛ الفارغ يستخدم نطاق المستخدم الحالي؛ لا يغير فتح Keychain أو البحث فيه الافتراضي أو قائمة المستخدم أو ثقة النظام؛ ترفع المسارات غير الصالحة والرموز غير المتاحة EPdfKeychainError

تصدّر Resolve سلسلة المُصدر المتاحة عبر بحث شهادات خاص بالاستعلام بلا شبكة وبناء سلسلة أصلي؛ المرشحون محدودون بـ 4096 شهادة و 1 MiB لكل منها و 16 MiB إجمالًا؛ السلسلة 32 شهادة تشمل الورقة المعادة منفصلة عن ChainCertDer؛ التصدير لا يثبت الثقة أو يثبت مرتكزًا، ولا يولد مُصدرًا مفقودًا

دوال التوقيع

الدالةالوصف
KeychainAvailableيعيد True عندما تُحمَّل Security.framework و CoreFoundation ويُحل كل رمز يلزم للتوقيع
KeychainMissingSymbolsيعيد الأسماء التي تعذر حلها مفصولة بمسافات، أو سلسلة فارغة عندما ينجح كل الربط
ConfigureKeychainSignerProviderيبني TPdfKeychainSignerProvider ويثبته كخلفية توقيع PAdES ويعيده كـ IPadesSignerProvider
TPdfKeychainSignerProvider.Createتختار ملف Keychain موجودًا اختياريًا للبحث المقيد وترفض NUL المضمن ومسارًا أطول من 4096 وحدة نص
TPdfKeychainSignerProvider.BackendNameيعيد معرف الخلفية المُبلَّغ عنه لمزوِّد التوقيع
TPdfKeychainSignerProvider.Resolveيقابل TPadesSignerOptions مع هُويات Keychain ويعيد TPadesResolvedSigner يحمل الموقِّع و DER الشهادة والسلسلة

دوال التحقق

الدالةالوصف
KeychainVerificationAvailableيعيد True عندما تُحل رموز مفكك CMS وسياسة الثقة وتقييم الثقة
ConfigureKeychainCmsVerifierيبني TPdfKeychainCmsVerifier ويثبته كخلفية التحقق من CMS ويعيده كـ IPdfCmsVerifier
ConfigureKeychainTrustAnchorsتنسخ مرتكزات DER صريحة لكل تقييم لاحق مكملة للنظام دون تعديل Keychain؛ الحدود 64 شهادة و 4 MiB لكل منها و 16 MiB إجمالًا؛ يزيلها الجدول الفارغ
ConfigureKeychainOcspResponsesتنسخ أدلة OCSP DER لـ Security.framework؛ الحدود 8 استجابات و 1 MiB لكل منها و 4 MiB إجمالًا؛ يزيلها الجدول الفارغ
TPdfKeychainCmsVerifier.BackendNameيعيد معرف الخلفية المُبلَّغ عنه لخلفية التحقق
TPdfKeychainCmsVerifier.VerifyDetachedيتحقق من قيمة CMS منفصلة مقابل مقطعَي المحتوى اللذين يملكهما المستدعي والموصوفين بـ Segment1 و Segment1Length و Segment2 و Segment2Length، مستخدمًا TPdfCmsVerifyOptions المُزوَّدة
TPdfKeychainCmsVerifier.VerifyAttachedيتحقق من قيمة CMS مرفقة تحمل محتواها الموقَّع بنفسها، مستخدمًا TPdfCmsVerifyOptions المُزوَّدة

الأنواع

النوعالأعضاء والغرض
EPdfKeychainErrorاستثناء يُرفع عندما تكون Security.framework غير متاحة، أو عندما لا تطابق أي هُوية Keychain الموقِّع المطلوب، أو عندما يفشل استدعاء التوقيع على المنصة
TPdfKeychainSignerProviderخلفية توقيع PAdES تنفذ IPadesSignerProvider، مع BackendName و Resolve
TPdfKeychainCmsVerifierخلفية تحقق من CMS تنفذ IPdfCmsVerifier، مع BackendName و VerifyDetached و VerifyAttached

ملاحظات

انظر أيضًا

FPdfCryptoWin, FPdfCrypto, FPdfCryptoOcsp, FPdfCms, FPdfTrustedList, FPdfMac