Page tree

Versions Compared

Key

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

...

Если токен не был инициализирован (т.е. является новым, с производства), тогда параметр pPin становится первоначальным значением PIN-кода Администратора. Если токен инициализируется повторно, то pPin сверяется с текущим PIN-кодом Администратора для авторизации операции инициализации. В обоих случаях при успешном выполнении функции PIN-код Администратора принимает значение параметра pPin. Если PIN-код Администратора утерян, то токен может быть инициализирован повторно с использованием расширенного производителем механизма . ссылка! Флаг C_EX_InitToken. Флаг CKF_TOKEN_INITIALIZED в структуре CK_TOKEN_INFO показывает действие, которое станет результатом вызова C_InitToken. Если он установлен, то токен будет инициализирован повторно, и пользователь должен будет предоставить текущий пароль Администратора.

Когда токен инициализируется, все объекты, которые могут быть уничтожены, будут уничтожены (т.е. все объекты, за исключением "неуничтожаемых", таких как ключи, сгенерированные на самом токене). Также будет недоступен доступ обычного пользователя до тех пор, пока Администратор не установит PIN-код пользователя.В зависимости от токена, могут быть созданы некоторые объекты по умолчанию и установлены в значение по умолчанию некоторые атрибуты.

Если токен имеет защищенный путь аутентификации (обозначается выставленным флагом CKF_PROTECTED_AUTHENTICATION_PATH в структуре CK_TOKEN_INFO), то это означает, что существует некий способ аутентификации пользователя без отправки PIN-кода
приложению
через библиотеку. Это возможно, если пользователь вводит PIN-код через PIN pad на самом токене или подключаемом к нему устройстве. Для инициализации токена таким образом параметр pPin функции C_InitToken должен быть равен NULL_PTR. Во время выполнения C_InitToken PIN-код Администратора будет введен через защищенный путь аутентификации.

Если токен имеет защищенный путь аутентификации, отличный от PIN pad, то будет ли использоваться  C_InitToken для инициализации зависит от токена.

 Токен не может быть инициализирован, если библиотека обнаружила, что какое-либо приложение имеет открытую сессию с ним; когда вызов C_InitToken осуществляется при таких обстоятельствах, то он завершается ошибкой CKR_SESSION_EXISTS. К сожалению, может случиться так, что при вызове C_InitToken некоторые другие приложения имеют открытую сессию с токеном, но библиотека не может этого обнаружить, поскольку она не может знать все о других приложениях, использующих токен. В этом случае последствия вызова C_InitToken не определены.

...

  1. Если ulPinLen != 0 и pPin != NULL_PTR, то проверяется длина PIN-кода. Если длина не является допустимой, то возвращается значение CKR_ARGUMENTS_BAD. Если длина удовлетворяет условиям проверки, то проверяются права доступа для «CKU_SO» на основании предъявленных pPin и ulPinLen.
  2. Если ulPinLen != 0 и pPin == NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.
  3. Если ulPinLen == 0 и pPin != NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.
  4. Если ulPinLen == 0 и pPin == NULL_PTR, то отображается PIN Pad (в текущей реализации: возвращается ошибка CKR_ARGUMENTS_BAD)PINPad.
  5. Если pLabel == NULL_PTR и pPin != NULL_PTR, то возвращается ошибка CKR_ARGUMENTS_BAD.

...