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