|
THotPDF.SignPDFWithPFX
|
Précédent Méthodes AddPubKeyRecipient |
|
Signe un emplacement PDF existant à l'aide d'un fichier PFX / PKCS#12, construit un conteneur CMS SignedData et écrit le PDF signé en un seul appel
Delphi syntax (file overload): class function SignPDFWithPFX( const InputPDFPath: string; const OutputPDFPath: string; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Delphi syntax (stream overload): class function SignPDFWithPFX( InputStream: TStream; OutputStream: TStream; const PFXFilePath: string; const Password: AnsiString): boolean; overload; static;
Description SignPDFWithPFX est le point d'entrée de signature PFX de bout en bout ajouté en v2.119.27. Le PDF d'entrée doit déjà contenir un emplacement de signature émis par THPDFPage.AddSignedSignatureField (ou son wrapper PAdES) avec subFilter
1. Charge le PDF d'entrée, localise les emplacements sentinelles /ByteRange + /Sommaire et corrige /ByteRange avec les offsets d'octets réels 2. Charge le fichier PFX et le déchiffre avec le mot de passe fourni. PBES2 avec PBKDF2-HMAC-SHA-256 + AES-256-CBC est pris en charge (c'est le comportement par défaut des fichiers PFX exportés par OpenSSL 3.0+, certutil de Windows 11+ et macOS Keychain Access). Les fichiers hérités PBE-SHA1-3DES déclenchent un diagnostic; réexportez-les avec 3. Calcule SHA-256 sur les octets du document couverts par /ByteRange et construit un blob DER CMS SignedData (RFC 5652) contenant le certificat X.509, les attributs signés (contentType + messageDigest + signingTime) et une signature RSA + SHA-256 sur les attributs signés marqués SET 4. Encode le CMS DER en hexadécimal, vérifie qu'il tient dans le budget /Sommaire réservé par AddSignedSignatureField (8 KB par défaut couvrent RSA 1024 / 2048 bits) et l'injecte dans l'emplacement 5. Écrit les octets corrigés dans le chemin ou le flux de sortie
Renvoie True en cas de succès. Lève
Workflow type
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');
Notes L'algorithme de signature est RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). L'identifiant du signataire est IssuerAndSerialNumber extrait du certificat X.509. encapContentInfo est détaché (eContent omis). Les attributs signés sont triés par ordre croissant des octets DER selon RFC 5652 §5.4 avant le hachage
Pour les flux de travail PAdES B-T / B-LT / B-LTA qui ont besoin d'horodatages RFC 3161, de dictionnaires DSS ou de signatures d'horodatage de document, les helpers côté producteur (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) restent applicables; SignPDFWithPFX émet lui-même une signature CMS de base, équivalente à PAdES-B-B
Voir aussi: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |