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


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

Функция BCryptImportKeyPair импортирует пару открытых и закрытых ключей из ключа BLOB. Функция BCryptImportKey используется для импорта симметричного ключа.

Синтаксис

NTSTATUS BCryptImportKeyPair(
  [in]      BCRYPT_ALG_HANDLE hAlgorithm,
  [in, out] BCRYPT_KEY_HANDLE hImportKey,
  [in]      LPCWSTR           pszBlobType,
  [out]     BCRYPT_KEY_HANDLE *phKey,
  [in]      PUCHAR            pbInput,
  [in]      ULONG             cbInput,
  [in]      ULONG             dwFlags
);

Параметры

[in] hAlgorithm

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

[in, out] hImportKey

Этот параметр в настоящее время не используется и должен быть NULL.

[in] pszBlobType

Строка Юникода, завершающая значение NULL, содержащая идентификатор, указывающий тип БОЛЬШОго двоичного объекта, содержащегося в буфере pbInput. Может иметь одно из следующих значений:

Ценность Значение
BCRYPT_DH_PRIVATE_BLOB BLOB - это пара открытых и закрытых ключей Diffie-Hellman. Буфер pbInput должен содержать структуру BCRYPT_DH_KEY_BLOB сразу после ключевых данных.
BCRYPT_DH_PUBLIC_BLOB BLOB - это Diffie-Hellman открытый ключ BLOB. Буфер pbInput должен содержать структуру BCRYPT_DH_KEY_BLOB сразу после ключевых данных.
BCRYPT_DSA_PRIVATE_BLOB BLOB — это пара открытых и закрытых ключей DSA. Буфер pbInput должен содержать BCRYPT_DSA_KEY_BLOB или BCRYPT_DSA_KEY_BLOB_V2 структуру сразу после ключевых данных. BCRYPT_DSA_KEY_BLOB используется для длины ключей от 512 до 1024 битов. BCRYPT_DSA_KEY_BLOB_V2 используется для длины ключей, превышающей 1024 бит, но меньше или равно 3072 битам.

Windows 8: Начинается поддержка BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_DSA_PUBLIC_BLOB БОЛЬШОЙ ДВОИЧНЫй объект — это BLOB-объект открытого ключа DSA. Буфер pbInput должен содержать BCRYPT_DSA_KEY_BLOB или BCRYPT_DSA_KEY_BLOB_V2 структуру сразу после ключевых данных. BCRYPT_DSA_KEY_BLOB используется для длины ключей от 512 до 1024 битов. BCRYPT_DSA_KEY_BLOB_V2 используется для длины ключей, превышающей 1024 бит, но меньше или равно 3072 битам.

Windows 8: Начинается поддержка BCRYPT_DSA_KEY_BLOB_V2 .
BCRYPT_ECCPRIVATE_BLOB BLOB — это многоточие криптографии (ECC) закрытого ключа. Буфер pbInput должен содержать структуру BCRYPT_ECCKEY_BLOB сразу после ключевых данных.
BCRYPT_ECCPUBLIC_BLOB BLOB является открытым ключом ECC. Буфер pbInput должен содержать структуру BCRYPT_ECCKEY_BLOB сразу после ключевых данных.
BCRYPT_MLKEM_PUBLIC_BLOB BLOB - это ML-KEM BLOB, который обеспечивает импорт и экспорт стандартных байтов, закодированных ML-KEM ключей инкапсулирования на FIPS 203. Буфер pbInput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую ключ инкапсулации KEM с кодировкой байтов, BCRYPT_MLKEM_PUBLIC_MAGIC и набор параметров ML-KEM.
BCRYPT_MLKEM_PRIVATE_BLOB BLOB — это ML-KEM BLOB,который обеспечивает импорт и экспорт стандартных байтовых ключей, закодированных ML-KEM декапсуляции на FIPS 203. Буфер pbInput должен содержать BCRYPT_MLKEM_KEY_BLOB структуру, содержащую набор байтов, закодированных в кодировке KEM, BCRYPT_MLKEM_PRIVATE_MAGIC и набор параметров ML-KEM.
BCRYPT_MLKEM_PRIVATE_SEED_BLOB BLOB — это ML-KEM BLOB, который обеспечивает импорт и экспорт семян ML-KEM на FIPS 203. Буфер pbInput должен содержать структуру BCRYPT_MLKEM_KEY_BLOB , содержащую начальное значение KEM, BCRYPT_MLKEM_SEED_MAGIC и набор параметров ML-KEM.
BCRYPT_PQDSA_PUBLIC_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт открытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbInput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевой материал, открытый магия и набор параметров PQ.
BCRYPT_PQDSA_PRIVATE_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт закрытых ключей цифровой подписи PQ на FIPS 204 и 205. Буфер pbInput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую ключевой материал, частный магия и набор параметров PQ.
BCRYPT_PQDSA_PRIVATE_SEED_BLOB BLOB — это BLOB-объект ML-DSA, SLH-DSA, LMS или BLOB-объект XMSS, который обеспечивает импорт и экспорт частных семян цифровой подписи PQ на FIPS 204 и 205. Буфер pbInput должен содержать BCRYPT_PQDSA_KEY_BLOB структуру, содержащую начальное значение, магию частного начального значения и набор параметров PQ.
BCRYPT_PRIVATE_KEY_BLOB BLOB является универсальным закрытым ключом любого типа. Закрытый ключ не обязательно содержит открытый ключ. Тип ключа в этом BLOB-объекте определяется элементом Magic структуры BCRYPT_KEY_BLOB.
BCRYPT_PUBLIC_KEY_BLOB BLOB — это универсальный открытый ключ любого типа. Тип ключа в этом BLOB-объекте определяется элементом Magic структуры BCRYPT_KEY_BLOB.
BCRYPT_RSAPRIVATE_BLOB BLOB — это пара ОТКРЫТЫх и закрытых ключей RSA. Буфер pbInput должен содержать структуру BCRYPT_RSAKEY_BLOB сразу после ключевых данных.
BCRYPT_RSAPUBLIC_BLOB БОЛЬШОЙ ДВОИЧНЫй объект — это BLOB-объект открытого ключа RSA. Буфер pbInput должен содержать структуру BCRYPT_RSAKEY_BLOB сразу после ключевых данных.
LEGACY_DH_PUBLIC_BLOB BLOB — это большой двоичный объект открытого ключа Diffie-Hellman, экспортируемый с помощью CryptoAPI. Поставщик примитивных объектов Майкрософт не поддерживает импорт этого типа BLOB.
LEGACY_DH_PRIVATE_BLOB BlOB — это устаревшая Diffie-Hellman версии 3 BLOB закрытого ключа, которая содержит пару открытых и закрытых ключей Diffie-Hellman, экспортируемую с помощью CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB BLOB — это пара BLOB-объектов открытого и закрытого ключа DSA, экспортируемая с помощью CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB BLOB — это BLOB-объект открытого ключа DSA, экспортируемый с помощью CryptoAPI. Поставщик примитивных объектов Майкрософт не поддерживает импорт этого типа BLOB.
LEGACY_DSA_V2_PRIVATE_BLOB BLOB — это закрытый ключ DSA версии 2 в форме, которую можно импортировать с помощью CryptoAPI.
LEGACY_RSAPRIVATE_BLOB BLOB — это пара BLOB открытого и закрытого ключа RSA, экспортируемая с помощью CryptoAPI.
LEGACY_RSAPUBLIC_BLOB BLOB - это BLOB-объект открытого ключа RSA, экспортируемый с помощью CryptoAPI. Поставщик примитивных объектов Майкрософт не поддерживает импорт этого типа BLOB.

[out] phKey

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

[in] pbInput

Адрес буфера, который содержит ключ BLOB- для импорта. Параметр cbInput содержит размер этого буфера. Параметр pszBlobType указывает тип ключа BLOB, который содержит этот буфер.

[in] cbInput

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

[in] dwFlags

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

Ценность Значение
BCRYPT_NO_KEY_VALIDATION Отказ от любых применимых самотверений FIPS.

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

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

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

Возвращаемый код Описание
STATUS_SUCCESS Функция была успешной.
STATUS_INVALID_BUFFER_SIZE Если буфер pbInput не имеет правильного размера для сочетания набора параметров ML-KEM, связанного с hAlgorithm и для импортируемого типа BLOB-объекта.
STATUS_INVALID_HANDLE Дескриптор алгоритма в параметре hAlgorithm недопустим.
СТАТУС_НЕДЕЙСТВИТЕЛЬНЫЙ_ПАРАМЕТР Один или несколько параметров недопустимы.
STATUS_NOT_SUPPORTED Поставщик алгоритмов, указанный параметром hAlgorithm , не поддерживает тип BLOB, указанный параметром pszBlobType.

Замечания

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

Вызывающий объект должен освободить ключ hKey с BCryptDeskkey , если ключ больше не используется.

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

Требования

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

См. также

BCryptDeskkey

BCryptExportKey

BCryptImportKey