Функция CryptVerifySignatureA (wincrypt.h)
Перед вызовом этой функции необходимо вызвать 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
Определены следующие значения флагов.
Значение | Значение |
---|---|
|
Этот флаг используется с поставщиками RSA. При проверке сигнатуры идентификатор хэш-объекта (OID) не должен присутствовать или проверяться. Если этот флаг не задан, идентификатор хэша в сигнатуре по умолчанию проверяется, как указано в определении DigestInfo в PKCS 7. |
|
Этот флаг не используется. |
|
Используйте поддержку X.931 для версии RSA, совместимой с FIPS 186-2. |
Возвращаемое значение
Если функция выполнена успешно, возвращается значение TRUE.
Если функция завершается сбоем, возвращается значение FALSE. Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.
Коды ошибок, предваряемые "NTE", создаются конкретным поставщиком служб CSP, который вы используете. Ниже приведены некоторые возможные коды ошибок.
Код возврата | Описание |
---|---|
|
Один из параметров указывает недопустимый дескриптор. |
|
Один из параметров содержит недопустимое значение. Чаще всего это недопустимый указатель. |
|
Параметр dwFlags не равен нулю. |
|
Хэш-объект, заданный параметром hHash , недопустим. |
|
Параметр hPubKey не содержит дескриптор допустимого открытого ключа. |
|
Подпись недействительна. Это может быть связано с изменением самих данных, несоответствием строки описания или неправильным открытым ключом hPubKey.
Эта ошибка также может быть возвращена, если алгоритмы хэширования или сигнатуры не соответствуют алгоритмам, используемым для создания сигнатуры. |
|
Не удается найти контекст поставщика служб шифрования (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 |