DWORD CPCAPI CPCGetKeyParam( HCRYPTMODULE hCSP, HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam, BYTE * pbData, DWORD * pdwDataLen, DWORD dwFlags );
Значение dwParam | Содержимое буфера pbData |
---|---|
KP_ALGID | Идентификатор алгоритма (ALG_ID), соответствующий данному ключу. |
KP_PERMISSIONS | Флаги разрешения использования ключа. Возвращаются в виде переменной типа DWORD. |
KP_IV | Возвращает начальное значение вектора инициализации (IV или синхропосылки) алгоритма шифрования. Если ключ использовался в вызове CPCEncrypt() или CPCDecrypt() с параметром Final = FALSE, то значение данного параметра остается неизменным до вызова соответствующей функции с параметром Final = TRUE. По завершению работы функции начальное значение синхропосылки изменяется на случайное. До вызова CPCEncrypt() или CPCDecrypt() с параметром Final = FALSE значение параметра может быть изменено с помощью функции CPCSetKeyParam(). |
KP_IV_BLOB | Возвращает начальное значение вектора инициализации (IV или синхропосылки) для алгоритма VKO GOST R 34.10-2012-256 и шифрования по ГОСТ Р 34.12-2015. |
KP_CERTIFICATE | Получение сертификата из контейнера (из носителя). |
KP_MODE | Режим алгоритма шифрования. Возвращается в виде переменной типа DWORD. Для ключей CALG_G28147 используются режимы шифрования:
|
KP_PADDING | Способ дополнения. Величина DWORD, содержащая метод дополнения, используемый шифром ключа, передаётся функции через буфер pbData. В настоящее время определены следующие способы дополнения:
|
KP_AUTH_TAG | Получение тэга аутентификации при шифровании в AEAD-режиме. Может быть использовано при шифровании потока данных после вызова CPCEncrypt() с финализацией (флагом Final = TRUE) или непосредственно после установки аутентифицируемых данных через CPCSetKeyParam() с параметром KP_AUTH_DATA. |
KP_MODE_BITS | Глубина обратной связи. Возвращается в виде переменной типа DWORD. Для CALG_G28147 значение этой величины равно 64, что соответствует режиму гаммирования с обратной связью ГОСТ 28147-89. Для ключей CALG_GR3412_2015_M и CALG_GR3412_2015_K определяет длину блока гаммы и по умолчанию равно 64 и 128 бит соответственно. |
KP_MIXMODE | Режим преобразования ключа. Возвращается в виде переменной типа DWORD. Используются режимы преобразования:
|
KP_MIX_BLOCK_SIZE | Количество зашифрований блока данных, после которого производится смена ключа при работе в режиме CRYPT_PROMIX_MODE для алгоритмов CALG_GR3412_2015_M и CALG_GR3412_2015_K. По умолчанию имеет значения 128 и 256 соответственно. |
KP_KEYLEN | Длина ключа в битах. Возвращается в виде переменной типа DWORD. Для ключей шифрования в параметре pbData возвращается длина ключа, для ключевых пар возвращается длина открытого ключа. |
KP_BLOCKLEN | Длина блока шифрования, обрабатываемого криптопровайдером. Возвращается в виде переменной типа DWORD. В случае сессионного ключа если для ключа установлен режим блочного шифрованя (CRYPT_MODE_ЕСB, CRYPT_MODE_CBС), в параметре pbData устанавливается размер блока алгоритмов ГОСТ 28147-89 или ГОСТ Р 34.12-2015 в зависимости от типа ключа, если установлен режим поточного шифрования (CRYPT_MODE_CNT, CRYPT_MODE_CFB), в параметре pbData устанавливается значение оптимального с точки зрения скорости шифрования размера блока, принимаемого от приложения (в настоящее время 8Кбит). В случае ключевой пары в параметре pbData устанавливается число бит модуля q для ключей на базе эллиптической кривой (ГОСТ Р 34.10-2001 и ГОСТ Р 34.10-2012). |
KP_CIPHEROID | Идентификатор узла замены, устанавливаемого приложением. Строковая величина с признаком конца строки. |
KP_DHOID | Идентификатор алгоритма Диффи-Хеллмана. Строка, заканчивающаяся нулем. |
KP_SIGNATUREOID | Идентификатор алгоритма подписи. Строка, заканчивающаяся нулем. |
KP_HASHOID | Идентификатор функции хэширования, устанавливаемой приложением. Строка, заканчивающаяся нулем. |
KP_DELTA | Возвращает значение дельты после установки на пользовательский ключ значение синхропосылки. В pbData указавает на данные – 32 байта дельты. Специфика протокола ООО "КРИПТО-ПРО" взаимодействия с функциональным ключевым носителем. |
KP_FP | Возвращает первые 8 байт открытого ключа. |
KP_NOTAFTER | См. Сроки действия долговременных ключей в "КриптоПро CSP 5.0" . |
KP_UEC_DERIVE_COUNTER | Для ключа типа AT_UECSYMMETRICKEY возвращает значение счетчика ключей, полученных диверсификацией данного. Возвращается в виде переменной типа DWORD. |
Коды возврата | Описание |
---|---|
ERROR_INVALID_PARAMETER | Один из параметров содержит некорректное значение. Чаще всего это некорректный указатель. |
ERROR_MORE_DATA | Размер буфера pbData недостаточен для копирования затребованных данных. |
NTE_BAD_FLAGS | Параметр dwFlags имеет ненулевое значение. |
NTE_BAD_TYPE | Параметр dwParam передаёт неизвестное значение параметра. |
NTE_BAD_KEY | Дескриптор ключа ошибочен. |
NTE_PERM | Попытка чтения ключевых параметров, когда право чтения криптопровайдером не представлено. |
SCARD_E_NO_SUCH_CERTIFICATE | При попытке получения сертификата, когда сертификат отсутствует. |
SCARD_E_NO_KEY_CONTAINER | Попытка выполнения операции в контексте смарт-карты или токена, а не контейнера. |
SCARD_W_SECURITY_VIOLATION | Фукции безопасности токена или смарт-карты работают некорректно. |
ERROR_PASSWORD_EXPIRED | Пароль данного носителя истек, необходимо его сменить. |
SCARD_E_READ_ONLY_CARD | Смарт-карта недоступна для использования из-за ограничений безопасности. |
Синхропосылка ключа для шифрования по алгоритмам ГОСТ 28147-89 и ГОСТ Р 34.12-2015 вырабатывается криптопровайдером автоматически с установкой типа ключа CALG_28147 и CALG_GR3412_2015_M/CALG_GR3412_2015_K (сессионный ключ) соответственно. Эту синхропосылку рекомендуется получить на передающем конце из ключа с помощью функции CPCGetKeyParam() для значения pvParam KP_IV для CALG_28147 и KP_IV_BLOB для CALG_GR3412_2015_M/CALG_GR3412_2015_K. На приёмном конце значение синхропосылки устанавливается на ключ функцией CPCSetKeyParam() при значении pvParam KP_IV для CALG_28147 и KP_IV_BLOB для CALG_GR3412_2015_M/CALG_GR3412_2015_K. Если требуется задание синхропосылки из приложения, то ее рекомендуется вырабатывать с помощью функции CPCGenRandom(). Использовать в системе другие алгоритмы образования синхропосылок можно только по согласованию с разработчиком криптопровайдера.
Ядро AIX: 6/7.
Ядро FreeBSD: 11/12.
Ядро Linux: 2.6.x и выше.
Ядро Solaris: 10/11.
Ядро Windows: 7/8/8.1/10, Server 2008/2008R2/2012/2012R2/2016/2019.
CPCSetKeyParam() ,CPGetKeyParam в MS CSP ,CryptGetKeyParam в MS CryptoAPI 2.0