Recarga de documentos cifrados con clave pública

Los documentos cifrados con el security handler de clave pública (/Filter /Adobe.PPKLite o /Adobe.PubSec, /SubFilter adbe.pkcs7.s4/s5) ahora se cargan cuando el llamador suministra la clave privada del destinatario

Material de clave

Asigne THotPDF.PubSecKeyMaterial (un THPDFPFXKeyMaterial proveniente de HPDFParsePFX) antes de llamar a LoadFromFile. Durante el prescan de rango acotado se recupera la clave del archivo: cada envoltorio /Recipients se desenvuelve con la clave privada RSA-OAEP (seed y permisos recuperados del CMS EnvelopedData), y la clave del archivo se re-deriva exactamente como lo hace el escritor - SHA-256 de la seed más los envoltorios para AES-256, SHA-1 para las longitudes de clave heredadas

Selección de destinatario

PubSecRecipientQuery (un reference to function(Context: Pointer; RecipientCount: Integer): Integer) selecciona qué índice de envoltorio desenvuelve la clave suministrada; sin callback se prueba con cada destinatario hasta que uno se desenvuelva. PubSecRecipientQueryContext transporta el estado del llamador

Correcciones del escritor

El round-trip expuso tres defectos del escritor, todos corregidos: los envoltorios de destinatarios se corrompían por un round-trip de cadenas binarias a través de Unicode, el digest de la clave del archivo hasheaba los bytes del envoltorio con un desfase de un byte, y las cadenas /Recipients se cifraban como cadenas ordinarias (todo visor las necesita en texto plano); ahora los envoltorios se excluyen mediante una marca explícita SkipEncryption en el objeto de cadena