Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El procedimiento para codificar un mensaje general es el siguiente.
Codificar un mensaje
- Inicialice las estructuras de datos adecuadas para el tipo de datos deseado.
- Llame a CryptMsgOpenToEncode, pasando los argumentos necesarios. Al llamar a CryptMsgOpenToEncode, si los datos que se van a proporcionar a CryptMsgUpdate ya se han codificado en el mensaje, pase el identificador de objeto adecuado en pszInnerContentObjID (por ejemplo, "1.2.840.113549.1.7.2" para szOID_RSA_signedData). Si pszInnerContentObjID es NULL, se supone que el tipo de contenido interno no se ha codificado previamente y se procesa correctamente.
- Llame a CryptMsgUpdate tantas veces como sea necesario para completar el mensaje. En la última llamada, establezca el parámetro fFinal en TRUE. (Para obtener más información, consulte CryptMsgUpdate).
- Llame a CryptMsgGetParam para obtener un puntero a los parámetros deseados, como el contenido. Para la codificación de datos simples y generales, utilice CMSG_CONTENT_PARAM para el dwParamtype.
- Cierre el mensaje llamando a CryptMsgClose.
Este procedimiento da como resultado un mensaje codificado de un tipo especificado en las llamadas de función.
El procedimiento para descodificar un mensaje general es el siguiente.
Para descodificar un mensaje
- Determine la longitud necesaria para que el búfer contenga los datos codificados mediante CryptMsgCalculateEncodedLength.
- Llame a CryptMsgOpenToDecode, pasando los argumentos necesarios. Para mantener la compatibilidad con Internet Explorer versión 3.0, se proporciona el parámetro dwMsgType. Los datos firmados creados en Internet Explorer 3.0 no contienen información de encabezado. Por lo tanto, si se extrae tal mensaje de las firmas de los archivos, el tipo de mensaje se debe pasar a la función. Si se pasa un cero al parámetro dwMsgType, entonces la función leerá el tipo de mensaje del encabezado del mensaje. Si falta el encabezado, se producirá un error en la llamada a la función. Si se ejecuta correctamente, se devuelve un identificador para el mensaje abierto.
- Llame a CryptMsgUpdate una vez. Esto hace que se realicen las acciones adecuadas en el mensaje, en función del tipo de mensaje.
- Para un procesamiento adicional del mensaje, como el descifrado adicional o la comprobación de firmas, llame a CryptMsgControl, pasando la acción deseada en dwCtrlType.
- Llame a CryptMsgGetParam para obtener un puntero a los parámetros deseados, como el contenido. Para descodificar datos generales simples, use CMSG_CONTENT_PARAM para el parámetro dwParamtype .
- Llame a CryptMsgClose para cerrar el mensaje.
Para obtener un ejemplo que implemente estos pasos, vea Programa C de ejemplo: Codificación y descodificación de datos. Para ver procedimientos y un ejemplo que muestra el proceso de codificación, descodificación y comprobación de la firma de un mensaje firmado, vea Programa C de ejemplo: Firma, Codificación, Descodificación y Comprobación de un mensaje.