THotPDF.SignPDFWithPFX

THotPDF

 

Forrige  Metoder  AddPubKeyRecipient

Signer en eksisterende PDF-plassholder ved hjelp av en PFX / PKCS#12-fil, bygger en CMS SignedData-beholder og skriver den signerte PDF-en i ett kall

 

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;

 

Beskrivelse

SignPDFWithPFX er den ende-til-ende PFX-signeringsinngangen som ble lagt til i v2.119.27. Inngangs-PDF-en må allerede inneholde en signaturplassholder skrevet av THPDFPage.AddSignedSignatureField (eller PAdES-omslaget) med subFilter adbe.pkcs7.detached. Metoden:

 

1. Laster inn PDF-en, finner plassholderne for /ByteRange + /Contents og oppdaterer /ByteRange med de faktiske byteforskyvningene

2. Laster PFX-filen og dekrypterer den med det oppgitte passordet. PBES2 med PBKDF2-HMAC-SHA-256 + AES-256-CBC støttes (dette er standarden for PFX-filer eksportert av OpenSSL 3.0+, Windows 11+-certutil og macOS Keychain Access). Eldre PBE-SHA1-3DES-filer utløser en diagnose; eksporter på nytt med openssl pkcs12 -export ... -keypbe AES-256-CBC -certpbe AES-256-CBC

3. Beregner SHA-256 over dokumentbyte innenfor /ByteRange og bygger en CMS SignedData (RFC 5652) DER-blokk som inneholder X.509-sertifikatet, de signerte attributtene (contentType + messageDigest + signingTime) og en RSA + SHA-256-signatur over de SET-merkede signerte attributtene

4. Hex-koder CMS DER, verifiserer at den får plass i /Contents-budsjettet som AddSignedSignatureField reserverte (standard 8 KB dekker 1024 / 2048-bit RSA) og injiserer den i plassholderen

5. Skriver de patchede byte-ene til utdatafilen eller strømmen

 

Returnerer True ved vellykket resultat. Kaster EHPDFPFXError ved feil passord, støttet krypteringsprofil eller ugyldig PFX; EHPDFCMSError når inngangs-PDF-en mangler forventet plassholder eller CMS DER går over det reserverte /Contents-budsjettet; EHPDFRSAError ved RSA-nøkkelavvik

 

Typisk arbeidsflyt

 

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');

 

Noter

Signaturalgoritmen er RSA + SHA-256 (1.2.840.113549.1.1.1 + 2.16.840.1.101.3.4.2.1). Signaturidentifikatoren er IssuerAndSerialNumber hentet fra X.509-sertifikatet. encapContentInfo er frakoblet (eContent utelatt). Signerte attributter sorteres etter stigende DER-byte-streng per RFC 5652 §5.4 før de hashes

 

For PAdES B-T / B-LT / B-LTA-arbeidsflyter som trenger RFC 3161-tidsstempler, DSS-ordbøker eller signaturer for dokumenttidsstempel, gjelder fortsatt produsentsidehjelperne (AddPAdESSignatureField, AddPAdESDSSCertificate, AddDocumentTimestampSignature); SignPDFWithPFX skriver selv bare en enkel CMS-signatur (tilsvarende PAdES-B-B)

 

Se også: AddSignedSignatureField, PreparePDFForSigning, InsertSignatureHex, AddPAdESSignatureField