Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions src/commander.c
Original file line number Diff line number Diff line change
Expand Up @@ -416,16 +416,18 @@ static void commander_process_backup(yajl_val json_node)
return;
}

if (STREQ(value, attr_str(ATTR_erase))) {
// Erase all files
sd_erase(CMD_backup, NULL);
return;
}
commander_fill_report(cmd_str(CMD_backup), NULL, DBB_ERR_IO_INVALID_CMD);
return;
}

if (strlens(erase)) {
// Erase single file
sd_erase(CMD_backup, erase);
int status = touch_button_press(DBB_TOUCH_LONG);
if (status == DBB_TOUCHED) {
sd_erase(CMD_backup, erase);
} else {
commander_fill_report(cmd_str(CMD_backup), NULL, status);
}
return;
}

Expand Down
98 changes: 42 additions & 56 deletions tests/tests_api.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,12 @@ static void tests_seed_xpub_backup(void)
api_format_send_cmd(cmd_str(CMD_xpub), keypath, KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_KEY_CHILD));

char erase_cmd[100];
snprintf(erase_cmd, sizeof(erase_cmd),
"{\"erase\":\"%s\"}", filename_create);
api_format_send_cmd(cmd_str(CMD_backup),
erase_cmd,
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_seed), seed_c, KEY_STANDARD);
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));

Expand All @@ -147,9 +153,7 @@ static void tests_seed_xpub_backup(void)

// backup
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
ASSERT_REPORT_HAS_NOT(filename_create);
ASSERT_REPORT_HAS_NOT(flag_msg(DBB_ERR_SD_ERASE));
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_IO_INVALID_CMD));

api_format_send_cmd(cmd_str(CMD_backup), back, KEY_STANDARD);
ASSERT_SUCCESS;
Expand Down Expand Up @@ -188,16 +192,23 @@ static void tests_seed_xpub_backup(void)
u_assert_str_eq(xpub0, xpub1);

// check backup list and erase
snprintf(erase_cmd, sizeof(erase_cmd),
"{\"erase\":\"%s\"}", filename_create);
api_format_send_cmd(cmd_str(CMD_backup),
erase_cmd,
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_list), KEY_STANDARD);
ASSERT_REPORT_HAS(filename);
ASSERT_REPORT_HAS_NOT(filename_create);

api_format_send_cmd(cmd_str(CMD_backup), check, KEY_STANDARD);
ASSERT_SUCCESS;

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

snprintf(erase_cmd, sizeof(erase_cmd),
"{\"erase\":\"%s\"}", filename);
api_format_send_cmd(cmd_str(CMD_backup),
erase_cmd,
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_list), KEY_STANDARD);
ASSERT_REPORT_HAS_NOT(filename);
ASSERT_REPORT_HAS_NOT(filename_create);
Expand All @@ -211,8 +222,7 @@ static void tests_seed_xpub_backup(void)
api_format_send_cmd(cmd_str(CMD_password), tests_pwd, NULL);
ASSERT_SUCCESS;

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
sd_erase(CMD_backup, NULL);

api_format_send_cmd(cmd_str(CMD_seed), seed_create, KEY_STANDARD);
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));
Expand Down Expand Up @@ -252,9 +262,6 @@ static void tests_seed_xpub_backup(void)
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_list), KEY_STANDARD);
ASSERT_REPORT_HAS(cmd_str(CMD_warning));

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

// test keypath
api_format_send_cmd(cmd_str(CMD_xpub), "m/111'", KEY_STANDARD);
ASSERT_REPORT_HAS("\"xpub\":");
Expand Down Expand Up @@ -395,9 +402,6 @@ static void tests_seed_xpub_backup(void)
api_format_send_cmd(cmd_str(CMD_password), tests_pwd, NULL);
ASSERT_SUCCESS;

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

// seed with extra entropy from device
api_format_send_cmd(cmd_str(CMD_seed), seed_usb, KEY_STANDARD);
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));
Expand Down Expand Up @@ -443,11 +447,6 @@ static void tests_seed_xpub_backup(void)
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));
memcpy(xpub1, api_read_value(CMD_xpub), sizeof(xpub1));
u_assert_str_eq(xpub0, xpub1);


// clean up sd card
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
}


Expand Down Expand Up @@ -615,11 +614,6 @@ static void tests_legacy_hidden_wallet(void)
ASSERT_SUCCESS;
}

// clean up sd card
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;


api_format_send_cmd(cmd_str(CMD_hidden_password), set_hidden_wallet_cmd_1, KEY_STANDARD);
ASSERT_SUCCESS;

Expand Down Expand Up @@ -721,14 +715,14 @@ static void tests_u2f(void)
api_format_send_cmd(cmd_str(CMD_password), tests_pwd, NULL);
ASSERT_SUCCESS;

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

// Seed
api_format_send_cmd(cmd_str(CMD_device), attr_str(ATTR_info), KEY_STANDARD);
ASSERT_REPORT_HAS("\"U2F\":true");
ASSERT_REPORT_HAS("\"U2F_hijack\":true");

api_format_send_cmd(cmd_str(CMD_backup),
"{\"erase\":\"u2f_test_0.pdf\"}",
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_seed),
"{\"source\":\"create\", \"filename\":\"u2f_test_0.pdf\", \"key\":\"password\"}",
KEY_STANDARD);
Expand Down Expand Up @@ -847,9 +841,6 @@ static void tests_u2f(void)
api_format_send_cmd(cmd_str(CMD_password), tests_pwd, NULL);
ASSERT_SUCCESS;

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

snprintf(cmd, sizeof(cmd),
"{\"source\":\"%s\", \"key\":\"password\", \"filename\":\"%s\", \"U2F_counter\":100}",
attr_str(ATTR_U2F_create), fn0);
Expand All @@ -862,6 +853,12 @@ static void tests_u2f(void)
// verify backup0 `hww` success
// verify backup0 `` success (default hww)
// verify backup0 `all` success (invalid cmd)

snprintf(cmd, sizeof(cmd),
"{\"erase\":\"%s\"}", fn0);
api_format_send_cmd(cmd_str(CMD_backup),
cmd,
KEY_STANDARD);
snprintf(cmd, sizeof(cmd),
"{\"source\":\"create\", \"filename\":\"%s\", \"key\":\"password\"}", fn0);
api_format_send_cmd(cmd_str(CMD_seed), cmd, KEY_STANDARD);
Expand Down Expand Up @@ -905,6 +902,11 @@ static void tests_u2f(void)
// verify backup1 `u2f` success
// verify backup1 `hww` success
// verify backup1 `` success
snprintf(cmd, sizeof(cmd),
"{\"erase\":\"%s\"}", fn1);
api_format_send_cmd(cmd_str(CMD_backup),
cmd,
KEY_STANDARD);
snprintf(cmd, sizeof(cmd),
"{\"source\":\"create\", \"filename\":\"%s\", \"key\":\"password\"}", fn1);
api_format_send_cmd(cmd_str(CMD_seed), cmd, KEY_STANDARD);
Expand Down Expand Up @@ -1506,11 +1508,6 @@ static void tests_u2f(void)
api_format_send_cmd(cmd_str(CMD_sign), "", KEY_STANDARD);
ASSERT_REPORT_HAS(sig_1_input);
}


// clean up sd card
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
}


Expand Down Expand Up @@ -1591,10 +1588,11 @@ static void tests_device(void)
api_format_send_cmd(cmd_str(CMD_bootloader), "", KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_IO_INVALID_CMD));

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
api_format_send_cmd(cmd_str(CMD_backup),
"{\"erase\":\"c.pdf\"}",

api_format_send_cmd(cmd_str(CMD_seed),
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_seed),
"{\"source\":\"create\", \"filename\":\"c.pdf\", \"key\":\"password\"}", KEY_STANDARD);
ASSERT_SUCCESS;

Expand Down Expand Up @@ -1691,9 +1689,6 @@ static void tests_device(void)
api_format_send_cmd(cmd_str(CMD_device), attr_str(ATTR_info), KEY_STANDARD);
ASSERT_REPORT_HAS("\"bootlock\":true");

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

if (!TEST_LIVE_DEVICE) {
commander_force_reset();
}
Expand Down Expand Up @@ -1910,9 +1905,9 @@ static void tests_password(void)
hidden_pwd, cmd_str(CMD_key), hidden_pwd);
api_format_send_cmd(cmd_str(CMD_hidden_password), cmd, KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_KEY_MASTER));
// Erase backups
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;
api_format_send_cmd(cmd_str(CMD_backup),
"{\"erase\":\"h.pdf\"}",
KEY_STANDARD);
// Seed wallets
snprintf(cmd, sizeof(cmd),
"{\"source\":\"create\",\"filename\":\"h.pdf\",\"key\":\"%s\"}", tests_pwd);
Expand Down Expand Up @@ -2130,6 +2125,9 @@ static void tests_echo_tfa(void)
api_format_send_cmd(cmd_str(CMD_device), attr_str(ATTR_lock), KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_KEY_MASTER));

api_format_send_cmd(cmd_str(CMD_backup),
"{\"erase\":\"c.pdf\"}",
KEY_STANDARD);
api_format_send_cmd(cmd_str(CMD_seed),
"{\"source\":\"create\", \"filename\":\"c.pdf\", \"key\":\"password\"}", KEY_STANDARD);
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));
Expand Down Expand Up @@ -2165,9 +2163,6 @@ static void tests_echo_tfa(void)
ASSERT_REPORT_HAS(cmd_str(CMD_ecdh));
// end test ECDH

api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS

api_format_send_cmd(cmd_str(CMD_ecdh), "invalid_cmd", KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_IO_INVALID_CMD));

Expand Down Expand Up @@ -2395,9 +2390,6 @@ static void tests_sign(void)
ASSERT_SUCCESS;

// backup
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;

if (!TEST_LIVE_DEVICE) {
// copy test sd_files to sd card directory
// some files have seeds with known high-S signatures
Expand All @@ -2417,11 +2409,6 @@ static void tests_sign(void)
}
ASSERT_REPORT_HAS_NOT(attr_str(ATTR_error));

// clean up sd card
api_format_send_cmd(cmd_str(CMD_backup), attr_str(ATTR_erase), KEY_STANDARD);
ASSERT_SUCCESS;


// missing parameters
api_format_send_cmd(cmd_str(CMD_sign), checkpub_missing_parameter, KEY_STANDARD);
ASSERT_REPORT_HAS(flag_msg(DBB_ERR_IO_INVALID_CMD));
Expand Down Expand Up @@ -2901,7 +2888,6 @@ int main(void)
printf("\nInternal API result via hijack interface:\n");
TEST_U2FAUTH_HIJACK = 1;
run_utests();

#ifndef CONTINUOUS_INTEGRATION
// Live test of the HID API
// Requires the hidapi library to be installed:
Expand Down