Windows Signing Timestamps

Windows sign 操作可以通过同步应用回调请求真实的 RFC3161 时间戳,并在认证响应之后才发布 PDF

签名选项

{"schemaVersion":1,"type":"sign","incremental":true,
 "existingField":true,"fieldName":"ApprovalOne",
 "pfxFile":"C:/keys/signer.pfx","pfxPassword":"password",
 "cades":true,"digestMethod":"SHA384","timestamp":true,
 "timestampURL":"https://tsa.example/service",
 "timestampTrustedCAFile":"C:/trust/tsa-roots.pem",
 "timestampTrustedCRLFile":"C:/trust/tsa-crls.pem",
 "requireTimestampRevocation":true}

timestamp 默认 false;设为 true 要求应用传输回调和包含可信 PEM 证书根的显式 timestampTrustedCAFile

digestMethod 从 SHA256、SHA384 或 SHA512 中选择实际文档 CMS 摘要与时间戳 imprint 算法;messageImprint 对实际 CMS 签名字节只哈希一次

timestampTrustedCRLFile 可选提供 PEM CRL;requireTimestampRevocation 要求该文件并启用签发者与证书 CRL 检查,包括已吊销证书和过期证据

信任输入文件在签名期间保持打开并拒绝写共享,合并大小在 OpenSSL 加载前限制为 memoryBytes 的八分之一

每个请求包含新鲜密码学 nonce 并请求 TSA 证书;响应验证认证请求 nonce、imprint、完整 CMS 签名、ESS 签名证书绑定、证书链和关键时间戳 EKU

C ABI 传输

把 hpdf_signing_operation_v1 传给 hpdf_document_execute_json_v1,将 operation.struct_size 设为 sizeof(hpdf_signing_operation_v1),并提供 timestamp_transport 和 timestamp_user_data

操作前缀保留既有 hpdf_operation_v1 布局与 ABI 版本;普通操作继续使用原结构

回调接收完整 DER TimeStampReq 和借用的 response_io;通过 response_io.write 写出完整 DER TimeStampResp 并返回 hpdf_status

回调在调用线程上运行,请求与响应 IO 指针只在此次调用内有效;网络传输、认证、超时和连接策略由应用负责

response_io.is_cancelled 轮询操作的输入、输出和结果取消回调;响应写入强制 16 MiB 上限,并在复制回调内存前另以 memoryBytes 八分之一封顶

响应写入或取消失败对该操作保持有效,即使回调随后返回成功;失败的响应无法发布 PDF 字节

Pascal 服务入口

THPDFJobProcessor.ExecuteLoadedSigningOperation 接受已加载文档、操作 JSON 对象、输出流、checkpoint、THPDFHeadlessTimestampTransport 回调和不透明回调上下文

Pascal 传输接收请求 DER 并返回响应 DER;嵌套同步签名在内部操作返回时恢复外层回调上下文

种子值与来源

必需的 SV TimeStamp 约束由真实经认证的响应满足;必需 TimeStamp 字典指定 URL 时,timestampURL 必须与该值一致

timestampURL 是应用断言的传输来源;比较声明 URL 不建立 HTTPS 服务器身份,应用必须自行认证其选定端点

没有应用回调的独立文件任务无法执行时间戳请求;仅有 URL 字符串不能满足必需时间戳

参见 incremental PFX signing 与 native RFC3161 verification