Fonction CryptDecodeMessage (wincrypt.h)

La fonction CryptDecodeMessage décode, déchiffre et vérifie un message de chiffrement.

Cette fonction peut être utilisée lorsque le type de message de chiffrement est inconnu. Les constantes dwMsgTypeFlags peuvent être combinées avec une opération OR au niveau du bit afin que la fonction essaie de trouver l’un des types. Quand l’un des types est trouvé, la fonction signale le type trouvé et retourne les données appropriées à ce type.

Dans chaque passe, la fonction ne déchiffre qu’un seul niveau de chiffrement ou d’encodage. Pour un craquage supplémentaire, cette fonction, ou l’une des autres fonctions de message simplifié, doit être appelée à nouveau.

Syntaxe

BOOL CryptDecodeMessage(
  [in]                DWORD                       dwMsgTypeFlags,
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncodedBlob,
  [in]                DWORD                       cbEncodedBlob,
  [in]                DWORD                       dwPrevInnerContentType,
  [out, optional]     DWORD                       *pdwMsgType,
  [out, optional]     DWORD                       *pdwInnerContentType,
  [out, optional]     BYTE                        *pbDecoded,
  [in, out, optional] DWORD                       *pcbDecoded,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

Paramètres

[in] dwMsgTypeFlags

Indique le type de message. Les types de messages peuvent être combinés avec l’opérateur OR au niveau du bit. Ce paramètre peut être l’un des types de messages suivants :

  • CMSG_DATA_FLAG
  • CMSG_SIGNED_FLAG
  • CMSG_ENVELOPED_FLAG
  • CMSG_SIGNED_AND_ENVELOPED_FLAG
  • CMSG_HASHED_FLAG
Note Après retour, le DWORD pointé vers par pdwMsgType est défini avec le type du message.
 

[in] pDecryptPara

Pointeur vers une structure CRYPT_DECRYPT_MESSAGE_PARA qui contient des paramètres de déchiffrement.

[in] pVerifyPara

Pointeur vers une structure de CRYPT_VERIFY_MESSAGE_PARA qui contient des paramètres de vérification.

[in] dwSignerIndex

Indique quel signataire, parmi les nombreux signataires possibles d’un message, doit être vérifié. Cet index peut être modifié dans plusieurs appels à la fonction pour vérifier des signataires supplémentaires.

dwSignerIndex est défini sur zéro pour le premier signataire. Si la fonction retourne FALSE et que GetLastError retourne CRYPT_E_NO_SIGNER, l’appel précédent a renvoyé le dernier signataire du message. Ce paramètre est utilisé uniquement avec les messages de types CMSG_SIGNED_AND_ENVELOPED ou CMSG_SIGNED. Pour tous les autres types de messages, il doit être défini sur zéro.

[in] pbEncodedBlob

Pointeur vers l’objet BLOB encodé qui doit être décodé.

[in] cbEncodedBlob

Taille, en octets, de l’objet BLOB encodé.

[in] dwPrevInnerContentType

Applicable uniquement lors du traitement des messages de chiffrement imbriqués. Lors du traitement d’un message de chiffrement externe, il doit être défini sur zéro. Lors du décodage d’un message de chiffrement imbriqué, il est défini sur la valeur retournée à pdwInnerContentType par un appel précédent de CryptDecodeMessage pour le message externe. Il peut s’agir de l’un des types CMSG répertoriés dans pdwMsgType. Pour la compatibilité descendante, définissez dwPrevInnerContentType sur zéro.

[out, optional] pdwMsgType

Pointeur vers un DWORD qui spécifie le type de message retourné. Ce paramètre peut être l’un des types de messages suivants :

  • CMSG_DATA
  • CMSG_SIGNED
  • CMSG_ENVELOPED
  • CMSG_SIGNED_AND_ENVELOPED
  • CMSG_HASHED

[out, optional] pdwInnerContentType

Pointeur vers un DWORD qui spécifie le type d’un message interne. Les codes de type de message utilisés pour pdwMsgType sont également utilisés ici.

S’il n’y a pas d’imbrication de chiffrement, CMSG_DATA est retourné.

[out, optional] pbDecoded

Pointeur vers une mémoire tampon pour recevoir le message décodé.

Ce paramètre peut être NULL si le message décodé n’est pas requis ou pour définir la taille du message décodé à des fins d’allocation de mémoire. Un message décodé ne sera pas retourné si ce paramètre a la valeur NULL. Pour plus d’informations, consultez Récupération de données de longueur inconnue.

[in, out, optional] pcbDecoded

Pointeur vers une variable qui spécifie la taille, en octets, de la mémoire tampon pointée par le paramètre pbDecoded . Lorsque la fonction retourne, cette variable contient la taille du message décodé.

Note Lors du traitement des données retournées dans la mémoire tampon, les applications doivent utiliser la taille réelle des données retournées. La taille réelle peut être légèrement inférieure à la taille de la mémoire tampon spécifiée lors de l’entrée. (Lors de l’entrée, les tailles de mémoire tampon sont généralement spécifiées suffisamment grandes pour garantir que les données de sortie les plus volumineuses possibles tiennent dans la mémoire tampon.) En sortie, la variable pointée par ce paramètre est mise à jour pour refléter la taille réelle des données copiées dans la mémoire tampon.
 

[out, optional] ppXchgCert

Pointeur vers un pointeur vers une structure CERT_CONTEXT avec un certificat qui correspond à la clé d’échange privée nécessaire pour décoder le message. Ce paramètre est défini uniquement pour les types de messages CMSG_ENVELOPED et CMSG_SIGNED_AND_ENVELOPED.

[out, optional] ppSignerCert

Pointeur vers un pointeur vers une structure CERT_CONTEXT du contexte de certificat du signataire. Ce paramètre est défini uniquement pour les types de messages CMSG_SIGNED et CMSG_SIGNED_AND_ENVELOPED.

Valeur retournée

Si la fonction réussit, la fonction retourne une valeur différente de zéro (TRUE).

Si la fonction échoue, elle retourne zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Les fonctions CryptDecryptMessage, CryptVerifyMessageSignature ou CryptVerifyMessageHash peuvent être propagées à cette fonction.

Le code d’erreur suivant est généralement retourné par la fonction GetLastError .

Code de retour Description
ERROR_MORE_DATA
Si la mémoire tampon spécifiée par le paramètre pbDecoded n’est pas assez grande pour contenir les données retournées, la fonction définit le code ERROR_MORE_DATA et stocke la taille de mémoire tampon requise, en octets, dans la variable pointée par pcbDecoded.

Remarques

Le paramètre dwMsgTypeFlags spécifie l’ensemble des messages autorisés. Par exemple, pour décoder des messages SIGNED ou ENVELOPED, définissez dwMsgTypeFlags sur CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. Les paramètres pDecryptPara ou pVerifyPara , ou les deux, doivent être spécifiés.

Pour un message correctement décodé ou vérifié, les pointeurs de contexte de certificat pointés par ppXchgCert et ppSignerCert sont mis à jour. Ils doivent être libérés en appelant CertFreeCertificateContext. Si la fonction échoue, elles sont définies sur NULL.

Les paramètres ppXchgCert ou ppSignerCert peuvent être définis sur NULL avant l’appel de la fonction, ce qui indique que l’appelant n’est pas intéressé par l’obtention du certificat d’échange ou du contexte de certificat du signataire.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête wincrypt.h
Bibliothèque Crypt32.lib
DLL Crypt32.dll

Voir aussi

CryptDecryptMessage

CryptVerifyMessageHash

CryptVerifyMessageSignature

Fonctions de message simplifiées