Функция 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
В следующей таблице приведены определенные в настоящее время флаги.
Значение | Значение |
---|---|
|
Указывает, что потоковые выходные данные не будут иметь внешнюю оболочку ContentInfo (как определено в PKCS 7). Это делает его пригодным для потоковой передачи во включающее сообщение. |
|
Указывает, что для последующих вызовов CryptMsgUpdate предоставляются отсоединяемые данные. |
|
Используется для вычисления размера кодировки DER сообщения, вложенного в конвертированное сообщение. Это особенно полезно при выполнении потоковой передачи. |
|
Внутреннее содержимое типа, отличного от данных, инкапсулируется в строку OCTET. Этот флаг применим как к подписанным, так и к конвертированному сообщениям. |
[in] dwMsgType
В следующей таблице приведены определенные в настоящее время типы сообщений.
Значение | Значение |
---|---|
|
Строка октета (BYTE). |
|
|
|
|
|
Не реализован. |
|
|
|
Не реализован. |
[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 . В следующей таблице перечислены наиболее часто возвращаемые коды ошибок.
Код возврата | Описание |
---|---|
|
Недопустимый тип сообщения. |
|
Алгоритм шифрования неизвестен. |
|
Один или несколько аргументов недопустимы. |
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |