diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 15:02:36 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 15:20:29 +0200 |
commit | 67b14773cf4ab1812af85d3aaf99bdc6119c5a8a (patch) | |
tree | 44b1df4dacb8a477312eb92fff424e1e8c368f0d | |
parent | 6100df4127eca5f9733cd5fa51acd32c8febd754 (diff) | |
download | libnitrokey-67b14773cf4ab1812af85d3aaf99bdc6119c5a8a.tar.gz libnitrokey-67b14773cf4ab1812af85d3aaf99bdc6119c5a8a.tar.bz2 |
NitrokeyManager: Also return serial number as u32
This patch adds the get_serial_number_as_u32 method to NitrokeyManager.
It returns the serial number as a 32-bit unsigned integer. Previously,
we only returned it as a string generated from the integer value,
get_serial_number.
While get_serial_number returns an empty string if no device is
connected and "NA" if an unknown model is connected, the new method
throws a DeviceNotConnected exception in the first case and returns zero
in the second case as we cannot express the three states in one integer
return value.
-rw-r--r-- | NitrokeyManager.cc | 19 | ||||
-rw-r--r-- | libnitrokey/NitrokeyManager.h | 1 | ||||
-rw-r--r-- | unittest/test_offline.cc | 4 |
3 files changed, 24 insertions, 0 deletions
diff --git a/NitrokeyManager.cc b/NitrokeyManager.cc index 6c26a43..496496e 100644 --- a/NitrokeyManager.cc +++ b/NitrokeyManager.cc @@ -398,6 +398,25 @@ using nitrokey::misc::strcpyT; return "NA"; } + uint32_t NitrokeyManager::get_serial_number_as_u32() { + if (device == nullptr) { throw DeviceNotConnected("device not connected"); } + switch (device->get_device_model()) { + case DeviceModel::PRO: { + auto response = GetStatus::CommandTransaction::run(device); + return response.data().card_serial_u32; + } + break; + + case DeviceModel::STORAGE: + { + auto response = stick20::GetDeviceStatus::CommandTransaction::run(device); + return response.data().ActiveSmartCardID_u32; + } + break; + } + return 0; + } + stick10::GetStatus::ResponsePayload NitrokeyManager::get_status(){ try{ auto response = GetStatus::CommandTransaction::run(device); diff --git a/libnitrokey/NitrokeyManager.h b/libnitrokey/NitrokeyManager.h index 33ede1b..163a799 100644 --- a/libnitrokey/NitrokeyManager.h +++ b/libnitrokey/NitrokeyManager.h @@ -104,6 +104,7 @@ char * strndup(const char* str, size_t maxlen); stick10::GetStatus::ResponsePayload get_status(); string get_status_as_string(); string get_serial_number(); + uint32_t get_serial_number_as_u32(); char * get_totp_slot_name(uint8_t slot_number); char * get_hotp_slot_name(uint8_t slot_number); diff --git a/unittest/test_offline.cc b/unittest/test_offline.cc index 320ad48..3ca3905 100644 --- a/unittest/test_offline.cc +++ b/unittest/test_offline.cc @@ -67,6 +67,10 @@ TEST_CASE("Test C++ side behaviour in offline", "[fast]") { REQUIRE(serial_number.empty()); REQUIRE_THROWS_AS( + i->get_serial_number_as_u32(), DeviceNotConnected + ); + + REQUIRE_THROWS_AS( i->get_status(), DeviceNotConnected ); |