|
| 1 | +#include "catch.hpp" |
| 2 | +#include <NitrokeyManager.h> |
| 3 | +#include <memory> |
| 4 | +#include "../NK_C_API.h" |
| 5 | + |
| 6 | +using namespace nitrokey::proto; |
| 7 | +using namespace nitrokey::device; |
| 8 | + |
| 9 | +using namespace std; |
| 10 | +using namespace nitrokey; |
| 11 | + |
| 12 | +//This test suite assumes no Pro or Storage devices are connected |
| 13 | + |
| 14 | +TEST_CASE("Return false on no device connected", "[fast]") { |
| 15 | + INFO("This test case assumes no Pro or Storage devices are connected"); |
| 16 | + auto stick = make_shared<Stick20>(); |
| 17 | + bool connected = true; |
| 18 | + REQUIRE_NOTHROW(connected = stick->connect()); |
| 19 | + REQUIRE_FALSE(connected); |
| 20 | + |
| 21 | + auto stick_pro = make_shared<Stick10>(); |
| 22 | + REQUIRE_NOTHROW(connected = stick_pro->connect()); |
| 23 | + REQUIRE_FALSE(connected); |
| 24 | + |
| 25 | + |
| 26 | + auto i = NitrokeyManager::instance(); |
| 27 | + REQUIRE_NOTHROW(connected = i->connect()); |
| 28 | + REQUIRE_FALSE(connected); |
| 29 | + REQUIRE_FALSE(i->is_connected()); |
| 30 | + REQUIRE_FALSE(i->disconnect()); |
| 31 | + REQUIRE_FALSE(i->could_current_device_be_enumerated()); |
| 32 | + |
| 33 | + |
| 34 | + int C_connected = 1; |
| 35 | + REQUIRE_NOTHROW(C_connected = NK_login_auto()); |
| 36 | + REQUIRE(0 == C_connected); |
| 37 | +} |
| 38 | + |
| 39 | +TEST_CASE("Test C++ side behaviour in offline", "[fast]") { |
| 40 | + auto i = NitrokeyManager::instance(); |
| 41 | + |
| 42 | + string serial_number; |
| 43 | + REQUIRE_NOTHROW (serial_number = i->get_serial_number()); |
| 44 | + REQUIRE(serial_number.empty()); |
| 45 | + |
| 46 | + REQUIRE_THROWS_AS( |
| 47 | + i->get_status(), DeviceNotConnected |
| 48 | + ); |
| 49 | + |
| 50 | + REQUIRE_THROWS_AS( |
| 51 | + i->get_HOTP_code(0xFF, ""), InvalidSlotException |
| 52 | + ); |
| 53 | + |
| 54 | + REQUIRE_THROWS_AS( |
| 55 | + i->get_TOTP_code(0xFF, ""), InvalidSlotException |
| 56 | + ); |
| 57 | + |
| 58 | + REQUIRE_THROWS_AS( |
| 59 | + i->erase_hotp_slot(0xFF, ""), InvalidSlotException |
| 60 | + ); |
| 61 | + |
| 62 | + REQUIRE_THROWS_AS( |
| 63 | + i->erase_totp_slot(0xFF, ""), InvalidSlotException |
| 64 | + ); |
| 65 | + |
| 66 | + REQUIRE_THROWS_AS( |
| 67 | + i->get_totp_slot_name(0xFF), InvalidSlotException |
| 68 | + ); |
| 69 | + |
| 70 | + REQUIRE_THROWS_AS( |
| 71 | + i->get_hotp_slot_name(0xFF), InvalidSlotException |
| 72 | + ); |
| 73 | + |
| 74 | + REQUIRE_THROWS_AS( |
| 75 | + i->first_authenticate("123123", "123123"), DeviceNotConnected |
| 76 | + ); |
| 77 | + |
| 78 | + REQUIRE_THROWS_AS( |
| 79 | + i->get_connected_device_model(), DeviceNotConnected |
| 80 | + ); |
| 81 | + |
| 82 | + REQUIRE_THROWS_AS( |
| 83 | + i->clear_new_sd_card_warning("123123"), DeviceNotConnected |
| 84 | + ); |
| 85 | + |
| 86 | +} |
| 87 | + |
| 88 | + |
| 89 | +TEST_CASE("Test helper function - hex_string_to_byte", "[fast]") { |
| 90 | + using namespace nitrokey::misc; |
| 91 | + std::vector<uint8_t> v; |
| 92 | + REQUIRE_NOTHROW(v = hex_string_to_byte("00112233445566")); |
| 93 | + const uint8_t test_data[] = {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; |
| 94 | + REQUIRE(v.size() == sizeof(test_data)); |
| 95 | + for (int i = 0; i < v.size(); ++i) { |
| 96 | + INFO("Position i: " << i); |
| 97 | + REQUIRE(v.data()[i] == test_data[i]); |
| 98 | + } |
| 99 | +} |
| 100 | + |
| 101 | +#include "test_command_ids_header.h" |
| 102 | +TEST_CASE("Test device commands ids", "[fast]") { |
| 103 | +// Make sure CommandID values are in sync with firmware's header |
| 104 | + |
| 105 | +// REQUIRE(STICK20_CMD_START_VALUE == static_cast<uint8_t>(CommandID::START_VALUE)); |
| 106 | + REQUIRE(STICK20_CMD_ENABLE_CRYPTED_PARI == static_cast<uint8_t>(CommandID::ENABLE_CRYPTED_PARI)); |
| 107 | + REQUIRE(STICK20_CMD_DISABLE_CRYPTED_PARI == static_cast<uint8_t>(CommandID::DISABLE_CRYPTED_PARI)); |
| 108 | + REQUIRE(STICK20_CMD_ENABLE_HIDDEN_CRYPTED_PARI == static_cast<uint8_t>(CommandID::ENABLE_HIDDEN_CRYPTED_PARI)); |
| 109 | + REQUIRE(STICK20_CMD_DISABLE_HIDDEN_CRYPTED_PARI == static_cast<uint8_t>(CommandID::DISABLE_HIDDEN_CRYPTED_PARI)); |
| 110 | + REQUIRE(STICK20_CMD_ENABLE_FIRMWARE_UPDATE == static_cast<uint8_t>(CommandID::ENABLE_FIRMWARE_UPDATE)); |
| 111 | + REQUIRE(STICK20_CMD_EXPORT_FIRMWARE_TO_FILE == static_cast<uint8_t>(CommandID::EXPORT_FIRMWARE_TO_FILE)); |
| 112 | + REQUIRE(STICK20_CMD_GENERATE_NEW_KEYS == static_cast<uint8_t>(CommandID::GENERATE_NEW_KEYS)); |
| 113 | + REQUIRE(STICK20_CMD_FILL_SD_CARD_WITH_RANDOM_CHARS == static_cast<uint8_t>(CommandID::FILL_SD_CARD_WITH_RANDOM_CHARS)); |
| 114 | + |
| 115 | + REQUIRE(STICK20_CMD_WRITE_STATUS_DATA == static_cast<uint8_t>(CommandID::WRITE_STATUS_DATA)); |
| 116 | + REQUIRE(STICK20_CMD_ENABLE_READONLY_UNCRYPTED_LUN == static_cast<uint8_t>(CommandID::ENABLE_READONLY_UNCRYPTED_LUN)); |
| 117 | + REQUIRE(STICK20_CMD_ENABLE_READWRITE_UNCRYPTED_LUN == static_cast<uint8_t>(CommandID::ENABLE_READWRITE_UNCRYPTED_LUN)); |
| 118 | + |
| 119 | + REQUIRE(STICK20_CMD_SEND_PASSWORD_MATRIX == static_cast<uint8_t>(CommandID::SEND_PASSWORD_MATRIX)); |
| 120 | + REQUIRE(STICK20_CMD_SEND_PASSWORD_MATRIX_PINDATA == static_cast<uint8_t>(CommandID::SEND_PASSWORD_MATRIX_PINDATA)); |
| 121 | + REQUIRE(STICK20_CMD_SEND_PASSWORD_MATRIX_SETUP == static_cast<uint8_t>(CommandID::SEND_PASSWORD_MATRIX_SETUP)); |
| 122 | + |
| 123 | + REQUIRE(STICK20_CMD_GET_DEVICE_STATUS == static_cast<uint8_t>(CommandID::GET_DEVICE_STATUS)); |
| 124 | + REQUIRE(STICK20_CMD_SEND_DEVICE_STATUS == static_cast<uint8_t>(CommandID::SEND_DEVICE_STATUS)); |
| 125 | + |
| 126 | + REQUIRE(STICK20_CMD_SEND_HIDDEN_VOLUME_PASSWORD == static_cast<uint8_t>(CommandID::SEND_HIDDEN_VOLUME_PASSWORD)); |
| 127 | + REQUIRE(STICK20_CMD_SEND_HIDDEN_VOLUME_SETUP == static_cast<uint8_t>(CommandID::SEND_HIDDEN_VOLUME_SETUP)); |
| 128 | + REQUIRE(STICK20_CMD_SEND_PASSWORD == static_cast<uint8_t>(CommandID::SEND_PASSWORD)); |
| 129 | + REQUIRE(STICK20_CMD_SEND_NEW_PASSWORD == static_cast<uint8_t>(CommandID::SEND_NEW_PASSWORD)); |
| 130 | + REQUIRE(STICK20_CMD_CLEAR_NEW_SD_CARD_FOUND == static_cast<uint8_t>(CommandID::CLEAR_NEW_SD_CARD_FOUND)); |
| 131 | + |
| 132 | + REQUIRE(STICK20_CMD_SEND_STARTUP == static_cast<uint8_t>(CommandID::SEND_STARTUP)); |
| 133 | + REQUIRE(STICK20_CMD_SEND_CLEAR_STICK_KEYS_NOT_INITIATED == static_cast<uint8_t>(CommandID::SEND_CLEAR_STICK_KEYS_NOT_INITIATED)); |
| 134 | + REQUIRE(STICK20_CMD_SEND_LOCK_STICK_HARDWARE == static_cast<uint8_t>(CommandID::SEND_LOCK_STICK_HARDWARE)); |
| 135 | + |
| 136 | + REQUIRE(STICK20_CMD_PRODUCTION_TEST == static_cast<uint8_t>(CommandID::PRODUCTION_TEST)); |
| 137 | + REQUIRE(STICK20_CMD_SEND_DEBUG_DATA == static_cast<uint8_t>(CommandID::SEND_DEBUG_DATA)); |
| 138 | + |
| 139 | + REQUIRE(STICK20_CMD_CHANGE_UPDATE_PIN == static_cast<uint8_t>(CommandID::CHANGE_UPDATE_PIN)); |
| 140 | + |
| 141 | +} |
0 commit comments