Função CryptVerifyMessageSignature (wincrypt.h)
A função CryptVerifyMessageSignature verifica a assinatura de uma mensagem assinada.
Essa função não deve ser usada para verificar a assinatura de uma mensagem desanexada. Você deve usar a função CryptVerifyDetachedMessageSignature para verificar a assinatura de uma mensagem desanexada.
Sintaxe
BOOL CryptVerifyMessageSignature(
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbSignedBlob,
[in] DWORD cbSignedBlob,
[out] BYTE *pbDecoded,
[in, out] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Parâmetros
[in] pVerifyPara
Um ponteiro para uma estrutura CRYPT_VERIFY_MESSAGE_PARA que contém parâmetros de verificação.
[in] dwSignerIndex
O índice da assinatura desejada. Pode haver mais de uma assinatura. CryptVerifyMessageSignature pode ser chamado repetidamente, incrementando dwSignerIndex todas as vezes. Defina esse parâmetro como zero para o primeiro signatário ou se houver apenas um signatário. Se a função retornar FALSE e GetLastError retornar CRYPT_E_NO_SIGNER, a chamada anterior processou o último signatário da mensagem.
[in] pbSignedBlob
Um ponteiro para um buffer que contém a mensagem assinada.
[in] cbSignedBlob
O tamanho, em bytes, do buffer de mensagens assinado.
[out] pbDecoded
Um ponteiro para um buffer para receber a mensagem decodificada.
Esse parâmetro poderá ser NULL se a mensagem decodificada não for necessária para processamento adicional ou para definir o tamanho da mensagem para fins de alocação de memória. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.
[in, out] pcbDecoded
Um ponteiro para um valor DWORD que especifica o tamanho, em bytes, do buffer pbDecoded . Quando a função retorna, esse DWORD contém o tamanho, em bytes, da mensagem decodificada. A mensagem decodificada não será retornada se esse parâmetro for NULL.
[out, optional] ppSignerCert
O endereço de um ponteiro de estrutura CERT_CONTEXT que recebe o certificado do signatário. Quando terminar de usar essa estrutura, libere-a passando esse ponteiro para a função CertFreeCertificateContext . Esse parâmetro poderá ser NULL se o certificado do signatário não for necessário.
Valor retornado
Se a função for bem-sucedida, a função retornará diferente de zero. Isso não significa necessariamente que a assinatura foi verificada. No caso de uma mensagem desanexada, a variável apontada por pcbDecoded conterá zero. Nesse caso, essa função retornará diferente de zero, mas a assinatura não é verificada. Para verificar a assinatura de uma mensagem desanexada, use a função CryptVerifyDetachedMessageSignature .
Se a função falhar, ela retornará zero. Para obter informações de erro estendidas, chame GetLastError.
A tabela a seguir mostra os códigos de erro mais comumente retornados pela função GetLastError .
Código de retorno | Descrição |
---|---|
|
Se o buffer especificado pelo parâmetro pbDecoded 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 pcbDecoded. |
|
Tipos de codificação de mensagem e certificado inválidos. Atualmente, há suporte apenas para PKCS_7_ASN_ENCODING e X509_ASN_ENCODING_TYPE. CbSize inválido em *pVerifyPara. |
|
Não é uma mensagem criptográfica assinada. |
|
A mensagem não tem nenhum signatário ou signatário para o dwSignerIndex especificado. |
|
A mensagem foi hash e assinada usando um algoritmo desconhecido ou sem suporte. |
|
A assinatura da mensagem não foi verificada. |
Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação ASN.1 ( Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Valores retornados de codificação/decodificação asn.1.
Comentários
Para um signatário verificado e uma mensagem, ppSignerCert é atualizado com o CERT_CONTEXT do signatário. Ele deve ser liberado chamando CertFreeCertificateContext. Caso contrário, ppSignerCert será definido como NULL.
Para uma mensagem que contém apenas certificados e CRLs, pcbDecoded é definido como NULL.
Exemplos
Para obter um exemplo que usa essa função, consulte Exemplo de programa C: assinando uma mensagem e verificando uma assinatura de mensagem.
Requisitos
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 |