Native 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);把 &record.operation 连同 schemaVersion 1 的 sign 任务与 timestamp: true 传给 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 状态

所有权与取消

transport 在调用线程上同步运行;请求字节、响应 Callback 表与响应 user data 只借用到 transport 返回为止

transport 工作期间轮询 response_io->is_cancelled,尊重响应写失败,并在应用 Callback 中执行网络或子进程截止时间

maxTimestampResponseBytes 默认取 4194304 字节与操作工作预算八分之一中的较小者;配置的限制必须为正且不得超过该工作预算比例

即使应用 Callback 之后返回成功,库也保留失败或已取消的响应写;时间戳失败保留未签名的已加载上下文,不发布任何签名输出

校验与结果

原生实现在添加 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 文档

原生签名任务 · Native C ABI · Pascal 时间戳传输