summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2016-11-19 14:14:43 +0100
committerSzczepan Zalega <szczepan@nitrokey.com>2016-12-03 16:01:50 +0100
commitb33681083348588caa3db3885c811a3c42d5b094 (patch)
tree87bcb02e9fff95534adf46228ad73677ce02bbaa
parentf615000166177dad7128247d5c99679d9560c510 (diff)
downloadlibnitrokey-b33681083348588caa3db3885c811a3c42d5b094.tar.gz
libnitrokey-b33681083348588caa3db3885c811a3c42d5b094.tar.bz2
Support sending empty OTP secrets for slot edit (+test)
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
-rw-r--r--misc.cc2
-rw-r--r--unittest/test_pro.py31
2 files changed, 32 insertions, 1 deletions
diff --git a/misc.cc b/misc.cc
index 7a3c199..3f15520 100644
--- a/misc.cc
+++ b/misc.cc
@@ -13,7 +13,7 @@ std::vector<uint8_t> hex_string_to_byte(const char* hexString){
const size_t big_string_size = 256; //arbitrary 'big' number
const size_t s_size = strlen(hexString);
const size_t d_size = s_size/2;
- if (s_size%2!=0 || s_size==0 || s_size>big_string_size){
+ if (s_size%2!=0 || s_size>big_string_size){
throw InvalidHexString(0);
}
auto data = std::vector<uint8_t>();
diff --git a/unittest/test_pro.py b/unittest/test_pro.py
index 71abfba..b8109f2 100644
--- a/unittest/test_pro.py
+++ b/unittest/test_pro.py
@@ -630,3 +630,34 @@ def test_HOTP_secrets(C, secret):
lib_res += (counter, lib_at(counter))
assert dev_res == lib_res
+
+def test_edit_OTP_slot(C):
+ """
+ should change slots counter and name without changing its secret (using null secret for second update)
+ """
+ secret = RFC_SECRET
+ counter = 0
+ PIN_protection = False
+ use_8_digits = False
+ assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ assert C.NK_write_config(255, 255, 255, PIN_protection, not PIN_protection,
+ DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ slot_number = 0
+ assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ first_name = 'edit slot'
+ assert C.NK_write_hotp_slot(slot_number, first_name, secret, counter, use_8_digits, False, False, "",
+ DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ assert gs(C.NK_get_hotp_slot_name(slot_number)) == first_name
+
+
+ first_code = C.NK_get_hotp_code(slot_number)
+ changed_name = 'changedname'
+ empty_secret = ''
+ assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ assert C.NK_write_hotp_slot(slot_number, changed_name, empty_secret, counter, use_8_digits, False, False, "",
+ DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK
+ second_code = C.NK_get_hotp_code(slot_number)
+ assert first_code == second_code
+ assert gs(C.NK_get_hotp_slot_name(slot_number)) == changed_name
+
+