КриптоПро CSP  

CPCGetUserKey

Функция CPCGetUserKey() возвращает дескриптор одной из долговременных ключевых пар в ключевом контейнере, или симметричный ключ, сохраненный в контейнере.

DWORD CPCAPI CPCGetUserKey(
  HCRYPTMODULE hCSP,
  HCRYPTPROV hProv,
  DWORD dwKeySpec,
  HCRYPTKEY * phUserKey
);

Аргументы

hCSP
[in] Указатель на таблицу функций криптопровайдера. Получается при помощи функции CPCCreateProvider()
hProv
[in] Дескриптор криптопровайдера.
Получается при помощи функции CPCAcquireContext().
dwKeySpec
[in] Спецификация возвращаемого ключа. Следующие типы ключевых пар и ключей определены в настоящее время:
Значение Описание
AT_KEYEXCHANGE Ключевая пара обмена
AT_SIGNATURE Ключевая пара цифровой подписи
AT_SYMMETRIC Симметричный ключ.
AT_UECSYMMETRICKEY Симметричный ключ - мастерключ для систем аутентификации карт
phUserKey
[out] Адрес, по которому функция копирует дескриптор ключа.

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

При успешном завершении функция возвращает 0 (S_OK), в противном случае возвращается соответствующий код ошибки (см. таблицу).
Коды возвратаОписание
ERROR_INVALID_PARAMETERОдин из параметров содержит некорректное значение. Чаще всего это некорректный указатель.
NTE_NO_KEYКлюч, указанный dwKeySpec параметром, не существует.
NTE_BAD_TYPEЗначение параметра dwKeySpec неизвестно.
SCARD_W_CANCELLED_BY_USERПользователь прервал операцию нажатием клавиши Cancel
SCARD_W_WRONG_CHVПользователь ввёл неправильный пароль или пароль, установленный функцией SetProvParam(), неправильный
SCARD_E_INVALID_CHVПользователь ввёл пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.
SCARD_W_CHV_BLOCKEDВвод Pin-кода был заблокирован смарт-картой, т.к. исчерпалось количество попыток разрешенное картой для ввода.
NTE_SILENT_CONTEXTОперация не может быть выполнена без пользовательского интерфейса.
SCARD_W_REMOVED_CARDНоситель контейнера был удален из считывателя
SCARD_E_NO_KEY_CONTAINERПопытка выполнения операции в контексте смарт-карты или токена, а не контейнера.
SCARD_W_SECURITY_VIOLATIONФукции безопасности токена или смарт-карты работают некорректно.
ERROR_PASSWORD_EXPIREDПароль данного носителя истек, необходимо его сменить.
SCARD_E_READ_ONLY_CARDСмарт-карта недоступна для использования из-за ограничений безопасности.

Примечания

При перечислении ключей типа AT_UECSYMMETRICKEY производится считывание ключа из ключевого контейнера. В некоторых случаях это может приводить к вызову окна запроса пароля ключа.

Полученный дескриптор ключа должен в обязательном порядке быть удалён с помощью вызова функции CPCDestroyKey()  до вызова функции CPCReleaseContext() для рабочего дескриптора криптопровайдера.

Требования:

Ядро FreeBSD: 7/8/9 или выше
Ядро Linux: ядро 2.4.x/2.6.x/3.0.х/3.2.х или выше
Ядро Solaris: 10/11 или выше.
Ядро Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше.

См. также

CPCExportKey() ,CPCGenKey() ,CPGetUserKey в MS CSP World Wide Web link ,CryptGetUserKey в MS CryptoAPI 2.0 World Wide Web link