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 |
---|---|
|
Utilisez la clé d’échange de clé. |
|
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 |
---|---|
|
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 |
---|---|
|
pvStructInfo est l’adresse d’une structure de CRL_INFO . |
|
pvStructInfo est l’adresse d’une structure CERT_REQUEST_INFO . |
|
pvStructInfo est l’adresse d’une structure CERT_INFO . |
|
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
[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.
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.
Code de retour | Description |
---|---|
|
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. |
|
Type d’encodage de certificat non valide. Actuellement, seule X509_ASN_ENCODING est prise en charge. |
|
L’OID de l’algorithme de signature ne correspond pas à un algorithme de hachage connu ou pris en charge. |
|
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 |