Función CryptExportPublicKeyInfoEx (wincrypt.h)

La función CryptExportPublicKeyInfoEx exporta la información de clave pública asociada a la clave privada correspondiente del proveedor. Esta función permite a la aplicación especificar el algoritmo de clave pública, reemplazando el valor predeterminado proporcionado por el proveedor de servicios criptográficos (CSP).

Sintaxis

BOOL CryptExportPublicKeyInfoEx(
  [in]      HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
  [in]      DWORD                           dwKeySpec,
  [in]      DWORD                           dwCertEncodingType,
  [in]      LPSTR                           pszPublicKeyObjId,
  [in]      DWORD                           dwFlags,
  [in]      void                            *pvAuxInfo,
  [out]     PCERT_PUBLIC_KEY_INFO           pInfo,
  [in, out] DWORD                           *pcbInfo
);

Parámetros

[in] hCryptProvOrNCryptKey

Identificador del CSP que se va a usar al exportar la información de clave pública. Este identificador debe ser un identificador HCRYPTPROV que se ha creado mediante la función CryptAcquireContext o un identificador de NCRYPT_KEY_HANDLE que se ha creado mediante la función NCryptOpenKey . Las nuevas aplicaciones siempre deben pasar el identificador NCRYPT_KEY_HANDLE de un CSP de CNG.

[in] dwKeySpec

Identifica la clave privada que se va a usar desde el contenedor del proveedor. Puede ser AT_KEYEXCHANGE o AT_SIGNATURE. Este parámetro se omite si se usa un NCRYPT_KEY_HANDLE en el parámetro hCryptProvOrNCryptKey .

[in] dwCertEncodingType

Especifica el tipo de codificación utilizado. Siempre es aceptable especificar los tipos de codificación de certificados y mensajes mediante su combinación con una operación OR bit a bit, como se muestra en el ejemplo siguiente:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Los tipos de codificación definidos actualmente son:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pszPublicKeyObjId

Especifica el algoritmo de clave pública.

NotapszPublicKeyObjId y dwCertEncodingType se usan conjuntamente para determinar el CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC instalable que se debe llamar. Si no se encontró una función instalable para el parámetro pszPublicKeyObjId , se intenta exportar la clave como una clave pública RSA (szOID_RSA_RSA).
 

[in] dwFlags

Valor de marca DWORD que indica cómo se exporta la información de clave pública. El valor de marca se pasa directamente a la función CryptFindOIDInfo al asignar el identificador de objeto de clave pública al algoritmo de clave pública de CNG cadena Unicode correspondiente. Se pueden establecer los siguientes valores de marca.

Valor Significado
CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG
Omite las claves públicas del grupo de CRYPT_PUBKEY_ALG_OID_GROUP_ID marcado explícitamente con la marca CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG .
CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG
Omite las claves públicas en el grupo de CRYPT_PUBKEY_ALG_OID_GROUP_ID marcado explícitamente con la marca CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG .

[in] pvAuxInfo

Este parámetro está reservado para uso futuro y debe establecerse en NULL.

[out] pInfo

Puntero a una estructura de CERT_PUBLIC_KEY_INFO para recibir la información de clave pública que se va a exportar.

Este parámetro puede ser NULL para establecer el tamaño de esta información con fines de asignación de memoria. Para obtener más información, vea Recuperación de datos de longitud desconocida.

[in, out] pcbInfo

Puntero a un DWORD que contiene el tamaño, en bytes, del búfer al que apunta el parámetro pInfo . Cuando se devuelve la función, DWORD contiene el número de bytes almacenados en el búfer.

Nota Al procesar los datos devueltos en el búfer, las aplicaciones deben usar el tamaño real de los datos devueltos. El tamaño real puede ser ligeramente menor que el tamaño del búfer especificado en la entrada. (En la entrada, los tamaños del búfer suelen especificarse lo suficientemente grandes como para asegurarse de que los datos de salida más grandes posibles caben en el búfer). En la salida, la variable a la que apunta este parámetro se actualiza para reflejar el tamaño real de los datos copiados en el búfer.
 

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es distinto de cero (TRUE).

Si se produce un error en la función, el valor devuelto es cero (FALSE). Para obtener información de error extendida, llame a GetLastError.

Nota Los errores de las funciones llamadas CryptGetUserKey y CryptExportKey se pueden propagar a esta función.
 
Esta función tiene los siguientes códigos de error.
Código devuelto Descripción
ERROR_FILE_NOT_FOUND
No se encontró una función de exportación que se puede instalar o registrar para los parámetros dwCertEncodingType y pszPublicKeyObjId especificados.
ERROR_MORE_DATA
Si el búfer especificado por el parámetro pInfo no es lo suficientemente grande como para contener los datos devueltos, la función establece el código ERROR_MORE_DATA y almacena el tamaño de búfer necesario, en bytes, en la variable a la que apunta el parámetro pcbInfo .
 

Si se produce un error en la función, GetLastError puede devolver un error de codificación y descodificación de sintaxis abstracta uno (ASN.1). Para obtener información sobre estos errores, vea Valores devueltos de codificación y descodificación de ASN.1.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CryptImportPublicKeyInfoEx

funciones de Administración de datos