CryptDecryptAndVerifyMessageSignature 函数 (wincrypt.h)
CryptDecryptAndVerifyMessageSignature 函数解密消息并验证其签名。
语法
BOOL CryptDecryptAndVerifyMessageSignature(
[in] PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbEncryptedBlob,
[in] DWORD cbEncryptedBlob,
[out, optional] BYTE *pbDecrypted,
[in, out, optional] DWORD *pcbDecrypted,
[out, optional] PCCERT_CONTEXT *ppXchgCert,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
参数
[in] pDecryptPara
指向包含解密参数 的CRYPT_DECRYPT_MESSAGE_PARA 结构的指针。
[in] pVerifyPara
指向包含验证参数 的 CRYPT_VERIFY_MESSAGE_PARA 结构的指针。
[in] dwSignerIndex
标识消息的特定签名者。 消息可由多个签名者签名,并且可以多次调用此函数,将此参数更改为多个签名者的检查。 对于第一个签名者,它设置为零。 如果函数返回 FALSE,并且 GetLastError 返回CRYPT_E_NO_SIGNER,则上一个调用接收了消息的最后一个签名者。
[in] pbEncryptedBlob
指向要解密和验证的已签名、编码和加密消息的指针。
[in] cbEncryptedBlob
加密消息的大小(以字节为单位)。
[out, optional] pbDecrypted
指向用于接收解密消息的缓冲区的指针。
如果不需要解密的消息,则此参数可以为 NULL ,或者为内存分配目的设置解密消息的大小。 如果此参数为 NULL,则不会返回解密的消息。 有关详细信息,请参阅 检索未知长度的数据。
[in, out, optional] pcbDecrypted
指向 DWORD 的指针,指定 pbDecrypted 参数指向的缓冲区的大小(以字节为单位)。 当函数返回时,它包含复制到 pbDecrypted 的解密消息的大小。
[out, optional] ppXchgCert
指向证书CERT_CONTEXT结构的指针,该结构对应于解密消息所需的私钥。
[out, optional] ppSignerCert
指向签名者证书 CERT_CONTEXT 结构的指针。
返回值
如果函数成功,则函数) 返回非零 (TRUE 。
如果函数失败,它将返回零 (FALSE) 。 有关扩展的错误信息,请调用 GetLastError。
返回代码 | 说明 |
---|---|
|
如果 pbDecrypted 参数指定的缓冲区不够大,无法容纳返回的数据,则函数将设置ERROR_MORE_DATA代码,并将所需的缓冲区大小(以字节为单位)存储在 由ed 指向的变量中。 |
注解
对于已成功解密和验证的消息,将更新 ppXchgCert 和 ppSignerCert 指向的证书上下文指针。 必须通过调用 CertFreeCertificateContext 来释放它们。 如果函数失败,则设置为 NULL。
若要指示调用方对交换证书或签名者 证书上下文不感兴趣,请将 ppXchgCert 和 ppSignerCert 参数设置为 NULL。
示例
有关使用此函数的示例,请参阅 示例 C 程序:发送和接收已签名和加密的消息。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | wincrypt.h |
Library | Crypt32.lib |
DLL | Crypt32.dll |