Função CryptExportPublicKeyInfoEx (wincrypt.h)

A função CryptExportPublicKeyInfoEx exporta as informações de chave pública associadas à chave privada correspondente do provedor. Essa função permite que o aplicativo especifique o algoritmo de chave pública, substituindo o padrão fornecido pelo CSP ( provedor de serviços criptográficos ).

Sintaxe

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

Um identificador do CSP a ser usado ao exportar as informações de chave pública. Esse identificador deve ser um identificador HCRYPTPROV que foi criado usando a função CryptAcquireContext ou um identificador NCRYPT_KEY_HANDLE que foi criado usando a função NCryptOpenKey . Os novos aplicativos sempre devem passar o identificador NCRYPT_KEY_HANDLE de um CSP CNG.

[in] dwKeySpec

Identifica a chave privada a ser usada no contêiner do provedor. Pode ser AT_KEYEXCHANGE ou AT_SIGNATURE. Esse parâmetro será ignorado se um NCRYPT_KEY_HANDLE for usado no parâmetro hCryptProvOrNCryptKey .

[in] dwCertEncodingType

Especifica o tipo de codificação usado. É sempre aceitável especificar os tipos de codificação de certificado e mensagem combinando-os com uma operação OR bit a bit, conforme mostrado no exemplo a seguir:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

Os tipos de codificação definidos no momento são:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pszPublicKeyObjId

Especifica o algoritmo de chave pública.

Observeque pszPublicKeyObjId e dwCertEncodingType são usados juntos para determinar o CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC instalável a ser chamado. Se uma função instalável não tiver sido encontrada para o parâmetro pszPublicKeyObjId , será feita uma tentativa de exportar a chave como uma chave pública RSA (szOID_RSA_RSA).
 

[in] dwFlags

Um valor de sinalizador DWORD que indica como as informações de chave pública são exportadas. O valor do sinalizador é passado diretamente para a função CryptFindOIDInfo ao mapear o identificador de objeto de chave pública para a cadeia de caracteres Unicode do algoritmo de chave pública CNG correspondente. Os valores de sinalizador a seguir podem ser definidos.

Valor Significado
CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG
Ignora chaves públicas no grupo de CRYPT_PUBKEY_ALG_OID_GROUP_ID sinalizado explicitamente com o sinalizador CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG .
CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG
Ignora chaves públicas no grupo CRYPT_PUBKEY_ALG_OID_GROUP_ID explicitamente sinalizado com o sinalizador CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG .

[in] pvAuxInfo

Esse parâmetro é reservado para uso futuro e deve ser definido como NULL.

[out] pInfo

Um ponteiro para uma estrutura CERT_PUBLIC_KEY_INFO para receber as informações de chave pública a serem exportadas.

Esse parâmetro pode ser NULL para definir o tamanho dessas informações para fins de alocação de memória. Para obter mais informações, consulte Recuperando dados de comprimento desconhecido.

[in, out] pcbInfo

Um ponteiro para um DWORD que contém o tamanho, em bytes, do buffer apontado pelo parâmetro pInfo . Quando a função retorna, o DWORD contém o número de bytes armazenados no buffer.

Nota Ao processar os dados retornados no buffer, os aplicativos precisam usar o tamanho real dos dados retornados. O tamanho real pode ser um pouco menor do que o tamanho do buffer especificado na entrada. (Na entrada, os tamanhos de buffer geralmente são especificados grandes o suficiente para garantir que os maiores dados de saída possíveis se encaixem no buffer.) Na saída, a variável apontada por esse parâmetro é atualizada para refletir o tamanho real dos dados copiados para o buffer.
 

Retornar valor

Se a função for bem-sucedida, o valor retornado será diferente de zero (TRUE).

Se a função falhar, o valor retornado será zero (FALSE). Para obter informações de erro estendidas, chame GetLastError.

Nota Erros das funções chamadas CryptGetUserKey e CryptExportKey podem ser propagados para essa função.
 
Essa função tem os seguintes códigos de erro.
Código de retorno Descrição
ERROR_FILE_NOT_FOUND
Uma função de exportação que pode ser instalada ou registrada não pôde ser encontrada para os parâmetros dwCertEncodingType e pszPublicKeyObjId especificados.
ERROR_MORE_DATA
Se o buffer especificado pelo parâmetro pInfo não for grande o suficiente para manter os dados retornados, a função definirá o código ERROR_MORE_DATA e armazenará o tamanho do buffer necessário, em bytes, na variável apontada pelo parâmetro pcbInfo .
 

Se a função falhar, GetLastError poderá retornar um erro de codificação/decodificação de ASN.1 (Abstract Syntax Notation One ). Para obter informações sobre esses erros, consulte Codificação/Decodificação de Valores Retornados do ASN.1.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wincrypt.h
Biblioteca Crypt32.lib
DLL Crypt32.dll

Confira também

CryptImportPublicKeyInfoEx

Funções Gerenciamento de Dados