التحقق من سياسة التوقيع في PAdES

ينشئ HotPDF السمة الموقَّعة signature-policy-identifier الصريحة في CMS، ويتحقق منها، وهي السمة التي تستخدمها توقيعات PAdES من نوع E-EPES

توليد سياسة صريحة

عيِّن SignaturePolicyOID وتجزئة مستند السياسة في THPDFCMSSignOptions، ثم اختر المؤهلات الهيكلية الاختيارية

Options := HPDFCMSDefaultOptions(palExtended_E_EPES);
Options.SignaturePolicyOID := '1.2.3.4.5.1';
Options.SignaturePolicyHash := HPDFCMSDigestBytes(PolicyDocument, cmsdaSHA256);
Options.SignaturePolicyURI := 'https://policies.example/approval-v1';

SetLength(Options.SignaturePolicyQualifiers, 1);
Options.SignaturePolicyQualifiers[0].Kind := cmsqUserNotice;
Options.SignaturePolicyQualifiers[0].ExplicitText := 'Approval policy applies';

CMS := HPDFCMSBuildSignedDataEx(KeyMaterial, DocumentDigest, Options);

افتراضيًا تكون SignaturePolicyHashAlgOID هي SHA-256 عند تركها فارغة، بينما يبقى SignaturePolicyURI اختصارًا للتوافق مع مؤهل SPuri الواحد ويمكن دمجه مع SignaturePolicyQualifiers

يدعم نموذج المؤهلات الهيكلية كلاً من SPuri، وSPUserNotice مع مرجع إشعار اختياري ونص صريح، وSPDocSpecification المعرَّف بـ OID أو URI

عيِّن SignaturePolicyHashIsUnknown فقط حين لا يعرف الموقِّع تجزئة السياسة؛ عندها يُصدر HotPDF تمثيل ETSI الصفري الكامل بطول التجزئة المختار

التحليل والإبلاغ

يكشف HPDFParseCMSSignature عن السمة عبر THPDFSignatureInfo.SignaturePolicy، متضمنةً المعرّف وخوارزمية التجزئة وبايتات التجزئة وعلامة الجهل بالتجزئة والمؤهلات وحالة التحقق

تُفكَّ قيم المؤهلات المعروفة إلى حقول ذات أنواع، بينما يحتفظ المؤهل غير المعروف بـ OID الخاص به وقيمته الخام بصيغة DER لتعالجها الطبقة التطبيقية

تُسلسل HPDFSignatureValidationReportToJSON بيانات السياسة والمؤهلات نفسها مع حالة تحقق يقرأها الآلة

تثبيت سياسة مطلوبة

VerifyOptions := THPDFCMSVerifyOptions.Default;
VerifyOptions.RequireSignaturePolicy := True;
VerifyOptions.ExpectedSignaturePolicyOID := '1.2.3.4.5.1';
VerifyOptions.ExpectedSignaturePolicyHash := ExpectedPolicyHash;
VerifyOptions.SignaturePolicyDocument := PolicyDocument;
VerifyOptions.VerifySignaturePolicyDocumentHash := True;
VerifyOptions.RejectUnknownSignaturePolicyHash := True;

Status := HPDFVerifyCMSSignatureEx(Source, ByteRange, CMS,
  VerifyOptions, SignatureInfo);

لا تقيّد حقولا OID المتوقع والتجزئة المتوقعة سوى القيمة المقابلة لكل منهما، والتحقق من مستند السياسة يجزّئ حتى مستندًا فارغًا عمدًا عندما تكون VerifySignaturePolicyDocumentHash صحيحة

السياسة المفقودة أو غير المطابقة أو غير المدعومة أو المرفوضة عند الجهل يعيدان svSignaturePolicyMismatch وvfcSignaturePolicyMismatch مع THPDFSignaturePolicyValidationStatus دقيق

تُنفَّذ فحوص السياسة قبل أعمال مزوِّد التوقيع ومسار الشهادات والأدلة، وتنطبق فقط على سجلات SignerInfo الأساسية، لذا لا تقيّد سياسة المستند الأبوي التوقيعات المضادة

الصرامة والحدود

يرفض المحلِّل تكرار سمات السياسة، والقيم المتعددة، وNULL السياسة الضمنية، والمؤهلات المعروفة غير الصالحة، وقيم IA5String غير ASCII، وUnicode غير الصالح، وأطوال التجزئة الخاطئة للمعرفة المعروفة، وأحجام المجموعات التي تتجاوز حدود التنفيذ المهيَّأة

يتطلب PAdES E-EPES سمة السياسة الصريحة مرة واحدة بالضبط ويمنع مدخل /Reason في قاموس توقيع PDF عند وجود تلك السمة؛ لا تستطيع طبقة CMS فحص قاموس PDF، لذا يجب على سير عمل إنتاج PDF إنفاذ هذا القيد الأخير

انظر الموقِّعون الأساسيون المتعددون في CMS، واتساق خوارزمية التجزئة في CMS، وتقارير التحقق في CMS