Función NCryptExportKey (ncrypt.h)

La función NCryptExportKey exporta una clave CNG a un BLOB de memoria.

Sintaxis

SECURITY_STATUS NCryptExportKey(
  [in]            NCRYPT_KEY_HANDLE hKey,
  [in, optional]  NCRYPT_KEY_HANDLE hExportKey,
  [in]            LPCWSTR           pszBlobType,
  [in, optional]  NCryptBufferDesc  *pParameterList,
  [out, optional] PBYTE             pbOutput,
  [in]            DWORD             cbOutput,
  [out]           DWORD             *pcbResult,
  [in]            DWORD             dwFlags
);

Parámetros

[in] hKey

Identificador de la clave que se va a exportar.

[in, optional] hExportKey

Identificador de una clave criptográfica del usuario de destino. Los datos de clave dentro de la clave exportada BLOB se cifran mediante esta clave. Esto garantiza que solo el usuario de destino pueda usar la clave BLOB.

[in] pszBlobType

Cadena Unicode terminada en null que contiene un identificador que especifica el tipo de BLOB que se va a exportar. Puede ser uno de los siguientes valores.

BCRYPT_DH_PRIVATE_BLOB

Exporte un par de claves pública y privada Diffie-Hellman. El búfer pbOutput recibe una estructura de BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_DH_PUBLIC_BLOB

Exporte una clave pública Diffie-Hellman. El búfer pbOutput recibe una estructura de BCRYPT_DH_KEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_DSA_PRIVATE_BLOB

Exporte un par de claves pública y privada de DSA. El búfer pbOutput recibe una estructura de BCRYPT_DSA_KEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_DSA_PUBLIC_BLOB

Exporte una clave pública DSA. El búfer pbOutput recibe una estructura de BCRYPT_DSA_KEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_ECCPRIVATE_BLOB

Exporte una clave privada de criptografía de curva elíptica (ECC). El búfer pbOutput recibe una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_ECCPUBLIC_BLOB

Exporte una clave pública ECC. El búfer pbOutput recibe una estructura de BCRYPT_ECCKEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_PUBLIC_KEY_BLOB

Exporte 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

Exporte 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_RSAFULLPRIVATE_BLOB

Exporte un par de claves pública y privada RSA completa. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave. Este BLOB incluirá material clave adicional en comparación con el tipo de BCRYPT_RSAPRIVATE_BLOB .

BCRYPT_RSAPRIVATE_BLOB

Exporte un par de claves pública y privada RSA. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.

BCRYPT_RSAPUBLIC_BLOB

Exporte una clave pública RSA. El búfer pbOutput recibe una estructura de BCRYPT_RSAKEY_BLOB inmediatamente seguida de los datos de clave.

LEGACY_DH_PRIVATE_BLOB

Exporte 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 puede importar mediante CryptoAPI.

LEGACY_DH_PUBLIC_BLOB

Exporte un BLOB de clave privada heredado diffie-Hellman versión 3 que contiene una clave pública Diffie-Hellman que se puede importar mediante CryptoAPI.

LEGACY_DSA_PRIVATE_BLOB

Exporte un par de claves públicas y privadas de DSA en un formulario que se puede importar mediante CryptoAPI.

LEGACY_DSA_PUBLIC_BLOB

Exporte una clave pública de DSA en un formulario que se pueda importar mediante CryptoAPI.

LEGACY_RSAPRIVATE_BLOB

Exporte un par de claves pública y privada RSA en un formulario que se pueda importar mediante CryptoAPI.

LEGACY_RSAPUBLIC_BLOB

Exporte una clave pública RSA en un formulario que se pueda importar mediante CryptoAPI.

NCRYPT_CIPHER_KEY_BLOB

Exporte una clave de cifrado en una estructura de NCRYPT_KEY_BLOB_HEADER .

Windows 8 y Windows Server 2012: comienza la compatibilidad con este valor.

NCRYPT_OPAQUETRANSPORT_BLOB

Exporte una clave en un formato específico de un único CSP y sea adecuada para el transporte. Los BLOB opacos no se pueden transferir y deben importarse mediante el mismo CSP que generó el BLOB.

NCRYPT_PKCS7_ENVELOPE_BLOB

Exporte un BLOB de sobre PKCS #7. Los parámetros identificados por el parámetro pParameterList pueden o deben contener los parámetros siguientes, como se indica en la columna Requerida o opcional.

Parámetro Obligatorio u opcional
NCRYPTBUFFER_CERT_BLOB Requerido
NCRYPTBUFFER_PKCS_ALG_OID Requerido
NCRYPTBUFFER_PKCS_ALG_PARAM Opcionales

NCRYPT_PKCS8_PRIVATE_KEY_BLOB

Exporte un BLOB de clave privada PKCS #8. Los parámetros identificados por el parámetro pParameterList pueden o deben contener los parámetros siguientes, como se indica en la columna Requerida o opcional.

Parámetro Obligatorio u opcional
NCRYPTBUFFER_PKCS_ALG_OID Opcionales
NCRYPTBUFFER_PKCS_ALG_PARAM Opcionales
NCRYPTBUFFER_PKCS_SECRET Opcionales

NCRYPT_PROTECTED_KEY_BLOB

Exporte una clave protegida en una estructura de NCRYPT_KEY_BLOB_HEADER .

Windows 8 y Windows Server 2012: comienza la compatibilidad con este valor.

[in, optional] pParameterList

Dirección de una estructura NCryptBufferDesc que recibe información de parámetros para la clave. Este parámetro puede ser NULL si no se necesita esta información.

[out, optional] pbOutput

Dirección de un búfer que recibe la clave BLOB. El parámetro cbOutput contiene el tamaño de este búfer. Si este parámetro es NULL, esta función colocará el tamaño necesario, en bytes, en el DWORD al que apunta el parámetro pcbResult .

[in] cbOutput

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

[out] pcbResult

Dirección de una variable DWORD que recibe el número de bytes copiados en el búfer pbOutput . Si el parámetro pbOutput es NULL, esta función colocará el tamaño necesario, en bytes, en el DWORD al que apunta este parámetro.

[in] dwFlags

Marcas que modifican el comportamiento de la función. Puede ser cero o una combinación de uno o varios de los valores siguientes. El conjunto de marcas válidas es específico de cada proveedor de almacenamiento de claves. La marca siguiente se aplica a todos los proveedores.

Valor Significado
NCRYPT_SILENT_FLAG Solicita que el proveedor de servicios clave (KSP) no muestre ninguna interfaz de usuario. Si el proveedor debe mostrar la interfaz de usuario para funcionar, se produce un error en la llamada y el KSP debe establecer el código de error NTE_SILENT_CONTEXT como último error.

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
ERROR_SUCCESS La función se realizó correctamente.
NTE_BAD_FLAGS El parámetro dwFlags contiene un valor que no es válido.
NTE_BAD_KEY_STATE La clave especificada por el parámetro hKey no es válida. La causa más común de este error es que la clave no se completó mediante la función NCryptFinalizeKey .
NTE_BAD_TYPE La clave especificada por el parámetro hKey no se puede exportar al tipo BLOB especificado por el parámetro pszBlobType .
NTE_INVALID_HANDLE El parámetro hKey o hExportKey no es válido.
NTE_INVALID_PARAMETER Uno o más parámetros no son válidos.

Comentarios

Un servicio no debe llamar a esta función desde su función StartService. Si un servicio llama a esta función desde su función StartService , se puede producir un interbloqueo y el servicio puede dejar de responder.

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 ncrypt.h
Library Ncrypt.lib
Archivo DLL Ncrypt.dll

Consulte también