PLBuildModernDetachedCMS
密码学、数字签名
描述
围绕 RSA、ECDSA 或 Ed25519 签名构建 detached CMS SignedData,覆盖 Windows CryptoAPI 消息层无法表达的算法
签名者证书及其链上下文、摘要算法、承诺类型与签名策略的 DER、吊销材料以及填充策略都通过参数传入,原始签名由 CNG NCrypt、外部摘要签名回调或纯 Pascal 的 Ed25519 路径提供
语法
Delphi
Function PLBuildModernDetachedCMS(CertContext: Pointer;
Const CertificateDER, Ed25519Seed, Data, SubFilter: AnsiString;
DigestAlgorithm: Integer; Const CommitmentTypeDER,
SignaturePolicyDER: AnsiString; NCryptKeyHandle: TPLIntPtr= 0;
AllowPrivateKeyUI: Boolean= False;
ExternalSigner: TPDFlibExternalDigestSignEvent= Nil;
ExternalSender: TObject= Nil; ExternalSignProcessID: Integer= 0;
ExternalSignatureAlgorithm: Integer= 0;
RSAPSSPadding: Boolean= False;
Const RevocationInfoDER: AnsiString= ''): AnsiString;参数
| CertContext | 签名证书的 Windows CERT_CONTEXT 句柄;纯外部签名者路径传 Nil |
|---|---|
| CertificateDER | DER 编码的签名证书,用于嵌入证书和颁发者/序列号引用 |
| Ed25519Seed | 不走 CNG 签 Ed25519 时的 32 字节种子,否则为空 |
| Data | detached 签名覆盖的已摘要范围字节 |
| SubFilter | 目标 /SubFilter,例如驱动属性选择的 /ETSI.CAdES.detached |
| DigestAlgorithm | 与 Ord(TPDFlibDigestAlgorithm) 对应的摘要算法序号:2 为 SHA-256、3 为 SHA-384、4 为 SHA-512、5 到 7 为 SHA-3 家族 |
| CommitmentTypeDER | DER 编码的承诺类型属性,无则为空 |
| SignaturePolicyDER | DER 编码的签名策略标识符,无则为空 |
| NCryptKeyHandle | 已打开的 CNG 密钥句柄;传 0 时函数自行打开证书私钥,可选弹出 UI |
| AllowPrivateKeyUI | 密钥要求用户在场时允许显示 CNG 密钥获取对话框 |
| ExternalSigner | 接收摘要并返回原始签名的回调,面向 HSM 或远程签名 |
| ExternalSender | 回传给 ExternalSigner 回调的发送者 |
| ExternalSignProcessID | 回传给回调的签名进程标识符 |
| ExternalSignatureAlgorithm | 取 PL_EXTERNAL_SIGNATURE_RSA_PKCS1、PL_EXTERNAL_SIGNATURE_ECDSA_DER、PL_EXTERNAL_SIGNATURE_ECDSA_P1363 之一 |
| RSAPSSPadding | 为 RSA 签名选择 RSASSA-PSS 填充 |
| RevocationInfoDER | 预收集的吊销信息,作为 RevocationInfoChoices 嵌入 |
返回值
DER 编码的 detached CMS,任一签名步骤失败时为空字符串
备注
这个例程是现代签名路径背后的引擎;直接调用可以完全掌控承诺与策略属性,返回的字节和经 PLIsModernDetachedCMS 校验的数据一样填入 PDF 的 /Contents 空位
另请参阅
PLVerifyModernDetachedCMS, PLIsModernDetachedCMS, PLModernSignatureSizeEstimate, TPDFlibExternalDigestSignEvent, SetSignProcessExternalDigestSigner