Décodage des données enveloppes

Les tâches générales requises pour décoder un message enveloppe sont représentées dans l’illustration suivante et décrites dans la liste qui la suit.

decoding enveloped data

La séquence d’événements pour décoder des données enveloppes à l’aide de la gestion des clés de transport clé, comme illustré dans l’illustration précédente, est la suivante :

  • Un pointeur vers le message en enveloppe numérique est récupéré.
  • Un magasin de certificats est ouvert.
  • À partir du message, l’ID de destinataire (Mon ID) est récupéré.
  • L’ID de destinataire est utilisé pour récupérer le certificat.
  • La clé privée associée à ce certificat est récupérée.
  • La clé privée est utilisée pour déchiffrer la clé symétrique (session).
  • L’algorithme de chiffrement est récupéré à partir du message.
  • À l’aide de la clé privée et de l’algorithme de chiffrement, les données sont déchiffrées.

La procédure suivante utilise des fonctions de message de bas niveau pour accomplir les tâches juste répertoriées.

Pour décoder un message enveloppe

  1. Obtenez un pointeur vers l’objet BLOB encodé.
  2. Appelez CryptMsgOpenToDecode, en passant les arguments nécessaires.
  3. Appelez CryptMsgUpdate une fois, en passant le handle récupéré à l’étape 2 et un pointeur vers les données à décoder. Cela entraîne l’exécution des actions appropriées sur le message, en fonction du type de message.
  4. Appelez CryptMsgGetParam, en passant le handle récupéré à l’étape 2 et CMSG_TYPE_PARAM pour vérifier que le message est du type de données enveloppe.
  5. Appelez à nouveau CryptMsgGetParam, en passant CMSG_INNER_CONTENT_TYPE_PARAM pour obtenir le type de données du contenu interne.
  6. Si le type de données de contenu interne est des données, procédez au déchiffrement et au décodage du contenu. Sinon, exécutez une procédure de décodage appropriée pour le type de données de contenu.
  7. En supposant que le type de contenu interne est « data », initialisez la structure de données CMSG_CTRL_DECRYPT_PARA et appelez CryptMsgControl, en passant CMSG_CTRL_DECRYPT et l’adresse de la structure. Le contenu sera déchiffré.
  8. Appelez CryptMsgGetParam, en passant CMSG_CONTENT_PARAM pour obtenir un pointeur vers l’objet BLOB de données de contenu décodé (chaîne BYTE ).
  9. Appelez CryptMsgClose pour fermer le message.

Le résultat de cette procédure est que le message est décodé et déchiffré et qu’un pointeur est récupéré vers l’objet BLOB de données de contenu.

Exemple de programme C : Encodage d’un message enveloppement signé