function ValidatePades: TPadesValidationResult;
從原始載入的位元組剖析內嵌簽章字典,檢查其結構是否符合 PAdES baseline,並將簽章位移與用於目錄與 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;未保留原始位元組時為 pvssUnavailableSourceStatus 為 pvssOriginalBytes,否則 IsCompliant 與 IsCompliantAt 傳回 FalseIntegrityStatus 彙總一般簽章的完整性,而 Signatures 分別回報每個 ByteRange、CMS 簽章、演算法政策、簽署者憑證繫結、系統信任、撤銷與時間戳記狀態AlgorithmInfo 公開摘要、簽章、公鑰與具名曲線 OID,而 AlgorithmPolicyStatus 會區分有效的設定檔、畸形的組合、不支援的曲線或演算法,以及無法取得的憑證證據id-shake256-lenppeiSignatureAlgorithmMismatchIsCryptographicallyValid 才傳回 TrueCertificateTrustStatus 使用僅限快取的 Windows 系統信任評估;在執行那些獨立檢查之前,RevocationStatus 與 TimeStampStatus 維持 pcsNotChecked 或 pcsUnsupported%%EOF 結尾的較早完整修訂版;後續的漸進式 DSS、時間戳記或簽章修訂版不會使較早的範圍在結構上失效Filter 必須恰好出現一次且帶有名稱值;選用的一般簽章 Type 必須是 Sig,而文件時間戳記則需要恰好一個 Type /DocTimeStamp 與 SubFilter /ETSI.RFC3161Contents 值、額外的排除位元組,或不一致的簽章型別與子篩選器值,都會阻止晉升至 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;