Procédure d’encodage et de décodage des messages
La procédure d’encodage d’un message général est la suivante.
Pour encoder un message
- Initialisez les structures de données appropriées pour le type de données souhaité.
- Appelez CryptMsgOpenToEncode en passant les arguments nécessaires. Lorsque vous appelez CryptMsgOpenToEncode, si les données à fournir à CryptMsgUpdate ont déjà été encodées dans un message, transmettez l’identificateur d’objet approprié dans pszInnerContentObjID (par exemple, « 1.2.840.113549.1.7.2 » pour szOID_RSA_signedData). Si pszInnerContentObjID a la valeur NULL, le type de contenu interne est supposé ne pas avoir été encodé précédemment et est traité de manière appropriée.
- Appelez CryptMsgUpdate autant de fois que nécessaire pour terminer le message. Lors du dernier appel, définissez le paramètre fFinal sur TRUE. (Pour plus d’informations, consultez CryptMsgUpdate).
- Appelez CryptMsgGetParam pour obtenir un pointeur vers les paramètres souhaités, tels que le contenu. Pour encoder des données simples et générales, utilisez CMSG_CONTENT_PARAM pour le dwParamtype.
- Fermez le message en appelant CryptMsgClose.
Cette procédure génère un message encodé d’un type spécifié dans les appels de fonction.
La procédure de décodage d’un message général est la suivante.
Pour décoder un message
- Déterminez la longueur nécessaire pour que la mémoire tampon contienne les données encodées à l’aide de CryptMsgCalculateEncodedLength.
- Appelez CryptMsgOpenToDecode en passant les arguments nécessaires. Pour maintenir la compatibilité avec Internet Explorer version 3.0, le paramètre dwMsgType est fourni. Les données signées créées dans Internet Explorer 3.0 ne contiennent pas d’informations d’en-tête. Par conséquent, si un tel message est extrait des signatures de fichier, le type de message doit être passé dans la fonction . Si zéro est passé dans le paramètre dwMsgType , la fonction lit le type de message à partir de l’en-tête du message. Si l’en-tête est manquant, l’appel de fonction échoue. En cas de réussite, un handle au message ouvert est retourné.
- Appelez CryptMsgUpdate une fois. Cela entraîne l’exécution des actions appropriées sur le message, en fonction du type de message.
- Pour un traitement supplémentaire du message, tel qu’un déchiffrement supplémentaire ou une vérification de signature, appelez CryptMsgControl, en passant l’action souhaitée dans dwCtrlType.
- Appelez CryptMsgGetParam pour obtenir un pointeur vers les paramètres souhaités, tels que le contenu. Pour décoder des données générales simples, utilisez CMSG_CONTENT_PARAM pour le paramètre dwParamtype .
- Appelez CryptMsgClose pour fermer le message.
Pour obtenir un exemple qui implémente ces étapes, consultez Exemple de programme C : encodage et décodage des données. Pour obtenir des procédures et un exemple illustrant le processus d’encodage, de décodage et de vérification de la signature d’un message signé, consultez Exemple de programme C : signature, encodage, décodage et vérification d’un message.