From 664d33c8966f478d6f077a666a39a5b76a235ffa Mon Sep 17 00:00:00 2001 From: Szczepan Zalega Date: Tue, 26 Jul 2016 17:14:33 +0200 Subject: Handling PW safe login and password Signed-off-by: Szczepan Zalega --- NK_C_API.cc | 8 ++++---- NK_C_API.h | 4 ++-- NitrokeyManager.cc | 4 ++-- include/NitrokeyManager.h | 5 +++-- include/stick10_commands.h | 12 ++++++------ unittest/test_bindings.py | 13 ++++++++++++- 6 files changed, 29 insertions(+), 17 deletions(-) diff --git a/NK_C_API.cc b/NK_C_API.cc index f01f0f5..c0910a2 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -281,16 +281,16 @@ extern const char *NK_get_password_safe_slot_name(uint8_t slot_number, const cha }); } -extern const char *NK_get_password_safe_slot_login(uint8_t slot_number) { +extern const char *NK_get_password_safe_slot_login(uint8_t slot_number, const char *temporary_password) { auto m = NitrokeyManager::instance(); return get_with_string_result([&](){ - return m->get_password_safe_slot_login(slot_number); + return m->get_password_safe_slot_login(slot_number, temporary_password); }); } -extern const char *NK_get_password_safe_slot_password(uint8_t slot_number) { +extern const char *NK_get_password_safe_slot_password(uint8_t slot_number, const char *temporary_password) { auto m = NitrokeyManager::instance(); return get_with_string_result([&](){ - return m->get_password_safe_slot_password(slot_number); + return m->get_password_safe_slot_password(slot_number, temporary_password); }); } extern int NK_write_password_safe_slot(){ diff --git a/NK_C_API.h b/NK_C_API.h index 9d6bc94..d6bf516 100644 --- a/NK_C_API.h +++ b/NK_C_API.h @@ -34,8 +34,8 @@ extern uint8_t NK_get_admin_retry_count(); extern int NK_enable_password_safe(const char *user_pin); extern int NK_get_password_safe_slot_status(); extern const char *NK_get_password_safe_slot_name(uint8_t slot_number, const char *temporary_password); -extern const char *NK_get_password_safe_slot_login(uint8_t slot_number); -extern const char *NK_get_password_safe_slot_password(uint8_t slot_number); +extern const char *NK_get_password_safe_slot_login(uint8_t slot_number, const char *temporary_password); +extern const char *NK_get_password_safe_slot_password(uint8_t slot_number, const char *temporary_password); extern int NK_write_password_safe_slot(); } diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 8f5db6f..e0f5fa3 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -249,14 +249,14 @@ namespace nitrokey{ return strdup((const char *) response.slot_name); } - const char *NitrokeyManager::get_password_safe_slot_login(uint8_t slot_number) { + const char *NitrokeyManager::get_password_safe_slot_login(uint8_t slot_number, const char *temporary_password) { auto p = get_payload(); p.slot_number = slot_number; auto response = GetPasswordSafeSlotLogin::CommandTransaction::run(*device, p); return strdup((const char *) response.slot_login); } - const char *NitrokeyManager::get_password_safe_slot_password(uint8_t slot_number) { + const char *NitrokeyManager::get_password_safe_slot_password(uint8_t slot_number, const char *temporary_password) { auto p = get_payload(); p.slot_number = slot_number; auto response = GetPasswordSafeSlotPassword::CommandTransaction::run(*device, p); diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h index d9844c9..6f65324 100644 --- a/include/NitrokeyManager.h +++ b/include/NitrokeyManager.h @@ -50,8 +50,8 @@ namespace nitrokey { void lock_device(); const char *get_password_safe_slot_name(uint8_t slot_number, const char *temporary_password); - const char *get_password_safe_slot_password(uint8_t slot_number); - const char *get_password_safe_slot_login(uint8_t slot_number); + const char *get_password_safe_slot_password(uint8_t slot_number, const char *temporary_password); + const char *get_password_safe_slot_login(uint8_t slot_number, const char *temporary_password); private: NitrokeyManager(); @@ -67,6 +67,7 @@ namespace nitrokey { uint8_t get_internal_slot_number_for_totp(uint8_t slot_number) const; bool erase_slot(uint8_t slot_number); uint8_t *get_slot_name(uint8_t slot_number) const; + }; } diff --git a/include/stick10_commands.h b/include/stick10_commands.h index d350044..92bddd5 100644 --- a/include/stick10_commands.h +++ b/include/stick10_commands.h @@ -376,7 +376,7 @@ class GetPasswordSafeSlotName : Command { bool isValid() const { return !(slot_number & 0xF0); } std::string dissect() const { std::stringstream ss; - ss << "slot_number\t" << slot_number << std::endl; + ss << "slot_number\t" << (int)slot_number << std::endl; return ss.str(); } } __packed; @@ -387,7 +387,7 @@ class GetPasswordSafeSlotName : Command { bool isValid() const { return true; } std::string dissect() const { std::stringstream ss; - ss << " slot_name\t" << slot_name << std::endl; + ss << " slot_name\t" << (char*)slot_name << std::endl; return ss.str(); } } __packed; @@ -405,7 +405,7 @@ class GetPasswordSafeSlotPassword bool isValid() const { return !(slot_number & 0xF0); } std::string dissect() const { std::stringstream ss; - ss << " slot_number\t" << slot_number << std::endl; + ss << " slot_number\t" << (int)slot_number << std::endl; return ss.str(); } } __packed; @@ -416,7 +416,7 @@ class GetPasswordSafeSlotPassword bool isValid() const { return true; } std::string dissect() const { std::stringstream ss; - ss << " slot_password\t" << slot_password << std::endl; + ss << " slot_password\t" << (char*)slot_password << std::endl; return ss.str(); } } __packed; @@ -434,7 +434,7 @@ class GetPasswordSafeSlotLogin bool isValid() const { return !(slot_number & 0xF0); } std::string dissect() const { std::stringstream ss; - ss << " slot_number\t" << slot_number << std::endl; + ss << " slot_number\t" << (int)slot_number << std::endl; return ss.str(); } } __packed; @@ -445,7 +445,7 @@ class GetPasswordSafeSlotLogin bool isValid() const { return true; } std::string dissect() const { std::stringstream ss; - ss << " slot_login\t" << slot_login << std::endl; + ss << " slot_login\t" << (char*)slot_login << std::endl; return ss.str(); } } __packed; diff --git a/unittest/test_bindings.py b/unittest/test_bindings.py index f5d5cf7..6d9e490 100644 --- a/unittest/test_bindings.py +++ b/unittest/test_bindings.py @@ -55,7 +55,7 @@ def test_enable_password_safe(C): def test_get_password_safe_slot_name(C): - C.NK_set_debug(True) + # C.NK_set_debug(True) assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK assert gs(C.NK_get_password_safe_slot_name(0, '123123123')) == '' assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_NOT_AUTHORIZED @@ -63,6 +63,17 @@ def test_get_password_safe_slot_name(C): assert C.NK_enable_password_safe(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK assert gs(C.NK_get_password_safe_slot_name(0, '123123123')) == '1' assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK + # C.NK_set_debug(False) + +def test_get_password_safe_slot_login_password(C): + C.NK_set_debug(True) + assert C.NK_enable_password_safe(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK + slot_login = C.NK_get_password_safe_slot_login(0, '123123123') + assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK + assert gs(slot_login) == '1' + slot_password = gs(C.NK_get_password_safe_slot_password(0, '123123123')) + assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK + assert slot_password == '1' C.NK_set_debug(False) -- cgit v1.2.1