Enterprise الإصدار
FIPS 140 — مرجع متعمّق
نظرة عامة
قسم بعنوان «نظرة عامة»هذه الصفحة هي المرجع التفصيلي لوحدة FIPS 140 في NextPDF Enterprise. الوحدة هي قدرة سياسة واختبار ذاتي. تقيّد الخيارات التعمية على قائمة سماح متوائمة مع FIPS، وتشغّل مجموعة اختبارات إجابة-معروفة عند التشغيل، وتمنع مخرجات التعمية عند فشل المجموعة. NextPDF ليست وحدة تعمية مُصادَقة وفق FIPS 140، ولا تحمل أي اعتماد، ولا تمنح أياً منه. الدعم لا يعادل المطابقة، والمطابقة لا تعادل الاعتماد. يتطلّب النشر المتوافق مع FIPS إضافةً إلى ذلك موفّر تعمية مُصادَقاً وفق FIPS يوفّره المشغّل.
التوفّر والترخيص
قسم بعنوان «التوفّر والترخيص»تُشحَن هذه القدرة في NextPDF Enterprise (nextpdf/enterprise) وتُفعَّل بغلاف ترخيص من فئة Enterprise. النشر بدون ذلك الاستحقاق لا يحمّل فئات القدرة. قارن الإصدارات واحصل على ترخيص.
سطح واجهة برمجة التطبيقات العامة
قسم بعنوان «سطح واجهة برمجة التطبيقات العامة»تعيش جميع الرموز في NextPDF\Enterprise\Security\Fips، باستثناء FipsBootstrap في NextPDF\Enterprise\Bootstrap.
| الرمز | المعاملات | السلوك الافتراضي | يُرجِع | يطرح أو يفشل بـ | ملاحظات |
|---|---|---|---|---|---|
FipsBootstrap::boot() | ?CryptoPolicyInterface $policy، ?FipsSelfTest $selfTest، ?LoggerInterface $auditLogger (جميعها بقيمة افتراضية null) | يشغّل مجموعة اختبارات التشغيل مرة واحدة عند البدء؛ ويعتمد افتراضياً السياسة الصارمة | FipsModeGuard | FipsModuleErrorStateException عند فشل أي اختبار تشغيل | جذر التركيب؛ مسار التدقيق معطّل عندما يكون $auditLogger بقيمة null |
FipsBootstrap::lazy() | مثل boot() | يؤجّل مجموعة الاختبارات إلى أول تأكيد حدّي | FipsModeGuard | لا شيء وقت الاستدعاء؛ قد يطرح أول تأكيد FipsModuleErrorStateException | تبقى الوحدة PRE_OPERATIONAL حتى أول تأكيد |
FipsBootstrap::signatureEnforcer() | ?CryptoPolicyInterface $policy = null، ?FipsSelfTest $selfTest = null | يُقلِع الوحدة، ثم يغلّف الحارس لنقاط اختناق التوقيع | FipsSignatureEnforcer | FipsModuleErrorStateException عند فشل أي اختبار تشغيل | يفوّض إلى boot() |
FipsBootstrap::selfTestReport() | ?FipsSelfTest $selfTest = null | يشغّل مجموعة الاختبارات عند الطلب ويلخّصها | array{status: FipsSelfTestStatus, operational: bool, failed: list<string>} | لا يطرح؛ تظهر حالات الفشل في failed | لنقاط نهاية فحص صحة المشرف والاستخدام عبر واجهة سطر الأوامر CLI |
FipsCryptoPolicy::strict() | ?FipsSelfTest $selfTest = null | إعداد FIPS 140-3 المسبق: SHA-256/384/512؛ ومعرّفات OID المعتمدة لـ RSA وRSASSA-PSS وECDSA؛ وaes-256-cbc وaes-256-gcm؛ وRSA >= 2048، EC >= 256 | self | لا شيء | المُنشئ خاص؛ الإعدادات المسبقة هي المدخل الوحيد |
FipsCryptoPolicy::standard() | ?FipsSelfTest $selfTest = null | إعداد FIPS 140-2 المسبق: المجموعة الصارمة إضافةً إلى aes-128-cbc | self | لا شيء | للتوافقية القديمة فقط |
FipsCryptoPolicy::assertPreOperational() | لا شيء | يشغّل مجموعة اختبارات التشغيل، أو يعيد تشغيل نتيجتها الملتقَطة | void | FipsModuleErrorStateException عند فشل أي اختبار تشغيل | يُقاد بواسطة وصلة الإنفاذ في Core قبل أول عملية |
سطح استعلام FipsCryptoPolicy | مدخلات string / int | فحوص عضوية قائمة السماح؛ يُرفَض نوع المفتاح غير المعروف | bool / string | لا شيء | isHashAlgorithmAllowed، isSignatureAlgorithmAllowed، isEncryptionAlgorithmAllowed، isKeyStrengthAllowed، getPreferredHashAlgorithm، getName |
FipsModeGuard::__construct() | CryptoPolicyInterface $policy، ?FipsBootGuard $bootGuard = null، ?FipsAuditLogger $auditLogger = null | يغلّف سياسة بحدود بأسلوب التأكيد | — | لا شيء | بدون $bootGuard لا توجد بوابة اختبار ذاتي؛ يوفّرها تركيب الإنتاج |
FipsModeGuard::assertHashAllowed() | string $algorithm | كتالوج المنع أولاً، ثم قائمة السماح | void | FipsViolationException؛ وFipsModuleErrorStateException عند توصيل حارس إقلاع | يسبق سجلّ التدقيق أي FipsViolationException |
FipsModeGuard::assertSignatureAlgorithmAllowed() | string $oid | كتالوج المنع أولاً، ثم قائمة السماح | void | مثل ما سبق | تُطابَق معرّفات OID تماماً |
FipsModeGuard::assertEncryptionAllowed() | string $algorithm | كتالوج المنع أولاً، ثم قائمة السماح | void | مثل ما سبق | تُقارَن الأسماء بأحرف صغيرة |
FipsModeGuard::assertKeyStrengthAllowed() | string $keyType، int $bitLength | كتالوج المنع أولاً، ثم الحدود الدنيا للسياسة | void | مثل ما سبق | يُرفَض نوع المفتاح غير المعروف |
FipsModeGuard::getPolicy() | لا شيء | يُرجِع السياسة المغلَّفة | CryptoPolicyInterface | لا شيء | — |
FipsBootGuard::__construct() | FipsSelfTest $selfTest | يحتفظ بمجموعة الاختبارات؛ ولا يشغّلها | — | لا شيء | دورة تشغيل واحدة لكل نسخة |
FipsBootGuard::report() | لا شيء | يشغّل مجموعة الاختبارات مرة واحدة، ويخزّن التقرير مؤقتاً، ويلتقط عند الخطأ | FipsSelfTestReport | لا شيء | الاستدعاء الأول يشغّل الاختبارات |
FipsBootGuard::rerun() | لا شيء | يفرض تشغيلاً جديداً؛ ويلتقط تشغيلُ الخطأ العمليةَ | FipsSelfTestReport | لا شيء | اختبار ذاتي عند الطلب؛ وليس مسار تعافٍ من الخطأ |
FipsBootGuard::assertOperational() | لا شيء | يؤكّد أن الوحدة تشغيلية؛ ولاصق عبر العملية | void | FipsModuleErrorStateException | تبقى النسخة النظيفة تطرح عندما تكون العملية قد التقطت خطأ |
FipsBootGuard::status() | لا شيء | يبلّغ عن الحالة المخزَّنة مؤقتاً | FipsSelfTestStatus | لا شيء | ERROR عند الالتقاط؛ وPRE_OPERATIONAL عند عدم التشغيل مطلقاً |
FipsSelfTest::__construct() | ?callable $randomBytesProvider = null، ?callable $hashProvider = null | يستخدم hash() وrandom_bytes() الخاصة بالمنصّة | — | لا شيء | توجد تجاوزات لاختبارات الفشل الحتمية |
FipsSelfTest::run() | لا شيء | ينفّذ مجموعة الاختبارات كاملةً؛ ولا يقصُر الدارة أبداً | FipsSelfTestReport | لا شيء | تظهر حالات الفشل في التقرير، لا في الاستثناءات |
FipsSelfTestReport | FipsSelfTestStatus $status، array $results، array $failedResults | تجميع غير قابل للتغيير لتشغيل واحد | — | يطرح assertOperational() استثناء FipsModuleErrorStateException في حالة الخطأ | أيضاً isOperational() وisError() |
FipsSelfTestResult | string $algorithm، string $kind، bool $passed، string $message = '' | نتيجة غير قابلة للتغيير لكل اختبار | — | لا شيء | kind هو KAT أو PWCT أو HEALTH؛ أيضاً isPassed() وisFailed() |
FipsSelfTestStatus | — | تعداد مدعوم بسلسلة نصية | — | لا شيء | الحالات PRE_OPERATIONAL وOPERATIONAL وERROR |
FipsSignatureEnforcer::__construct() | FipsModeGuard $guard | يغلّف حارساً مُبوَّباً بالإقلاع لنقاط اختناق التوقيع | — | لا شيء | — |
FipsSignatureEnforcer::assertSignatureGenerationAllowed() | string $algorithm، string $certificatePem | يحلّ معرّف OID وقوة المفتاح، ثم يفوّض إلى الحارس | void | FipsViolationException (خوارزمية غير معروفة، أو ملخّص PSS غير معتمد، أو مفتاح غير قابل للإثبات، أو رفض من السياسة)؛ وFipsModuleErrorStateException عبر الحارس | مسار التوليد فقط؛ ولا يمرّ التحقّق من هنا أبداً |
FipsAuditLogger::__construct() | CryptoPolicyInterface $policy، LoggerInterface $logger | يغلّف مسجّل PSR-3 ونفس السياسة التي يفرضها الحارس | — | لا شيء | لا يمكن أن تختلف القرارات المسجَّلة عن القرارات المفروضة |
FipsAuditLogger::logHashOperation() / logSignatureOperation() / logEncryptionOperation() / logKeyStrengthCheck() | مدخلات string / int لكل قرار | يسجّل ALLOW عند INFO وDENY عند WARNING | bool (صحيح عند السماح) | لا شيء | سياق مُهيكَل: اسم السياسة، والعنصر، والقرار |
FipsTransitioningAlgorithms | مدخلات string / int | كتالوج منع ثابت وفق SP 800-131A Rev.2 | bool / list<string> | لا شيء | isHashDisallowed، isSignatureOidDisallowed، isEncryptionDisallowed، isKeyStrengthDisallowed، إضافةً إلى disallowedHashes، disallowedSignatureOids، disallowedEncryption |
FipsViolationException | string $policyName، string $violatingItem، string $reason | انتهاك سياسة مُنمَّط بحقول عامة للقراءة فقط | — | — | نوع فرعي من NextPDF\Exception\NextPdfException |
FipsModuleErrorStateException | array $failedResults، ?string $message = null | رفض في حالة الخطأ يحمل نتائج الاختبارات الفاشلة | — | — | نوع فرعي من NextPDF\Exception\NextPdfException |
public static function boot(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function lazy(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null, ?LoggerInterface $auditLogger = null): FipsModeGuardpublic static function signatureEnforcer(?CryptoPolicyInterface $policy = null, ?FipsSelfTest $selfTest = null): FipsSignatureEnforcerpublic static function selfTestReport(?FipsSelfTest $selfTest = null): arraypublic static function strict(?FipsSelfTest $selfTest = null): selfpublic static function standard(?FipsSelfTest $selfTest = null): selfpublic function assertPreOperational(): voidpublic function isHashAlgorithmAllowed(string $algorithm): boolpublic function isSignatureAlgorithmAllowed(string $oid): boolpublic function isEncryptionAlgorithmAllowed(string $algorithm): boolpublic function isKeyStrengthAllowed(string $keyType, int $bitLength): boolpublic function getPreferredHashAlgorithm(): stringpublic function getName(): stringpublic function __construct(private CryptoPolicyInterface $policy, private ?FipsBootGuard $bootGuard = null, private ?FipsAuditLogger $auditLogger = null)public function assertHashAllowed(string $algorithm): voidpublic function assertSignatureAlgorithmAllowed(string $oid): voidpublic function assertEncryptionAllowed(string $algorithm): voidpublic function assertKeyStrengthAllowed(string $keyType, int $bitLength): voidpublic function getPolicy(): CryptoPolicyInterfacepublic function __construct(private readonly FipsSelfTest $selfTest)public function report(): FipsSelfTestReportpublic function rerun(): FipsSelfTestReportpublic function assertOperational(): voidpublic function status(): FipsSelfTestStatuspublic function __construct(?callable $randomBytesProvider = null, ?callable $hashProvider = null)public function run(): FipsSelfTestReportpublic function __construct(private readonly FipsModeGuard $guard)public function assertSignatureGenerationAllowed(string $algorithm, string $certificatePem): voidpublic function __construct(private CryptoPolicyInterface $policy, private LoggerInterface $logger)public function logHashOperation(string $algorithm): boolpublic function logSignatureOperation(string $oid): boolpublic function logEncryptionOperation(string $algorithm): boolpublic function logKeyStrengthCheck(string $keyType, int $bitLength): boolpublic static function isHashDisallowed(string $algorithm): boolpublic static function isSignatureOidDisallowed(string $oid): boolpublic static function isEncryptionDisallowed(string $algorithm): boolpublic static function isKeyStrengthDisallowed(string $keyType, int $bitLength): boolpublic static function disallowedHashes(): arraypublic static function disallowedSignatureOids(): arraypublic static function disallowedEncryption(): arraypublic function __construct(public FipsSelfTestStatus $status, public array $results, public array $failedResults)public function isOperational(): boolpublic function isError(): boolpublic function assertOperational(): void
// FipsSelfTestResultpublic function __construct(public string $algorithm, public string $kind, public bool $passed, public string $message = '')public function isPassed(): boolpublic function isFailed(): bool
// FipsSelfTestStatusenum FipsSelfTestStatus: string{ case PRE_OPERATIONAL = 'pre_operational'; case OPERATIONAL = 'operational'; case ERROR = 'error';}عقد السلوك
قسم بعنوان «عقد السلوك»- قائمة سماح السياسة هي القرار المرجعي. يضيف
FipsTransitioningAlgorithmsطبقة منع صريحة وفق SP 800-131A Rev.2 فوقها، من أجل رسائل رفض واضحة للتدقيق. لا توسّع طبقة المنع قائمة السماح ولا تتجاوزها أبداً. - يسمح
FipsCryptoPolicy::strict()بـ SHA-256 وSHA-384 وSHA-512؛ ومعرّفات توقيع RSA PKCS#1 v1.5 وRSASSA-PSSوECDSA المرتبطة بتلك الملخّصات؛ وaes-256-cbcوaes-256-gcm؛ وحدوداً دنيا للمفاتيح تبلغ RSA 2048 وEC 256 وEd25519 256. يسمحstandard()إضافةً بـaes-128-cbc. - تغطّي مجموعة اختبارات التشغيل: اختبارات KAT لملخّصات SHA-256/384/512، واختبار KAT لـ HMAC-SHA-256، واختبار KAT للتعمية وفك التعمية بـ AES-256-CBC، واختبار KAT لوسم AES-256-GCM، واختبار اتساق زوجي لـ ECDSA P-256، وفحص صحة DRBG. ينفّذ
FipsSelfTest::run()دائماً كل اختبار ولا يقصُر الدارة أبداً، فيكون التقرير كاملاً كدليل تدقيق. - صف DRBG هو اختبار صحة مستمر (طول السحب إضافةً إلى سحوب متتالية متمايزة)، وليس اختبار إجابة معروفة. يُفوَّض التزام الإجابة المعروفة لـ DRBG إلى موفّر التعمية المُصادَق وفق FIPS الذي يوفّره المشغّل.
- حالة الخطأ لاصقة على مستوى العملية. يلتقط أول تقرير
ERRORيرصده أيFipsBootGuardالعمليةَ بأكملها. لا يمكن لنسخة حارس أو سياسة جديدة أن تغسل الخطأ، ولا يمحوه تشغيل ناجح لاحق. لا يعيد ضبط الحالة إلا إعادة تشغيل العملية (دورة طاقة حقيقية). - يطبّق
FipsCryptoPolicyواجهتَيNextPDF\Contracts\CryptoPolicyInterfaceوNextPDF\Contracts\PreOperationalSelfTestInterface. عند ضبطه كسياسة تعمية لـ Core، تقود وصلة الإنفاذ في Core استدعاءassertPreOperational()قبل إنتاج أول توقيع أو نص مُعمّى. - يبوّب
FipsSignatureEnforcerمسار التوليد فقط. التحقّق من التواقيع المولَّدة مسبقاً هو استخدام قديم وفق SP 800-131A Rev.2 ولا يمرّ عبر المُنفِّذ أبداً. - عند توصيل مسجّل تدقيق، يُصدر كل حدّ تأكيد سجلاً واحداً ALLOW (INFO) أو DENY (WARNING) قبل أي طرح لانتهاك سياسة. لذا يكون كل رفض
FipsViolationExceptionموثَّقاً في المسار. تُشغَّل بوابة حارس الإقلاع أولاً، فيُرفَع رفض حالة الخطأ قبل سجلّ التدقيق. يستشيرFipsAuditLoggerنفس السياسة التي يفرضها الحارس، فلا يمكن أن تختلف القرارات المسجَّلة عن المفروضة.
الحالات الحدّية وأنماط الفشل
قسم بعنوان «الحالات الحدّية وأنماط الفشل»- يُرفَض نوع المفتاح غير المعروف من كلتا الطبقتين: تُرجِع السياسة
falseويعامله الكتالوج كمرفوض. - مُعرّف خوارزمية توقيع لا يستطيع المُنفِّذ ربطه بمعرّف توقيع OID يُرفَض على نحو مغلق-عند-الفشل بـ
FipsViolationException. - يتشارك كل متغيّر من
RSASSA-PSSمعرّف OID1.2.840.113549.1.1.10، فلا يستطيع المعرّف وحده إثبات الملخّص. يربط المُنفِّذ الملخّص الفعّال صراحةً ويرفض أي رمز PSS لا يكون ملخّصه SHA-256/384/512. - الشهادة التي لا يمكن تحليلها، أو التي يتعذّر معرفة طول بتات مفتاحها العام، تُرفَض بوصفها
key:unprovable. - في بيئة تشغيل تخلو من بدائيات OpenSSL اللامتماثلة، يسجّل اختبار الاتساق الزوجي لـ ECDSA فشلاً، لا تخطّياً، وتدخل الوحدة حالة
ERROR. - سحبان عشوائيان متتاليان متطابقان بحجم 32 بايت يُفشلان فحص صحة DRBG (كشف المخرجات العالقة) ويفرضان حالة
ERROR. FipsModeGuardالمُنشأ بدون حارس إقلاع يُجري فحوص السياسة فقط ولا يملك بوابة اختبار ذاتي. يمرّ تركيب الإنتاج عبرFipsBootstrap، الذي يوصّل البوابة دائماً.- تُقارَن أسماء الملخّصات والتعميات بأحرف صغيرة؛ وتُطابَق معرّفات التوقيع OID تماماً، دون أي توحيد.
- بعد
FipsBootstrap::lazy()، تبقى الوحدةPRE_OPERATIONALحتى يشغّل أول حدّ تأكيد مجموعة الاختبارات. تُعامَلPRE_OPERATIONALكغير تشغيلية وقت التأكيد.
سلوك وضع FIPS
قسم بعنوان «سلوك وضع FIPS»هذه الوحدة هي سطح وضع FIPS نفسه. بينما تكون الوحدة في حالة الخطأ، وبينما تُشغَّل الاختبارات الذاتية قبل التشغيل، تُمنَع مخرجات التعمية: يطرح كل حدّ تأكيد FipsModuleErrorStateException قبل إنتاج أي توقيع أو نص مُعمّى (ISO/IEC 19790:2025 §7.3.3 b), AS03.07). يكشف FipsBootGuard::status() وFipsBootstrap::selfTestReport() الحالةَ ليتمكّن المشغّل من تحديد أن الوحدة دخلت حالة الخطأ (ISO/IEC 19790:2025 §7.10.3). هذه السلوكيات هي مزاعم قدرة حول شيفرة NextPDF، لا مزاعم مصادقة: حدّ الوحدة الذي تصادق عليه FIPS 140 هو موفّر التعمية الذي يوفّره المشغّل، وليس NextPDF.
المطابقة
قسم بعنوان «المطابقة»| الادّعاء | المعيار | البند |
|---|---|---|
| يستند FIPS 140-3 إلى ISO/IEC 19790 وISO/IEC 24759؛ لذا تستشهد هذه الصفحة ببنود ISO/IEC 19790. | FIPS 140-3 | Introduction (fips_140_3#x26.x2) |
| تُمنَع المخرجات في حالة الخطأ وأثناء الاختبارات الذاتية قبل التشغيل. | ISO/IEC 19790:2025 | §7.3.3 b) [AS03.07] |
| يقارن اختبار الإجابة المعروفة نتيجةً محسوبة بمخرَج متوقَّع معروف؛ وتطبّق مجموعة الاختبارات هذا الشكل. | ISO/IEC 19790:2025 | §7.10.4 |
| يستطيع المشغّل تحديد حالة الخطأ عبر مخرَج حالة. | ISO/IEC 19790:2025 | §7.10.3 [AS10.10] |
يستطيع المشغّلون بدء الاختبارات الذاتية عند الطلب للاختبار الدوري؛ ويوفّر rerun() وselfTestReport() ذلك. | ISO/IEC 19790:2025 | §7.10.5 [AS10.54] |
| SHA-1 ممنوعة لتوليد تواقيع رقمية جديدة؛ ويرفضها كتالوج المنع. | NIST SP 800-131A Rev.2 | §9 |
| توليد التواقيع دون قوة 112 بت (RSA < 2048، ورتبة ECDSA < 224) ممنوع؛ وتفرض الحدود الدنيا للمفاتيح ذلك. | NIST SP 800-131A Rev.2 | §3 Table 2 |
| التحقّق من تواقيع SHA-1 المولَّدة مسبقاً هو استخدام قديم؛ ولا يمرّ عبر بوابة التوليد. | NIST SP 800-131A Rev.2 | Change summary (9.x4.p12) |
جميع البنود مُعاد صياغتها؛ ولم يُستنسَخ أي نص معياري. NextPDF لا تقدّم أي ادّعاء اعتماد وفق FIPS 140. تُوائم الوحدة سلوكها مع البنود المستشهَد بها كقدرة مساعِدة على الامتثال. أما كون النشر ممتثلاً لـ FIPS فيعتمد على موفّر المشغّل المُصادَق، وتعريف حدّ الوحدة، وبرنامج الامتثال — لا على NextPDF وحدها.
ملاحظات التطوير
قسم بعنوان «ملاحظات التطوير»- تحقن اختبارات الفشل الحتمية موفّرين معطوبين عبر مُنشئ
FipsSelfTest، أو عبر معاملات$selfTestفيFipsCryptoPolicy::strict()وstandard()وطرقFipsBootstrap. - لمزلاج خطأ العملية اللاصق خطّاف إعادة ضبط داخلي مخصّص للاختبار فقط. وهو ليس جزءاً من واجهة برمجة التطبيقات المدعومة، ويجب ألا تستدعيه شيفرة الإنتاج.
- يشغّل كل عملية عامل PHP مجموعة اختبارات التشغيل الخاصة بها. ويُخزَّن التقرير مؤقتاً لكل نسخة، فتكون تأكيدات المسار الساخن فحوص حالة بزمن ثابت.
- لا تلتقط
FipsModuleErrorStateExceptionوتتابع. يعني الاستثناء أن الوحدة ترفض خدمات التعمية؛ والاستجابة الصحيحة هي التوقّف وإعادة تشغيل العملية بعد المعالجة. - يخدم
FipsBootstrap::selfTestReport()احتياجات الاختبار الذاتي عند الطلب والدوري، مثل نقاط فحص الصحة. ولا يمحو تشغيل ناجح عند الطلب خطأً ملتقَطاً أبداً.
اطّلع أيضاً
قسم بعنوان «اطّلع أيضاً»- سياسة التعمية والاختبار الذاتي وفق FIPS 140-2/3 — صفحة القدرة مع الإعداد والأمثلة.
- الأمن — مرجع تفصيلي — ضوابط أمن Enterprise المجمّعة.
- التوقيع — مرجع تفصيلي — منتِج PAdES طويل الأمد وملاحظته حول وضع FIPS.
- الأمن — NextPDF Core — سطح التعمية والتوقيع في Core الذي ترتبط به السياسة.
حدود النشر
قسم بعنوان «حدود النشر»توثّق هذه الصفحة السلوك القابل للرصد خارجياً وسطح واجهة برمجة التطبيقات العامة المدعوم فقط. أما مسارات فضاءات الأسماء الداخلية، وفئات المساعدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر فخارج النطاق.