|
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. Associe des clés privées RSA, ECDSA à courbe nommée, Ed25519 ou Ed448 à des certificats par matériel de clé publique et valeurs 4. Sélectionne le schéma de signature selon la clé appariée, calcule le condensé de document requis, et construit un blob DER CMS SignedData (RFC 5652) contenant le certificat du signataire, sa chaîne correspondante sans certificats DER dupliqués et les attributs signés. RSA et ECDSA signent le condensé des attributs ; Ed25519 et Ed448 signent le 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 La surcharge de commodité rejette délibérément un PFX contenant plus d’un certificat et d’une clé privée correspondants. Appelez Pour une signature de bout en bout, initialisez
Remarques La signature PFX RSA et ECDSA emprunte les chemins natifs HotPDF et de cryptographie Windows. La signature PFX Ed25519 et Ed448 exige OpenSSL 3 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. L’encapContentInfo est détaché (eContent omis). Les attributs signés sont triés par chaîne d’octets DER croissante selon la section 5.4 de la RFC 5652 avant hachage 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 |