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
CertificateDERDER 编码的签名证书,用于嵌入证书和颁发者/序列号引用
Ed25519Seed不走 CNG 签 Ed25519 时的 32 字节种子,否则为空
Datadetached 签名覆盖的已摘要范围字节
SubFilter目标 /SubFilter,例如驱动属性选择的 /ETSI.CAdES.detached
DigestAlgorithm与 Ord(TPDFlibDigestAlgorithm) 对应的摘要算法序号:2 为 SHA-256、3 为 SHA-384、4 为 SHA-512、5 到 7 为 SHA-3 家族
CommitmentTypeDERDER 编码的承诺类型属性,无则为空
SignaturePolicyDERDER 编码的签名策略标识符,无则为空
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