diff options
| author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-07-26 11:36:04 +0200 | 
|---|---|---|
| committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-08-01 13:54:57 +0200 | 
| commit | 39b7c99bbd00c0bc4906939ceefb724a3d9ddc35 (patch) | |
| tree | 16e13a656aeeccb1b14193c33e8728462d32c8d0 | |
| parent | 8a938be4ffa97490d89206cc1fd079a057cfc65c (diff) | |
| download | libnitrokey-39b7c99bbd00c0bc4906939ceefb724a3d9ddc35.tar.gz libnitrokey-39b7c99bbd00c0bc4906939ceefb724a3d9ddc35.tar.bz2 | |
Handle locking device
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
| -rw-r--r-- | NK_C_API.cc | 21 | ||||
| -rw-r--r-- | NK_C_API.h | 1 | ||||
| -rw-r--r-- | NitrokeyManager.cc | 4 | ||||
| -rw-r--r-- | include/NitrokeyManager.h | 2 | ||||
| -rw-r--r-- | unittest/test_bindings.py | 2 | 
5 files changed, 28 insertions, 2 deletions
| diff --git a/NK_C_API.cc b/NK_C_API.cc index 7de5bbd..c2e7df0 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -1,6 +1,6 @@  #include <cstring>  #include "NK_C_API.h" - +#include <functional>  using namespace nitrokey;  static uint8_t NK_last_command_status = 0; @@ -16,6 +16,18 @@ auto get_with_result(T func){      }  } +template <typename T> +uint8_t get_without_result(T func){ +    try { +        func(); +        return 0; +    } +    catch (CommandFailedException & commandFailedException){ +        NK_last_command_status = commandFailedException.last_command_status; +        return commandFailedException.last_command_status; +    } +} +  extern "C"  {  extern uint8_t NK_get_last_command_status(){ @@ -245,6 +257,13 @@ extern uint8_t NK_get_admin_retry_count(){      });  } +extern int NK_lock_device(){ +    auto m = NitrokeyManager::instance(); +    return get_without_result([&](){ +        return m->lock_device(); +    }); +} +  } @@ -29,6 +29,7 @@ extern uint8_t NK_get_user_retry_count();  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 int NK_lock_device();  } diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index d684853..15f09b8 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -232,5 +232,9 @@ namespace nitrokey{          return response.password_retry_count;      } +    void NitrokeyManager::lock_device() { +        LockDevice::CommandTransaction::run(*device); +    } +  }
\ No newline at end of file diff --git a/include/NitrokeyManager.h b/include/NitrokeyManager.h index 6588711..ecc397d 100644 --- a/include/NitrokeyManager.h +++ b/include/NitrokeyManager.h @@ -47,6 +47,8 @@ namespace nitrokey {          uint8_t get_admin_retry_count();          uint8_t get_user_retry_count(); +        void lock_device(); +      private:          NitrokeyManager();          ~NitrokeyManager(); diff --git a/unittest/test_bindings.py b/unittest/test_bindings.py index 51e1233..ec7608e 100644 --- a/unittest/test_bindings.py +++ b/unittest/test_bindings.py @@ -50,7 +50,7 @@ def C(request):  def test_enable_password_safe(C): -    # lock device +    assert C.NK_lock_device() == DeviceErrorCode.STATUS_OK      assert C.NK_enable_password_safe('wrong_password') == DeviceErrorCode.WRONG_PASSWORD      assert C.NK_enable_password_safe(DefaultPasswords.USER) == DeviceErrorCode.STATUS_OK | 
