diff --git a/src/ctap2_reset_flow.c b/src/ctap2_reset_flow.c index 964577a2..eb254552 100644 --- a/src/ctap2_reset_flow.c +++ b/src/ctap2_reset_flow.c @@ -81,7 +81,7 @@ void ctap2_reset_ux(void) { io_seproxyhal_play_tune(TUNE_LOOK_AT_ME); - nbgl_useCaseChoice(&C_warning64px, + nbgl_useCaseChoice(&C_Warning_64px, "Delete saved login\n" "details for all\n" "websites?\n", @@ -91,4 +91,4 @@ void ctap2_reset_ux(void) { ctap_ux_on_user_action); } -#endif \ No newline at end of file +#endif diff --git a/src/ui_shared.c b/src/ui_shared.c index c0ce9ff6..e84862cd 100644 --- a/src/ui_shared.c +++ b/src/ui_shared.c @@ -197,7 +197,7 @@ static void settings_callback(int token, uint8_t index) { if (config_get_rk_enabled()) { config_set_rk_enabled(false); } else { - nbgl_useCaseChoice(&C_warning64px, + nbgl_useCaseChoice(&C_Warning_64px, "Enable resident keys?", "Updating the OS or this app\n" "will delete login info stored on\n" @@ -403,7 +403,7 @@ void app_nbgl_status(const char *message, nbgl_pageInfoDescription_t info = {.bottomButtonStyle = NO_BUTTON_STYLE, .footerText = NULL, - .centeredInfo.icon = &C_round_cross_64px, + .centeredInfo.icon = &C_Denied_Circle_64px, .centeredInfo.offsetY = 0, .centeredInfo.onTop = false, .centeredInfo.style = LARGE_CASE_INFO, @@ -417,9 +417,9 @@ void app_nbgl_status(const char *message, .tuneId = TUNE_TAP_CASUAL}; if (is_success) { - info.centeredInfo.icon = &C_round_check_64px; + info.centeredInfo.icon = &C_Check_Circle_64px; } else { - info.centeredInfo.icon = &C_round_warning_64px; + info.centeredInfo.icon = &C_Important_Circle_64px; } pageContext = nbgl_pageDrawInfo(&onActionCallback, &ticker, &info); diff --git a/tests/speculos/ctap1_client.py b/tests/speculos/ctap1_client.py index 53295a63..7e0fa20b 100644 --- a/tests/speculos/ctap1_client.py +++ b/tests/speculos/ctap1_client.py @@ -51,7 +51,7 @@ def __init__(self, device, model, navigator, debug=False): self.debug = debug def confirm(self): - if self.model == "stax": + if self.model in ["stax", "flex"]: instructions = [NavInsID.USE_CASE_CHOICE_CONFIRM] else: instructions = [NavInsID.BOTH_CLICK] @@ -59,7 +59,7 @@ def confirm(self): screen_change_after_last_instruction=False) def wait_for_return_on_dashboard(self): - if self.model == "stax": + if self.model in ["stax", "flex"]: # On Stax tap on the center to dismiss the status message faster self.navigator.navigate([NavInsID.USE_CASE_STATUS_DISMISS]) self.navigator._backend.wait_for_home_screen() @@ -108,7 +108,7 @@ def register(self, client_param, app_param, user_accept=True, text = "Register" else: text = "Abort" - elif self.model == "stax": + elif self.model in ["stax", "flex"]: if user_accept is not None: if not user_accept: val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] @@ -170,7 +170,7 @@ def authenticate(self, client_param, app_param, key_handle, text = "Login" else: text = "Abort" - elif self.model == "stax": + elif self.model in ["stax", "flex"]: if user_accept is not None: if not user_accept: val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] diff --git a/tests/speculos/ctap2_client.py b/tests/speculos/ctap2_client.py index e0fc4bb3..ad60d013 100644 --- a/tests/speculos/ctap2_client.py +++ b/tests/speculos/ctap2_client.py @@ -35,7 +35,7 @@ def __init__(self, device, model, navigator, ctap2_u2f_proxy, debug=False): super().__init__(device) def confirm(self): - if self.model == "stax": + if self.model in ["stax", "flex"]: instructions = [NavInsID.USE_CASE_CHOICE_CONFIRM] else: instructions = [NavInsID.BOTH_CLICK] @@ -43,7 +43,7 @@ def confirm(self): screen_change_after_last_instruction=False) def wait_for_return_on_dashboard(self): - if self.model == "stax": + if self.model in ["stax", "flex"]: # On Stax tap on the center to dismiss the status message faster # Ignore if there is nothing that happen (probably already on home screen), # which is expected for flow without status (reset) @@ -144,7 +144,7 @@ def make_credential(self, client_data_hash, rp, user, key_params, text = "Don't register" else: text = "Register$" - elif self.model == "stax": + elif self.model in ["stax", "flex"]: if user_accept is not None: if not user_accept: val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] @@ -224,7 +224,7 @@ def get_assertion(self, rp_id, client_data_hash, allow_list=None, text = "Log in" else: text = "Reject" - elif self.model == "stax": + elif self.model in ["stax", "flex"]: if user_accept is not None: if login_type == "none": val_ins = [NavInsID.TAPPABLE_CENTER_TAP] @@ -282,7 +282,7 @@ def reset(self, *, event=None, on_keepalive=None, user_accept=True, text = "Yes, delete" else: text = "No, don't delete" - elif self.model == "stax": + elif self.model in ["stax", "flex"]: if user_accept is not None: if not user_accept: val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] diff --git a/tests/speculos/fido2/test_get_info.py b/tests/speculos/fido2/test_get_info.py index 9c3230d5..7d21c5ac 100644 --- a/tests/speculos/fido2/test_get_info.py +++ b/tests/speculos/fido2/test_get_info.py @@ -45,6 +45,10 @@ def test_get_info_aaguid(client): hs = sha256("Ledger FIDO 2 1.0 Stax".encode('utf-8')).hexdigest() hs = hs[:32] # Keep only the 16 first bytes assert hs == info.aaguid.hex() + elif client.model == "flex": + hs = sha256("Ledger FIDO 2 1.0 Flex".encode('utf-8')).hexdigest() + hs = hs[:32] # Keep only the 16 first bytes + assert hs == info.aaguid.hex() else: raise ValueError("Unhandled model")