...
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
HMODULE hModule; // дескриптор загруженной библиотеки PKCS #11 CK_FUNCTION_LIST_EXTENDED_PTR pFunctionListEx; // указатель на структуру CK_FUNCTION_LIST_EXTENDED, в которой хранится список функций расширения CK_C_EX_GetFunctionListExtended pfGetFunctionListEx; // указатель на функцию C_EX_GetFunctionListExtended CK_RV rv; // вспомогательная переменная для хранения кода возврата hModule = LoadLibrary("rtPKCS11.dll"); // получение дескриптора загруженной библиотеки pfGetFunctionListEx = (CK_C_EX_GetFunctionListExtended) GetProcAddress(hModule,"C_EX_GetFunctionListExtended"); // получение адреса функции C_EX_GetFunctionListExtended if (pfGetFunctionListEx == NULL_PTR) // проверка результата printf ("Loading library -> Failed \n"); else printf ("Loading library -> OK \n"); rv = pfGetFunctionListEx(&pFunctionListEx); // получение структуры с указателями на функции расширения if (rv == CKR_OK) // проверка результата printf ("Getting extended function list -> OK \n"); else printf ("Getting extended function list -> Failed \n"); . . FreeLibrary(hModule); // завершение работы с библиотекой |
...
Функция может быть вызвана только из состояний "R/W User Functions" и "R User Functions". Память для массива pCsr выделяется внутри функции, поэтому после окончания работы память необходимо освободить, вызвав функцию C_EX_FreeBuffer().
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Функции для работы с CMS/PKCS#7 сообщениями
...
Функция может быть вызвана только из состояний "R/W User Functions" и "R User Functions". Буфер ppEnvelope создается внутри функции. После окончания работы с ним необходимо освободить его, вызвав функцию C_EX_FreeBuffer().
Возвращаемые значения
CKR_OK – функция выполнена успешно.
C_EX_PKCS7VerifyInit()
...
Функция может быть вызвана только из состояний "R/W User Functions" и "R User Functions".
Возвращаемые значения
CKR_OK – функция выполнена успешно.
...
CKR_FUNCTION_NOT_SUPPORTED.
C_EX_PKCS7Verify()
Назначение
...
Функция может быть вызвана только из состояний "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 – функция выполнена успешно.
...
CKR_FUNCTION_NOT_SUPPORTED.
Функции
...
для работы с флеш-памятью
C_EX_
...
GetDriveSize()
Назначение
Функция высвобождает память, выделенную другими расширенными функциями, например C_EX_GetCertificateInfoTextВозращает общий объем флеш-памяти токена.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_FreeBufferGetDriveSize)( CK_BYTE_PTR pBuffer ); |
Параметры
pBuffer | [in] | указатель на буфер |
Возвращаемые данные
CK_SLOT_ID slotID,
CK_ULONG_PTR pulDriveSize
);
|
Параметры
slotID | [in] | идентификатор слота с подключенным токеном |
pulDriveSize | [out] | возвращаемый размер флеш-памяти в Мб |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pInfo . . rv = pfGetFunctionListEx -> C_EX_FreeBuffer(pInfo); // очистка буфера, использующегося функцией C_EX_GetCertificateInfoText() if ULONG ulDriveSize = 0; // Общий объем флеш-памяти printf("Get Flash memory size");rv = pFunctionListEx->C_EX_GetDriveSize(aSlots[0], // Идентификатор слота с подключенным токеном &ulDriveSize); // Возвращаемый размер флеш-памяти в Мбif (rv != CKR_OK) // проверка результата printf("C_EX_FreeBuffer() printf(" -> failed Failed\n"); else printf{ printf("C_EX_FreeBuffer() -> OK\n"); printf("Memory size: %d Mb\n", (int)ulDriveSize); } |
C_EX_
...
FormatDrive()
Назначение
Функция устанавливает локальный PIN-код, если он не был установлен или меняет локальный PIN-код, если он был установлен заранееРазбивает флеш-память токена на независимые разделы с разными правами доступа.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SetLocalPINFormatDrive) ( CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pUserPin, slotID, CK_USER_TYPE // или pOldLocalPin CK_ULONG ulUserPinLen, //userType, или pOldLocalPinLen 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] | тип пользователя
|
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 ); pNewLocalPin, CK_ULONG ulNewLocalPinLen, CK_ULONG ulLocalID ); |
Параметры
slotID | [in] | идентификатор слота, к которому подключен токен |
pUserPin или pOldLocalPin | [in] | указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код |
ulUserPinLen или pOldLocalPinLen | [in] | длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода |
pNewLocalPin | [in] | указатель на текущий новый Локальный PIN-код Пользователя или на текущий локальный PIN-код |
ulNewLocalPinLen ulUserPinLen или pOldLocalPinLen | [in] | длина текущего нового Локального PIN-кода Пользователя или длина текущего локального |
ulLocalID | [in] | идентификатор Локального 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'}; // текущий PIN-код Пользователя или локальный PIN-код
CK_SLOT_ID slots[100]; // массив идентификаторов слотов
.
.
rv = pfGetFunctionListEx -> C_EX_SetLocalPIN(
slots[0], // считаем, что токен подключен к первому слоту
Pin, // текущий PIN-код Пользователя или текущий локальный PIN-код
arraysize(Pin), // длина текущего PIN-кода Пользователя или локального PIN-кода
"000000000000000000000000000000", | ||
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-код 30, // считаем,длина чтонового токен подключен к первому слоту Pin, Локального PIN-кода 0x1F // текущий PIN-код Пользователя или текущий локальный/ идентификатор Локального PIN-код arraysize(Pin),кода ); if (rv != CKR_OK) // длина текущего 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"); |
...
проверка результата
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); } |