TPDFlibPFXFile

Security and Signatures

Beschreibung

TPDFlibPFXFile hält die Signatur-Identität, mit der eine abgelöste PKCS#7-Signatur erzeugt wird

Die Identität kann aus einer PFX-Datei stammen, aus einem Eintrag im Windows-Systemzertifikatsspeicher, der über seinen einfachen Anzeigenamen aufgelöst wird, aus einem extern duplizierten PCCERT_CONTEXT, aus einem Ed25519-Schlüsselpaar, einem CNG-Schlüssel oder einem externen Digest-Callback

Sobald eine Identität gebunden ist, erzeugt SignData die CMS-Signaturbytes, und die Schätzhelfer bemessen die /Contents-Reservierung, bevor die Signatur geschrieben wird

Das SigningWorkbench-Demo öffnet eine PFX mit dieser Klasse, bevor es die Identität an die Signatur-Pipeline übergibt

Syntax

Delphi

TPDFlibPFXFile = Class
  Public
    Destructor Destroy; Override;
    Function Open(Const FileName: WideString; Const Password: AnsiString; UseMachineKeyset: Boolean): TPDFlibSignerResult;
    Function OpenFromStore(Const StoreName, CertName: WideString; UseMachineStore: Boolean): TPDFlibSignerResult;
    Function EnumerateStore(Const StoreName: WideString; UseMachineStore: Boolean;
      Var Infos: Array Of TPDFlibCertificateInfo): Integer;
    Function OpenFromContext(CertContext: Pointer): TPDFlibSignerResult;
    Function OpenEd25519(Const CertificateDER, PrivateKeyDER: AnsiString): TPDFlibSignerResult;
    Function OpenEd25519FromFile(Const CertificateFile, PrivateKeyFile: WideString): TPDFlibSignerResult;
    Function OpenCNGKey(Const CertificateDER: AnsiString;
      Const ProviderName, KeyName: WideString; UseMachineKey, AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenCNGKeyHandle(Const CertificateDER: AnsiString; KeyHandle: TPLIntPtr; AllowUI: Boolean): TPDFlibSignerResult;
    Function OpenExternalDigestSigner(Const CertificateDER: AnsiString;
      Signer: TPDFlibExternalDigestSignEvent; Sender: TObject;
      SignProcessID, SignatureAlgorithm, SignatureReserveBytes: Integer): TPDFlibSignerResult;
    Function GetCertificateDER: AnsiString;
    Procedure SetPrivateKeyUI(AllowUI: Boolean);
    Procedure SetRSAPSSPadding(Enable: Boolean);
    Function CertificateKeyUsage: Integer;
    Function EstimateSignatureSize(Const Data, SubFilter: AnsiString;
      DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): Integer;
    Function EstimateCertificateChainSize: Integer;
    Function SignData(Const Data, SubFilter: AnsiString; DigestAlgorithm: TPDFlibDigestAlgorithm;
      Const CommitmentTypeDER, SignaturePolicyDER, RevocationInfoDER: AnsiString): AnsiString;
  End;

Methoden

OpenLädt eine PFX- oder PKCS#12-Datei mit ihrem Passwort; UseMachineKeyset wählt den Maschinenschlüsselsatz
OpenFromStoreSucht ein Zertifikat anhand des einfachen Subject-Anzeigenamens in einem Windows-Systemspeicher und bindet seinen Kontext; gewinnt das erste Zertifikat, das einen verwendbaren privaten Schlüssel mitbringt
EnumerateStoreFüllt das vom Aufrufer gelieferte Array mit je einem TPDFlibCertificateInfo pro Speicherzertifikat und gibt die tatsächlich gefüllte Anzahl zurück
OpenFromContextBindet einen extern beschafften PCCERT_CONTEXT; der Aufrufer behält das Eigentum und muss den Kontext gültig halten, bis das Signieren abgeschlossen ist
OpenEd25519, OpenEd25519FromFileBindet ein Ed25519-Zertifikat und Seed aus dem Speicher oder aus Dateien
OpenCNGKey, OpenCNGKeyHandleBindet einen CNG-gestützten Schlüssel über Provider und Schlüsselnamen oder über ein vorhandenes Schlüssel-Handle
OpenExternalDigestSignerSigniert über den TPDFlibExternalDigestSignEvent-Callback statt über einen lokalen privaten Schlüssel
GetCertificateDERDas gebundene Zertifikat in DER-Form
SetPrivateKeyUIErlaubt oder unterdrückt die CryptoAPI-Passwortabfrage für den privaten Schlüssel
SetRSAPSSPaddingWählt RSASSA-PSS-Padding für abgelöste RSA-Signaturen; herkömmliche CryptoAPI-Schlüssel bleiben bei PKCS#1 v1.5
CertificateKeyUsageDie X.509-Key-Usage-Bits, gepackt in zwei Bytes, oder -1, wenn kein Kontext gebunden ist
EstimateSignatureSize, EstimateCertificateChainSizeObergrenzen für die CMS-Ausgabe und die Zertifikatskette
SignDataErzeugt die abgelöste CMS-Signatur für die Daten mit dem gewählten Sub-Filter und Digest-Algorithmus

Anmerkungen

Alle Open-Methoden geben TPDFlibSignerResult zurück, sodass eine fehlgeschlagene Identitätsbindung präzise gemeldet werden kann

Die Fassade erreicht dieselben Identitäten über SetSignProcessPFXFromFile, SetSignProcessCertFromStore, SetSignProcessEd25519Identity und SetSignProcessCNGKey

Siehe auch

TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile