diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2019-06-14 18:21:24 +0200 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2019-06-14 18:21:24 +0200 |
commit | 0275ebc610b255e3519baf866438244f288576bc (patch) | |
tree | 904bda631352bea6cf5a15de068ceb43bae1a21a /unittest | |
parent | 0e4f960018828c37c3a536b436d707d4a99afdc1 (diff) | |
download | libnitrokey-0275ebc610b255e3519baf866438244f288576bc.tar.gz libnitrokey-0275ebc610b255e3519baf866438244f288576bc.tar.bz2 |
Extend TOTP time test up to 64 bits
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'unittest')
-rw-r--r-- | unittest/test_pro.py | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/unittest/test_pro.py b/unittest/test_pro.py index 2930ed8..685d0fa 100644 --- a/unittest/test_pro.py +++ b/unittest/test_pro.py @@ -432,26 +432,41 @@ def test_HOTP_64bit_counter(C): assert dev_res == lib_res -@pytest.mark.otp -def test_TOTP_64bit_time(C): - if not has_binary_counter(C): - pytest.xfail('bug in NK Storage TOTP firmware') - oath = pytest.importorskip("oath") - T = 1 - lib_at = lambda t: bb(oath.totp(RFC_SECRET, t=t)) +def helper_set_TOTP_test_slot(C, slot_number): PIN_protection = False - slot_number = 1 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 assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK assert C.NK_write_totp_slot(slot_number, b'python_test', bbRFC_SECRET, 30, False, False, False, b'', DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK + + +def helper_set_time_on_device(C, t): + assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK + assert C.NK_totp_set_time(t) == DeviceErrorCode.STATUS_OK + + +@pytest.mark.otp +@pytest.mark.parametrize("t_values",[ + range(INT32_MAX - 5, INT32_MAX + 5, 1), + [2**31, 2**32, 2**33, 2**34, 2**40, 2**50, 2**60], + pytest.param([2**61-1, 2**62-1, 2**63-1, 2**64-1], marks=pytest.mark.xfail), + ]) +def test_TOTP_64bit_time(C, t_values): + if not has_binary_counter(C): + pytest.xfail('bug in NK Storage TOTP firmware') + oath = pytest.importorskip("oath") + T = 1 + slot_number = 1 + lib_at = lambda t: bb(oath.totp(RFC_SECRET, t=t)) + + helper_set_TOTP_test_slot(C, slot_number) + dev_res = [] lib_res = [] - for t in range(INT32_MAX - 5, INT32_MAX + 5, 1): - assert C.NK_first_authenticate(DefaultPasswords.ADMIN, DefaultPasswords.ADMIN_TEMP) == DeviceErrorCode.STATUS_OK - assert C.NK_totp_set_time(t) == DeviceErrorCode.STATUS_OK + for t in t_values: + helper_set_time_on_device(C, t) code_device = gs((C.NK_get_totp_code(slot_number, T, 0, 30))) dev_res += (t, code_device) lib_res += (t, lib_at(t)) |