Partager via


Fonction CryptSignAndEncodeCertificate (wincrypt.h)

La fonction CryptSignAndEncodeCertificate encode et signe un certificat, une liste de révocation de certificats (CRL), une liste d’approbation de certificat (CTL) ou une demande de certificat.

Cette fonction effectue les opérations suivantes :

  • Appelle CryptEncodeObject à l’aide de lpszStructType pour encoder les informations « à signer ».
  • Appelle CryptSignCertificate pour signer ces informations encodées.
  • Appelle à nouveau CryptEncodeObject , avec lpszStructType défini sur X509_CERT, pour encoder davantage les informations encodées signées et encodées résultantes.

Syntaxe

BOOL CryptSignAndEncodeCertificate(
  [in]      BCRYPT_KEY_HANDLE           hBCryptKey,
  [in]      DWORD                       dwKeySpec,
  [in]      DWORD                       dwCertEncodingType,
  [in]      LPCSTR                      lpszStructType,
  [in]      const void                  *pvStructInfo,
  [in]      PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
  [in]      const void                  *pvHashAuxInfo,
  [out]     BYTE                        *pbEncoded,
  [in, out] DWORD                       *pcbEncoded
);

Paramètres

[in] hBCryptKey

Handle du fournisseur de services de chiffrement (CSP) pour effectuer la signature. Ce handle est un handle HCRYPTPROV qui a été créé à l’aide de la fonction CryptAcquireContext ou d’un handle NCRYPT_KEY_HANDLE qui a été créé à l’aide de la fonction NCryptOpenKey . Les nouvelles applications doivent toujours passer un NCRYPT_KEY_HANDLE handle d’un fournisseur de solutions cloud CNG.

[in] dwKeySpec

Identifie la clé privée à utiliser à partir du conteneur du fournisseur. Il doit s’agir de l’une des valeurs suivantes. Ce paramètre est ignoré si une clé CNG est passée dans le paramètre hCryptProvOrNCryptKey .

Valeur Signification
AT_KEYEXCHANGE
Utilisez la clé d’échange de clé.
AT_SIGNATURE
Utilisez la clé de signature numérique.

[in] dwCertEncodingType

Spécifie le type d’encodage utilisé. Il peut s’agir de la valeur suivante.

Valeur Signification
X509_ASN_ENCODING
Spécifie l’encodage du certificat X.509 .

[in] lpszStructType

Pointeur vers une chaîne ANSI terminée par null qui contient le type de données à encoder et à signer. Les constantes lpszStructType prédéfinies suivantes sont utilisées avec les opérations d’encodage.

Valeur Signification
X509_CERT_CRL_TO_BE_SIGNED
pvStructInfo est l’adresse d’une structure de CRL_INFO .
X509_CERT_REQUEST_TO_BE_SIGNED
pvStructInfo est l’adresse d’une structure CERT_REQUEST_INFO .
X509_CERT_TO_BE_SIGNED
pvStructInfo est l’adresse d’une structure CERT_INFO .
X509_KEYGEN_REQUEST_TO_BE_SIGNED
pvStructInfo est l’adresse d’une structure CERT_KEYGEN_REQUEST_INFO .

[in] pvStructInfo

Adresse d’une structure qui contient les données à signer et à encoder. Le format de cette structure est déterminé par le paramètre lpszStructType .

[in] pSignatureAlgorithm

Pointeur vers une structure CRYPT_ALGORITHM_IDENTIFIER qui contient l’identificateur d’objet (OID) de l’algorithme de signature et tous les paramètres supplémentaires nécessaires. Cette fonction utilise les OID d’algorithme suivants :

  • szOID_RSA_MD5RSA
  • szOID_RSA_SHA1RSA
  • szOID_X957_SHA1DSA
Si l’algorithme de signature est un algorithme de hachage , la signature contient uniquement les octets de hachage non chiffrés. Une clé privée n’est pas utilisée pour chiffrer le hachage. dwKeySpec n’est pas utilisé et hCryptProvOrNCryptKey peut avoir la valeur NULL si un csp par défaut approprié peut être utilisé pour le hachage.

[in] pvHashAuxInfo

Réservé. Doit avoir la valeur NULL.

[out] pbEncoded

Pointeur vers une mémoire tampon pour recevoir la sortie signée et encodée.

Ce paramètre peut avoir la valeur NULL pour définir la taille de ces informations à des fins d’allocation de mémoire. Pour plus d’informations, consultez Récupération de données de longueur inconnue.

[in, out] pcbEncoded

Pointeur vers un DWORD qui contient la taille, en octets, de la mémoire tampon pointée par le paramètre pbEncoded . Lorsque la fonction retourne, le DWORD contient le nombre d’octets stockés ou à stocker dans la mémoire tampon.

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. (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.
 

Valeur retournée

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

Si la fonction échoue, la valeur de retour est zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Note Les erreurs des fonctions appelées CryptCreateHash, CryptSignHash et CryptHashData peuvent être propagées à cette fonction.
 
Les codes d’erreur possibles incluent, sans s’y limiter, les éléments suivants.
Code de retour Description
ERROR_MORE_DATA
Si la mémoire tampon spécifiée par le paramètre pbEncoded 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 pcbEncoded.
ERROR_FILE_NOT_FOUND
Type d’encodage de certificat non valide. Actuellement, seule X509_ASN_ENCODING est prise en charge.
NTE_BAD_ALGID
L’OID de l’algorithme de signature ne correspond pas à un algorithme de hachage connu ou pris en charge.
CRYPT_E_BAD_ENCODE
Une erreur s’est produite lors de l’encodage ou du décodage. La cause la plus probable de cette erreur est l’initialisation incorrecte des champs dans la structure pointée par pvStructInfo.
 

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.

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

CryptSignCertificate

fonctions Gestion des données