原生 Linux 簽署工作流程
具版本編號的 callback ABI 會針對已載入文件或明確的輸入 callback 執行 schemaVersion 1 的 sign 工作;原始來源修訂、文件 ID 與已驗證的 AES-256 R5/R6 政策都會保留
簽署身分
提供 certificatePEM 與 privateKeyPEM,或提供經 canonical padding 的 pfxBase64 與 pfxPassword;混用這兩種身分形式視為無效
password 用來驗證明確指定的 PDF 輸入;已載入的 context 保留自己的 PDF 密碼,另一組 PFX 密碼則用來驗證簽署容器
PFX 解碼會在 OpenSSL 解析受限容器之前檢查字母集、padding 與未用位元;私人身分緩衝區會在操作完成後清空
簽署欄位與外觀
field 選擇既有的未簽署簽名欄位;設定 createField: true 可在零基的 page 上建立新的完整限定欄位名稱
新欄位座標採用 PDF user space:left、bottom、right、top 預設為 36、36、240、108;既有名稱無法重複建立
選用的 caption 會產生明確的 Unicode 外觀,內嵌 TrueType 字型、ToUnicode 對應與原生 complex-script shaping;fontFamily 預設為 DejaVu Sans,fontSize 預設為 12
設定檔與認證
cades 選擇 ETSI.CAdES.detached;trustedCAFile 為簽署時的信任驗證提供明確的 CA 政策,reservedCMSBytes 預設為 16384
certificationPermission 為 0 表示 approval signature,1、2 或 3 表示首份文件認證簽署;寫入器會建立對應的 DocMDP transform 與 catalog 權限綁定
使用者密碼的權限限制、唯讀欄位、既有簽章與認證約束,仍由原生文件簽署政策強制執行
交易式發布
可攜的 Pascal TimestampToFile API 會在 PDF ByteRange 上以 ETSI.RFC3161 建立獨立的 DocTimeStamp,包含 ESIC 宣告、明確的 TSA 信任與 CRL 政策,以及已驗證的 DocMDP/FieldMDP 時間戳例外
這個文件時間戳進入點是 Pascal API;下方的 ABI 時間戳 callback 則為既有的簽署工作提供簽章時間戳
延伸的 ABI 時間戳傳輸透過同步、由呼叫端持有的 callback 提供實際的 RFC 3161 回應,具備有界的回應位元組、共用的取消機制與明確的 TSA 信任/撤銷政策
輸出與結果 callback 收到的是已完整準備好的簽章;在 callback 發布之前,ABI 會重新載入候選結果,驗證簽署後的文件 context
只有成功發布才會替換已載入的 context;無效的身分、欄位建立、預算、取消或 callback 失敗,都會保留前一個文件與其欄位樹
輸出 callback 由呼叫端持有,後續 callback 失敗時位元組可能已被消費;需要外部 rollback 的呼叫端必須自行暫存那些位元組
驗收
Linux FPC 3.2.2 與 3.3.1 各自通過 270 項真實 ctypes 斷言、228 項獨立的 PDF/影像/安全性/CMS 檢查、33 項 C ABI 斷言與 80 項並行 shared-handle 操作
獨立檢查會驗證 AES ID/安全性政策、以 OpenSSL 驗證 CMS 與 CAdES、拒絕被竄改的內容、檢查 certification transform 與內嵌的外觀字型,並驗證實際的可見簽章像素