|
THotPDF.SignPDFWithPFX
|
Προηγούμενο Μέθοδοι AddPubKeyRecipient |
|
Signs an existing PDF placeholder using a PFX / PKCS#12 file, building a CMS SignedData container and writing the signed PDF in one call.
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;
Περιγραφή Το SignPDFWithPFX είναι το end-to-end PFX signing entry point που προστέθηκε στο v2.119.27. Το input PDF πρέπει ήδη να περιέχει signature placeholder που εκπέμπεται από το THPDFPage.AddSignedSignatureField (ή το PAdES wrapper του) με subFilter
1. Φορτώνει το input PDF, εντοπίζει τα sentinel placeholders /ByteRange + /Contents και κάνει patch στο /ByteRange με τα πραγματικά byte offsets 2. Φορτώνει το PFX file και το αποκρυπτογραφεί με τον παρεχόμενο password. Υποστηρίζεται PBES2 με PBKDF2-HMAC-SHA-256 + AES-256-CBC (αυτή είναι η προεπιλογή για PFX files που εξάγονται από OpenSSL 3.0+, Windows 11+ certutil και macOS Keychain Access). Τα legacy PBE-SHA1-3DES files εμφανίζουν diagnostic· κάντε re-export με 3. Υπολογίζει SHA-256 πάνω στα document bytes που καλύπτει το /ByteRange και δημιουργεί CMS SignedData (RFC 5652) DER blob που περιέχει το X.509 certificate, τα signed attributes (contentType + messageDigest + signingTime) και μια RSA + SHA-256 signature πάνω στα SET-tagged signed attributes 4. Κάνει hex-encode το CMS DER, επαληθεύει ότι χωρά στο /Contents budget που κρατήθηκε από το AddSignedSignatureField (η προεπιλογή 8 KB καλύπτει 1024 / 2048-bit RSA) και το εισάγει στο placeholder 5. Γράφει τα patched bytes στο output path ή stream
Επιστρέφει True σε επιτυχία. Εγείρει
Τυπική ροή εργασίας
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');
Σημειώσεις Ο signature algorithm είναι RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Το signer identifier είναι IssuerAndSerialNumber που εξάγεται από το X.509 certificate. Το encapContentInfo είναι detached (το eContent παραλείπεται). Τα signed attributes ταξινομούνται κατά αύξουσα DER byte string σύμφωνα με RFC 5652 §5.4 πριν γίνουν hashed
Για PAdES B-T / B-LT / B-LTA workflows που χρειάζονται RFC 3161 timestamps, DSS dictionaries ή document timestamp signatures, εξακολουθούν να ισχύουν οι producer-side helpers (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature)· το ίδιο το SignPDFWithPFX εκπέμπει βασική CMS-only signature (ισοδύναμη με PAdES-B-B)
Δείτε επίσης: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |