...
Функция позволяет получить специфическую для устройств Рутокен информацию: класс токена, количество свободной и общей памяти, тип токена, номер протокола, количество оставшихся попыток ввода пин-кода Пользователя и Администратора и т.д. По сравнению с похожей по назначению стандартной функции C_GetTokenInfo функция расширения предоставляет более полную информацию о токене.
...
slotID | [in] | идентификатор слота, к которому подключен токен |
pUserPin или pOldLocalPin | [in] | указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код |
ulUserPinLen или pOldLocalPinLen | [in] | длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода |
pNewLocalPin | [in] | указатель на новый Локальный PIN-код |
ulNewLocalPinLen | [in] | длина нового Локального PIN-кода |
ulLocalID | [in] | идентификатор Локального PIN-кода в пределах от 0x03 до 0x1E |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
Code Block | ||
---|---|---|
| ||
CK_BYTE Pin[] = {'1', '2', '3', '4', '5', '6', '7', '8'}; // текущий PIN-код Пользователя или локальный PIN-код CK_SLOT_ID slots[100]; // массив идентификаторов слотов . . rv = pfGetFunctionListEx -> C_EX_SetLocalPIN( slots[0], // считаем, что токен подключен к первому слоту Pin, // текущий PIN-код Пользователя или текущий локальный PIN-код arraysize(Pin), // длина текущего PIN-кода Пользователя или локального PIN-кода "000000000000000000000000000000", // указатель на новый Локальный PIN-код 30, // длина нового Локального PIN-кода 0x1F // идентификатор Локального PIN-кода ); if (rv != CKR_OK) // проверка результата printf("C_EX_SetLocalPIN() -> failed \n"); else printf("C_EX_SetLocalPIN() -> OK \n"); |
C_EX_TokenManage()
Anchor | ||||
---|---|---|---|---|
|
Назначение
Предоставляет механизм принудительной смены PIN-кода пользователя.
...
CKR_USER_NOT_LOGGED_IN
– пользователь SKU_SO не авторизован на токене (режимы)
Info | ||
---|---|---|
| ||
Здесь описаны не все возможные параметры функции. Описание других параметров функции можно найти здесь |
C_EX_SlotManage
...
CKR_OK – функция выполнена успешно.,
CKR_ARGUMENTS_BAD,
CKR_OPERATION_ACTIVE,
CKR_FUNCTION_FAILED,
...
CKR_OK – функция выполнена успешно.
CKR_CERT_CHAIN_NOT_VERIFIED – функция выполнена успешно, но цепочка сертификации не проверялась,
CKR_ARGUMENTS_BAD,
CKR_CERT_CHAIN_NOT_VERIFIED,
...
AUI Button | ||||||
---|---|---|---|---|---|---|
|
C_EX_GetDriveSize()
Назначение
Возращает Возвращает размер флеш-памяти токена.
...
Разбивает флеш-память токена на независимые разделы с разными правами доступа.
Синтаксис
Info | ||
---|---|---|
| ||
После окончания работы этой функции происходит переподключение токена. Нет никаких гарантий, что работу с этим токеном можно производить по старому SLOT_ID: он может начать указывать на другой токен или не быть валидным вовсе. Новый SLOT_ID токена можно найти, например, по серийному номеру. |
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_FormatDrive |
Code Block |
CK_DEFINE_FUNCTION(CK_RV, C_EX_FormatDrive) (
CK_SLOT_ID slotID,
CK_USER_TYPE userType,
CK_UTF8CHAR_PTR pPin,
CK_ULONG ulPinLen,
CK_VOLUME_FORMAT_INFO_EXTENDED_PTR pInitParams,
CK_ULONG ulInitParamsCount
);
typedef struct CK_VOLUME_FORMAT_INFO_EXTENDED
{
CK_ULONG ulVolumeSize;
CK_ACCESS_MODE_EXTENDED accessMode;
CK_OWNER_EXTENDED volumeOwner;
CK_FLAGS flags;
} CK_VOLUME_FORMAT_INFO_EXTENDED; |
...
Функция измененяет флаг доступа к разделу.
Info | ||
---|---|---|
| ||
После изменения доступа к разделу на постоянной основе происходит переподключение токена. Нет никаких гарантий, что работу с этим токеном можно производить по старому SLOT_ID: он может начать указывать на другой токен или не быть валидным вовсе. Новый SLOT_ID токена можно найти, например, по серийному номеру. |
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_ChangeVolumeAttributes)( CK_SLOT_ID slotID, CK_USER_TYPE userType, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen, CK_VOLUME_ID_EXTENDED idVolume, CK_ACCESS_MODE_EXTENDED newAccessMode, CK_BBOOL bPermanent ); |
...
CKR_OK – функция выполнена успешно.
Примечания
Формат возвращаемой записи журнала и пример парсинга доступны по ссылке.
Пример
...
collapse | true |
---|
...
Журнал позволяет хранить только одну запись с информацией о последней выполненной операции подписи. Неудачные попытки подписи в журнале не фиксируются. Описание формата записи журнала доступно по ссылке.
Для получения записи журнала необходимо вызвать функцию C_EX_GetJournal()
с переданными в нее значением слота, к которому подключен Рутокен ЭЦП, и данными буфера, в который будет возвращена запись журнала. Вызов функции C_EX_GetJournal()
с указателем на NULL
вместо буфера вернет длину записи журнала.
Перед запросом информации о журнале необходимо выполнить аутентификацию Пользователем.
Получение значения журнала
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
Функции для работы с беспроводным каналом связи
...
CKR_OK – функция выполнена успешно.
C_EX_TokenManage()
Anchor | ||||
---|---|---|---|---|
|
Назначение
Управляет режимом работы токена и таймаутом беспроводного соединения Рутокен Bluetooth.
...
CKR_OK – функция выполнена успешно.
Функции для работы с ключами в оперативной памяти
C_EX_WrapKey
Назначение
Генерирует сессионный ключ, вычисляет ключ согласования, шифрует сессионный ключ ключом согласования и возвращает указатель на дескриптор сессионного ключа, хранящегося в оперативной памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_WrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pGenerationMechanism,
CK_ATTRIBUTE_PTR pKeyTemplate,
CK_ULONG ulKeyAttributeCount,
CK_MECHANISM_PTR pDerivationMechanism,
CK_OBJECT_HANDLE hBaseKey,
CK_MECHANISM_PTR pWrappingMechanism,
CK_BYTE_PTR pWrappedKey,
CK_ULONG_PTR pulWrappedKeyLen,
CK_OBJECT_HANDLE_PTR phKey
); |
Параметры
...
hSession
...
pGenerationMechanism
...
механизм генерации сессионного ключа. Допустимое значение:
CKM_GOST28147_KEY_GEN – по стандарту ГОСТ 28147-89
...
pKeyTemplate
...
ulKeyAttributeCount
...
pDerivationMechanism
...
механизм выработки ключа согласования. Допустимые значения:
CKM_GOSTR3410_DERIVE – по стандарту ГОСТ Р 34.10-2001
CKM_GOSTR3410_12_DERIVE – по стандарту ГОСТ Р 34.10-2012
...
hBaseKey
...
pWrappingMechanism
...
pWrappedKey
...
pulWrappedKeyLen
...
длина зашифрованного сессионного ключа
...
phKey
...
Info | ||
---|---|---|
| ||
Здесь описаны не все возможные параметры функции. Описание других параметров функции можно найти здесь |
C_EX_UnwrapKey
Назначение
Вычисляет ключ согласования, расшифровывает зашифрованный сессионный ключ и возвращает указатель на дескриптор расшифрованного сессионного ключа, хранящего в оперативной памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_UnwrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pDerivationMechanism,
CK_OBJECT_HANDLE hBaseKey,
CK_MECHANISM_PTR pUnwrappingMechanism,
CK_BYTE_PTR pWrappedKey,
CK_ULONG ulWrappedKeyLen,
CK_ATTRIBUTE_PTR pKeyTemplate,
CK_ULONG ulKeyAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
); |
Параметры
...
hSession
...
pDerivationMechanism
...
механизм выработки ключа согласования (KEK). Допустимые значения:
CKM_GOSTR3410_DERIVE – по стандарту ГОСТ Р 34.10-2001
CKM_GOSTR3410_12_DERIVE – по стандарту ГОСТ Р 34.10-2012
...
hBaseKey
...
pUnwrappingMechanism
...
механизм расшифрования зашифрованного сессионного ключа
...
pWrappedKey
...
ulWrappedKeyLen
...
...
pKeyTemplate
...
ulKeyAttributeCount
...
phKey
...
Вспомогательные функции
C_EX_FreeBuffer()
Назначение
Функция освобождает память, выделенную другими расширенными функциями, например C_EX_GetCertificateInfoText.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_FreeBuffer)( CK_BYTE_PTR pBuffer ); |
Параметры
pBuffer | [in] | указатель на буфер |
...
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pInfo . . rv = pfGetFunctionListEx -> C_EX_FreeBuffer(pInfo); // очистка буфера, использующегося функцией C_EX_GetCertificateInfoText() if (rv != CKR_OK) // проверка результата printf("C_EX_FreeBuffer() -> failed \n"); else printf("C_EX_FreeBuffer() -> OK \n"); |
...