مهام التوقيع التزايدي بـ PFX

عملية sign تدعم ملفًا تزايديًا متحققًا منه يحفظ مراجعة PDF الأصلية بدقة وكل توقيع تشفيري قائم، مع إعادة أرتيفكت موقَّعًا باستقلالية

انتقاء ملف

{"schemaVersion":1,"type":"sign","profile":"pfx-incremental-document",
 "pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
 "fieldName":"ApprovalTwo","existingField":true,
 "budget":{"memoryBytes":268435456,"outputBytes":134217728,
           "resultBytes":16777216,"timeMilliseconds":60000,
           "objectCount":1000000,"pageCount":1024}}

ملف pfx-unsigned-document الافتراضي يحفظ السلوك الأصلي ويقبل مصادر بلا أي حقول تواقيع؛ فهو ينشئ حقلًا جديدًا مستخدمًا page وx1 وy1 وx2 وy2 ويستعيد الرسم البياني للمصدر قبل النشر

pfx-incremental-document ينتقي الملف الجديد؛ وincremental: true مُنتقي مكافئ عند إغفال profile وتتعارض مع ملف مختلف صريحًا

existingField بقيمة true تملأ حقل التوقيع المسنّى الفارغ دون إضافة حقل آخر؛ وإلا تنشئ العملية حقلًا جديدًا وpage والمستطيل يحددان widget الخاص به

fieldName تقصّر افتراضيًا إلى Signature1 وتقبل من 1 إلى 1024 بايت UTF-8؛ وexistingField تتطلب ملفًا تزايديًا وحقل توقيع مطابقًا وقيمة V غائبة أو null

بت Ff الأول للقراءة فقط وأعلام أعداد صحيحة مشوهة أو خارج النطاق تُرفض قبل التهيئة؛ وقواميس SV وLock الموروثة تُحل بأسماء PDF دلالية فريدة وتجوال والدين محدودًا السقف

قيم seed وأقفال الحقول

digestMethod تنتقي digest CMS الفعلي بقيمة SHA256 أو SHA384 أو SHA512; وSHA256 هي الافتراضية بينما cades بقيمة true تنتقي ETSI.CAdES.detached وتضمّن سمة signing-certificate-v2 التي تربط شهادة التوقيع الفعلية

‏reason وlocation وcontactName سلاسل JSON بترميز UTF-8 تُكتب سلاسل نص Unicode في PDF؛ وأسباب seed الإلزامية تقارن قيم Unicode لديها، بما يشمل قيمة النقطة المفردة الخاصة التي تتطلب سببًا محذوفًا

قيود SV الإلزامية تفحص المعالج الفعلي وSubFilter لـ CMS ونسخة التوقيع المدعومة وdigest والسبب وإذن التصديق والإقرار القانوني ووضع LockDocument; والطابع الزمني الإلزامي يستخدم ناقلة التطبيق وسير الثقة الصريح الموصوف في طوابع التوقيع على Windows، والأدلة الإبطالية الموقَّعة الإلزامية تستخدم توقيع CRL وOCSP مصادقًا عليه، والمظاهر المسنّاة الإلزامية تستخدم presets مظاهر التواقيع المولَّدة الفعلية

خصائص SVCert الإلزامية تتحقق من شهادة الورقة الفعلية لـ PFX وسلسلة المُصدرين المضمّنة والبايتات المسموحة للشهادات وOIDs سياسة الشهادة وبتات استخدام المفاتيح وسمات Subject DN بـ Unicode قبل التوقيع

credentialSourceURL تزوّد مصدرية بيانات اعتماد يدّعيها التطبيق لـ URL إلزامي في SVCert; والمكتبة تقارن URL المعلن وURLType المدعوم دون فتح نقطة النهاية تلك أو مصادقة هوية ناقلة

أقفال الحقول بقيم All وInclude وExclude تُكتب قاموس SigFieldLock غير مباشرًا ومرجع FieldMDP مطابقًا مرتبطًا بكتالوج المستند؛ وأسماء الحقول سلاسل نص Unicode في PDF وتبقى مشفرة في المستندات المشفرة

قيمة P لقفل موقَّع تحدّد سقف المراجعات اللاحقة بسياسة حقل التوقيع الأصلي الموقَّع باستقلالية عن أي إذن DocMDP؛ والتوقيع الثاني المسموح يحفظ المراجعة وCMS السابقين بدقة، بينما حقل مقفل أو تغيير بقيمة P1 يُرفض قبل النشر

بحث السياسة يفك escapes أسماء PDF مرة واحدة بالضبط، بما يشمل الأسماء الموروثة من Parent; والقواميس ذات الأسماء الدلالية المكررة والآباء غير الصالحين أو الدوريين تُرفض قبل النشر، بينما الأسماء المهربة الصالحة تحفظ بايتات مصدرها

contentsBytes تقصّر افتراضيًا إلى 16384 وتقبل من 1024 إلى 1048576; وreason وlocation وcontactName تعبّئ قاموس التوقيع الجديد

التصديق والإقرارات القانونية

certificationPermission تقصّر افتراضيًا إلى 0 للتوقيع بالاعتماد؛ و1 أو 2 أو 3 تنشئ توقيع تصديق بإذن DocMDP المطلوب وتربط Catalog Perms DocMDP بقاموس التوقيع غير المباشر الفعلي وتحفظ أي transform مستقلًا لـ FieldMDP

التصديق يجب أن يكون أول توقيع والمستند يمكن أن يحتوي توقيع تصديق واحدًا فقط؛ وأذونات Catalog المشوهة والمراجع غير المحلولة وقيم DocMDP بلا ربط حقل توقيع أصلي موقَّع تُرفض

legalAttestation سلسلة Unicode اختيارية لتوقيع التصديق وتُكتب في Catalog Legal Attestation; وقائمة LegalAttestation إلزامية في SV يجب أن تحتوي النص المنتقى، بينما القائمة الإلزامية الفارغة تتطلب الحذف

تواقيع تصديق قائمة بقيمة P2 وP3 تسمح بتوقيع اعتماد لاحقًا عندما تسمح أقفال الحقول وسياسة المراجعة؛ وتواقيع P1 والحقول المقفلة ترفض التغييرات قبل النشر الثنائي

عقد المصدر

ملف المهمة التزايدي يقبل مصدرًا أصليًا محفوظًا، بما يشمل PDFs مشفرة مدعومة، ورسمًا بيانيًا للكائنات محمَّلًا دون تعديل؛ وزوّد password في عملية sign لمصدر مشفر، منفصلةً عن pfxPassword

كلمة سر المصدر تصادق على snapshot خام مستقلًا وتهيئ سياق التشفير الأصلي وتعيد فتح المرشّح الموقَّع؛ والمراجعة التزايديّة الناتجة تحفظ بادئة ciphertext الأصلية وقاموس الأمان ومعرّف المستند الدائم

فك التشفير يمكنه داخليًا وسم كائنات باتساخ أو إزالة قاموس أمان من الرسم البياني المفكوك؛ والعملية تقارن هذه الحالات وتسلسلات الكائنات المحدودة السقف بخط أساس مصدر مصادقًا عليه حديثًا، بينما ترفض تغييرات الرسم البياني الفعلية وكل حالات الكائنات المفرغة

لكلمة سر مستخدم، حقل توقيع قائم يتطلب إذن تعبئة نموذج أو تعليقات وwidget توقيع جديد يتطلب إذن تعليقات؛ وكلمة سر مالك مصادق عليها تُصرّح بأي من العمليتين رهينةً بسياسات التواقيع القائمة

SaveLoadedDocumentToStream يمكنها تغيير حالة التسلسل؛ وعند توقيع رسم بياني محفوظ أو معدَّل، أعد تحميل البايتات المحفوظة في مقبض جديد ووقّع تلك المراجعة

أبقِ تخزين المصدر الأصلي ثابتًا لعمر المقبض؛ ومهام الملفات تمنع مشاركة الكتابة أثناء التحميل وتهيئة snapshotها

المقبض الأصلي يحفظ أعداد حقوله وهوية حقل قائمًا وقيم النماذج وبايتات المصدر وإعدادات الإطلاق والفك السابقة؛ وكل نجاح توقيع يعيد documentUpdated بقيمة false، وفشل التوقيع يترك المقبض متاحًا للاستعلام أو الحفظ أو طلب صالح لاحق

مهام الملفات ترفض مسار مخرجات يساوي أو يعيد استخدام ملف الإدخال، بما يشمل hard links; وواجهات المسارات المباشرة ترفض aliases مسارات المصدر وملفاته القابلة للتعرف، وعلى المستدعين أيضًا إبقاء تخزين مخرجات callback معتمًا مميزًا عن تخزين الإدخال

التهيئة والتحقق

العملية تنسخ بايتات المصدر الخام إلى snapshot مؤقت منشأ حصريًا وتفتح استنساخًا تزايديًا مستقلًا وتُلحق الـ placeholder عبر SaveIncrementalUpdate محدودة السقف وتملأ CMS المنفصلة عبر مُوقِّع مسار PFX الأصلي

الـ PFX يبقى مفتوحًا مع منع مشاركة الكتابة من preflight الحجم حتى التوقيع؛ والملفات المؤقتة تستخدم CREATE_NEW وتُزال فقط عندما تمتلك العملية إنشاءها

المرشّح الموقَّع يجب أن يحتوي بادئة بايتات المصدر الدقيقة وأعداد حقول النماذج والتواقيع المتوقعة؛ والتوقيع الجديد يجب أن يتحقق في حقله المنتقى وكل توقيع معبأ مسبقًا ما زال يتحقق وتحليل مراجعة كل توقيع قديم يجب أن يقبل قيود DocMDP وFieldMDP وحقوق الاستخدام والهوية

الحقول القديمة غير المعبأة تُحفظ دون عدّها ضمن preservedSignatures; والتواقيع القائمة المشوهة أو غير الصالحة أو المخالفة للسياسة تسبب رفضًا قبل النشر الثنائي

تحقق التواقيع القائمة يفحص سلامة CMS مقابل البايتات الموقَّعة وسياسة المراجعة الأصلية؛ وعند طلب طابع زمني للتوقيع الجديد، تتحقق استجابته باستقلالية من ثقة TSA الصريحة وأدلة الإبطال المهيأة قبل النشر

الميزانيات والنشر

سقف المخرجات الفعلي هو min(outputBytes, memoryBytes / 8) ويتضمن بادئة المصدر كاملةً والكائنات الملحقة وxref وحجز التوقيع؛ وeffectiveOutputLimit تبلّغ السقف المطبق

المرشّح غير الموقَّع والمخرج الموقَّع محدودان سقفًا منفصلًا بهذا السقف، وبايتات PFX مقصوصة بـ memoryBytes / 8، وميزانيات فك خط الأساس والاستنساخ والمرشّح مصدَّرةً سقفًا منفصلًا بـ memoryBytes / 8 مع عتبات مسك ملفات لا تتجاوز 1 MiB

هذه ميزانيات عمليات ومخازن لا ضمان RSS صارم للعملية؛ والتشفير وmetadata الكائنات وتحليل المراجعات ومصدر المستدعي المحمَّل مسبقًا يمكنها استلزام ذاكرة مقيمة إضافية

فحوص الإلغاء والوقت المنقضي تسري على نسخ المصدر وتسلسل دلتا ونسخها وقراءات المرشح وقراءات تحقق التواقيع وقراءات تحليل المراجعات ونشر callback؛ وفشل المسارات الأصلية اللاصقة تحفظ فئتها في الميزانية أو الإلغاء عند حد المهمة

المخرج الثنائي يُهيأ ويُتحقق قبل أول callback مخرجات، وحجم JSON للنتيجة يُفحص قبل النشر الثنائي؛ ومخرج callback نفسه غير ذري فـ callback ثنائي أو نتيجة فاشلة يمكنها ترك بايتات على المستدعي إهلاكها

مهام الملفات تكتب في مرشح بنفس المجلد مملوكًا وتفرغه وتغلق مقبضَي المصدر والمخرجات وتستبدل ذريًا هدفًا مميزًا بعد تحقق ناجح؛ والفشل يحفظ وجهة قائمة

النجاح يعيد mediaType بقيمة application/pdf وfieldName وprofile وincremental وexistingField وcertificationPermission وrevocationInfo وappearanceProfile وpreservedSignatures وeffectiveOutputLimit وoutputBytes وdocumentUpdated بقيمة false

قبول إعادة التشغيل

$env:HOTPDF_SUPPRESS_AUTO_LAUNCH = '1'
./Tests/CABI/Run-IncrementalSigningAcceptance.ps1 -BuildDLL -CheckFPC

المُشغِّل يكتشف RAD Studio عبر RootDir سجله ويقبل تجاوزات RADStudioRoot وPythonExecutable ويستخدم سلسلة أدوات FCP المهيأة عند انتقاء CheckFPC; وFPCOnly تعيد تشغيل الأهداف الأصلية تلك فقط، بينما OpenSSLWin32Library وOpenSSLWin64Library تنتقيان مكتبات runtime مطابقة لكل معمارية

المُشغِّل غير GUI يفحص واجهتَي Win32 وWin64 الأصليتين وDLL الـ ABI الحقيقية بلغة C مستخدمًا callbacks جزئية وحقولًا فارغة قائمة وتواقيع سابقة وقيم seed إلزامية وCAdES فعليًا بـ SHA384 وSHA512 وmetadata Unicode وتواقيع ثانية مسموحة ومقفلة وخصائص شهادات PFX الفعلية وtransforms أقفال حقول AES-128 وAES-256 وقيود أذونات وبيانات اعتماد مالك وكلمات سر خاطئة ورسومًا مفكوكة متسخة وsnapshots مصدر مشفرة دقيقة واسترداد كاتب ملفات مشفرة في المكان نفسه ومصادفات CMS حقيقية بـ DocMDP بقيم P1 وP2 وميزانيات وإلغاءً وفشل callbacks وإعادة استخدام مصدر بعد فشل

فحوص pypdf وMuPDF وOpenSSL المستقلة تثبت البادئات السابقة والنطاقات البايتية الدقيقة والتشفير دون تغيير والمعرّفات الدائمة والنص الأصلي قابلًا للبحث وقيم CMS القديمة والجديدة الصالحة واستثناء تشفير Contents للتوقيع ورفض المحتوى الموقَّع المعدَّل؛ وindependent-proof.json يسجل النطاقات البايتية ونتائج الإثبات

مواضع مرتبطة

عمليات المستندات, CopyLoadedSourceToStream, SaveIncrementalUpdate, EHPDFIncrementalOutputBudget