Función CryptMsgControl (wincrypt.h)
La función CryptMsgControl realiza una operación de control después de descodificar un mensaje mediante una llamada final a la función CryptMsgUpdate . Las operaciones de control proporcionadas por esta función se usan para el descifrado, la firma y la comprobación de hash, y la adición y eliminación de certificados, listas de revocación de certificados (CRL), firmantes y atributos no autenticados.
Se han realizado cambios importantes que afectan al control de mensajes sobres en CryptoAPI para admitir la interoperabilidad de correo electrónico seguro/multipropósito de extensiones de correo de Internet (S/MIME). Para obtener más información, vea los comentarios de la función CryptMsgOpenToEncode .
Sintaxis
BOOL CryptMsgControl(
[in] HCRYPTMSG hCryptMsg,
[in] DWORD dwFlags,
[in] DWORD dwCtrlType,
[in] void const *pvCtrlPara
);
Parámetros
[in] hCryptMsg
Identificador de un mensaje criptográfico para el que se va a aplicar un control.
[in] dwFlags
El siguiente valor se define cuando el parámetro dwCtrlType es uno de los siguientes:
- CMSG_CTRL_DECRYPT
- CMSG_CTRL_KEY_TRANS_DECRYPT
- CMSG_CTRL_KEY_AGREE_DECRYPT
- CMSG_CTRL_MAIL_LIST_DECRYPT
Valor | Significado |
---|---|
|
El identificador del proveedor criptográfico se libera en la llamada final a la función CryptMsgClose . Este identificador no se libera si se produce un error en la función CryptMsgControl . |
Si el parámetro dwCtrlType no especifica una operación de descifrado, establezca este valor en cero.
[in] dwCtrlType
Tipo de operación que se va a realizar. Los tipos de control de mensajes definidos actualmente y el tipo de estructura que se debe pasar al parámetro pvCtrlPara se muestran en la tabla siguiente.
Valor | Significado |
---|---|
|
Blob que contiene los bytes codificados del certificado de atributo. |
|
Estructura CRYPT_INTEGER_BLOB que contiene los bytes codificados del certificado que se van a agregar al mensaje. |
|
Estructura CMSG_CMS_SIGNER_INFO que contiene información del firmante. Esta operación difiere de CMSG_CTRL_ADD_SIGNER porque la información del firmante contiene la firma. |
|
Blob que contiene los bytes codificados de la CRL que se van a agregar al mensaje. |
|
Estructura CMSG_SIGNER_ENCODE_INFO que contiene la información del firmante que se va a agregar al mensaje. |
|
Estructura CMSG_CTRL_ADD_SIGNER_UNAUTH_ATTR_PARA que contiene el índice del firmante y un BLOB que contiene la información de atributo no autenticada que se va a agregar al mensaje. |
|
Estructura CMSG_CTRL_DECRYPT_PARA utilizada para descifrar el mensaje para el destinatario de transporte de clave especificado. Este valor es aplicable a los destinatarios RSA. Esta operación especifica que la función CryptMsgControl busca en el índice del destinatario para obtener la información del destinatario del transporte de claves. Si se produce un error en la función, GetLastError devolverá CRYPT_E_INVALID_INDEX si no se encuentra ningún destinatario de transporte de claves. |
|
Índice del certificado de atributo que se va a quitar. |
|
Índice del certificado que se va a eliminar del mensaje. |
|
Índice de la CRL que se va a eliminar del mensaje. |
|
Índice del firmante que se va a eliminar. |
|
Estructura CMSG_CTRL_DEL_SIGNER_UNAUTH_ATTR_PARA que contiene un índice que especifica el firmante y el índice que especifica el atributo no autenticado del firmante que se va a eliminar. |
|
Estructura CERT_STRONG_SIGN_PARA utilizada para realizar comprobaciones de firmas seguras.
Para comprobar si hay una firma segura, especifique este tipo de control antes de llamar a CryptMsgGetAndVerifySigner o antes de llamar a CryptMsgControl con los siguientes tipos de control establecidos:
|
|
Estructura de CMSG_CTRL_KEY_AGREE_DECRYPT_PARA utilizada para descifrar el mensaje de la clave de sesión de acuerdo de clave especificada. El acuerdo de clave se usa con Diffie-Hellman cifrado o descifrado. |
|
Estructura CMSG_CTRL_KEY_TRANS_DECRYPT_PARA utilizada para descifrar el mensaje para el destinatario de transporte de clave especificado. El transporte de claves se usa con cifrado y descifrado RSA. |
|
Estructura de CMSG_CTRL_MAIL_LIST_DECRYPT_PARA utilizada para descifrar el mensaje del destinatario especificado mediante una clave de cifrado de clave (KEK) previamente distribuida. |
|
Este valor no se utiliza. |
|
Estructura CERT_INFO que identifica el firmante del mensaje cuya firma se va a comprobar. |
|
Estructura CMSG_CTRL_VERIFY_SIGNATURE_EX_PARA que especifica el índice del firmante y la clave pública para comprobar la firma del mensaje. La clave pública del firmante puede ser una estructura de CERT_PUBLIC_KEY_INFO , un contexto de certificado o un contexto de cadena de certificados. |
[in] pvCtrlPara
Puntero a una estructura determinada por el valor de dwCtrlType.
valor dwCtrlType | Significado |
---|---|
|
La descodificación se realizará como si el contenido transmitido se descifrara. Si se ha acumulado algún contenido cifrado transmitido antes de esta llamada, parte o todo el texto no cifrado resultante del descifrado del texto cifrado se devuelve a la aplicación a través de la función de devolución de llamada especificada en la llamada a la función CryptMsgOpenToDecode .
Nota Al transmitir un mensaje sobre, no se llama a la función CryptMsgControl hasta que el sondeo de la disponibilidad del CMSG_ENVELOPE_ALGORITHM_PARAM se realiza correctamente. Si el sondeo no se realiza correctamente, se produce un error. Para obtener una descripción de ese sondeo, consulte la función CryptMsgOpenToDecode .
|
|
El hash calculado a partir del contenido del mensaje se compara con el hash contenido del mensaje. |
|
pvCtrlPara apunta a una estructura de CMSG_SIGNER_ENCODE_INFO que contiene la información del firmante que se va a agregar al mensaje. |
|
Una vez realizada una eliminación, cualquier otro índice de firmante en uso para este mensaje ya no es válido y se debe volver a adquirir llamando a la función CryptMsgGetParam . |
|
Una vez realizada una eliminación, cualquier otro índice de atributo no autenticado en uso para este firmante ya no es válido y debe volver a adquirirse mediante una llamada a la función CryptMsgGetParam . |
|
Una vez realizada una eliminación, cualquier otro índice de certificado en uso para este mensaje ya no es válido y debe volver a adquirirse mediante una llamada a la función CryptMsgGetParam . |
|
Una vez realizada una eliminación, cualquier otro índice CRL que se use para este mensaje ya no es válido y tendrá que volver a adquirirse mediante una llamada a la función CryptMsgGetParam . |
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si se produce un error en la función, el valor devuelto es cero y la función GetLastError devuelve un error de codificación y descodificación de sintaxis abstracta uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación y descodificación de ASN.1.
Cuando se descodifica un mensaje sobre, se descodifican los errores encontrados en la función de devolución de llamada definida por la aplicación especificada por el parámetro pStreamInfo del
La función CryptMsgOpenToDecode se puede propagar a la función CryptMsgControl . Si esto sucede, la función CryptMsgControl no llama a la función SetLastError después de que se devuelva la función de devolución de llamada. Esto conserva los errores detectados bajo el control de la aplicación. Es responsabilidad de la función de devolución de llamada (o una de las API a las que llama) llamar a la función SetLastError si se produce un error mientras la aplicación procesa los datos transmitidos.
Es posible que se produzcan errores propagados desde las siguientes funciones:
- CryptCreateHash
- CryptDecrypt
- CryptGetHashParam
- CryptGetUserKey
- CryptHashData
- CryptImportKey
- CryptSignHash
- CryptVerifySignature
Los códigos de error siguientes se devuelven con más frecuencia.
Código devuelto | Descripción |
---|---|
|
El contenido del mensaje ya se ha descifrado. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_DECRYPT. |
|
El mensaje no contiene un atributo autenticado esperado. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_VERIFY_SIGNATURE. |
|
Error al codificar o descodificar. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_VERIFY_SIGNATURE. |
|
El tipo de control no es válido. |
|
El valor hash es incorrecto. |
|
El valor del índice no es válido. |
|
Tipo de mensaje no válido. |
|
El identificador de objeto tiene un formato incorrecto. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_ADD_SIGNER. |
|
El mensaje de datos sobres no contiene el destinatario especificado. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_DECRYPT. |
|
No se encontró el firmante especificado para el mensaje. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_VERIFY_SIGNATURE. |
|
El algoritmo criptográfico es desconocido. |
|
El mensaje no está codificado según lo previsto. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_VERIFY_SIGNATURE. |
|
Uno o varios argumentos no son válidos. Este error se puede devolver si el parámetro dwCtrlType está establecido en CMSG_CTRL_DECRYPT. |
|
No había suficiente memoria disponible para completar la operación. |
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | wincrypt.h |
Library | Crypt32.lib |
Archivo DLL | Crypt32.dll |