تخطَّ إلى المحتوى
getnextpdf.com

Enterprise الإصدار

التحقق من التوقيع — مرجع متعمّق

هذه الصفحة هي المرجع المتعمّق لسطح جانب التحقق من ⁨AdES⁩ في ⁨NextPDF Enterprise⁩. نقطة الدخول هي NextPDF\Enterprise\Security\Validation\AdESValidationEngine. وهي تنفّذ تدفّقات التحقق في ⁨NextPDF⁩ المصمَّمة على نموذج ⁨ETSI⁩ لعمليات الفحص الأساسي، والمقترن بالوقت، وطويل الأمد، والأرشيفي بالطوابع الزمنية: التحقق الأساسي، والتحقق مع الوقت، والتحقق مع بيانات طويلة الأمد، والتحقق من سلسلة تغطية ⁨DocTimeStamp⁩ الأرشيفية. والنتائج هي قيم ValidationReport تحمل حالات تعداد MainIndication وSubIndication بقيم نصية من نوع ⁨URN⁩ الخاص بـ⁨ETSI⁩. الأسطح الداعمة الموثّقة هنا: واجهة ⁨SPI⁩ المسماة SignatureDataExtractor وتطبيقها CmsSignatureDataExtractor، والماسح على مستوى البايت PdfSignatureDictionaryScanner، وسطح التحقق من المسار NextPDF\Enterprise\Security\Pki، وBatchSignatureValidator. للإرشاد على مستوى سير العمل، راجع التحقق من التوقيع: جانب التحقق التشفيري لـ AdES / ⁨PAdES⁩.

تُشحن هذه القدرة ضمن ⁨NextPDF Enterprise⁩ (nextpdf/enterprise) وتُفعَّل بمظروف ترخيص من فئة ⁨Enterprise⁩. ونشرٌ بلا ذلك الاستحقاق لا يُحمّل أصناف هذه القدرة. قارن بين الإصدارات واحصل على ترخيص.

سطح واجهة برمجة التطبيقات العامة

قسم بعنوان «سطح واجهة برمجة التطبيقات العامة»
الرمزالمعاملاتالسلوك الافتراضيالقيمة المُعادةيرمي أو يفشل بـملاحظات
AdESValidationEngine::__construct11 معاملاً اختيارياً: ?PathValidatorInterface $chainValidator، ?SignatureDataExtractor $extractor، ClockInterface $clock، ?LoggerInterface $logger، string $defaultPolicy، NetworkPolicy $networkPolicy، وخمسة متعاونين اختياريين للتحققجميع الإعدادات الافتراضية مغلقة عند الفشل: مُتحقِّق مسار ⁨Pki⁩ فوق ساعة المحرّك، بلا مستخرِج، بلا مخزن ثقة ⁨TSA⁩محرّك جديدلا يرميمع غياب مخزن الثقة، يُبلّغ تقييمُ سلسلة ⁨TSA⁩ عن عدم الثقة؛ وهذا يُطابَق إلى INDETERMINATE، ولا يكون تمريراً أبداً
AdESValidationEngine::validateBasicstring $signedData، string $signatureالتحقق الأساسي: التنسيق، والملخّص، والتشفير، والخوارزمية الضعيفة، والسلسلة، والإبطال المُقيَّد بالمصدرValidationReportلا يرمي؛ إخفاقات الاستخراج والمسار تُطابَق إلى تقارير مغلقة عند الفشلبلا مستخرِج، فحوص حماية فقط؛ راجع الحالات الحدّية
AdESValidationEngine::validateWithTimestring $signedData، string $signature، DateTimeImmutable $claimedTimeالتحقق الأساسي أولاً؛ ثم مقارنة نافذة الشهادة والإبطال بالوقت المُدّعىValidationReportلا يرميبوابة صارمة للطابع الزمني للتوقيع عند وجود السمة؛ ويبقى $claimedTime مِرساةَ الوقت
AdESValidationEngine::validateWithLongTermDatastring $signedData، string $signature، array $dssData (certs/ocsps/crls)يُشترط تمرير أساسي؛ بوابة الطابع الزمني للتوقيع مُسلّحة بتقييم ⁨TSA⁩ عند ⁨genTime⁩؛ وبوابات ⁨POE⁩ وإبطال ⁨DSS⁩ والأرشفةValidationReportلا يرميNetworkPolicy::STRICT_OFFLINE مع بيانات مُضمَّنة غير كافية يُنتج INDETERMINATE / TRY_LATER
AdESValidationEngine::validateArchivalTimestampChainstring $pdfBytes، array $dssData = []، ?TrustAnchorStoreInterface $anchors = nullسلسلة تغطية ⁨DocTimeStamp⁩ مبنية على الأدلة فوق بايتات ⁨ByteRange⁩ المضبوطةValidationReportلا يرمي عند البايتات العدائيةTOTAL_PASSED فقط لسلسلة موثوقة تغطّي حتى ⁨EOF⁩
MainIndicationتعداد مدعوم بسلسلة نصية، ثلاث حالاتقيم ⁨URN⁩ الخاصة بـ⁨ETSI⁩؛ راجع قائمة الحالات أدناه
SubIndicationتعداد مدعوم بسلسلة نصية، خمس عشرة حالةقيم ⁨URN⁩ الخاصة بـ⁨ETSI⁩؛ راجع قائمة الحالات أدناه
ValidationReport::__constructMainIndication $mainIndication، ?SubIndication $subIndication، DiagnosticData $diagnosticData، DateTimeImmutable $validationTime، string $validationPolicy = ''نتيجة تحقق غير قابلة للتغيير (final readonly)تقرير جديدلا يرميisPassed()، isFailed()، isIndeterminate()، toArray()
DiagnosticData::__constructarray $certificateChain، array $timestamps، array $revocationData، string $validationPolicy، string $signatureFormat، array $warnings (جميعها بقيم افتراضية)حاوية أدلة غير قابلة للتغيير؛ مسار تدقيق فقطقيمة جديدةلا يرميtoArray() يُسلسِل المراجع لأغراض التقرير
SignatureDataExtractor::extractstring $signedData، string $signature⁨SPI⁩: يحلّل ⁨CMS⁩ ويستخرج مكوّنات التحققExtractedSignatureDataSignatureExtractionException عندما يتعذّر تحليل التوقيعواجهة؛ تفصل تحليل ⁨ASN.1⁩ عن المحرّك
CmsSignatureDataExtractor::extractstring $signedData، string $signatureاستخراج مع تحقق تشفيري من توقيع ⁨PAdES⁩ أساسي منفصلExtractedSignatureDataSignatureExtractionException فقط عندما يتعذّر تحليل ⁨CMS⁩ كلياًإخفاق التشفير أو الربط يُعيد بيانات بقيمة cryptoValid / hashValid خاطئة؛ ولا يرمي لأجل ذلك أبداً
PdfSignatureDictionaryScanner::scanstring $pdfBytesمسح على مستوى البايت لقواميس /ByteRange + /Contents بفحوص تقاطعية مانعة للانتحال بمطابقة دقيقةlist<PdfSignatureOccurrence>كلّي؛ لا يرمي أبداً؛ المرشّحات المشوّهة تُتخطّىمرتّبة حسب نهاية التغطية، الأبكر أولاً
PathValidatorInterface::validatearray $chain، ?DateTimeImmutable $validationTime = null، array $initialPolicies = []التحقق من المسار وفق ⁨RFC 5280 §6.1.4⁩ مع معالجة السياساتPathValidationResultPathValidationException عند سلسلة غير صحيحة بنيوياً أو تجاوز حدّ عدائيالسلسلة تبدأ بالكيان النهائي أولاً والمِرساة أخيراً
PathValidatorInterface::validateWithAiaChasingarray $chain، ?DateTimeImmutable $validationTime = nullحلّ ⁨AIA⁩ للوسائط المفقودة، ثم التحققPathValidationResultPathValidationExceptionعمليات الجلب مُقيَّدة بحدود المهلة والبايتات
CertificateChainValidatorالمُنشئ: المحرّك، PathValidationOptions، الساعة، المُسجِّل؛ الساكن withDefaults()تطبيق ⁨SPI⁩ بالحدود العدائية الافتراضيةPathValidationResult من كلتا الطريقتينPathValidationExceptionيُرمى أيضاً عندما يتعذّر تصدير OpenSSLCertificate إلى ⁨PEM⁩
PathValidationOptions::__constructحدود (maxDepth، maxPolicyFanout، fetchTimeoutSeconds، fetchSizeCapBytes) بالإضافة إلى أعلام السياسة، ?TrustAnchorStoreInterface $trustAnchors، bool $requireTrustedAnchorعمق 32، تفرّع 64، 5 ثوانٍ لكل جلب، 10 ⁨MiB⁩ لكل جلب؛ جميع الأعلام خاطئةخيارات جديدةلا يرميمصانع: defaults()، strict()، withTrustAnchors()
PathValidationResult::__constructbool $valid، string $trustAnchorFingerprint، DateTimeImmutable $validatedAt، array $validPolicies، ?RevocationCheckResult $revocation، bool $trustAnchorTrusted، array $fetchedCertificates، array $failureReasonsنتيجة غير قابلة للتغيير؛ trustAnchorTrusted افتراضه خاطئ (مغلق عند الفشل)قيمة جديدةلا يرميعضوية الثقة متمايزة عن الصحة البنيوية
PolicyProcessorالمُنشئ: PolicyTreeState $state، PathValidationOptions $options؛ processCertificate(string $certDer, int $depth, bool $selfIssued)، finalizeWrapUp()، tree()توسيع شجرة السياسات وتخطيطها وإنهاؤها وفق ⁨RFC 5280 §6.1.4⁩void / list<non-empty-string> / PolicyTreePathValidationException عند أي إخفاق في معالجة السياسة (مغلق عند الفشل)الإنهاء يُعيد معرّفات ⁨OID⁩ للسياسات الباقية، باستثناء ⁨anyPolicy⁩
PolicyTreeattach(PolicyTreeNode $node, PathValidationOptions $options)، enforceFanout(...)، remove(...)، بالإضافة إلى استعلامات القراءةحالة valid_policy_tree مع فهرس عمقيتغيّر حسب الطريقةPathValidationException عندما يتجاوز عددُ الأوراق الحيّة حدَّ التفرّعيكشف ANY_POLICY_OID (2.5.29.32.0)
NameConstraintsChecker::processCertificatestring $certDer، bool $applyNameCheckيجمع ويُنفّذ الشُّجيرات المسموحة / المستثناة وفق ⁨RFC 5280 §6.1.4(g)⁩voidPathValidationException عند شُجيرة منتهَكة، أو شكل ⁨GeneralName⁩ غير مدعوم في قيد، أو تجاوز حدّالأسماء غير القابلة للمقارنة تُعالَج بالإغلاق عند الفشل
TrustAnchorStoreInterface::containsFingerprintstring $anchorDerSha256Hexالعضوية بواسطة ⁨SHA-256⁩ ست عشري بأحرف صغيرة فوق شهادة ⁨DER⁩ للمِرساةboolلا يرميدرزة الثقة التي يستشيرها مُتحقِّق المسار
BatchSignatureValidator::validatearray $inputs (list<DocumentSignatureInput>)التحقق من توقيعات متعددة المستندات مع تخزين مؤقت للإبطال لكل دفعةBatchValidationReportInvalidArgumentException عند قائمة فارغة؛ وحارس موارد يرفض الدفعات التي تتجاوز 1000 مستنديوجد في NextPDF\Enterprise\Signature
final class AdESValidationEngine
public function validateBasic(string $signedData, string $signature): ValidationReport
public function validateWithTime(
string $signedData,
string $signature,
DateTimeImmutable $claimedTime,
): ValidationReport
public function validateWithLongTermData(
string $signedData,
string $signature,
array $dssData,
): ValidationReport
public function validateArchivalTimestampChain(
string $pdfBytes,
array $dssData = [],
?TrustAnchorStoreInterface $anchors = null,
): ValidationReport
public function validate(
array $chain,
?DateTimeImmutable $validationTime = null,
array $initialPolicies = [],
): PathValidationResult;
public function validateWithAiaChasing(
array $chain,
?DateTimeImmutable $validationTime = null,
): PathValidationResult;
public static function withDefaults(
?ClockInterface $clock = null,
?AiaChaser $aiaChaser = null,
?LoggerInterface $logger = null,
): self
public function containsFingerprint(string $anchorDerSha256Hex): bool;
public function extract(string $signedData, string $signature): ExtractedSignatureData;
public function scan(string $pdfBytes): array
public function validate(array $inputs): BatchValidationReport

تعدادات المؤشّرات. حالات MainIndication: TOTAL_PASSED، TOTAL_FAILED، INDETERMINATE. القيم الداعمة تتبع النمط urn:etsi:019102:mainindication:total-passed (أحرف صغيرة، بشرطات). حالات SubIndication: HASH_FAILURE، SIG_CRYPTO_FAILURE، REVOKED، EXPIRED، NOT_YET_VALID، NO_POE، TRY_LATER، CERTIFICATE_CHAIN_GENERAL_FAILURE، FORMAT_FAILURE، REVOKED_CA_NO_POE، CRYPTO_CONSTRAINTS_FAILURE، POLICY_PROCESSING_FAILURE، REVOCATION_OUT_OF_BOUNDS_NO_POE، NO_SIGNING_CERTIFICATE_FOUND، TIMESTAMP_ORDER_FAILURE. كلٌّ منها مدعوم بـurn:etsi:019102:subindication:<CASE_NAME> باسم الحالة المضبوط.

  • تقارير داخلة، تقارير خارجة. نقاط الدخول الأربع للمحرّك تُعيد ValidationReport عند المدخلات العدائية بدلاً من الرمي. وSignatureExtractionException المُلتقَط يُوجَّه إلى مسار الحماية؛ وPathValidationException المُلتقَط يُطابَق إلى TOTAL_FAILED / CERTIFICATE_CHAIN_GENERAL_FAILURE.
  • ترتيب التحقق الأساسي. فحص التنسيق أولاً؛ والبنية غير القابلة للتحليل هي TOTAL_FAILED / FORMAT_FAILURE (⁨EN 319 102-1 §5.3.4⁩). ثم الملخّص (HASH_FAILURE) والتحقق التشفيري (SIG_CRYPTO_FAILURE)، بما يطابق نتائج اللبنات في ⁨EN 319 102-1 §5.2.7.4⁩. ويُعيد المُتحقِّق حسابَ الملخّص ويقارنه بسمة التوقيع messageDigest (⁨RFC 5652 §5.6⁩)؛ والملخّصات المقدَّمة من المُنتِج لا يُوثَق بها أبداً.
  • الخوارزميات الضعيفة تتدنّى. توقيعٌ يُتحقَّق منه بموجب ⁨SHA-1⁩، أو بربط ضعيف لشهادة التوقيع، يُعيد INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE، ولا يكون TOTAL_PASSED أبداً. ويُعيد مسار الوقت تأكيد ذلك حتى لا يُغسَل توقيعٌ ضعيف ليصبح تمريراً صالحاً زمنياً.
  • بوابة مصدر الإبطال. لا تُستشار أعلام الإبطال في المستخرِج إلا عندما يكون المستخرِج قد أجرى فعلاً فحصَ إبطال (revocationChecked صحيح). والافتراض غير المفحوص ليس «مُتحقَّقاً أنه غير مُبطَل» ولا مُطلِقاً لـREVOKED. ودليل الإبطال يُثبَت عبر مسار ⁨DSS⁩.
  • انتشار حالة عدم التمرير. مسارا الوقت وطويل الأمد لا يرفعان أبداً نتيجةً أساسية غير مُمرَّرة. يوجد استثناء واحد: INDETERMINATE / REVOKED الأساسي يُحسَم بمقارنته بـ$claimedTime؛ فالإبطال عند الوقت المُدّعى أو قبله هو TOTAL_FAILED / REVOKED. وهذا يعكس نمط ⁨EN 319 102-1 §5.3.4⁩ في حسم حالة غير محدّدة متعلقة بالإبطال بدليل زمني. وعندما يتعذّر إجراء المقارنة، يُنشَر التقرير الأساسي غير المحسوم حرفياً.
  • ربط صارم للطابع الزمني للتوقيع (مغلق عند الفشل؛ كسر توافق). عندما يحمل ⁨CMS⁩ سمةً غير موقَّعة id-aa-timeStampToken، يُطلِق وجودُها الإنفاذَ في مساري الوقت وطويل الأمد معاً؛ ولا يوجد وضع تحذير فقط. يجب أن تكون العدّية سمةً واحدة بالضبط بقيمة واحدة بالضبط (⁨EN 319 122-1 §5.3⁩)؛ وأي شكل آخر هو TOTAL_FAILED / FORMAT_FAILURE. يجب أن يُتحقَّق من الرمز تشفيرياً من طرف إلى طرف؛ ورمزٌ غير قابل للتحقق، أو تعارض فارقي في التحليل، أو عدم تطابق البصمة هو INDETERMINATE / TIMESTAMP_ORDER_FAILURE. وخوارزمية بصمة غير مدعومة أو ⁨SHA-1⁩ هي INDETERMINATE / CRYPTO_CONSTRAINTS_FAILURE. وقاعدة الربط هي ⁨RFC 3161 Appendix A⁩: يجب أن يساوي messageImprint الخاص بالرمز تجزئةَ بايتات قيمة signature في ⁨SignerInfo⁩، مع المقارنة في زمن ثابت.
  • بوابات المسار طويل الأمد. في المسار المُعلَّم بالبند ⁨5.4⁩، يتلقّى الطابع الزمني المربوط للتوقيع إضافةً إلى ذلك تقييمَ شهادة ⁨TSA⁩ عند genTime الخاص بالرمز؛ ومِرساةٌ غير موثوقة هي INDETERMINATE / CERTIFICATE_CHAIN_GENERAL_FAILURE، ولا تكون تمريراً أبداً. وNetworkPolicy::STRICT_OFFLINE مع مادة ⁨DSS⁩ مُضمَّنة غير كافية يُعيد INDETERMINATE / TRY_LATER. وكلٌّ من نتائج إثبات الوجود وإبطال ⁨DSS⁩ وسلسلة الأرشفة يقفز مباشرةً إلى INDETERMINATE بمؤشّر فرعي مُطابَق.
  • بوابات سلسلة الأرشفة. غياب أي ⁨DocTimeStamp⁩ هو INDETERMINATE / NO_POE. و⁨ByteRange⁩ غير مطابق بنيوياً هو TOTAL_FAILED / FORMAT_FAILURE. ويجب على كل رمز أن يُتحقَّق منه، وأن يربط بصمته بالبايتات المغطّاة بـ⁨ByteRange⁩ بالضبط، وأن يجتاز تخطيط أوجه ⁨TSA⁩ عند ⁨genTime⁩ (EXPIRED، NOT_YET_VALID، REVOKED_CA_NO_POE، CERTIFICATE_CHAIN_GENERAL_FAILURE، أو TRY_LATER تحت وضع عدم الاتصال الصارم). ويُنفَّذ الترتيب: genTime غير متناقص، وتغطية متقدّمة بصرامة، ورموز لاحقة تحتوي ثقب /Contents للرمز السابق. ويجب أن يغطّي الرمزُ الأحدث البايتَ الأخير؛ والبايتات المتأخِّرة هي TIMESTAMP_ORDER_FAILURE. وgenTime متقدّم بأكثر من 300 ثانية على ساعة المُتحقِّق هو TIMESTAMP_ORDER_FAILURE.
  • التشخيصات لا تُقرِّر أبداً. مُدخلات إثبات الوجود في DiagnosticData::$timestamps هي مسار تدقيق فقط. وهي لا تغيّر مؤشّراً أبداً، ويُعاد ضبط المُجمِّع عند كل نقطة دخول.
  • حدود ⁨Pki⁩ تسبق التشفير. حدود PathValidationOptions (عمق 32، تفرّع سياسات 64، 5 ثوانٍ و10 ⁨MiB⁩ لكل جلب) تُفحَص قبل العمل المكلِف. وPathValidationResult::$trustAnchorTrusted متمايز عن $valid؛ وrequireTrustedAnchor يجعل نهايةً غير مؤكَّدة غيرَ صحيحة. وstrict() يُفعّل requireExplicitPolicy، ونقل الإبطال بالفشل الصارم، وrequireTrustedAnchor. وصحة المسار نسبية إلى المِرساة وفق ⁨RFC 5280 §6.1⁩: المسار الصحيح يبدأ عند مِرساة ثقة مُقدَّمة كمدخل.
  • سطح الدفعات. BatchSignatureValidator::validate() يرمي InvalidArgumentException عند قائمة فارغة ويرفض الدفعات التي تتجاوز 1000 مستند عبر حارس موارد. و⁨PHP⁩ تمتلك كل التحقق التشفيري في ذلك خط الأنابيب.

الحالات الحدّية وأنماط الفشل

قسم بعنوان «الحالات الحدّية وأنماط الفشل»
  • المحرّك الافتراضي بلا مستخرِج. new AdESValidationEngine() يُجري فحوص حماية فقط: توقيع فارغ أو بيانات موقَّعة فارغة هو TOTAL_FAILED؛ وأي زوج غير فارغ يُحسَم إلى INDETERMINATE / NO_SIGNING_CERTIFICATE_FOUND، ولا يكون TOTAL_PASSED أبداً. احقن NextPDF\Enterprise\Security\Validation\CmsSignatureDataExtractor للحصول على التحقق التشفيري.
  • فحص ثقة ⁨TSA⁩ الافتراضي بلا مخزن. عندئذ تُبلّغ كل سلسلة ⁨TSA⁩ عن عدم الثقة، فتبقى نتائج الطابع الزمني للتوقيع الأرشيفية وطويلة الأمد INDETERMINATE. زوِّد المراسي عبر validateArchivalTimestampChain(..., $anchors) أو TsaCertificateAtGenTimeCheck مُهيّأ.
  • $pdfBytes فارغ. validateArchivalTimestampChain('') يُعيد TOTAL_FAILED / FORMAT_FAILURE.
  • الطوابع الزمنية للتوقيع السابقة للإصلاح لا يمكن أن تمرّ. الرموز التي أنتجتها إصدارات ⁨NextPDF⁩ قبل إصلاح الربط الصارم بصمت مدخلاً مختلفاً. وهي تفشل في ربط ⁨Appendix A⁩ بشكل دائم؛ أعد التوقيع وأعد الطبع الزمني لاستعادة نتيجة إيجابية. وهذا كسر توافق متعمَّد وموثَّق.
  • طوابع ⁨DocTimeStamp⁩ مكرّرة أو متداخلة. تكرارٌ في المراجعة نفسها، أو تغطية متساوية أو متداخلة، أو رمز لاحق لا يحتوي ثقب توقيع الرمز السابق، يفشل في بوابة الترتيب.
  • الماسح كلّي وعلى مستوى البايت. scan() يتخطّى المرشّحات المشوّهة أو المنتحَلة بصمت؛ و/ByteRange خادع داخل تدفّق محتوى مرفوض. وهو لا يحلّ الكائنات غير المباشرة ولا يجتاز جدول الإحالات المرجعية.
  • التغطية، لا القابلية للوصول. validateArchivalTimestampChain() يُثبت تغطيةً تشفيرية لنطاق البايتات حتى نهاية الملف. وتحليل القابلية للوصول على مستوى الكائن (مثلاً، جذر مستند مُعاد التوجيه داخل مراجعة مغطّاة) معلَن أنه خارج النطاق.
  • الاستخدام المباشر لـ⁨Pki⁩ يرمي. استدعاء تطبيقات PathValidatorInterface مباشرةً يُظهِر PathValidationException عند السلاسل غير الصحيحة بنيوياً، والحدود المتجاوَزة، وأشكال القيود غير المدعومة، وفشل تصدير ⁨PEM⁩ لمقبض OpenSSLCertificate. والمحرّك يلتقط هذا الصنف؛ أما مستدعوك أنت فعليهم معالجته.

يقبل جانبُ التحقق ⁨RSA PKCS#1 v1.5⁩ مع ⁨SHA-2⁩ و⁨ECDSA⁩ على ⁨P-256/P-384/P-521⁩. ورموز ⁨RSASSA-PSS⁩ و⁨EdDSA⁩ و⁨SHA-3⁩ تفشل مغلقةً بوصفها غير مدعومة؛ و⁨SHA-1⁩ يتدنّى إلى CRYPTO_CONSTRAINTS_FAILURE. وتحت ملف سياسة التشفير ⁨Enterprise FIPS 140-3⁩ (الموثَّق مع وحدة الأمان)، ينطبق القيد على أي الخوارزميات تُقبَل؛ أما تدفّق التحقق نفسه — إعادة حساب الملخّص، وفحوص التوقيع، والربط، والتحقق من المسار — فلا يتغيّر. ولا تملك ⁨NextPDF⁩ أي شهادة ⁨FIPS 140-3⁩ ولا تدّعي هذه الصفحة أياً منها.

الادّعاءالمعيارالبند
التحقق من التوقيع الأساسي لبنة قابلة لإعادة الاستخدام للتحقق بالطابع الزمني والتحقق المقترن بالوقت.ETSI EN 319 102-1§5.3.1
إخفاق السلامة يُطابَق إلى HASH_FAILURE؛ وفحص توقيع فاشل يُطابَق إلى SIG_CRYPTO_FAILURE.ETSI EN 319 102-1§5.2.7.4
فحص التنسيق يجري أولاً وعدم التمرير يوقف العملية.ETSI EN 319 102-1§5.3.4
حالة غير محدّدة متعلقة بالإبطال يمكن حسمها بدليل زمني.ETSI EN 319 102-1§5.3.4
مسار اعتماد صحيح يبدأ عند مِرساة ثقة مُقدَّمة كمدخل.RFC 5280§6.1
المُتحقِّق يُعيد حساب ملخّص المحتوى؛ ويجب أن يساوي سمة التوقيع messageDigest.RFC 5652§5.6
messageImprint الخاص بالطابع الزمني للتوقيع يُجزّئ قيمة الحقل signature في ⁨SignerInfo⁩.RFC 3161Appendix A
سمة signature-time-stamp تحمل AttributeValue واحداً بالضبط.ETSI EN 319 122-1§5.3

جميع البنود مُعاد صياغتها؛ ولا تُعيد ⁨NextPDF⁩ إنتاج النص المعياري. لا تُقدّم ⁨NextPDF⁩ أي ادّعاء مطابقة أو اعتماد لـ AdES / ⁨PAdES⁩. فدعم معيارٍ ما ليس مطابقةً له، والمطابقة ليست اعتماداً — ولا تملك ⁨NextPDF⁩ أي اعتماد ولا تمنح أياً منه. والمحرّك يُنفّذ إجراءات التحقق المذكورة كقدرة؛ وهو ليس خدمة تحقق مؤهَّلة أو معتمَدة، وتقرير TOTAL_PASSED بيانٌ تشفيري، لا حكمٌ قانوني. وقيم التعداد تعيد استخدام نمط معرّف ⁨URN⁩ الخاص بـ⁨ETSI⁩ من أجل قابلية تشغيل بيانات التقارير البينية؛ وذلك الاستخدام لا يؤكّد أي مصادقة.

  • تخطيط تسمية البنود. يُعلِّم مصدرُ الحزمة نقاطَ الدخول بوصفها بنود ⁨EN 319 102-1⁩ ⁨5.2⁩ و⁨5.3⁩ و5.4. ويضع مُدوَّن المطابقة عمليةَ التحقق من التوقيع الأساسي نفسها عند البند ⁨5.3⁩، مع اللبنة التشفيرية عند 5.2.7.4. وتستشهد هذه الصفحة بأرقام البنود المسترجعة؛ وعقد السلوك، لا التسمية، هو المرجع المعتمد.
  • اختبارات حتمية. كل مقارنة وقت تمرّ عبر ClockInterface المحقون وفق ⁨PSR-20⁩. احقن ساعةً مُجمَّدة لاختبار فحوص النافذة، وحدّ انحراف ⁨genTime⁩ البالغ 300 ثانية، وقرارات حداثة ⁨CRL⁩.
  • التركيب. جميع متعاوني المحرّك محقونون عبر المُنشئ واختياريون، بإعدادات افتراضية مغلقة عند الفشل. ومُتحقِّق المسار الافتراضي هو CertificateChainValidator::withDefaults() فوق ساعة المحرّك؛ والخيارات الافتراضية تُبقي معالجة السياسة وقيود الأسماء بلا أثر للمدخلات المطابِقة غير المقيَّدة.
  • مساحات الأسماء. سطح المحرّك يوجد في NextPDF\Enterprise\Security\Validation، وسطح التحقق من المسار في NextPDF\Enterprise\Security\Pki، ومنسِّق الدفعات في NextPDF\Enterprise\Signature.
  • نظافة التقارير. التقارير غير قابلة للتغيير وقابلة للتسلسل عبر toArray(). ويُعاد ضبط السياق التشخيصي عند كل نقطة دخول، فلا يحمل تقريرٌ أبداً أدلةً من تشغيل سابق على نسخة المحرّك نفسها.

توثّق هذه الصفحة السلوكَ القابل للملاحظة خارجياً وسطحَ واجهة برمجة التطبيقات العامة المدعوم فقط. أما مسارات مساحات الأسماء الداخلية، وأصناف المساعدة، وجداول الآليات، وأسماء ملفات كتيّبات التشغيل، وبادئات التذاكر، فخارج النطاق.