diff options
| -rw-r--r-- | NK_C_API.cc | 7 | ||||
| -rw-r--r-- | NK_C_API.h | 15 | ||||
| -rw-r--r-- | unittest/test_storage.py | 9 | 
3 files changed, 31 insertions, 0 deletions
| diff --git a/NK_C_API.cc b/NK_C_API.cc index 6afce74..33a5fbb 100644 --- a/NK_C_API.cc +++ b/NK_C_API.cc @@ -538,6 +538,13 @@ extern "C" {  		});  	} +	NK_C_API int NK_enable_firmware_update(const char* update_password){ +		auto m = NitrokeyManager::instance(); +		return get_without_result([&]() { +			m->enable_firmware_update(update_password); +		}); +	} +  	NK_C_API const char* NK_get_status_storage_as_string() {  		auto m = NitrokeyManager::instance();  		return get_with_string_result([&]() { @@ -475,6 +475,21 @@ extern "C" {  		const char* new_update_password);  	/** +	 * Enter update mode. Needs update password. +	 * When device is in update mode it no longer accepts any HID commands until +	 * firmware is launched (regardless of being updated or not). +	 * Smartcard (through CCID interface) and its all volumes are not visible as well. +	 * Its VID and PID are changed to factory-default (03eb:2ff1 Atmel Corp.) +	 * to be detected by flashing software. Result of this command can be reversed +	 * by using 'launch' command. +	 * For dfu-programmer it would be: 'dfu-programmer at32uc3a3256s launch'. +	 * Storage only +	 * @param update_password 20 characters +	 * @return command processing error code +	 */ +	NK_C_API int NK_enable_firmware_update(const char* update_password); + +	/**  	 * Get Storage stick status as string.  	 * Storage only  	 * @return string with devices attributes diff --git a/unittest/test_storage.py b/unittest/test_storage.py index 0f3e04e..67bbf8b 100644 --- a/unittest/test_storage.py +++ b/unittest/test_storage.py @@ -318,6 +318,15 @@ def test_change_update_password(C):      assert C.NK_change_update_password(DefaultPasswords.UPDATE_TEMP, DefaultPasswords.UPDATE) == DeviceErrorCode.STATUS_OK +@pytest.mark.skip(reason='no reversing method added yet') +@pytest.mark.update +def test_enable_firmware_update(C): +    skip_if_device_version_lower_than({'S': 50}) +    wrong_password = b'aaaaaaaaaaa' +    assert C.NK_enable_firmware_update(wrong_password) == DeviceErrorCode.WRONG_PASSWORD +    assert C.NK_enable_firmware_update(DefaultPasswords.UPDATE) == DeviceErrorCode.STATUS_OK + +  @pytest.mark.other  def test_send_startup(C):      skip_if_device_version_lower_than({'S': 43}) | 
