navigation button visibility in share import/export workflows
What changed, and why it matters
This commit adjusts when on-screen navigation buttons appear during the wallet backup and restore workflows for SLIP39 secret shares. It moves the hiding of the right navigation button so it is only removed on the specific screens where it is not needed, rather than removing it earlier in the flow. This is a user-interface polish change; there is no direct evidence in the commit that it fixes a security vulnerability.
Treat as a routine UI fix. If reviewing for security, verify that the right navbar button being momentarily visible does not expose an unintended navigation path that could skip passphrase confirmation or secret-share validation. No immediate security action is indicated by the diff alone.
Security signals we found
UI state-machine change in secret-share backup/restore flow
No cryptographic, authentication, or access-control changes
No input validation changes
No memory-safety changes
Evidence from the diff
The patch changes two UI state machines (gui_create_share_widgets.c and gui_import_share_widgets.c). Previously, SetNavBarRightBtn(…, NVS_RIGHT_BUTTON_BUTT, NULL, NULL) was called at the start of the CREATE_SHARE_CONFIRM / IMPORT_SHARE_SSB_INPUT transitions, unconditionally disabling the right navbar button. Now that call is moved into the branches that do not need a passphrase, and an equivalent call is added to the passphrase branch. Effectively the right button is still disabled in the same end states, but the ordering is changed so the button remains visible until the transition is complete. No cryptographic, input-validation, or access-control code is modified.
Changed components
src/ui/gui_widgets/gui_create_share_widgets.csrc/ui/gui_widgets/gui_import_share_widgets.cInspect captured patch +4 / −2
diff --git a/src/ui/gui_widgets/gui_create_share_widgets.c b/src/ui/gui_widgets/gui_create_share_widgets.c
index 6d5532f..7264535 100644
--- a/src/ui/gui_widgets/gui_create_share_widgets.c
+++ b/src/ui/gui_widgets/gui_create_share_widgets.c
@@ -475,7 +475,6 @@ int8_t GuiCreateShareNextTile(const char *passphrase)
lv_obj_add_flag(g_shareBackupTile.nextCont, LV_OBJ_FLAG_HIDDEN);
break;
case CREATE_SHARE_CONFIRM:
- SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
if (GuiCreateWalletNeedPassphrase()) {
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_BAR_RETURN, ReturnHandler, NULL);
SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_BAR_QUESTION_MARK, OpenPassphraseTutorialHandler, NULL);
@@ -483,6 +482,7 @@ int8_t GuiCreateShareNextTile(const char *passphrase)
} else {
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_LEFT_BUTTON_BUTT, NULL, NULL);
SetNavBarMidBtn(g_pageWidget->navBarWidget, NVS_MID_BUTTON_BUTT, NULL, NULL);
+ SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
g_createShareTileView.currentTile++;
GuiModelSlip39WriteSe(g_selectCnt);
}
@@ -490,6 +490,7 @@ int8_t GuiCreateShareNextTile(const char *passphrase)
case CREATE_SHARE_PASSPHRASE:
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_LEFT_BUTTON_BUTT, NULL, NULL);
SetNavBarMidBtn(g_pageWidget->navBarWidget, NVS_MID_BUTTON_BUTT, NULL, NULL);
+ SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
GuiModelSlip39WriteSe(g_selectCnt);
break;
}
diff --git a/src/ui/gui_widgets/gui_import_share_widgets.c b/src/ui/gui_widgets/gui_import_share_widgets.c
index 25d00cd..bd069be 100644
--- a/src/ui/gui_widgets/gui_import_share_widgets.c
+++ b/src/ui/gui_widgets/gui_import_share_widgets.c
@@ -178,7 +178,6 @@ int8_t GuiImportShareNextTile(const char *passphrase)
}
switch (g_importShareTileView.currentTile) {
case IMPORT_SHARE_SSB_INPUT:
- SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
if (GuiCreateWalletNeedPassphrase()) {
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_BAR_RETURN, ReturnHandler, NULL);
SetMidBtnLabel(g_pageWidget->navBarWidget, NVS_BAR_MID_LABEL, _("Passphrase"));
@@ -187,6 +186,7 @@ int8_t GuiImportShareNextTile(const char *passphrase)
g_importShareTileView.currentTile++;
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_LEFT_BUTTON_BUTT, NULL, NULL);
GuiCreateCircleAroundAnimation(lv_scr_act(), -40);
+ SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
GuiModelSlip39CalWriteSe(slip39);
}
lv_obj_add_flag(g_nextCont, LV_OBJ_FLAG_HIDDEN);
@@ -195,6 +195,7 @@ int8_t GuiImportShareNextTile(const char *passphrase)
case IMPORT_SHARE_PASSPHRASE:
SetNavBarLeftBtn(g_pageWidget->navBarWidget, NVS_LEFT_BUTTON_BUTT, NULL, NULL);
SetNavBarMidBtn(g_pageWidget->navBarWidget, NVS_MID_BUTTON_BUTT, NULL, NULL);
+ SetNavBarRightBtn(g_pageWidget->navBarWidget, NVS_RIGHT_BUTTON_BUTT, NULL, NULL);
GuiCreateCircleAroundAnimation(lv_scr_act(), -40);
GuiModelSlip39CalWriteSe(slip39);
break;
Why this scored 14/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.