Función BCryptImportKeyPair (bcrypt.h)

La función BCryptImportKeyPair importa un par de claves pública y privada desde un BLOB de clave. La función BCryptImportKey se usa para importar un par de claves simétricas .

Sintaxis

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
);

Parámetros

[in] hAlgorithm

Identificador del proveedor de algoritmos para importar la clave. Este identificador se obtiene llamando a la función BCryptOpenAlgorithmProvider .

[in, out] hImportKey

Este parámetro no se usa actualmente y debe ser NULL.

[in] pszBlobType

Cadena Unicode terminada en null que contiene un identificador que especifica el tipo de BLOB que se encuentra en el búfer pbInput . Puede ser uno de los valores siguientes.

Valor Significado
BCRYPT_DH_PRIVATE_BLOB
El BLOB es un blob Diffie-Hellman blob de par de claves pública y privada. El búfer pbInput debe contener una estructura de BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_DH_PUBLIC_BLOB
El BLOB es un BLOB de clave pública Diffie-Hellman. El búfer pbInput debe contener una estructura de BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_DSA_PRIVATE_BLOB
Blob es un blob de par de claves pública y privada de DSA. El búfer pbInput debe contener una estructura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 inmediatamente seguida de los datos de clave. BCRYPT_DSA_KEY_BLOB se usa para longitudes de clave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 se usa para longitudes de clave que superan los 1024 bits, pero son menores o iguales que 3072 bits.

Windows 8: comienza la compatibilidad con BCRYPT_DSA_KEY_BLOB_V2.

BCRYPT_DSA_PUBLIC_BLOB
El BLOB es un BLOB de clave pública de DSA. El búfer pbInput debe contener una estructura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 inmediatamente seguida de los datos de clave. BCRYPT_DSA_KEY_BLOB se usa para longitudes de clave de 512 a 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 se usa para longitudes de clave que superan los 1024 bits, pero son menores o iguales que 3072 bits.

Windows 8: comienza la compatibilidad con BCRYPT_DSA_KEY_BLOB_V2.

BCRYPT_ECCPRIVATE_BLOB
Blob es una clave privada de criptografía de curva elíptica (ECC). El búfer pbInput debe contener una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_ECCPUBLIC_BLOB
Blob es una clave pública ECC. El búfer pbInput debe contener una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_PUBLIC_KEY_BLOB
Blob es una clave pública genérica de cualquier tipo. El tipo de clave de este BLOB viene determinado por el miembro Magic de la estructura BCRYPT_KEY_BLOB .
BCRYPT_PRIVATE_KEY_BLOB
Blob es una clave privada genérica de cualquier tipo. La clave privada no contiene necesariamente la clave pública. El tipo de clave de este BLOB viene determinado por el miembro Magic de la estructura BCRYPT_KEY_BLOB .
BCRYPT_RSAPRIVATE_BLOB
El BLOB es un blob de par de claves pública y privada RSA. El búfer pbInput debe contener una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.
BCRYPT_RSAPUBLIC_BLOB
El BLOB es un BLOB de clave pública RSA. El búfer pbInput debe contener una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.
LEGACY_DH_PUBLIC_BLOB
Blob es un blob de Diffie-Hellman clave pública que se exportó mediante CryptoAPI. El proveedor primitivo de Microsoft no admite la importación de este tipo BLOB.
LEGACY_DH_PRIVATE_BLOB
Blob es un blob de clave privada heredado diffie-Hellman versión 3 que contiene un par de claves pública y privada Diffie-Hellman que se exportó mediante CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB
Blob es un blob de par de claves pública y privada de DSA que se exportó mediante CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB
El BLOB es un BLOB de clave pública de DSA que se exportó mediante CryptoAPI. El proveedor primitivo de Microsoft no admite la importación de este tipo BLOB.
LEGACY_DSA_V2_PRIVATE_BLOB
Blob es una clave privada de la versión 2 de DSA en un formulario que se puede importar mediante CryptoAPI.
LEGACY_RSAPRIVATE_BLOB
Blob es un blob de par de claves pública y privada RSA que se exportó mediante CryptoAPI.
LEGACY_RSAPUBLIC_BLOB
El BLOB es un BLOB de clave pública RSA que se exportó mediante CryptoAPI. El proveedor primitivo de Microsoft no admite la importación de este tipo BLOB.

[out] phKey

Puntero a un BCRYPT_KEY_HANDLE que recibe el identificador de la clave importada. Este identificador se usa en funciones posteriores que requieren una clave, como BCryptSignHash. Este identificador debe liberarse cuando ya no sea necesario pasándolo a la función BCryptDestroyKey .

[in] pbInput

Dirección de un búfer que contiene la clave BLOB que se va a importar. El parámetro cbInput contiene el tamaño de este búfer. El parámetro pszBlobType especifica el tipo de clave BLOB que contiene este búfer.

[in] cbInput

Tamaño, en bytes, del búfer pbInput .

[in] dwFlags

Conjunto de marcas que modifican el comportamiento de esta función. Puede ser cero o el valor siguiente.

Valor Significado
BCRYPT_NO_KEY_VALIDATION
No valide la parte pública del par de claves.

Valor devuelto

Devuelve un código de estado que indica el éxito o error de la función.

Entre los posibles códigos de retorno se incluyen, entre otros, los siguientes.

Código devuelto Descripción
STATUS_SUCCESS
La función se realizó correctamente.
STATUS_INVALID_HANDLE
El identificador del algoritmo en el parámetro hAlgorithm no es válido.
STATUS_INVALID_PARAMETER
Uno o más parámetros no son válidos.
STATUS_NOT_SUPPORTED
El proveedor de algoritmos especificado por el parámetro hAlgorithm no admite el tipo BLOB especificado por el parámetro pszBlobType .

Comentarios

En función de los modos de procesador que admita un proveedor, se puede llamar a BCryptImportKeyPair desde el modo de usuario o el modo kernel. Los autores de llamadas en modo kernel se pueden ejecutar en PASSIVE_LEVELIRQL o DISPATCH_LEVEL IRQL. Si el nivel irQL actual está DISPATCH_LEVEL, el identificador proporcionado en el parámetro hAlgorithm debe haberse abierto mediante la marca BCRYPT_PROV_DISPATCH y los punteros pasados a la función BCryptImportKeyPair deben hacer referencia a la memoria no paginada (o bloqueada).

Para llamar a esta función en modo kernel, use Cng.lib, que forma parte del Kit de desarrollo de controladores (DDK). Windows Server 2008 y Windows Vista: Para llamar a esta función en modo kernel, use Ksecdd.lib.

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado bcrypt.h
Library Bcrypt.lib
Archivo DLL Bcrypt.dll

Consulte también

BCryptDestroyKey

BCryptExportKey

BCryptImportKey