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.
[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 |
---|---|
|
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. |
|
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. |
|
Pas un message de chiffrement signé. |
|
Le message n’a pas de signataires ni de signataire pour le dwSignerIndex spécifié. |
|
Le message a été haché et signé à l’aide d’un algorithme inconnu ou non pris en charge. |
|
La signature du message n’a pas été vérifiée. |
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 |