Partager via


Fonction CryptDecryptAndVerifyMessageSignature (wincrypt.h)

La fonction CryptDecryptAndVerifyMessageSignature déchiffre un message et vérifie sa signature.

Syntaxe

BOOL CryptDecryptAndVerifyMessageSignature(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                PCRYPT_VERIFY_MESSAGE_PARA  pVerifyPara,
  [in]                DWORD                       dwSignerIndex,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert,
  [out, optional]     PCCERT_CONTEXT              *ppSignerCert
);

Paramètres

[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

Identifie un signataire particulier du message. Un message peut être signé par plusieurs signataires et cette fonction peut être appelée plusieurs fois en modifiant ce paramètre en case activée pour plusieurs signataires. Il 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 reçu le dernier signataire du message.

[in] pbEncryptedBlob

Pointeur vers le message signé, encodé et chiffré à déchiffrer et à vérifier.

[in] cbEncryptedBlob

Taille, en octets, du message chiffré.

[out, optional] pbDecrypted

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

Ce paramètre peut avoir la valeur NULL si le message déchiffré n’est pas requis ou pour définir la taille du message déchiffré à des fins d’allocation de mémoire. Un message déchiffré n’est 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] pcbDecrypted

Pointeur vers un DWORD qui spécifie la taille, en octets, de la mémoire tampon pointée vers le paramètre pbDecrypted . Lorsque la fonction retourne, elle contient la taille du message déchiffré copié dans pbDecrypted.

Note Lors du traitement des données retournées dans la mémoire tampon pbDecrypted , 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 dans pcbDecrypted en entrée. En sortie, la variable pointée vers ce paramètre est définie pour refléter la taille réelle des données copiées dans la mémoire tampon.
 

[out, optional] ppXchgCert

Pointeur vers une structure de CERT_CONTEXT du certificat qui correspond à la clé d’échange privée nécessaire pour déchiffrer le message.

[out, optional] ppSignerCert

Pointeur vers une structure CERT_CONTEXT du certificat du signataire.

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.

Note Les erreurs des fonctions appelées CryptDecryptMessage et CryptVerifyMessageSignature peuvent être propagées à cette fonction.
 
La fonction GetLastError retourne le code d’erreur suivant le plus souvent.
Code de retour Description
ERROR_MORE_DATA
Si la mémoire tampon spécifiée par le paramètre pbDecrypted 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 pcbDecrypted.

Remarques

Pour un message correctement déchiffré et 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, ils sont définis sur NULL.

Pour indiquer que l’appelant n’est pas intéressé par le certificat exchange ou le contexte de certificat du signataire, définissez les paramètres ppXchgCert et ppSignerCert sur NULL.

Exemples

Pour obtenir un exemple qui utilise cette fonction, consultez Exemple de programme C : envoi et réception d’un message signé et chiffré.

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

CryptSignAndEncryptMessage

Fonctions de message simplifiées