Функция CryptMsgCalculateEncodedLength (wincrypt.h)

Функция CryptMsgCalculateEncodedLength вычисляет максимальное количество байтов, необходимое для закодированного криптографического сообщения, учитывая тип сообщения, параметры кодирования и общую длину закодированных данных. Обратите внимание, что результат всегда будет больше или равен фактическому количеству необходимых байтов.

Синтаксис

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

Параметры

[in] dwMsgEncodingType

Указывает используемый тип кодирования. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

В настоящее время определены следующие типы кодирования:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] dwFlags

В следующей таблице приведены определенные в настоящее время флаги.

Значение Значение
CMSG_BARE_CONTENT_FLAG
Указывает, что потоковые выходные данные не будут иметь внешнюю оболочку ContentInfo (как определено в PKCS 7). Это делает его пригодным для потоковой передачи во включающее сообщение.
CMSG_DETACHED_FLAG
Указывает, что для последующих вызовов CryptMsgUpdate предоставляются отсоединяемые данные.
CMSG_CONTENTS_OCTETS_FLAG
Используется для вычисления размера кодировки DER сообщения, вложенного в конвертированное сообщение. Это особенно полезно при выполнении потоковой передачи.
CMSG_CMS_ENCAPSULATED_CONTENT_FLAG
Внутреннее содержимое типа, отличного от данных, инкапсулируется в строку OCTET. Этот флаг применим как к подписанным, так и к конвертированному сообщениям.

[in] dwMsgType

В следующей таблице приведены определенные в настоящее время типы сообщений.

Значение Значение
CMSG_DATA
Строка октета (BYTE).
CMSG_SIGNED

CMSG_SIGNED_ENCODE_INFO

CMSG_ENVELOPED

CMSG_ENVELOPED_ENCODE_INFO

CMSG_SIGNED_AND_ENVELOPED
Не реализован.
CMSG_HASHED

CMSG_HASHED_ENCODE_INFO

CMSG_ENCRYPTED
Не реализован.

[in] pvMsgEncodeInfo

Указатель на кодируемые данные. Тип данных, на который указывает , зависит от значения dwMsgType. Дополнительные сведения см. в таблице dwMsgType .

[in, optional] pszInnerContentObjID

При вызове CryptMsgCalculateEncodedLength с данными, предоставленными в CryptMsgUpdate , соответствующий идентификатор объекта передается в pszInnerContentObjID. Если pszInnerContentObjID имеет значение NULL, предполагается, что внутренний тип контента не был закодирован ранее и кодируется как строка октета и получает тип CMSG_DATA.

При использовании потоковой передачи параметр pszInnerContentObjID должен иметь значение NULL или szOID_RSA_data.

Обычно используются следующие идентификаторы объектов алгоритма:

  • szOID_RSA_data
  • szOID_RSA_signedData
  • szOID_RSA_envelopedData
  • szOID_RSA_signEnvData
  • szOID_RSA_digestedData
  • szOID_RSA_encryptedData
  • SPC_INDIRECT_DATA_OBJID
Пользователь может определить новое внутреннее использование содержимого . Пользователь должен убедиться, что отправитель и получатель сообщения согласуют семантику, связанную с идентификатором объекта.

[in] cbData

Размер содержимого (в байтах).

Возвращаемое значение

Возвращает необходимую длину для закодированного криптографического сообщения. Эта длина не может быть точной, но она не будет меньше требуемой длины. Если функция завершается сбоем, возвращается ноль.

Чтобы получить расширенные сведения об ошибке, используйте функцию GetLastError . В следующей таблице перечислены наиболее часто возвращаемые коды ошибок.

Код возврата Описание
CRYPT_E_INVALID_MSG_TYPE
Недопустимый тип сообщения.
CRYPT_E_UNKNOWN_ALGO
Алгоритм шифрования неизвестен.
E_INVALIDARG
Один или несколько аргументов недопустимы.

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CryptMsgOpenToEncode

Функции сообщений низкого уровня

Упрощенные функции сообщений