BOOL WINAPI CPSetKeyParam( HCRYPTPROV hProv, HCRYPTKEY hKey, DWORD dwParam, BYTE * pbData, DWORD dwFlags );
Значение dwParam | Содержимое буфера pbData | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
KP_ALGID | Идентификатор алгоритма ключа (ALG_ID), соответствующий данному ключу. Передаётся функции через буфер pbData. Возможо установить значение CALG_G28147 для ключей класса ALG_CLASS_DATA_ENCRYPT (сессионных ключей).
| ||||||||||||||
KP_IV | Устанавливает начальное значение вектора инициализации (IV или синхропосылки) алгоритма шифрования. Начальное значение синхропосылки по умолчанию (после создания, дублирования и или завершения операции шифрования) - случайное. Последовательность байтов, содержащая IV, передаётся функции через буфер pbData. | ||||||||||||||
KP_CERTIFICATE | Установка сертификата в контейнер (на носитель). Сертификат должен соответствовать ключу в контейнере. | ||||||||||||||
KP_PADDING | Способ дополнения. Величина DWORD, содержащая метод дополнения, используемый шифром ключа, передаётся функции через буфер pbData. В настоящее время определены следующие способы дополнения:
| ||||||||||||||
KP_MODE | Режим шифра. Переменная типа DWORD. Передаётся функции через буфер pbData. В следующем списке приведены режимы шифрования для ключей CALG_G28147 класса ALG_CLASS_DATA_ENCRYPT, доступные в настоящее время:
Для ключей CALG_EKE_CIPHER доступны режимы шифрования:
| ||||||||||||||
KP_MODE_BITS | Глубина обратной связи. Переменная типа DWORD. Значение этой величины равно 64, что соответствует режиму гаммирования с обратной связью ГОСТ 28147-89. | ||||||||||||||
KP_MIXMODE | Дополнительный параметр ключа. Устанавливает режим преобразования ключа после зашифрования каждых 1024 байт информации. Режим преобразования ключа (CRYPT_PROMIX_MODE) установлен по умолчанию. Выйти из этого режима можно, если для этого параметра в pbData будет установлено CRYPT_SIMPLEMIX_MODE. Если в pbData установлено CRYPT_PROMIX_MODE, устанавливается режим преобразования ключа. Размер pbData - 4 байта. Может быть установлен для ключей типа CALG_G28147. Возвращается в виде переменной типа DWORD. | ||||||||||||||
KP_MIXSTART | Осуществляет диверсификацию ключа по алгоритму CALG_PRO_DIVERS. Через параметр pbData передаётся блоб диверсификации ключа в форме CRYPR_DATA_BLOB, см. CPCImportKey(). Допускается многократный вызов с различными параметрами диверсификации. | ||||||||||||||
KP_CIPHEROID | Идентификатор узла замены. Строка, заканчивающаяся нулем. При первоначальной выработке ключа по умолчанию устанавливается в соответствии с параметрами, указанными в панели криптопровайдера. В панели по умолчанию указан набор "ГОСТ 28147-89, параметры по умолчанию" (szOID_Gost28147_89_CryptoPro_A_ParamSet, 1.2.643.2.2.31.1). | ||||||||||||||
KP_DHOID | Идентификатор параметров ключа ГОСТ Р 34.10-2001, применяемых в алгоритме Диффи-Хеллмана. Строка, заканчивающаяся нулем. Начиная с версии 3.6 допускается устанавливать идентификаторы подписи. Необходимо устанавливать глобальным параметром PP_DHOID до генерации ключа. | ||||||||||||||
KP_HASHOID | Идентификатор функции хэширования. Строка, заканчивающаяся нулем. Необходимо устанавливать глобальным параметром PP_HASHOID до генерации ключа. | ||||||||||||||
KP_CLIENT_RANDOM | Идентификатор величины ClientRandom, используемой с ключами типа CALG_TLS1_MASTER. Размер ClientRandom - 32 байта. Используется при преобразовании premaster_secret в master_secret и при генерации ключевой информации в момент создания хеша CALG_TLS1_MASTER_HASH. | ||||||||||||||
KP_SERVER_RANDOM | Идентификатор величины ServerRandom, используемой с ключами типа CALG_TLS1_MASTER.Размер ServerRandom - 32 байта. Используется при преобразовании premaster_secret в master_secret и при генерации ключевой информации в момент создания хеша CALG_TLS1_MASTER_HASH. | ||||||||||||||
KP_PREHASH | Идентификатор, используемый ключами типа CALG_TLS1_MASTER. Предварительно требуется установить KP_CLIENT_RANDOM и KP_SERVER_RANDOM. Вызов функции преобразует premaster_secret в master_secret. | ||||||||||||||
KP_X | Закрытый ключ в ключевой паре. 32 байта в форме little endian. Данные передаются в форме BLOB структуры, где член структуры pbData указавает на данные, а cbData передаёт длину данных. | ||||||||||||||
KP_MULX | Для произвольной ключевой пары осуществляет умножение закрытого и открытого ключей на значение передаваемого параметра pbData. Для ключа CALG_PRO_AGREEDKEY_DH осуществляет умножение закрытого ключа на значение передаваемого параметра pbData. Данные передаются в форме BLOB структуры, где член структуры pbData указавает на данные - 32 байта в форме little endian, а cbData передаёт длину данных. | ||||||||||||||
KP_MULX_INVERS | Аналогично KP_MULX осуществляет умножение на величину, обратную к величине, передаваемой в параметре pbData. | ||||||||||||||
KP_ADDX | Для закрытого ключа осуществляет сложение по модулю q значения ключа и значения смещения, передаваемого через параметр pbData. Данные передаются в форме BLOB структуры, где поле pbData указавает на данные - смещение, а cbData передаёт длину данных. | ||||||||||||||
KP_SUBX | Для открытого ключа осуществляет вычитание по модулю q из значения ключа значения смещения, передаваемого через параметр pbData. Данные передаются в форме BLOB структуры, где поле pbData указывает на данные - смещение, а cbData передаёт длину данных. | ||||||||||||||
KP_ECADD | Для открытого ключа осуществляет сложение в группе точек эллиптической кривойоткрытого ключа и значения блоба открытого ключа, передаваемого через параметр pbData. Данные передаются в форме BLOB структуры, где поле pbData указавает на данные - блоб открытого ключа, а cbData передаёт длину данных. | ||||||||||||||
KP_ECSUB | Для открытого ключа осуществляет вычитание в группе точек эллиптической кривой открытого из ключа значение блоба открытого ключа, передаваемого через параметр pbData. Данные передаются в форме BLOB структуры, где поле pbData указавает на данные - блоб открытого ключа, а cbData передаёт длину данных. | ||||||||||||||
KP_DEMASKPUBLIC | Устанавливает открытый ключ на ключ CALG_PRO_AGREEDKEY_DH, что обеспечивает расшифрование ключа в алгоритме выработки ключа обмена с использованием функционального ключевого носителя. Специфика протокола ООО "КРИПТО-ПРО" взаимодействия с функциональным ключевым носителем. | ||||||||||||||
KP_SYNCRO | Устанавливает значение синхропосылки на ключ пользователя. Ключ должен быть создан в контексте с флагом CRYPT_TOKEN_SHARED. Данные передаются в форме BLOB структуры, где pbData указавает на данные – 32 бйта синхропосылки, а cbData передаёт длину данных. Специфика протокола ООО КриптоПро взаимодействия с функциональным ключевым носителем. | ||||||||||||||
KP_UEC_DERIVE_COUNTER | Для ключа типа AT_UECSYMMETRICKEY устанавливает значение счетчика ключей, полученных диверсификацией данного. Переменная типа DWORD. |
Коды возврата | Описание |
---|---|
ERROR_INVALID_PARAMETER | Один из параметров содержит некорректное значение. Чаще всего это некорректный указатель. |
NTE_BAD_FLAGS | Параметр dwFlags имеет ненулевое значение. |
NTE_BAD_TYPE | Параметр dwParam передаёт неизвестное значение параметра. |
NTE_BAD_KEY | Дескриптор ключа ошибочен. |
NTE_PERM | Попытка чтения ключевых параметров, когда право чтения криптопровайдером не предоставлено. |
NTE_FIXEDPARAMETER | Была произведена попытка установить параметры, постоянные для данного криптопровайдера. |
NTE_BAD_DATA | Неправильные данные в буфере pbData. |
ДОПОЛНЕНИЕ PKCS #5 Эта схема дополнения определена RSA Data Security, Inc. и описана в "Public-Key Cryptography Standards (PKCS)", PKCS #5, раздел 6.2. При использовании данной схемы, последовательность всегда дополняется знаками, даже в случае, когда её длина кратна длине блока шифрования. Последовательность дополнения состоит из байтов, каждый из которых равен числу дополнительных байтов. Если дополняется последовательность из 24 бит, последовательность дополнения равна “05 05 05 05 05”. Если дополняется 64 бита, последовательность дополнения равна “08 08 08 08 08 08 08 08”. При расшифровании, если расширение блока удовлетворяет условиям дополнения PKCS #5, функция CPDecrypt() в переменной pdwDataLen, возвращает истинное значение длины открытого текста. Если расширение блока не удовлетворяет условиям дополнения PKCS #5, функция CPDecrypt() возвращает ошибку NTE_BAD_DATA,а в переменной pdeDataLen значение длины шифрованного текста. Дополнение PKCS #5 не обеспечивает контроль целостности данных. ДОПОЛНЕНИЕ ZERO При использовании данной схемы, последовательность дополняется нулевыми байтами до наименьшей длины, кратной длине блока шифрования. ДОПОЛНЕНИЕ RANDOM При использовании данной схемы, последовательность дополняется случайными байтами до наименьшей длины, кратной длине блока шифрования.
РЕЖИМ CRYPT_MODE_ECB В соответствии с требованиями ГОСТ 28147-89 режим шифрования простой заменой CRYPT_MODE_ECB может использоваться только для шифрования ключевой информации.
Значения параметров KP_MODE, KP_MIXMODE, KP_CIPHEROID и KP_PADDING, устанавливаемые по умолчанию во вновь создаваемый симметричный ключ операциями CPImportKey(), CPDuplicateKey() и CPDeriveKey(), указаны в соответствующих разделах.
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 или выше: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Файл описания: Прототип описан в файле CSP_WinCrypt.h.
Ядро ОС: Вместо неё используется аналогичная функция CPCSetKeyParam .
CPGenKey() ,CPGetKeyParam() ,CPSetKeyParam в MS CSP ,CryptSetKeyParam в MS CryptoAPI 2.0