Compartilhar via


Função CryptImportPublicKeyInfoEx (wincrypt.h)

Importante Essa API foi preterida. O software novo e existente deve começar a usar APIs de Próxima Geração de Criptografia. A Microsoft pode remover essa API em versões futuras.
 
A função CryptImportPublicKeyInfoEx importa informações de chave pública para o provedor de serviços criptográficos (CSP) e retorna um identificador da chave pública. Parâmetros adicionais para substituir padrões são fornecidos para complementar aqueles em CERT_PUBLIC_KEY_INFO.

Sintaxe

BOOL CryptImportPublicKeyInfoEx(
  [in]  HCRYPTPROV            hCryptProv,
  [in]  DWORD                 dwCertEncodingType,
  [in]  PCERT_PUBLIC_KEY_INFO pInfo,
  [in]  ALG_ID                aiKeyAlg,
  [in]  DWORD                 dwFlags,
  [in]  void                  *pvAuxInfo,
  [out] HCRYPTKEY             *phKey
);

Parâmetros

[in] hCryptProv

O identificador do CSP para receber a chave pública importada. Esse identificador já deve ter sido criado usando CryptAcquireContext.

[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] pInfo

o endereço de uma estrutura CERT_PUBLIC_KEY_INFO que contém a chave pública a ser importada para o provedor.

Nota O membro pzObjId do membro Algorithm apontado pelos parâmetros pInfo e dwCertEncodingType determina uma função de retorno de chamada de CRYPT_OID_IMPORT_PUBLIC_KEY_INFO_FUNC instalável. Se uma função instalável não for encontrada, será feita uma tentativa de importar a chave como uma chave pública RSA (szOID_RSA_RSA).
 

[in] aiKeyAlg

Uma estrutura ALG_ID que contém um algoritmo específico do CSP para substituir o algoritmo padrão CALG_RSA_KEYX .

[in] dwFlags

Reservado para uso futuro e deve ser zero.

[in] pvAuxInfo

Reservado para uso futuro e deve ser NULL.

[out] phKey

O endereço de uma variável HCRYPTKEY que recebe o identificador da chave pública importada. Quando terminar de usar a chave pública, libere o identificador chamando a função CryptDestroyKey .

Valor retornado

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

Se a função falhar, ela retornará 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 o código de erro a seguir.
 
Valor Descrição
ERROR_FILE_NOT_FOUND
Uma função de importação que pode ser instalada ou registrada não pôde ser encontrada para os parâmetros dwCertEncodingType e pInfo especificados.
 

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

Comentários

Essa função normalmente é usada para recuperar a chave pública de um certificado. Isso é feito passando a estrutura de CERT_PUBLIC_KEY_INFO de uma estrutura de certificado preenchida, conforme mostrado no pseudocódigo a seguir.

PCCERT_CONTEXT pCertContext

// Get the certificate context structure from a certificate.
pCertContext = CertCreateCertificateContext(...)
if(pCertContext)
{
    HCRYPTKEY hCertPubKey

    // Get the public key information for the certificate.
    CryptImportPublicKeyInfo(
        hCryptProv, 
        X509_ASN_ENCODING, 
        &pCertContext->pCertInfo->SubjectPublicKeyInfo, 
        &hCertPubKey)

    CertFreeCertificateContext(pCertContext)
}

Requisitos

   
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

CryptExportPublicKeyInfoEx

Funções Gerenciamento de Dados