Compartilhar via


Função CryptMsgCalculateEncodedLength (wincrypt.h)

A função CryptMsgCalculateEncodedLength calcula o número máximo de bytes necessários para uma mensagem criptográfica codificada, dado o tipo de mensagem, os parâmetros de codificação e o comprimento total dos dados a serem codificados. Observe que o resultado sempre será maior ou igual ao número real de bytes necessários.

Sintaxe

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 o tipo de codificação usado. É sempre aceitável especificar os tipos de codificação de certificado e mensagem combinando-os com uma operação OR bit a bit, conforme mostrado no exemplo a seguir:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Os tipos de codificação definidos no momento são:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

Os sinalizadores definidos atualmente são mostrados na tabela a seguir.

Valor Significado
CMSG_BARE_CONTENT_FLAG
Indica que a saída transmitida não terá um wrapper ContentInfo externo (conforme definido pelo PKCS nº 7). Isso o torna adequado para ser transmitido para uma mensagem delimitada.
CMSG_DETACHED_FLAG
Indica que há dados desanexados sendo fornecidos para as chamadas subsequentes para CryptMsgUpdate.
CMSG_CONTENTS_OCTETS_FLAG
Usado para calcular o tamanho de uma codificação DER de uma mensagem a ser aninhada dentro de uma mensagem em envelope. Isso é particularmente útil quando o streaming está sendo executado.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
O conteúdo interno do tipo não Data é encapsulado em uma CADEIA DE CARACTERES OCTET. Esse sinalizador é aplicável a mensagens assinadas e envelopes.

[in] dwMsgType

Os tipos de mensagem definidos atualmente são mostrados na tabela a seguir.

Valor Significado
CMSG_DATA
Uma cadeia de caracteres de octeto (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Não implementado.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Não implementado.

[in] pvMsgEncodeInfo

Um ponteiro para os dados a serem codificados. O tipo de dados apontados depende do valor de dwMsgType. Para obter detalhes, consulte a tabela dwMsgType .

[in, optional] pszInnerContentObjID

Ao chamar CryptMsgCalculateEncodedLength com os dados fornecidos para CryptMsgUpdate já codificados, o identificador de objeto apropriado é passado em pszInnerContentObjID. Se pszInnerContentObjID for NULL, o tipo de conteúdo interno será considerado não ter sido codificado anteriormente e será codificado como uma cadeia de caracteres de octeto e dado o tipo CMSG_DATA.

Quando o streaming está sendo usado, pszInnerContentObjID deve ser NULL ou szOID_RSA_data.

Os seguintes identificadores de objeto de algoritmo são comumente usados:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Um usuário pode definir o novo uso de conteúdo interno . O usuário deve garantir que o remetente e o receptor da mensagem concordem com a semântica associada ao identificador do objeto.

[in] cbData

O tamanho, em bytes, do conteúdo.

Valor retornado

Retorna o comprimento necessário para uma mensagem criptográfica codificada. Esse comprimento pode não ter o comprimento exato, mas não será menor que o comprimento necessário. Zero será retornado se a função falhar.

Para recuperar informações de erro estendidas, use a função GetLastError . A tabela a seguir lista os códigos de erro mais comumente retornados.

Código de retorno Descrição
CRYPT_E_INVALID_MSG_TYPE
O tipo de mensagem não é válido.
CRYPT_E_UNKNOWN_ALGO
O algoritmo criptográfico é desconhecido.
E_INVALIDARG
Um ou mais argumentos não são válidos.

Requisitos

   
Cliente mínimo com suporte Windows XP [aplicativos da área de trabalho | aplicativos UWP]
Servidor mínimo com suporte Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

Cryptmsgopentoencode

Funções de mensagem de baixo nível

Funções de mensagem simplificadas