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

Важно Этот API не рекомендуется использовать. Новое и существующее программное обеспечение должно начать использовать API-интерфейсы шифрования следующего поколения. Корпорация Майкрософт может удалить этот API в будущих выпусках.
 
Функция CryptVerifySignature проверяет сигнатуру хэш-объекта.

Перед вызовом этой функции необходимо вызвать CryptCreateHash , чтобы создать дескриптор хэш-объекта. Затем CryptHashData или CryptHashSessionKey используется для добавления данных или ключей сеанса в хэш-объект.

После завершения CryptVerifySignature с помощью дескриптора hHash можно вызывать только CryptDecryptHash.

Синтаксис

BOOL CryptVerifySignatureW(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCWSTR    szDescription,
  [in] DWORD      dwFlags
);

Параметры

[in] hHash

Дескриптор объекта хэша для проверки.

[in] pbSignature

Адрес проверяемых данных подписи.

[in] dwSigLen

Число байтов в данных сигнатуры pbSignature .

[in] hPubKey

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

[in] szDescription

Этот параметр больше не должен использоваться и должен иметь значение NULL , чтобы предотвратить уязвимости системы безопасности. Однако он по-прежнему поддерживается для обратной совместимости в базовом поставщике шифрования Майкрософт.

[in] dwFlags

Определены следующие значения флагов.

Значение Значение
CRYPT_NOHASHOID
0x00000001
Этот флаг используется с поставщиками RSA. При проверке подписи идентификатор хэш-объекта (OID) не должен присутствовать или проверяться. Если этот флаг не установлен, хэш-идентификатор идентификатора в сигнатуре по умолчанию проверяется, как указано в определении DigestInfo в PKCS #7.
CRYPT_TYPE2_FORMAT
0x00000002
Этот флаг не используется.
CRYPT_X931_FORMAT
0x00000004
Используйте поддержку X.931 для fips 186-2-совместимой версии RSA (rDSA).

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

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

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

Коды ошибок, предваряемые "NTE", создаются конкретным поставщиком служб CSP, который вы используете. Ниже приведены некоторые возможные коды ошибок.

Код возврата Описание
ERROR_INVALID_HANDLE
Один из параметров указывает недопустимый дескриптор.
ERROR_INVALID_PARAMETER
Один из параметров содержит недопустимое значение. Чаще всего это недопустимый указатель.
NTE_BAD_FLAGS
Параметр dwFlags не является нулевым.
NTE_BAD_HASH
Недопустимый хэш-объект, заданный параметром hHash .
NTE_BAD_KEY
Параметр hPubKey не содержит дескриптора допустимого открытого ключа.
NTE_BAD_SIGNATURE
Подпись недействительна. Это может быть вызвано тем, что сами данные изменились, строка описания не совпадает или hPubKey указал неправильный открытый ключ.

Эта ошибка также может быть возвращена, если алгоритмы хэширования или сигнатуры не соответствуют алгоритмам, используемым для создания сигнатуры.

NTE_BAD_UID
Не удается найти контекст поставщика служб шифрования (CSP), указанный при создании хэш-объекта.
NTE_NO_MEMORY
Во время операции у поставщика служб CSP не хватает памяти.

Комментарии

Функция CryptVerifySignature завершает хэш. После этого вызова в хэш невозможно добавить больше данных. Сбой дополнительных вызовов CryptHashData или CryptHashSessionKey . После завершения работы приложения с хэшем необходимо вызвать CryptDeographyHash , чтобы уничтожить хэш-объект.

Если вы создаете сигнатуру с помощью API платформа .NET Framework и пытаетесь проверить ее с помощью функции CryptVerifySignature, функция завершится ошибкой и GetLastError вернет NTE_BAD_SIGNATURE. Это связано с различными порядками байтов между собственным API Win32 и API платформа .NET Framework.

Собственный API шифрования использует порядок байтов с малым порядком байтов, а API платформа .NET Framework использует порядок байтов с большим порядком байтов. При проверке подписи, созданной с помощью API платформа .NET Framework, необходимо изменить порядок байтов подписи перед вызовом функции CryptVerifySignature для проверки подписи.

Примеры

Пример использования функции CryptVerifySignature см. в разделе Пример программы C. Подписывание хэша и Проверка хэш-подписи.

Примечание

Заголовок wincrypt.h определяет CryptVerifySignature в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

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

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

CryptCreateHash

CryptDeographyHash

CryptHashData

CryptHashSessionKey

CryptSignHash

Хэш-функции и функции цифровой подписи