diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-07-26 22:11:10 +0200 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-08-01 13:54:57 +0200 | 
| commit | 1018b7a7d8d7da124d706bc5d6679c523e5f1d0f (patch) | |
| tree | f859f7d8cd59c14131f58c6bc4c34c41e00604b8 | |
| parent | 7d71398f4043c10c3870cb9deb2eae7bf1c5f0ee (diff) | |
| download | libnitrokey-1018b7a7d8d7da124d706bc5d6679c523e5f1d0f.tar.gz libnitrokey-1018b7a7d8d7da124d706bc5d6679c523e5f1d0f.tar.bz2 | |
Handle password safe slots programmed status
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
| -rw-r--r-- | NK_C_API.cc | 9 | ||||
| -rw-r--r-- | NK_C_API.h | 2 | ||||
| -rw-r--r-- | NitrokeyManager.cc | 7 | ||||
| -rw-r--r-- | include/NitrokeyManager.h | 2 | ||||
| -rw-r--r-- | unittest/test_bindings.py | 9 | 
5 files changed, 19 insertions, 10 deletions
| diff --git a/NK_C_API.cc b/NK_C_API.cc index 4f7195e..094a7e3 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -241,16 +241,17 @@ extern int NK_enable_password_safe(const char *user_pin){      }      return 0;  } -extern int NK_get_password_safe_slot_status(){ +extern uint8_t * NK_get_password_safe_slot_status(){      auto m = NitrokeyManager::instance(); +    auto res = new uint8_t[16]; +    memset(res, 0, 16);      try { -        m->get_password_safe_slot_status(); //TODO FIXME +        return m->get_password_safe_slot_status(); //TODO FIXME      }      catch (CommandFailedException & commandFailedException){          NK_last_command_status = commandFailedException.last_command_status; -        return commandFailedException.last_command_status;      } -    return 0; +    return res;  }  extern uint8_t NK_get_user_retry_count(){ @@ -32,7 +32,7 @@ extern uint8_t NK_get_user_retry_count();  extern uint8_t NK_get_admin_retry_count();  //password safe  extern int NK_enable_password_safe(const char *user_pin); -extern int NK_get_password_safe_slot_status(); +extern uint8_t * 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, const char *temporary_password);  extern const char *NK_get_password_safe_slot_password(uint8_t slot_number, const char *temporary_password); diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index e541b47..ef0eb5e 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -219,9 +219,12 @@ namespace nitrokey{          EnablePasswordSafe::CommandTransaction::run(*device, p);      } -    void NitrokeyManager::get_password_safe_slot_status() { +    uint8_t * NitrokeyManager::get_password_safe_slot_status() {          auto responsePayload = GetPasswordSafeSlotStatus::CommandTransaction::run(*device); //TODO FIXME -        responsePayload.password_safe_status; +        auto res = new uint8_t[16]; +        memcpy(res, responsePayload.password_safe_status, 16*sizeof (uint8_t)); +        //FIXME return vector<uint8_t> and do copy on C_API side +        return res;      }      uint8_t NitrokeyManager::get_user_retry_count() { diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h index 63332aa..00011e2 100644 --- a/include/NitrokeyManager.h +++ b/include/NitrokeyManager.h @@ -42,7 +42,7 @@ namespace nitrokey {          void enable_password_safe(const char *user_pin); -        void get_password_safe_slot_status(); +        uint8_t * get_password_safe_slot_status();          uint8_t get_admin_retry_count();          uint8_t get_user_retry_count(); diff --git a/unittest/test_bindings.py b/unittest/test_bindings.py index 4d749bd..9591751 100644 --- a/unittest/test_bindings.py +++ b/unittest/test_bindings.py @@ -90,12 +90,17 @@ def test_erase_password_safe_slot(C):      assert C.NK_enable_password_safe(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK      assert C.NK_erase_password_safe_slot(0) == DeviceErrorCode.STATUS_OK      assert gs(C.NK_get_password_safe_slot_name(0, DefaultPasswords.ADMIN_TEMP)) == '' -    assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK  # TODO shouldn't be DeviceErrorCode.NOT_PROGRAMMED ? +    assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK  # TODO CHECK shouldn't this be DeviceErrorCode.NOT_PROGRAMMED ?  def test_password_safe_slot_status(C):      C.NK_set_debug(True) -    assert C.NK_get_password_safe_slot_status() == DeviceErrorCode.STATUS_OK +    safe_slot_status = C.NK_get_password_safe_slot_status() +    assert C.NK_get_last_command_status() == DeviceErrorCode.STATUS_OK +    is_slot_programmed = list(ffi.cast("uint8_t [16]", safe_slot_status)[0:16]) +    print ((is_slot_programmed, len(is_slot_programmed))) +    assert is_slot_programmed[0] == 0  # FIXME not programmed, assuming erased in preceeding test, add writing and erasing +    assert is_slot_programmed[1] == 1  # FIXME assuming slot 1 is programmed, not writing there in this tests, same as ^      C.NK_set_debug(False) | 
