Fonction CryptVerifyMessageSignature (wincrypt.h)

La fonction CryptVerifyMessageSignature vérifie la signature d’un message signé.

Cette fonction ne doit pas être utilisée pour vérifier la signature d’un message détaché. Vous devez utiliser la fonction CryptVerifyDetachedMessageSignature pour vérifier la signature d’un message détaché.

Syntaxe

BOOL CryptVerifyMessageSignature(
  [in]            PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
  [in]            DWORD                      dwSignerIndex,
  [in]            const BYTE                 *pbSignedBlob,
  [in]            DWORD                      cbSignedBlob,
  [out]           BYTE                       *pbDecoded,
  [in, out]       DWORD                      *pcbDecoded,
  [out, optional] PCCERT_CONTEXT             *ppSignerCert
);

Paramètres

[in] pVerifyPara

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

[in] dwSignerIndex

Index de la signature souhaitée. Il peut y avoir plusieurs signatures. CryptVerifyMessageSignature peut être appelé à plusieurs reprises, incrémentant dwSignerIndex à chaque fois. Définissez ce paramètre sur zéro pour le premier signataire ou s’il n’existe qu’un seul signataire. Si la fonction retourne FALSE et que GetLastError retourne CRYPT_E_NO_SIGNER, l’appel précédent a traité le dernier signataire du message.

[in] pbSignedBlob

Pointeur vers une mémoire tampon qui contient le message signé.

[in] cbSignedBlob

Taille, en octets, de la mémoire tampon de messages signés.

[out] pbDecoded

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

Ce paramètre peut avoir la valeur NULL si le message décodé n’est pas nécessaire pour un traitement supplémentaire ou pour définir la taille du message à des fins d’allocation de mémoire. Pour plus d’informations, consultez Récupération de données de longueur inconnue.

[in, out] pcbDecoded

Pointeur vers une valeur DWORD qui spécifie la taille, en octets, de la mémoire tampon pbDecoded . Lorsque la fonction retourne, ce DWORD contient la taille, en octets, du message décodé. Le message décodé n’est pas retourné si ce paramètre a la valeur NULL.

Note Lors du traitement des données retournées, 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. (En 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 s’intègrent 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] ppSignerCert

Adresse d’un pointeur de structure CERT_CONTEXT qui reçoit le certificat du signataire. Une fois cette structure terminée, libérez-la en passant ce pointeur vers la fonction CertFreeCertificateContext . Ce paramètre peut avoir la valeur NULL si le certificat du signataire n’est pas nécessaire.

Valeur retournée

Si la fonction réussit, la fonction retourne une valeur différente de zéro. Cela ne signifie pas nécessairement que la signature a été vérifiée. Dans le cas d’un message détaché, la variable pointée vers par pcbDecoded contient zéro. Dans ce cas, cette fonction retourne une valeur différente de zéro, mais la signature n’est pas vérifiée. Pour vérifier la signature d’un message détaché, utilisez la fonction CryptVerifyDetachedMessageSignature .

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

Le tableau suivant montre les codes d’erreur les plus couramment retournés 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.
E_INVALIDARG
Types d’encodage de message et de certificat non valides. Actuellement, seuls les PKCS_7_ASN_ENCODING et les X509_ASN_ENCODING_TYPE sont pris en charge. CbSize non valide dans *pVerifyPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Pas un message de chiffrement signé.
CRYPT_E_NO_SIGNER
Le message n’a pas de signataires ni de signataire pour le dwSignerIndex spécifié.
NTE_BAD_ALGID
Le message a été haché et signé à l’aide d’un algorithme inconnu ou non pris en charge.
NTE_BAD_SIGNATURE
La signature du message n’a pas été vérifiée.
 
Note Les erreurs des fonctions appelées CryptCreateHash, CryptHashData, CryptVerifySignature et CryptImportKey peuvent être propagées à cette fonction.

Si la fonction échoue, GetLastError peut renvoyer une erreur d’encodage/décodage asN.1 ( Abstract Syntax Notation One ). Pour plus d’informations sur ces erreurs, consultez Valeurs de retour d’encodage/décodage ASN.1.

 

Remarques

Pour un signataire et un message vérifiés, ppSignerCert est mis à jour avec le CERT_CONTEXT du signataire. Il doit être libéré en appelant CertFreeCertificateContext. Sinon, ppSignerCert a la valeur NULL.

Pour un message qui contient uniquement des certificats et des listes de contrôle de contrôle, pcbDecoded a la valeur NULL.

Exemples

Pour obtenir un exemple qui utilise cette fonction, consultez Exemple de programme C : signature d’un message et vérification d’une signature de message.

Configuration requise

   
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

CryptSignMessage

CryptVerifyDetachedMessageSignature

Fonctions de message simplifiées