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
[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é.
[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 |
---|---|
|
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 |