CryptXmlSign 函数 (cryptxml.h)

CryptXmlSign 函数创建 SignedInfo 元素的加密签名。

语法

HRESULT CryptXmlSign(
  [in]           HCRYPTXML                       hSignature,
  [in, optional] HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hKey,
                 DWORD                           dwKeySpec,
                 DWORD                           dwFlags,
                 CRYPT_XML_KEYINFO_SPEC          dwKeyInfoSpec,
  [in, optional] const void                      *pvKeyInfoSpec,
  [in]           const CRYPT_XML_ALGORITHM       *pSignatureMethod,
  [in]           const CRYPT_XML_ALGORITHM       *pCanonicalization
);

参数

[in] hSignature

CRYPT_XML_SIGNATURE 结构的句柄。

[in, optional] hKey

用于对 SignedInfo 元素进行签名的私钥的句柄。 对于基于 HMAC 的签名算法,此参数必须为 NULL

dwKeySpec

指定键类型的 DWORD 值。 此参数的取值可为下列值之一:

含义
AT_KEYEXCHANGE
1
密钥对是密钥交换对。
AT_SIGNATURE
2
密钥对是签名对。
CERT_NCRYPT_KEY_SPEC
0xFFFFFFFF
密钥是加密 API:下一代 (CNG) 密钥。

dwFlags

控制数据的签名方式的 DWORD 值。 此参数的取值可为下列值之一:

含义
CRYPT_XML_SIGN_ADD_KEYVALUE
0x00000001
hKey 参数中指定的句柄填充 KeyValue 元素。
重要dwKeyInfoSpec 参数设置为 CRYPT_XML_KEYINFO_SPEC_ENCODED 时,不能使用 CRYPT_XML_SIGN_ADD_KEYVALUE 标志。
 
CRYPT_XML_FLAG_DISABLE_EXTENSIONS
0x10000000
仅使用签名和摘要的默认实现。 设置此标志后,不会加载其他已注册的扩展。

dwKeyInfoSpec

pvKeyInfoSpec 参数指向的数据结构的类型。 下面是一些可能的组合。

dwKeyInfec pvKeyInfoSpec
CRYPT_XML_KEYINFO_SPEC_NONE 设置为 NULL
CRYPT_XML_KEYINFO_SPEC_ENCODED 指向 CRYPT_XML_BLOB 结构
CRYPT_XML_KEYINFO_SPEC_PARAM 指向 CRYPT_XML_KEYINFO_PARAM 结构

[in, optional] pvKeyInfoSpec

指向结构的指针,其类型由 dwKeyInfoSpec 参数的值决定。

[in] pSignatureMethod

指向指定签名方法 的CRYPT_XML_ALGORITHM 结构的指针。

[in] pCanonicalization

指向 CRYPT_XML_ALGORITHM 结构的指针,该结构指定规范化方法。

返回值

如果函数成功,则函数返回零。

如果函数失败,它将返回一个 指示错误的 HRESULT 值。

备注

如果找不到证书,CryptXmlSign 将创建用于选择证书的 UI。 如果此窗口是从 会话 0 中运行的进程生成的,则应用程序可能会意外终止。

要求

   
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
目标平台 Windows
标头 cryptxml.h
Library Cryptxml.lib
DLL Cryptxml.dll