Compartilhar via


Função CryptDecryptAndVerifyMessageSignature (wincrypt.h)

A função CryptDecryptAndVerifyMessageSignature descriptografa uma mensagem e verifica sua assinatura.

Sintaxe

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
);

Parâmetros

[in] pDecryptPara

Um ponteiro para uma estrutura CRYPT_DECRYPT_MESSAGE_PARA que contém parâmetros de descriptografia.

[in] pVerifyPara

Um ponteiro para uma estrutura CRYPT_VERIFY_MESSAGE_PARA que contém parâmetros de verificação.

[in] dwSignerIndex

Identifica um signatário específico da mensagem. Uma mensagem pode ser assinada por mais de um signatário e essa função pode ser chamada várias vezes alterando esse parâmetro para marcar para vários signatários. Ele está definido como zero para o primeiro signatário. Se a função retornar FALSE e GetLastError retornar CRYPT_E_NO_SIGNER, a chamada anterior recebeu o último signatário da mensagem.

[in] pbEncryptedBlob

Um ponteiro para a mensagem assinada, codificada e criptografada a ser descriptografada e verificada.

[in] cbEncryptedBlob

O tamanho, em bytes, da mensagem criptografada.

[out, optional] pbDecrypted

Um ponteiro para um buffer para receber a mensagem descriptografada.

Esse parâmetro poderá ser NULL se a mensagem descriptografada não for necessária ou para definir o tamanho da mensagem descriptografada para fins de alocação de memória. Uma mensagem descriptografada não será retornada se esse parâmetro for NULL. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.

[in, out, optional] pcbDecrypted

Um ponteiro para um DWORD que especifica o tamanho, em bytes, do buffer apontado pelo parâmetro pbDecrypted . Quando a função retorna, ela contém o tamanho da mensagem descriptografada copiada para pbDecrypted.

Nota Ao processar os dados retornados no buffer pbDecrypted , os aplicativos devem usar o tamanho real dos dados retornados. O tamanho real pode ser ligeiramente menor do que o tamanho do buffer especificado em pcbDecrypted na entrada. Na saída, a variável apontada por esse parâmetro é definida para refletir o tamanho real dos dados copiados para o buffer.
 

[out, optional] ppXchgCert

Um ponteiro para uma estrutura CERT_CONTEXT do certificado que corresponde à chave de troca privada necessária para descriptografar a mensagem.

[out, optional] ppSignerCert

Um ponteiro para uma estrutura CERT_CONTEXT do certificado do signatário.

Retornar valor

Se a função for bem-sucedida, a função retornará diferente de zero (TRUE).

Se a função falhar, ela retornará zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Nota Erros das funções chamadas CryptDecryptMessage e CryptVerifyMessageSignature podem ser propagados para essa função.
 
A função GetLastError retorna o código de erro a seguir com mais frequência.
Código de retorno Descrição
ERROR_MORE_DATA
Se o buffer especificado pelo parâmetro pbDecrypted não for grande o suficiente para manter os dados retornados, a função definirá o código ERROR_MORE_DATA e armazenará o tamanho do buffer necessário, em bytes, na variável apontada por pcbDecrypted.

Comentários

Para uma mensagem descriptografada e verificada com êxito , os ponteiros de contexto de certificado apontados por ppXchgCert e ppSignerCert são atualizados. Eles devem ser liberados chamando CertFreeCertificateContext. Se a função falhar, ela será definida como NULL.

Para indicar que o chamador não está interessado no certificado de troca ou no contexto do certificado do signatário, defina os parâmetros ppXchgCert e ppSignerCert como NULL.

Exemplos

Para obter um exemplo que usa essa função, consulte Exemplo de Programa C: Enviando e recebendo uma mensagem assinada e criptografada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CryptDecryptMessage

CryptSignAndEncryptMessage

Funções de mensagem simplificadas