diff options
author | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 16:29:27 +0200 |
---|---|---|
committer | Robin Krahl <robin.krahl@ireas.org> | 2020-04-02 16:29:27 +0200 |
commit | 0270a9b3de4b45fcfcb83f8e20a78702811d4192 (patch) | |
tree | 4135cf93dd87ca81b2e6f534603dfb6f7ca2b1d4 /unittest | |
parent | 6100df4127eca5f9733cd5fa51acd32c8febd754 (diff) | |
download | libnitrokey-0270a9b3de4b45fcfcb83f8e20a78702811d4192.tar.gz libnitrokey-0270a9b3de4b45fcfcb83f8e20a78702811d4192.tar.bz2 |
Add NK_config struct and read/write functions
This patch adds the NK_config struct to the C API that stores the
general configuration of a Nitrokey device. It also adds the
NK_read_config_struct and NK_write_config_struct functions to make the
API easier to use. While NK_write_config_struct is only a convenience
method, NK_read_config_struct makes the API more safe as the user no
longer has to read the data from a pointer to an array.
This patch also extends the test_read_write_config test case with the
two new functions.
Diffstat (limited to 'unittest')
-rw-r--r-- | unittest/test_pro.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/unittest/test_pro.py b/unittest/test_pro.py index 99d7b1f..e61d8bf 100644 --- a/unittest/test_pro.py +++ b/unittest/test_pro.py @@ -647,6 +647,30 @@ def test_read_write_config(C): config = cast_pointer_to_tuple(config_raw_data, 'uint8_t', 5) assert config == (0, 1, 2, True, False) + # use structs: read I + config_st = ffi.new('struct NK_config *') + if not config_st: + raise Exception("Could not allocate config") + assert C.NK_read_config_struct(config_st) == DeviceErrorCode.STATUS_OK + assert config_st.numlock == 0 + assert config_st.capslock == 1 + assert config_st.scrolllock == 2 + assert config_st.enable_user_password + assert not config_st.disable_user_password + + # use structs: write + config_st.numlock = 3 + assert C.NK_write_config_struct(config_st[0], DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK + + # use structs: read II + err = C.NK_read_config_struct(config_st) + assert err == 0 + assert config_st.numlock == 3 + assert config_st.capslock == 1 + assert config_st.scrolllock == 2 + assert config_st.enable_user_password + assert not config_st.disable_user_password + # restore defaults and check assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK assert C.NK_write_config(255, 255, 255, False, True, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK @@ -1038,4 +1062,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) |