|
THotPDF.SignPDFWithPFX
|
Anterior Métodos AddPubKeyRecipient |
|
Firma un marcador de posición PDF existente usando un archivo PFX / PKCS#12, construye un contenedor CMS SignedData y escribe el PDF firmado en una sola llamada
Sintaxis Delphi (sobrecarga de archivo): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Sintaxis Delphi (sobrecarga de flujo): class function SignPDFWithPFX( InputStream: TStream; OutputStream: TStream; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Descripción SignPDFWithPFX es el punto de entrada de firma PFX de extremo a extremo agregado en v2.119.27. El PDF de entrada ya debe contener un marcador de posición de firma emitido por THPDFPage.AddSignedSignatureField (o su contenedor PAdES) con subFilter
1. Carga el PDF de entrada, localiza los marcadores de posición centinela /ByteRange + /Contents y actualiza /ByteRange con los desplazamientos de bytes reales 2. Carga el archivo PFX y lo descifra con la contraseña suministrada. Se admite PBES2 con PBKDF2-HMAC-SHA-256 + AES-256-CBC, que es el valor predeterminado de los archivos PFX exportados por OpenSSL 3.0+, certutil de Windows 11+ y Keychain Access de macOS. Los archivos heredados PBE-SHA1-3DES generan un diagnóstico; vuélvelos a exportar con 3. Empareja claves privadas RSA, ECDSA de curva con nombre, Ed25519 o Ed448 con certificados por material de clave pública y valores 4. Selecciona el esquema de firma a partir de la clave emparejada, calcula el resumen del documento requerido y construye un blob DER CMS SignedData (RFC 5652) que contiene el certificado del firmante, su cadena correspondiente sin certificados DER duplicados y los atributos firmados. RSA y ECDSA firman el resumen de atributos; Ed25519 y Ed448 firman el 4. Codifica el DER de CMS en hexadecimal, verifica que quepa en el presupuesto de /Contents reservado por AddSignedSignatureField (el valor predeterminado de 8 KB cubre RSA de 1024 / 2048 bits) y lo inyecta en el marcador de posición 5. Escribe los bytes corregidos en la ruta o el flujo de salida
Devuelve True si tiene éxito. Lanza
Flujo de trabajo típico
Doc := THotPDF.Create(nil); Doc.FileName := 'unsigned.pdf'; Doc.BeginDoc; Doc.CurrentPage.AddSignedSignatureField( 'Sig1', Rect(60, 60, 260, 90), 8192, 'adbe.pkcs7.detached', 'Approved', 'Brussels', '', []); Doc.EndDoc; Doc.Free; THotPDF.SignPDFWithPFX('unsigned.pdf', 'signed.pdf', 'mykey.pfx', 'mypassword');
Notas The convenience overload intentionally rejects a PFX that contains more than one matching certificate and private key. Call For end-to-end signing, initialise
Notas RSA and ECDSA PFX signing use the native HotPDF and Windows cryptography paths. Ed25519 and Ed448 PFX signing require OpenSSL 3 El algoritmo de firma es RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). El identificador del firmante es el IssuerAndSerialNumber extraído del certificado X.509. El encapContentInfo es detached (eContent omitido). Los atributos firmados se ordenan por cadena de bytes DER ascendente según la sección 5.4 de RFC 5652 antes de hashearse
Para flujos de trabajo PAdES B-T / B-LT / B-LTA que necesitan marcas de tiempo RFC 3161, diccionarios DSS o firmas de marca de tiempo de documento, siguen aplicando los ayudantes del lado del productor (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature); SignPDFWithPFX por sí mismo emite una firma básica solo CMS, equivalente a PAdES-B-B
Ver también: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |