Функция CryptDecodeMessage (wincrypt.h)
Функция CryptDecodeMessage декодирует, расшифровывает и проверяет криптографическое сообщение.
Эту функцию можно использовать, если тип криптографического сообщения неизвестен. Константы dwMsgTypeFlags можно объединить с побитовой операцией OR , чтобы функция попыталась найти один из типов. При обнаружении одного из типов функция сообщает об обнаружении типа и возвращает данные, соответствующие такому типу.
В каждом проходе функция щелкает только один уровень шифрования или кодирования. Для дополнительного взлома эта функция или одна из других упрощенных функций сообщений должна быть вызвана еще раз.
Синтаксис
BOOL CryptDecodeMessage(
[in] DWORD dwMsgTypeFlags,
[in] PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
[in] PCRYPT_VERIFY_MESSAGE_PARA pVerifyPara,
[in] DWORD dwSignerIndex,
[in] const BYTE *pbEncodedBlob,
[in] DWORD cbEncodedBlob,
[in] DWORD dwPrevInnerContentType,
[out, optional] DWORD *pdwMsgType,
[out, optional] DWORD *pdwInnerContentType,
[out, optional] BYTE *pbDecoded,
[in, out, optional] DWORD *pcbDecoded,
[out, optional] PCCERT_CONTEXT *ppXchgCert,
[out, optional] PCCERT_CONTEXT *ppSignerCert
);
Параметры
[in] dwMsgTypeFlags
Указывает тип сообщения. Типы сообщений можно объединить с оператором bitwise-OR . Этот параметр может быть одним из следующих типов сообщений:
- CMSG_DATA_FLAG
- CMSG_SIGNED_FLAG
- CMSG_ENVELOPED_FLAG
- CMSG_SIGNED_AND_ENVELOPED_FLAG
- CMSG_HASHED_FLAG
[in] pDecryptPara
Указатель на структуру CRYPT_DECRYPT_MESSAGE_PARA , содержащую параметры расшифровки.
[in] pVerifyPara
Указатель на структуру CRYPT_VERIFY_MESSAGE_PARA , содержащую параметры проверки.
[in] dwSignerIndex
Указывает, какой подписыватель, среди возможных многих подписчиков сообщения, должен быть проверен. Этот индекс можно изменить в нескольких вызовах функции, чтобы проверить дополнительные подписыватели.
Значение dwSignerIndex равно нулю для первого подписывающего. Если функция возвращает значение FALSE, а GetLastError возвращает CRYPT_E_NO_SIGNER, предыдущий вызов вернул последний подписыватель сообщения. Этот параметр используется только с сообщениями типов CMSG_SIGNED_AND_ENVELOPED или CMSG_SIGNED. Для всех других типов сообщений оно должно быть равно нулю.
[in] pbEncodedBlob
Указатель на закодированный БОЛЬШОЙ ДВОИЧНЫй объект , который необходимо декодировать.
[in] cbEncodedBlob
Размер закодированного большого двоичного объекта в байтах.
[in] dwPrevInnerContentType
Применимо только при обработке вложенных криптографических сообщений. При обработке внешнего криптографического сообщения его необходимо задать равным нулю. При декодировании вложенного криптографического сообщения устанавливается значение, возвращаемое в pdwInnerContentType предыдущим вызовом CryptDecodeMessage для внешнего сообщения. Это может быть любой из типов CMSG, перечисленных в pdwMsgType. Для обеспечения обратной совместимости задайте для dwPrevInnerContentType нулевое значение.
[out, optional] pdwMsgType
Указатель на DWORD , указывающий возвращаемый тип сообщения. Этот параметр может быть одним из следующих типов сообщений:
- CMSG_DATA
- CMSG_SIGNED
- CMSG_ENVELOPED
- CMSG_SIGNED_AND_ENVELOPED
- CMSG_HASHED
[out, optional] pdwInnerContentType
Указатель на DWORD , указывающий тип внутреннего сообщения. Коды типов сообщений, используемые для pdwMsgType , также используются здесь.
Если криптографическое вложение отсутствует, возвращается CMSG_DATA.
[out, optional] pbDecoded
Указатель на буфер для получения декодированного сообщения.
Этот параметр может иметь значение NULL , если декодированное сообщение не требуется или задать размер декодированного сообщения для целей выделения памяти. Декодированные сообщения не возвращаются, если этот параметр имеет значение NULL. Дополнительные сведения см. в разделе "Получение данных неизвестной длины".
[in, out, optional] pcbDecoded
Указатель на переменную, указывающую размер буфера в байтах, на который указывает параметр pbDecoded . При возвращении функции эта переменная содержит размер декодированного сообщения.
[out, optional] ppXchgCert
Указатель на указатель на структуру CERT_CONTEXT с сертификатом, соответствующим закрытому ключу обмена, необходимому для декодирования сообщения. Этот параметр задается только для типов сообщений CMSG_ENVELOPED и CMSG_SIGNED_AND_ENVELOPED.
[out, optional] ppSignerCert
Указатель на указатель на структуру CERT_CONTEXTконтекста сертификата подписыватель. Этот параметр задается только для типов сообщений CMSG_SIGNED и CMSG_SIGNED_AND_ENVELOPED.
Возвращаемое значение
Если функция завершается успешно, функция возвращает ненулевое значение (TRUE).
Если функция завершается ошибкой, она возвращает ноль (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.
Функции CryptDecryptMessage, CryptVerifyMessageSignature или CryptVerifyMessageHash можно распространить на эту функцию.
Следующий код ошибки чаще всего возвращается функцией GetLastError .
Код возврата | Описание |
---|---|
|
Если буфер, указанный параметром pbDecoded , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecoded. |
Комментарии
Параметр dwMsgTypeFlags указывает набор допустимых сообщений. Например, чтобы декодировать сообщения SIGNED или ENVELOPED, задайте для dwMsgTypeFlags значение CMSG_SIGNED_FLAG | CMSG_ENVELOPED_FLAG. Необходимо указать оба параметра pDecryptPara или pVerifyPara .
Для успешно декодированного или проверенного сообщения обновляются указатели контекста сертификата , на которые указывает ppXchgCert и ppSignerCert . Их необходимо освободить, вызвав CertFreeCertificateContext. Если функция завершается ошибкой, для них задано значение NULL.
Параметры ppXchgCert или ppSignerCert можно задать в значение NULL перед вызовом функции, которая указывает, что вызывающий объект не заинтересован в получении сертификата exchange или контекста сертификата подписывающего.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |