Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция 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 |