Función CryptMsgCalculateEncodedLength (wincrypt.h)

La función CryptMsgCalculateEncodedLength calcula el número máximo de bytes necesarios para un mensaje criptográfico codificado dado el tipo de mensaje, los parámetros de codificación y la longitud total de los datos que se van a codificar. Tenga en cuenta que el resultado siempre será mayor o igual que el número real de bytes necesarios.

Sintaxis

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

Parámetros

[in] dwMsgEncodingType

Especifica el tipo de codificación usado. Siempre es aceptable especificar los tipos de codificación de certificados y mensajes al combinarlos con una operación OR bit a bit, como se muestra en el ejemplo siguiente:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Los tipos de codificación definidos actualmente son:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

Las marcas definidas actualmente se muestran en la tabla siguiente.

Valor Significado
CMSG_BARE_CONTENT_FLAG
Indica que la salida transmitida no tendrá un contenedor ContentInfo externo (tal y como se define en PKCS #7). Esto hace que sea adecuado transmitirse a un mensaje envolvente.
CMSG_DETACHED_FLAG
Indica que se proporcionan datos desasociados para las llamadas posteriores a CryptMsgUpdate.
CMSG_CONTENTS_OCTETS_FLAG
Se usa para calcular el tamaño de una codificación DER de un mensaje que se va a anidar dentro de un mensaje sobre. Esto es especialmente útil cuando se realiza el streaming.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
El contenido interno que no es de tipo de datos se encapsula dentro de una CADENA OCTET. Esta marca es aplicable para los mensajes firmados y sobres.

[in] dwMsgType

Los tipos de mensaje definidos actualmente se muestran en la tabla siguiente.

Valor Significado
CMSG_DATA
Cadena de octeto (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Sin implementar.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Sin implementar.

[in] pvMsgEncodeInfo

Puntero a los datos que se van a codificar. El tipo de datos a los que se apunta depende del valor de dwMsgType. Para más información, consulte la tabla dwMsgType .

[in, optional] pszInnerContentObjID

Al llamar a CryptMsgCalculateEncodedLength con los datos proporcionados a CryptMsgUpdate ya codificados, el identificador de objeto adecuado se pasa en pszInnerContentObjID. Si pszInnerContentObjID es NULL, se supone que el tipo de contenido interno no se ha codificado previamente y se codifica como una cadena de octeto y se le asigna el tipo CMSG_DATA.

Cuando se usa streaming, pszInnerContentObjID debe ser NULL o szOID_RSA_data.

Normalmente se usan los siguientes identificadores de objeto de algoritmo:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Un usuario puede definir un nuevo uso de contenido interno . El usuario debe asegurarse de que el remitente y el receptor del mensaje están de acuerdo con la semántica asociada al identificador de objeto.

[in] cbData

Tamaño, en bytes, del contenido.

Valor devuelto

Devuelve la longitud necesaria para un mensaje criptográfico codificado. Esta longitud puede no ser la longitud exacta, pero no será menor que la longitud necesaria. Se devuelve cero si se produce un error en la función.

Para recuperar información de error extendida, use la función GetLastError . En la tabla siguiente se enumeran los códigos de error que se devuelven con más frecuencia.

Código devuelto Descripción
CRYPT_E_INVALID_MSG_TYPE
Tipo de mensaje no válido.
CRYPT_E_UNKNOWN_ALGO
El algoritmo criptográfico es desconocido.
E_INVALIDARG
Uno o varios argumentos no son válidos.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptMsgOpenToEncode

Funciones de mensaje de bajo nivel

Funciones de mensaje simplificadas