Windows Signing Timestamps

عملية sign على Windows يمكنها طلب طابع RFC3161 حقيقي عبر callback تطبيقي تزامني ونشر الـ PDF فقط بعد مصادقة الاستجابة

خيارات التوقيع

{"schemaVersion":1,"type":"sign","incremental":true,
 "existingField":true,"fieldName":"ApprovalOne",
 "pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
 "cades":true,"digestMethod":"SHA384","timestamp":true,
 "timestampURL":"https://tsa.example/service",
 "timestampTrustedCAFile":"C:/trust/tsa-roots.pem",
 "timestampTrustedCRLFile":"C:/trust/tsa-crls.pem",
 "requireTimestampRevocation":true}

timestamp تقصّر افتراضيًا إلى false؛ والقيمة true تتطلب callback النقل التطبيقي وtimestampTrustedCAFile صريحة تحتوي جذور شهادات PEM موثوقة

digestMethod تنتقي digest المستند الفعلي في CMS وخوارزمية بصمة الطابع الزمني من SHA256 أو SHA384 أو SHA512؛ وmessageImprint تحسب hash لـ octets توقيع CMS الفعلية مرة واحدة بالضبط

timestampTrustedCRLFile تزوّد اختياريًا CRLs بـ PEM؛ وrequireTimestampRevocation تتطلب ذلك الملف وتفعّل فحوص CRL للمُصدر والشهادة، بما يشمل شهادات ملغاة وأدلة منتهية

ملفات إدخال الثقة تبقى مفتوحة مع منع مشاركة الكتابة خلال التوقيع ويُحدّ الحجم المجموع لكل منها بثُمن memoryBytes قبل أن يحمّلها OpenSSL

كل طلب يحتوي nonce تشفيريًا طازجًا ويطلب شهادات TSA؛ وتصادق استجابة الطلب على nonce الطلب والبصمة وتوقيع CMS كاملًا وربط شهادة التوقيع بـ ESS وسلسلة الشهادات وEKU الطابع الزمني الحرج

ناقلة ABI بلغة C

مرّر hpdf_signing_operation_v1 إلى hpdf_document_execute_json_v1، واضبط operation.struct_size إلى sizeof(hpdf_signing_operation_v1)، وزوّد timestamp_transport وtimestamp_user_data

بادئة العملية تحفظ تخطيط hpdf_operation_v1 القائم ونسخة ABI؛ والعمليات العادية تواصل استخدام البنية الأصلية

الـ callback يتلقى TimeStampReq كاملًا بـ DER وresponse_io مستعارة؛ واكتب TimeStampResp كاملًا بـ DER عبر response_io.write وأعِد hpdf_status

الـ callback تعمل على خيط المستدعي، ومؤشرا IO للطلب والاستجابة يبقيان صالحين فقط خلال ذلك الاستدعاء؛ والتطبيق يمتلك سياسة نقل الشبكة والمصادقة والمهلة والاتصال

response_io.is_cancelled تستقصي callbacks الإلغاء لإدخال العملية ومخرجها ونتيجتها؛ وكتابات الاستجابة تفرض حدها الأقصى 16 MiB مقصوصًا إضافيًا بثُمن memoryBytes قبل نسخ ذاكرة الـ callback

فشل كتابة استجابة أو إلغاء يبقى فعالًا للعملية حتى لو أعاد الـ callback لاحقًا النجاح؛ والاستجابات الفاشلة لا يمكنها نشر بايتات PDF

نقطة خدمة Pascal

THPDFJobProcessor.ExecuteLoadedSigningOperation تقبل المستند المحمَّل وكائن JSON للعملية ومسار مخرجات ونقطة فحص وcallback THPDFHeadlessTimestampTransport وسياق callback معتمًا

ناقلة Pascal تتلقى DER للطلب وتعيد DER للاستجابة؛ والتوقيع التزامني المتداخل يستعيد سياق callback المحيط عند عودة العملية الداخلية

قيم seed والمصدرية

قيد TimeStamp إلزامي في SV يُلبّى باستجابة مصادق عليها فعلية؛ وعندما يحدد قاموس TimeStamp الإلزامي URL، يجب أن تطابق timestampURL تلك القيمة

timestampURL مصدرية نقل يدّعيها التطبيق؛ ومقارنة URL المعلن لا تثبت هوية خادم HTTPS، وعلى التطبيق مصادقة نقطة نهايته المنتقاة

مهام ملفات مستقلة بلا callback تطبيقي لا يمكنها إجراء طلب طابع زمني؛ وسلسلة URL وحدها لا تلبّي طابعًا زمنيًا إلزاميًا

انظر التوقيع التزايدي بـ PFX والتحقق الأصلي من RFC3161