Функция CryptExportPublicKeyInfoEx (wincrypt.h)

Функция CryptExportPublicKeyInfoEx экспортирует сведения об открытом ключе , связанные с соответствующим закрытым ключом поставщика. Эта функция позволяет приложению указать алгоритм открытого ключа, переопределяя значение по умолчанию, предоставляемое поставщиком служб шифрования (CSP).

Синтаксис

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

Параметры

[in] hCryptProvOrNCryptKey

Дескриптор CSP, используемый при экспорте сведений об открытом ключе. Этот дескриптор должен быть дескриптором HCRYPTPROV , который был создан с помощью функции CryptAcquireContext , или дескриптором NCRYPT_KEY_HANDLE , созданным с помощью функции NCryptOpenKey . Новые приложения всегда должны передавать дескриптор NCRYPT_KEY_HANDLE CSP CNG.

[in] dwKeySpec

Определяет закрытый ключ для использования из контейнера поставщика. Это может быть AT_KEYEXCHANGE или AT_SIGNATURE. Этот параметр игнорируется, если в параметре hCryptProvOrNCryptKey используется NCRYPT_KEY_HANDLE.

[in] dwCertEncodingType

Указывает используемый тип кодирования. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

В настоящее время определены следующие типы кодирования:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pszPublicKeyObjId

Указывает алгоритм открытого ключа.

Обратите внимание, чтоpszPublicKeyObjId и dwCertEncodingType используются вместе для определения устанавливаемого CRYPT_OID_EXPORT_PUBLIC_KEY_INFO_FUNC для вызова. Если устанавливаемая функция не найдена для параметра pszPublicKeyObjId , предпринимается попытка экспортировать ключ в качестве открытого ключа RSA (szOID_RSA_RSA).
 

[in] dwFlags

Значение флага DWORD , указывающее, как экспортируются сведения об открытом ключе. Значение флага передается непосредственно в функцию CryptFindOIDInfo при сопоставлении идентификатора объекта открытого ключа с соответствующей строкой Юникода алгоритма открытого ключа CNG. Можно задать следующие значения флагов.

Значение Значение
CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG
Пропускает открытые ключи в группе CRYPT_PUBKEY_ALG_OID_GROUP_ID , явно помеченной флагом CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG .
CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG
Пропускает открытые ключи в группе CRYPT_PUBKEY_ALG_OID_GROUP_ID , явно помеченной флагом CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG .

[in] pvAuxInfo

Этот параметр зарезервирован для использования в будущем и должен иметь значение NULL.

[out] pInfo

Указатель на структуру CERT_PUBLIC_KEY_INFO для получения сведений открытого ключа для экспорта.

Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

[in, out] pcbInfo

Указатель на DWORD , содержащий размер (в байтах) буфера, на который указывает параметр pInfo . При возврате функции DWORD содержит количество байтов, хранящихся в буфере.

Примечание При обработке данных, возвращаемых в буфере, приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного на входных данных. (На входных данных размеры буфера обычно указываются достаточно большими, чтобы убедиться, что в буфере помещаются самые большие выходные данные.) В выходных данных переменная, на которую указывает этот параметр, обновляется с учетом фактического размера данных, скопированных в буфер.
 

Возвращаемое значение

Если функция выполнена успешно, возвращаемое значение не равно нулю (TRUE).

Если функция завершается ошибкой, возвращаемое значение равно нулю (FALSE). Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.

Примечание Ошибки из вызываемых функций CryptGetUserKey и CryptExportKey можно распространить на эту функцию.
 
Эта функция имеет следующие коды ошибок.
Код возврата Описание
ERROR_FILE_NOT_FOUND
Не удалось найти функцию экспорта, которую можно установить или зарегистрировать для указанных параметров dwCertEncodingType и pszPublicKeyObjId .
ERROR_MORE_DATA
Если буфер, заданный параметром pInfo , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает параметр pcbInfo .
 

Если функция завершается сбоем, GetLastError может вернуть ошибку кодирования и декодирования абстрактной синтаксической нотации 1 (ASN.1). Сведения об этих ошибках см. в разделе Кодирование и декодирование возвращаемых значений ASN.1.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

CryptImportPublicKeyInfoEx

Функции Управление данными