Partager via


Fonction CryptMsgCalculateEncodedLength (wincrypt.h)

La fonction CryptMsgCalculateEncodedLength calcule le nombre maximal d’octets nécessaires pour un message de chiffrement encodé en fonction du type de message, des paramètres d’encodage et de la longueur totale des données à encoder. Notez que le résultat sera toujours supérieur ou égal au nombre réel d’octets nécessaires.

Syntaxe

DWORD CryptMsgCalculateEncodedLength(
  [in]           DWORD      dwMsgEncodingType,
  [in]           DWORD      dwFlags,
  [in]           DWORD      dwMsgType,
  [in]           void const *pvMsgEncodeInfo,
  [in, optional] LPSTR      pszInnerContentObjID,
  [in]           DWORD      cbData
);

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 indicateurs actuellement définis sont indiqués dans le tableau suivant.

Valeur Signification
CMSG_BARE_CONTENT_FLAG
Indique que 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.
CMSG_DETACHED_FLAG
Indique que des données détachées sont fournies pour les appels suivants à CryptMsgUpdate.
CMSG_CONTENTS_OCTETS_FLAG
Utilisé pour calculer la taille d’un encodage DER d’un message à imbriquer à l’intérieur d’un message enveloppe. Cela est particulièrement utile lorsque la diffusion en continu est effectuée.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
Le contenu interne non de type de données est encapsulé dans une chaîne OCTET. Cet indicateur s’applique aux messages signés et enveloppes.

[in] dwMsgType

Les types de messages actuellement définis sont indiqués dans le tableau suivant.

Valeur Signification
CMSG_DATA
Chaîne d’octet (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Non implémenté.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Non implémenté.

[in] pvMsgEncodeInfo

Pointeur vers les données à encoder. Le type de données pointées vers dépend de la valeur de dwMsgType. Pour plus d’informations, consultez la table dwMsgType .

[in, optional] pszInnerContentObjID

Lorsque vous appelez CryptMsgCalculateEncodedLength avec des données fournies à CryptMsgUpdate déjà encodées, l’identificateur d’objet approprié 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 encodé en tant que chaîne d’octets et donné le type CMSG_DATA.

Lorsque la diffusion en continu est utilisée, pszInnerContentObjID doit être NULL ou szOID_RSA_data.

Les identificateurs d’objet d’algorithme suivants sont couramment utilisés :

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Un utilisateur peut définir une nouvelle utilisation interne du contenu . L’utilisateur doit s’assurer que l’expéditeur et le destinataire du message sont d’accord sur la sémantique associée à l’identificateur d’objet.

[in] cbData

Taille, en octets, du contenu.

Valeur retournée

Retourne la longueur requise pour un message de chiffrement encodé. Cette longueur n’est peut-être pas la longueur exacte, mais elle ne sera pas inférieure à la longueur requise. Zéro est retourné si la fonction échoue.

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.

Code de retour Description
CRYPT_E_INVALID_MSG_TYPE
Le type de message n'est pas valide.
CRYPT_E_UNKNOWN_ALGO
L’algorithme de chiffrement est inconnu.
E_INVALIDARG
Un ou plusieurs arguments ne sont pas valides.

Configuration requise

   
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

Voir aussi

CryptMsgOpenToEncode

Fonctions de message de bas niveau

Fonctions de message simplifiées