Page tree

Versions Compared

Key

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

...

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

(question)

Пример

Code Block
collapsetrue
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 – функция выполнена успешно.(question)

Пример

Code Block
collapsetrue
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
collapsetrue
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
collapsetrue
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-кода

Возвращаемые данные

(question)

Пример

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

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

Пример

Code Block
collapsetrue
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
collapsetrue
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);
}