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