Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Функция BCryptGenerateKeyPair создает пустую пару открытого и закрытого ключа. После создания ключа с помощью этой функции можно использовать функцию BCryptSetProperty для задания его свойств; однако ключ нельзя использовать до вызова функции BCryptFinalizeKeyPair .
Синтаксис
NTSTATUS BCryptGenerateKeyPair(
[in, out] BCRYPT_ALG_HANDLE hAlgorithm,
[out] BCRYPT_KEY_HANDLE *phKey,
[in] ULONG dwLength,
[in] ULONG dwFlags
);
Параметры
[in, out] hAlgorithm
Дескриптор поставщика алгоритмов, поддерживающего подписывание, асимметричное шифрование или соглашение ключа. Этот дескриптор должен быть создан с помощью функции BCryptOpenAlgorithmProvider .
[out] phKey
Указатель на BCRYPT_KEY_HANDLE , получающий дескриптор ключа. Этот дескриптор используется в последующих функциях, требующих ключа, например BCryptEncrypt. Этот дескриптор должен быть освобожден, если он больше не нужен, передав его в функцию BCryptDekey.
[in] dwLength
Длина ключа в битах. Поставщики алгоритмов имеют разные ограничения размера ключа для каждого стандартного асимметричного алгоритма.
Для идентификаторов алгоритма post-quantum значение dwLength должно быть равно нулю.
| Идентификатор алгоритма | Значение |
|---|---|
| BCRYPT_DH_ALGORITHM | Размер ключа должен быть больше или равен 512 битам, меньше или равно 4096 битам, и должен иметь значение 64. |
| BCRYPT_DSA_ALGORITHM | До Windows 8 размер ключа должен быть больше или равен 512 битам, меньше или равно 1024 битам, и должен быть кратным из 64. Начиная с Windows 8, размер ключа должен быть больше или равен 512 битам, меньше или равно 3072 битам, и должен быть кратным из 64. Обработка для размеров ключей меньше или равно 1024 битам соответствует FIPS 186-2. Обработка для размеров ключа больше 1024 и меньше или равна 3072 соответствует FIPS 186-3. |
| BCRYPT_ECDH_P256_ALGORITHM | Размер ключа должен составлять 256 бит. |
| BCRYPT_ECDH_P384_ALGORITHM | Размер ключа должен составлять 384 бита. |
| BCRYPT_ECDH_P521_ALGORITHM | Размер ключа должен составлять 521 бит. |
| BCRYPT_ECDSA_P256_ALGORITHM | Размер ключа должен составлять 256 бит. |
| BCRYPT_ECDSA_P384_ALGORITHM | Размер ключа должен составлять 384 бита. |
| BCRYPT_ECDSA_P521_ALGORITHM | Размер ключа должен составлять 521 бит. |
| BCRYPT_RSA_ALGORITHM | Размер ключа должен быть больше или равен 512 битам, меньше или равно 16384 битам, и должен иметь значение 64. |
[in] dwFlags
Набор флагов, изменяющих поведение этой функции. В настоящее время флаги не определены, поэтому этот параметр должен быть равен нулю.
Используйте BCRYPT_NO_KEY_VALIDATION , чтобы отказаться от любых применимых самостоятельных тестов FIPS.
Возвращаемое значение
Возвращает код состояния, указывающий на успешность или сбой функции.
Возможные коды возврата включают, но не ограничиваются следующими:
| Возвращаемый код | Описание |
|---|---|
| STATUS_SUCCESS | Функция была успешной. |
| STATUS_INVALID_HANDLE | Дескриптор алгоритма в параметре hAlgorithm недопустим. |
| СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР | Один или несколько параметров недопустимы. |
| STATUS_NOT_SUPPORTED | Указанный поставщик не поддерживает асимметричное шифрование ключей. |
Замечания
В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptGenerateKeyPair можно вызывать из пользовательского режима или режима ядра. Вызывающие серверы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, дескриптор, указанный в параметре hAlgorithm , должен быть открыт с помощью флага BCRYPT_PROV_DISPATCH , а все указатели, передаваемые функции BCryptGenerateKeyPair , должны ссылаться на непагированную (или заблокированную) память.
Вызывающий объект должен освободить phKey с BCryptDeskkey при завершении использования ключа.
Если дескриптор алгоритма XMS или LMSSS передается, эта функция возвращает STATUS_NOT_SUPPORTED , так как создание ключей для алгоритмов хэш-подписей на основе отслеживания состояния запрещено FIPS.
Чтобы вызвать эту функцию в режиме ядра, используйте Cng.libпакет средств разработки драйверов (DDK).
Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows Vista [классические приложения | Приложения UWP] |
| минимальный поддерживаемый сервер | Windows Server 2008 [классические приложения | Приложения UWP] |
| целевая платформа | Виндоус |
| Заголовок | bcrypt.h |
| Библиотека | Bcrypt.lib |
| Библиотека dll | Bcrypt.dll |