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, EstimateCertificateChainSize | CMS 輸出與憑證鏈的上限 |
| SignData | 以選定的子篩選器與摘要演算法為資料產生分離式 CMS 簽章 |
備註
所有 open 系列方法都回傳 TPDFlibSignerResult,身分綁定失敗可以被精確回報
facade 也可透過 SetSignProcessPFXFromFile、SetSignProcessCertFromStore、SetSignProcessEd25519Identity 與 SetSignProcessCNGKey 觸及同樣的身分
另請參閱
TPDFlibSignerResult, TPDFlibCertificateInfo, TPDFlibSigner, TPDFlibSignDoc, NewSignProcessFromFile