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

Функция CryptMsgGetParam получает параметр сообщения после того, как криптографическое сообщение было закодировано или декодировано. Эта функция вызывается после последнего вызова CryptMsgUpdate .

Синтаксис

BOOL CryptMsgGetParam(
  [in]      HCRYPTMSG hCryptMsg,
  [in]      DWORD     dwParamType,
  [in]      DWORD     dwIndex,
  [out]     void      *pvData,
  [in, out] DWORD     *pcbData
);

Параметры

[in] hCryptMsg

Дескриптор криптографического сообщения.

[in] dwParamType

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

Для закодированного сообщения допустимы только CMSG_BARE_CONTENT, CMSG_ENCODE_SIGNER, CMSG_CONTENT_PARAM и CMSG_COMPUTED_HASH_PARAM dwParamType.

Значение Значение
CMSG_ATTR_CERT_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает количество сертификатов атрибутов в сообщении SIGNED или ENVELOPED.

CMSG_ATTR_CERT_PARAM
Тип данных pvData: указатель на массив BYTE.

Извлекает сертификат атрибута. Чтобы получить все сертификаты атрибутов, вызовите CryptMsgGetParam разных dwIndex , для которых задано 0 число атрибутов минус один.

CMSG_BARE_CONTENT_PARAM
Тип данных pvData: указатель на массив BYTE.

Извлекает закодированное содержимое закодированного криптографического сообщения без внешнего слоя структуры CONTENT_INFO. То есть возвращается только кодировка определенного PKCS #7 поля ContentInfo.content.

CMSG_CERT_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает количество сертификатов в полученном сообщении SIGNED или ENVELOPED.

CMSG_CERT_PARAM
Тип данных pvData: указатель на массив BYTE.

Возвращает сертификат подписывателя. Чтобы получить все сертификаты подписывателя, вызовите CryptMsgGetParam, изменяя dwIndex от 0 до количества доступных сертификатов минус один.

CMSG_COMPUTED_HASH_PARAM
Тип данных pvData: указатель на массив BYTE.

Возвращает хэш, вычисленный для данных в сообщении. Этот тип применим как для кодирования, так и для декодирования.

CMSG_CONTENT_PARAM
Тип данных pvData: указатель на массив BYTE.

Возвращает все сообщение PKCS #7 из сообщения, открытого для кодирования. Извлекает внутреннее содержимое сообщения, открытого для декодирования. Если сообщение конвертировано, внутренний тип — данные, а для расшифровки сообщения был вызван CryptMsgControl , возвращается расшифрованное содержимое. Если внутренний тип не является данными, возвращается закодированный большой двоичный объект, требующий дальнейшего декодирования. Если сообщение не конвертировано, а внутреннее содержимое — DATA, то возвращаемые данные — это октеты внутреннего содержимого. Этот тип применим как для кодирования, так и для декодирования.

Для декодирования, если тип CMSG_DATA, возвращаются октеты содержимого; в противном случае возвращается закодированное внутреннее содержимое.

CMSG_CRL_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает количество отзыва сертификатов в полученном сообщении, сообщении SIGNED или ENVELOPED.

CMSG_CRL_PARAM
Тип данных pvData: указатель на массив BYTE.

Возвращает список отзыва сертификатов. Чтобы получить все списки отзыва сертификатов, вызовите CryptMsgGetParam, изменяя dwIndex от 0 до числа доступных CRL минус один.

CMSG_ENCODED_MESSAGE
Тип данных pvData: указатель на массив BYTE.

Изменяет содержимое уже закодированного сообщения. Сначала сообщение должно быть декодировано с помощью вызова CryptMsgOpenToDecode. Затем изменение сообщения выполняется с помощью вызова CryptMsgControl, CryptMsgCountersign или CryptMsgCountersignEncoded. Затем сообщение кодируется снова с помощью вызова CryptMsgGetParam, указывая CMSG_ENCODED_MESSAGE для получения новой кодировки, отражающей внесенные изменения. Это можно использовать, например, для добавления атрибута метки времени в сообщение.

CMSG_ENCODED_SIGNER
Тип данных pvData: указатель на массив BYTE.

Возвращает закодированные сведения о подписывшем CMSG_SIGNER_INFO для подписывателя сообщений.

CMSG_ENCRYPTED_DIGEST
Тип данных pvData: указатель на массив BYTE.

Возвращает зашифрованный хэш подписи. Обычно используется для выполнения метки времени.

CMSG_ENCRYPT_PARAM
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.

Возвращает алгоритм шифрования, используемый для шифрования сообщения.

CMSG_ENVELOPE_ALGORITHM_PARAM
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.

Возвращает алгоритм шифрования, используемый для шифрования сообщения ENVELOPED.

CMSG_HASH_ALGORITHM_PARAM
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.

Возвращает хэш-алгоритм, используемый для хэширования сообщения при его создании.

CMSG_HASH_DATA_PARAM
Тип данных pvData: указатель на массив BYTE.

Возвращает хэш-значение, хранящееся в сообщении при его создании.

CMSG_INNER_CONTENT_TYPE_PARAM
Тип данных pvData: указатель на массив BYTE для получения строки идентификатора объекта (OID) с пустым завершением.

Возвращает внутренний тип содержимого полученного сообщения. Этот тип неприменим к сообщениям типа DATA.

CMSG_RECIPIENT_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает число получателей транспорта ключей для полученного сообщения ENVELOPED.

CMSG_CMS_RECIPIENT_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает общее число всех получателей сообщений, включая ключевых соглашений и получателей списка почты.

CMSG_RECIPIENT_INDEX_PARAM
Тип данных pvData: указатель на DWORD

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

CMSG_CMS_RECIPIENT_INDEX_PARAM
Тип данных pvData: указатель на DWORD

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

CMSG_CMS_RECIPIENT_ENCRYPTED_KEY_INDEX_PARAM
Тип данных pvData: указатель на DWORD

Возвращает индекс зашифрованного ключа получателя соглашения о ключе, используемого для расшифровки сообщения ENVELOPED.

CMSG_RECIPIENT_INFO_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_INFO.

Возвращает сведения о сертификате получателя сообщения транспорта ключа. Чтобы получить сведения о сертификате для всех получателей сообщения транспорта ключа, повторно вызывайте CryptMsgGetParam, изменяя dwIndex от 0 до числа получателей минус один. Доступны и допустимы только элементы Issuer, SerialNumber и PublicKeyAlgorithm CERT_INFO структуры.

CMSG_CMS_RECIPIENT_INFO_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_CMS_RECIPIENT_INFO.

Возвращает сведения о транспорте ключа, соглашении ключа или получателе списка почты. Он не ограничивается ключевыми получателями транспортных сообщений. Чтобы получить сведения обо всех получателях сообщения, повторно вызывайте CryptMsgGetParam, изменяя dwIndex от 0 до числа получателей минус один.

CMSG_SIGNER_AUTH_ATTR_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ATTRIBUTES.

Возвращает проверенные атрибуты подписывателя сообщения. Чтобы получить атрибуты, прошедшие проверку подлинности для указанного подписывающего, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего.

CMSG_SIGNER_CERT_INFO_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_INFO.

Возвращает сведения о подписывавшем сообщении, необходимом для идентификации сертификата подписывателя. Издателя сертификата и SerialNumber можно использовать для уникальной идентификации сертификата для извлечения. Чтобы получить сведения для всех подписывающих, повторно вызывайте CryptMsgGetParam с разным dwIndex от 0 до числа подписывающего минус один. Доступные допустимые данные содержат только поля Issuer и SerialNumber в структуре CERT_INFO .

CMSG_SIGNER_CERT_ID_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_ID.

Возвращает сведения о подписывшем сообщении, необходимом для идентификации открытого ключа подписывателя. Это могут быть издателя сертификата и SerialNumber, KeyID или HashId. Чтобы получить сведения для всех подписывателей, вызовите CryptMsgGetParam разных dwIndex от 0 до числа подписывателей минус один.

CMSG_SIGNER_COUNT_PARAM
Тип данных pvData: указатель на DWORD

Возвращает число подписывателей полученного сообщения SIGNED.

CMSG_SIGNER_HASH_ALGORITHM_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ALGORITHM_IDENTIFIER.

Возвращает хэш-алгоритм, используемый подписывателем сообщения. Чтобы получить хэш-алгоритм для указанного подписывателя, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего.

CMSG_SIGNER_INFO_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_SIGNER_INFO.

Возвращает сведения о подписывшем сообщении. Сюда входят издатель и серийный номер сертификата подписывателя, а также атрибуты сертификата подписывателя, прошедшие проверку подлинности и не прошедшие проверку подлинности. Чтобы получить сведения о подписывающем по всем подписывателям сообщения, вызовите CryptMsgGetParam разной dwIndex от 0 до числа подписывателей минус один.

CMSG_CMS_SIGNER_INFO_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_CMS_SIGNER_INFO.

Возвращает сведения о подписывшем сообщении. Сюда входят signerId, а также атрибуты, прошедшие проверку подлинности и не прошедшие проверку подлинности. Чтобы получить сведения о подписывающем по всем подписывателям сообщения, вызовите CryptMsgGetParam разной dwIndex от 0 до числа подписывателей минус один.

CMSG_SIGNER_UNAUTH_ATTR_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ATTRIBUTES.

Возвращает атрибуты подписывателя сообщения, которые не прошли проверку подлинности. Чтобы получить атрибуты без проверки подлинности для указанного подписывающего, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего.

CMSG_TYPE_PARAM
Тип данных pvData: указатель на DWORD

Возвращает тип сообщения декодированного сообщения неизвестного типа. Полученный тип сообщения можно сравнить с поддерживаемыми типами, чтобы определить, можно ли продолжать обработку. Поддерживаемые типы сообщений см. в параметре dwMessageTypeв CryptMsgOpenToDecode.

CMSG_UNPROTECTED_ATTR_PARAM
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_ATTR.

Возвращает незащищенные атрибуты в конвертированном сообщении.

CMSG_VERSION_PARAM
Тип данных pvData: указатель на DWORD

Возвращает версию декодированного сообщения. Дополнительные сведения см. в таблице в разделе Примечания.

[in] dwIndex

Индекс извлекаемого параметра, если применимо. Если параметр не извлекается, этот параметр игнорируется и имеет значение 0.

[out] pvData

Указатель на буфер, который получает полученные данные. Форма этих данных зависит от значения параметра dwParamType .

Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

При обработке данных, возвращаемых в этом буфере, приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного во входных данных. (На входных данных размеры буфера обычно указываются достаточно большими, чтобы гарантировать, что максимально возможные выходные данные поместятся в буфер.) В выходных данных переменная, на которую указывает этот параметр, обновляется с учетом фактического размера данных, скопированных в буфер.

[in, out] pcbData

Указатель на переменную, указывающую размер (в байтах) буфера, на который указывает параметр pvData . При возврате функции переменная, на которую указывает параметр pcbData , содержит количество байтов, хранящихся в буфере.

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

Если функция выполнена успешно, возвращается ненулевое значение (TRUE).

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

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

Код возврата Описание
CRYPT_E_ATTRIBUTES_MISSING
Сообщение не содержит запрошенных атрибутов.
CRYPT_E_INVALID_INDEX
Недопустимое значение индекса.
CRYPT_E_INVALID_MSG_TYPE
Недопустимый тип сообщения.
CRYPT_E_NOT_DECRYPTED
Содержимое сообщения еще не расшифровывается.
CRYPT_E_OID_FORMAT
Идентификатор объекта имеет неправильный формат.
CRYPT_E_UNEXPECTED_ENCODING
Сообщение не закодировано должным образом.
E_INVALIDARG
Один или несколько аргументов недопустимы.
ERROR_MORE_DATA
Указанный буфер недостаточно велик для хранения возвращаемых данных.
 

Для CMSG_COMPUTED_HASH_PARAM dwParamType можно распространить ошибку из CryptGetHashParam.

В случае сбоя функции GetLastError может вернуть ошибку кодирования и декодирования абстрактного синтаксиса (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Комментарии

Следующие номера версий возвращаются вызовами CryptMsgGetParam с параметром dwParamType , для CMSG_VERSION_PARAM определены:

  • CMSG_SIGNED_DATA_V1
  • CMSG_SIGNED_DATA_V3
  • CMSG_SIGNED_DATA_PKCS_1_5_VERSION
  • CMSG_SIGNED_DATA_CMS_VERSION
  • CMSG_SIGNER_INFO_V1
  • CMSG_SIGNER_INFO_V3
  • CMSG_SIGNER_INFO_PKCS_1_5_VERSION
  • CMSG_SIGNER_INFO_CMS_VERSION
  • CMSG_HASHED_DATA_V0
  • CMSG_HASHED_DATA_V2
  • CMSG_HASHED_DATA_PKCS_1_5_VERSION
  • CMSG_HASHED_DATA_CMS_VERSION
  • CMSG_ENVELOPED_DATA_V0
  • CMSG_ENVELOPED_DATA_V2
  • CMSG_ENVELOPED_DATA_PKCS_1_5_VERSION
  • CMSG_ENVELOPED_DATA_CMS_VERSION

Примеры

Пример использования этой функции см. в разделах Пример программы C: подписывание, кодирование, декодирование и проверка сообщения, Альтернативный код для кодирования конвертированного сообщения, Пример программы C: кодирование конвертированного сообщения, подписанного сообщения и Пример программы C: кодирование и декодирование хэшированного сообщения.

Требования

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

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

CryptMsgOpenToDecode

CryptMsgOpenToEncode

CryptMsgUpdate

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

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