Función CryptDecryptAndVerifyMessageSignature (wincrypt.h)

La función CryptDecryptAndVerifyMessageSignature descifra un mensaje y comprueba su firma.

Sintaxis

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

Puntero a una estructura de CRYPT_DECRYPT_MESSAGE_PARA que contiene parámetros de descifrado.

[in] pVerifyPara

Puntero a una estructura de CRYPT_VERIFY_MESSAGE_PARA que contiene parámetros de verificación.

[in] dwSignerIndex

Identifica un firmante determinado del mensaje. Se puede firmar un mensaje con más de un firmante y se puede llamar a esta función varias veces cambiando este parámetro para comprobar si hay varios firmantes. Se establece en cero para el primer firmante. Si la función devuelve FALSE y GetLastError devuelve CRYPT_E_NO_SIGNER, la llamada anterior recibió el último firmante del mensaje.

[in] pbEncryptedBlob

Puntero al mensaje firmado, codificado y cifrado que se va a descifrar y comprobar.

[in] cbEncryptedBlob

Tamaño, en bytes, del mensaje cifrado.

[out, optional] pbDecrypted

Puntero a un búfer para recibir el mensaje descifrado.

Este parámetro puede ser NULL si el mensaje descifrado no es necesario o para establecer el tamaño del mensaje descifrado con fines de asignación de memoria. No se devolverá un mensaje descifrado si este parámetro es NULL. Para obtener más información, vea Recuperar datos de longitud desconocida.

[in, out, optional] pcbDecrypted

Puntero a un DWORD que especifica el tamaño, en bytes, del búfer al que apunta el parámetro pbDecrypted . Cuando la función devuelve, contiene el tamaño del mensaje descifrado copiado en pbDecrypted.

Nota Al procesar los datos devueltos en el búfer pbDecrypted , las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en pcbDecrypted en la entrada. En la salida, la variable a la que apunta este parámetro se establece para reflejar el tamaño real de los datos copiados en el búfer.
 

[out, optional] ppXchgCert

Puntero a una estructura CERT_CONTEXT del certificado que corresponde a la clave de intercambio privada necesaria para descifrar el mensaje.

[out, optional] ppSignerCert

Puntero a una estructura CERT_CONTEXT del certificado del firmante.

Valor devuelto

Si la función se ejecuta correctamente, la función devuelve un valor distinto de cero (TRUE).

Si se produce un error en la función, devuelve cero (FALSE). Para obtener información de error extendida, llame a GetLastError.

Nota Los errores de las funciones llamadas CryptDecryptMessage y CryptVerifyMessageSignature podrían propagarse a esta función.
 
La función GetLastError devuelve el siguiente código de error con más frecuencia.
Código devuelto Descripción
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pbDecrypted no es lo suficientemente grande como para contener los datos devueltos, la función establece el código de ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta pcbDecrypted.

Comentarios

Para un mensaje descifrado y comprobado correctamente, se actualizan los punteros de contexto de certificado a los que apunta ppXchgCert y ppSignerCert . Deben liberarse llamando a CertFreeCertificateContext. Si se produce un error en la función, se establecen en NULL.

Para indicar que el autor de la llamada no está interesado en el certificado de intercambio o en el contexto del certificado del firmante, establezca los parámetros ppXchgCert y ppSignerCert en NULL.

Ejemplos

Para obtener un ejemplo que use esta función, vea Programa C de ejemplo: Envío y recepción de un mensaje firmado y cifrado.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptDecryptMessage

CryptSignAndEncryptMessage

Funciones de mensaje simplificadas