Поделиться через


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

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

Синтаксис

BOOL CryptVerifyMessageSignatureWithKey(
  [in]      PCRYPT_KEY_VERIFY_MESSAGE_PARA pVerifyPara,
  [in]      PCERT_PUBLIC_KEY_INFO          pPublicKeyInfo,
  [in]      const BYTE                     *pbSignedBlob,
  [in]      DWORD                          cbSignedBlob,
  [out]     BYTE                           *pbDecoded,
  [in, out] DWORD                          *pcbDecoded
);

Параметры

[in] pVerifyPara

Указатель на структуру CRYPT_KEY_VERIFY_MESSAGE_PARA , содержащую параметры проверки.

[in] pPublicKeyInfo

Указатель на структуру CERT_PUBLIC_KEY_INFO , содержащую открытый ключ, используемый для проверки подписанного сообщения. Если значение РАВНО NULL, подпись не проверяется.

[in] pbSignedBlob

Указатель на буфер, содержащий подписанное сообщение.

[in] cbSignedBlob

Размер буфера подписанных сообщений (в байтах).

[out] pbDecoded

Указатель на буфер для получения декодированного сообщения.

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

[in, out] pcbDecoded

Указатель на значение DWORD , указывающее размер буфера pbDecoded (в байтах). Когда функция возвращает значение, это значение DWORD содержит размер декодированного сообщения (в байтах). Декодированные сообщения не будут возвращены, если этот параметр имеет значение NULL.

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

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

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

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

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

Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbDecoded , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbDecoded.
E_INVALIDARG
Недопустимые типы кодирования сообщений и сертификатов. В настоящее время поддерживаются только PKCS_7_ASN_ENCODING и X509_ASN_ENCODING_TYPE. Недопустимый cbSize в *pVerifyPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Не подписанное криптографическое сообщение.
CRYPT_E_NO_SIGNER
Сообщение не содержит подписывающего или подписывающего для указанного dwSignerIndex.
NTE_BAD_ALGID
Сообщение было хэшировано и подписано с помощью неизвестного или неподдерживаемого алгоритма.
NTE_BAD_SIGNATURE
Подпись сообщения не проверена.

Требования

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