/* * Copyright (c) 2015-2018 Nitrokey UG * * This file is part of libnitrokey. * * libnitrokey is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * libnitrokey is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with libnitrokey. If not, see . * * SPDX-License-Identifier: LGPL-3.0 */ #ifndef COMMAND_ID_H #define COMMAND_ID_H #include namespace nitrokey { namespace proto { namespace stick20 { enum class device_status : uint8_t { idle = 0, ok, busy, wrong_password, busy_progressbar, password_matrix_ready, no_user_password_unlock, // FIXME: translate on receive to command status error (fix in firmware?) smartcard_error, security_bit_active }; const int CMD_START_VALUE = 0x20; const int CMD_END_VALUE = 0x60; } namespace stick10 { enum class command_status : uint8_t { ok = 0, wrong_CRC, wrong_slot, slot_not_programmed, wrong_password = 4, not_authorized, timestamp_warning, no_name_error, not_supported, unknown_command, AES_dec_failed }; enum class device_status : uint8_t { ok = 0, busy = 1, error, received_report, }; } enum class CommandID : uint8_t { GET_STATUS = 0x00, WRITE_TO_SLOT = 0x01, READ_SLOT_NAME = 0x02, READ_SLOT = 0x03, GET_CODE = 0x04, WRITE_CONFIG = 0x05, ERASE_SLOT = 0x06, FIRST_AUTHENTICATE = 0x07, AUTHORIZE = 0x08, GET_PASSWORD_RETRY_COUNT = 0x09, CLEAR_WARNING = 0x0A, SET_TIME = 0x0B, TEST_COUNTER = 0x0C, TEST_TIME = 0x0D, USER_AUTHENTICATE = 0x0E, GET_USER_PASSWORD_RETRY_COUNT = 0x0F, USER_AUTHORIZE = 0x10, UNLOCK_USER_PASSWORD = 0x11, LOCK_DEVICE = 0x12, FACTORY_RESET = 0x13, CHANGE_USER_PIN = 0x14, CHANGE_ADMIN_PIN = 0x15, WRITE_TO_SLOT_2 = 0x16, SEND_OTP_DATA = 0x17, ENABLE_CRYPTED_PARI = 0x20, DISABLE_CRYPTED_PARI = 0x20 + 1, ENABLE_HIDDEN_CRYPTED_PARI = 0x20 + 2, DISABLE_HIDDEN_CRYPTED_PARI = 0x20 + 3, ENABLE_FIRMWARE_UPDATE = 0x20 + 4, //enables update mode EXPORT_FIRMWARE_TO_FILE = 0x20 + 5, GENERATE_NEW_KEYS = 0x20 + 6, FILL_SD_CARD_WITH_RANDOM_CHARS = 0x20 + 7, WRITE_STATUS_DATA = 0x20 + 8, //@unused ENABLE_READONLY_UNCRYPTED_LUN = 0x20 + 9, ENABLE_READWRITE_UNCRYPTED_LUN = 0x20 + 10, SEND_PASSWORD_MATRIX = 0x20 + 11, //@unused SEND_PASSWORD_MATRIX_PINDATA = 0x20 + 12, //@unused SEND_PASSWORD_MATRIX_SETUP = 0x20 + 13, //@unused GET_DEVICE_STATUS = 0x20 + 14, SEND_DEVICE_STATUS = 0x20 + 15, SEND_HIDDEN_VOLUME_PASSWORD = 0x20 + 16, //@unused SEND_HIDDEN_VOLUME_SETUP = 0x20 + 17, SEND_PASSWORD = 0x20 + 18, SEND_NEW_PASSWORD = 0x20 + 19, CLEAR_NEW_SD_CARD_FOUND = 0x20 + 20, SEND_STARTUP = 0x20 + 21, SEND_CLEAR_STICK_KEYS_NOT_INITIATED = 0x20 + 22, SEND_LOCK_STICK_HARDWARE = 0x20 + 23, //locks firmware upgrade PRODUCTION_TEST = 0x20 + 24, SEND_DEBUG_DATA = 0x20 + 25, //@unused CHANGE_UPDATE_PIN = 0x20 + 26, //added in v0.48.5 ENABLE_ADMIN_READONLY_UNCRYPTED_LUN = 0x20 + 28, ENABLE_ADMIN_READWRITE_UNCRYPTED_LUN = 0x20 + 29, ENABLE_ADMIN_READONLY_ENCRYPTED_LUN = 0x20 + 30, ENABLE_ADMIN_READWRITE_ENCRYPTED_LUN = 0x20 + 31, CHECK_SMARTCARD_USAGE = 0x20 + 32, //v0.52+ WINK = 0x20 + 33, GET_PW_SAFE_SLOT_STATUS = 0x60, GET_PW_SAFE_SLOT_NAME = 0x61, GET_PW_SAFE_SLOT_PASSWORD = 0x62, GET_PW_SAFE_SLOT_LOGINNAME = 0x63, SET_PW_SAFE_SLOT_DATA_1 = 0x64, SET_PW_SAFE_SLOT_DATA_2 = 0x65, PW_SAFE_ERASE_SLOT = 0x66, PW_SAFE_ENABLE = 0x67, PW_SAFE_INIT_KEY = 0x68, //@unused PW_SAFE_SEND_DATA = 0x69, //@unused SD_CARD_HIGH_WATERMARK = 0x70, DETECT_SC_AES = 0x6a, NEW_AES_KEY = 0x6b }; const char *commandid_to_string(CommandID id); } } #endif