公钥加密文档重新加载
使用公钥安全处理程序(/Filter /Adobe.PPKLite 或 /Adobe.PubSec、/SubFilter adbe.pkcs7.s4/s5)加密的文档现在在调用方提供接收方私钥时加载
密钥材料
在调用 LoadFromFile 之前分配 THotPDF.PubSecKeyMaterial(来自 HPDFParsePFX 的 THPDFPFXKeyMaterial)。在有界范围预扫描期间恢复文件密钥:每个 /Recipients 信封用 RSA-OAEP 私钥解开(从 CMS EnvelopedData 恢复种子和权限),文件密钥与写入方完全一样重新派生——AES-256 为种子加信封的 SHA-256,旧密钥长度为 SHA-1
接收方选择
PubSecRecipientQuery(reference to function(Context: Pointer; RecipientCount: Integer): Integer)选择提供的密钥解开的信封索引;没有回调时尝试每个接收方直到一个解开。PubSecRecipientQueryContext 携带调用方状态
写入方修复
往返暴露了三个写入方缺陷,全部已修复:接收方信封被二进制到 Unicode 字符串往返破坏,文件密钥摘要以单字节偏移哈希信封字节,/Recipients 字符串像普通字符串一样加密(每个查看器都需要它们为明文);信封现在通过字符串对象上的显式 SkipEncryption 标志选择退出