Page tree

Versions Compared

Key

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

Функции общего назначения

Table of Contents
minLevel2
outlinetrue
stylenone
separatorbraces

C_Initialize()

Code Block
CK_DEFINE_FUNCTION(CK_RV, C_Initialize)(
       CK_VOID_PTR       pInitArgs
 );

Назначение

Функция инициализирует библиотеку PKCS #11 для ее дальнейшего использования приложением. Первоначальный вызов этой функции является обязательным для работы библиотеки, иначе попытка вызова любой функции без вызова C_Initalize приведет к ошибке CKR_CRYPTOKI_NOT_INITIALIZED. Исключением из этого правила является вызов функции C_GetFunctionList, предоставляющий указатель на структуру CK_FUNCTION_LIST, в которой содержатся указатели на все функции, реализованные стандартом. В структуре содержатся указатели на функции, позволяющие синхронизировать работу библиотеки с помощью предоставленных пользователем механизмов, флаги, указывающие на режим синхронизации, и зарезервированный параметр.

...

Если библиотеку используют несколько приложений, то каждое из них должно вызвать функцию C_Initialize. Каждый вызов функции C_Initialize должен в итоге быть сменен одиночным вызовом функции C_Finalize.

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

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

...

CKR_NEED_TO_CREATE_THREADS.

Расширенные коды ошибок.

Пример

Excerpt Include
2.2.4.2 Функции общего назначения
2.2.4.2 Функции общего назначения
nopaneltrue

к содержанию ↑

C_Finalize()

Code Block
CK_DEFINE_FUNCTION(CK_RV, C_Finalize)(
      CK_VOID_PTR
      pReserved
); 

Назначение

Функция завершает работу с библиотекой PKCS#11. Попытка вызова любой функции после C_Finalize (исключение C_Initalize и C_GetFunctionList) приведет к ошибке CKR_CRYPTOKI_NOT_INITIALIZED.

...

Если библиотеку используют несколько приложений, то каждое из них должно вызвать функцию C_Finalize. Вызову C_Finalize должен предшествовать вызов C_Initialize, в промежутке между вызовами этих двух функций могут выполняться другие функции, описанные в библиотеке.

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

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

...

CKR_HOST_MEMORY.

Расширенные коды ошибок.

Пример

Excerpt Include
2.2.4.2 Функции общего назначения
2.2.4.2 Функции общего назначения
nopaneltrue

к содержанию ↑

 C_GetInfo()

Code Block
CK_DEFINE_FUNCTION(CK_RV, C_GetInfo)(
CK_INFO_PTR pInfo
);

Назначение

Функция позволяет получить общую информацию о библиотеке, которая возвращается в структуре типа CK_INFO. pInfo указывает на размещение этой информации.

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

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

...

CKR_HOST_MEMORY.

Расширенные коды ошибок.

Пример

Excerpt
Code Block
collapsetrue
CK_INFO info;
CK_RV rv;
CK_C_INITIALIZE_ARGS InitArgs;
 
InitArgs.CreateMutex = &MyCreateMutex;
InitArgs.DestroyMutex = &MyDestroyMutex;
InitArgs.LockMutex = &MyLockMutex;
InitArgs.UnlockMutex = &MyUnlockMutex;
InitArgs.flags = CKF_OS_LOCKING_OK;
InitArgs.pReserved = NULL_PTR;
 
rv = C_Initialize((CK_VOID_PTR)&InitArgs);
assert(rv == CKR_OK);
 
rv = C_GetInfo(&info);
assert(rv == CKR_OK);
if(info.version.major == 2) {
  /* Выполнение криптографических операций с токеном */
  .
  .
}
 
rv = C_Finalize(NULL_PTR);
assert(rv == CKR_OK);

к содержанию ↑

C_GetFunctionList()

Code Block
CK_DEFINE_FUNCTION(CK_RV, C_GetFunctionList)(
    CK_FUNCTION_LIST_PTR_PTR
    ppFunctionList
);

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

C_GetFunctionList является единственной функцией стандарта PKCS#11, которая может быть вызвана до вызова функции C_Initialize. Это сделано для ускорения работы приложения, а также для возможности одновременного доступа приложения к нескольким библиотекам.

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

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

...

CKR_HOST_MEMORY.

Расширенные коды ошибок.

Пример

Code Block
collapsetrue
CK_FUNCTION_LIST_PTR pFunctionList;
CK_C_Initialize pC_Initialize;
CK_RV rv;

/* Функция C_GetFunctionList может быть вызвана до вызова C_Initialize */

rv = C_GetFunctionList(&pFunctionList);
assert(rv == CKR_OK);
pC_Initialize = pFunctionList -> C_Initialize;
 

/* Вызов функции C_Initialize в библиотеке*/
rv = (*pC_Initialize)(NULL_PTR);

к содержанию ↑