BOOL WINAPI CPExportKey( HCRYPTPROV hProv, HCRYPTKEY hKey, HCRYPTKEY hExpKey, DWORD dwBlobType, DWORD dwFlags, BYTE * pbData, DWORD * pdwDataLen );
Тип | Использование |
---|---|
SIMPLEBLOB | Используется для транспортировки симметричных ключей CALG_G28147, CALG_UECSYMMETRIC. pbData указывает на структуру CRYPT_SIMPLEBLOB . |
OPAQUEKEYBLOB | Используется для транспортировки ключа сессии с накопленным состоянием. pbData указывает на структуру CRYPT_OPAQUEBLOB . |
PUBLICKEYBLOB | Используется для транспортировки открытых ключей. pbData указывает на структуру CRYPT_PUBLICKEYBLOB . |
PRIVATEKEYBLOB | Используется для транспортировки закрытых ключей). pbData указывает на структуру CRYPT_PRIVATEKEYBLOB . |
Коды возврата | Описание |
---|---|
ERROR_INVALID_PARAMETER | Один из параметров содержит некорректное значение. Чаще всего это некорректный указатель. |
ERROR_MORE_DATA | Буфер pbData недостаточно большой, чтобы копировать затребованные данные. |
NTE_BAD_FLAGS | Величина dwFlags имеет ненулевое значение. |
NTE_BAD_KEY | Один или оба из ключей, указанных hKey и hExpKey, не действительны. |
NTE_BAD_KEY_STATE | Попытка экспорта ключа, когда право экспорта криптопровайдером не предоставлено; попытка экспорта на ключе, для которого разрешение экспортировать не установлено. |
NTE_BAD_TYPE | dwBlobType параметр определяет неизвестный тип блоба. |
NTE_NO_MEMORY | Криптопровайдер во время операции исчерпал память. |
NTE_FAIL | Ошибка при считывании данных из системного реестра. см. Дополнительные параметры и определения . |
SCARD_W_CANCELLED_BY_USER | Пользователь прервал операцию. |
Обычно для согласования (экспорта/импорта) сессионного ключа применяют алгоритм Диффи-Хеллмана. В этом случае ключ парной связи (ключ экспорта/импорта сессионного ключа) порождается операцией импорта (см. CPImportKey()) открытого ключа получателя (отправителя) на ключевой паре отправителя (получателя). Т.е. для экспорта сессионного ключа следует выполнить следующие шаги:
... CPGetUserKey(hProv, AT_KEYEXCHANGE, &hUserKey); ... CPGenKey(hProv, CALG_G28147, CRYPT_EXPORTABLE, &hSessionKey); ... CPImportKey(hProv, pbRecipentPublicKey, cbRecipentPublicKey, hUserKey, 0, &hExchKey); ALG_ID ke_alg = CALG_PRO_EXPORT; CPSetKeyParam(hProv, hExchKey, KP_ALGID, (LPBYTE)&ke_alg, 0); CPExportKey(hProv, hSessionKey, hExchKey, SIMPLEBLOB, 0, pbSessionKeyForRecipient, &cbSessionKeyForRecipient); ...
PUBLICKEYBLOB длины 69 байт в настоящее время не может использоваться в составе сертификата открытого ключа. Блобы данного вида критичны к искажениям, поэтому должны использоваться в приложениях с контролем целостности.
AIX: 5/6/7 или выше.
FreeBSD: 7/8/9 или выше.
Linux: LSB 3.1 (RHEL 4, SuSE 10) или выше.
Solaris: 10 или выше.
Mac OSX: 10.7/8 или выше.
iOS: 6/7 или выше.
Windows 2000/XP/2003/Vista/2008/7: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Файл описания: Прототип описан в файле CSP_WinCrypt.h.
Ядро ОС: Вместо неё используется аналогичная функция CPCExportKey .
CPImportKey() ,CPExportKey в MS CSP ,CryptExportKey в MS CryptoAPI 2.0