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


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

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

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

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

Синтаксис

BOOL CryptVerifySignatureA(
  [in] HCRYPTHASH hHash,
  [in] const BYTE *pbSignature,
  [in] DWORD      dwSigLen,
  [in] HCRYPTKEY  hPubKey,
  [in] LPCSTR     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 для версии RSA, совместимой с FIPS 186-2.

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

Если функция выполнена успешно, возвращается значение 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
Во время операции у поставщика служб конфигурации не хватает памяти.

Комментарии

Функция 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

Функции хэша и цифровой подписи