TPDFlibPFXFile

Security and Signatures

Opis

TPDFlibPFXFile przechowuje tożsamość podpisu używaną do wytworzenia odłączonego podpisu PKCS#7

Tożsamość może pochodzić z pliku PFX, wpisu systemowego magazynu certyfikatów Windows rozwiązanego po prostej nazwie wyświetlanej, zduplikowanego z zewnątrz PCCERT_CONTEXT, pary kluczy Ed25519, klucza CNG albo zewnętrznego callbacku wyliczania skrótu

Gdy tożsamość jest związana, SignData produkuje bajty podpisu CMS, a pomocnicze funkcje szacowania wymiarują rezerwację /Contents przed zapisaniem podpisu

Demo SigningWorkbench otwiera PFX tą klasą, zanim przekaże tożsamość do potoku podpisywania

Składnia

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;

Metody

OpenWczytuje plik PFX lub PKCS#12 z hasłem; UseMachineKeyset wybiera zestaw kluczy komputera
OpenFromStoreLokalizuje certyfikat w systemowym magazynie Windows po prostej nazwie wyświetlanej podmiotu i wiąże jego kontekst; wygrywa pierwszy certyfikat z użytecznym kluczem prywatnym
EnumerateStoreWypełnia przekazaną przez wywołującego tablicę elementami TPDFlibCertificateInfo po jednym na certyfikat magazynu i zwraca faktyczną liczbę wypełnionych
OpenFromContextWiąże uzyskany z zewnątrz PCCERT_CONTEXT; własność zostaje u wywołującego, a kontekst musi pozostać ważny aż do ukończenia podpisywania
OpenEd25519, OpenEd25519FromFileWiąże certyfikat i seed Ed25519 z pamięci albo z plików
OpenCNGKey, OpenCNGKeyHandleWiąże klucz oparty na CNG po dostawcy i nazwie klucza albo po istniejącym uchwycie klucza
OpenExternalDigestSignerPodpisuje przez callback TPDFlibExternalDigestSignEvent zamiast lokalnego klucza prywatnego
GetCertificateDERZwiązany certyfikat w formie DER
SetPrivateKeyUIPozwala albo wycisza monit CryptoAPI o klucz prywatny
SetRSAPSSPaddingWybiera dopełnienie RSASSA-PSS dla odłączonych podpisów RSA; przestarzałe klucze CryptoAPI trzymają się PKCS#1 v1.5
CertificateKeyUsageBity przeznaczenia klucza X.509 upakowane w dwa bajty albo -1, gdy żaden kontekst nie jest związany
EstimateSignatureSize, EstimateCertificateChainSizeGórne granice dla wyjścia CMS i łańcucha certyfikatów
SignDataWytwarza odłączony podpis CMS dla danych z wybranym podfilarem i algorytmem skrótu

Uwagi

Wszystkie metody otwarcia zwracają TPDFlibSignerResult, więc nieudane związanie tożsamości można zgłosić precyzyjnie

Fasada sięga po te same tożsamości przez SetSignProcessPFXFromFile, SetSignProcessCertFromStore, SetSignProcessEd25519Identity i SetSignProcessCNGKey

Zobacz również

TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile