TPDFlibPFXFile

Security and Signatures

描述

TPDFlibPFXFile 保存用來產生分離式 PKCS#7 簽章的簽署身分

身分可以來自 PFX 檔、以簡單顯示名稱解析的 Windows 系統憑證存放區項目、外部複製的 PCCERT_CONTEXT、Ed25519 金鑰對、CNG 金鑰,或外部摘要回呼

身分綁定後,SignData 產生 CMS 簽章位元組,估算輔助方法會在寫入簽章前算出 /Contents 的保留大小

SigningWorkbench 示範在把身分交給簽署管線之前,先用這個類別開啟 PFX

語法

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;

方法

Open連同密碼載入 PFX 或 PKCS#12 檔;UseMachineKeyset 選擇電腦金鑰集
OpenFromStore以 Subject 簡單顯示名稱在 Windows 系統存放區找出憑證並綁定其內容;第一張帶有可用私鑰的憑證會中選
EnumerateStore為存放區裡的每張憑證,在呼叫端提供的陣列中填入一個 TPDFlibCertificateInfo,並回傳實際填入的數量
OpenFromContext綁定外部取得的 PCCERT_CONTEXT;所有權在呼叫端,必須保證內容在簽署完成前一直有效
OpenEd25519, OpenEd25519FromFile從記憶體或檔案綁定 Ed25519 憑證與種子
OpenCNGKey, OpenCNGKeyHandle以提供者與金鑰名稱,或以現有金鑰控制代碼綁定 CNG 金鑰
OpenExternalDigestSigner改經 TPDFlibExternalDigestSignEvent 回呼簽署,而非本機私鑰
GetCertificateDER已綁定憑證的 DER 形式
SetPrivateKeyUI允許或抑制 CryptoAPI 私鑰提示
SetRSAPSSPadding為 RSA 分離式簽章選擇 RSASSA-PSS 填補;舊式 CryptoAPI 金鑰維持 PKCS#1 v1.5
CertificateKeyUsage打包成兩個位元組的 X.509 金鑰用途位元;未綁定內容時為 -1
EstimateSignatureSize, EstimateCertificateChainSizeCMS 輸出與憑證鏈的上限
SignData以選定的子篩選器與摘要演算法為資料產生分離式 CMS 簽章

備註

所有 open 系列方法都回傳 TPDFlibSignerResult,身分綁定失敗可以被精確回報

facade 也可透過 SetSignProcessPFXFromFile、SetSignProcessCertFromStore、SetSignProcessEd25519Identity 與 SetSignProcessCNGKey 觸及同樣的身分

另請參閱

TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile