function ValidatePades: TPadesValidationResult;
Analizează dicționarele de semnătură încorporate din octeții originali încărcați, le verifică structura pentru conformitatea de bază PAdES și ține decalajele semnăturilor separate de vizualizarea extinsă a object-stream folosită pentru căutarea în catalog și în DSS
Intrările obligatorii de semnătură sunt numărate doar la nivelul dicționarului de sus, astfel încât cheile duplicate Contents, ByteRange, SubFilter, Filter sau Type nu pot fi ascunse prin valorile selectate de parser, în timp ce cheile cu același nume din dicționarele și vectorii imbricați rămân independente
Descoperirea semnăturilor folosește o scanare lexicală liniară care săree corpurile de flux, șirurile, valorile hexazecimale și comentariile, decodează secvențele de escape #xx din nume și rămâne independentă de faptul dacă un dicționar imbricat apare înaintea sau după intrările semnăturii
Golul exclus /ByteRange trebuie să fie egal cu tokenul hexazecimal direct complet /Contents, inclusiv delimitatorii săi, iar fiecare revizie acoperită trebuie să se încheie la o graniță completă de revizie PDF
Pe Windows, semnăturile CMS obișnuite detașate sunt verificate direct împotriva celor două segmente /ByteRange originale, inclusiv atributele CMS semnate, valoarea criptografică a semnăturii și legarea SHA-256 signing-certificate-v2
Fiecare semnatar primește, de asemenea, un profil de algoritm analizat din identificatorii CMS și X.509, cu verificări ISO/TS 32002 pentru curbele NIST și Brainpool acceptate, Ed25519, Ed448, congruența digestului, parametrii curbelor numite și lungimea de ieșire SHAKE256
Active să fie TrueTPadesValidationResult care detaliază nivelul de conformitate PAdES atins (B-B, B-T, B-LT, B-LTA) și o mulțime a problemelor de validare detectateSourceStatus este pvssOriginalBytes când au fost inspectate fișierul original, memoria tampon sau fluxul personalizat, pvssIncomplete pentru o sursă progresivă neterminată și pvssUnavailable când octeții originali nu au fost reținuțiIsCompliant și IsCompliantAt returnează False dacă SourceStatus nu este pvssOriginalBytesIntegrityStatus agregă integritatea semnăturilor obișnuite, în timp ce Signatures raportează separat fiecare stare ByteRange, semnătură CMS, politică de algoritmi, legare certificat-semnatar, încredere de sistem, revocare și timestampAlgorithmInfo expune OID-urile de digest, de semnătură, de cheie publică și de curbă numită, în timp ce AlgorithmPolicyStatus distinge între un profil valid, o combinație malformată, o curbă sau un algoritm nesuportat și o dovadă de certificat indisponibilăid-shake256-len de 512 bițippeiSignatureAlgorithmMismatch este ridicată când o curbă, un digest, un OID de semnătură sau o combinație de parametri obligatorii recunoscută nu concordăIsCryptographicallyValid returnează True doar când octeții originali au fost disponibili, când a fost găsită cel puțin o semnătură obișnuită și când fiecare semnătură obișnuită verificată a trecut de verificarea CMS detașat și a legării certificatului de semnatarCertificateTrustStatus folosește o evaluare de încredere a sistemului Windows doar din cache; RevocationStatus și TimeStampStatus rămân pcsNotChecked sau pcsUnsupported până când acele verificări independente sunt efectuate%%EOF; reviziile incrementale ulterioare de DSS, timestamp sau semnătură nu fac ca acel interval anterior să devină structural invalidFilter trebuie să apară exact o dată și să aibă o valoare de nume; un Type opțional de semnătură obișnuită trebuie să fie Sig, în timp ce un Document Time-stamp cere exact un Type /DocTimeStamp și SubFilter /ETSI.RFC3161Contents indirectă sau nehexazecimală, octeții excluși în plus sau valorile inconsistente de tip de semnătură și de subfilter împiedică promovarea la PAdES B-BplUnknown; plNone este rezervat documentelor în care nu a fost detectat niciun dicționar de semnăturăpcsUnsupported în loc să fie inferate din verificările structurale
var
Res: TPadesValidationResult;
begin
if not Pdf1.Active then Exit;
Res := Pdf1.ValidatePades;
if Res.IsCryptographicallyValid then
ShowMessage('PAdES signature integrity passed');
end;