Крипто-Про CSP

CPGetKeyParam

Функция CPGetKeyParam() возвращает параметры ключа.

BOOL WINAPI CPGetKeyParam(
  HCRYPTPROV hProv,
  HCRYPTKEY hKey,
  DWORD dwParam,
  BYTE * pbData,
  DWORD * pdwDataLen,
  DWORD dwFlags
);

Аргументы

hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPAcquireContext().
hKey
[in] Дескриптор ключа, параметры которого возвращаются.
dwParam
[in] Параметр, принимающий следующие возможные значения:
Значение dwParam Содержимое буфера pbData
KP_ALGID Идентификатор алгоритма (ALG_ID), соответствующий данному ключу.
KP_PERMISSIONS Флаги разрешения использования ключа. Возвращаются в виде переменной типа DWORD.
KP_IV Начальный вектор инициализации (IV или синхропосылка) алгоритма шифрования.
KP_CERTIFICATE Получение сертификата из контейнера (из носителя).
KP_MODE Режим алгоритма шифрования. Возвращается в виде переменной типа DWORD. Используются режимы шифрования:
  • CRYPT_MODE_ECB - блочный шифр простой замены ГОСТ 28147-89;
  • CRYPT_MODE_CNT - шифрование гаммированием ГОСТ 28147-89;
  • CRYPT_MODE_CFB - шифрование гаммированием с обратной связью ГОСТ 28147-89.
  • CRYPT_MODE_CBC - блочный шифр с обратной связью на базе ГОСТ 28147-89;
KP_MODE_BITS Глубина обратной связи. Возвращается в виде переменной типа DWORD. Значение этой величины равно 64, что соответствует режиму гаммирования с обратной связью ГОСТ 28147-89.
KP_MIXMODE Дополнительный параметр ключа. Устанавливает режим преобразованием ключа после зашифрования каждых 1024 байт информации.
KP_KEYLEN Длина ключа в битах. Возвращается в виде переменной типа DWORD. Для ключей шифрования в параметре pbData возвращается длина ключа, для ключевых пар возвращается длина открытого ключа.
KP_BLOCKLEN Длина блока шифрования, обрабатываемого криптопровайдером. Возвращается в виде переменной типа DWORD. В случае сессионного ключа если для ключа установлен режим блочного шифрованя (CRYPT_MODE_ЕСB, CRYPT_MODE_CBС), в параметре pbData устанавливается размер блока алгоритма ГОСТ 28147-89, если установлен режим поточного шифрования (CRYPT_MODE_CNT, CRYPT_MODE_CFB), в параметре pbData устанавливается значение оптимального с точки зрения скорости шифрования размера блока, принимаемого от приложения (в настоящее время 8Кбит). В случае ключевой пары в параметре pbData устанавливается число бит модуля q как для ключей на экспонециальной логике (ГОСТ 34.10-94), так и для ключей на базе эллиптической кривой (ГОСТ 34.10-2001).
KP_CIPHEROID Идентификатор узла замены, устанавливаемого приложением. Строковая величина с признаком конца строки.
KP_DHOID Идентификатор алгоритма Диффи-Хеллмана. Строка, заканчивающаяся нулем.
KP_SIGNATUREOID Идентификатор алгоритма подписи. Строка, заканчивающаяся нулем.
KP_HASHOID Идентификатор функции хеширования, устанавливаемой приложением. Строка, заканчивающаяся нулем.
KP_Y Открытый ключ ключевой пары.
pbData
[out] Указатель на буфер данных параметра. Функция копирует соответствующие параметру данные в буфер. Формат этих данных зависит от значения dwParam . Если параметр - NULL, то данные не копируются. Требуемый размер буфера в байтах возвращается в pdwDataLen . Подробнее см. Возвращение данных неопределенной длины.
pdwDataLen
[in/out] Указатель на буфер, содержащий длину данных параметра. При вызове функции указанный параметр содержит число байтов в буфере pbData . После её выполнения параметр будет установлен числом байтов данных параметра, скопированных в буфер pbData . Если буфер, соответствующий pbData , недостаточно велик, чтобы в него копировать запрошенные данные, через функцию GetLastError() будет возвращен код ошибки ERROR_MORE_DATA. В этом случае требуемый размер буфера возвращается в pdwDataLen . Если эта функция завершается с кодом ошибки, отличным от ERROR_MORE_DATA, в этом параметре возвращается ноль.
dwFlags
[in] Значения флагов. Параметр зарезервирован для будущего использования и должен быть нулевым.

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

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError().
Коды возврата Описание
ERROR_MORE_DATA Размер буфера pbData недостаточен для копирования затребованных данных.
NTE_BAD_FLAGS Параметр dwFlags имеет ненулевое значение.
NTE_BAD_TYPE Параметр dwParam передаёт неизвестное значение параметра.
NTE_PERM Попытка чтения ключевых параметров, когда право чтения криптопровайдером не представлено.
SCARD_E_NO_SUCH_CERTIFICATE При попытке получения сертификата, когда сертификат отсутствует.

Примечания

Синхропосылка ключа для шифрования по алгоритму ГОСТ 28147-89 вырабатывается криптопровайдером автоматически с установкой типа ключа CALG28147 (сессионный ключ). Эту синхропосылку рекомендуется получить на передающем конце из ключа с помощью функции CPGetKeyParam() для значения pvParam KP_IV. На приемном конце значение синхропосылки устанавливается на ключ функцией CPSetKeyParam() при значении pvParam KP_IV. Если требуется задание синхропосылки из приложения, то ее рекомендуется вырабатывать с помощью функции CPGenRandom(). Использовать в системе другие алгоритмы образования синхропосылок можно только по согласованию с разработчиком криптопровайдера.

Требования:

Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле wincsp.h.
Ядро Windows NT: IRQL < DISPATCH_LEVEL

См. также:

CPSetKeyParam() ,CPGetKeyParam в MS CSP World Wide Web link ,CryptGetKeyParam в MS CryptoAPI 2.0 World Wide Web link

Крипто-Про CSP Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP