diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 15:19:00 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 15:20:59 +0200 |
commit | fedf828e394938fb6f84407b4de7412a3fb6ec40 (patch) | |
tree | ff101e273e82e16945576b424615c6a21031c0ee | |
parent | 02f19713c155457e8cc7d80d581bdac35cb1716d (diff) | |
download | libnitrokey-fedf828e394938fb6f84407b4de7412a3fb6ec40.tar.gz libnitrokey-fedf828e394938fb6f84407b4de7412a3fb6ec40.tar.bz2 |
Return serial number as uint32_t from C API
This patch adds the function NK_device_serial_number_as_u32 to the C
API. It is similar to NK_device_serial_number but returns the raw
unsigned integer instead of a formatted string. This patch also adds a
simple test case that ensures that the number is not zero.
Fixes #172.
-rw-r--r-- | NK_C_API.cc | 7 | ||||
-rw-r--r-- | NK_C_API.h | 8 | ||||
-rw-r--r-- | unittest/test_pro.py | 9 |
3 files changed, 23 insertions, 1 deletions
diff --git a/NK_C_API.cc b/NK_C_API.cc index 1d3fa3a..c44e36f 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -299,6 +299,13 @@ extern "C" { }); } + NK_C_API uint32_t NK_device_serial_number_as_u32() { + auto m = NitrokeyManager::instance(); + return get_with_result([&]() { + return m->get_serial_number_as_u32(); + }); + } + NK_C_API char * NK_get_hotp_code(uint8_t slot_number) { return NK_get_hotp_code_PIN(slot_number, ""); } @@ -386,6 +386,14 @@ extern "C" { NK_C_API char * NK_device_serial_number(); /** + * Return the device's serial number string as an integer. Use + * NK_last_command_status to check for an error if this function + * returns zero. + * @return device's serial number as an integer + */ + NK_C_API uint32_t NK_device_serial_number_as_u32(); + + /** * Get last command processing status. Useful for commands which returns the results of their own and could not return * an error code. * @return previous command processing error code diff --git a/unittest/test_pro.py b/unittest/test_pro.py index 99d7b1f..d25a50e 100644 --- a/unittest/test_pro.py +++ b/unittest/test_pro.py @@ -704,6 +704,13 @@ def test_get_serial_number(C): print(('Serial number of the device: ', sn)) +@pytest.mark.status +def test_get_serial_number_as_u32(C): + sn = C.NK_device_serial_number_as_u32() + assert sn > 0 + print(('Serial number of the device (u32): ', sn)) + + @pytest.mark.otp @pytest.mark.parametrize("secret", ['000001', '00'*10+'ff', '00'*19+'ff', '000102', '00'*29+'ff', '00'*39+'ff', '002EF43F51AFA97BA2B46418768123C9E1809A5B' ]) @@ -1038,4 +1045,4 @@ def test_OTP_all_rw(C): this_loop_codes.append(('H', i, code)) all_codes.append(this_loop_codes) from pprint import pprint - pprint(all_codes)
\ No newline at end of file + pprint(all_codes) |