CryptMsgEncodeAndSignCTL 函数 (wincrypt.h)
CryptMsgEncodeAndSignCTL 函数对 CTL 进行编码,并创建包含编码 CTL 的已签名消息。
此函数首先对 pCtlInfo 指向的 CTL 进行编码,然后调用 CryptMsgSignCTL 对编码的消息进行签名。
语法
BOOL CryptMsgEncodeAndSignCTL(
[in] DWORD dwMsgEncodingType,
[in] PCTL_INFO pCtlInfo,
[in] PCMSG_SIGNED_ENCODE_INFO pSignInfo,
[in] DWORD dwFlags,
[out] BYTE *pbEncoded,
[in, out] DWORD *pcbEncoded
);
参数
[in] dwMsgEncodingType
指定使用的编码类型。 始终可以通过将证书和 消息编码类型 与按位 OR 操作结合使用来指定它们,如以下示例所示:
X509_ASN_ENCODING |PKCS_7_ASN_ENCODING
当前定义的编码类型为:
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] pCtlInfo
指向包含要编码和签名的 CTL 的CTL_INFO 结构的指针。
[in] pSignInfo
指向 包含CMSG_SIGNER_ENCODE_INFO 结构的数组的 CMSG_SIGNED_ENCODE_INFO 结构的指针。
如果结构的 cbSize 成员设置为结构的大小,并且所有其他成员设置为零,则可以在没有签名者的情况下对消息进行编码。
[in] dwFlags
如果在编码之前对 CTL 条目进行排序,则设置CMSG_ENCODE_SORTED_CTL_FLAG。 如果将调用 CertFindSubjectInSortedCTL 或 CertEnumSubjectInSortedCTL 函数,则会设置此标志。
如果设置了 CMSG_ENCODE_SORTED_CTL_FLAG,则设置CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG,并且 TrustedSubjects 的标识符是哈希,例如 MD5 或 SHA1。
如果定义了CMS_PKCS7,则可以将 dwFlags 设置为 CMSG_CMS_ENCAPSULATED_CTL_FLAG,以便对 CMS 兼容的 V3 SignedData 消息进行编码。
[out] pbEncoded
指向接收已编码的已签名消息创建的缓冲区的指针。
此参数可以为 NULL ,用于设置此信息的大小,以便进行内存分配。 有关详细信息,请参阅 检索长度未知的数据。
[in, out] pcbEncoded
指向 DWORD 的指针,指定 pbEncoded 缓冲区的大小(以字节为单位)。 函数返回时, DWORD 包含缓冲区中存储或要存储的字节数。
返回值
如果函数成功,则返回值为非零 (TRUE) 。
如果函数失败,则返回值为零, (FALSE) 。 要获得更多的错误信息,请调用 GetLastError。 错误可以从调用 CryptMsgOpenToEncode 和 CryptMsgUpdate 传播。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |