Крипто-Про CSP

CPSetProvParam

Функция CPSetProvParam() устанавливает параметры криптопровайдера.

BOOL WINAPI CPSetProvParam(
  HCRYPTPROV hProv,
  DWORD dwParam,
  BYTE * pbData,
  DWORD dwFlags
);

Аргументы

hProv
[in] Дескриптор криптопровайдера. Получается при помощи функции CPAcquireContext().
dwParam
[in] Аргумент, принимающий следующие значения:
Значение dwParam Содержимое буфера pbData
PP_KEYSET_SEC_DESCR Устанавливает дескриптор безопасности раздела реестра Windows, где хранятся ключи пользователя. Значение дескриптора передаётся в pbData . Функция не поддерживается. Возвращает TRUE.
PP_HASHOID Устанавливает идентификатор алгоритма функции хеширования.
PP_CIPHEROID Устанавливает идентификатор алгоритма шифрования.
PP_SIGNATUREOID Устанавливает идентификатор алгоритма подписи.
PP_DHOID Устанавливает идентификатор алгоритма Диффи-Хеллмана.
PP_KEYEXCHANGE_PIN Задаёт пароль (PIN) для доступа к ключам AT_SIGNATURE и AT_KEYEXCHANGE. Если пароль не задан этой функцией или задан этой функцией неверно, то он запрашивается у пользователя посредством UI перед первым обращением к носителю (если не был установлен флаг CRYPT_SILENT, см. CPAcquireContext()). Если pbData - NULL, то существующий пароль для этого контейнера забывается и для доступа к ключу потребуется повторный ввод пароля.

В КриптоПро CSP используется единый пароль (PIN) для доступа к ключам AT_SIGNATURE и AT_KEYEXCHANGE. Параметры PP_KEYEXCHANGE_PIN и PP_SIGNATURE_PIN эквивалентны.
PP_SIGNATURE_PIN Задаёт пароль (PIN) для доступа к ключам AT_SIGNATURE и AT_KEYEXCHANGE. Если пароль не задан этой функцией или задан этой функцией неверно, то он запрашивается у пользователя посредством UI перед первым обращением к носителю (если не был установлен флаг CRYPT_SILENT, см. CPAcquireContext()). Если pbData - NULL, то запомненный ранее пароль для этого контейнера забывается и для доступа к ключу потребуется повторный ввод пароля.

В КриптоПро CSP используется единый пароль (PIN) для доступа к ключам AT_SIGNATURE и AT_KEYEXCHANGE. Параметры PP_KEYEXCHANGE_PIN и PP_SIGNATURE_PIN эквивалентны.
PP_CHANGE_PIN Задаёт новый пароль для контейнера hProv.
PP_SET_PIN Устанавливает пароль на контейнер hProv в случае зашифрования его на другом контейнере или на нескольких контейнерах для схемы n из k. Этот пароль будет использован при последующем открытии контейнера hProv на чтение. Если контейнер hProv был создан при помощи функции CPAcquireContext() с флагом CRYPT_NEWKEYSET, то пароль, устанавливаемый на него, также будет установлен на доступ к ключу этого контейнера. Если функция CPSetProvParam() не вызывалась, то при доступе к ключу выдается UI (если не был установлен флаг CRYPT_SILENT, см. CPAcquireContext()). При открытии контейнера в SILENT-режиме возвращается ошибка.
PP_USE_HARDWARE_RNG Иницирует добавление к ДСЧ контекста криптопровайдера hProv значения с физического или БиоДСЧ. В случае, если в данной системе поддерживается только БиоДСЧ, то выдаётся UI для ввода событий мыши и/или клавиатуры (если не был установлен флаг CRYPT_SILENT, см. CPAcquireContext()).

При вызове функции CPSetProvParam() с параметром PP_USE_HARDWARE_RNG параметр pbData не используется.

Обычно, при отсуствии в системе физического ДСЧ, данные с БиоДСЧ добавляются в обязательном порядке к контексту криптопровайдера (в контейнер ключевой информации) только при создании постоянных ключей AT_KEYEXCHANGE или AT_SIGNAUTURE функцией CPGenKey().
PP_RANDOM Устанавливает в pbData ключевой блоб типа SIMPLEBLOB (см. CRYPT_SIMPLEBLOB ), содержащий последовательность случайных чисел, необходимую для установки программного ДСЧ уровня ядра ОС. См. описание параметра PP_RANDOM функции CPGetProvParam().
PP_CHECKPUBLIC Получает из pbData значение флага проверки открытого ключа. Если значение pbData равно 1, при импорте открытого ключа проверяется его корректность, если 0, проверка производится, если флаг установлен по параметру PP_ADMIN_CHECKPUBLIC. Открытый ключ, соответствующий ГОСТ 34.10-2001, проверяется всегда.
PP_ADMIN_CHECKPUBLIC Получает из pbData значение флага проверки открытого ключа и устанавливает его в реестр. Если значение установленного в реестре флага равно 1, при импорте открытого ключа проверяется его корректность независимо от установки пользователя по параметру PP_CHECKPUBLIC, если установленного в реестре флага равно 0, проверка производится в зависимости от установки по параметру PP_CHECKPUBLIC. Открытый ключ, соответствующий ГОСТ 34.10-2001, проверяется всегда.
PP_MUTEX_ARG Только для использования в ядре ОС и в UNIX. Устанавливает значение последнего аргумента функции mutex_init (указатель на обработчик прерывания) для всех mutex, используемых при работе CSP. Этот параметр необходимо установить до первого вызова CPAcquireContext(). Значение hProv при этом должно быть установлено в NULL.
PP_FAST_CODE Параметр предназначен для управления подключением быстрых функций на компьютерах, оснащенных процессором Intel Pentium 4. Применяется для установки функций захвата и освобождения регистров расширений MMX, SSE2. Определен только в KC1. В pbData структура типа CSP_FAST_CODE .
PP_NK_SYNC Производит запись одной из частей контейнера разделенного по схеме K из N. В качестве pbData должен быть передан DWORD полученный функцией GetProvParam с параметром PP_HCRYPTPROV. Функция используется для содания контейнера разделеноого на части без выдачи окон.
PP_DELETE_KEYSET Удаляет текущий контейнер с носителя. Функция используется для удаления контейнеров, требующих для очистки пароля, в SILENT режиме. Контейнер после успешного завершения данной операции больше не может быть использован ни в одной функции провайдера, исключая CPReleaseContext (CryptReleaseContext).
PP_DELETE_SAVED_PASSWD Удаляет сохраненные на диске пароли для заданного параметром контейнера или для всех контейнеров. Если в качестве pbData передан NULL, то функция производит удаление всех сохраненных паролей. Если в качестве pbData передано имя контейнера, то функция удаляет сохраненный пароль для этого контейнера. Имя контейнера должно быть задано в текущей кодировке и заканчиваться нулем. При удалении сохраненного пароля так же производится удаление связки между именем контейнера и уникальным именем контейнера.
PP_CONTAINER_EXTENSION Устанавливает extension для контейнера. Если extension уже был задан в контейнере, то функция заменяет этот extension в контейнере. В качестве pbData должен быть передан etxnsion в формате #CERT_EXTENSION.
PP_CONTAINER_EXTENSION_DEL Удаляет из контейнера extension, заданный строковым представлением OID.
PP_CONTAINER_DEFAULT Устанавливает текущий контейнер - контейнером по умолчанию на текущем носителе.
pbData
[in] Указатель на буфер, содержащий данные параметра. Этот буфер при обращении к функции должен содержать данные, которые соответствуют типу параметра, помещённому в dwParam . Формат данных зависит от типа параметра.
dwFlags
[in] Значения флагов. Используются следующие значения флагов:
Значение dwFlags Описание
SECURITY_INFORMATION Флаг устанавливается,если dwParam установлен в дескриптор безопасности раздела реестра PP_KEYSET_SEC_DESCR,содержащего ключевой контейнер. Указатель на дескриптор безопасности передаётся в аргументе pbData , его длина передаётся в аргументе pcbData . Используются следующие битовые флаги:
  • OWNER_SECURITY_INFORMATION - Указывает идентификатор владельца объекта.
  • GROUP_SECURITY_INFORMATION - Указывает идентификатор первичный группы объекта.
  • DACL_SECURITY_INFORMATION - Указывает идентификатор дискреционного ACL объекта.
  • SACL_SECURITY_INFORMATION - Указывает идентификатор системного ACL объекта.

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

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError.
Коды возврата Описание
NTE_BAD_DATA Длина идентификатора главного ключа пользователя превышает максимально допустимую.
NTE_BAD_FLAGS Величина dwFlags имеет ненулевое значение.
NTE_BAD_TYPE dwParam определяет неизвестный параметр.
NTE_KEYSET_ENTRY_BAD Нарушение целостности ключей в ОЗУ.
NTE_FAIL Ошибка при считывании данных из системного реестра.
SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию нажатием клавиши Cancel
SCARD_W_WRONG_CHV Пользователь ввел неправильный пароль или пароль, установленный функцией SetProvParam, неправильный
SCARD_E_INVALID_CHV Пользователь ввел пароль с нарушением формата или пароль, установленный функцией SetProvParam(), имеет неправильный формат. Например, пароль имеет недопустимую длину или содержит недопустимые символы.
SCARD_W_CHV_BLOCKED Ввод Pin-кода был заблокирован смарт-картой, т.к. исчерпалось количество попыток разрешенное картой для ввода.
NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации.
NTE_SILENT_CONTEXT Операция не может быть выполнена без пользовательского интерфейса.
SCARD_W_REMOVED_CARD Носитель контейнера был удален из считывателя

Требования:

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

См. также:

CPAcquireContext() ,CPGetProvParam() ,CPSetProvParam в MS CSP World Wide Web link ,CryptSetProvParam в MS CryptoAPI 2.0 World Wide Web link

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