function ValidatePades: TPadesValidationResult;
تحلل قواميس التوقيع المضمَّنة من البايتات المحمَّلة الأصلية، وتتحقق من بنيتها للامتثال الأساسي لـ PAdES، وتبقي إزاحات التوقيع منفصلة عن عرض object-stream الموسَّع المستخدم للبحث في الكتالوج و DSS
تُعدّ مدخلات التوقيع المطلوبة عند مستوى القاموس الأعلى فقط، فلا يمكن إخفاء مفاتيح Contents أو ByteRange أو SubFilter أو Filter أو Type المكررة خلف قيم يختارها المحلل، بينما تبقى المفاتيح المتجانسة الأسماء في القواميس والمصفوفات المتداخلة مستقلة
يكتشف التوقيعات بمسح معجمي خطي يتخطى أجسام التيارات والسلاسل والقيم السداسية والتعليقات، ويفك تسلسلات الهروب #xx في الأسماء، ويبقى غير متأثر بظهور قاموس متداخل قبل مدخلات التوقيع أو بعدها
يجب أن يساوي فراغ /ByteRange المستبعد رمز /Contents السداسي المباشر كاملًا بما في ذلك محدِّداه، وأن تنتهي كل مراجعة مغطاة عند حد مراجعة PDF كامل
على Windows، يُتحقق من توقيعات CMS المنفصلة العادية مباشرةً مقابل مقطعي /ByteRange الأصليين، بما في ذلك سمات CMS الموقَّعة وقيمة التوقيع التعمية وربط SHA-256 signing-certificate-v2
يتلقى كل موقِّع أيضًا ملفًا خوارزميًا محللًا من معرفات CMS و X.509، مع فحوصات ISO/TS 32002 للمنحنيات المدعومة من NIST و Brainpool و Ed25519 و Ed448، وتطابق الملخص، ومعاملات المنحنى المسمَّى، وطول مخرجات SHAKE256
Active أن يكون TrueTPadesValidationResult يفصِّل مستوى امتثال PAdES الذي بلغه (B-B، B-T، B-LT، B-LTA) ومجموعة أي مشكلات تحقق مكتشفةSourceStatus هو pvssOriginalBytes عندما فُحص الملف الأصلي أو الذاكرة المخزنة أو التيار المخصص، و pvssIncomplete لمصدر تقدمي غير منتهٍ، و pvssUnavailable عندما لم تُحتفظ بالبايتات الأصليةIsCompliant و IsCompliantAt القيمة False ما لم يكن SourceStatus هو pvssOriginalBytesIntegrityStatus سلامة التوقيع العادية، بينما يُبلِّغ Signatures عن كل ByteRange وتوقيع CMS وسياسة الخوارزمية وربط شهادة الموقِّع وثقة النظام والإبطال وحالة الطابع الزمني على حدةAlgorithmInfo معرفات OID للملخص والتوقيع والمفتاح العام والمنحنى المسمَّى، بينما يميّز AlgorithmPolicyStatus ملفًا تعريفيًا صالحًا من تركيبة تالفة ومنحنى أو خوارزمية غير مدعومة وأدلة شهادة غير متاحةid-shake256-len بطول مخرجات 512 بتppeiSignatureAlgorithmMismatch عندما يتعارض منحنى معترف به أو ملخص أو OID توقيع أو تركيبة معاملات مطلوبةIsCryptographicallyValid القيمة True فقط عندما كانت البايتات الأصلية متاحة، وعُثر على توقيع عادي واحد على الأقل، واجتاز كل توقيع عادي مفحوص التحقق من CMS المنفصل وربط شهادة الموقِّعCertificateTrustStatus على تقييم ثقة نظام Windows من ذاكرة التخزين المؤقت فقط؛ وتبقى RevocationStatus و TimeStampStatus عند pcsNotChecked أو pcsUnsupported حتى تُنفَّذ تلك الفحوصات المستقلة%%EOF؛ ولا تجعل مراجعات DSS أو الطوابع الزمنية أو التوقيعات التزايدية اللاحقة ذلك المدى السابق غير صالح بنيويًاFilter مرة واحدة بالضبط وله قيمة اسم؛ ونوع التوقيع العادي الاختياري Type يجب أن يكون Sig، بينما يتطلب Document Time-stamp وجود Type /DocTimeStamp و SubFilter /ETSI.RFC3161 بالضبطContents غير المباشرة أو غير السداسية، أو البايتات المستبعدة الزائدة، أو قيم نوع التوقيع والـ subfilter غير المتسقة الترقية إلى PAdES B-BplUnknown؛ أما plNone فمحجوز للمستندات التي لم يُكتشف فيها قاموس توقيعpcsUnsupported بدل استنتاجها من الفحوصات البنيوية
var
Res: TPadesValidationResult;
begin
if not Pdf1.Active then Exit;
Res := Pdf1.ValidatePades;
if Res.IsCryptographicallyValid then
ShowMessage('PAdES signature integrity passed');
end;