公鑰加密文件的重新載入
以公鑰 security handler 加密的文件(/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 旗標選擇退出加密