function ValidatePades: TPadesValidationResult;
Анализира вградените подписващи речници от оригиналните заредени байтове, проверява структурата им за съответствие с PAdES baseline и държи офсетите на подписите отделно от разширения object-stream изглед, използван за справка в каталога и DSS
Задължителните записи на подписа се броят само на най-горното ниво на речника, така че дублирани ключове Contents, ByteRange, SubFilter, Filter или Type не могат да бъдат скрити от избрани от парсера стойности, докато едноименни ключове във вложени речници и масиви остават независими
Откриването на подписи използва линеално лексикално сканиране, което прескача телата на потоци, низове, шестнадесетични стойности и коментари, декодира name екейпванията #xx и не зависи от това дали вложен речник се появява преди или след записите на подписа
Изключваният интервал на /ByteRange трябва да съвпада с пълния директен шестнадесетичен токен /Contents, включително разделителите му, а всяко покрито издание трябва да завършва на пълна граница на PDF ревизия
На Windows обикновените detached CMS подписи се проверяват директно срещу двата оригинални сегмента на /ByteRange, включително CMS signed атрибутите, криптографската стойност на подписа и обвързването SHA-256 signing-certificate-v2
Всеки подписващ получава и профил на алгоритмите, анализиран от CMS и X.509 идентификатори, с проверки по ISO/TS 32002 за поддържаните NIST и Brainpool криви, Ed25519, Ed448, съответствие на digest стойностите, параметри на именувани криви и дължина на изхода на SHAKE256
Active да е TrueTPadesValidationResult с подробности за достигнатото ниво на PAdES съответствие (B-B, B-T, B-LT, B-LTA) и множество на откритите проблеми при валидиранеSourceStatus е pvssOriginalBytes, когато е проверен оригиналният файл, буферираната памет или персонален поток, pvssIncomplete за незавършен прогресивен източник и pvssUnavailable, когато оригиналните байтове не са запазениIsCompliant и IsCompliantAt връщат False, освен когато SourceStatus е pvssOriginalBytesIntegrityStatus обобщава целостта на обикновените подписи, докато Signatures докладва поотделно всеки ByteRange, CMS подпис, политика за алгоритми, обвързване на сертификата на подписващия, системно доверие, анулиране и timestamp състояниеAlgorithmInfo разкрива OID-ите на digest, подпис, публичен ключ и именувана крива, докато AlgorithmPolicyStatus различава валиден профил, неправилно оформена комбинация, неподдържана крива или алгоритъм и липсващи сертификатни данниid-shake256-lenppeiSignatureAlgorithmMismatch се вдига, когато разпозната крива, digest, OID на подпис или задължителна параметърна комбинация не съответстватIsCryptographicallyValid връща True само когато оригиналните байтове са били налични, е намерен поне един обикновен подпис и всеки проверен обикновен подпис е минал проверка на detached CMS и на обвързването на сертификата на подписващияCertificateTrustStatus използва оценка на системното доверие на Windows само от кеша; RevocationStatus и TimeStampStatus остават pcsNotChecked или pcsUnsupported, докато не бъдат извършени тези независими проверки%%EOF; по-късни инкрементални DSS, timestamp или подписващи ревизии не правят този по-ранен диапазон структурно невалиденFilter трябва да се среща точно веднъж и да има стойност-име; незадължителният Type на обикновен подпис трябва да е Sig, докато Document Time-stamp изисква точно един Type /DocTimeStamp и SubFilter /ETSI.RFC3161Contents, допълнителни изключени байтове или несъответстващи стойности на типа подпис и 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;