Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Все параметры, необходимые для инициализации, передаются в структуре типа CK_RUTOKEN_INIT_PARAM.

Внимание! Для Рутокен S параметры ulMinAdminPinLen и ulMinUserPinLen из структуры CK_RUTOKEN_INIT_PARAM, не могут принимать значение больше 1.

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

CKR_OK – функция выполнена успешно.

...

Code Block
languagecpp
collapsetrue
static CK_CHAR USER_PIN[] = {'1', '2', '3', '4', '5', '6', '7', '8'};	// PIN-код Пользователя Рутокен по умолчанию
static CK_CHAR SO_PIN[] = {'8', '7', '6', '5', '4', '3', '2', '1'};	 	// PIN-код Администратора Рутокен по умолчанию
CK_FUNCTION_LIST_PTR pFunctionList;										// указатель на структуру CK_FUNCTION_LIST, в которой хранится список стандартных функций
CK_C_EX_GetFunctionList pfGetFunctionList;								// указатель на функцию C_GetFunctionList
CK_SLOT_ID slots[100];													// массив идентификаторов слотов
CK_ULONG ulSlotCount = 100;												// количество идентификаторов слотов в массиве
CK_RUTOKEN_INIT_PARAM ckRtInitParams;									// структура, задающая параметры форматирования токена
CK_RV rv;																// вспомогательная переменная для хранения кода возврата

/* заполнение полей структуры CK_RUTOKEN_INIT_PARAM */
ckRtInitParams.ulSizeofThisStructure = sizeof(CK_RUTOKEN_INIT_PARAM);	// задаем размер структуры
ckRtInitParams.UseRepairMode = 0;										// требуем ввод PIN-кода Администратора (0 - да, режим восстановления выключен, !0 - нет, режим восстановления включен)
ckRtInitParams.pNewAdminPin = SO_PIN;									// задаем новый PIN-код Администратора (минимум (?), максимум 32 байта)
ckRtInitParams.ulNewAdminPinLen = sizeof(SO_PIN);						// указываем длину нового PIN-кода Администратора
ckRtInitParams.pNewUserPin = USER_PIN;									// задаем новый PIN-код Пользователя (минимум (?), максимум 32 байта)
ckRtInitParams.ulNewUserPinLen = sizeof (USER_PIN);						// указываем длину нового PIN-кода Пользователя
ckRtInitParams.ChangeUserPINPolicy = TOKEN_FLAGS_ADMIN_CHANGE_USER_PIN 
									| TOKEN_FLAGS_USER_CHANGE_USER_PIN; // задаем политику смены PIN-кода пользователя: Администратором и Пользователем
ckRtInitParams.ulMinAdminPinLen = 6;									// задаем минимальную длину PIN-кода Администратора (минимум 6, максимум 32 байта)
ckRtInitParams.ulMinUserPinLen = 6;										// задаем минимальную длину PIN-кода Пользователя (минимум 6, максимум 32 байта)
ckRtInitParams.ulMaxAdminRetryCount = 10;								// задаем максимальное количество попыток доступа к PIN-коду Администратора (минимум 3, максимум 10 байтов)
ckRtInitParams.ulMaxUserRetryCount = 10;								// задаем максимальное количество попыток доступа к PIN-коду Пользователя (минимум 1, максимум 10 байтов)
ckRtInitParams.pTokenLabel = "Rutoken label";							// задаем метку пользователя
ckRtInitParams.ulLabelLen = 13;											// указываем длину метки пользователя

.
.
pfGetFunctionList = (CK_C_GetFunctionList)GetProcAddress(hModule,"C_GetFunctionList");	//получение списка стандартных функций
pfGetFunctionList(&pFunctionList);

rv = pfGetFunctionList -> C_GetSlotList(CK_TRUE, slots, &ulSlotCount);	// получение списка слотов с подключенными токенами
if (rv == CKR_OK )														// проверка результата
	printf("Getting connected slots list -> OK \n");
else
	printf("Getting connected slots list -> failed \n");
if (ulSlotCount == 0)
	printf("No Rutoken is available");

rv = pfGetFunctionListEx -> 
	C_EX_InitToken(slots[0], SO_PIN, sizeof(SO_PIN), &ckRtInitParams); 	// инициализация токена (считаем, что подключен один токен к первому слоту)
if (rv == CKR_OK)														// проверка результата
	printf("Token initialization -> OK \n");
else
	printf("Token initialization -> failed \n");

...

Функция сбрасывает счетчик неверных попыток ввода PIN-кода для CKU_USER. Функция может быть вызвана только из сессии, имеющей статус CKS_RW_SO_FUNCTIONS.

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

CKR_OK – функция выполнена успешно.

...

Функция позволяет установить метку токена произвольной длины, в отличии от стандартной функции C_InitToken, которая позволяет устанавливать метку токена фиксированного размера. Функция может быть вызвана только из сессии, имеющей статус CKS_RW_USER_FUNCTIONS.

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

CKR_OK – функция выполнена успешно.

...

Для определения необходимого количества памяти для хранения метки токена, необходимо вызвать функцию C_EX_GetTokenName с параметром pLabel равным NULL_PTR, тогда в параметре pulLabelLen будет возвращен указатель на переменную с требуемым размером буфера.

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

CKR_OK – функция выполнена успешно.

...

hSession[in]дескриптор сессии
ulLicenseNum[in]идентификатор лицензии. Параметр может принимать одно из двух значений: 1 или 2
pLicense[in]указатель на буфер, содержащий лицензию
ulLicenseLen[in]размер буфера с лицензией, в байтах. Параметр может принимать только одно значение: 72

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

CKR_OK – функция выполнена успешно.

...

hSession[in]дескриптор сессии
ulLicenseNum[in]идентификатор лицензии. Параметр может принимать одно из двух значений: 1 или 2
pLicense[out]указатель на буфер для получения лицензии
ulLicenseLen[in, out]размер буфера с лицензией, в байтах. Параметр может принимать только одно значение: 72

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

CKR_OK – функция выполнена успешно.

...

slotID[in]

идентификатор слота, к которому подключен токен

pUserPin или pOldLocalPin[in]указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код
ulUserPinLen или pOldLocalPinLen[in]длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода
pNewLocalPin[in]указатель на новый Локальный PIN-код

ulNewLocalPinLen

[in]длина нового Локального PIN-кода

ulLocalID

[in]идентификатор Локального PIN-кода

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

CKR_OK – функция выполнена успешно.

...

Функция поддерживает генерацию запроса на сертификат для следующих типов ключей: ГОСТ 34.10-2012 с длиной закрытого ключа 256 бит, ГОСТ 34.10-2001 и RSA (типы ключей CKK_GOSTR3410 и CKK_RSA).

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

CKR_OK – функция выполнена успешно.

...

Функция поддерживает подпись по следующим алгоритмам: ГОСТ 34.10-2012 с длиной закрытого ключа 256 бит и ГОСТ 34.10-2001 (механизм CKM_GOSTR3410).

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

CKR_OK – функция выполнена успешно.

...

Функция может быть вызвана только из состояний  "R/W User Functions" и  "R User Functions". 

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

CKR_OK – функция выполнена успешно.

...

Функция может быть вызвана только из состояний  "R/W User Functions" и  "R User Functions", после вызова функции C_EX_PKCS7Verifyinit.

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

CKR_OK – функция выполнена успешно.

...

Функция может быть вызвана только из состояний  "R/W User Functions" и  "R User Functions",  после вызова функции C_EX_PKCS7VerifyInit. Для завершения процесса проверки подписи необходим вызов функции C_EX_PKCS7Verifyfinal.

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

CKR_OK – функция выполнена успешно.

...

Функция может быть вызвана только из состояний  "R/W User Functions" и  "R User Functions",  после вызова функции C_EX_PKCS7VerifyUpdate.

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

CKR_OK – функция выполнена успешно.

...

slotID

[in]

идентификатор слота с подключенным токеном

pulDriveSize

[out]

возвращаемый размер флеш-памяти в Мб

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

CKR_OK – функция выполнена успешно.

...

slotID

[in]

идентификатор слота с подключенным токеном

userType

[in]

тип пользователя, допустимое значение только

CKU_SO – глобальный администратор.

pPin

[in]PIN-код пользователя

ulPinLen

[in]длина PIN-кода пользователя

pInitParams

[in]

указатель на массив структур типа CK_VOLUME_FORMAT_INFO_EXTENDED, содержащих детальную информацию о разделах

ulVolumeSize

размер раздела в Мб

accessMode

флаги доступа к разделу:

ACCESS_MODE_RW – доступ на чтение и запись;
ACCESS_MODE_RO – доступ только на чтение;
ACCESS_MODE_HIDDEN – скрытый раздел, защищенный от отображения в операционной системе, чтения, записи и любого другого типа доступа;
ACCESS_MODE_CD – раздел, эмулирующий CD-ROM.

volumeOwner

владелец раздела, имеет права на изменение флага доступа к разделу:

CKU_USER – глобальный пользователь;
CKU_SO – глобальный администратор;
CKU_LOCAL_X, где X – число от 1 до 8 – локальный пользователь X

flags

остальные флаги


ulInitParamsCount

[in]количество записей в массиве

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

CKR_OK – функция выполнена успешно.

...

slotID

[in]

идентификатор слота с подключенным токеном

pInfo

[out]

указатель на массива структур типа CK_VOLUME_INFO_EXTENDED с информацией о разделах:

idVolume

идентификатор раздела, может принимать значения от 1 до 9

ulVolumeSize

размер раздела в Мб (не больше общего объема носителя)

accessMode

флаги доступа к разделу:

ACCESS_MODE_RW – доступ на чтение и запись;
ACCESS_MODE_RO – доступ только на чтение;
ACCESS_MODE_HIDDEN – скрытый раздел, защищенный от отображения в операционной системе, чтения, записи и любого другого типа доступа;
ACCESS_MODE_CD – раздел, эмулирующий CD-ROM.

volumeOwner

владелец раздела, имеет права на изменение флага доступа к разделу:

CKU_USER – глобальный пользователь;
CKU_SO – глобальный администратор;
CKU_LOCAL_X, где X – число от 1 до 8 – локальный пользователь X

flags

остальные флаги


pulInfoCount

[out]

размер массива

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

CKR_OK – функция выполнена успешно.

...

slotID

[in]

идентификатор слота с подключенным токеном

userType

[in]

владелец раздела, допустимые значения:

CKU_USER – глобальный пользователь;
CKU_SO – глобальный администратор;
CKU_LOCAL_X, где X – число от 1 до 8 – локальный пользователь X

pPin

[in]PIN-код пользователя

ulPinLen

[in]длина PIN-кода пользователя

idVolume

[in]

идентификатор раздела

newAccessMode

[in]новые флаги доступа к разделу

bPermanent

[in]

флаг режима измения атрибута:

CK_TRUE – постоянное изменение атрибута доступа, действует вплоть до следующего изменения атрибутов;
СK_FALSE – временное изменение прав доступа, действует до первого отключения устройства из USB-порта, после чего права доступа сбрасываются на прежние.

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

CKR_OK – функция выполнена успешно.

...

slotID

[in]идентификатор слота

pJournal

[out]указатель на запись журнала

pulJournalSize

[out]размер записи журнала

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

pMechanism

[in]механизм подписи

hKey

[in]дескриптор ключа для подписи

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

pData

[in]указатель на буфер данных для подписи

ulDataLen

[in]размер данных для подписи в байтах

pSignature

[out]указатель на буфер с подписью

pulSignatureLen

[out]размер буфера с подписью 

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

key

[in]указатель на пароль

keySize

[in]длина пароля

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

password

[in]пароль активации

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

ulPasswordNumber


порядковый номер генерируемого пароля. Допустимые значения от 1 до 6 и

GENERATE_NEXT_PASSWORD – генерировать следующий пароль (только для 21-й версии микропрограммы)

pPassword

[out] указатель на буфер, содержащий сгенерированный пароль

pulPasswordSize

[out]размер буфера

ulPasswordCharacterSet

[in]

набор допустимых символов:

CAPS_AND_DIGITS – заглавные буквы латинского алфавита без O и цифры без 0
CAPS_ONLY – заглавные буквы латинского алфавита

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

CKR_OK – функция выполнена успешно.

...

hSession

[in]дескриптор сессии

ulMode

[in]

режим работы функции:

MODE_SET_BLUETOOTH_POWEROFF_TIMEOUT – установить таймаут для беспроводного канала связи
MODE_SET_CHANNEL_TYPE – установить тип используемого канала связи

pValue

[in] 
  • значение таймаута для режима MODE_SET_BLUETOOTH_POWEROFF_TIMEOUT:

1 .. 0х46 – произвольное значение в минутах, от 1 минуты до 70 минут
BLUETOOTH_POWEROFF_TIMEOUT_DEFAULT – по умолчанию
BLUETOOTH_POWEROFF_TIMEOUT_MAX – максимальное значение (70 минут)

  • канал связи для режима MODE_SET_CHANNEL_TYPE:

CHANNEL_TYPE_USB – по шине USB
CHANNEL_TYPE_BLUETOOTH – по Bluetooth

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

CKR_OK – функция выполнена успешно.

...

ulPinID

[in]

идентификатор PIN-кода

ulMinSize

[out]

заданная минимальная длина PIN-кода

ulMaxSize

[out] 

заданная максимальная длина PIN-кода

ulMaxRetryCount

[out] заданное максимальное значение счетчика неверных попыток ввода пароля

ulCurrentRetryCount

[out] 

текущее значение счетчика оставшихся попыток ввода пароля:

0 – PIN-код заблокирован

flags

[out] 

информационные флаги:

LOCAL_PIN_FLAGS_NOT_DEFAULT – локальный PIN-код не является PIN-кодом по умолчанию
LOCAL_PIN_FLAGS_FROM_SCREENPIN-код может введен только с экрана

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

CKR_OK – функция выполнена успешно.

...

pBuffer[in]указатель на буфер

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

CKR_OK – функция выполнена успешно.

...