CryptSignAndEncodeCertificate 函数 (wincrypt.h)
CryptSignAndEncodeCertificate 函数对证书、证书吊销列表 (CRL) 、证书信任列表 (CTL) 或证书请求进行编码和签名。
此函数执行以下操作:
- 使用 lpszStructType 调用 CryptEncodeObject 对“待签名”信息进行编码。
- 调用 CryptSignCertificate 对此编码的信息进行签名。
- 再次调用 CryptEncodeObject ,并将 lpszStructType 设置为 X509_CERT,以进一步编码生成的带符号的编码信息。
语法
BOOL CryptSignAndEncodeCertificate(
[in] BCRYPT_KEY_HANDLE hBCryptKey,
[in] DWORD dwKeySpec,
[in] DWORD dwCertEncodingType,
[in] LPCSTR lpszStructType,
[in] const void *pvStructInfo,
[in] PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
[in] const void *pvHashAuxInfo,
[out] BYTE *pbEncoded,
[in, out] DWORD *pcbEncoded
);
参数
[in] hBCryptKey
加密服务提供程序的句柄 (CSP) 执行签名。 此句柄是使用 CryptAcquireContext 函数创建的 HCRYPTPROV 句柄,或使用 NCryptOpenKey 函数创建的NCRYPT_KEY_HANDLE句柄。 新应用程序应始终传入 CNG CSP 的NCRYPT_KEY_HANDLE 句柄。
[in] dwKeySpec
标识要从提供程序的容器中使用的 私钥 。 这必须是以下值之一。 如果在 hCryptProvOrNCryptKey 参数中传递 CNG 键,则忽略此参数。
值 | 含义 |
---|---|
|
使用密钥交换密钥。 |
|
使用数字签名密钥。 |
[in] dwCertEncodingType
指定使用的编码类型。 此值可以是以下值。
值 | 含义 |
---|---|
|
指定 X.509 证书编码。 |
[in] lpszStructType
指向以 null 结尾的 ANSI 字符串的指针,该字符串包含要编码和签名的数据类型。 以下预定义 的 lpszStructType 常量用于编码操作。
值 | 含义 |
---|---|
|
pvStructInfo 是 CRL_INFO 结构的地址。 |
|
pvStructInfo 是 CERT_REQUEST_INFO 结构的地址。 |
|
pvStructInfo 是 CERT_INFO 结构的地址。 |
|
pvStructInfo 是 CERT_KEYGEN_REQUEST_INFO 结构的地址。 |
[in] pvStructInfo
结构的地址,该结构包含要签名和编码的数据。 此结构的格式由 lpszStructType 参数确定。
[in] pSignatureAlgorithm
指向 CRYPT_ALGORITHM_IDENTIFIER 结构的指针,该结构包含签名算法 (OID) 的对象标识符 和所需的任何其他参数。 此函数使用以下算法 OID:
- szOID_RSA_MD5RSA
- szOID_RSA_SHA1RSA
- szOID_X957_SHA1DSA
[in] pvHashAuxInfo
保留。 必须为 NULL。
[out] pbEncoded
指向用于接收已签名和编码输出的缓冲区的指针。
此参数可以为 NULL ,用于设置此信息的大小,以便进行内存分配。 有关详细信息,请参阅 检索未知长度的数据。
[in, out] pcbEncoded
指向 DWORD 的指针,该 DWORD 包含 pbEncoded 参数指向的缓冲区的大小(以字节为单位)。 函数返回时, DWORD 包含缓冲区中存储或要存储的字节数。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零 (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
返回代码 | 说明 |
---|---|
|
如果 pbEncoded 参数指定的缓冲区不够大,无法容纳返回的数据,该函数将设置ERROR_MORE_DATA代码并将所需的缓冲区大小(以字节为单位)存储在 由ERROR_MORE_DATA encoded 指向的变量中。 |
|
证书编码类型无效。 目前仅支持X509_ASN_ENCODING。 |
|
签名算法的 OID 不会映射到已知或支持的哈希算法。 |
|
编码或解码时遇到错误。 此错误的最可能原因是 pvStructInfo 所指向的结构中的字段初始化不正确。 |
如果函数失败, GetLastError 可能会返回 抽象语法表示法 One (ASN.1) 编码/解码错误。 有关这些错误的信息,请参阅 ASN.1 编码/解码返回值。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |