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. Lors de l’appel de CryptMsgOpenToEncode, si les données qui doivent être fournies à CryptMsgUpdate ont déjà été codées en 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é précédemment encodé et traité correctement.
- 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 l’encodage de données simples et générales, utilisez _ _ le paramètre de contenu CMSG pour 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 se présente comme suit.
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 assurer 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 la valeur zéro est passée dans le paramètre dwMsgType , la fonction lira le type de message dans l’en-tête du message. Si l’en-tête est manquant, l’appel de fonction échoue. En cas de réussite, un descripteur du message ouvert est retourné.
- Appelez CryptMsgUpdate une fois. Cela entraîne le suivi 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 ou une vérification de signature supplémentaire, 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 de 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.