Fonction CryptMsgOpenToEncode (wincrypt.h)
La fonction CryptMsgOpenToEncode ouvre un message de chiffrement pour l’encodage et retourne un handle du message ouvert. Le message reste ouvert jusqu’à ce que CryptMsgClose soit appelé.
Syntaxe
HCRYPTMSG CryptMsgOpenToEncode(
[in] DWORD dwMsgEncodingType,
[in] DWORD dwFlags,
[in] DWORD dwMsgType,
[in] void const *pvMsgEncodeInfo,
[in, optional] LPSTR pszInnerContentObjID,
[in] PCMSG_STREAM_INFO pStreamInfo
);
Paramètres
[in] dwMsgEncodingType
Spécifie le type d’encodage utilisé. Il est toujours acceptable de spécifier les types d’encodage de certificat et de message en les combinant avec une opération OR au niveau du bit, comme illustré dans l’exemple suivant :
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
Les types d’encodage actuellement définis sont les suivants :
- X509_ASN_ENCODING
- PKCS_7_ASN_ENCODING
[in] dwFlags
Les dwFlags actuellement définis sont indiqués dans le tableau suivant.
Valeur | Signification |
---|---|
|
La sortie diffusée en continu n’aura pas de wrapper ContentInfo externe (tel que défini par PKCS #7). Cela le rend approprié pour être diffusé en continu dans un message englobant. |
|
Des données détachées sont fournies pour les appels suivants à CryptMsgUpdate. |
|
Les attributs authentifiés sont obligés d’être inclus dans SignerInfo (tel que défini par PKCS #7) dans les cas où ils ne seraient pas requis autrement. |
|
Utilisé lors du calcul de la taille d’un message qui a été encodé à l’aide de Distinguished Encoding Rules (DER) et qui est imbriqué à l’intérieur d’un message enveloppe. Cela est particulièrement utile lors de la diffusion en continu. |
|
Lorsqu’il est défini, le contenu interne non-type de données est encapsulé dans une chaîne OCTET. Applicable aux messages signés et enveloppes. |
|
S’il est défini, le hCryptProv passé à cette fonction est publié sur la dernière version de CryptMsgUpdate. Le handle n’est pas libéré si la fonction échoue.
Note Les hCryptProvdes destinataires de l’enveloppe ne sont pas libérés.
|
[in] dwMsgType
Indique le type de message. Il doit s’agir de l’une des valeurs suivantes.
Valeur | Signification |
---|---|
|
Cette valeur n'est pas utilisée. |
|
Le paramètre pvMsgEncodeInfo est l’adresse d’une structure CMSG_SIGNED_ENCODE_INFO qui contient les informations d’encodage. |
|
Le paramètre pvMsgEncodeInfo est l’adresse d’une structure CMSG_ENVELOPED_ENCODE_INFO qui contient les informations d’encodage. |
|
Cette valeur n’est actuellement pas implémentée. |
|
Le paramètre pvMsgEncodeInfo est l’adresse d’une structure CMSG_HASHED_ENCODE_INFO qui contient les informations d’encodage. |
[in] pvMsgEncodeInfo
Adresse d’une structure qui contient les informations d’encodage. Le type de données dépend de la valeur du paramètre dwMsgType . Pour plus d’informations, consultez dwMsgType.
[in, optional] pszInnerContentObjID
Si CryptMsgCalculateEncodedLength est appelé et que les données de CryptMsgUpdate ont déjà été encodées par message, l’identificateur d’objet approprié (OID) est passé dans pszInnerContentObjID. Si pszInnerContentObjID a la valeur NULL, le type de contenu interne est supposé ne pas avoir été encodé précédemment et est donc encodé en tant que chaîne d’octets et donné le type CMSG_DATA.
- szOID_RSA_data
- szOID_RSA_signedData
- szOID_RSA_envelopedData
- szOID_RSA_signEnvData
- szOID_RSA_digestedData
- szOID_RSA_encryptedData
- SPC_INDIRECT_DATA_OBJID
[in] pStreamInfo
Lorsque la diffusion en continu est utilisée, ce paramètre est l’adresse d’une structure CMSG_STREAM_INFO . La fonction de rappel spécifiée par le membre pfnStreamOutput de la structure CMSG_STREAM_INFO est appelée lors de l’exécution de CryptMsgUpdate . Le rappel est passé les octets encodés qui résultent de l’encodage. Pour plus d’informations sur l’utilisation du rappel, consultez CMSG_STREAM_INFO.
La diffusion en continu n’est pas utilisée avec le type de message CMSG_HASHED . Lorsque vous traitez des données hachées, ce paramètre doit être défini sur NULL.
Considérez le cas d’un message signé placé dans un message enveloppe. La sortie encodée à partir de l’encodage en continu du message signé est redirigée vers un autre encodage de streaming du message enveloppé. Le rappel pour l’encodage de streaming appelle CryptMsgUpdate pour encoder le message enveloppe. Le rappel du message enveloppé reçoit les octets encodés du message signé imbriqué.
Valeur retournée
Si la fonction réussit, elle retourne un handle au message ouvert. Ce handle doit être fermé lorsqu’il n’est plus nécessaire en le transmettant à la fonction CryptMsgClose .
Si cette fonction échoue, null est retourné.
Pour récupérer des informations d’erreur étendues, utilisez la fonction GetLastError .
Le tableau suivant répertorie les codes d’erreur les plus couramment retournés par la fonction GetLastError .
Code de retour | Description |
---|---|
|
Le type de message n'est pas valide. |
|
L’OID est mal formaté. |
|
L’algorithme de chiffrement est inconnu. |
|
Un ou plusieurs arguments ne sont pas valides. |
|
Il n’y a pas assez de mémoire. |
En outre, si dwMsgType est CMSG_SIGNED, les erreurs peuvent être propagées à partir de CryptCreateHash.
Si dwMsgType est CMSG_ENVELOPED, les erreurs peuvent être propagées à partir de CryptGenKey, CryptImportKey et CryptExportKey.
Si dwMsgType est CMSG_HASHED, les erreurs peuvent être propagées à partir de CryptCreateHash.
Remarques
Pour les fonctions qui effectuent le chiffrement, les clés symétriques chiffrées sont inversées du format little-endian au format big-endian après l’appel interne de CryptExportKey . Pour les fonctions qui effectuent le déchiffrement, les clés symétriques chiffrées sont inversées du format big-endian au format little-endian avant l’appel de CryptImportKey .
CRYPT_NO_SALT est spécifié lorsque des clés symétriques sont générées et importées avec CryptGenKey et CryptImportKey.
Les messages chiffrés avec l’algorithme de chiffrement RC2 utilisent KP_EFFECTIVE_KEYLEN avec CryptGetKeyParam pour déterminer la longueur effective des clés d’importation ou d’exportation de clé RC2.
Pour les messages chiffrés avec l’algorithme de chiffrement RC2, les opérations d’encodage et de décodage ont été mises à jour pour gérer les paramètres ASN RC2 pour le membre ContentEncryptionAlgorithm de la structure CMSG_ENVELOPED_ENCODE_INFO .
Pour les messages chiffrés avec les algorithmes de chiffrement RC4, DES et 3DES, les opérations d’encodage et de décodage gèrent désormais le paramètre de chaîne d’octet ASN IV pour le membre ContentEncryptionAlgorithm de la structure CMSG_ENVELOPED_ENCODE_INFO .
Exemples
Pour obtenir des exemples qui utilisent cette fonction, consultez Exemple de programme C : signature, encodage, décodage et vérification d’un message, Code de substitution pour l’encodage d’un message enveloppe,exemple de programme C : encodage d’un message enveloppe, message signé et exemple de programme C : encodage et décodage d’un message haché.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | wincrypt.h |
Bibliothèque | Crypt32.lib |
DLL | Crypt32.dll |