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