From 610efaa2a6ce7c07cba9eb2ea501a66e09aad746 Mon Sep 17 00:00:00 2001 From: Lucas PASCAL Date: Mon, 22 Jul 2024 09:44:57 +0200 Subject: [PATCH] [bump] 1.6.4 Disable RK for real --- Makefile | 29 +++++++++++------- include/config.h | 4 +-- src/config.c | 4 +-- src/ctap2_get_info.c | 2 +- src/ctap2_make_credential.c | 2 +- src/ui_shared.c | 28 ++++++++--------- tests/speculos/fido2/test_fido2_screens.py | 4 +-- tests/speculos/fido2/test_get_info.py | 4 +-- tests/speculos/fido2/test_option_rk.py | 16 ++++++++-- .../flex/test_u2f_screens_idle/00001.png | Bin 8701 -> 8647 bytes .../nanos/test_u2f_screens_idle/00002.png | Bin 322 -> 336 bytes .../nanosp/test_u2f_screens_idle/00002.png | Bin 349 -> 361 bytes .../nanox/test_u2f_screens_idle/00002.png | Bin 349 -> 361 bytes .../stax/test_u2f_screens_idle/00001.png | Bin 10650 -> 10610 bytes tests/speculos/u2f/test_u2f_screens.py | 4 +-- tests/speculos/utils.py | 3 +- 16 files changed, 59 insertions(+), 41 deletions(-) diff --git a/Makefile b/Makefile index 64879c8b..1ef93415 100644 --- a/Makefile +++ b/Makefile @@ -33,7 +33,7 @@ PATH_APP_LOAD_PARAMS += "5262163'" # int("PKS".encode("ascii").hex(), 16) APPVERSION_M=1 APPVERSION_N=6 -APPVERSION_P=3 +APPVERSION_P=4 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) ICON_NANOS=icons/icon_security_key_nanos.gif @@ -125,16 +125,23 @@ ENABLE_NOCRC_APP_LOAD_PARAMS = 1 # then reinstall flow), and this reset was causing even more issues DEFINES += HAVE_NO_RESET_GENERATION_INCREMENT -# Adds the Resident Key support and exposes a setting to enable/disable it. -# Currently the settings default value is `False`, which means that by default -# users will need to activate the setting before being able to create "Resident -# Keys", also named "Discoverable Credentials". -# This has been implemented to protect user from the NVRAM wipe mostly happening -# during an app update which will erase their RK credentials with no possibility -# to restore them. -# Advanced users can still choose to completely disable this setting. -# /!\ disabled for 1.6 stable release -# DEFINES += HAVE_RK_SUPPORT_SETTING +# These 2 flags allow to enable/disable the RK feature and expose an app setting for it. +# This has been implemented to protect user from the NVRAM wipe mostly happening during +# an app update which will erase their RK credentials with no possibility to restore them. +# +# ENABLE_RK_CONFIG activates the internal code which allows to activate and deactivate +# the feature. It sets the feature as deactivated by default. +# ENABLE_RK_CONFIG_UI_SETTING activates the UI settings which allows a user to enable or +# disable the feature. +# +# So the expected behaviors are the following: +# - No flags -> RK are enabled by default and a user can not deactivate the feature, +# - ENABLE_RK_CONFIG only -> RK are disabled by default and a user can not activate the feature, +# - ENABLE_RK_CONFIG_UI_SETTING only -> compilation fails at link, +# - ENABLE_RK_CONFIG & ENABLE_RK_CONFIG_UI_SETTING -> RK are disabled by default but a user can +# enable or disable the feature through the app's settings. +DEFINES += ENABLE_RK_CONFIG +# DEFINES += ENABLE_RK_CONFIG_UI_SETTING DEFINES += HAVE_FIDO2_RPID_FILTER diff --git a/include/config.h b/include/config.h index c10e4a3e..502bd502 100644 --- a/include/config.h +++ b/include/config.h @@ -34,7 +34,7 @@ typedef struct config_t { uint8_t pin[16]; uint8_t pinSet; uint8_t pinRetries; -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG uint8_t rk_enabled; #endif } config_t; @@ -52,7 +52,7 @@ void config_set_ctap2_pin(uint8_t *pin); void config_decrease_ctap2_pin_retry_counter(void); void config_reset_ctap2_pin_retry_counter(void); -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG void config_set_rk_enabled(bool enabled); bool config_get_rk_enabled(void); #endif diff --git a/src/config.c b/src/config.c index 86a56624..48e4fd09 100644 --- a/src/config.c +++ b/src/config.c @@ -92,7 +92,7 @@ int config_init(void) { tmp8 = 0; nvm_write((void *) &N_u2f.pinSet, (void *) &tmp8, sizeof(uint8_t)); -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG // Initialize rk_enable value: Disabled by default tmp8 = 0; nvm_write((void *) &N_u2f.rk_enabled, (void *) &tmp8, sizeof(uint8_t)); @@ -161,7 +161,7 @@ void config_reset_ctap2_pin_retry_counter(void) { nvm_write((void *) &N_u2f.pinRetries, (void *) &tmp, sizeof(uint8_t)); } -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG void config_set_rk_enabled(bool enabled) { uint8_t tmp8 = enabled ? 1 : 0; nvm_write((void *) &N_u2f.rk_enabled, (void *) &tmp8, sizeof(uint8_t)); diff --git a/src/ctap2_get_info.c b/src/ctap2_get_info.c index 9e72d04b..12553a4e 100644 --- a/src/ctap2_get_info.c +++ b/src/ctap2_get_info.c @@ -73,7 +73,7 @@ void ctap2_get_info_handle(u2f_service_t *service, uint8_t *buffer, uint16_t len cbip_add_int(&encoder, TAG_OPTIONS); cbip_add_map_header(&encoder, 4); cbip_add_string(&encoder, OPTION_RESIDENT_KEY, sizeof(OPTION_RESIDENT_KEY) - 1); -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG cbip_add_boolean(&encoder, config_get_rk_enabled()); #else cbip_add_boolean(&encoder, true); diff --git a/src/ctap2_make_credential.c b/src/ctap2_make_credential.c index 71e5107a..901ec201 100644 --- a/src/ctap2_make_credential.c +++ b/src/ctap2_make_credential.c @@ -349,7 +349,7 @@ static int process_makeCred_authnr_options(cbipDecoder_t *decoder, cbipItem_t *m status = cbiph_get_map_key_str_bool(decoder, &optionsItem, OPTION_RESIDENT_KEY, &boolValue); if (status == CBIPH_STATUS_FOUND) { -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG if (boolValue && !config_get_rk_enabled()) { PRINTF("RK disabled\n"); return ERROR_UNSUPPORTED_OPTION; diff --git a/src/ui_shared.c b/src/ui_shared.c index d9abf91d..d480f79a 100644 --- a/src/ui_shared.c +++ b/src/ui_shared.c @@ -28,7 +28,7 @@ static void app_quit(void) { #include "ui_shared.h" #if defined(HAVE_BAGL) -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING static void display_warning(); static void display_settings(); @@ -108,7 +108,7 @@ static void display_settings() { ux_flow_init(0, ux_settings_disabled_flow, NULL); } } -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING UX_STEP_NOCB(ux_idle_flow_1_step, pn, {&C_icon_security_key, "Security Key"}); @@ -132,7 +132,7 @@ UX_STEP_NOCB(ux_idle_flow_3_step, APPVERSION, }); -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING UX_STEP_VALID(ux_idle_flow_4_step, pb, display_settings(), @@ -140,7 +140,7 @@ UX_STEP_VALID(ux_idle_flow_4_step, &C_icon_coggle, "Settings", }); -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING UX_STEP_CB(ux_idle_flow_5_step, pb, @@ -153,9 +153,9 @@ UX_FLOW(ux_idle_flow, &ux_idle_flow_1_step, &ux_idle_flow_2_step, &ux_idle_flow_3_step, -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING &ux_idle_flow_4_step, -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING &ux_idle_flow_5_step); void ui_idle(void) { @@ -176,10 +176,10 @@ void ui_idle(void) { * 'Info' / 'Settings' menu */ -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING static uint8_t initSettingPage; static nbgl_layoutSwitch_t switches[1] = {0}; -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING static const char *const INFO_TYPES[] = {"Version", "Developer", "Copyright"}; static const char *const INFO_CONTENTS[] = {APPVERSION, "Ledger", "(c) 2022-2024 Ledger"}; @@ -189,7 +189,7 @@ static const nbgl_contentInfoList_t infoList = { .infoContents = INFO_CONTENTS, }; -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING static void controls_callback(int token, uint8_t index, int page); @@ -244,7 +244,7 @@ static void controls_callback(int token, uint8_t index, int page) { } switches[0].initState = config_get_rk_enabled(); } -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING /* * When no NFC, warning status page @@ -294,7 +294,7 @@ void ui_idle(void) { } #endif // ENABLE_NFC -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING switches[0].text = "Resident keys"; switches[0].subText = "Stores login info on this\n" @@ -308,17 +308,17 @@ void ui_idle(void) { switches[0].token = FIRST_USER_TOKEN; switches[0].tuneId = TUNE_TAP_CASUAL; switches[0].initState = config_get_rk_enabled(); -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING nbgl_useCaseHomeAndSettings( APPNAME, &C_icon_security_key_64px, "Use this app for two-factor\nauthentication and\npassword-less log ins.", INIT_HOME_PAGE, -#ifdef HAVE_RK_SUPPORT_SETTING +#ifdef ENABLE_RK_CONFIG_UI_SETTING &settingContents, #else NULL, -#endif // HAVE_RK_SUPPORT_SETTING +#endif // ENABLE_RK_CONFIG_UI_SETTING &infoList, home_button, app_quit); diff --git a/tests/speculos/fido2/test_fido2_screens.py b/tests/speculos/fido2/test_fido2_screens.py index eff5c7dd..0ab5626d 100644 --- a/tests/speculos/fido2/test_fido2_screens.py +++ b/tests/speculos/fido2/test_fido2_screens.py @@ -6,12 +6,12 @@ from client import TESTS_SPECULOS_DIR from utils import generate_random_bytes from utils import generate_make_credentials_params -from utils import HAVE_RK_SUPPORT_SETTING +from utils import ENABLE_RK_CONFIG_UI_SETTING from ragger.navigator import NavInsID, NavIns -@pytest.mark.skipif(not HAVE_RK_SUPPORT_SETTING, reason="settings not enable") +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, reason="settings not enable") def test_fido_screens_settings(client, test_name): if client.model.startswith("nano"): diff --git a/tests/speculos/fido2/test_get_info.py b/tests/speculos/fido2/test_get_info.py index 7d21c5ac..350b3845 100644 --- a/tests/speculos/fido2/test_get_info.py +++ b/tests/speculos/fido2/test_get_info.py @@ -1,6 +1,6 @@ from hashlib import sha256 from fido2.ctap2.base import Ctap2, Info -from utils import HAVE_RK_SUPPORT_SETTING +from utils import ENABLE_RK_CONFIG def test_get_info(client): @@ -57,7 +57,7 @@ def test_get_info_options(client): info = client.ctap2.info # Specified options with fix value - if HAVE_RK_SUPPORT_SETTING: + if ENABLE_RK_CONFIG: assert not info.options["rk"] else: assert info.options["rk"] diff --git a/tests/speculos/fido2/test_option_rk.py b/tests/speculos/fido2/test_option_rk.py index 1a124f2f..10a0848d 100644 --- a/tests/speculos/fido2/test_option_rk.py +++ b/tests/speculos/fido2/test_option_rk.py @@ -7,12 +7,12 @@ from client import TESTS_SPECULOS_DIR from utils import generate_random_bytes, generate_make_credentials_params from utils import generate_get_assertion_params -from utils import HAVE_RK_SUPPORT_SETTING +from utils import ENABLE_RK_CONFIG_UI_SETTING from ragger.navigator import NavInsID, NavIns -@pytest.mark.skipif(not HAVE_RK_SUPPORT_SETTING, +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, reason="settings not enable") def test_option_rk_disabled(client): info = client.ctap2.info @@ -36,7 +36,7 @@ def enable_rk_option(client): if info.options["rk"]: return - if not HAVE_RK_SUPPORT_SETTING: + if not ENABLE_RK_CONFIG_UI_SETTING: raise ValueError("rk and setting not enabled") if client.model.startswith("nano"): @@ -85,6 +85,8 @@ def enable_rk_option(client): client.ctap2._info = client.ctap2.get_info() +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, + reason="settings not enable") def test_option_rk_enabled(client): enable_rk_option(client) @@ -92,6 +94,8 @@ def test_option_rk_enabled(client): assert info.options["rk"] +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, + reason="settings not enable") def test_option_rk_make_cred_exclude_refused(client, test_name): enable_rk_option(client) @@ -141,6 +145,8 @@ def test_option_rk_make_cred_exclude_refused(client, test_name): client.ctap2.reset() +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, + reason="settings not enable") def test_option_rk_get_assertion(client, test_name): enable_rk_option(client) @@ -205,6 +211,8 @@ def test_option_rk_get_assertion(client, test_name): "--fast" in sys.argv, reason="running in fast mode", ) +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, + reason="settings not enable") def test_option_rk_key_store_full(client): enable_rk_option(client) @@ -231,6 +239,8 @@ def test_option_rk_key_store_full(client): "--fast" in sys.argv, reason="running in fast mode", ) +@pytest.mark.skipif(not ENABLE_RK_CONFIG_UI_SETTING, + reason="settings not enable") def test_option_rk_overwrite_get_assertion(client, test_name): enable_rk_option(client) diff --git a/tests/speculos/snapshots/flex/test_u2f_screens_idle/00001.png b/tests/speculos/snapshots/flex/test_u2f_screens_idle/00001.png index fac4315483cb30dcfd6d6d626c4bc9451a6451c3..4390ea1170821afafd44e3d93caef2ac3a1b52fb 100644 GIT binary patch literal 8647 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 literal 8701 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 Hu0mjfNkoQT delta 295 zcmV+?0oeY~0>T22B!3A>L_t(|ob8$04ul{KM90ng{~zpw`@n`YNDF(39g;augo~*& zwSodd2q8oo=YjL+w12$RB0RGL_$%9<9l^&C8(?#}D0?2*_IH16G!tNKs1t0DT}WWq zBRc?xDy3Bx=v0_G$Gbwas(3&H!4ptY(q?5KH!f-0WWBeLOn>(ZfdK)rWQ|pn`VOHi zLGx02_2=5jY7d72Rh_0$N|U#B{=}(6+qyZ)3Zrn3BLw~~@2eE*a&QRaL{Vixn@L_qqGcYr82@2|rN|1<= t0b+*cmzHgJhahOTp+X2Dgb)G%@B*uqmp3>vF0et)58qm$40B}VRKm&f~Bnfbj>o0gq2(7)hb za-4_N+Lb@yeov74?Yz}SXR_DCM^yDn)udfH-?6`*`Ph^zn=f_l&RzD_==IvZn?>^< zaXIr?LB|1(Drj~JB9OiPJhvL zW`gJc?6O5_fAtr$O^j$&`Y6*EqJOV>{X)O*=X+k;_xvbxwwaXEdG}>c{GrR*@&Tb{ z>Ot>Wf6j@0s`b)+`;+p9^S3xwEiGWw`F!%BjngNMJuH!5asxATPi6nK_ujrX_@5)( d-wX^N`1S5zygaA<)q`aqQBPMtmvv4FO#qfGoiP9a delta 322 zcmaFKbeCy@O1+Awi(^Q|oVPclg$^n3v?i9^;rtyR^z9L|van{$HE-cB|L4uP*JjC> zW2nl203Q~+xVUV4Yc9XFYj!!io#yj5cUuoX5_9N(I%!SElR2k9-pbJPSjF>|sn+Gb z#KMH|_k3TjYLsqzxl_w^Z`zlZXX}ER-+%cf`p>w20gtDxR_~6>X*bLk*Oer1xugA` zN#f0kSwTn7lxsZ_+G2m|;;+rN65DKY8DrueXIc3=%k3(Exq0ys_w>C!k7D1cR=FOY z;Q8NV?h4QUDOU~%ub!Y@*KV8pc<+ucj|Cow7HwHAoV7hYSM}7pJ$H;FAN#-Ph(C1e zJpaQB)sDf(f`qN#N>}856G~ZQtm8Oi0mF@jKfS%T?_T~UHw58Xh7bJjuB4pEo;7XC PQ;?{qtDnm{r-UW|>p7S@ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00002.png index afc5edf3f30e4a2d67d1c9169d09a65ec61f7a3f..4059bcc7a2c59fe161ba3f72c95aa27dffb072d7 100644 GIT binary patch delta 334 zcmcc1^pa_UO1*)ni(^Q|oVPdc@*Ps(X-iDnBmD0Fq$+(m0ngOzx%+d!*7lt+>vF0et)58qm$40B}VRKm&f~Bnfbj>o0gq2(7)hb za-4_N+Lb@yeov74?Yz}SXR_DCM^yDn)udfH-?6`*`Ph^zn=f_l&RzD_==IvZn?>^< zaXIr?LB|1(Drj~JB9OiPJhvL zW`gJc?6O5_fAtr$O^j$&`Y6*EqJOV>{X)O*=X+k;_xvbxwwaXEdG}>c{GrR*@&Tb{ z>Ot>Wf6j@0s`b)+`;+p9^S3xwEiGWw`F!%BjngNMJuH!5asxATPi6nK_ujrX_@5)( d-wX^N`1S5zygaA<)q`aqQBPMtmvv4FO#qfGoiP9a delta 322 zcmaFKbeCy@O1+Awi(^Q|oVPclg$^n3v?i9^;rtyR^z9L|van{$HE-cB|L4uP*JjC> zW2nl203Q~+xVUV4Yc9XFYj!!io#yj5cUuoX5_9N(I%!SElR2k9-pbJPSjF>|sn+Gb z#KMH|_k3TjYLsqzxl_w^Z`zlZXX}ER-+%cf`p>w20gtDxR_~6>X*bLk*Oer1xugA` zN#f0kSwTn7lxsZ_+G2m|;;+rN65DKY8DrueXIc3=%k3(Exq0ys_w>C!k7D1cR=FOY z;Q8NV?h4QUDOU~%ub!Y@*KV8pc<+ucj|Cow7HwHAoV7hYSM}7pJ$H;FAN#-Ph(C1e zJpaQB)sDf(f`qN#N>}856G~ZQtm8Oi0mF@jKfS%T?_T~UHw58Xh7bJjuB4pEo;7XC PQ;?{qtDnm{r-UW|>p7S@ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_idle/00001.png b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00001.png index 1f37c85509e245fa9012dfead41ad05b49ba4ead..cbc81ae7f415608768450e6b9c3012ae844fb8d4 100644 GIT binary patch literal 10610 zcmeI2doWvT-}ggXilTSxOzA;ehd32=s6+Q|wM9|dI7CC$rX@|p`7HE6s}9{tv=rSG zEs`jLgrL%*MHOw*iikrAQi32~B}1p3N~hITfU> z)x{sNb0SanojCe-U-eF~kbT>}x}7?|*(L6KzSBiGdzACr{No(GgT;5yR<%sL=#Ad~ zy|+Daw!dH7eAdTOx0M0KHE;3eML=y=cglebc7s9J_qv1L9;^o4|LvO4-aBo=2St*0 zo!%oXk*M(Z957*-^d%hTfeHF%3?h!~b%)Wgu9Yh>1*~;8PwF(zO%!9V4ad3!HZfYF zI8pUD_ADtOQhNa|h@bq}UYA<@vZBImUO<_Q_M#CsP<7N`mCj)P{5eKBxO*iAn{79^ z9A#k@bRI@qpO4Nf+s`36Ek*0RsVwMYb=%h=DhUy%(u-dPZpZt~oSeT)EZ_MRnqO3)yB>s1Z9&+0Mn=4~GVg1P+gP z+c;Oz;3n2tEaJxVVhy`NBZomR`I#_tqS+C7#QZxWhjfF=FLs&)`rOsX3E)Z|g|&qG zq&+C^>K!j~EFW2$PQp0p1*aBkWcZ?`U4v||WT`hXJ{}Unxoj zVanLR>mGN4YOSBa4?HVGb!Zup!0eDd*6L&6YI~6e4gk}1Ly+K23y0DCJbp^ejG?Nj zKOK|M@wMNU0~bu*Hrl7Q3>q}M*LUUJvC&;QW;>o&z#?`VGY>RX@>rQPXsmfbvZ(1+ zsAn}KD!F{8YhGExh2m_xtUtz;xa5Szirv0x2FDx*acrp+${6a>7Ncfx0~9oZXIb-| zHX8?wRwnTJO7lw50ocll58PqN@CG_|L*cwcAF(g^PuDTq!hP;Ya!%1zjqZ?ECVJ^9 zSC@AEXlgMqW=!d+H_1uHueAmsvJvKTe8g+8^?L{{Jc_mqJD|vOei1MmQ)2h3*FSVF zZ?v}$@oM{Q#_D?vyL;c%{t0PZS%DKYuN4(f)L~Z^!iV9oY0zG4m>ASCIY9}?P-KGZ7WNXE7aH3L ztPM8{Y*J62zMw97tkZaLuYvEysML>FXA+1t>XvcA?jZ@+2nc#5k+=8Wh|)c?O!p_d ztKjSlEHqNOL0qqG!fym$Q8Bg?!$zeS9(Ner)17J6?Dvs;_v2#JGEB>)o-|A{zEPLe zA6Z!;ej_7Udxnp@F|u|-U{M9<$$s1#R)x!YC5o=aKPn3tuATQ!FvanowHvDaMXR6V zlJ?D^lY`bxV|%;cQ>@i-SDy^)5?XoT-SfTIx}X~Z!CXQMpL2IeIo`i=VIXIoLXe_} zN%2n&?-&&fq(@q=;#r2CyI5ZurtUsn`P_OrQThf}(oI#t*J^BI;VJeuFS*rz`UE@Y zjC0(YD1uN zTx_$Nn-oDPeys4FqUDfxG9%oFLt{NDbPm#>t`(d%{Azph72`9m_2xAQBpg9E&7hP4RSViuQBi7T3pyi#r{pQfdMQgIPb%}yWT`_S zfbNHmp-lIrV4@2nVY%wI7(Xl1B@15V(W`-X$tTh4A)ozggXv1X+g{~^$#ZZw18Fk+ z9cB7*>t~El6p5?scN8Uy}X9e8N zH;{^CdG|w8lrth^DJP8_41fN#RFh5I0Jjb>oJ8&w96`rdn?SyI11hl)4pj1Un#Rvu zO*$@CnOYV&j>)Vgv@$uo{q`FCUA-e3dKtdfjw-85S?Xfv|J*O(Cj_3>Oqx7*53ov? z1w&DvSnvF6Jp_7c5HcK9!gXkY!smFuHvd{P6)6)ub6r?h?Tpn_U0?{4&wpmS}^A#bcx3>nrr%bPil`>CrZEm-tMgDaM?ug!`wB& z!qgzlyr_?c$#Ohv+ob?V^0v59!{;`T(S@||_&Mkc>d@q$gov;2NtHsN!a2>PQo_lO zM%gER9*$M=;qUmzteJ!&z6-D<=XHOB!kci)l4sT2!(lw7(Ic5{!d7o$m#T=L51bsDhBj)jiLc`{1x z5Cd)JJ>m{vXv#kKByxXGc>m>*fq%@OB%pS_ZR^!L?HyRUQ7xJ9IK^5QWMaAapkyrV z%XHMIR^w(pC(Rr`4+z9iZFaAXGXz4h%Tf=>^N)$>QMe5GGEKfaw&V;7;<4haS||Ij zl<7s9ZfvG&f46)3q<@koBKtc?Ftp} zDFhcShrxBv?Rn5Z)hex{2IQS{UPdVcs_pVY!8a|saUV$S`}WGl_&u$(NG)FXOg~3o zjN>op+4irx;xD)S8S zwsOzvlyD1GSb+xy0x9+9Rp*rjE7v2GTUwYL2Afy^HeCqzy`LhSkbX4QojRnET2V2? z;YF@gUk#d$v*Oi%r~zmAx^ekKj^&qOw17MkLWr+qFXEb|j-XrVQ|3hO*k;4HPAInGdd@nboGSS zF7`pG`bD0C=Y)DHF!O4_0?%L->COlHKh#(hICeZ~qPl<{jSGNCRIo9&vEd1n<5v>+ z!I>+VNgBMBGOH+_`5{_~05iw#^J{Em#eQabw%SXlrd19nD)B(lN zZr!`54Zpm3=r1+|=4m+D5t&d3&-RS+OItM2H=n;jTX%^Z`LcU-N4(v&d-9@Zkou;U zGxK-euhb@UNHj6`=Tumxe{*My49ofj?d~V|U1D#^=wWEcLb;;f6 z22m-_(TiDU;d4}c?0g5s%a<>iOwJcN4_BC+`a#UyyJqZVJ~OWt`9-;Dy)qV9t7I?W zLaxNjVf@|&t2mZ=R|>VYj+UPJ9ZT?(F;^)eu3SdGeu)llWo~pr8C61U`0WMa)VEg$ z$0j|nUBE08!ZbnV#R7jgfu8vUOKq_x_; zvgl(n_JA7a@Ge@mS&=3?KuF&UyZ_Dr{+~bo|DW;Kny$fMw8?0zI2au9OWWgh+M%A9 zQWrb;fzHLI{2imoM|V`>*mDuFa}3iA-Uivg|BdD5B@YbljcwLm_cm56<54xZ`%7TB zd4X5`c~EOlmL=E;9&e#4*qVy=!juwRH78??0`jbUTR{m8?*0S49BUDK>=@0b?aJvavJfte0%4rtxbcy$RjGHiyqWV>p;pxnbcQ=OteznV1&! z<=&IA8JqnK&6N8DZ4&OBFo+`~fOECGD*Co3Lm-pP*)QLW($SR&`g*vRt~^unV%7^c z1ihZ@p+iIbkmVY`2pFnIC}=?06&1;9?J&vinko%(HP4bFtp!e0z_oR*eunSX^(Us5 zKwQ0U^&_=-H+z`FqkMYm!6LL(RD9szj^A3JMDKvtZ47odiYm#iwodW2L9Jiyfn6ov z`?%`16%~Pb$DVC1EoS?DyVRo1&Z7MNAT(fSz9I9?JK9L z!KVd<@f%A>LJ!*SV22Qwh2h1S6GtfIeX9;}uj>&hdLQwjbuZAbBV{(H&+$q(8w|hH zW1Yx?ge?^1^Yim!{O*zZ0fvKCQ+U3ergcqdngPym{8)aD3ly#S%XDE*$V?VWNbFkf_c@OPYjZGT~FjyRo*S(Pg<-nSM-XcfNJFSwTL`l zoWCss3?!>Q3Jhlx{8F0&EIG%7(BB~fq1`{Ru&nxc|2b}7(jp$ivYW72`(~5A~ouu*pvC` z$~$7LW&kNulU^O47%`9K>jD_1>EUO0>3*p4$gywX1zX-l4%W9663fBxOIxKbPaHC+ z=2vsW#N^D^N^NbN@3M1ZVrL{lg5o66S&O2+`5cYZjLs78Cz}iARe%*5(?3I*DELkp44W37w{FDPs?(l{W~z~8;4A-60bS?8(84SN09)hwqJQCHG&+Y>iRH+qu) z;okPrZ70UF#OO7sCLnL@?fTpH`RXY(s$v9+PwMR!@b(?E9cZ%sq+l4MH}>q;@zyNv z`Vgd^7AmcOA290={j94(e+EdF55Bh+{v@f-iHA~ZL?!r0Js1@=Xz0jLqegQkn>AAX zk-s|%@y0VRfqp^5jvJChu{vR9`0xr7L^7dk$EJ!}7EH!9SvLw1wPaw=p|p}Y?}5Y<$YFm;IYYXkI5SgK8% zj7mdjmuF`3z2}gKf07D9a+>6(cKfPVs9;-V8-nNB-tOYB(deR8?M}5;OU*Ooi z{_~vYqY}+az4_ z`ouHekbCFxhe(ctz6j95p%G%$U*PVdTM5|KP&e!86kwknXHV6{;@V?vB#gG=Wzg|C zd``}m0dBsa3~C;TovMy|ewKFcXzZZvN0bJujDP-=1Erly2aTR-K3;w92BDw^OnLiM zBid9Y2H*IgVsPeje!?sXa95VYfO#A*q51$3EpWkJTsIO&3CWd8H`r`UEnawdfmKCO zs(+&cSAaovq*9?%BD72T}lFDD)L1H#M)joVBqL_k3Haw5}7jYJg(e$xiNN6x`8fH6$#wPpZ7bvdwT9`q)wfM zcwi`g#mIf}*F!_Z*Wy~|gc2&h1d_dYIKh|jIov*}J9`ojs`XQ#m$KC7qfd-Y_zfQh z$_CSFZP&v7R-Nh^uwloKh*L$E?KFKaW~rC-^$8#B3X%YqUQy|!`BR1NuhOTgLHz4~ z58VHk-eS>BGl#X_lrIEo5J2pX+AjUVDSO0({#~tye>uAU+WvrJ{>e}h(F`UF0>k*h zXuxuAg|fljg$+$C&F+wGUp`=DshY_{BC$H%E}DL61|49g)o9UTb{jAs0e)F)R7amv zJ;h>b_l5E(3-_l0O4`KGDy;$M?*|$m#B3V$yz_FKY7#SW{gBVEDnR=M*H?3 z9%Y0G>*i~bDHI=|*0@$u#ujcfgl>aX+;Krb^>ESpMOkHRw$V7iQa`MzrpQ3qWdQ(x zx84Z~dcE)n)j(gb3(V`tyg6=~G2sp;)912X09|WkW@bbV53jzx*+t`Q(V(ZGEp8!e zuK2lm!ui%Hk-M|_Y>W?+C&8jY} zsAzxtV4^WVi7CNNm)7PG%zzKMttXp+wA_Oh9*y)2xe#Suz>ofFuLe+b!8XUBaDisf zm%uOit2NtE>VX)3CFX#xaWxg^s?8K(vSvv*x7wn!Y9|Mv?3B7e$MV5I!V>K?1ZA+O zv`sQ1zxtcpUY!#{QEpp;nZyf&%Q(q+>vsy5Wo#f2AMYdGC%kKDqTe_?97+M*VqL@J zoTpDnY#^`UhtzFrz}$@ktJUpRd2BIP$YdmIPprG$t8MOks;F;_Pd4bt340uGo3+M} zwF$=J#rb!D@|(T^&AH+g@&IQ7rPWf5&FtYb2BiLi-Td;XBi6nTa-^;`*={MEi1`*>x4(w z`S&R2QtQ$bXH)QxJI9`>FB$KVM`wsod(JG(DVEXCN>Umc`J%&b^ty|Er6K$&Lyd0Ds zhFx1Z)~Ys2Z>G<+PY)v-cFHYSbc#EH-wPv=nPpRA{C7CO>W4;-#s&b}^7AS~D+gvk}?{=~!(9 z-7%ZTUq{ol_@clZm4`SW5SE5auwaFD?LkV>4U?jy32=S7h9|DR=7}#;-(Pe85O2_4d5% z!k%qGbm6@MwOxMC_7PgU@sGc+3GK9}ss`MIYl1%p{!CGhXky_F!K=(hE-JPsoH{+(H~0!Khtd!9Kg zS#U_YwpnKAR~soLTsQaXHb}4K-D?2YOKz#G&0j!|?Rye};a%Js83|>N1iuT8!}1p{ z8g}rTr(*LDjX#e8dPb9jMg^Bg=765I**!Gy`k9jkyi$sf8IjT;bP=f>%q!Cn-}>Mb*wUbQSgN8tKuHa?Q*Pw?dRvG$ zJ0(^QDPz|9c(VPqJPJY2DAdxGOkoB@#_+U=l~YaP_GT~p#TkhY+uA+BYVMsA&YA#7 zJO1Iy_GF^hmvBgr1E(5>1?_4r^CEg=!@+_O8|P*5CWBj?rUbX%NZFQ|Gg4aLH$4W8 zEQ|X3q^f4{DYSa5_DnvO6R7BKu9aVktkFvVeJg%2rbo z(AyiH2FD>=yT&cSZgUIa*7K-bK#aNEw`6A9d|FJ@rJ2S-;~$Y1y~Rh4V zHxZK=pR~nLv~3o6#VIX7LKL&npi+<&;+;M6YO>`I@)FO{SCWViz>Dw>^w!)8d;HY5 zp+8SvlkbkuGkrPoX~{NeviL7Ita8e#($s`zT)%hA55Gr6krLj^g125{PZ109YESfH z$@g}2#}iWuN*-Kp*AbqDxinK9@+n(|KMo8ne>)XFgx~cGwarU3;wjMw`r0Me$ji+U=;B!5Jv9*p| z`shupceRq7Wgm2AWa9R%#m9&)2XsfUMb8^EZ~RPGqbnD7k4>5{aLe#4Ob9|aS-vFU zoXQ^?OuY)7L!RGeV?eT)&z~qK!;<>-22e9q+7_h4=r!lQpdBOArAaHd0N?<&_w5P8 z&*5k+nni83L5IV`J>KXjnv=PPd{qfHKKUu_9-fHlj$FBu@KwZu-kvlmB1Pezg$vrk znN2Ogb0)fdp;*A}lqfsmF(`aySx0XkM@z+~pP$bdiMllJf5!JBCnJnk%Z__x6Eu8E zHPd?Lj&y4{Zjm}Pb{wVi0S%m%VR(#@5?YKzM#ZesxD6Nkn0V#do7i&JZ^tXhtJI!6 zHI3#g2q*KGPi>9jcN-pOFlfFpuYr#4^26^jx5q3}Yeut3@S~;(jQzIksQ0q>{j3jn{Ppvc|2b=w$jcd?#lggc^5tjSqg`et zb;gb?3j_!(nJ;g7X450L#Qvg5z5~Xu&ue4C4SKQYN)12bP7Rf0Oc^}iA6{^3L{yax zrL6=KLR$5Jtld0hs5)xG5;LSVGM^1ECzhst)VX-|^xNaHAJqQ3Fn9$XzukwZ#<6R_ zwcv>|QSf!3tkKvb5(M+pC)?nTFzP&D?D+}Rlv4|tXmWNYJi7WezL+y4P#kHQ-O literal 10650 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 diff --git a/tests/speculos/u2f/test_u2f_screens.py b/tests/speculos/u2f/test_u2f_screens.py index 5f40607e..97b89cdd 100644 --- a/tests/speculos/u2f/test_u2f_screens.py +++ b/tests/speculos/u2f/test_u2f_screens.py @@ -6,7 +6,7 @@ from client import TESTS_SPECULOS_DIR from utils import generate_random_bytes, fido_known_appid -from utils import HAVE_RK_SUPPORT_SETTING +from utils import ENABLE_RK_CONFIG_UI_SETTING def test_u2f_screens_idle(client, test_name, firmware): @@ -23,7 +23,7 @@ def test_u2f_screens_idle(client, test_name, firmware): # Screen 2 -> 3 instructions.append(NavInsID.RIGHT_CLICK) - if HAVE_RK_SUPPORT_SETTING: + if ENABLE_RK_CONFIG_UI_SETTING: # Screen 3 -> 4 instructions.append(NavInsID.RIGHT_CLICK) else: diff --git a/tests/speculos/utils.py b/tests/speculos/utils.py index e119201f..740c398d 100644 --- a/tests/speculos/utils.py +++ b/tests/speculos/utils.py @@ -11,7 +11,8 @@ # Application build configuration HAVE_NO_RESET_GENERATION_INCREMENT = True -HAVE_RK_SUPPORT_SETTING = False +ENABLE_RK_CONFIG = True +ENABLE_RK_CONFIG_UI_SETTING = False FIDO_RP_ID_HASH_1 = bytes.fromhex("000102030405060708090a0b0c0d0e0f"