diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2020-07-28 13:10:59 +0200 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2020-07-28 13:11:11 +0200 |
commit | 6c5f779dfd4dd5a91678351127acde132f817faf (patch) | |
tree | ff0da4bd9ed8b2606caa0179492f41ce6a8742ed | |
parent | a36392dd83def4397d100addf57870ebea5de0e9 (diff) | |
download | libnitrokey-6c5f779dfd4dd5a91678351127acde132f817faf.tar.gz libnitrokey-6c5f779dfd4dd5a91678351127acde132f817faf.tar.bz2 |
Extract PWS features to separate unit
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | NK_C_API.cc | 1 | ||||
-rw-r--r-- | NitrokeyManager.cc | 68 | ||||
-rw-r--r-- | NitrokeyManagerPWS.cc | 80 | ||||
-rw-r--r-- | NitrokeyManagerPWS.h | 6 | ||||
-rw-r--r-- | NitrokeyManagerStorage.cpp | 1 |
6 files changed, 92 insertions, 68 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e0bcb1..c795e22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -77,6 +77,8 @@ set(SOURCE_FILES NitrokeyManagerStorage.h NitrokeyManagerOTP.cc NitrokeyManagerOTP.h + NitrokeyManagerPWS.h + NitrokeyManagerPWS.cc NK_C_API.h NK_C_API.cc NK_C_API_helpers.h @@ -86,6 +88,7 @@ set(SOURCE_FILES set(SOURCE_FILES_storage ${COMMON_FILES} + NitrokeyManager.cc NitrokeyManagerStorage.cpp NitrokeyManagerStorage.h NK_C_API_helpers.h @@ -140,6 +143,7 @@ endif() OPTION(NO_LOG "Compile without logging functionality and its strings (decreases size)" OFF) IF (NO_LOG) SET_TARGET_PROPERTIES(nitrokey PROPERTIES COMPILE_DEFINITIONS "NO_LOG") + SET_TARGET_PROPERTIES(nitrokey-storage PROPERTIES COMPILE_DEFINITIONS "NO_LOG") ENDIF() OPTION(LOG_VOLATILE_DATA "Log volatile data (debug)" OFF) diff --git a/NK_C_API.cc b/NK_C_API.cc index 9dd0837..434fb37 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -40,6 +40,7 @@ uint8_t NK_last_command_status = 0; #include "NK_C_API_helpers.h" #include "NitrokeyManagerOTP.h" +#include "NitrokeyManagerPWS.h" #ifdef __cplusplus extern "C" { diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index cde559b..fa12a5e 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -21,6 +21,7 @@ #include "libnitrokey/NitrokeyManager.h" #include "NitrokeyManagerOTP.h" +#include "NitrokeyManagerPWS.h" #include "libnitrokey/LibraryException.h" #include "libnitrokey/cxx_semantics.h" #include "libnitrokey/misc.h" @@ -465,25 +466,6 @@ using nitrokey::misc::strcpyT; } - void NitrokeyManager::enable_password_safe(const char *user_pin) { - //The following command will cancel enabling PWS if it is not supported - auto a = get_payload<IsAESSupported>(); - strcpyT(a.user_password, user_pin); - IsAESSupported::CommandTransaction::run(device, a); - - auto p = get_payload<EnablePasswordSafe>(); - strcpyT(p.user_password, user_pin); - EnablePasswordSafe::CommandTransaction::run(device, p); - } - - vector <uint8_t> NitrokeyManager::get_password_safe_slot_status() { - auto responsePayload = GetPasswordSafeSlotStatus::CommandTransaction::run(device); - vector<uint8_t> v = vector<uint8_t>(responsePayload.data().password_safe_status, - responsePayload.data().password_safe_status - + sizeof(responsePayload.data().password_safe_status)); - return v; - } - uint8_t NitrokeyManager::get_user_retry_count() { if(device->get_device_model() == DeviceModel::STORAGE){ stick20::GetDeviceStatus::CommandTransaction::run(device); @@ -504,54 +486,6 @@ using nitrokey::misc::strcpyT; LockDevice::CommandTransaction::run(device); } - char * NitrokeyManager::get_password_safe_slot_name(uint8_t slot_number) { - if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); - auto p = get_payload<GetPasswordSafeSlotName>(); - p.slot_number = slot_number; - auto response = GetPasswordSafeSlotName::CommandTransaction::run(device, p); - return strndup((const char *) response.data().slot_name, max_string_field_length); - } - - bool NitrokeyManager::is_valid_password_safe_slot_number(uint8_t slot_number) const { return slot_number < 16; } - - char * NitrokeyManager::get_password_safe_slot_login(uint8_t slot_number) { - if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); - auto p = get_payload<GetPasswordSafeSlotLogin>(); - p.slot_number = slot_number; - auto response = GetPasswordSafeSlotLogin::CommandTransaction::run(device, p); - return strndup((const char *) response.data().slot_login, max_string_field_length); - } - - char * NitrokeyManager::get_password_safe_slot_password(uint8_t slot_number) { - if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); - auto p = get_payload<GetPasswordSafeSlotPassword>(); - p.slot_number = slot_number; - auto response = GetPasswordSafeSlotPassword::CommandTransaction::run(device, p); - return strndup((const char *) response.data().slot_password, max_string_field_length); //FIXME use secure way - } - - void NitrokeyManager::write_password_safe_slot(uint8_t slot_number, const char *slot_name, const char *slot_login, - const char *slot_password) { - if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); - auto p = get_payload<SetPasswordSafeSlotData>(); - p.slot_number = slot_number; - strcpyT(p.slot_name, slot_name); - strcpyT(p.slot_password, slot_password); - SetPasswordSafeSlotData::CommandTransaction::run(device, p); - - auto p2 = get_payload<SetPasswordSafeSlotData2>(); - p2.slot_number = slot_number; - strcpyT(p2.slot_login_name, slot_login); - SetPasswordSafeSlotData2::CommandTransaction::run(device, p2); - } - - void NitrokeyManager::erase_password_safe_slot(uint8_t slot_number) { - if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); - auto p = get_payload<ErasePasswordSafeSlot>(); - p.slot_number = slot_number; - ErasePasswordSafeSlot::CommandTransaction::run(device, p); - } - void NitrokeyManager::user_authenticate(const char *user_password, const char *temporary_password) { auto p = get_payload<UserAuthenticate>(); strcpyT(p.card_password, user_password); diff --git a/NitrokeyManagerPWS.cc b/NitrokeyManagerPWS.cc new file mode 100644 index 0000000..5ccfd25 --- /dev/null +++ b/NitrokeyManagerPWS.cc @@ -0,0 +1,80 @@ +// +// Created by sz on 7/28/20. +// + +#include "NitrokeyManagerPWS.h" +#include "NitrokeyManagerOTP.h" +#include "libnitrokey/LibraryException.h" +#include "libnitrokey/NitrokeyManager.h" +#include "libnitrokey/cxx_semantics.h" +#include "libnitrokey/misc.h" +#include <algorithm> +#include <cstring> +#include <functional> +#include <iostream> +#include <mutex> +#include <stick10_commands.h> +#include <stick20_commands.h> +#include <unordered_map> +void nitrokey::NitrokeyManager::enable_password_safe(const char *user_pin) { + //The following command will cancel enabling PWS if it is not supported + auto a = get_payload<IsAESSupported>(); + misc::strcpyT(a.user_password, user_pin); + IsAESSupported::CommandTransaction::run(device, a); + + auto p = get_payload<EnablePasswordSafe>(); + misc::strcpyT(p.user_password, user_pin); + EnablePasswordSafe::CommandTransaction::run(device, p); +} +std::vector <uint8_t> nitrokey::NitrokeyManager::get_password_safe_slot_status() { + auto responsePayload = GetPasswordSafeSlotStatus::CommandTransaction::run(device); + vector<uint8_t> v = vector<uint8_t>(responsePayload.data().password_safe_status, + responsePayload.data().password_safe_status + + sizeof(responsePayload.data().password_safe_status)); + return v; +} +char * nitrokey::NitrokeyManager::get_password_safe_slot_name(uint8_t slot_number) { + if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); + auto p = get_payload<GetPasswordSafeSlotName>(); + p.slot_number = slot_number; + auto response = GetPasswordSafeSlotName::CommandTransaction::run(device, p); + return strndup((const char *) response.data().slot_name, max_string_field_length); +} +bool nitrokey::NitrokeyManager::is_valid_password_safe_slot_number(uint8_t slot_number) const { return slot_number < 16; +} +char * +nitrokey::NitrokeyManager::get_password_safe_slot_login(uint8_t slot_number) { + if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); + auto p = get_payload<GetPasswordSafeSlotLogin>(); + p.slot_number = slot_number; + auto response = GetPasswordSafeSlotLogin::CommandTransaction::run(device, p); + return strndup((const char *) response.data().slot_login, max_string_field_length); +} +char * nitrokey::NitrokeyManager::get_password_safe_slot_password(uint8_t slot_number) { + if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); + auto p = get_payload<GetPasswordSafeSlotPassword>(); + p.slot_number = slot_number; + auto response = GetPasswordSafeSlotPassword::CommandTransaction::run(device, p); + return strndup((const char *) response.data().slot_password, max_string_field_length); //FIXME use secure way +} +void nitrokey::NitrokeyManager::write_password_safe_slot(uint8_t slot_number, const char *slot_name, const char *slot_login, + const char *slot_password) { + if (!is_valid_password_safe_slot_number(slot_number)) + throw InvalidSlotException(slot_number); + auto p = get_payload<SetPasswordSafeSlotData>(); + p.slot_number = slot_number; + misc::strcpyT(p.slot_name, slot_name); + misc::strcpyT(p.slot_password, slot_password); + SetPasswordSafeSlotData::CommandTransaction::run(device, p); + + auto p2 = get_payload<SetPasswordSafeSlotData2>(); + p2.slot_number = slot_number; + misc::strcpyT(p2.slot_login_name, slot_login); + SetPasswordSafeSlotData2::CommandTransaction::run(device, p2); +} +void nitrokey::NitrokeyManager::erase_password_safe_slot(uint8_t slot_number) { + if (!is_valid_password_safe_slot_number(slot_number)) throw InvalidSlotException(slot_number); + auto p = get_payload<ErasePasswordSafeSlot>(); + p.slot_number = slot_number; + ErasePasswordSafeSlot::CommandTransaction::run(device, p); +}
\ No newline at end of file diff --git a/NitrokeyManagerPWS.h b/NitrokeyManagerPWS.h new file mode 100644 index 0000000..b9f5071 --- /dev/null +++ b/NitrokeyManagerPWS.h @@ -0,0 +1,6 @@ +#ifndef LIBNITROKEY_NITROKEYMANAGERPWS_H +#define LIBNITROKEY_NITROKEYMANAGERPWS_H + +#include "NitrokeyManager.h" + +#endif // LIBNITROKEY_NITROKEYMANAGERPWS_H diff --git a/NitrokeyManagerStorage.cpp b/NitrokeyManagerStorage.cpp index 6814e8b..c78730b 100644 --- a/NitrokeyManagerStorage.cpp +++ b/NitrokeyManagerStorage.cpp @@ -1,6 +1,5 @@ #include "NitrokeyManagerStorage.h" -//using namespace nitrokey; namespace nitrokey{ using nitrokey::misc::strcpyT; |