...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_SLOT_ID_INVALID,
CKR_TOKEN_NOT_PRESENT.Расширенные коды ошибок.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
CK_SLOT_ID slotID; // идентификатор слота CK_TOKEN_INFO_EXTENDED ckTokenInfoEx; // структура расширенных данных токена CK_RV rv; // вспомогательная переменная для хранения кода возврата . . ckTokenInfoEx.ulSizeofThisStructure = sizeof(CK_TOKEN_INFO_EXTENDED); // размер структуры CK_TOKEN_INFO_EXTENDED rv = pfGetFunctionListEx -> C_EX_GetTokenInfoExtended(slotID, &ckTokenInfoEx); // получение расширенной информации о токене if (rv == CKR_OK) // проверка результата printf ("Getting Extended Token Info -> OK \n"); else printf ("Getting Extended Token Info -> Failed \n"); |
...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_SLOT_ID_INVALID,
CKR_TOKEN_NOT_PRESENT.
Расширенные коды ошибок.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
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"); |
...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_USER_NOT_LOGGED_IN,
CKR_ARGUMENTS_BAD.Расширенные коды ошибок.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
static CK_CHAR SO_PIN[] = {'8', '7', '6', '5', '4', '3', '2', '1'}; // PIN-код Администратора Рутокен по умолчанию CK_SESSION_HANDLE hSession; // дескриптор сессии CK_SLOT_ID slots[100]; // массив идентификаторов слотов CK_ULONG ulSlotCount = 100; // количество идентификаторов слотов в массиве CK_RV rv; // вспомогательная переменная для хранения кода возврата . . rv = pfGetFunctionList -> C_OpenSession( // открытие сессии slots[0], // выбор нулевого слота CKF_SERIAL_SESSION | CKF_RW_SESSION), // флаги для сессии чтение/запись 0, // не используется 0, // не используется &hSession); // дескриптор сессии if (rv != CKR_OK) // проверка результата printf("Opening session -> failed \n"); else printf("Opening session -> OK \n"); rv = pfGetFunctionList -> C_Login( // получение прав Администратора, необходимых для разблокировки hSession, // дескриптор сессии CKU_SO, // пользователь, с правами которого производится авторизация SO_PIN, // PIN-код указанного пользователя sizeof(SO_PIN)); // длина PIN-кода if (rv != CKR_OK) // проверка результата printf("Logining -> failed \n"); else printf("Logining -> OK \n"); rv = pfGetFunctionListEx -> C_EX_UnblockUserPIN(hSession); // разблокировка PIN-кода if (rv != CKR_OK) // проверка результата printf("Unblocking UserPIN -> failed \n"); else printf("Unblocking UserPIN -> OK \n"); . . pfGetFunctionList -> C_Logout(hSession); // выход пользователя pfGetFunctionList -> C_CloseSession(hSession); // закрытие сессии |
...
CKR_OK – функция выполнена успешно.Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_SESSION_READ_ONLY,
CKR_USER_NOT_LOGGED_IN.
Расширенные коды ошибок.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
CK_SESSION_HANDLE hSession; // дескриптор сессии CK_CHAR ckcNewLabel[100]; // метка длиной 100 символов CK_RV rv; // вспомогательная переменная для хранения кода возврата . . pfGetFunctionList -> C_OpenSession(slots[0], CKF_SERIAL_SESSION | CKF_RW_SESSION), 0, 0, &hSession); // открытие сессии pfGetFunctionList -> C_Login(hSession, CKU_USER, USER_PIN, sizeof(USER_PIN)); // авторизация с правами пользователя strcpy ((char *)ckcNewLabel, "Label is set by C_EX_SetTokenName from rtPKCS11ecp.dll"); // определяем имя метки rv = pfGetFunctionList -> C_EX_SetTokenName(hSession, ckcNewLabel, 32); // задаем метку токена if (rv != CKR_OK) // проверка результата printf("Changing of label -> failed \n"); else printf("Changing of label -> OK \n"); . . pfGetFunctionList -> C_Logout(hSession); // выход пользователя pfGetFunctionList -> C_CloseSession(hSession); // закрытие сессии |
...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_SESSION_HANDLE_INVALID,
CKR_BUFFER_TOO_SMALL.
Расширенные коды ошибок.
Пример
Code Block | ||||
---|---|---|---|---|
| ||||
CK_BYTE ckLabel[1000]; CK_ULONG ckulLabelLen = 0; . . rv = pfGetFunctionListEx -> C_EX_GetTokenName(hSession, ckLabel, &ckulLabelLen); // получение метки токена if (rv != CKR_OK) // проверка результата printf("Getting name of token -> failed \n"); else printf("Getting name of token -> OK \n"); |
...
CKR_OK – функция выполнена успешно.Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_SESSION_READ_ONLY,
CKR_USER_NOT_LOGGED_IN.
Расширенные коды ошибок.
Примечание
Формат данных (лицензии) определяет вендор, размер ограничивается 72 байтами. Всего может быть до двух лицензий.Функция может быть вызвана только из сессии, имеющей статус CKS_RW_USER_FUNCTIONS или CKS_RW_SO_FUNCTIONS.
...
CKR_OK – функция выполнена успешно.Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CRYPTOKI_NOT_INITIALIZED,
...
CKR_FUNCTION_NOT_SUPPORTED.
Расширенные коды ошибок.
Примечание
Функция позволяет прочитать лицензию с токена. Функция может быть вызвана из сессии любого состояния. Длина лицензии может иметь единственное значение 72 байта, либо при передаче pLicense равного NULL_PTR в параметре pulLicenseLen возвращается указатель на длину буфера для требуемой лицензии.
...
hSession | [in] | дескриптор сессии |
pData | [in] | указатель на байт-массив CK_BYTE, содержащий данные для подписи |
ulDataLen | [in] | длина данных для подписи |
hCert | [in] | дескриптор сертификата |
ppEnvelope | [out] | указатель на байт-массив, в который передаются данные (сообщение) |
pEnvelopeLen | [out] | указатель на длину созданного буфера с сообщением |
hPrivKey | [in] | дескриптор закрытого ключа, соответствующего указанному сертификату. Если равен 0, то закрытый ключ будет искаться по ID сертификата |
phCertificates | [in] | указатель на массив сертификатов, цепочку сертификатов (в текущей версии не используется) |
ulCertificatesLen | [in] | количество сертификатов в параметре phCertificates (в текущей версии не используется) |
flags | [in] | переменная типа CK_ULONG, может принимать следующие значения: 0 – исходные данные, на которые ссылается указатель pData, сохраняются вместе с подписанным сообщением; |
...
C_EX_PKCS7VerifyInit()
Назначение
Инициалиирует Инициализирует процесс проверки подписи переданных на вход данных в в формате PKCS#7.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_PKCS7VerifyInit)( CK_SESSION_HANDLE hSession, CK_BYTE_PTR pCms, CK_ULONG ulCmsSize, CK_VENDOR_X509_STORE_PTR pStore, CK_VENDOR_CRL_MODE ckMode, CK_FLAGS flags ); typedef struct CK_VENDOR_X509_STORE { CK_VENDOR_BUFFER_PTR pTrustedCertificates; // указатель на массив доверенных сертификатов CK_ULONG ulTrustedCertificateCount; // количество доверенных сертификатов в массиве CK_VENDOR_BUFFER_PTR pCertificates; // указатель на массив, содержащий цепочку сертификатов сертификаты для проверки подписи CK_ULONG ulCertificateCount; // количество сертификатов в цепочке сертификатов CK_VENDOR_BUFFER_PTR pCrls; // указатель на массив списков отзыва сертификатов CK_ULONG ulCrlCount; // количество списков отзыва сертификатов в массиве } CK_VENDOR_X509_STORE; typedef struct CK_VENDOR_BUFFER { CK_BYTE_PTR pData; // указатель на массив байтов CK_ULONG ulSize; // длина массива } |
...
hSession | [in] | дескриптор сессии |
pCms | [in] | указатель на байт- массив CK_BYTEбайтов, содержащий сообщение в формате PKCS#7 для проверки |
ulCmsSize | [in] | длина сообщения |
pStore | [in] | структура указатель на структуру типа CK_VENDOR_X509_STORE, содержащая которая содержит указатели на необходимые для проверки подписи доверенные сертификаты, сертификаты подписывающей стороны и списки отозванных сертификатов |
ckMode | [in] | политика проверки списков отозванных сертификатов (CRLs), может принимать следующие значения: OPTIONAL_CRL_CHECK – отсутствие соответствующего списка отозванных сертификатов не влияет на верификациювызывает ошибку при проверке подписи; |
flags | [in] | переменная типа CK_ULONG, может опции проверки подписи, могут принимать следующие значения: CKF_VENDOR_DO_NOT_USE_INTERNAL_CMS_CERTS – не использовать для проверки подписи содержащиеся в CMS сообщении сертификаты ; |
...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_OPERATION_ACTIVE,
CKR_FUNCTION_FAILED,
CKR_FUNCTION_NOT_SUPPORTED.
...
C_EX_PKCS7Verify()
Назначение
Выполняет процесс проверки подписи переданных на вход данных в в формате PKCS#7 единоразово (одним блоком)проверкy присоединенной (attached) подписи в формате PKCS#7 и возвращает данные, которые были подписаны, и сертификаты подписантов.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_PKCS7Verify)( CK_SESSION_HANDLE hSession, CK_BYTE_PTR_PTR ppData, CK_ULONG_PTR pulDataSize, CK_VENDOR_BUFFER_PTR_PTR ppSignerCertificates, CK_ULONG_PTR pulSignerCertificatesCount ); typedef struct CK_VENDOR_BUFFER { CK_BYTE_PTR pData; // указатель на массив байтов CK_ULONG ulSize; // длина массива } |
...
hSession | [in] | дескриптор сессии | ||
ppData | [inout] | указатель на байт- массив CK_BYTEбайтов, содержащий данные, которые были подписаны (EncapsulatedContentInfo) в случае их отсутствия в CMS сообщении, переданномфункции C_EX_PKCS7VerifyInit | ||
pulDataSize | [out] | pulDataSize | [in] | размер данных |
ppSignerCertificates | [inout] | указатель на массив, содержащий сертификаты подписавшей стороныподписантов | ||
pulSignerCertificatesCount | [inout] | количество сертификатов в массиве |
...
Функция может быть вызвана только из состояний "R/W User Functions" и "R User Functions", после вызова функции C_EX_PKCS7Verifyinit.
Возвращаемые значения
CKR_OK – функция выполнена успешно.Стандартные коды ошибок:
CKR_ARGUMENTS_BAD,
CKR_CERT_CHAIN_NOT_VERIFIED,
CKR_FUNCTION_NOT_SUPPORTED,
CKR_HOST_MEMORY,
CKR_OPERATION_NOT_INITIALIZED,
CKR_SIGNATURE_INVALID.
C_EX_PKCS7VerifyUpdate()
Назначение
Выполняет проверку подписи очередного блока переданных данных отсоединенной (detached) подписи в формате PKCS#7 для составной операции проверки подписи.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_PKCS7VerifyUpdate)( CK_SESSION_HANDLE hSession, CK_BYTE_PTR_PTR ppData, CK_ULONG_PTR pulDataSize ); |
Параметры
hSession | [in] | дескриптор сессии |
ppData | [in] | указатель на байт- массив CK_BYTEбайтов, содержащий блок данных, которые были подписаны (EncapsulatedContentInfo) в случае их отсутствия в CMS сообщении, переданномфункции C_EX_PKCS7VerifyInit |
pulDataSize | [in] | размер данных |
...
Функция может быть вызвана только из состояний "R/W User Functions" и "R User Functions", после вызова функции C_EX_PKCS7VerifyInit. Для завершения процесса проверки подписи необходим вызов функции Cфункции C_EX_PKCS7Verifyfinal.
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_CKR_ARGUMENTS_BAD,
CKR_FUNCTION_NOT_SUPPORTED,
CKR_HOST_MEMORY,
CKR_OPERATION_NOT_INITIALIZED.
C_EX_PKCS7VerifyFinal()
...
Завершает процесс проверки подписи переданных на вход данных в отсоединенной (detached) подписи в формате PKCS#7 для составной операции.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_PKCS7VerifyFinal)( CK_SESSION_HANDLE hSession, CK_VENDOR_BUFFER_PTR_PTR ppSignerCertificates, CK_ULONG_PTR pulSignerCertificatesCount ); |
...
hSession | [in] | дескриптор сессии |
ppSignerCertificates | [in] | указатель на массив, содержащий сертификаты подписавшей стороныподписантов |
pulSignerCertificatesCount | [in] | количество сертификатов в массиве |
...
CKR_OK – функция выполнена успешно.
Стандартные коды ошибок:
CKR_SIGNATURE_INVALID,
CKR_ARGUMENTS_BAD,
CKR_CERT_CHAIN_NOT_VERIFIED,
CKR_FUNCTION_NOT_SUPPORTED,
CKR_HOST_MEMORY,
CKR_OPERATION_NOT_INITIALIZED.
Функции для работы с флеш-памятью
C_EX_GetDriveSize()
Назначение
Возращает общий объем размер флеш-памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_GetDriveSize)(
CK_SLOT_ID slotID,
CK_ULONG_PTR pulDriveSize
);
|
Параметры
slotID | [in] | идентификатор слота с подключенным токеном |
pulDriveSize | [out] | возвращаемый размер флеш-памяти в Мб |
...
Code Block | ||
---|---|---|
| ||
CK_ULONG ulDriveSize = 0; // Общий объем флеш-памяти printf("Get Flash memory size");rv = pFunctionListEx->C 0; // Общий объем флеш-памяти printf("Get Flash memory size"); rv = pFunctionListEx->C_EX_GetDriveSize(aSlots[0], // Идентификатор слота с подключенным токеном токеном &ulDriveSize); // Возвращаемый размер флеш-памяти в Мб if Мбif (rv != CKR_OK) printf printf(" -> Failed\n"); else { printf printf(" -> OK\n"); printf printf("Memory size: %d Mb\n", (int)ulDriveSize); } |
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; |
...
slotID | [in] | идентификатор слота с подключенным токеном |
userType | [in] | тип пользователя , допустимое значение только CKU_SO – глобальный администратор. |
pPin | [in] | PIN-код пользователя |
ulPinLen | [in] | длина PIN-кода пользователя |
pInitParams | [in] | указатель на массив структур типа CK_VOLUME_FORMAT_INFO_EXTENDED, содержащих детальную информацию о разделах |
ulInitParamsCount | [in] | количество записей в массиве |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_ULONG VolumeRWSize = 0; // Размер раздела для чтения и записиCK_ULONG VolumeROSize = 0; // Размер раздела только для чтенияCK_ULONG VolumeCDSize = 0; // Размер раздела CD-ROMCK_ULONG VolumeHISize = 0; // Размер раздела скрытого раздела CK_ULONG CKU_LOCAL_1 = 0x03; // Идентификатор локального пользователяCK_ULONG CKU_LOCAL_2 = 0x1E; // Идентификатор локального пользователя /* Шаблон для разметки разделов */CK_VOLUME_FORMAT_INFO_EXTENDED InitParams[] ={ { VolumeRWSize, ACCESS_MODE_RW, CKU_USER, 0 }, { VolumeROSize, ACCESS_MODE_RO, CKU_SO, 0 }, { VolumeHISize, ACCESS_MODE_HIDDEN, CKU_LOCAL_1, 0 }, { VolumeCDSize, ACCESS_MODE_CD, CKU_LOCAL_2, 0 }}; ... InitParams[0].ulVolumeSize = ulDriveSize / 2;InitParams[1].ulVolumeSize = ulDriveSize / 4;InitParams[2].ulVolumeSize = ulDriveSize / 8;InitParams[3].ulVolumeSize = ulDriveSize - (ulDriveSize / 2) - (ulDriveSize / 4) - (ulDriveSize / 8); printf("\nFormatting flash memory");rv = pFunctionListEx->C_EX_FormatDrive( aSlots[0], // Идентификатор слота с подключенным токеном CKU_SO, // Форматирование выполняется только с правами Администратора SO_PIN, // Текущий PIN-код Администратора sizeof(SO_PIN), // Длина PIN-кода Администратора InitParams, // Массив с информацией о разделах arraysize(InitParams)); // Размер массиваif (rv != CKR_OK) printf(" -> Failed\n");else printf(" -> OK\n"); |
C_EX_GetVolumesInfo()
C_EX_ChangeVolumeAttributes()
Функции специального назначения
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"); |
C_EX_SetLocalPIN()
Назначение
Функция устанавливает локальный PIN-код, если он не был установлен или меняет локальный PIN-код, если он был установлен заранее.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SetLocalPIN)(
CK_SLOT_ID slotID,
CK_UTF8CHAR_PTR pUserPin, // или pOldLocalPin
CK_ULONG ulUserPinLen, // или pOldLocalPinLen
CK_UTF8CHAR_PTR pNewLocalPin,
CK_ULONG ulNewLocalPinLen,
CK_ULONG ulLocalID
); |
Параметры
slotID | [in] | идентификатор слота, к которому подключен токен |
pUserPin или pOldLocalPin | [in] | указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код |
ulUserPinLen или pOldLocalPinLen | [in] | длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода |
pNewLocalPin | [in] | указатель на новый Локальный PIN-код |
ulNewLocalPinLen | [in] | длина нового Локального PIN-кода |
ulLocalID | [in] | идентификатор Локального PIN-кода |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
| ||||||||
ulInitParamsCount | [in] | количество записей в массиве |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_ULONG VolumeRWSize = 0; // Размер раздела для чтения и записи
CK_ULONG VolumeROSize = 0; // Размер раздела только для чтения
CK_ULONG VolumeCDSize = 0; // Размер раздела CD-ROM
CK_ULONG VolumeHISize = 0; // Размер раздела скрытого раздела
CK_ULONG CKU_LOCAL_1 = 0x03; // Идентификатор локального пользователя
CK_ULONG CKU_LOCAL_2 = 0x1E; // Идентификатор локального пользователя
/* Шаблон для разметки разделов */
CK_VOLUME_FORMAT_INFO_EXTENDED InitParams[] =
{
{ VolumeRWSize, ACCESS_MODE_RW, CKU_USER, 0 },
{ VolumeROSize, ACCESS_MODE_RO, CKU_SO, 0 },
{ VolumeHISize, ACCESS_MODE_HIDDEN, CKU_LOCAL_1, 0 },
{ VolumeCDSize, ACCESS_MODE_CD, CKU_LOCAL_2, 0 }
};
...
InitParams[0].ulVolumeSize = ulDriveSize / 2;
InitParams[1].ulVolumeSize = ulDriveSize / 4;
InitParams[2].ulVolumeSize = ulDriveSize / 8;
InitParams[3].ulVolumeSize = ulDriveSize - (ulDriveSize / 2) - (ulDriveSize / 4) - (ulDriveSize / 8);
printf("\nFormatting flash memory");
rv = pFunctionListEx->C_EX_FormatDrive( aSlots[0], // Идентификатор слота с подключенным токеном
CKU_SO, // Форматирование выполняется только с правами Администратора
SO_PIN, // Текущий PIN-код Администратора
sizeof(SO_PIN), // Длина PIN-кода Администратора
InitParams, // Массив с информацией о разделах
arraysize(InitParams)); // Размер массива
if (rv != CKR_OK)
printf(" -> Failed\n");
else
printf(" -> OK\n"); |
C_EX_GetVolumesInfo()
C_EX_ChangeVolumeAttributes()
Функции специального назначения
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"); |
C_EX_SetLocalPIN()
Назначение
Функция устанавливает локальный PIN-код, если он не был установлен или меняет локальный PIN-код, если он был установлен заранее.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SetLocalPIN)(
CK_SLOT_ID slotID,
CK_UTF8CHAR_PTR pUserPin, // или pOldLocalPin
CK_ULONG ulUserPinLen, // или pOldLocalPinLen
CK_UTF8CHAR_PTR pNewLocalPin,
CK_ULONG ulNewLocalPinLen,
CK_ULONG ulLocalID
); |
Параметры
slotID | [in] | идентификатор слота, к которому подключен токен |
pUserPin или pOldLocalPin | [in] | указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код |
ulUserPinLen или pOldLocalPinLen | [in] | длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода |
pNewLocalPin | [in] | указатель на новый Локальный PIN-код |
ulNewLocalPinLen | [in] | длина нового Локального PIN-кода |
ulLocalID | [in] | идентификатор Локального PIN-кода |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE Pin[] = {'1', '2', '3', '4', '5', '6', '7', '8'}; | ||
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), CK_SLOT_ID slots[100]; // длинамассив текущего PIN-кода Пользователя или локального PIN-кода "000000000000000000000000000000", // указатель на новый Локальный PIN-код 30, идентификаторов слотов . . rv = pfGetFunctionListEx -> C_EX_SetLocalPIN( slots[0], // длина нового Локального PIN-кода 0x1Fсчитаем, что токен подключен к первому слоту Pin, // идентификатор Локального текущий PIN-код Пользователя или текущий локальный PIN-кода ); if (rv != CKR_OK)код arraysize(Pin), // проверка результата printf("C_EX_SetLocalPIN() -> failed \n"); else printf("C_EX_SetLocalPIN() -> OK \n"); |
CK_ULONG ulDriveSize =
0
;
// Общий объем флеш-памяти
printf(
"Get Flash memory size"
);
rv = pFunctionListEx->C_EX_GetDriveSize(aSlots[
0
],
// Идентификатор слота с подключенным токеном
&ulDriveSize);
// Возвращаемый размер флеш-памяти в Мб
if
(rv != CKR_OK)
printf(
" -> Failed\n"
);
else
{
printf(
" -> OK\n"
);
printf(
"Memory size: %d Mb\n"
, (
int
)ulDriveSize);
длина текущего 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"); |
...