Функция CryptVerifySignatureA (wincrypt.h)
Перед вызовом этой функции необходимо вызвать CryptCreateHash, чтобы создать дескриптор хэш-объекта. CryptHashData или CryptHashSessionKey затем используется для добавления данных или ключей сеансов в хэш-объект.
После завершения CryptVerifySignature можно вызывать только CryptDeskHash с помощью дескриптора hHash.
Синтаксис
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 для предотвращения уязвимостей безопасности. Однако она по-прежнему поддерживается для обратной совместимости в поставщике шифрования Microsoft Base.
[in] dwFlags
Определены следующие значения флагов.
Ценность | Значение |
---|---|
|
Этот флаг используется с поставщиками RSA. При проверке подписи хэш-идентификатор объекта (OID) не должен присутствовать или проверяться. Если этот флаг не задан, хэш-идентификатор OID в сигнатуре по умолчанию проверяется, как указано в определении DigestInfo в PKCS #7. |
|
Этот флаг не используется. |
|
Используйте поддержку X.931 для версии RSA (rDSA) FIPS 186-2. |
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение TRUE.
Если функция завершается ошибкой, возвращаемое значение FALSE. Для получения расширенных сведений об ошибке вызовите GetLastError.
Коды ошибок, предуставленные NTE, создаются определенным поставщиком служб CSP, который вы используете. Ниже приведены некоторые возможные коды ошибок.
Возвращаемый код | Описание |
---|---|
|
Один из параметров задает недопустимый дескриптор. |
|
Один из параметров содержит недопустимое значение. Чаще всего это недопустимый указатель. |
|
Параметр dwFlags ненулево. |
|
Хэш-объект, указанный параметром hHash , недопустим. |
|
Параметр hPubKey не содержит дескриптор допустимого открытого ключа. |
|
Подпись недействительна. Это может быть связано с тем, что данные изменились, строка описания не совпадала или неправильный открытый ключ был указан hPubKey.
Эта ошибка также может быть возвращена, если алгоритмы хэширования или подписи не соответствуют тем, которые использовались для создания подписи. |
|
Контекст поставщика криптографических служб (CSP), указанный при создании хэш-объекта. |
|
CSP не хватает памяти во время операции. |
Замечания
Функция CryptVerifySignature завершает хэш. После этого вызова никакие данные не могут быть добавлены в хэш. Сбой дополнительных вызовов CryptHashData или CryptHashSession Key. После завершения работы приложения с хэшем необходимо вызвать CryptDeskHash, чтобы уничтожить хэш-объект.
Если вы создаете подпись с помощью 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 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | wincrypt.h |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |
См. также
функции хэша и цифровой подписи