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