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.
[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.
Código devuelto | Descripción |
---|---|
|
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 |