原生 Linux ABI 時間戳傳輸

原生 Linux 簽署工作透過延伸的操作記錄支援實際的 RFC 3161 時間戳傳輸;原有的 ABI 版本、操作前綴、匯出函式與一般操作記錄大小維持不變

typedef hpdf_status (HPDF_CDECL *hpdf_timestamp_transport_v1)(
    void *user_data, const void *request, size_t request_length,
    const hpdf_io_v1 *response_io);

typedef struct hpdf_signing_operation_v1 {
    hpdf_operation_v1 operation;
    void *timestamp_user_data;
    hpdf_timestamp_transport_v1 timestamp_transport;
} hpdf_signing_operation_v1;

記錄與 JSON 設定

先初始化原有的操作欄位,並把 operation.struct_size 設為 sizeof(hpdf_signing_operation_v1);以 schemaVersion 1 的 sign 工作搭配 timestamp: true,把 &record.operation 傳給 hpdf_document_execute_json_v1

在原生 Linux x86-64 上,延伸部分為 72 位元組;原有的 hpdf_operation_v1 仍是 56 位元組,hpdf_abi_operation_v1_size 也持續回報那個原始大小

timestampTrustedCAFile 提供 TSA 信任根;選填的 timestampTrustedCRLFile 與 requireTimestampRevocation 可啟用明確的撤銷驗證

callback 收到實際的 DER 時間戳請求,包含簽章 imprint 與產生的 nonce;透過提供的寫入 callback 回傳實際的 DER 回應位元組,並回傳 ABI 狀態

所有權與取消

傳輸在呼叫執行緒上同步執行;請求位元組、回應 callback 表與回應使用者資料只在傳輸返回之前借用

傳輸進行中輪詢 response_io->is_cancelled、認真看待回應寫入失敗,並在應用程式 callback 內強制網路或子程序的期限

maxTimestampResponseBytes 預設為 4194304 位元組與操作工作預算八分之一兩者較小者;設定的上限必須為正,且不得超過該工作預算比例

即使應用程式 callback 之後回傳成功,程式庫仍視失敗或取消的回應寫入為失敗;時間戳失敗會保留未簽署的已載入 context,且不發布任何簽署輸出

驗證與結果

原生實作會在加入 signatureTimeStampToken 屬性並發布簽章之前,驗證回應狀態、簽章 imprint、nonce、TSA 憑證用途、憑證鏈與要求的撤銷政策

簽署結果包含 timestampCount、timestampValid 與 timestampTrustEvaluated;signatures.verify 接受 requireTimestamp 與同樣明確的 TSA 信任/撤銷選項

驗收

兩個原生 Linux 編譯器各自通過 319 項真實 ctypes 斷言、39 項實際的 C 時間戳用戶端斷言、33 項既有 C ABI 斷言與 296 項獨立輸出檢查

獨立的 OpenSSL 驗證會驗證 CMS 簽章與內嵌時間戳 token、拒絕被改動的簽章 imprint 與被撤銷的 TSA 憑證,並驗證帶時間戳的明文與 AES-256 R5/R6 文件

原生簽署工作 · 原生 C ABI · Pascal 時間戳傳輸