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


Функция BCryptVerifySignature (bcrypt.h)

Функция BCryptVerifySignature проверяет, соответствует ли указанная сигнатура указанному хэшу.

Синтаксис

NTSTATUS BCryptVerifySignature(
  [in]           BCRYPT_KEY_HANDLE hKey,
  [in, optional] VOID              *pPaddingInfo,
  [in]           PUCHAR            pbHash,
  [in]           ULONG             cbHash,
  [in]           PUCHAR            pbSignature,
  [in]           ULONG             cbSignature,
  [in]           ULONG             dwFlags
);

Параметры

[in] hKey

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

[in, optional] pPaddingInfo

Указатель на структуру, содержащую сведения о заполнении. Фактический тип структуры, указываемой этим параметром, зависит от значения параметра dwFlags . Этот параметр используется только с асимметричными ключами и должен быть NULL в противном случае.

pPaddingInfo должно быть NULL для LMS и XMSS, так как для создания подписи, отличной от ключа и входных данных, не требуется никаких дополнительных сведений.

[in] pbHash

Адрес буфера, содержащего хэш данных. Параметр cbHash содержит размер этого буфера.

[in] cbHash

Размер в байтах буфера pbHash .

[in] pbSignature

Адрес буфера, содержащего подписанный хэш данных. Функция BCryptSignHash используется для создания сигнатуры. Параметр cbSignature содержит размер этого буфера.

[in] cbSignature

Размер в байтах буфера pbSignature . Функция BCryptSignHash используется для создания сигнатуры.

[in] dwFlags

Набор флагов, изменяющих поведение этой функции. Допустимый набор флагов зависит от типа ключа, указанного параметром hKey .

DwFlags должно быть равно нулю для LMS и XMSS, так как для создания подписи, отличной от ключа и входных данных, не требуется.

Если ключ является симметричным ключом, этот параметр не используется и должен быть нулевым.

Если ключ является асимметричным ключом, это может быть одно из следующих значений:

Ценность Значение
BCRYPT_PAD_PKCS1 Схема заполнения PKCS1 использовалась при создании сигнатуры. Параметр pPaddingInfo — это указатель на структуру BCRYPT_PKCS1_PADDING_INFO .
BCRYPT_PAD_PQDSA Используйте схему заполнения PQ для ML-DSA или SLH-DSA. Параметр pPaddingInfo — это указатель на структуру BCRYPT_PQDSA_PADDING_INFO .

Заметка: Это необходимо задать, если используется предварительно хэш-ML-DSA вариант.
BCRYPT_PAD_PSS Схема вероятностной подписи (PSS) использовалась при создании подписи. Параметр pPaddingInfo — это указатель на структуру BCRYPT_PSS_PADDING_INFO .

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

Возвращает код состояния, указывающий на успешность или сбой функции.

Возможные коды возврата включают, но не ограничиваются следующими:

Код возврата Описание
STATUS_SUCCESS Функция была успешной.
STATUS_INVALID_SIGNATURE Подпись не была проверена.
NTE_NO_MEMORY Произошел сбой выделения памяти.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Один из указанных параметров недопустим.
STATUS_INVALID_HANDLE Дескриптор ключа, указанный параметром hKey , недопустим.
STATUS_NOT_SUPPORTED Поставщик алгоритмов, используемый для создания дескриптора ключа, указанного параметром hKey , не является алгоритмом подписи.

Замечания

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

Чтобы использовать эту функцию, необходимо хэшировать данные с помощью того же алгоритма хэширования, который использовался для создания хэш-значения, подписанного. Если применимо, необходимо также указать ту же схему заполнения, которая была указана при создании подписи.

Для ML-DSA и SLH-DSA, pbHash и cbHash не должны быть хэш-значениями и могут быть произвольными входными данными длины.

В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptVerifySignature можно вызывать из пользовательского режима или режима ядра. Вызывающие серверы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, дескриптор, предоставленный в параметре hKey , должен быть производным от дескриптора алгоритма, возвращаемого поставщиком, который был открыт с помощью флага BCRYPT_PROV_DISPATCH , и все указатели, передаваемые функции BCryptVerifySignature , должны ссылаться на неупакованную (или заблокированную) память.

Чтобы вызвать эту функцию в режиме ядра, используйте Cng.libпакет средств разработки драйверов (DDK). Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
Заголовок bcrypt.h
Библиотека Bcrypt.lib
Библиотека dll Bcrypt.dll

См. также

BCryptSignHash