Функция 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.
Значение | Значение |
---|---|
|
Тип данных pvData: указатель на DWORD
Возвращает количество сертификатов атрибутов в сообщении SIGNED или ENVELOPED. |
|
Тип данных pvData: указатель на массив BYTE. Извлекает сертификат атрибута. Чтобы получить все сертификаты атрибутов, вызовите CryptMsgGetParam разных dwIndex , для которых задано 0 число атрибутов минус один. |
|
Тип данных pvData: указатель на массив BYTE. Извлекает закодированное содержимое закодированного криптографического сообщения без внешнего слоя структуры CONTENT_INFO. То есть возвращается только кодировка определенного PKCS #7 поля ContentInfo.content. |
|
Тип данных pvData: указатель на DWORD
Возвращает количество сертификатов в полученном сообщении SIGNED или ENVELOPED. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает сертификат подписывателя. Чтобы получить все сертификаты подписывателя, вызовите CryptMsgGetParam, изменяя dwIndex от 0 до количества доступных сертификатов минус один. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает хэш, вычисленный для данных в сообщении. Этот тип применим как для кодирования, так и для декодирования. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает все сообщение PKCS #7 из сообщения, открытого для кодирования. Извлекает внутреннее содержимое сообщения, открытого для декодирования. Если сообщение конвертировано, внутренний тип — данные, а для расшифровки сообщения был вызван CryptMsgControl , возвращается расшифрованное содержимое. Если внутренний тип не является данными, возвращается закодированный большой двоичный объект, требующий дальнейшего декодирования. Если сообщение не конвертировано, а внутреннее содержимое — DATA, то возвращаемые данные — это октеты внутреннего содержимого. Этот тип применим как для кодирования, так и для декодирования. Для декодирования, если тип CMSG_DATA, возвращаются октеты содержимого; в противном случае возвращается закодированное внутреннее содержимое. |
|
Тип данных pvData: указатель на DWORD
Возвращает количество отзыва сертификатов в полученном сообщении, сообщении SIGNED или ENVELOPED. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает список отзыва сертификатов. Чтобы получить все списки отзыва сертификатов, вызовите CryptMsgGetParam, изменяя dwIndex от 0 до числа доступных CRL минус один. |
|
Тип данных pvData: указатель на массив BYTE. Изменяет содержимое уже закодированного сообщения. Сначала сообщение должно быть декодировано с помощью вызова CryptMsgOpenToDecode. Затем изменение сообщения выполняется с помощью вызова CryptMsgControl, CryptMsgCountersign или CryptMsgCountersignEncoded. Затем сообщение кодируется снова с помощью вызова CryptMsgGetParam, указывая CMSG_ENCODED_MESSAGE для получения новой кодировки, отражающей внесенные изменения. Это можно использовать, например, для добавления атрибута метки времени в сообщение. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает закодированные сведения о подписывшем CMSG_SIGNER_INFO для подписывателя сообщений. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает зашифрованный хэш подписи. Обычно используется для выполнения метки времени. |
|
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.
Возвращает алгоритм шифрования, используемый для шифрования сообщения. |
|
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.
Возвращает алгоритм шифрования, используемый для шифрования сообщения ENVELOPED. |
|
Тип данных pvData: указатель на массив BYTE для структуры CRYPT_ALGORITHM_IDENTIFIER.
Возвращает хэш-алгоритм, используемый для хэширования сообщения при его создании. |
|
Тип данных pvData: указатель на массив BYTE. Возвращает хэш-значение, хранящееся в сообщении при его создании. |
|
Тип данных pvData: указатель на массив BYTE для получения строки идентификатора объекта (OID) с пустым завершением.
Возвращает внутренний тип содержимого полученного сообщения. Этот тип неприменим к сообщениям типа DATA. |
|
Тип данных pvData: указатель на DWORD
Возвращает число получателей транспорта ключей для полученного сообщения ENVELOPED. |
|
Тип данных pvData: указатель на DWORD
Возвращает общее число всех получателей сообщений, включая ключевых соглашений и получателей списка почты. |
|
Тип данных pvData: указатель на DWORD
Возвращает индекс получателя транспорта ключа, используемого для расшифровки сообщения ENVELOPED. Это значение доступно только после расшифровки сообщения. |
|
Тип данных pvData: указатель на DWORD
Возвращает индекс транспорта ключа, соглашения ключа или получателя списка почты, используемого для расшифровки сообщения ENVELOPED. |
|
Тип данных pvData: указатель на DWORD
Возвращает индекс зашифрованного ключа получателя соглашения о ключе, используемого для расшифровки сообщения ENVELOPED. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_INFO.
Возвращает сведения о сертификате получателя сообщения транспорта ключа. Чтобы получить сведения о сертификате для всех получателей сообщения транспорта ключа, повторно вызывайте CryptMsgGetParam, изменяя dwIndex от 0 до числа получателей минус один. Доступны и допустимы только элементы Issuer, SerialNumber и PublicKeyAlgorithm CERT_INFO структуры. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_CMS_RECIPIENT_INFO.
Возвращает сведения о транспорте ключа, соглашении ключа или получателе списка почты. Он не ограничивается ключевыми получателями транспортных сообщений. Чтобы получить сведения обо всех получателях сообщения, повторно вызывайте CryptMsgGetParam, изменяя dwIndex от 0 до числа получателей минус один. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ATTRIBUTES.
Возвращает проверенные атрибуты подписывателя сообщения. Чтобы получить атрибуты, прошедшие проверку подлинности для указанного подписывающего, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_INFO.
Возвращает сведения о подписывавшем сообщении, необходимом для идентификации сертификата подписывателя. Издателя сертификата и SerialNumber можно использовать для уникальной идентификации сертификата для извлечения. Чтобы получить сведения для всех подписывающих, повторно вызывайте CryptMsgGetParam с разным dwIndex от 0 до числа подписывающего минус один. Доступные допустимые данные содержат только поля Issuer и SerialNumber в структуре CERT_INFO . |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CERT_ID.
Возвращает сведения о подписывшем сообщении, необходимом для идентификации открытого ключа подписывателя. Это могут быть издателя сертификата и SerialNumber, KeyID или HashId. Чтобы получить сведения для всех подписывателей, вызовите CryptMsgGetParam разных dwIndex от 0 до числа подписывателей минус один. |
|
Тип данных pvData: указатель на DWORD
Возвращает число подписывателей полученного сообщения SIGNED. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ALGORITHM_IDENTIFIER.
Возвращает хэш-алгоритм, используемый подписывателем сообщения. Чтобы получить хэш-алгоритм для указанного подписывателя, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_SIGNER_INFO.
Возвращает сведения о подписывшем сообщении. Сюда входят издатель и серийный номер сертификата подписывателя, а также атрибуты сертификата подписывателя, прошедшие проверку подлинности и не прошедшие проверку подлинности. Чтобы получить сведения о подписывающем по всем подписывателям сообщения, вызовите CryptMsgGetParam разной dwIndex от 0 до числа подписывателей минус один. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_CMS_SIGNER_INFO.
Возвращает сведения о подписывшем сообщении. Сюда входят signerId, а также атрибуты, прошедшие проверку подлинности и не прошедшие проверку подлинности. Чтобы получить сведения о подписывающем по всем подписывателям сообщения, вызовите CryptMsgGetParam разной dwIndex от 0 до числа подписывателей минус один. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CRYPT_ATTRIBUTES.
Возвращает атрибуты подписывателя сообщения, которые не прошли проверку подлинности. Чтобы получить атрибуты без проверки подлинности для указанного подписывающего, вызовите CryptMsgGetParam с dwIndex , равным индексу этого подписывающего. |
|
Тип данных pvData: указатель на DWORD
Возвращает тип сообщения декодированного сообщения неизвестного типа. Полученный тип сообщения можно сравнить с поддерживаемыми типами, чтобы определить, можно ли продолжать обработку. Поддерживаемые типы сообщений см. в параметре dwMessageTypeв CryptMsgOpenToDecode. |
|
Тип данных pvData: указатель на массив BYTE для получения структуры CMSG_ATTR.
Возвращает незащищенные атрибуты в конвертированном сообщении. |
|
Тип данных pvData: указатель на DWORD
Возвращает версию декодированного сообщения. Дополнительные сведения см. в таблице в разделе Примечания. |
[in] dwIndex
Индекс извлекаемого параметра, если применимо. Если параметр не извлекается, этот параметр игнорируется и имеет значение 0.
[out] pvData
Указатель на буфер, который получает полученные данные. Форма этих данных зависит от значения параметра dwParamType .
Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.
При обработке данных, возвращаемых в этом буфере, приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного во входных данных. (На входных данных размеры буфера обычно указываются достаточно большими, чтобы гарантировать, что максимально возможные выходные данные поместятся в буфер.) В выходных данных переменная, на которую указывает этот параметр, обновляется с учетом фактического размера данных, скопированных в буфер.
[in, out] pcbData
Указатель на переменную, указывающую размер (в байтах) буфера, на который указывает параметр pvData . При возврате функции переменная, на которую указывает параметр pcbData , содержит количество байтов, хранящихся в буфере.
Возвращаемое значение
Если функция выполнена успешно, возвращается ненулевое значение (TRUE).
Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.
В следующей таблице перечислены коды ошибок, наиболее часто возвращаемые функцией GetLastError .
Код возврата | Описание |
---|---|
|
Сообщение не содержит запрошенных атрибутов. |
|
Недопустимое значение индекса. |
|
Недопустимый тип сообщения. |
|
Содержимое сообщения еще не расшифровывается. |
|
Идентификатор объекта имеет неправильный формат. |
|
Сообщение не закодировано должным образом. |
|
Один или несколько аргументов недопустимы. |
|
Указанный буфер недостаточно велик для хранения возвращаемых данных. |
Для 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 |