|
THotPDF.SignPDFWithPFX
|
Ankstesnis Metodai 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;
Aprašas SignPDFWithPFX yra visą PFX pasirašymo eigą apimantis įėjimo taškas, pridėtas v2.119.27. Įvesties PDF jau turi turėti signature placeholder, išvestą THPDFPage.AddSignedSignatureField (arba jo PAdES apgaubtuve) su subFilter adbe.pkcs7.detached. Metodas:
1. Įkelia įvesties PDF, suranda /ByteRange + /Contents žymeklių vietos rezervavimo ženklus ir pataiso /ByteRange pagal tikruosius baitų poslinkius 2. Įkelia PFX failą ir jį iššifruoja su pateiktu slaptažodžiu. Palaikomas PBES2 su PBKDF2-HMAC-SHA-256 + AES-256-CBC (tai numatyta OpenSSL 3.0+, Windows 11+ certutil ir macOS Keychain Access eksportuojamiems PFX failams). Senieji PBE-SHA1-3DES failai sukelia diagnostinį pranešimą; eksportuokite iš naujo naudodami openssl pkcs12 -export ... -keypbe AES-256-CBC -certpbe AES-256-CBC 3. Apskaičiuoja SHA-256 per /ByteRange apimtus dokumento baitus ir sukuria CMS SignedData (RFC 5652) DER duomenų bloką, kuriame yra X.509 sertifikatas, pasirašyti atributai (contentType + messageDigest + signingTime) ir RSA + SHA-256 parašas virš SET žyme pažymėtų pasirašytų atributų 4. CMS DER užkoduojamas šešioliktainiu formatu, patikrinama, ar jis telpa į AddSignedSignatureField rezervuotą /Contents biudžetą (numatyta 8 KB tinka 1024 / 2048 bitų RSA), ir įterpiamas į vietos rezervavimo ženklą 5. Įrašo pataisytus baitus į išvesties kelią arba srautą
Returns True on success. Raises
Typical workflow
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 Parašo algoritmas yra RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Pasirašančiojo identifikatorius yra IssuerAndSerialNumber, ištrauktas iš X.509 sertifikato. encapContentInfo yra atskirtas (eContent praleidžiamas). Pasirašyti atributai prieš maišant surikiuojami didėjančia DER baitų eilute pagal RFC 5652 §5.4
PAdES B-T / B-LT / B-LTA srautams, kuriems reikia RFC 3161 laiko žymų, DSS žodynų arba dokumento laiko žymos parašų, gamintojo pusės pagalbinės funkcijos (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature) vis dar taikomos; pati SignPDFWithPFX išveda tik bazinį CMS parašą (PAdES-B-B atitikmuo)
See also: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField |