Работа с флагами

Полученить информацию о состоянии токена можно с помощью флагов. Сами значения флагов получаются с помощью метода getTokenInfo(). Флаги читаются следующим образом:

  1. Берется десятичное значение флага, возвращаемое методом getTokenInfo().
  2. Значение переводится в шестнадцатеричное представление.
  3. Определённые байты полученного байтового числа будут предоставлять состояния токена

Примеры использования флагов для проверки PIN-кода пользователя

  • CKF_USER_PIN_COUNT_LOW (маска – 0x00010000) – флаг устанавливается, если количество оставшихся попыток ввода ПИН-кода пользователя меньше 3;
  • CKF_USER_PIN_FINAL_TRY (маска – 0x00020000) – флаг устанавливается, если осталась последняя попытка ввода PIN-кода;
  • CKF_USER_PIN_LOCKED (маска – 0x00040000) – флаг устанавливается, если PIN-код пользователя был заблокирован.

Пример 1

Значение флагов, полученное методом getTokenInfo() равно 67085 и представляется в шестнадцатеричном виде как 1060D.
Согласно документации:
Байтовая маска CKF_USER_PIN_COUNT_LOW 0x00010000

3-ий байт справа равен 01h – значит количество попыток ввода меньше 3.

Пример 2

Значение флагов, полученное методом getTokenInfo() равно 198157 и представляется в шестнадцатеричном виде как 3060D.
Согласно документации:
Байтовая маска CKF_USER_PIN_COUNT_LOW 0x00010000
+
Байтовая маска CKF_USER_PIN_FINAL_TRY 0x00020000

3-ий байт справа равен 03h (01h + 02h) – значит у пользователя последняя попытка ввести правильный PIN-код.