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


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

Функция BCryptSignHash создает подпись хэш-значения.

Синтаксис

NTSTATUS BCryptSignHash(
  [in]           BCRYPT_KEY_HANDLE hKey,
  [in, optional] VOID              *pPaddingInfo,
  [in]           PUCHAR            pbInput,
  [in]           ULONG             cbInput,
  [out]          PUCHAR            pbOutput,
  [in]           ULONG             cbOutput,
  [out]          ULONG             *pcbResult,
  [in]           ULONG             dwFlags
);

Параметры

[in] hKey

Дескриптор ключа, используемый для подписи хэша.

[in, optional] pPaddingInfo

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

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

[in] pbInput

Указатель на буфер, содержащий хэш-значение для подписи. Параметр cbInput содержит размер этого буфера.

[in] cbInput

Число байтов в буфере pbInput для входа.

[out] pbOutput

Адрес буфера для получения сигнатуры, созданной этой функцией. Параметр cbOutput содержит размер этого буфера.

Если этот параметр задан NULL, эта функция вычисляет размер, необходимый для подписи, и возвращает размер в расположении, на которое указывает параметр pcbResult .

[in] cbOutput

Размер в байтах буфера pbOutput . Этот параметр игнорируется, если параметр pbOutput имеет значение NULL.

[out] pcbResult

Указатель на переменную ULONG , которая получает количество байтов, скопированных в буфер pbOutput .

Если pbOutput имеет NULLзначение, оно получает размер в байтах, необходимый для подписи.

[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_HANDLE Дескриптор ключа, указанный параметром hKey , недопустим.
STATUS_NOT_SUPPORTED Поставщик алгоритмов, используемый для создания дескриптора ключа, указанного параметром hKey , не является алгоритмом подписи.
STATUS_NO_MEMORY Произошел сбой выделения памяти.
STATUS_BUFFER_TOO_SMALL Размер памяти, указанный параметром cbOutput , недостаточно велик для хранения подписи.

Замечания

Эта функция зашифрует хэш-значение с указанным ключом для создания подписи.

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

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

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

Требования

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

См. также

BCryptVerifySignature