diff --git a/.github/workflows/build_and_functional_tests.yml b/.github/workflows/build_and_functional_tests.yml index 647f417b..25408fff 100644 --- a/.github/workflows/build_and_functional_tests.yml +++ b/.github/workflows/build_and_functional_tests.yml @@ -22,7 +22,7 @@ jobs: name: Build application using the reusable workflow uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 with: - run_for_devices: '["nanox", "nanosp"]' + run_for_devices: '["nanox", "nanosp", "stax"]' upload_app_binaries_artifact: compiled_app_binaries ragger_tests: @@ -32,6 +32,8 @@ jobs: include: - model: nanox + - model: stax + - model: nanosp args: "--fast" diff --git a/.github/workflows/guidelines_enforcer.yml b/.github/workflows/guidelines_enforcer.yml index fabb7702..748c4806 100644 --- a/.github/workflows/guidelines_enforcer.yml +++ b/.github/workflows/guidelines_enforcer.yml @@ -22,4 +22,4 @@ jobs: name: Call Ledger guidelines_enforcer uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_guidelines_enforcer.yml@v1 with: - run_for_devices: '["nanox", "nanosp"]' + run_for_devices: '["nanox", "nanosp", "stax"]' diff --git a/.github/workflows/misspellings_checks.yml b/.github/workflows/misspellings_checks.yml index 0333481f..60499ab7 100644 --- a/.github/workflows/misspellings_checks.yml +++ b/.github/workflows/misspellings_checks.yml @@ -22,7 +22,8 @@ jobs: uses: actions/checkout@v3 - name: Check misspellings - uses: codespell-project/actions-codespell@v1 + uses: codespell-project/actions-codespell@v2 with: builtin: clear,rare check_filenames: true + ignore_words_list: onTop, dummy diff --git a/Makefile b/Makefile index a523114a..1bef2814 100644 --- a/Makefile +++ b/Makefile @@ -21,30 +21,24 @@ endif include $(BOLOS_SDK)/Makefile.defines $(info TARGET_NAME=$(TARGET_NAME)) -ifneq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_NANOX TARGET_NANOS2)) +ifneq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_NANOX TARGET_NANOS2 TARGET_STAX)) $(error Environment variable TARGET_NAME is not valid or not supported) endif APPNAME = "Security Key" -APP_LOAD_PARAMS = --curve secp256r1 -APP_LOAD_PARAMS += --path "5722689'" # int("WRA".encode("ascii").hex(), 16) -APP_LOAD_PARAMS += --path "5262163'" # int("PKS".encode("ascii").hex(), 16) -APP_LOAD_PARAMS += --appFlags 0x040 -APP_LOAD_PARAMS += $(COMMON_LOAD_PARAMS) +CURVE_APP_LOAD_PARAMS = secp256r1 +PATH_APP_LOAD_PARAMS = "5722689'" # int("WRA".encode("ascii").hex(), 16) +PATH_APP_LOAD_PARAMS += "5262163'" # int("PKS".encode("ascii").hex(), 16) APPVERSION_M=1 -APPVERSION_N=1 -APPVERSION_P=1 +APPVERSION_N=4 +APPVERSION_P=0 APPVERSION=$(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) -ICONNAME=icons/icon_security_key.gif - -################ -# Default rule # -################ - -all: default +ICON_NANOX=icons/icon_security_key.gif +ICON_NANOSP=icons/icon_security_key.gif +ICON_STAX=icons/icon_security_key_stax.gif ################ # Attestations # @@ -93,42 +87,9 @@ endif # Platform # ############ -DEFINES += OS_IO_SEPROXYHAL IO_SEPROXYHAL_BUFFER_SIZE_B=128 -DEFINES += HAVE_SPRINTF -DEFINES += HAVE_IO_USB HAVE_L4_USBLIB IO_USB_MAX_ENDPOINTS=6 IO_HID_EP_LENGTH=64 HAVE_USB_APDU -DEFINES += HAVE_WEBUSB WEBUSB_URL_SIZE_B=0 WEBUSB_URL="" - DEFINES += HAVE_U2F HAVE_IO_U2F DEFINES += HAVE_FIDO2 -DEFINES += USB_SEGMENT_SIZE=64 DEFINES += CUSTOM_IO_APDU_BUFFER_SIZE=1031 # 1024 + 7 -DEFINES += UNUSED\(x\)=\(void\)x -DEFINES += APPVERSION=\"$(APPVERSION)\" - -# Enforce SDK that supports UX Flow for Nano all targets, Nano S included -DEFINES += HAVE_UX_FLOW -DEFINES += HAVE_BAGL - -ifeq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_NANOX TARGET_NANOS2)) -DEFINES += HAVE_GLO096 -DEFINES += BAGL_WIDTH=128 BAGL_HEIGHT=64 -DEFINES += HAVE_BAGL_ELLIPSIS # long label truncation feature -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_REGULAR_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_EXTRABOLD_11PX -DEFINES += HAVE_BAGL_FONT_OPEN_SANS_LIGHT_16PX -endif - -# Enabling debug PRINTF -DEBUG=0 -ifneq ($(DEBUG),0) - ifeq ($(TARGET_NAME),TARGET_NANOX) - DEFINES += HAVE_PRINTF PRINTF=mcu_usb_printf - else - DEFINES += HAVE_PRINTF PRINTF=screen_printf - endif -else - DEFINES += PRINTF\(...\)= -endif DEFINES += HAVE_UX_STACK_INIT_KEEP_TICKER @@ -165,45 +126,19 @@ DEFINES += HAVE_FIDO2_RPID_FILTER DEFINES += RK_SIZE=6144 +DEFINES += HAVE_DEBUG_THROWS + #DEFINES += HAVE_CBOR_DEBUG ############## # Compiler # ############## -WERROR=0 -ifneq ($(WERROR),0) - CFLAGS += -Werror -endif - -CC := $(CLANGPATH)clang -CFLAGS += -O3 -Os -AS := $(GCCPATH)arm-none-eabi-gcc -LD := $(GCCPATH)arm-none-eabi-gcc -LDFLAGS += -O3 -Os -LDLIBS += -lm -lgcc -lc - -# Remove warning on custom snprintf implementation usage -CFLAGS += -Wno-format-invalid-specifier -Wno-format-extra-args - -# Import rules to compile glyphs(/pone) -include $(BOLOS_SDK)/Makefile.glyphs - -# Define directory to build +# Application source files APP_SOURCE_PATH += src src-cbor -SDK_SOURCE_PATH += lib_stusb lib_ux lib_u2f lib_stusb_impl - -load: all - python3 -m ledgerblue.loadApp $(APP_LOAD_PARAMS) - -delete: - python3 -m ledgerblue.deleteApp $(COMMON_DELETE_PARAMS) - -# Import generic rules from the sdk -include $(BOLOS_SDK)/Makefile.rules +SDK_SOURCE_PATH += lib_u2f -# Add dependency on custom makefile filename -dep/%.d: %.c Makefile +VARIANT_PARAM = APP +VARIANT_VALUES = SecurityKey -listvariants: - @echo VARIANTS NONE SecurityKey +include $(BOLOS_SDK)/Makefile.standard_app diff --git a/README.md b/README.md index 1e3f0ff3..fc2f96c4 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,9 @@ See dedicated `README.md` in tests `directory`. ## Known limitations -On Linux and Mac, Firefox support only U2F but not CTAP2, see [corresponding tracker](https://bugzilla.mozilla.org/show_bug.cgi?id=1530370). +- On Firefox on Linux, Nano S Plus is missing in snap udev rules. +- There are some instabilities on Safari on MacOS, it's recommended to use another browser. +- Android support on FIDO2 for external security key is not available yet. It should be starting with Google Play services v23.35 Due to OS constraints, this Security Key App as some limitations: @@ -62,4 +64,4 @@ Due to OS constraints, this Security Key App as some limitations: That is why they are not enabled by default, and should be manually enabled in the settings. See HAVE_RK_SUPPORT_SETTING section on the Makefile for more explanations. * Following FIDO2 spec, there should be a way to revoked credentials. A revocation mechanism has been implemented based on a counter that - as discoverable credentials - will be wiped upon app deletion. therefore, in order to avoid weird issue on user side, this counter as been disabled. See HAVE_NO_RESET_GENERATION_INCREMENT section on the Makefile for more explanations. -Please look at the dedicated section at the end of [this blog post](https://blog.ledger.com/security-key/) for more detailed explanations. +Please look at the dedicated section at the end of [this blog post](https://www.ledger.com/blog/strengthen-the-security-of-your-accounts-with-webauthn) for more detailed explanations. diff --git a/conformance/ledger_logo.png b/conformance/ledger_logo.png index d2271d82..c424a76e 100644 Binary files a/conformance/ledger_logo.png and b/conformance/ledger_logo.png differ diff --git a/conformance/prod-nanos.json b/conformance/prod-nanos.json index 2a1986aa..c92fa2a4 100644 --- a/conformance/prod-nanos.json +++ b/conformance/prod-nanos.json @@ -1,5 +1,5 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", "description": "Ledger Nano S FIDO2 Authenticator", "aaguid": "341e4da9-3c2e-8103-5a9f-aad887135200", "alternativeDescriptions": {}, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFBlo0s5QYFdXbfusRdQeoLX6QenlMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIzMDIyMzEwMzMwOFoXDTMzMDIyMDEwMzMwOFowQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATK7nXyH4pgN3TMwCWSoMDRe4EV8Jl3XzuhicZ/2gvh+zz3WmW0OZ/EcRYEA8F26ceeuMcd21WQRRKWpjWD+JWiMAoGCCqGSM49BAMCA0gAMEUCIQCwcsHuL8ZFL3FNyU/DOQn3bmx08lnn0O5RktLbOnoPHQIgOEi6ImAZ181q8RJiL0hbw7ZquuniRq6fjWjGoBu1Moo=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "341e4da93c2e81035a9faad887135200", "options": { "rk": true, diff --git a/conformance/prod-nanosp.json b/conformance/prod-nanosp.json index 773f8e38..beb38535 100644 --- a/conformance/prod-nanosp.json +++ b/conformance/prod-nanosp.json @@ -1,6 +1,6 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", - "description": "Ledger Nano S+ FIDO2 Authenticator", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", + "description": "Ledger Nano S Plus FIDO2 Authenticator", "aaguid": "58b44d0b-0a7c-f33a-fd48-f7153c871352", "alternativeDescriptions": {}, "authenticatorVersion": 1, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFBlo0s5QYFdXbfusRdQeoLX6QenlMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIzMDIyMzEwMzMwOFoXDTMzMDIyMDEwMzMwOFowQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATK7nXyH4pgN3TMwCWSoMDRe4EV8Jl3XzuhicZ/2gvh+zz3WmW0OZ/EcRYEA8F26ceeuMcd21WQRRKWpjWD+JWiMAoGCCqGSM49BAMCA0gAMEUCIQCwcsHuL8ZFL3FNyU/DOQn3bmx08lnn0O5RktLbOnoPHQIgOEi6ImAZ181q8RJiL0hbw7ZquuniRq6fjWjGoBu1Moo=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "58b44d0b0a7cf33afd48f7153c871352", "options": { "rk": true, diff --git a/conformance/prod-nanox.json b/conformance/prod-nanox.json index b0ecdc5e..7fd6d0ea 100644 --- a/conformance/prod-nanox.json +++ b/conformance/prod-nanox.json @@ -1,5 +1,5 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", "aaguid": "fcb1bcb4-f370-078c-6993-bc24d0ae3fbe", "description": "Ledger Nano X FIDO2 Authenticator", "alternativeDescriptions": {}, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFBlo0s5QYFdXbfusRdQeoLX6QenlMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIzMDIyMzEwMzMwOFoXDTMzMDIyMDEwMzMwOFowQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATK7nXyH4pgN3TMwCWSoMDRe4EV8Jl3XzuhicZ/2gvh+zz3WmW0OZ/EcRYEA8F26ceeuMcd21WQRRKWpjWD+JWiMAoGCCqGSM49BAMCA0gAMEUCIQCwcsHuL8ZFL3FNyU/DOQn3bmx08lnn0O5RktLbOnoPHQIgOEi6ImAZ181q8RJiL0hbw7ZquuniRq6fjWjGoBu1Moo=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "fcb1bcb4f370078c6993bc24d0ae3fbe", "options": { "rk": true, diff --git a/conformance/prod-stax.json b/conformance/prod-stax.json new file mode 100644 index 00000000..da7afffa --- /dev/null +++ b/conformance/prod-stax.json @@ -0,0 +1,87 @@ +{ + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", + "aaguid": "6e24d385-004a-16a0-7bfe-efd963845b34", + "description": "Ledger Stax FIDO2 Authenticator", + "alternativeDescriptions": {}, + "authenticatorVersion": 1, + "protocolFamily": "fido2", + "schema": 3, + "upv": [{ + "major": 1, + "minor": 0 + }], + "authenticationAlgorithms": [ + "secp256r1_ecdsa_sha256_raw", + "secp256k1_ecdsa_sha256_raw", + "ed25519_eddsa_sha512_raw" + ], + "publicKeyAlgAndEncodings": ["cose"], + "attestationTypes": [ + "basic_full" + ], + "userVerificationDetails": [ + [{ + "userVerificationMethod": "none" + } + ], + [{ + "userVerificationMethod": "presence_internal" + } + ], + [{ + "userVerificationMethod": "passcode_external" + } + ], + [{ + "userVerificationMethod": "presence_internal" + }, + { + "userVerificationMethod": "passcode_external" + } + ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], + [{ + "userVerificationMethod": "presence_internal" + }, + { + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ] + ], + "keyProtection": ["hardware", "secure_element"], + "matcherProtection": ["on_chip"], + "cryptoStrength": 128, + "attachmentHint": ["external", "wired"], + "tcDisplay": ["any", "hardware"], + "tcDisplayContentType": "text/plain", + "attestationRootCertificates": [ + "MIIBgTCCAScCFBlo0s5QYFdXbfusRdQeoLX6QenlMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIzMDIyMzEwMzMwOFoXDTMzMDIyMDEwMzMwOFowQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATK7nXyH4pgN3TMwCWSoMDRe4EV8Jl3XzuhicZ/2gvh+zz3WmW0OZ/EcRYEA8F26ceeuMcd21WQRRKWpjWD+JWiMAoGCCqGSM49BAMCA0gAMEUCIQCwcsHuL8ZFL3FNyU/DOQn3bmx08lnn0O5RktLbOnoPHQIgOEi6ImAZ181q8RJiL0hbw7ZquuniRq6fjWjGoBu1Moo=" + ], + "icon": "data:image/png;base64,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", + "authenticatorGetInfo": { + "versions": ["U2F_V2", "FIDO_2_0"], + "extensions": ["hmac-secret", "txAuthSimple"], + "aaguid": "6e24d385004a16a07bfeefd963845b34", + "options": { + "rk": true, + "up": true, + "uv": true, + "clientPin": true + }, + "maxMsgSize": 1024, + "pinUvAuthProtocols": [1] + } +} \ No newline at end of file diff --git a/conformance/test-nanos.json b/conformance/test-nanos.json index 824df74a..007c9b93 100644 --- a/conformance/test-nanos.json +++ b/conformance/test-nanos.json @@ -1,5 +1,5 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", "description": "Ledger Nano S FIDO2 Authenticator", "aaguid": "341e4da9-3c2e-8103-5a9f-aad887135200", "alternativeDescriptions": {}, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFCCm+doNCJYpK4mBmyd2xdAMieATMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIyMDkyNjA4MDUzN1oXDTMyMDkyMzA4MDUzN1owQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQBNQxWyIb4hypWXXlxpGG0VMc5xyFsg/A5wq8q7NoNcHmNAkBtn7EOB21c107fcO1DC3OjNxqo6keVIGOj09hJMAoGCCqGSM49BAMCA0gAMEUCIQDirkVesYHsQU+cZiZA3K14MgBl0naL4BfAXdsAYgSBkgIgI9YDiMQGWt9eQPkBAyGv0A2Xx/+jRbkU9c0umz1cSXs=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "341e4da93c2e81035a9faad887135200", "options": { "rk": true, diff --git a/conformance/test-nanosp.json b/conformance/test-nanosp.json index e264efae..ed0fb442 100644 --- a/conformance/test-nanosp.json +++ b/conformance/test-nanosp.json @@ -1,6 +1,6 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", - "description": "Ledger Nano S+ FIDO2 Authenticator", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", + "description": "Ledger Nano S Plus FIDO2 Authenticator", "aaguid": "58b44d0b-0a7c-f33a-fd48-f7153c871352", "alternativeDescriptions": {}, "authenticatorVersion": 1, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFCCm+doNCJYpK4mBmyd2xdAMieATMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIyMDkyNjA4MDUzN1oXDTMyMDkyMzA4MDUzN1owQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQBNQxWyIb4hypWXXlxpGG0VMc5xyFsg/A5wq8q7NoNcHmNAkBtn7EOB21c107fcO1DC3OjNxqo6keVIGOj09hJMAoGCCqGSM49BAMCA0gAMEUCIQDirkVesYHsQU+cZiZA3K14MgBl0naL4BfAXdsAYgSBkgIgI9YDiMQGWt9eQPkBAyGv0A2Xx/+jRbkU9c0umz1cSXs=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "58b44d0b0a7cf33afd48f7153c871352", "options": { "rk": true, diff --git a/conformance/test-nanox.json b/conformance/test-nanox.json index 3953458e..ad35dec6 100644 --- a/conformance/test-nanox.json +++ b/conformance/test-nanox.json @@ -1,5 +1,5 @@ { - "legalHeader": "https://fidoalliance.org/metadata/metadata-statement-legal-header/", + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", "aaguid": "fcb1bcb4-f370-078c-6993-bc24d0ae3fbe", "description": "Ledger Nano X FIDO2 Authenticator", "alternativeDescriptions": {}, @@ -17,8 +17,7 @@ ], "publicKeyAlgAndEncodings": ["cose"], "attestationTypes": [ - "basic_full", - "basic_surrogate" + "basic_full" ], "userVerificationDetails": [ [{ @@ -40,6 +39,15 @@ "userVerificationMethod": "passcode_external" } ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], [{ "userVerificationMethod": "presence_internal" }, @@ -62,10 +70,10 @@ "attestationRootCertificates": [ "MIIBgTCCAScCFCCm+doNCJYpK4mBmyd2xdAMieATMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIyMDkyNjA4MDUzN1oXDTMyMDkyMzA4MDUzN1owQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQBNQxWyIb4hypWXXlxpGG0VMc5xyFsg/A5wq8q7NoNcHmNAkBtn7EOB21c107fcO1DC3OjNxqo6keVIGOj09hJMAoGCCqGSM49BAMCA0gAMEUCIQDirkVesYHsQU+cZiZA3K14MgBl0naL4BfAXdsAYgSBkgIgI9YDiMQGWt9eQPkBAyGv0A2Xx/+jRbkU9c0umz1cSXs=" ], - "icon": "data:image/png;base64,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", + "icon": "data:image/png;base64,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", "authenticatorGetInfo": { "versions": ["U2F_V2", "FIDO_2_0"], - "extensions": ["hmac-secret", "txAuthSimple"], + "extensions": ["hmac-secret"], "aaguid": "fcb1bcb4f370078c6993bc24d0ae3fbe", "options": { "rk": true, diff --git a/conformance/test-stax.json b/conformance/test-stax.json new file mode 100644 index 00000000..9dc9efd9 --- /dev/null +++ b/conformance/test-stax.json @@ -0,0 +1,87 @@ +{ + "legalHeader": "Submission of this statement and retrieval and use of this statement indicates acceptance of the appropriate agreement located at https://fidoalliance.org/metadata/metadata-legal-terms/.", + "aaguid": "6e24d385-004a-16a0-7bfe-efd963845b34", + "description": "Ledger Stax FIDO2 Authenticator", + "alternativeDescriptions": {}, + "authenticatorVersion": 1, + "protocolFamily": "fido2", + "schema": 3, + "upv": [{ + "major": 1, + "minor": 0 + }], + "authenticationAlgorithms": [ + "secp256r1_ecdsa_sha256_raw", + "secp256k1_ecdsa_sha256_raw", + "ed25519_eddsa_sha512_raw" + ], + "publicKeyAlgAndEncodings": ["cose"], + "attestationTypes": [ + "basic_full" + ], + "userVerificationDetails": [ + [{ + "userVerificationMethod": "none" + } + ], + [{ + "userVerificationMethod": "presence_internal" + } + ], + [{ + "userVerificationMethod": "passcode_external" + } + ], + [{ + "userVerificationMethod": "presence_internal" + }, + { + "userVerificationMethod": "passcode_external" + } + ], + [{ + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ], + [{ + "userVerificationMethod": "presence_internal" + }, + { + "userVerificationMethod": "passcode_internal", + "caDesc": { + "base": 10, + "minLength": 4, + "maxRetries": 3 + } + } + ] + ], + "keyProtection": ["hardware", "secure_element"], + "matcherProtection": ["on_chip"], + "cryptoStrength": 128, + "attachmentHint": ["external", "wired"], + "tcDisplay": ["any", "hardware"], + "tcDisplayContentType": "text/plain", + "attestationRootCertificates": [ + "MIIBgTCCAScCFCCm+doNCJYpK4mBmyd2xdAMieATMAoGCCqGSM49BAMCMEMxCzAJBgNVBAYTAkZSMQ8wDQYDVQQKDAZMZWRnZXIxIzAhBgNVBAMMGkxlZGdlciBGSURPIEF0dGVzdGF0aW9uIENBMB4XDTIyMDkyNjA4MDUzN1oXDTMyMDkyMzA4MDUzN1owQzELMAkGA1UEBhMCRlIxDzANBgNVBAoMBkxlZGdlcjEjMCEGA1UEAwwaTGVkZ2VyIEZJRE8gQXR0ZXN0YXRpb24gQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQBNQxWyIb4hypWXXlxpGG0VMc5xyFsg/A5wq8q7NoNcHmNAkBtn7EOB21c107fcO1DC3OjNxqo6keVIGOj09hJMAoGCCqGSM49BAMCA0gAMEUCIQDirkVesYHsQU+cZiZA3K14MgBl0naL4BfAXdsAYgSBkgIgI9YDiMQGWt9eQPkBAyGv0A2Xx/+jRbkU9c0umz1cSXs=" + ], + "icon": "data:image/png;base64,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", + "authenticatorGetInfo": { + "versions": ["U2F_V2", "FIDO_2_0"], + "extensions": ["hmac-secret", "txAuthSimple"], + "aaguid": "6e24d385004a16a07bfeefd963845b34", + "options": { + "rk": true, + "up": true, + "uv": true, + "clientPin": true + }, + "maxMsgSize": 1024, + "pinUvAuthProtocols": [1] + } +} \ No newline at end of file diff --git a/glyphs/icon_security_key_64px.gif b/glyphs/icon_security_key_64px.gif new file mode 100644 index 00000000..5c048cf6 Binary files /dev/null and b/glyphs/icon_security_key_64px.gif differ diff --git a/icons/icon_security_key_stax.gif b/icons/icon_security_key_stax.gif new file mode 100644 index 00000000..7065a24f Binary files /dev/null and b/icons/icon_security_key_stax.gif differ diff --git a/include/config.h b/include/config.h index 52fff8e1..c10e4a3e 100644 --- a/include/config.h +++ b/include/config.h @@ -43,7 +43,7 @@ extern config_t const N_u2f_real; #define N_u2f (*(volatile config_t *) PIC(&N_u2f_real)) -void config_init(void); +int config_init(void); uint8_t config_increase_and_get_authentification_counter(uint8_t *buffer); diff --git a/include/crypto.h b/include/crypto.h index 1383bcad..323c42d8 100644 --- a/include/crypto.h +++ b/include/crypto.h @@ -51,7 +51,7 @@ int crypto_generate_public_key(cx_ecfp_private_key_t *private_key, /** * Generate credRandom key from nonce. */ -void crypto_generate_credRandom_key(const uint8_t *nonce, uint8_t *credRandom); +void crypto_generate_credRandom_key(const uint8_t *nonce, uint8_t *credRandom, bool with_uv); /** * Sign data_hash with private_key and store it in signature. diff --git a/include/ctap2.h b/include/ctap2.h index e4cc7515..b79db1f8 100644 --- a/include/ctap2.h +++ b/include/ctap2.h @@ -30,7 +30,6 @@ #include "cbip_decode.h" #include "extension_hmac_secret.h" -#include "extension_txAuthSimple.h" #define RP_ID_HASH_SIZE CX_SHA256_SIZE #define CRED_RANDOM_SIZE 32 @@ -86,8 +85,7 @@ #define PIN_PROTOCOL_VERSION_V1 1 -#define FLAG_EXTENSION_HMAC_SECRET 0x01 -#define FLAG_EXTENSION_TX_AUTH_SIMPLE 0x02 +#define FLAG_EXTENSION_HMAC_SECRET 0x01 // Helper to detect if CTAP2_CBOR_CMD command is proxyied over U2F_CMD // - CTAP2 calls that are CTAP2_CMD_CBOR commands: @@ -129,7 +127,6 @@ typedef struct ctap2_register_data_s { typedef union ctap2_assert_multiple_flow_data_s { struct { cbipItem_t credentialItem; - uint32_t credentialsNumber; uint32_t currentCredential; } allowList; struct { @@ -153,7 +150,6 @@ typedef struct ctap2_assert_data_s { uint8_t clientPinAuthenticated; // set if a standard FIDO client PIN authentication was performed uint8_t userPresenceRequired; // set if up is set - uint8_t singleCredential; // set if a single credential was provided in the allow list uint8_t extensions; // extensions flags as a bitmask uint8_t allowListPresent; @@ -162,11 +158,6 @@ typedef struct ctap2_assert_data_s { // Multiple flow data uint16_t currentCredentialIndex; ctap2_assert_multiple_flow_data_t multipleFlowData; - - char *txAuthMessage; // pointer to the TX Auth message or NULL - uint32_t txAuthLength; // length of the TX Auth message - char - txAuthLast; // last character of the txAuth CBOR field overwritten by a '\0' when displayed } ctap2_assert_data_t; typedef enum ctap2_ux_state_e { @@ -176,16 +167,9 @@ typedef enum ctap2_ux_state_e { CTAP2_UX_STATE_MULTIPLE_ASSERTION, CTAP2_UX_STATE_NO_ASSERTION, CTAP2_UX_STATE_RESET, - CTAP2_UX_STATE_CANCELLED = 0xff } ctap2_ux_state_t; -typedef struct ctap2_proxy_s { - bool uiStarted; - uint32_t length; -} ctap2_proxy_t; - bool ctap2_check_rpid_filter(const char *rpId, uint32_t rpIdLen); -void ctap2_ux_get_rpid(const char *rpId, uint32_t rpIdLen, uint8_t *rpIdHash); void send_cbor_error(u2f_service_t *service, uint8_t error); void send_cbor_response(u2f_service_t *service, uint32_t length); void ctap2_send_keepalive_processing(void); @@ -208,10 +192,9 @@ void ctap2_make_credential_confirm(void); void ctap2_make_credential_user_cancel(void); void ctap2_get_assertion_ux(ctap2_ux_state_t state); -void ctap2_get_assertion_next_credential_ux_helper(void); -void ctap2_get_assertion_confirm(void); +void ctap2_get_assertion_credential_idx(uint16_t idx); +void ctap2_get_assertion_confirm(uint16_t idx); void ctap2_get_assertion_user_cancel(void); -void ctap2_get_assertion_no_assertion_confirm(void); void ctap2_reset_ux(void); void ctap2_reset_confirm(void); diff --git a/include/extension_txAuthSimple.h b/include/extension_txAuthSimple.h deleted file mode 100644 index b953045a..00000000 --- a/include/extension_txAuthSimple.h +++ /dev/null @@ -1,26 +0,0 @@ -/* -******************************************************************************* -* Ledger App Security Key -* (c) 2022 Ledger -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ - -#ifndef __EXTENSION_TX_AUTH_SIMPLE_H__ -#define __EXTENSION_TX_AUTH_SIMPLE_H__ - -#define MAX_TX_AUTH_SIMPLE_SIZE 200 - -#define EXTENSION_TX_AUTH_SIMPLE "txAuthSimple" - -#endif diff --git a/include/globals.h b/include/globals.h index 4b0fc9e2..8e91fff3 100644 --- a/include/globals.h +++ b/include/globals.h @@ -27,6 +27,7 @@ extern char verifyHash[65]; extern char verifyName[20]; +extern char rpID[65]; extern u2f_service_t G_io_u2f; @@ -47,7 +48,6 @@ typedef struct shared_ctx_s { extern shared_ctx_t shared_ctx; extern ctap2_ux_state_t ctap2UxState; -extern ctap2_proxy_t ctap2Proxy; static inline u2f_data_t *globals_get_u2f_data(void) { return &shared_ctx.u.u2fData; diff --git a/include/u2f_process.h b/include/u2f_process.h index b91ef2f2..d5190afb 100644 --- a/include/u2f_process.h +++ b/include/u2f_process.h @@ -25,6 +25,6 @@ typedef struct u2f_data_t { uint8_t nonce[CREDENTIAL_NONCE_SIZE]; } u2f_data_t; -void handleApdu(unsigned char *flags, unsigned short *tx, unsigned short length); +int u2f_handle_apdu(uint8_t *rx, int length); #endif diff --git a/include/ui_shared.h b/include/ui_shared.h index 728be748..4c6d31d5 100644 --- a/include/ui_shared.h +++ b/include/ui_shared.h @@ -21,4 +21,21 @@ void ui_idle(); +#ifdef HAVE_NBGL + +#include "nbgl_use_case.h" +#include "nbgl_layout.h" + +void app_nbgl_start_review(uint8_t nb_pairs, + const nbgl_layoutTagValue_t *pairs, + const char *confirm_text, + nbgl_choiceCallback_t on_choice, + nbgl_callback_t on_select); + +void app_nbgl_status(const char *message, + bool is_success, + nbgl_callback_t on_quit, + tune_index_e tune); +#endif + #endif diff --git a/src/app_main.c b/src/app_main.c new file mode 100644 index 00000000..fb28ed96 --- /dev/null +++ b/src/app_main.c @@ -0,0 +1,121 @@ +/* +******************************************************************************* +* Ledger App Security Key +* (c) 2022 Ledger +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +********************************************************************************/ + +#include "os.h" +#include "os_io_seproxyhal.h" +#include "ux.h" +#include "io.h" + +#include "globals.h" +#include "config.h" +#include "u2f_process.h" +#include "ui_shared.h" +#include "ctap2.h" +#include "rk_storage.h" + +/** + * Override app_ticker_event_callback io_event() dummy implementation + */ +void app_ticker_event_callback(void) { + if (ctap2UxState != CTAP2_UX_STATE_NONE) { + u2f_transport_ctap2_send_keepalive(&G_io_u2f, KEEPALIVE_REASON_TUP_NEEDED); + } +} + +/** + * Override lib_standard_app io_event() implementation + * + * This is necessary to remove the call to + * io_seproxyhal_general_status() that's done at the end + * and which ends up with throwing a SWO_IOL_STA_01 + * exception. + */ +uint8_t io_event(uint8_t channel) { + (void) channel; + + switch (G_io_seproxyhal_spi_buffer[0]) { + case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: +#ifdef HAVE_BAGL + UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); +#endif // HAVE_BAGL + break; + case SEPROXYHAL_TAG_STATUS_EVENT: + if (G_io_apdu_media == IO_APDU_MEDIA_USB_HID && // + !(U4BE(G_io_seproxyhal_spi_buffer, 3) & // + SEPROXYHAL_TAG_STATUS_EVENT_FLAG_USB_POWERED)) { + THROW(EXCEPTION_IO_RESET); + } + __attribute__((fallthrough)); + case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT: +#ifdef HAVE_BAGL + UX_DISPLAYED_EVENT({}); +#endif // HAVE_BAGL +#ifdef HAVE_NBGL + UX_DEFAULT_EVENT(); +#endif // HAVE_NBGL + break; +#ifdef HAVE_NBGL + case SEPROXYHAL_TAG_FINGER_EVENT: + UX_FINGER_EVENT(G_io_seproxyhal_spi_buffer); + break; +#endif // HAVE_NBGL + case SEPROXYHAL_TAG_TICKER_EVENT: + app_ticker_event_callback(); + UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, {}); + break; + default: + UX_DEFAULT_EVENT(); + break; + } + + return 1; +} + +/** + * Handle APDU command received and send back APDU response using handlers. + */ +void app_main() { + // Length of APDU command received in G_io_apdu_buffer + int input_len = 0; + + io_init(); + + if (config_init() != 0) { + PRINTF("=> config_init failure\n"); + return; + } + rk_storage_init(); + ctap2UxState = CTAP2_UX_STATE_NONE; + ctap2_client_pin_reset_ctx(); + + ui_idle(); + + for (;;) { + // Receive command bytes in G_io_apdu_buffer + if ((input_len = io_recv_command()) < 0) { + PRINTF("=> io_recv_command failure\n"); + return; + } + + // Dispatch APDU command to handler + if (u2f_handle_apdu(G_io_apdu_buffer, input_len) < 0) { + PRINTF("=> apdu_dispatcher failure\n"); + return; + } + } +} diff --git a/src/config.c b/src/config.c index 8f20cac6..86a56624 100644 --- a/src/config.c +++ b/src/config.c @@ -27,7 +27,8 @@ config_t const N_u2f_real; -static void derive_and_store_keys(uint32_t resetGeneration) { +static int derive_and_store_keys(uint32_t resetGeneration) { + cx_err_t error; uint8_t key[64]; uint8_t derivateKey[CX_SHA256_SIZE]; uint32_t keyPath[3]; @@ -38,16 +39,22 @@ static void derive_and_store_keys(uint32_t resetGeneration) { // privateKeySeed keyPath[0] = PRIVATE_KEY_SEED_PATH; - os_perso_derive_node_bip32(CX_CURVE_SECP256R1, keyPath, 3, key, key + 32); + error = os_derive_bip32_no_throw(CX_CURVE_SECP256R1, keyPath, 3, key, key + 32); + if (error != CX_OK) { + return -1; + } if (memcmp(key, (uint8_t *) N_u2f.privateKeySeed, sizeof(N_u2f.privateKeySeed)) == 0) { // Keys are already initialized with the proper seed and resetGeneration - return; + return 0; } nvm_write((void *) N_u2f.privateKeySeed, (void *) key, sizeof(N_u2f.privateKeySeed)); // wrappingKey keyPath[0] = WRAPPING_KEY_PATH; - os_perso_derive_node_bip32(CX_CURVE_SECP256R1, keyPath, 3, key, key + 32); + error = os_derive_bip32_no_throw(CX_CURVE_SECP256R1, keyPath, 3, key, key + 32); + if (error != CX_OK) { + return -1; + } // wrappingKeyU2F: aes_key = SHA256(VERSION || wrappingKeys) version = CREDENTIAL_VERSION_U2F; @@ -60,9 +67,12 @@ static void derive_and_store_keys(uint32_t resetGeneration) { nvm_write((void *) N_u2f.wrappingKeyCTAP2, (void *) derivateKey, sizeof(N_u2f.wrappingKeyCTAP2)); + + return 0; } -void config_init(void) { +int config_init(void) { + int ret = 0; uint32_t tmp32; uint8_t tmp8; if (N_u2f.initialized != 1) { @@ -92,8 +102,9 @@ void config_init(void) { nvm_write((void *) &N_u2f.initialized, (void *) &tmp8, sizeof(uint8_t)); } else { // Check that the seed did not change - if it did, overwrite the keys - derive_and_store_keys(N_u2f.resetGeneration); + ret = derive_and_store_keys(N_u2f.resetGeneration); } + return ret; } uint8_t config_increase_and_get_authentification_counter(uint8_t *buffer) { diff --git a/src/crypto.c b/src/crypto.c index 99f46859..b550a698 100644 --- a/src/crypto.c +++ b/src/crypto.c @@ -26,8 +26,9 @@ #include "credential.h" #include "ctap2.h" -#define ROLE_PRIVATE_KEY 0 -#define ROLE_CRED_RANDOM_KEY 1 +#define ROLE_PRIVATE_KEY 0 +#define ROLE_CRED_RANDOM_KEY_UV 1 +#define ROLE_CRED_RANDOM_KEY_NO_UV 2 bool crypto_compare(const uint8_t *a, const uint8_t *b, uint16_t length) { uint16_t given_length = length; @@ -55,8 +56,8 @@ void crypto_compute_sha256(const uint8_t *in1, cx_sha256_t hash; cx_sha256_init(&hash); - cx_hash(&hash.header, 0, in1, in1_len, NULL, 0); - cx_hash(&hash.header, CX_LAST, in2, in2_len, out, CX_SHA256_SIZE); + cx_hash_no_throw(&hash.header, 0, in1, in1_len, NULL, 0); + cx_hash_no_throw(&hash.header, CX_LAST, in2, in2_len, out, CX_SHA256_SIZE); } int crypto_generate_private_key(const uint8_t *nonce, @@ -104,12 +105,16 @@ int crypto_generate_public_key(cx_ecfp_private_key_t *private_key, return app_public_key.W_len; } -void crypto_generate_credRandom_key(const uint8_t *nonce, uint8_t *credRandom) { +void crypto_generate_credRandom_key(const uint8_t *nonce, uint8_t *credRandom, bool with_uv) { uint8_t extended_nonce[32]; // credRandomKey = SHA256((1 << 128 | nonce) || privateKeySeed) memset(extended_nonce, 0, sizeof(extended_nonce)); - extended_nonce[15] = ROLE_CRED_RANDOM_KEY; + if (with_uv) { + extended_nonce[15] = ROLE_CRED_RANDOM_KEY_UV; + } else { + extended_nonce[15] = ROLE_CRED_RANDOM_KEY_NO_UV; + } memcpy(extended_nonce + 16, nonce, CREDENTIAL_NONCE_SIZE); crypto_compute_sha256(extended_nonce, sizeof(extended_nonce), diff --git a/src/ctap2_client_pin.c b/src/ctap2_client_pin.c index 7bfaf92e..d7cf5510 100644 --- a/src/ctap2_client_pin.c +++ b/src/ctap2_client_pin.c @@ -178,9 +178,9 @@ bool ctap2_client_pin_verify(int protocol, } else { cx_hmac_sha256_t hmac; - cx_hmac_sha256_init(&hmac, key, keyLen); // Can use - cx_hmac((cx_hmac_t *) &hmac, 0, msg, msgLength, NULL, 0); - cx_hmac((cx_hmac_t *) &hmac, CX_LAST, msg2, msg2Len, hmacValue, CX_SHA256_SIZE); + cx_hmac_sha256_init_no_throw(&hmac, key, keyLen); + cx_hmac_no_throw((cx_hmac_t *) &hmac, 0, msg, msgLength, NULL, 0); + cx_hmac_no_throw((cx_hmac_t *) &hmac, CX_LAST, msg2, msg2Len, hmacValue, CX_SHA256_SIZE); } if (!crypto_compare(signature, hmacValue, signatureLength)) { diff --git a/src/ctap2_get_assertion.c b/src/ctap2_get_assertion.c index d4403b0b..18de8ff0 100644 --- a/src/ctap2_get_assertion.c +++ b/src/ctap2_get_assertion.c @@ -159,7 +159,6 @@ static int process_getAssert_authnr_allowList(cbipDecoder_t *decoder, cbipItem_t arrayLen = tmpItem.value; if ((status == CBIPH_STATUS_FOUND) && (arrayLen > 0)) { ctap2AssertData->allowListPresent = 1; - ctap2AssertData->singleCredential = (arrayLen == 1); for (int i = 0; i < arrayLen; i++) { if (i == 0) { @@ -228,21 +227,6 @@ static int process_getAssert_authnr_extensions(cbipDecoder_t *decoder, cbipItem_ // when building the response ctap2AssertData->extensions |= FLAG_EXTENSION_HMAC_SECRET; } - - // Check txAuthSimple extension - if (cbiph_get_map_key_str_text(decoder, - &extensionsItem, - EXTENSION_TX_AUTH_SIMPLE, - &ctap2AssertData->txAuthMessage, - &ctap2AssertData->txAuthLength) == CBIPH_STATUS_FOUND) { - // Avoid displaying an empty string, just in case - if (ctap2AssertData->txAuthLength == 0) { - PRINTF("Invalid empty txAuthSimple\n"); - return ERROR_INVALID_CBOR; - } - // TODO : check that the text is displayable - ctap2AssertData->extensions |= FLAG_EXTENSION_TX_AUTH_SIMPLE; - } } return 0; } @@ -396,49 +380,38 @@ void ctap2_get_assertion_handle(u2f_service_t *service, goto exit; } - // Look for a potential rk entry if no allow list was provided - if (!ctap2AssertData->allowListPresent) { - ctap2AssertData->availableCredentials = rk_storage_count(ctap2AssertData->rpIdHash); - if (ctap2AssertData->availableCredentials == 0) { - // No credential, prompt the user to handle the error - PRINTF("No resident credentials\n"); - ctap2_get_assertion_ux(CTAP2_UX_STATE_NO_ASSERTION); - } else if (ctap2AssertData->availableCredentials == 1) { - // Single resident credential, go through the usual flow - PRINTF("Single resident credential\n"); - status = rk_storage_find_youngest(ctap2AssertData->rpIdHash, - NULL, - &ctap2AssertData->nonce, - &ctap2AssertData->credential, - &ctap2AssertData->credentialLen); - if (status == RK_NOT_FOUND) { - // This can theoretically never happen. - // But still, if it does, fall back to the "No resident credentials" case - ctap2_get_assertion_ux(CTAP2_UX_STATE_NO_ASSERTION); - } else { - if (ctap2AssertData->userPresenceRequired || ctap2AssertData->pinRequired) { - ctap2_get_assertion_ux(CTAP2_UX_STATE_GET_ASSERTION); - } else { - *immediateReply = true; + if (!ctap2AssertData->userPresenceRequired && !ctap2AssertData->pinRequired) { + // No up nor uv required, skip UX and reply immediately + *immediateReply = true; + } else { + // Look for a potential rk entry if no allow list was provided + if (!ctap2AssertData->allowListPresent) { + ctap2AssertData->availableCredentials = rk_storage_count(ctap2AssertData->rpIdHash); + if (ctap2AssertData->availableCredentials == 1) { + // Single resident credential load it to go through the usual flow + PRINTF("Single resident credential\n"); + status = rk_storage_find_youngest(ctap2AssertData->rpIdHash, + NULL, + &ctap2AssertData->nonce, + &ctap2AssertData->credential, + &ctap2AssertData->credentialLen); + if (status == RK_NOT_FOUND) { + // This can theoretically never happen. + // But still, if it does, fall back to the "No resident credentials" case + ctap2AssertData->availableCredentials = 0; } } - } else { - // Multiple resident credentials, go through the multiple credentials flow - ctap2_get_assertion_ux(CTAP2_UX_STATE_MULTIPLE_ASSERTION); } - } else { + if (ctap2AssertData->availableCredentials == 0) { ctap2_get_assertion_ux(CTAP2_UX_STATE_NO_ASSERTION); } else if (ctap2AssertData->availableCredentials > 1) { - // DEVIATION from FIDO2.0 spec "select any applicable credential and proceed". - // We always ask the user. + // DEVIATION from FIDO2.0 spec in case of allowList presence: + // "select any applicable credential and proceed". + // We always ask the user to choose. ctap2_get_assertion_ux(CTAP2_UX_STATE_MULTIPLE_ASSERTION); } else { - if (ctap2AssertData->userPresenceRequired || ctap2AssertData->pinRequired) { - ctap2_get_assertion_ux(CTAP2_UX_STATE_GET_ASSERTION); - } else { - *immediateReply = true; - } + ctap2_get_assertion_ux(CTAP2_UX_STATE_GET_ASSERTION); } } status = 0; @@ -451,17 +424,20 @@ void ctap2_get_assertion_handle(u2f_service_t *service, return; } -void ctap2_get_assertion_next_credential_ux_helper(void) { +void ctap2_get_assertion_credential_idx(uint16_t idx) { ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); int status; while (1) { + if (ctap2AssertData->currentCredentialIndex == idx) { + return; + } + if (!ctap2AssertData->allowListPresent) { - if (ctap2AssertData->currentCredentialIndex == ctap2AssertData->availableCredentials) { + if (ctap2AssertData->currentCredentialIndex > idx) { ctap2AssertData->currentCredentialIndex = 0; ctap2AssertData->multipleFlowData.rk.minAge = 0; } - ctap2AssertData->currentCredentialIndex++; // Find the next entry in rk status = rk_storage_find_youngest(ctap2AssertData->rpIdHash, @@ -471,15 +447,17 @@ void ctap2_get_assertion_next_credential_ux_helper(void) { &ctap2AssertData->credentialLen); if (status <= 0) { // Should not happen, just continue a credential will be picked eventually - continue; + PRINTF("Unexpected failure rk\n"); } - break; + + ctap2AssertData->currentCredentialIndex++; + continue; } else { cbipDecoder_t decoder; cbip_decoder_init(&decoder, ctap2AssertData->buffer, CUSTOM_IO_APDU_BUFFER_SIZE); - if (ctap2AssertData->multipleFlowData.allowList.currentCredential == - ctap2AssertData->multipleFlowData.allowList.credentialsNumber) { + if (ctap2AssertData->multipleFlowData.allowList.currentCredential == 0 || + ctap2AssertData->currentCredentialIndex > idx) { cbipItem_t mapItem; cbip_first(&decoder, &mapItem); status = @@ -489,11 +467,8 @@ void ctap2_get_assertion_next_credential_ux_helper(void) { NULL, &ctap2AssertData->multipleFlowData.allowList.credentialItem, cbipArray); - if (status == CBIPH_STATUS_FOUND) { - ctap2AssertData->multipleFlowData.allowList.credentialsNumber = - ctap2AssertData->multipleFlowData.allowList.credentialItem.value; - } else { - ctap2AssertData->multipleFlowData.allowList.credentialsNumber = 0; + if (status != CBIPH_STATUS_FOUND) { + PRINTF("Unexpected failure allowlist\n"); } ctap2AssertData->multipleFlowData.allowList.currentCredential = 0; @@ -520,9 +495,8 @@ void ctap2_get_assertion_next_credential_ux_helper(void) { continue; } - // Process the item to display ctap2AssertData->currentCredentialIndex++; - break; + continue; } } } @@ -672,9 +646,6 @@ static int build_getAssert_authData(uint8_t *buffer, uint32_t bufferLength, uint if ((ctap2AssertData->extensions & FLAG_EXTENSION_HMAC_SECRET) != 0) { extensionsSize++; } - if ((ctap2AssertData->extensions & FLAG_EXTENSION_TX_AUTH_SIMPLE) != 0) { - extensionsSize++; - } cbip_encoder_init(&encoder, buffer + offset, bufferLength - offset); cbip_add_map_header(&encoder, extensionsSize); @@ -684,7 +655,9 @@ static int build_getAssert_authData(uint8_t *buffer, uint32_t bufferLength, uint uint8_t *salt = NULL; uint32_t saltLength = 0; - crypto_generate_credRandom_key(ctap2AssertData->nonce, credRandom); + crypto_generate_credRandom_key(ctap2AssertData->nonce, + credRandom, + ctap2AssertData->pinRequired); status = compute_getAssert_hmacSecret_output(&salt, &saltLength, credRandom); if (status != ERROR_NONE) { @@ -693,18 +666,6 @@ static int build_getAssert_authData(uint8_t *buffer, uint32_t bufferLength, uint cbip_add_byte_string(&encoder, salt, saltLength); } - if ((ctap2AssertData->extensions & FLAG_EXTENSION_TX_AUTH_SIMPLE) != 0) { - cbip_add_string(&encoder, - EXTENSION_TX_AUTH_SIMPLE, - sizeof(EXTENSION_TX_AUTH_SIMPLE) - 1); - if (ctap2AssertData->txAuthLength > MAX_TX_AUTH_SIMPLE_SIZE) { - ctap2AssertData->txAuthLength = 0; - } - cbip_add_string(&encoder, - ctap2AssertData->txAuthMessage, - ctap2AssertData->txAuthLength); - } - if (encoder.fault) { PRINTF("Error encoding extensions\n"); return ERROR_OTHER; @@ -770,10 +731,7 @@ static int sign_and_build_getAssert_authData(uint8_t *authData, ctap2_send_keepalive_processing(); - mapSize = 2; - if (ctap2AssertData->singleCredential == 0) { - mapSize++; - } + mapSize = 3; if (credData->residentKey) { mapSize++; } @@ -782,7 +740,7 @@ static int sign_and_build_getAssert_authData(uint8_t *authData, cbip_add_map_header(&encoder, mapSize); - if (ctap2AssertData->singleCredential == 0) { + { // Rewrap credentials then encoded in the CBOR response // This could be optimized but this would means bypassing the // cbip_add_byte_string helper and the encoder. @@ -866,20 +824,16 @@ static int sign_and_build_getAssert_authData(uint8_t *authData, return encoder.offset; } -void ctap2_get_assertion_confirm() { +void ctap2_get_assertion_confirm(uint16_t idx) { ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); int status; uint32_t dataLen; credential_data_t credData; - ctap2UxState = CTAP2_UX_STATE_NONE; - - PRINTF("ctap2_get_assertion_confirm\n"); + PRINTF("ctap2_get_assertion_confirm %d\n", idx); ctap2_send_keepalive_processing(); - ui_idle(); - // Perform User Verification if required if (ctap2AssertData->pinRequired) { performBuiltInUv(); @@ -887,12 +841,14 @@ void ctap2_get_assertion_confirm() { ctap2_send_keepalive_processing(); - // Restore the original last char in the CBOR buffer if a TX Auth was displayed - if (ctap2AssertData->txAuthMessage != NULL) { - ctap2AssertData->txAuthMessage[ctap2AssertData->txAuthLength] = ctap2AssertData->txAuthLast; + // Return immediately in case there is no available credentials + if (ctap2AssertData->availableCredentials == 0) { + send_cbor_error(&G_io_u2f, ERROR_NO_CREDENTIALS); + return; } // Retrieve needed data from credential + ctap2_get_assertion_credential_idx(idx); status = credential_decode(&credData, ctap2AssertData->credential, ctap2AssertData->credentialLen, @@ -945,13 +901,5 @@ void ctap2_get_assertion_confirm() { } void ctap2_get_assertion_user_cancel() { - ctap2UxState = CTAP2_UX_STATE_NONE; send_cbor_error(&G_io_u2f, ERROR_OPERATION_DENIED); - ui_idle(); -} - -void ctap2_get_assertion_no_assertion_confirm() { - ctap2UxState = CTAP2_UX_STATE_NONE; - send_cbor_error(&G_io_u2f, ERROR_NO_CREDENTIALS); - ui_idle(); } diff --git a/src/ctap2_get_assertion_flow.c b/src/ctap2_get_assertion_flow.c index d0b7a4b7..38b07cce 100644 --- a/src/ctap2_get_assertion_flow.c +++ b/src/ctap2_get_assertion_flow.c @@ -20,74 +20,97 @@ #include "os.h" #include "ux.h" +#include "format.h" #include "ctap2.h" #include "credential.h" #include "globals.h" +#include "ui_shared.h" -static void ctap2_ux_multiple_next(void); -static void ctap2_ux_display_rp_assertion(void) { - ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); - - ctap2_ux_get_rpid(ctap2AssertData->rpId, ctap2AssertData->rpIdLen, ctap2AssertData->rpIdHash); -} - -static void ctap2_ux_display_user_assertion(void) { +static void ctap2_ux_display_user_assertion(char buffer[static 36]) { ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); credential_data_t credData; + uint8_t nameLength = 0; - // TODO show that user.id is truncated if necessary if (credential_decode(&credData, ctap2AssertData->credential, ctap2AssertData->credentialLen, true) != 0) { // This should never happen, but keep a consistent state if it ever does - verifyHash[0] = '\0'; + buffer[0] = '\0'; } else if (credData.userStr != NULL) { - uint8_t nameLength = MIN(credData.userStrLen, sizeof(verifyHash) - 1); - memcpy(verifyHash, credData.userStr, nameLength); - verifyHash[nameLength] = '\0'; + nameLength = MIN(credData.userStrLen, 36 - 1); + memcpy(buffer, credData.userStr, nameLength); + buffer[nameLength] = '\0'; } else { - snprintf(verifyHash, sizeof(verifyHash), "%.*H", credData.userIdLen, credData.userId); - verifyHash[sizeof(verifyHash) - 1] = '\0'; + nameLength = MIN(credData.userIdLen, (36 / 2) - 1); + format_hex(credData.userId, nameLength, buffer, 36); + nameLength = nameLength * 2; + } + + if (nameLength > 32) { + memcpy(buffer + 32, "...", sizeof("...")); } - PRINTF("name %s\n", verifyName); - PRINTF("hash %s\n", verifyHash); + PRINTF("name %s\n", buffer); } +static void ctap_ux_on_user_choice(bool confirm, uint16_t idx) { + ctap2UxState = CTAP2_UX_STATE_NONE; + + if (confirm) { + ctap2_get_assertion_confirm(idx); +#ifdef HAVE_NBGL + app_nbgl_status("Login request signed", true, ui_idle, TUNE_SUCCESS); +#else + ui_idle(); +#endif + } else { + ctap2_get_assertion_user_cancel(); +#ifdef HAVE_NBGL + app_nbgl_status("Login cancelled", false, ui_idle, NBGL_NO_TUNE); +#else + ui_idle(); +#endif + } +} + +#if defined(HAVE_BAGL) + +UX_STEP_NOCB(ux_ctap2_get_assertion_flow_first_step, + pnn, + { + &C_icon_security_key, + "Review login", + "request", + }); + +UX_STEP_NOCB(ux_ctap2_get_assertion_flow_domain_step, + bnnn_paging, + { + .title = "Website", + .text = (char *) rpID, + }); + +UX_STEP_NOCB(ux_ctap2_get_assertion_flow_user_step, + bnnn_paging, + { + .title = "User ID", + .text = (char *) verifyHash, + }); + UX_STEP_CB(ux_ctap2_get_assertion_flow_accept_step, - pbb, - ctap2_get_assertion_confirm(), - { - &C_icon_validate_14, - "Approve", - "login request", - }); - -UX_STEP_NOCB_INIT(ux_ctap2_get_assertion_flow_domain_step, - bnnn_paging, - ctap2_ux_display_rp_assertion(), - { - .title = "Domain", - .text = (char *) verifyHash, - }); - -UX_STEP_NOCB_INIT(ux_ctap2_get_assertion_flow_user_step, - bnnn_paging, - ctap2_ux_display_user_assertion(), - { - .title = "User", - .text = (char *) verifyHash, - }); + pb, + ctap_ux_on_user_choice(true, 1), + {&C_icon_validate_14, "Log in"}); UX_STEP_CB(ux_ctap2_get_assertion_flow_refuse_step, pbb, - ctap2_get_assertion_user_cancel(), + ctap_ux_on_user_choice(false, 0), {&C_icon_crossmark, "Reject", "login request"}); UX_FLOW(ux_ctap2_get_assertion_flow, - &ux_ctap2_get_assertion_flow_accept_step, + &ux_ctap2_get_assertion_flow_first_step, &ux_ctap2_get_assertion_flow_domain_step, &ux_ctap2_get_assertion_flow_user_step, &ux_ctap2_get_assertion_flow_accept_step, @@ -97,70 +120,82 @@ UX_FLOW(ux_ctap2_get_assertion_flow, UX_STEP_NOCB(ux_ctap2_get_assertion_multiple_flow_first_step, pnn, { - &C_icon_people, - "Select user", + &C_icon_security_key, + "Select user ID", "to log in", }); -UX_STEP_NOCB_INIT(ux_ctap2_get_assertion_multiple_flow_user_step, - bnnn_paging, - ctap2_ux_display_user_assertion(), - { - .title = (char *) verifyName, - .text = (char *) verifyHash, - }); +// display stepped screens +static unsigned int ux_step; +static unsigned int ux_step_count; -UX_STEP_CB(ux_ctap2_get_assertion_multiple_flow_next_user_step, - pb, - ctap2_ux_multiple_next(), - {&C_icon_people, "Next user"}); +#define STATE_LEFT_BORDER 0 +#define STATE_VARIABLE 1 +#define STATE_RIGHT_BORDER 2 -UX_FLOW(ux_ctap2_get_assertion_multiple_flow, - &ux_ctap2_get_assertion_multiple_flow_first_step, - &ux_ctap2_get_assertion_flow_domain_step, - &ux_ctap2_get_assertion_multiple_flow_user_step, - &ux_ctap2_get_assertion_flow_accept_step, - &ux_ctap2_get_assertion_multiple_flow_next_user_step, - &ux_ctap2_get_assertion_flow_refuse_step); +static void display_next_multiple_flow_state(uint16_t idx) { + ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); + ctap2_get_assertion_credential_idx(idx); -// Extra steps if a text is associated to the TX for single assertion + snprintf((char *) verifyName, + sizeof(verifyName), + "Log in user %d/%d", + ctap2AssertData->currentCredentialIndex, + ctap2AssertData->availableCredentials); + ctap2_ux_display_user_assertion(verifyHash); +} -UX_STEP_NOCB(ux_ctap2_get_assertion_text_flow_first_step, - pnn, - { - &C_icon_certificate, - "Log in", - "with text", - }); +static void display_next_state(uint8_t state) { + if (state == STATE_LEFT_BORDER) { + if (ux_step == 0) { + ux_step = 1; + ux_flow_next(); + } else if (ux_step == 1) { + --ux_step; + ux_flow_prev(); + } else if (ux_step > 1) { + --ux_step; + ux_flow_next(); + } + } else if (state == STATE_VARIABLE) { + display_next_multiple_flow_state(ux_step); + } else if (state == STATE_RIGHT_BORDER) { + if (ux_step < ux_step_count) { + ++ux_step; + ux_flow_prev(); + } else if (ux_step == ux_step_count) { + ++ux_step; + ux_flow_next(); + } else if (ux_step > ux_step_count) { + ux_step = ux_step_count; + ux_flow_prev(); + } + } +} -UX_STEP_NOCB(ux_ctap2_get_assertion_text_flow_text_step, - bnnn_paging, - {.title = "Message", .text = NULL}); +UX_STEP_INIT(ux_ctap2_get_assertion_multiple_left_border, NULL, NULL, { + display_next_state(STATE_LEFT_BORDER); +}); -UX_FLOW(ux_ctap2_get_assertion_text_flow, - &ux_ctap2_get_assertion_text_flow_first_step, - &ux_ctap2_get_assertion_text_flow_text_step, - &ux_ctap2_get_assertion_flow_domain_step, - &ux_ctap2_get_assertion_flow_user_step, - &ux_ctap2_get_assertion_flow_accept_step, - &ux_ctap2_get_assertion_flow_refuse_step); +UX_STEP_CB_INIT(ux_ctap2_get_assertion_multiple_user_border, + bnnn_paging, + { display_next_state(STATE_VARIABLE); }, + ctap_ux_on_user_choice(true, ux_step), + { + .title = verifyName, + .text = verifyHash, + }); -// Extra steps if a text is associated to the TX for multiple assertion -UX_STEP_NOCB(ux_ctap2_get_assertion_multiple_text_flow_first_step, - pnn, - { - &C_icon_certificate, - "Select user and", - "log in with text", - }); +UX_STEP_INIT(ux_ctap2_get_assertion_multiple_right_border, NULL, NULL, { + display_next_state(STATE_RIGHT_BORDER); +}); -UX_FLOW(ux_ctap2_get_assertion_multiple_text_flow, - &ux_ctap2_get_assertion_multiple_text_flow_first_step, - &ux_ctap2_get_assertion_text_flow_text_step, +UX_FLOW(ux_ctap2_get_assertion_multiple_flow, + &ux_ctap2_get_assertion_multiple_flow_first_step, &ux_ctap2_get_assertion_flow_domain_step, - &ux_ctap2_get_assertion_multiple_flow_user_step, - &ux_ctap2_get_assertion_flow_accept_step, - &ux_ctap2_get_assertion_multiple_flow_next_user_step, + &ux_ctap2_get_assertion_multiple_left_border, + &ux_ctap2_get_assertion_multiple_user_border, + &ux_ctap2_get_assertion_multiple_right_border, &ux_ctap2_get_assertion_flow_refuse_step); // Dedicated flow to get user presence confirmation if no account is registered @@ -168,97 +203,201 @@ UX_STEP_NOCB(ux_ctap2_no_assertion_flow_0_step, pnn, { &C_icon_warning, - "No credential found", - "for this domain", + "Login details not", + "found", }); -UX_STEP_NOCB_INIT(ux_ctap2_no_assertion_flow_1_step, - bnnn_paging, - ctap2_ux_display_rp_assertion(), - { - .title = "Domain", - .text = (char *) verifyHash, - }); +UX_STEP_NOCB(ux_ctap2_no_assertion_flow_1_step, + nnn, + { + "Log in using the", + "same Ledger you", + "register with.", + }); -UX_STEP_CB(ux_ctap2_no_assertion_flow_2_step, +UX_STEP_CB(ux_ctap2_no_assertion_flow_3_step, pb, - ctap2_get_assertion_no_assertion_confirm(), + ctap_ux_on_user_choice(true, 0), {&C_icon_back_x, "Close"}); UX_FLOW(ux_ctap2_no_assertion_flow, &ux_ctap2_no_assertion_flow_0_step, &ux_ctap2_no_assertion_flow_1_step, - &ux_ctap2_no_assertion_flow_2_step); + &ux_ctap2_get_assertion_flow_domain_step, + &ux_ctap2_no_assertion_flow_3_step); + +#elif defined(HAVE_NBGL) + +#include "nbgl_use_case.h" +#include "nbgl_layout.h" + +static nbgl_page_t *pageContext; +#define NB_OF_PAIRS 2 +static const nbgl_layoutTagValue_t pairs[NB_OF_PAIRS] = {{.item = "Website", .value = rpID}, + {.item = "User ID", .value = verifyHash}}; + +#define SELECT_MAX_ID_NB 5 +#define SELECT_ID_BUFFER_SIZE 36 +static char user_id_list[SELECT_MAX_ID_NB][SELECT_ID_BUFFER_SIZE]; +static const char *const bar_texts[SELECT_MAX_ID_NB] = {user_id_list[0], + user_id_list[1], + user_id_list[2], + user_id_list[3], + user_id_list[4]}; +static uint8_t token_list[SELECT_MAX_ID_NB]; +uint8_t available_credentials; +uint8_t selected_credential; + +static void on_user_choice(bool confirm) { + ctap_ux_on_user_choice(confirm, selected_credential); +} -static void get_next_multiple_flow_state(void) { - ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); - ctap2_get_assertion_next_credential_ux_helper(); +static void on_user_select(void); - snprintf((char *) verifyName, - sizeof(verifyName), - "User %d / %d", - ctap2AssertData->currentCredentialIndex, - ctap2AssertData->availableCredentials); +static void on_user_select_exit() { + // Relauch without changing previously shown user id + ctap2_get_assertion_credential_idx(selected_credential); + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Log in", on_user_choice, on_user_select); } -static void ctap2_ux_multiple_next(void) { - ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); - - PRINTF("ctap2_ux_multiple_next\n"); - get_next_multiple_flow_state(); - if (ctap2AssertData->txAuthMessage != NULL) { - ux_flow_init(0, - ux_ctap2_get_assertion_multiple_text_flow, - &ux_ctap2_get_assertion_multiple_flow_user_step); - } else { - ux_flow_init(0, - ux_ctap2_get_assertion_multiple_flow, - &ux_ctap2_get_assertion_multiple_flow_user_step); +static bool on_user_select_navigation_callback(uint8_t page, nbgl_pageContent_t *content) { + if (page > available_credentials / SELECT_MAX_ID_NB) { + return false; } + int first_page_index = page * SELECT_MAX_ID_NB + 1; + int i = 0; + while ((i < SELECT_MAX_ID_NB) && ((i + first_page_index) <= available_credentials)) { + ctap2_get_assertion_credential_idx(first_page_index + i); + ctap2_ux_display_user_assertion(user_id_list[i]); + token_list[i] = FIRST_USER_TOKEN + first_page_index + i; + i++; + } + content->tuneId = NBGL_NO_TUNE; + content->type = BARS_LIST; + content->barsList.barTexts = bar_texts; + content->barsList.tokens = token_list; + content->barsList.nbBars = i; + content->barsList.tuneId = TUNE_TAP_CASUAL; + return true; } -void ctap2_get_assertion_ux(ctap2_ux_state_t state) { - ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); +static void on_user_select_callback(int token, uint8_t index) { + UNUSED(index); - if (state == CTAP2_UX_STATE_MULTIPLE_ASSERTION) { - get_next_multiple_flow_state(); + if (token <= FIRST_USER_TOKEN) { + PRINTF("Should not happen!"); + return; } - // reserve a display stack slot if none yet - if (G_ux.stack_count == 0) { - ux_stack_push(); + int idx = token - FIRST_USER_TOKEN; + if (idx > available_credentials) { + PRINTF("Should not happen!"); + return; } - ctap2Proxy.uiStarted = true; + + PRINTF("User selected %d\n", idx); + + // change the current credential idx and relaunch the review + selected_credential = idx; + ctap2_get_assertion_credential_idx(selected_credential); + ctap2_ux_display_user_assertion(verifyHash); + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Log in", on_user_choice, on_user_select); +} + +static void on_user_select(void) { + // Reuse useCaseSettings which fit our needs + nbgl_useCaseSettings("User IDs", + 0, + (available_credentials - 1 / SELECT_MAX_ID_NB) + 1, + false, + on_user_select_exit, + on_user_select_navigation_callback, + on_user_select_callback); +} + +static void on_no_assertion_user_choice(int token, uint8_t index) { + UNUSED(token); + UNUSED(index); + + nbgl_pageRelease(pageContext); + + ctap2UxState = CTAP2_UX_STATE_NONE; + + ctap2_get_assertion_confirm(0); + ui_idle(); +} + +static void app_nbgl_no_assertion(void) { + snprintf(verifyHash, sizeof(verifyHash), "Login details not found\nfor %s", rpID); + nbgl_pageInfoDescription_t info = { + .bottomButtonStyle = NO_BUTTON_STYLE, + .footerText = NULL, + .centeredInfo.icon = &C_icon_security_key_64px, + .centeredInfo.offsetY = 0, + .centeredInfo.onTop = false, + .centeredInfo.style = LARGE_CASE_INFO, + .centeredInfo.text1 = verifyHash, + .centeredInfo.text2 = "Make sure to log in\nusing the same Ledger\nyou registered with.", + .centeredInfo.text3 = NULL, + .tapActionText = "Tap to dismiss", + .tapActionToken = FIRST_USER_TOKEN, + .topRightStyle = NO_BUTTON_STYLE, + .actionButtonText = NULL, + .tuneId = TUNE_TAP_CASUAL}; + + pageContext = nbgl_pageDrawInfo(&on_no_assertion_user_choice, NULL, &info); + nbgl_refresh(); +} + +#endif + +void ctap2_get_assertion_ux(ctap2_ux_state_t state) { + ctap2_assert_data_t *ctap2AssertData = globals_get_ctap2_assert_data(); + + // TODO show that rp.id is truncated if necessary + uint8_t len = MIN(sizeof(rpID) - 1, ctap2AssertData->rpIdLen); + memcpy(rpID, ctap2AssertData->rpId, len); + rpID[len] = '\0'; + PRINTF("rpId %s\n", rpID); ctap2UxState = state; - if (ctap2AssertData->txAuthMessage != NULL) { - ctap2AssertData->txAuthLast = ctap2AssertData->txAuthMessage[ctap2AssertData->txAuthLength]; - ctap2AssertData->txAuthMessage[ctap2AssertData->txAuthLength] = '\0'; - G_ux.externalText = ctap2AssertData->txAuthMessage; - } else { - G_ux.externalText = NULL; - } +#if defined(HAVE_BAGL) + ux_step = 0; +#elif defined(HAVE_NBGL) + selected_credential = 1; + io_seproxyhal_play_tune(TUNE_LOOK_AT_ME); +#endif switch (state) { case CTAP2_UX_STATE_GET_ASSERTION: { - if (ctap2AssertData->txAuthMessage != NULL) { - ux_flow_init(0, ux_ctap2_get_assertion_text_flow, NULL); - } else { - ux_flow_init(0, ux_ctap2_get_assertion_flow, NULL); - } + ctap2_ux_display_user_assertion(verifyHash); +#if defined(HAVE_BAGL) + ux_flow_init(0, ux_ctap2_get_assertion_flow, NULL); + break; +#elif defined(HAVE_NBGL) + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Log in", on_user_choice, NULL); +#endif break; } case CTAP2_UX_STATE_MULTIPLE_ASSERTION: { - if (ctap2AssertData->txAuthMessage != NULL) { - ux_flow_init(0, ux_ctap2_get_assertion_multiple_text_flow, NULL); - } else { - ux_flow_init(0, ux_ctap2_get_assertion_multiple_flow, NULL); - } +#if defined(HAVE_BAGL) + ux_step_count = ctap2AssertData->availableCredentials; + ux_flow_init(0, ux_ctap2_get_assertion_multiple_flow, NULL); +#elif defined(HAVE_NBGL) + available_credentials = ctap2AssertData->availableCredentials; + ctap2_get_assertion_credential_idx(selected_credential); + ctap2_ux_display_user_assertion(verifyHash); + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Log in", on_user_choice, on_user_select); +#endif break; } default: { +#if defined(HAVE_BAGL) ux_flow_init(0, ux_ctap2_no_assertion_flow, NULL); +#elif defined(HAVE_NBGL) + app_nbgl_no_assertion(); +#endif break; } } diff --git a/src/ctap2_get_info.c b/src/ctap2_get_info.c index b3d06184..a5c9385f 100644 --- a/src/ctap2_get_info.c +++ b/src/ctap2_get_info.c @@ -59,9 +59,8 @@ void ctap2_get_info_handle(u2f_service_t *service, uint8_t *buffer, uint16_t len // extensions (0x02) cbip_add_int(&encoder, TAG_EXTENSIONS); - cbip_add_array_header(&encoder, 2); + cbip_add_array_header(&encoder, 1); cbip_add_string(&encoder, EXTENSION_HMAC_SECRET, sizeof(EXTENSION_HMAC_SECRET) - 1); - cbip_add_string(&encoder, EXTENSION_TX_AUTH_SIMPLE, sizeof(EXTENSION_TX_AUTH_SIMPLE) - 1); // AAGUID (0x03) diff --git a/src/ctap2_make_credential.c b/src/ctap2_make_credential.c index a0d5e793..035004b9 100644 --- a/src/ctap2_make_credential.c +++ b/src/ctap2_make_credential.c @@ -344,7 +344,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 - if (!config_get_rk_enabled()) { + if (boolValue && !config_get_rk_enabled()) { PRINTF("RK disabled\n"); return ERROR_UNSUPPORTED_OPTION; } @@ -658,14 +658,10 @@ void ctap2_make_credential_confirm() { uint8_t nonce[CREDENTIAL_NONCE_SIZE]; int status; - ctap2UxState = CTAP2_UX_STATE_NONE; - PRINTF("ctap2_make_credential_confirm\n"); ctap2_send_keepalive_processing(); - ui_idle(); - // Perform User Verification if required if (ctap2RegisterData->pinRequired) { performBuiltInUv(); @@ -716,7 +712,5 @@ void ctap2_make_credential_confirm() { } void ctap2_make_credential_user_cancel() { - ctap2UxState = CTAP2_UX_STATE_NONE; send_cbor_error(&G_io_u2f, ERROR_OPERATION_DENIED); - ui_idle(); } diff --git a/src/ctap2_make_credential_flow.c b/src/ctap2_make_credential_flow.c index 52f9d7ee..b9a282dd 100644 --- a/src/ctap2_make_credential_flow.c +++ b/src/ctap2_make_credential_flow.c @@ -20,78 +20,75 @@ #include "os.h" #include "ux.h" +#include "format.h" #include "ctap2.h" #include "globals.h" +#include "ui_shared.h" -static void ctap2_ux_display_rp(void) { +static void ctap2_ux_get_display_user(void) { ctap2_register_data_t *ctap2RegisterData = globals_get_ctap2_register_data(); - PRINTF("ctap2_ux_display_rp\n"); - ctap2_ux_get_rpid(ctap2RegisterData->rpId, - ctap2RegisterData->rpIdLen, - ctap2RegisterData->rpIdHash); -} - -static void ctap2_ux_display_user(void) { - ctap2_register_data_t *ctap2RegisterData = globals_get_ctap2_register_data(); - - PRINTF("ctap2_ux_display_user\n"); + // TODO show that user.id is truncated if necessary if (ctap2RegisterData->userStr) { uint8_t nameLength = MIN(ctap2RegisterData->userStrLen, sizeof(verifyHash) - 1); memcpy(verifyHash, ctap2RegisterData->userStr, nameLength); verifyHash[nameLength] = '\0'; } else { - snprintf(verifyHash, - sizeof(verifyHash), - "%.*H", - ctap2RegisterData->userIdLen, - ctap2RegisterData->userId); - verifyHash[sizeof(verifyHash) - 1] = '\0'; + uint8_t nameLength = MIN(ctap2RegisterData->userIdLen, (sizeof(verifyHash) - 1) / 2); + + format_hex(ctap2RegisterData->userId, nameLength, verifyHash, sizeof(verifyHash)); + } +} + +static void ctap_ux_on_user_choice(bool confirm) { + ctap2UxState = CTAP2_UX_STATE_NONE; + + if (confirm) { + ctap2_make_credential_confirm(); +#ifdef HAVE_NBGL + app_nbgl_status("Registration details\nsent", true, ui_idle, TUNE_SUCCESS); +#else + ui_idle(); +#endif + } else { + ctap2_make_credential_user_cancel(); +#ifdef HAVE_NBGL + app_nbgl_status("Registration cancelled", false, ui_idle, NBGL_NO_TUNE); +#else + ui_idle(); +#endif } } +#if defined(HAVE_BAGL) + UX_STEP_NOCB(ux_ctap2_make_cred_flow_first_step, pnn, { &C_icon_security_key, "Register new", - "credential", + "account", }); -UX_STEP_NOCB(ux_ctap2_make_cred_resident_flow_first_step, - pbn, +UX_STEP_NOCB(ux_ctap2_make_cred_flow_domain_step, + bnnn_paging, { - &C_icon_warning, - "Warning", - "Resident key", + .title = "Website", + .text = rpID, }); -UX_STEP_NOCB( - ux_ctap2_make_cred_resident_flow_warning_step, - nnnn, - {"You are about to", "register a credential", "that will be lost upon", "app or OS update."}); - -UX_STEP_NOCB_INIT(ux_ctap2_make_cred_flow_domain_step, - bnnn_paging, - ctap2_ux_display_rp(), - { - .title = "Domain", - .text = (char *) verifyHash, - }); - -UX_STEP_NOCB_INIT(ux_ctap2_make_cred_flow_user_step, - bnnn_paging, - ctap2_ux_display_user(), - { - .title = "User", - .text = (char *) verifyHash, - }); +UX_STEP_NOCB(ux_ctap2_make_cred_flow_user_step, + bnnn_paging, + { + .title = "User ID", + .text = verifyHash, + }); UX_STEP_CB(ux_ctap2_make_cred_flow_accept_step, pb, - ctap2_make_credential_confirm(), + ctap_ux_on_user_choice(true), { &C_icon_validate_14, "Register", @@ -99,7 +96,7 @@ UX_STEP_CB(ux_ctap2_make_cred_flow_accept_step, UX_STEP_CB(ux_ctap2_make_cred_flow_refuse_step, pb, - ctap2_make_credential_user_cancel(), + ctap_ux_on_user_choice(false), { &C_icon_crossmark, "Don't register", @@ -107,7 +104,7 @@ UX_STEP_CB(ux_ctap2_make_cred_flow_refuse_step, UX_STEP_CB(ux_ctap2_make_cred_resident_flow_accept_step, pbb, - ctap2_make_credential_confirm(), + ctap_ux_on_user_choice(true), { &C_icon_validate_14, "Register", @@ -122,26 +119,58 @@ UX_FLOW(ux_ctap2_make_cred_flow, &ux_ctap2_make_cred_flow_refuse_step); UX_FLOW(ux_ctap2_make_cred_resident_flow, - &ux_ctap2_make_cred_resident_flow_first_step, - &ux_ctap2_make_cred_resident_flow_warning_step, + &ux_ctap2_make_cred_flow_first_step, &ux_ctap2_make_cred_flow_domain_step, &ux_ctap2_make_cred_flow_user_step, - &ux_ctap2_make_cred_flow_refuse_step, - &ux_ctap2_make_cred_resident_flow_accept_step); + &ux_ctap2_make_cred_resident_flow_accept_step, + &ux_ctap2_make_cred_flow_refuse_step); + +#elif defined(HAVE_NBGL) + +#include "nbgl_use_case.h" +#include "nbgl_layout.h" + +#define NB_OF_PAIRS 2 +static const nbgl_layoutTagValue_t pairs[NB_OF_PAIRS] = {{ + .item = "Website", + .value = rpID, + }, + { + .item = "User ID", + .value = verifyHash, + }}; + +#endif void ctap2_make_credential_ux(void) { ctap2_register_data_t *ctap2RegisterData = globals_get_ctap2_register_data(); - // reserve a display stack slot if none yet - if (G_ux.stack_count == 0) { - ux_stack_push(); - } ctap2UxState = CTAP2_UX_STATE_MAKE_CRED; - ctap2Proxy.uiStarted = true; - G_ux.externalText = NULL; + // TODO show that rp.id is truncated if necessary + uint8_t len = MIN(sizeof(rpID) - 1, ctap2RegisterData->rpIdLen); + memcpy(rpID, ctap2RegisterData->rpId, len); + rpID[len] = '\0'; + PRINTF("rpId %s\n", rpID); + + ctap2_ux_get_display_user(); + +#if defined(HAVE_BAGL) ux_flow_init(0, (ctap2RegisterData->residentKey ? ux_ctap2_make_cred_resident_flow : ux_ctap2_make_cred_flow), NULL); +#elif defined(HAVE_NBGL) + io_seproxyhal_play_tune(TUNE_LOOK_AT_ME); + + if (ctap2RegisterData->residentKey) { + app_nbgl_start_review(NB_OF_PAIRS, + pairs, + "Register resident key", + ctap_ux_on_user_choice, + NULL); + } else { + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Register", ctap_ux_on_user_choice, NULL); + } +#endif } diff --git a/src/ctap2_processing.c b/src/ctap2_processing.c index adee8ea4..cc9085d2 100644 --- a/src/ctap2_processing.c +++ b/src/ctap2_processing.c @@ -21,11 +21,15 @@ #include "os.h" #include "os_io_seproxyhal.h" #include "u2f_processing.h" +#include "io.h" #include "ctap2.h" #include "cbip_helper.h" #include "globals.h" #include "fido_known_apps.h" +#include "ui_shared.h" + +#define SW_NO_ERROR 0x9000 #define RPID_FILTER "webctap." #define RPID_FILTER_SIZE (sizeof(RPID_FILTER) - 1) @@ -38,34 +42,9 @@ bool ctap2_check_rpid_filter(const char *rpId, uint32_t rpIdLen) { } } -void ctap2_ux_get_rpid(const char *rpId, uint32_t rpIdLen, uint8_t *rpIdHash) { - const char *knownApp; - - PRINTF("rpIdHash %.*H\n", CX_SHA256_SIZE, rpIdHash); - - knownApp = fido_match_known_appid(rpIdHash); - if (knownApp != NULL) { - PRINTF("Known app %s\n", knownApp); - strncpy(verifyHash, knownApp, sizeof(verifyHash)); - } else { - PRINTF("Unknown app\n"); - // TODO show that rp.id is truncated if necessary - snprintf(verifyHash, sizeof(verifyHash), "%.*s", rpIdLen, rpId); - } - // Should not be necessary, but sanitize anyway - verifyHash[sizeof(verifyHash) - 1] = '\0'; -} - void send_cbor_error(u2f_service_t *service, uint8_t error) { if (CMD_IS_OVER_U2F_CMD) { - G_io_apdu_buffer[0] = error; - G_io_apdu_buffer[1] = 0x90; - G_io_apdu_buffer[2] = 0x00; - if (ctap2Proxy.uiStarted) { - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 3); - } else { - ctap2Proxy.length = 3; - } + io_send_response_pointer((uint8_t *) &error, 1, SW_NO_ERROR); } else { u2f_message_reply(service, CTAP2_CMD_CBOR, (uint8_t *) &error, 1); } @@ -73,13 +52,7 @@ void send_cbor_error(u2f_service_t *service, uint8_t error) { void send_cbor_response(u2f_service_t *service, uint32_t length) { if (CMD_IS_OVER_U2F_CMD) { - G_io_apdu_buffer[length] = 0x90; - G_io_apdu_buffer[length + 1] = 0x00; - if (ctap2Proxy.uiStarted) { - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, length + 2); - } else { - ctap2Proxy.length = length + 2; - } + io_send_response_pointer(G_io_apdu_buffer, length, SW_NO_ERROR); } else { u2f_message_reply(service, CTAP2_CMD_CBOR, G_io_apdu_buffer, length); } @@ -93,18 +66,8 @@ void ctap2_send_keepalive_processing() { } void performBuiltInUv(void) { - bolos_ux_params_t params = {.ux_id = BOLOS_UX_VALIDATE_PIN}; - - io_seproxyhal_io_heartbeat(); - - // Request user to enter his device PIN. - // This function doesn't return until the correct PIN is entered. - // If the user enter 3 wrong PIN, the device is reset to factory: - // - Current running app is terminated - // - All apps are removed - // - Seed is deleted - os_ux_blocking(¶ms); - PRINTF("Pin validated\n"); + PRINTF("performBuiltInUv\n"); + // No-op as the user is verified through the session PIN. } #define CBOR_MAKE_CREDENTIAL 0x01 @@ -143,7 +106,7 @@ void ctap2_handle_cmd_cbor(u2f_service_t *service, uint8_t *buffer, uint16_t len bool immediateReply; ctap2_get_assertion_handle(service, buffer + 1, length - 1, &immediateReply); if (immediateReply) { - ctap2_get_assertion_confirm(); + ctap2_get_assertion_confirm(1); } } break; case CBOR_GET_NEXT_ASSERTION: @@ -169,10 +132,20 @@ void ctap2_handle_cmd_cancel(u2f_service_t *service, uint8_t *buffer, uint16_t l UNUSED(length); PRINTF("ctap2_cmd_cancel %d\n", ctap2UxState); - if ((ctap2UxState != CTAP2_UX_STATE_NONE) && (ctap2UxState != CTAP2_UX_STATE_CANCELLED)) { + if (ctap2UxState != CTAP2_UX_STATE_NONE) { PRINTF("Cancel pending UI\n"); - ctap2UxState = CTAP2_UX_STATE_CANCELLED; + ctap2UxState = CTAP2_UX_STATE_NONE; + + // Answer as fast as possible as Chrome expect a fast answer and in case + // it didn't comes fast enough, it won't be sent back if the user + // eventually choose again this authenticator. send_cbor_error(service, ERROR_KEEPALIVE_CANCEL); + +#ifdef HAVE_BAGL + ux_stack_pop(); + ux_stack_push(); +#endif + ui_idle(); } } diff --git a/src/ctap2_reset.c b/src/ctap2_reset.c index d59dad88..d0789e6d 100644 --- a/src/ctap2_reset.c +++ b/src/ctap2_reset.c @@ -33,17 +33,12 @@ void ctap2_reset_handle(u2f_service_t *service, uint8_t *buffer, uint16_t length } void ctap2_reset_confirm() { - ctap2UxState = CTAP2_UX_STATE_NONE; - config_process_ctap2_reset(); G_io_apdu_buffer[0] = ERROR_NONE; send_cbor_response(&G_io_u2f, 1); - ui_idle(); } void ctap2_reset_cancel() { - ctap2UxState = CTAP2_UX_STATE_NONE; send_cbor_error(&G_io_u2f, ERROR_OPERATION_DENIED); - ui_idle(); } diff --git a/src/ctap2_reset_flow.c b/src/ctap2_reset_flow.c index 591ae73a..81eaf4bc 100644 --- a/src/ctap2_reset_flow.c +++ b/src/ctap2_reset_flow.c @@ -21,53 +21,70 @@ #include "ctap2.h" #include "globals.h" +#include "ui_shared.h" -// First step resets as fast as possible to please Windows +static void ctap_ux_on_user_action(bool confirm) { + ctap2UxState = CTAP2_UX_STATE_NONE; -UX_STEP_CB(ux_ctap2_reset_flow_0_step, - pb, - ctap2_reset_confirm(), - {&C_icon_eye, "Reset credentials"}); + if (confirm) { + ctap2_reset_confirm(); + ui_idle(); + } else { + ctap2_reset_cancel(); + ui_idle(); + } +} -UX_STEP_NOCB(ux_ctap2_reset_flow_1_step, - bnnn_paging, +#if defined(HAVE_BAGL) + +UX_STEP_NOCB(ux_ctap2_reset_flow_0_step, + pnn, { - .title = "Warning", - .text = "All credentials will be invalidated", + &C_icon_warning, + "Delete login details", + "for all websites?", }); -UX_STEP_CB(ux_ctap2_reset_flow_2_step, - pbb, - ctap2_reset_confirm(), - { - &C_icon_validate_14, - "Confirm", - "reset", - }); +UX_STEP_CB(ux_ctap2_reset_flow_1_step, + pb, + ctap_ux_on_user_action(true), + {&C_icon_validate_14, "Yes, delete"}); -UX_STEP_CB(ux_ctap2_reset_flow_3_step, - pbb, - ctap2_reset_cancel(), +UX_STEP_CB(ux_ctap2_reset_flow_2_step, + pb, + ctap_ux_on_user_action(false), { &C_icon_crossmark, - "Abort", - "reset", + "No, don't delete", }); UX_FLOW(ux_ctap2_reset_flow, &ux_ctap2_reset_flow_0_step, &ux_ctap2_reset_flow_1_step, - &ux_ctap2_reset_flow_2_step, - &ux_ctap2_reset_flow_3_step); + &ux_ctap2_reset_flow_2_step); void ctap2_reset_ux(void) { - // reserve a display stack slot if none yet - if (G_ux.stack_count == 0) { - ux_stack_push(); - } ctap2UxState = CTAP2_UX_STATE_RESET; - ctap2Proxy.uiStarted = true; - G_ux.externalText = NULL; ux_flow_init(0, ux_ctap2_reset_flow, NULL); } + +#elif defined(HAVE_NBGL) +#include "nbgl_use_case.h" + +void ctap2_reset_ux(void) { + ctap2UxState = CTAP2_UX_STATE_RESET; + + io_seproxyhal_play_tune(TUNE_LOOK_AT_ME); + + nbgl_useCaseChoice(&C_warning64px, + "Delete saved login\n" + "details for all\n" + "websites?\n", + NULL, + "Yes, delete", + "No, don't delete", + ctap_ux_on_user_action); +} + +#endif \ No newline at end of file diff --git a/src/globals.c b/src/globals.c index 46c08812..2bd9a06d 100644 --- a/src/globals.c +++ b/src/globals.c @@ -22,7 +22,7 @@ char verifyName[20]; char verifyHash[65]; +char rpID[65]; shared_ctx_t shared_ctx; ctap2_ux_state_t ctap2UxState; -ctap2_proxy_t ctap2Proxy; diff --git a/src/main.c b/src/main.c deleted file mode 100644 index b378fdb5..00000000 --- a/src/main.c +++ /dev/null @@ -1,230 +0,0 @@ -/* -******************************************************************************* -* Ledger App Security Key -* (c) 2022 Ledger -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ - -#include "os.h" -#include "os_io_seproxyhal.h" -#include "ux.h" - -#include "globals.h" -#include "config.h" -#include "u2f_process.h" -#include "ui_shared.h" -#include "ctap2.h" -#include "rk_storage.h" - -unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; - -ux_state_t G_ux; -bolos_ux_params_t G_ux_params; - -// override point, but nothing more to do -void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default(element); -} - -unsigned char io_event(unsigned char channel) { - UNUSED(channel); - - // can't have more than one tag in the reply, not supported yet. - switch (G_io_seproxyhal_spi_buffer[0]) { - case SEPROXYHAL_TAG_FINGER_EVENT: - UX_FINGER_EVENT(G_io_seproxyhal_spi_buffer); - break; - - case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: - UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); - break; - - case SEPROXYHAL_TAG_TICKER_EVENT: - if (ctap2UxState == CTAP2_UX_STATE_CANCELLED) { - ctap2UxState = CTAP2_UX_STATE_NONE; - ux_stack_pop(); - ux_stack_push(); - ui_idle(); - } else if (ctap2UxState != CTAP2_UX_STATE_NONE) { - u2f_transport_ctap2_send_keepalive(&G_io_u2f, KEEPALIVE_REASON_TUP_NEEDED); - } - UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, {}); - break; - - case SEPROXYHAL_TAG_DISPLAY_PROCESSED_EVENT: - UX_DISPLAYED_EVENT({}); - break; - - case SEPROXYHAL_TAG_STATUS_EVENT: - if (G_io_apdu_media == IO_APDU_MEDIA_USB_HID && - !(U4BE(G_io_seproxyhal_spi_buffer, 3) & - SEPROXYHAL_TAG_STATUS_EVENT_FLAG_USB_POWERED)) { - THROW(EXCEPTION_IO_RESET); - } - __attribute__((fallthrough)); - default: - UX_DEFAULT_EVENT(); - break; - } - - // command has been processed, DO NOT reset the current APDU transport - return 1; -} - -unsigned short io_exchange_al(unsigned char channel, unsigned short tx_len) { - switch (channel & ~(IO_FLAGS)) { - case CHANNEL_KEYBOARD: - break; - - // multiplexed io exchange over a SPI channel and TLV encapsulated protocol - case CHANNEL_SPI: - if (tx_len) { - io_seproxyhal_spi_send(G_io_apdu_buffer, tx_len); - - if (channel & IO_RESET_AFTER_REPLIED) { - halt(); - } - return 0; // nothing received from the master so far (it's a tx - // transaction) - } else { - return io_seproxyhal_spi_recv(G_io_apdu_buffer, sizeof(G_io_apdu_buffer), 0); - } - - default: - THROW(INVALID_PARAMETER); - } - return 0; -} - -void app_exit(void) { - BEGIN_TRY_L(exit) { - TRY_L(exit) { - os_sched_exit(-1); - } - FINALLY_L(exit) { - } - } - END_TRY_L(exit); -} - -static int u2f_fill_status_code(uint16_t status_code, uint8_t *buffer) { - buffer[0] = status_code >> 8; - buffer[1] = status_code; - return 2; -} - -void sample_main(void) { - unsigned short rx = 0; - unsigned short tx = 0; - unsigned char flags = 0; - - // DESIGN NOTE: the bootloader ignores the way APDU are fetched. The only - // goal is to retrieve APDU. - // When APDU are to be fetched from multiple IOs, like NFC+USB+BLE, make - // sure the io_event is called with a - // switch event, before the apdu is replied to the bootloader. This avoid - // APDU injection faults. - for (;;) { - BEGIN_TRY { - TRY { - rx = io_exchange(CHANNEL_APDU | flags, tx); - tx = 0; - flags = 0; - - // no apdu received, well, reset the session, and reset the - // bootloader configuration - if (rx == 0) { - tx = u2f_fill_status_code(0x6982, G_io_apdu_buffer); - } else { - handleApdu(&flags, &tx, rx); - } - } - CATCH(EXCEPTION_IO_RESET) { - THROW(EXCEPTION_IO_RESET); - } - CATCH_OTHER(e) { - // Exception reported by the OS, convert to internal error - e = 0x6800 | (e & 0x7FF); - tx = u2f_fill_status_code(e, G_io_apdu_buffer); - flags = 0; - } - FINALLY { - } - } - END_TRY; - } -} - -void app_main(void) { - for (;;) { - BEGIN_TRY { - TRY { - // call the check api level - io_seproxyhal_init(); - - // Initialize U2F service - config_init(); - rk_storage_init(); - ctap2UxState = CTAP2_UX_STATE_NONE; - ctap2_client_pin_reset_ctx(); - - // request device status (charging/usbpower/etc) - io_seproxyhal_request_mcu_status(); - - UX_WAKE_UP(); - - // do that at the latest moment to ensure huge delay between usb(0) and - // USB(1) upon io_reset exception - USB_power(0); - USB_power(1); - - ui_idle(); - - sample_main(); - } - CATCH(EXCEPTION_IO_RESET) { - USB_power(0); // ensure disconnecting pull before reconnecting - - continue; - } - FINALLY { - } - } - END_TRY; - } -} - -__attribute__((section(".boot"))) int main(void) { - // exit critical section - __asm volatile("cpsie i"); - - // ensure exception will work as planned - os_boot(); - - for (;;) { - BEGIN_TRY { - TRY { - UX_INIT(); - - app_main(); - } - CATCH_OTHER(e) { - app_exit(); - } - FINALLY { - } - } - END_TRY; - } -} diff --git a/src/u2f_processing.c b/src/u2f_processing.c index ede18305..a8f3d629 100644 --- a/src/u2f_processing.c +++ b/src/u2f_processing.c @@ -22,6 +22,8 @@ #include "os_io_seproxyhal.h" #include "cx.h" #include "ux.h" +#include "io.h" +#include "format.h" #include "u2f_processing.h" #include "u2f_service.h" @@ -218,47 +220,37 @@ typedef struct u2f_auth_resp_base_t { /* U2F response helpers */ /******************************************/ -static int u2f_fill_status_code(uint16_t status_code, uint8_t *buffer) { - buffer[0] = status_code >> 8; - buffer[1] = status_code; - return 2; -} - -static void u2f_send_error(uint16_t status_code, unsigned short *tx) { - *tx = u2f_fill_status_code(status_code, G_io_apdu_buffer); -} - static void u2f_compute_enroll_response_hash(u2f_reg_resp_base_t *reg_resp_base, uint16_t key_handle_length, uint8_t *data_hash) { cx_sha256_t hash; cx_sha256_init(&hash); - cx_hash(&hash.header, 0, DUMMY_ZERO, 1, NULL, 0); - cx_hash(&hash.header, - 0, - globals_get_u2f_data()->application_param, - sizeof(globals_get_u2f_data()->application_param), - NULL, - 0); - cx_hash(&hash.header, - 0, - globals_get_u2f_data()->challenge_param, - sizeof(globals_get_u2f_data()->challenge_param), - NULL, - 0); - cx_hash(&hash.header, 0, reg_resp_base->key_handle, key_handle_length, NULL, 0); - cx_hash(&hash.header, - CX_LAST, - reg_resp_base->user_key, - sizeof(reg_resp_base->user_key), - data_hash, - CX_SHA256_SIZE); + cx_hash_no_throw(&hash.header, 0, DUMMY_ZERO, 1, NULL, 0); + cx_hash_no_throw(&hash.header, + 0, + globals_get_u2f_data()->application_param, + sizeof(globals_get_u2f_data()->application_param), + NULL, + 0); + cx_hash_no_throw(&hash.header, + 0, + globals_get_u2f_data()->challenge_param, + sizeof(globals_get_u2f_data()->challenge_param), + NULL, + 0); + cx_hash_no_throw(&hash.header, 0, reg_resp_base->key_handle, key_handle_length, NULL, 0); + cx_hash_no_throw(&hash.header, + CX_LAST, + reg_resp_base->user_key, + sizeof(reg_resp_base->user_key), + data_hash, + CX_SHA256_SIZE); } static int u2f_prepare_enroll_response(void) { int offset = 0; - int result = -1; + int result; int key_handle_length; u2f_reg_resp_base_t *reg_resp_base = (u2f_reg_resp_base_t *) G_io_apdu_buffer; @@ -277,12 +269,12 @@ static int u2f_prepare_enroll_response(void) { if (crypto_generate_private_key(globals_get_u2f_data()->nonce, &private_key, CX_CURVE_SECP256R1) != 0) { - goto exit; + return io_send_sw(SW_PROPRIETARY_INTERNAL); } if (crypto_generate_public_key(&private_key, reg_resp_base->user_key, CX_CURVE_SECP256R1) <= 0) { explicit_bzero(&private_key, sizeof(private_key)); - goto exit; + return io_send_sw(SW_PROPRIETARY_INTERNAL); } explicit_bzero(&private_key, sizeof(private_key)); } @@ -298,37 +290,31 @@ static int u2f_prepare_enroll_response(void) { false); // We only support generating key_handle with fixed length - if (key_handle_length == sizeof(reg_resp_base->key_handle)) { - // Fill key handle length - reg_resp_base->key_handle_length = key_handle_length; - - // Fill attestation certificate - memmove(G_io_apdu_buffer + offset, ATTESTATION_CERT, sizeof(ATTESTATION_CERT)); - offset += sizeof(ATTESTATION_CERT); - - // Prepare signature - uint8_t data_hash[CX_SHA256_SIZE]; - u2f_compute_enroll_response_hash(reg_resp_base, key_handle_length, data_hash); - - // Fill signature - uint8_t *signature = (G_io_apdu_buffer + offset); - result = crypto_sign_attestation(data_hash, signature, false); - if (result > 0) { - offset += result; - - // Fill status code - uint8_t *status = (G_io_apdu_buffer + offset); - offset += u2f_fill_status_code(SW_NO_ERROR, status); - result = offset; - } + if (key_handle_length != sizeof(reg_resp_base->key_handle)) { + return io_send_sw(SW_PROPRIETARY_INTERNAL); } -exit: - if (result < 0) { - result = u2f_fill_status_code(SW_PROPRIETARY_INTERNAL, G_io_apdu_buffer); - } + // Fill key handle length + reg_resp_base->key_handle_length = key_handle_length; - return result; + // Fill attestation certificate + memmove(G_io_apdu_buffer + offset, ATTESTATION_CERT, sizeof(ATTESTATION_CERT)); + offset += sizeof(ATTESTATION_CERT); + + // Prepare signature + uint8_t data_hash[CX_SHA256_SIZE]; + u2f_compute_enroll_response_hash(reg_resp_base, key_handle_length, data_hash); + + // Fill signature + uint8_t *signature = (G_io_apdu_buffer + offset); + result = crypto_sign_attestation(data_hash, signature, false); + + if (result > 0) { + offset += result; + return io_send_response_pointer(G_io_apdu_buffer, offset, SW_NO_ERROR); + } else { + return io_send_sw(SW_PROPRIETARY_INTERNAL); + } } static void u2f_compute_sign_response_hash(u2f_auth_resp_base_t *auth_resp_base, @@ -336,25 +322,30 @@ static void u2f_compute_sign_response_hash(u2f_auth_resp_base_t *auth_resp_base, cx_sha256_t hash; cx_sha256_init(&hash); - cx_hash(&hash.header, - 0, - globals_get_u2f_data()->application_param, - sizeof(globals_get_u2f_data()->application_param), - NULL, - 0); - cx_hash(&hash.header, 0, DUMMY_USER_PRESENCE, 1, NULL, 0); - cx_hash(&hash.header, 0, auth_resp_base->counter, sizeof(auth_resp_base->counter), NULL, 0); - cx_hash(&hash.header, - CX_LAST, - globals_get_u2f_data()->challenge_param, - sizeof(globals_get_u2f_data()->challenge_param), - data_hash, - CX_SHA256_SIZE); + cx_hash_no_throw(&hash.header, + 0, + globals_get_u2f_data()->application_param, + sizeof(globals_get_u2f_data()->application_param), + NULL, + 0); + cx_hash_no_throw(&hash.header, 0, DUMMY_USER_PRESENCE, 1, NULL, 0); + cx_hash_no_throw(&hash.header, + 0, + auth_resp_base->counter, + sizeof(auth_resp_base->counter), + NULL, + 0); + cx_hash_no_throw(&hash.header, + CX_LAST, + globals_get_u2f_data()->challenge_param, + sizeof(globals_get_u2f_data()->challenge_param), + data_hash, + CX_SHA256_SIZE); } static int u2f_prepare_sign_response(void) { int offset = 0; - int result = -1; + int result; u2f_auth_resp_base_t *auth_resp_base = (u2f_auth_resp_base_t *) G_io_apdu_buffer; offset += sizeof(u2f_auth_resp_base_t); @@ -370,35 +361,25 @@ static int u2f_prepare_sign_response(void) { u2f_compute_sign_response_hash(auth_resp_base, data_hash); // Generate private key and fill signature - { - cx_ecfp_private_key_t private_key; - uint8_t *signature = (G_io_apdu_buffer + offset); - - if (crypto_generate_private_key(globals_get_u2f_data()->nonce, - &private_key, - CX_CURVE_SECP256R1) != 0) { - goto exit; - } - result = crypto_sign_application(data_hash, &private_key, signature); + cx_ecfp_private_key_t private_key; + uint8_t *signature = (G_io_apdu_buffer + offset); - explicit_bzero(&private_key, sizeof(private_key)); + if (crypto_generate_private_key(globals_get_u2f_data()->nonce, + &private_key, + CX_CURVE_SECP256R1) != 0) { + return io_send_sw(SW_PROPRIETARY_INTERNAL); + } - if (result > 0) { - offset += result; + result = crypto_sign_application(data_hash, &private_key, signature); - // Fill status code - uint8_t *status = (G_io_apdu_buffer + offset); - offset += u2f_fill_status_code(SW_NO_ERROR, status); - result = offset; - } - } + explicit_bzero(&private_key, sizeof(private_key)); -exit: - if (result < 0) { - result = u2f_fill_status_code(SW_PROPRIETARY_INTERNAL, G_io_apdu_buffer); + if (result > 0) { + offset += result; + return io_send_response_pointer(G_io_apdu_buffer, offset, SW_NO_ERROR); + } else { + return io_send_sw(SW_PROPRIETARY_INTERNAL); } - - return result; } static int u2f_process_user_presence_confirmed(void) { @@ -412,39 +393,31 @@ static int u2f_process_user_presence_confirmed(void) { default: break; } - return u2f_fill_status_code(SW_PROPRIETARY_INTERNAL, G_io_apdu_buffer); -} - -static int u2f_process_user_presence_cancelled(void) { - return u2f_fill_status_code(SW_PROPRIETARY_INTERNAL, G_io_apdu_buffer); + return io_send_sw(SW_PROPRIETARY_INTERNAL); } /******************************************/ /* U2F UX Flows */ /******************************************/ -static unsigned int u2f_callback_cancel(const bagl_element_t *element) { - UNUSED(element); +#if defined(HAVE_BAGL) - uint16_t tx = u2f_process_user_presence_cancelled(); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); +static unsigned int u2f_callback_cancel(void) { + io_send_sw(SW_PROPRIETARY_INTERNAL); ui_idle(); - return 0; // DO NOT REDISPLAY THE BUTTON + return 0; } -static unsigned int u2f_callback_confirm(const bagl_element_t *element) { - UNUSED(element); - - uint16_t tx = u2f_process_user_presence_confirmed(); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); +static unsigned int u2f_callback_confirm(void) { + u2f_process_user_presence_confirmed(); ui_idle(); - return 0; // DO NOT REDISPLAY THE BUTTON + return 0; } /* Register Flow */ UX_STEP_CB(ux_register_flow_0_step, pbb, - u2f_callback_confirm(NULL), + u2f_callback_confirm(), { &C_icon_validate_14, "Register", @@ -458,7 +431,7 @@ UX_STEP_NOCB(ux_register_flow_1_step, }); UX_STEP_CB(ux_register_flow_2_step, pbb, - u2f_callback_cancel(NULL), + u2f_callback_cancel(), { &C_icon_crossmark, "Abort", @@ -474,7 +447,7 @@ UX_FLOW(ux_register_flow, /* Authenticate Flow */ UX_STEP_CB(ux_login_flow_0_step, pbb, - u2f_callback_confirm(NULL), + u2f_callback_confirm(), { &C_icon_validate_14, "Login", @@ -488,7 +461,7 @@ UX_STEP_NOCB(ux_login_flow_1_step, }); UX_STEP_CB(ux_login_flow_2_step, pbb, - u2f_callback_cancel(NULL), + u2f_callback_cancel(), { &C_icon_crossmark, "Abort", @@ -501,10 +474,46 @@ UX_FLOW(ux_login_flow, &ux_login_flow_2_step, FLOW_LOOP); +#elif defined(HAVE_NBGL) + +#include "nbgl_use_case.h" + +#define NB_OF_PAIRS 2 +static const nbgl_layoutTagValue_t pairs[NB_OF_PAIRS] = {{ + .item = "Website", + .value = verifyName, + }, + { + .item = "Website ID", + .value = verifyHash, + }}; + +static void on_register_choice(bool confirm) { + if (confirm) { + u2f_process_user_presence_confirmed(); + app_nbgl_status("Registration details\nsent", true, ui_idle, TUNE_SUCCESS); + } else { + io_send_sw(SW_PROPRIETARY_INTERNAL); + app_nbgl_status("Registration cancelled", false, ui_idle, NBGL_NO_TUNE); + } +} + +static void on_login_choice(bool confirm) { + if (confirm) { + u2f_process_user_presence_confirmed(); + app_nbgl_status("Login request signed", true, ui_idle, TUNE_SUCCESS); + } else { + io_send_sw(SW_PROPRIETARY_INTERNAL); + app_nbgl_status("Log in cancelled", false, ui_idle, NBGL_NO_TUNE); + } +} + +#endif + static void u2f_prompt_user_presence(bool enroll, uint8_t *applicationParameter) { UX_WAKE_UP(); - snprintf(verifyHash, sizeof(verifyHash), "%.*H", 32, applicationParameter); + format_hex(applicationParameter, 32, verifyHash, sizeof(verifyHash)); strcpy(verifyName, "Unknown"); const char *name = fido_match_known_appid(applicationParameter); @@ -512,39 +521,46 @@ static void u2f_prompt_user_presence(bool enroll, uint8_t *applicationParameter) strlcpy(verifyName, name, sizeof(verifyName)); } - G_ux.externalText = NULL; +#if defined(HAVE_BAGL) if (enroll) { ux_flow_init(0, ux_register_flow, NULL); } else { ux_flow_init(0, ux_login_flow, NULL); } +#elif defined(HAVE_NBGL) + if (enroll) { + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Register", on_register_choice, NULL); + } else { + app_nbgl_start_review(NB_OF_PAIRS, pairs, "Login", on_login_choice, NULL); + } +#endif } /******************************************/ /* U2F APDU handlers */ /******************************************/ -static void u2f_handle_apdu_enroll(unsigned char *flags, unsigned short *tx, uint32_t data_length) { +static int u2f_handle_apdu_enroll(uint8_t *rx, uint32_t data_length) { // Parse request and check length validity - u2f_reg_req_t *reg_req = (u2f_reg_req_t *) (G_io_apdu_buffer + OFFSET_DATA); + u2f_reg_req_t *reg_req = (u2f_reg_req_t *) (rx + OFFSET_DATA); if (data_length != sizeof(u2f_reg_req_t)) { - return u2f_send_error(SW_WRONG_LENGTH, tx); + return io_send_sw(SW_WRONG_LENGTH); } // Check P1 - if (G_io_apdu_buffer[OFFSET_P1] != 0) { - if (G_io_apdu_buffer[OFFSET_P1] == P1_U2F_REQUEST_USER_PRESENCE) { + if (rx[OFFSET_P1] != 0) { + if (rx[OFFSET_P1] == P1_U2F_REQUEST_USER_PRESENCE) { // Some platforms wrongly uses 0x03 as P1 for enroll: // https://searchfox.org/mozilla-central/source/third_party/rust/authenticator/src/consts.rs#55 // https://github.com/Yubico/python-u2flib-host/issues/34 // We choose to allow it. } else { - return u2f_send_error(SW_INCORRECT_P1P2, tx); + return io_send_sw(SW_INCORRECT_P1P2); } } // Check P2 - if (G_io_apdu_buffer[OFFSET_P2] != 0) { - return u2f_send_error(SW_INCORRECT_P1P2, tx); + if (rx[OFFSET_P2] != 0) { + return io_send_sw(SW_INCORRECT_P1P2); } // Backup challenge and application parameters to be used if user accept the request @@ -559,26 +575,26 @@ static void u2f_handle_apdu_enroll(unsigned char *flags, unsigned short *tx, uin u2f_message_set_autoreply_wait_user_presence(&G_io_u2f, true); } u2f_prompt_user_presence(true, globals_get_u2f_data()->application_param); - *flags |= IO_ASYNCH_REPLY; + return 0; } -static void u2f_handle_apdu_sign(unsigned char *flags, unsigned short *tx, uint32_t data_length) { +static int u2f_handle_apdu_sign(uint8_t *rx, uint32_t data_length) { uint8_t *nonce; // Parse request base and check length validity - u2f_auth_req_base_t *auth_req_base = (u2f_auth_req_base_t *) (G_io_apdu_buffer + OFFSET_DATA); + u2f_auth_req_base_t *auth_req_base = (u2f_auth_req_base_t *) (rx + OFFSET_DATA); if (data_length < sizeof(u2f_auth_req_base_t)) { - return u2f_send_error(SW_WRONG_LENGTH, tx); + return io_send_sw(SW_WRONG_LENGTH); } // Parse request key handle and check length validity - uint8_t *key_handle = G_io_apdu_buffer + OFFSET_DATA + sizeof(u2f_auth_req_base_t); + uint8_t *key_handle = rx + OFFSET_DATA + sizeof(u2f_auth_req_base_t); if (data_length != sizeof(u2f_auth_req_base_t) + auth_req_base->key_handle_length) { - return u2f_send_error(SW_WRONG_LENGTH, tx); + return io_send_sw(SW_WRONG_LENGTH); } // Parse request P1 bool sign = false; - switch (G_io_apdu_buffer[OFFSET_P1]) { + switch (rx[OFFSET_P1]) { case P1_U2F_CHECK_IS_REGISTERED: break; case P1_U2F_REQUEST_USER_PRESENCE: @@ -586,12 +602,12 @@ static void u2f_handle_apdu_sign(unsigned char *flags, unsigned short *tx, uint3 sign = true; break; default: - return u2f_send_error(SW_INCORRECT_P1P2, tx); + return io_send_sw(SW_INCORRECT_P1P2); } // Check P2 - if (G_io_apdu_buffer[OFFSET_P2] != 0) { - return u2f_send_error(SW_INCORRECT_P1P2, tx); + if (rx[OFFSET_P2] != 0) { + return io_send_sw(SW_INCORRECT_P1P2); } // Check the key handle validity immediately @@ -602,12 +618,12 @@ static void u2f_handle_apdu_sign(unsigned char *flags, unsigned short *tx, uint3 &nonce, NULL, NULL) < 0) { - return u2f_send_error(SW_WRONG_DATA, tx); + return io_send_sw(SW_WRONG_DATA); } // If we only check user presence answer immediately if (!sign) { - return u2f_send_error(SW_CONDITIONS_NOT_SATISFIED, tx); + return io_send_sw(SW_CONDITIONS_NOT_SATISFIED); } // Backup nonce, challenge and application parameters to be used if user accept the request @@ -623,89 +639,80 @@ static void u2f_handle_apdu_sign(unsigned char *flags, unsigned short *tx, uint3 u2f_message_set_autoreply_wait_user_presence(&G_io_u2f, true); } u2f_prompt_user_presence(false, globals_get_u2f_data()->application_param); - *flags |= IO_ASYNCH_REPLY; + return 0; } -static void u2f_handle_apdu_get_version(unsigned char *flags, - unsigned short *tx, - uint32_t data_length) { - UNUSED(flags); - +static int u2f_handle_apdu_get_version(uint8_t *rx, uint32_t data_length) { int offset = 0; if (data_length != 0) { - return u2f_send_error(SW_WRONG_LENGTH, tx); + return io_send_sw(SW_WRONG_LENGTH); } - if ((G_io_apdu_buffer[OFFSET_P1] != 0) || (G_io_apdu_buffer[OFFSET_P2] != 0)) { - return u2f_send_error(SW_INCORRECT_P1P2, tx); + if ((rx[OFFSET_P1] != 0) || (rx[OFFSET_P2] != 0)) { + return io_send_sw(SW_INCORRECT_P1P2); } // Fill version memmove(G_io_apdu_buffer, U2F_VERSION, U2F_VERSION_SIZE); offset += U2F_VERSION_SIZE; - // Fill status code - uint8_t *status = (G_io_apdu_buffer + offset); - offset += u2f_fill_status_code(SW_NO_ERROR, status); - - *tx = offset; + return io_send_response_pointer(G_io_apdu_buffer, offset, SW_NO_ERROR); } -static void u2f_handle_apdu_ctap2_proxy(unsigned char *flags, - unsigned short *tx, - uint32_t data_length) { - if ((G_io_apdu_buffer[OFFSET_P1] != 0) || (G_io_apdu_buffer[OFFSET_P2] != 0)) { - return u2f_send_error(SW_INCORRECT_P1P2, tx); +static int u2f_handle_apdu_ctap2_proxy(uint8_t *rx, int data_length) { + if ((rx[OFFSET_P1] != 0) || (rx[OFFSET_P2] != 0)) { + return io_send_sw(SW_INCORRECT_P1P2); } - ctap2Proxy.uiStarted = false; - ctap2Proxy.length = 0; - ctap2_handle_cmd_cbor(&G_io_u2f, G_io_apdu_buffer + OFFSET_DATA, data_length); - if (ctap2Proxy.uiStarted) { - *flags |= IO_ASYNCH_REPLY; - } - *tx = ctap2Proxy.length; + ctap2_handle_cmd_cbor(&G_io_u2f, rx + OFFSET_DATA, data_length); + return 0; } -void handleApdu(unsigned char *flags, unsigned short *tx, unsigned short length) { +int u2f_handle_apdu(uint8_t *rx, int data_length) { PRINTF("Media handleApdu %d\n", G_io_app.apdu_state); // Make sure cmd is detected as over U2F_CMD and not as CMD_IS_OVER_CTAP2_CBOR_CMD if (!CMD_IS_OVER_U2F_CMD) { - return u2f_send_error(SW_CONDITIONS_NOT_SATISFIED, tx); + return io_send_sw(SW_CONDITIONS_NOT_SATISFIED); } - int data_length = u2f_get_cmd_msg_data_length(G_io_apdu_buffer, length); + data_length = u2f_get_cmd_msg_data_length(rx, data_length); if (data_length < 0) { - return u2f_send_error(SW_WRONG_LENGTH, tx); + return io_send_sw(SW_WRONG_LENGTH); } if (G_io_apdu_buffer[OFFSET_CLA] != FIDO_CLA) { - return u2f_send_error(SW_CLA_NOT_SUPPORTED, tx); + return io_send_sw(SW_CLA_NOT_SUPPORTED); } + PRINTF("INS %d, P1 %d P2 %d L %d\n", + G_io_apdu_buffer[OFFSET_INS], + G_io_apdu_buffer[OFFSET_P1], + G_io_apdu_buffer[OFFSET_P2], + data_length); + switch (G_io_apdu_buffer[OFFSET_INS]) { case FIDO_INS_ENROLL: PRINTF("enroll\n"); - u2f_handle_apdu_enroll(flags, tx, data_length); + return u2f_handle_apdu_enroll(rx, data_length); break; case FIDO_INS_SIGN: PRINTF("sign\n"); - u2f_handle_apdu_sign(flags, tx, data_length); + return u2f_handle_apdu_sign(rx, data_length); break; case FIDO_INS_GET_VERSION: PRINTF("version\n"); - u2f_handle_apdu_get_version(flags, tx, data_length); + return u2f_handle_apdu_get_version(rx, data_length); break; case FIDO_INS_CTAP2_PROXY: PRINTF("ctap2_proxy\n"); - u2f_handle_apdu_ctap2_proxy(flags, tx, data_length); + return u2f_handle_apdu_ctap2_proxy(rx, data_length); break; default: PRINTF("unsupported\n"); - return u2f_send_error(SW_INS_NOT_SUPPORTED, tx); + return io_send_sw(SW_INS_NOT_SUPPORTED); } } diff --git a/src/ui_shared.c b/src/ui_shared.c index db31b4c8..cc3a2a8a 100644 --- a/src/ui_shared.c +++ b/src/ui_shared.c @@ -18,51 +18,36 @@ #include "ux.h" -#ifdef HAVE_RK_SUPPORT_SETTING +static void app_quit(void) { + // exit app here + os_sched_exit(-1); +} + #include "config.h" #include "ui_shared.h" +#if defined(HAVE_BAGL) +#ifdef HAVE_RK_SUPPORT_SETTING + static void display_warning(); static void display_settings(); -static void toogle_settings(); +static void toggle_settings(); UX_STEP_NOCB(ux_settings_enabling_flow_warning_step, bn_paging, {.title = "Warning", - .text = "Read carefully\n" - "before enabling\n" - "resident keys.\n" - "If you register\n" - "resident keys, they\n" - "will be lost whenever\n" - "you update this app\n" - "or the OS. You are\n" - "responsible for\n" - "maintaining access\n" - "to the services you\n" - "register with."}); - -UX_STEP_NOCB(ux_settings_disabling_flow_warning_step, - bn_paging, - {.title = "Warning", - .text = "Read before\n" - "disabling\n" - "resident keys."}); - -UX_STEP_NOCB(ux_settings_disabling_flow_text_1_step, - nnnn, - {.line1 = "This app will tell", - .line2 = "websites that", - .line3 = "resident keys are not", - .line4 = "available to use."}); - -UX_STEP_NOCB(ux_settings_disabling_flow_text_2_step, - nnn, - { - .line1 = "If they are required,", - .line2 = "the Security Key app", - .line3 = "won't be compatible.", - }); + .text = "Enabling resident\n" + "keys will store login\n" + "details on this device.\n" + "An OS or app update\n" + "will delete those\n" + "login details.\n" + "This will cause login\n" + "issues for your\n" + "connected accounts.\n" + "Are you sure you\n" + "want to enable\n" + "resident keys?"}); UX_STEP_CB(ux_settings_warning_flow_cancel_step, pb, @@ -74,19 +59,10 @@ UX_STEP_CB(ux_settings_warning_flow_cancel_step, UX_STEP_CB(ux_settings_enabling_flow_confirm_step, pbb, - toogle_settings(), - { - &C_icon_warning, - "Enable", - "resident keys", - }); - -UX_STEP_CB(ux_settings_disabling_flow_confirm_step, - pbb, - toogle_settings(), + toggle_settings(), { &C_icon_validate_14, - "Disable", + "Enable", "resident keys", }); @@ -95,22 +71,11 @@ UX_FLOW(ux_settings_enabling_flow, &ux_settings_warning_flow_cancel_step, &ux_settings_enabling_flow_confirm_step); -UX_FLOW(ux_settings_disabling_flow, - &ux_settings_disabling_flow_warning_step, - &ux_settings_disabling_flow_text_1_step, - &ux_settings_disabling_flow_text_2_step, - &ux_settings_disabling_flow_confirm_step, - &ux_settings_warning_flow_cancel_step); - static void display_warning() { - if (config_get_rk_enabled()) { - ux_flow_init(0, ux_settings_disabling_flow, NULL); - } else { - ux_flow_init(0, ux_settings_enabling_flow, NULL); - } + ux_flow_init(0, ux_settings_enabling_flow, NULL); } -static void toogle_settings() { +static void toggle_settings() { if (config_get_rk_enabled()) { config_set_rk_enabled(false); } else { @@ -119,7 +84,7 @@ static void toogle_settings() { display_settings(); } -UX_STEP_CB(ux_settings_flow_1_enabled_step, bn, display_warning(), {"Resident keys", "Enabled"}); +UX_STEP_CB(ux_settings_flow_1_enabled_step, bn, toggle_settings(), {"Resident keys", "Enabled"}); UX_STEP_CB(ux_settings_flow_1_disabled_step, bn, display_warning(), {"Resident keys", "Disabled"}); @@ -144,14 +109,11 @@ static void display_settings() { } #endif // HAVE_RK_SUPPORT_SETTING -UX_STEP_NOCB(ux_idle_flow_1_step, - nnn, - { - "Security Key", - "is ready to", - "authenticate", - }); +UX_STEP_NOCB(ux_idle_flow_1_step, pn, {&C_icon_security_key, "Security Key"}); UX_STEP_NOCB(ux_idle_flow_2_step, + nnnn, + {"Use for two-factor", "authentication and", "password-less", "log ins."}); +UX_STEP_NOCB(ux_idle_flow_3_step, bn, { "Version", @@ -159,7 +121,7 @@ UX_STEP_NOCB(ux_idle_flow_2_step, }); #ifdef HAVE_RK_SUPPORT_SETTING -UX_STEP_VALID(ux_idle_flow_3_step, +UX_STEP_VALID(ux_idle_flow_4_step, pb, display_settings(), { @@ -168,9 +130,9 @@ UX_STEP_VALID(ux_idle_flow_3_step, }); #endif // HAVE_RK_SUPPORT_SETTING -UX_STEP_CB(ux_idle_flow_4_step, +UX_STEP_CB(ux_idle_flow_5_step, pb, - os_sched_exit(-1), + app_quit(), { &C_icon_dashboard_x, "Quit app", @@ -178,16 +140,270 @@ UX_STEP_CB(ux_idle_flow_4_step, UX_FLOW(ux_idle_flow, &ux_idle_flow_1_step, &ux_idle_flow_2_step, -#ifdef HAVE_RK_SUPPORT_SETTING &ux_idle_flow_3_step, +#ifdef HAVE_RK_SUPPORT_SETTING + &ux_idle_flow_4_step, #endif // HAVE_RK_SUPPORT_SETTING - &ux_idle_flow_4_step); + &ux_idle_flow_5_step); void ui_idle(void) { // reserve a display stack slot if none yet if (G_ux.stack_count == 0) { ux_stack_push(); } - G_ux.externalText = NULL; ux_flow_init(0, ux_idle_flow, NULL); } + +#elif defined(HAVE_NBGL) + +#include "nbgl_use_case.h" +#include "nbgl_page.h" +#include "nbgl_layout.h" + +// 'About' menu + +static const char *const INFO_TYPES[] = {"Version", "Developer", "Copyright"}; +static const char *const INFO_CONTENTS[] = {APPVERSION, "Ledger", "(c) 2023 Ledger"}; + +#ifdef HAVE_RK_SUPPORT_SETTING + +static nbgl_layoutSwitch_t toggle; +static void ui_menu_settings_page(void); + +static void warning_choice(bool accept) { + if (accept) { + config_set_rk_enabled(true); + app_nbgl_status("Resident keys enabled", true, ui_menu_settings_page, NBGL_NO_TUNE); + } else { + ui_menu_settings_page(); + } +} + +static void settings_callback(int token, uint8_t index) { + UNUSED(index); + switch (token) { + case FIRST_USER_TOKEN: + if (config_get_rk_enabled()) { + config_set_rk_enabled(false); + } else { + nbgl_useCaseChoice(&C_warning64px, + "Enable resident keys?", + "Updating the OS or this app\n" + "will delete login info stored on\n" + "this device, causing login\n" + "issues.", + "Enable", + "Cancel", + warning_choice); + } + break; + default: + PRINTF("Should not happen!"); + break; + } +} +#endif // HAVE_RK_SUPPORT_SETTING + +static bool nav_callback(uint8_t page, nbgl_pageContent_t *content) { + if (page == 0) { + content->type = INFOS_LIST; + content->infosList.nbInfos = 3; + content->infosList.infoTypes = INFO_TYPES; + content->infosList.infoContents = INFO_CONTENTS; + } +#ifdef HAVE_RK_SUPPORT_SETTING + else if (page == 1) { + toggle.text = "Resident keys"; + toggle.subText = + "Stores login info on this\n" + "device's memory and lets you\n" + "login without username.\n\n" + "Caution: Updating the OS or\n" + "this app will delete the stored\n" + "login info, causing login issues\n" + "for connected accounts"; + toggle.token = FIRST_USER_TOKEN; + toggle.tuneId = TUNE_TAP_CASUAL; + toggle.initState = config_get_rk_enabled(); + content->type = SWITCHES_LIST; + content->switchesList.nbSwitches = 1; + content->switchesList.switches = &toggle; + } else { +#endif // HAVE_RK_SUPPORT_SETTING + return false; + } + return true; +} + +static void ui_menu_settings(uint8_t init_page) { + nbgl_useCaseSettings(APPNAME, + init_page, +#ifdef HAVE_RK_SUPPORT_SETTING + 2, +#else + 1, +#endif + false, + ui_idle, + nav_callback, + settings_callback); +} + +static void ui_menu_settings_home(void) { + ui_menu_settings(0); +} + +static void ui_menu_settings_page(void) { + ui_menu_settings(1); +} + +void ui_idle(void) { + nbgl_useCaseHome(APPNAME, + &C_icon_security_key_64px, + "Use this app for two-factor\nauthentication and\npassword-less log ins.", +#ifdef HAVE_RK_SUPPORT_SETTING + true, +#else + false, +#endif + ui_menu_settings_home, + app_quit); +} + +static nbgl_layout_t *layout; +static nbgl_page_t *pageContext; +static nbgl_choiceCallback_t onChoice; +static nbgl_callback_t onSelect; +static nbgl_callback_t onQuit; + +enum { TITLE_TOKEN = FIRST_USER_TOKEN, CHOICE_TOKEN, SELECT_TOKEN, QUIT_TOKEN }; + +static void onActionCallback(int token, uint8_t index) { + if (token == CHOICE_TOKEN && onChoice != NULL) { + // Release the review layout. + nbgl_layoutRelease(layout); + + onChoice(index == 0); + } else if (token == SELECT_TOKEN && onSelect != NULL) { + // Release the review layout. + nbgl_layoutRelease(layout); + + onSelect(); + } else if (token == QUIT_TOKEN && onQuit != NULL) { + // Release the review layout. + nbgl_layoutRelease(layout); + + onQuit(); + } +} + +void app_nbgl_start_review(uint8_t nb_pairs, + const nbgl_layoutTagValue_t *pairs, + const char *confirm_text, + nbgl_choiceCallback_t on_choice, + nbgl_callback_t on_select) { + nbgl_layoutDescription_t layoutDescription; + onChoice = on_choice; + onSelect = on_select; + + layoutDescription.modal = false; + layoutDescription.withLeftBorder = true; + layoutDescription.onActionCallback = onActionCallback; + layoutDescription.tapActionText = NULL; + layoutDescription.ticker.tickerCallback = NULL; + + layout = nbgl_layoutGet(&layoutDescription); + + nbgl_layoutBar_t bar; + bar.text = APPNAME; + bar.subText = NULL; + bar.iconRight = NULL; + bar.iconLeft = NULL; + bar.token = TITLE_TOKEN; + bar.centered = true; + bar.inactive = false; + bar.tuneId = NBGL_NO_TUNE; + nbgl_layoutAddTouchableBar(layout, &bar); + nbgl_layoutAddSeparationLine(layout); + + const nbgl_layoutTagValueList_t tagValueList = {.nbPairs = nb_pairs, + .pairs = pairs, + .smallCaseForValue = false, + .nbMaxLinesForValue = 0, + .wrapping = false}; + + nbgl_layoutAddTagValueList(layout, &tagValueList); + + if (onSelect) { + nbgl_layoutButton_t select_button_info = {.text = "Select another ID", + .icon = NULL, + .token = SELECT_TOKEN, + .style = WHITE_BACKGROUND, + .fittingContent = true, + .onBottom = false, + .tuneId = TUNE_TAP_CASUAL}; + + nbgl_layoutAddButton(layout, &select_button_info); + } + + nbgl_layoutChoiceButtons_t choice_buttons_info = {.bottomText = "Cancel", + .token = CHOICE_TOKEN, + .topText = confirm_text, + .style = ROUNDED_AND_FOOTER_STYLE, + .tuneId = TUNE_TAP_CASUAL}; + nbgl_layoutAddChoiceButtons(layout, &choice_buttons_info); + + nbgl_layoutDraw(layout); + + nbgl_refresh(); +} + +static void tickerCallback(void) { + nbgl_pageRelease(pageContext); + if (onQuit != NULL) { + onQuit(); + } +} + +void app_nbgl_status(const char *message, + bool is_success, + nbgl_callback_t on_quit, + tune_index_e tune) { + if (tune != NBGL_NO_TUNE) { + io_seproxyhal_play_tune(tune); + } + + nbgl_screenTickerConfiguration_t ticker = { + .tickerCallback = &tickerCallback, + .tickerIntervale = 0, // not periodic + .tickerValue = 3000 // 3 seconds + }; + onQuit = on_quit; + + nbgl_pageInfoDescription_t info = {.bottomButtonStyle = NO_BUTTON_STYLE, + .footerText = NULL, + .centeredInfo.icon = &C_round_cross_64px, + .centeredInfo.offsetY = 0, + .centeredInfo.onTop = false, + .centeredInfo.style = LARGE_CASE_INFO, + .centeredInfo.text1 = message, + .centeredInfo.text2 = NULL, + .centeredInfo.text3 = NULL, + .tapActionText = "", + .tapActionToken = QUIT_TOKEN, + .topRightStyle = NO_BUTTON_STYLE, + .actionButtonText = NULL, + .tuneId = TUNE_TAP_CASUAL}; + + if (is_success) { + info.centeredInfo.icon = &C_round_check_64px; + } else { + info.centeredInfo.icon = &C_round_warning_64px; + } + + pageContext = nbgl_pageDrawInfo(&onActionCallback, &ticker, &info); + + nbgl_refresh(); +} + +#endif diff --git a/tests/speculos/client.py b/tests/speculos/client.py index 066c7986..06a8bc5f 100644 --- a/tests/speculos/client.py +++ b/tests/speculos/client.py @@ -68,11 +68,8 @@ def __init__(self, transport, debug=False): self.u2f_hid_endpoint = (transport.upper() == "U2F") self.debug = debug - if self.u2f_hid_endpoint: - # Device answers should be fast - self.sock.settimeout(1) - else: - self.sock.settimeout(10) + # Set a timeout to allow tests to raise on socket rx failure + self.sock.settimeout(5) def write_packet(self, packet): packet = bytes(packet) @@ -245,10 +242,10 @@ def __init__(self, firmware, ragger_backend, navigator, transport, def start(self): try: - hid_dev = LedgerCtapHidConnection(self.USB_transport, - self.debug) + self.hid_dev = LedgerCtapHidConnection(self.USB_transport, + self.debug) descriptor = HidDescriptor("sim", 0, 0, 64, 64, "speculos", "0000") - self.dev = LedgerCtapHidDevice(descriptor, hid_dev, + self.dev = LedgerCtapHidDevice(descriptor, self.hid_dev, self.USB_transport, self.debug) self.ctap1 = LedgerCtap1(self.dev, self.model, self.navigator, diff --git a/tests/speculos/conftest.py b/tests/speculos/conftest.py index fde6e084..34ab150f 100644 --- a/tests/speculos/conftest.py +++ b/tests/speculos/conftest.py @@ -32,7 +32,7 @@ BACKENDS = ["speculos"] -DEVICES = ["nanox", "nanosp", "all"] +DEVICES = ["nanox", "nanosp", "stax", "all"] def pytest_addoption(parser): diff --git a/tests/speculos/ctap1_client.py b/tests/speculos/ctap1_client.py index c5fa3488..53295a63 100644 --- a/tests/speculos/ctap1_client.py +++ b/tests/speculos/ctap1_client.py @@ -7,7 +7,7 @@ from fido2.ctap1 import Ctap1, ApduError, RegistrationData, SignatureData from fido2.hid import CTAPHID -from utils import prepare_apdu +from utils import prepare_apdu, navigate class APDU(IntEnum): @@ -51,11 +51,17 @@ def __init__(self, device, model, navigator, debug=False): self.debug = debug def confirm(self): - instructions = [NavInsID.BOTH_CLICK] + if self.model == "stax": + instructions = [NavInsID.USE_CASE_CHOICE_CONFIRM] + else: + instructions = [NavInsID.BOTH_CLICK] self.navigator.navigate(instructions, screen_change_after_last_instruction=False) def wait_for_return_on_dashboard(self): + if self.model == "stax": + # 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() def parse_response(self, response): @@ -90,47 +96,33 @@ def register(self, client_param, app_param, user_accept=True, data = client_param + app_param self.send_apdu_nowait(ins=Ctap1.INS.REGISTER, data=data) - instructions = [] - if user_accept and check_screens is None: - # Validate blindly - instructions.append(NavInsID.BOTH_CLICK) - elif user_accept is not None: - # check_screens == None only supported when user accept - assert check_screens in ["full", "fast"] - - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 1 -> 2 - if self.model == "nanos": - instructions += [NavInsID.RIGHT_CLICK] * 4 - else: - instructions += [NavInsID.RIGHT_CLICK] * 2 - - if check_screens == "full": - # Screen 2 -> 0 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 0 -> 2 - instructions.append(NavInsID.LEFT_CLICK) - - if user_accept: - # Screen 2 -> 0 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - if check_screens: - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - elif instructions: - self.navigator.navigate(instructions, - screen_change_after_last_instruction=False) + text = None + nav_ins = None + val_ins = None + + if self.model.startswith("nano"): + nav_ins = NavInsID.RIGHT_CLICK + val_ins = [NavInsID.BOTH_CLICK] + if user_accept is not None: + if user_accept: + text = "Register" + else: + text = "Abort" + elif self.model == "stax": + if user_accept is not None: + if not user_accept: + val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + val_ins = [NavInsID.USE_CASE_CHOICE_CONFIRM] + + navigate(self.navigator, + user_accept, + check_screens, + False, # Never check cancel + compare_args, + text, + nav_ins, + val_ins) response = self.device.recv(CTAPHID.MSG) try: @@ -166,48 +158,33 @@ def authenticate(self, client_param, app_param, key_handle, p1 = U2F_P1.CHECK_IS_REGISTERED if check_only else U2F_P1.REQUEST_USER_PRESENCE self.send_apdu_nowait(ins=Ctap1.INS.AUTHENTICATE, p1=p1, data=data) - instructions = [] - if user_accept and check_screens is None: - # Validate blindly - instructions.append(NavInsID.BOTH_CLICK) - - elif user_accept is not None: - # check_screens == None only supported when user accept - assert check_screens in ["full", "fast"] - - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 1 -> 2 - if self.model == "nanos": - instructions += [NavInsID.RIGHT_CLICK] * 4 - else: - instructions += [NavInsID.RIGHT_CLICK] * 2 - - if check_screens == "full": - # Screen 2 -> 0 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 0 -> 2 - instructions.append(NavInsID.LEFT_CLICK) - - if user_accept: - # Screen 2 -> 0 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - if check_screens: - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - elif instructions: - self.navigator.navigate(instructions, - screen_change_after_last_instruction=False) + text = None + nav_ins = None + val_ins = None + + if self.model.startswith("nano"): + nav_ins = NavInsID.RIGHT_CLICK + val_ins = [NavInsID.BOTH_CLICK] + if user_accept is not None: + if user_accept: + text = "Login" + else: + text = "Abort" + elif self.model == "stax": + if user_accept is not None: + if not user_accept: + val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + val_ins = [NavInsID.USE_CASE_CHOICE_CONFIRM] + + navigate(self.navigator, + user_accept, + check_screens, + False, # Never check cancel + compare_args, + text, + nav_ins, + val_ins) response = self.device.recv(CTAPHID.MSG) try: diff --git a/tests/speculos/ctap2_client.py b/tests/speculos/ctap2_client.py index ae526f2d..e0fc4bb3 100644 --- a/tests/speculos/ctap2_client.py +++ b/tests/speculos/ctap2_client.py @@ -2,7 +2,7 @@ from typing import Mapping -from ragger.navigator import NavInsID +from ragger.navigator import NavInsID, NavIns from fido2 import cbor from fido2.ctap import CtapError @@ -11,8 +11,7 @@ from fido2.hid import CTAPHID from ctap1_client import APDU -from utils import get_rp_id_hash, fido_known_appid, prepare_apdu -from screen_size_utils import get_message_nb_screen +from utils import prepare_apdu, navigate class LedgerCtap2(Ctap2): @@ -36,11 +35,21 @@ def __init__(self, device, model, navigator, ctap2_u2f_proxy, debug=False): super().__init__(device) def confirm(self): - instructions = [NavInsID.BOTH_CLICK] + if self.model == "stax": + instructions = [NavInsID.USE_CASE_CHOICE_CONFIRM] + else: + instructions = [NavInsID.BOTH_CLICK] self.navigator.navigate(instructions, screen_change_after_last_instruction=False) def wait_for_return_on_dashboard(self): + if self.model == "stax": + # 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) + self.navigator.navigate([NavInsID.USE_CASE_STATUS_DISMISS], + screen_change_after_last_instruction=False) + self.navigator._backend.wait_for_home_screen() def send_cbor_nowait(self, cmd, data=None, *, event=None, on_keepalive=None): @@ -100,24 +109,6 @@ def parse_response(self, response): return decoded raise TypeError("Decoded value of wrong type") - def get_user_screen_instructions(self, user): - if "displayName" in user: - nb = get_message_nb_screen(self.model, user["displayName"][:64]) - elif "name" in user: - nb = get_message_nb_screen(self.model, user["name"][:64]) - elif "id" in user: - nb = get_message_nb_screen(self.model, user["id"].hex().upper()[:64]) - - return [NavInsID.RIGHT_CLICK] * nb - - def get_domain_screen_instructions(self, rp_id): - rp_id_hash = get_rp_id_hash(rp_id) - if rp_id_hash in fido_known_appid: - nb = get_message_nb_screen(self.model, fido_known_appid[rp_id_hash]) - else: - nb = get_message_nb_screen(self.model, rp_id) - return [NavInsID.RIGHT_CLICK] * nb - def make_credential(self, client_data_hash, rp, user, key_params, exclude_list=None, extensions=None, options=None, pin_uv_param=None, pin_uv_protocol=None, @@ -141,52 +132,33 @@ def make_credential(self, client_data_hash, rp, user, key_params, ctap_hid_cmd = self.send_cbor_nowait(cmd, data, event=event, on_keepalive=on_keepalive) - rk = False - if options and options.get("rk", False): - rk = True - - instructions = [] - if user_accept is not None: - if rk: - # Check resident key extra step 0bis content - # Screen 0 -> 0bis - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) + text = None + nav_ins = None + val_ins = None - # Screen 1 -> 2 - instructions += self.get_domain_screen_instructions(rp["id"]) - - # Screen 2 -> 3 - instructions += self.get_user_screen_instructions(user) - - if rk: - if user_accept: - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - - elif not user_accept: - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - elif check_cancel: - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - if check_screens: - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - elif instructions: - self.navigator.navigate(instructions, - screen_change_after_last_instruction=False) + if self.model.startswith("nano"): + nav_ins = NavInsID.RIGHT_CLICK + val_ins = [NavInsID.BOTH_CLICK] + if user_accept is not None: + if not user_accept: + text = "Don't register" + else: + text = "Register$" + elif self.model == "stax": + if user_accept is not None: + if not user_accept: + val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + val_ins = [NavInsID.USE_CASE_CHOICE_CONFIRM] + + navigate(self.navigator, + user_accept, + check_screens, + check_cancel, + compare_args, + text, + nav_ins, + val_ins) if check_cancel: # Send a cancel command @@ -205,14 +177,13 @@ def get_assertion(self, rp_id, client_data_hash, allow_list=None, extensions=None, options=None, pin_uv_param=None, pin_uv_protocol=None, *, event=None, on_keepalive=None, login_type="simple", user_accept=True, check_users=None, - check_screens=None, check_cancel=False, compare_args=None): + check_screens=None, check_cancel=False, compare_args=None, + select_user_idx=1): # Refresh navigator screen content reference self.navigator._backend.get_current_screen_content() assert login_type in ["simple", "multi", "none"] - TAG_RESP_CREDENTIAL = 0x01 - cmd = Ctap2.CMD.GET_ASSERTION data = args(rp_id, client_data_hash, @@ -225,90 +196,58 @@ def get_assertion(self, rp_id, client_data_hash, allow_list=None, ctap_hid_cmd = self.send_cbor_nowait(cmd, data, event=event, on_keepalive=on_keepalive) - instructions = [] - if user_accept and check_screens is None and login_type not in ["none", "multi"]: - # Validate blindly - instructions.append(NavInsID.BOTH_CLICK) - - elif user_accept is not None: - if login_type == "none": - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 1 -> 2 - instructions += self.get_domain_screen_instructions(rp_id) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - elif login_type == "multi": - if len(check_users) == 1: - raise ValueError("Found 1 user while expecting multiple") - - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 1 -> 2 - instructions += self.get_domain_screen_instructions(rp_id) - - for user in check_users: - # Screen 2 -> 3 - instructions += self.get_user_screen_instructions(user) - - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - # Upon confirmation, the flow is update with the next user - # and restarts at screen 2 presenting user data - - # Screen 2 -> 3 - instructions += self.get_user_screen_instructions(check_users[0]) - - if not user_accept: - # Go to step 5 - instructions.append(NavInsID.RIGHT_CLICK) - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - else: - if len(check_users) != 1: - raise ValueError("Found multiple users while expecting 1") - - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen 1 -> 2 - instructions += self.get_domain_screen_instructions(rp_id) - - # Screen 2 -> 3 - instructions += self.get_user_screen_instructions(check_users[0]) + text = None + nav_ins = None + val_ins = None + + if self.model.startswith("nano"): + nav_ins = NavInsID.RIGHT_CLICK + val_ins = [NavInsID.BOTH_CLICK] + if user_accept is not None: + if login_type == "none": + text = "Close" + + elif login_type == "multi": + if check_users and len(check_users) == 1: + raise ValueError("Found 1 user while expecting multiple") + + if user_accept: + text = f"Log in user {select_user_idx}/" + else: + text = "Reject" + + else: + if check_users and len(check_users) != 1: + raise ValueError("Found multiple users while expecting 1") + + if user_accept: + text = "Log in" + else: + text = "Reject" + elif self.model == "stax": + if user_accept is not None: + if login_type == "none": + val_ins = [NavInsID.TAPPABLE_CENTER_TAP] if not user_accept: - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - elif check_cancel: - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - - if check_screens: - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - elif instructions: - self.navigator.navigate(instructions, - screen_change_after_last_instruction=False) + val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + if login_type == "multi" and select_user_idx != 1: + assert select_user_idx <= 5 + val_ins = [NavIns(NavInsID.TOUCH, (200, 350)), + NavIns(NavInsID.TOUCH, (200, 40 + 90 * select_user_idx)), + NavInsID.USE_CASE_CHOICE_CONFIRM] + else: + val_ins = [NavInsID.USE_CASE_CHOICE_CONFIRM] + + navigate(self.navigator, + user_accept, + check_screens, + check_cancel, + compare_args, + text, + nav_ins, + val_ins) if check_cancel: # Send a cancel command @@ -321,129 +260,43 @@ def get_assertion(self, rp_id, client_data_hash, allow_list=None, response = self.parse_response(response) - if allow_list and len(allow_list) == 1 and TAG_RESP_CREDENTIAL not in response: - # Credential may be omitted if the allowList has exactly one Credential. - # But AssertionResponse() class doesn't support it. - # So we are patching it here by adding the credential in the response. - response[1] = allow_list[0] - return AssertionResponse.from_dict(response) - def get_assertion_with_txSimpleAuth(self, rp_id, client_data_hash, allow_list=None, - extensions=None, options=None, pin_uv_param=None, - pin_uv_protocol=None, *, event=None, on_keepalive=None, - login_type="simple", user_accept=True, check_users=None, - compare_args=None): - # Refresh navigator screen content reference - self.navigator._backend.get_current_screen_content() - - assert login_type in ["simple", "multi"] - """ - Copy of get_assertion() to keep it simpler as the ux is different with txSimpleAuth - and we don't want to merge he two function as this will create a mess for a somehow - deprecated extension. - """ - TAG_RESP_CREDENTIAL = 0x01 - - cmd = Ctap2.CMD.GET_ASSERTION - data = args(rp_id, - client_data_hash, - allow_list, - extensions, - options, - pin_uv_param, - pin_uv_protocol) - - ctap_hid_cmd = self.send_cbor_nowait(cmd, data, event=event, - on_keepalive=on_keepalive) - - instructions = [] - if user_accept is not None: - - # Screen 0 -> text_flow_0 - instructions.append(NavInsID.RIGHT_CLICK) - - # Screen text_flow_0 -> 1 - nb = get_message_nb_screen(self.model, extensions["txAuthSimple"]) - instructions += [NavInsID.RIGHT_CLICK] * nb - - # Screen 1 -> 2 - instructions += self.get_domain_screen_instructions(rp_id) - - # Screen 2 -> 3 - instructions += self.get_user_screen_instructions(check_users[0]) - - if login_type == "multi": - if not user_accept: - # Go to step 5 - instructions.append(NavInsID.RIGHT_CLICK) - instructions.append(NavInsID.RIGHT_CLICK) - else: - if not user_accept: - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - - # Validate - instructions.append(NavInsID.BOTH_CLICK) - - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - - response = self.device.recv(ctap_hid_cmd) - - if user_accept is not None: - self.wait_for_return_on_dashboard() - - response = self.parse_response(response) - - if allow_list and len(allow_list) == 1 and TAG_RESP_CREDENTIAL not in response: - # Credential may be omitted if the allowList has exactly one Credential. - # But AssertionResponse() class doesn't support it. - # So we are patching it here by adding the credential in the response. - response[1] = allow_list[0] - - return AssertionResponse.from_dict(response) - - def reset(self, *, event=None, on_keepalive=None, validate_step=0, - check_screens=None, check_cancel=False, compare_args=None): + def reset(self, *, event=None, on_keepalive=None, user_accept=True, + check_screens=False, check_cancel=False, compare_args=None): # Refresh navigator screen content reference self.navigator._backend.get_current_screen_content() ctap_hid_cmd = self.send_cbor_nowait(Ctap2.CMD.RESET, event=event, on_keepalive=on_keepalive) - instructions = [] - if validate_step != 3 and check_screens is None: - # Validate blindly - instructions.append(NavInsID.BOTH_CLICK) - - elif check_cancel: - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) + text = None + nav_ins = None + val_ins = None - else: - # check_screens == None only supported when user accept - assert check_screens in ["full", "fast"] - - instructions += [NavInsID.RIGHT_CLICK] * validate_step - - # Confirm - instructions.append(NavInsID.BOTH_CLICK) - - if check_screens: - assert compare_args - root, test_name = compare_args - # Over U2F endpoint (but not over HID) the device needs the - # response to be retrieved before continuing the UX flow. - self.navigator.navigate_and_compare(root, test_name, instructions, - screen_change_after_last_instruction=False) - elif instructions: - self.navigator.navigate(instructions, - screen_change_after_last_instruction=False) + if self.model.startswith("nano"): + nav_ins = NavInsID.RIGHT_CLICK + val_ins = [NavInsID.BOTH_CLICK] + if user_accept is not None: + if user_accept: + text = "Yes, delete" + else: + text = "No, don't delete" + elif self.model == "stax": + if user_accept is not None: + if not user_accept: + val_ins = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + val_ins = [NavInsID.USE_CASE_CHOICE_CONFIRM] + + navigate(self.navigator, + user_accept, + check_screens, + check_cancel, + compare_args, + text, + nav_ins, + val_ins) if check_cancel: # Send a cancel command diff --git a/tests/speculos/fido2/test_extension_hmac_secret.py b/tests/speculos/fido2/test_extension_hmac_secret.py index 118ae84a..429225af 100644 --- a/tests/speculos/fido2/test_extension_hmac_secret.py +++ b/tests/speculos/fido2/test_extension_hmac_secret.py @@ -39,6 +39,18 @@ def test_extensions_hmac_secret(client): hmac_secret1 = hmac_ext.process_get_output(assertion)["hmacGetSecret"] + # Retrieve another assertion with same salt but with UV + options = {"uv": True} + assertion = client.ctap2.get_assertion(rp["id"], client_data_hash, + allow_list, + options=options, + extensions=extensions) + + hmac_secret2 = hmac_ext.process_get_output(assertion)["hmacGetSecret"] + + # Compare the outputs + assert hmac_secret1["output1"] != hmac_secret2["output1"] + # Retrieve another assertion with two salts salt2 = generate_random_bytes(32) hmac_ext_data = hmac_ext.process_get_input({ diff --git a/tests/speculos/fido2/test_extension_txAuthSimple.py b/tests/speculos/fido2/test_extension_txAuthSimple.py deleted file mode 100644 index 359e596a..00000000 --- a/tests/speculos/fido2/test_extension_txAuthSimple.py +++ /dev/null @@ -1,132 +0,0 @@ -import pytest -import sys - -from fido2.ctap import CtapError -from fido2.webauthn import AuthenticatorData - -from client import TESTS_SPECULOS_DIR -from utils import generate_random_bytes, generate_get_assertion_params - -MAX_TX_AUTH_SIMPLE_SIZE = 200 - - -@pytest.mark.skipif( - "--fast" in sys.argv, - reason="running in fast mode", -) -def test_extensions_txAuthSimple(client, test_name): - info = client.ctap2.info - assert "txAuthSimple" in info.extensions - - # Create a credential - rp, credential_data, user = generate_get_assertion_params(client, ref=0) - - client_data_hash = generate_random_bytes(32) - message_list = ["Pretty short message", "Pretty short message" * 5, "Pretty short message" * 20] - for idx, message in enumerate(message_list): - compare_args = (TESTS_SPECULOS_DIR, test_name + "/" + str(idx)) - allow_list = [{"id": credential_data.credential_id, "type": "public-key"}] - extensions = {"txAuthSimple": message} - assertion = client.ctap2.get_assertion_with_txSimpleAuth(rp["id"], client_data_hash, - allow_list, extensions, - check_users=[user], - compare_args=compare_args) - - assertion.verify(client_data_hash, credential_data.public_key) - - expected_flags = AuthenticatorData.FLAG.USER_PRESENT - expected_flags |= AuthenticatorData.FLAG.EXTENSION_DATA - assert assertion.auth_data.flags == expected_flags - - if len(message) < MAX_TX_AUTH_SIMPLE_SIZE: - assert assertion.auth_data.extensions["txAuthSimple"] == message - else: - assert assertion.auth_data.extensions["txAuthSimple"] == '' - - # We are doing dangerous things with txAuthSimple: - # - adding an '\0' at the end in the CBOR buffer - # So check that we still can process the rest of the buffer correctly.. - - # check parsing of uv - client_data_hash = generate_random_bytes(32) - message = "Pretty short message" - allow_list = [{"id": credential_data.credential_id, "type": "public-key"}] - extensions = {"txAuthSimple": message} - options = {"uv": True} - compare_args = (TESTS_SPECULOS_DIR, test_name + "/" + str(len(message_list))) - assertion = client.ctap2.get_assertion_with_txSimpleAuth(rp["id"], client_data_hash, - allow_list, extensions, options, - check_users=[user], - compare_args=compare_args) - - assertion.verify(client_data_hash, credential_data.public_key) - expected_flags = AuthenticatorData.FLAG.USER_PRESENT - expected_flags |= AuthenticatorData.FLAG.USER_VERIFIED - expected_flags |= AuthenticatorData.FLAG.EXTENSION_DATA - assert assertion.auth_data.flags == expected_flags - assert assertion.auth_data.extensions["txAuthSimple"] == message - - -def test_extensions_txAuthSimple_user_refused(client, test_name): - compare_args = (TESTS_SPECULOS_DIR, test_name) - # Create a credential - rp, credential_data, user = generate_get_assertion_params(client, ref=0) - - client_data_hash = generate_random_bytes(32) - message = "Pretty short message" - - allow_list = [{"id": credential_data.credential_id, "type": "public-key"}] - extensions = {"txAuthSimple": message} - - with pytest.raises(CtapError) as e: - client.ctap2.get_assertion_with_txSimpleAuth(rp["id"], client_data_hash, - allow_list, extensions, - user_accept=False, - check_users=[user], - compare_args=compare_args) - assert e.value.code == CtapError.ERR.OPERATION_DENIED - - -def test_extensions_txAuthSimple_multiple(client, test_name): - allow_list = [] - registered_users = [] - users_credential_data = [] - rp = None - - # Register 3 users for the same RP - for idx in range(3): - rp, credential_data, user = generate_get_assertion_params(client, rp=rp, ref=idx) - allow_list.append({"id": credential_data.credential_id, "type": "public-key"}) - users_credential_data.append(credential_data) - registered_users.append(user) - - client_data_hash = generate_random_bytes(32) - message = "Pretty short message" - extensions = {"txAuthSimple": message} - - # Try without user accept - compare_args = (TESTS_SPECULOS_DIR, test_name + "/refused") - with pytest.raises(CtapError) as e: - client.ctap2.get_assertion_with_txSimpleAuth(rp["id"], client_data_hash, - allow_list, extensions, - login_type="multi", - user_accept=False, - check_users=registered_users, - compare_args=compare_args) - assert e.value.code == CtapError.ERR.OPERATION_DENIED - - # Try with user accept - compare_args = (TESTS_SPECULOS_DIR, test_name + "/accepted") - assertion = client.ctap2.get_assertion_with_txSimpleAuth(rp["id"], client_data_hash, - allow_list, extensions, - login_type="multi", - check_users=registered_users, - compare_args=compare_args) - - assertion.verify(client_data_hash, users_credential_data[0].public_key) - - assert assertion.auth_data.extensions["txAuthSimple"] == message - -# Todo add tests with -# - Validation of request: -# - CBOR fields errors: missing / bad type / bad length... diff --git a/tests/speculos/fido2/test_fido2_screens.py b/tests/speculos/fido2/test_fido2_screens.py index 4f2f306c..8091848e 100644 --- a/tests/speculos/fido2/test_fido2_screens.py +++ b/tests/speculos/fido2/test_fido2_screens.py @@ -8,55 +8,64 @@ from utils import generate_make_credentials_params from utils import HAVE_RK_SUPPORT_SETTING -from ragger.navigator import NavInsID +from ragger.navigator import NavInsID, NavIns @pytest.mark.skipif(not HAVE_RK_SUPPORT_SETTING, reason="settings not enable") def test_fido_screens_settings(client, test_name): - instructions = [] - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 1 -> 2 - instructions.append(NavInsID.RIGHT_CLICK) - # enter settings - instructions.append(NavInsID.BOTH_CLICK) - - # Enable and check "Enabling" warning message - instructions.append(NavInsID.BOTH_CLICK) - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 1 -> 2 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 2 -> 3 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 4 -> 5 - instructions.append(NavInsID.RIGHT_CLICK) - # Confirm - instructions.append(NavInsID.BOTH_CLICK) - - # Disable and check "Disabling" warning message - instructions.append(NavInsID.BOTH_CLICK) - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 1 -> 2 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 2 -> 3 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 3 -> 4 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 4 -> 3 - instructions.append(NavInsID.LEFT_CLICK) - # Approve - instructions.append(NavInsID.BOTH_CLICK) - - # leave settings - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - # confirm - instructions.append(NavInsID.BOTH_CLICK) + + if client.model.startswith("nano"): + instructions = [] + # Screen 0 -> 1 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 1 -> 2 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 2 -> 3 + instructions.append(NavInsID.RIGHT_CLICK) + # enter settings + instructions.append(NavInsID.BOTH_CLICK) + + # Enable and check "Enabling" warning message + instructions.append(NavInsID.BOTH_CLICK) + # Screen 0 -> 1 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 1 -> 2 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 2 -> 3 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 3 -> 4 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 4 -> 5 + instructions.append(NavInsID.RIGHT_CLICK) + # Confirm + instructions.append(NavInsID.BOTH_CLICK) + + # Disable + instructions.append(NavInsID.BOTH_CLICK) + + # leave settings + # Screen 0 -> 1 + instructions.append(NavInsID.RIGHT_CLICK) + # confirm + instructions.append(NavInsID.BOTH_CLICK) + else: + instructions = [ + # Enter in the settings + NavInsID.USE_CASE_HOME_SETTINGS, + NavInsID.USE_CASE_SETTINGS_NEXT, + + # Enable and skip "Enabling" message + NavIns(NavInsID.CHOICE_CHOOSE, (1,)), + NavInsID.USE_CASE_CHOICE_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS, + + # Disable + NavIns(NavInsID.CHOICE_CHOOSE, (1,)), + + # Leave settings + NavInsID.USE_CASE_SETTINGS_MULTI_PAGE_EXIT, + ] client.navigator.navigate_and_compare(TESTS_SPECULOS_DIR, test_name, instructions, screen_change_before_first_instruction=False) diff --git a/tests/speculos/fido2/test_get_assertion.py b/tests/speculos/fido2/test_get_assertion.py index f4331180..1cf2a148 100644 --- a/tests/speculos/fido2/test_get_assertion.py +++ b/tests/speculos/fido2/test_get_assertion.py @@ -144,6 +144,27 @@ def test_get_assertion_no_credentials(client, test_name): assert e.value.code == CtapError.ERR.NO_CREDENTIALS +def test_get_assertion_no_credentials_no_up(client, test_name): + options = {"up": False} + client_data_hash, rp, _user, _key_params = generate_make_credentials_params(ref=0) + + # Try without allow_list + with pytest.raises(CtapError) as e: + client.ctap2.get_assertion(rp["id"], client_data_hash, + options=options, + user_accept=None) + assert e.value.code == CtapError.ERR.NO_CREDENTIALS + + # Try with unknown credential in allow_list + client_data_hash, _rp, _user, _key_params = generate_make_credentials_params() + allow_list = [{"id": generate_random_bytes(32), "type": "public-key"}] + with pytest.raises(CtapError) as e: + client.ctap2.get_assertion(rp["id"], client_data_hash, allow_list, + options=options, + user_accept=None) + assert e.value.code == CtapError.ERR.NO_CREDENTIALS + + def test_get_assertion_wrong_id(client, test_name): compare_args = (TESTS_SPECULOS_DIR, test_name) rp, credential_data, _user = generate_get_assertion_params(client, ref=0) @@ -205,7 +226,7 @@ def test_get_assertion_allow_list(client, test_name): allow_list.append({"id": credential_data.credential_id, "type": "public-key"}) # Register 3 users for a known RP - for idx in range(3): + for idx in range(1, 4): client_data_hash, _, user, key_params = generate_make_credentials_params(ref=idx) attestation = client.ctap2.make_credential(client_data_hash, rp, @@ -227,9 +248,10 @@ def test_get_assertion_allow_list(client, test_name): user_accept=True, check_users=registered_users, check_screens="full", - compare_args=compare_args) + compare_args=compare_args, + select_user_idx=3) - credential_data = users_credential_data[0] + credential_data = users_credential_data[2] assertion.verify(client_data_hash, credential_data.public_key) with pytest.raises(InvalidSignature): @@ -346,6 +368,43 @@ def test_get_assertion_duplicate_allow_list_entries(client, test_name): assertion.verify(client_data_hash, credential_data.public_key) +def test_get_assertion_retrocompat(client): + # Make sure that app update will still works with previously generated + # key handles and public key already shared with some Relying Party + credential_data_raw_hex = "58b44d0b0a7cf33afd48f7153c871352" + credential_data_raw_hex += "0059022363d64e399b805bbc4cfe2600" + credential_data_raw_hex += "84d80df32145a6f7adda491249fc742e" + credential_data_raw_hex += "9dec78f4f45060ec450e7af01e4167c7" + credential_data_raw_hex += "539b1df5da0355230fa94b7f7ea34a8b" + credential_data_raw_hex += "14e2b565960f183a9cb33aafa11a23fa" + credential_data_raw_hex += "bafe399a758dbdcb4dfaa8a501020326" + credential_data_raw_hex += "2001215820aae619de9564ae171df2f0" + credential_data_raw_hex += "de25f513e1cb80d17433fb3cf84ca5c8" + credential_data_raw_hex += "16bfd4bd9e22582089199cc93633d93a" + credential_data_raw_hex += "c3275a46a33f9266eee0a14f66c154e7" + credential_data_raw_hex += "802677f5eb1cbdcf" + credential_data_raw = bytearray.fromhex(credential_data_raw_hex) + + user_id_hex = "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" + + user = { + 'id': bytearray.fromhex(user_id_hex), + 'name': 'My user name' + } + + rp_id = "webctap.myservice.com" + + credential_data = AttestedCredentialData(credential_data_raw) + + client_data_hash = generate_random_bytes(32) + allow_list = [{"id": credential_data.credential_id, "type": "public-key"}] * 2 + assertion = client.ctap2.get_assertion(rp_id, client_data_hash, + allow_list, + check_users=[user]) + + assertion.verify(client_data_hash, credential_data.public_key) + + # Todo add tests with # - Validation of request: # - CBOR fields errors: missing / bad type / bad length... diff --git a/tests/speculos/fido2/test_get_info.py b/tests/speculos/fido2/test_get_info.py index c8bb75be..9c3230d5 100644 --- a/tests/speculos/fido2/test_get_info.py +++ b/tests/speculos/fido2/test_get_info.py @@ -23,8 +23,7 @@ def test_get_info_extensions(client): info = client.ctap2.info assert "hmac-secret" in info.extensions - assert "txAuthSimple" in info.extensions - assert len(info.extensions) == 2 + assert len(info.extensions) == 1 def test_get_info_aaguid(client): @@ -42,6 +41,10 @@ def test_get_info_aaguid(client): hs = sha256("Ledger FIDO 2 1.0 NanoS+".encode('utf-8')).hexdigest() hs = hs[:32] # Keep only the 16 first bytes assert hs == info.aaguid.hex() + elif client.model == "stax": + 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() else: raise ValueError("Unhandled model") diff --git a/tests/speculos/fido2/test_make_credential.py b/tests/speculos/fido2/test_make_credential.py index b78f3a9a..02fb91c9 100644 --- a/tests/speculos/fido2/test_make_credential.py +++ b/tests/speculos/fido2/test_make_credential.py @@ -57,14 +57,22 @@ def test_make_credential_uv(client, test_name): check_screens="full", compare_args=compare_args) - assert attestation.fmt == "packed" - assert len(attestation.auth_data) >= 77 - expected_flags = AuthenticatorData.FLAG.USER_PRESENT expected_flags |= AuthenticatorData.FLAG.USER_VERIFIED expected_flags |= AuthenticatorData.FLAG.ATTESTED assert attestation.auth_data.flags == expected_flags + options = {"uv": False} + attestation = client.ctap2.make_credential(client_data_hash, + rp, + user, + key_params, + options=options) + + expected_flags = AuthenticatorData.FLAG.USER_PRESENT + expected_flags |= AuthenticatorData.FLAG.ATTESTED + assert attestation.auth_data.flags == expected_flags + def test_make_credential_up(client, test_name): compare_args = (TESTS_SPECULOS_DIR, test_name) @@ -95,6 +103,19 @@ def test_make_credential_up(client, test_name): compare_args=compare_args) +def test_make_credential_rk(client, test_name): + # Check that option RK can be passed with False value when not supporting RK. + # This is used on Firefox on Linux and Mac and required by the spec. + client_data_hash, rp, user, key_params = generate_make_credentials_params(ref=0) + options = {"rk": False} + client.ctap2.make_credential(client_data_hash, + rp, + user, + key_params, + options=options, + user_accept=True) + + def test_make_credential_exclude_list(client, test_name): compare_args = (TESTS_SPECULOS_DIR, test_name) # First check with an absent credential in exclude list diff --git a/tests/speculos/fido2/test_option_rk.py b/tests/speculos/fido2/test_option_rk.py index 34a9078c..a84123ef 100644 --- a/tests/speculos/fido2/test_option_rk.py +++ b/tests/speculos/fido2/test_option_rk.py @@ -9,7 +9,7 @@ from utils import generate_get_assertion_params from utils import HAVE_RK_SUPPORT_SETTING -from ragger.navigator import NavInsID +from ragger.navigator import NavInsID, NavIns @pytest.mark.skipif(not HAVE_RK_SUPPORT_SETTING, @@ -39,25 +39,42 @@ def enable_rk_option(client): if not HAVE_RK_SUPPORT_SETTING: raise ValueError("rk and setting not enabled") - instructions = [ - # Enter in the settings - NavInsID.RIGHT_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.BOTH_CLICK, - - # Enable and skip "Enabling" message - NavInsID.BOTH_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.RIGHT_CLICK, - NavInsID.BOTH_CLICK, - - # Leave settings - NavInsID.RIGHT_CLICK, - NavInsID.BOTH_CLICK - ] + if client.model.startswith("nano"): + instructions = [ + # Enter in the settings + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, + + # Enable and skip "Enabling" message + NavInsID.BOTH_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK, + + # Leave settings + NavInsID.RIGHT_CLICK, + NavInsID.BOTH_CLICK + ] + else: + instructions = [ + # Enter in the settings + NavInsID.USE_CASE_HOME_SETTINGS, + NavInsID.USE_CASE_SETTINGS_NEXT, + + # Enable and skip "Enabling" message + NavIns(NavInsID.CHOICE_CHOOSE, (1,)), + NavInsID.USE_CASE_CHOICE_CONFIRM, + NavInsID.USE_CASE_STATUS_DISMISS, + + # Leave settings + NavInsID.USE_CASE_SETTINGS_MULTI_PAGE_EXIT, + ] + client.navigator.navigate(instructions, screen_change_before_first_instruction=False) diff --git a/tests/speculos/fido2/test_reset.py b/tests/speculos/fido2/test_reset.py index d7b23f65..4f3cf3e0 100644 --- a/tests/speculos/fido2/test_reset.py +++ b/tests/speculos/fido2/test_reset.py @@ -1,5 +1,4 @@ import pytest -import sys from fido2.ctap import CtapError @@ -9,11 +8,8 @@ def test_reset(client, test_name): - for validate_step in [0, 2, 3]: - if validate_step == 2 and "--fast" in sys.argv: - # Skip additional step on fast mode - continue - compare_args = (TESTS_SPECULOS_DIR, test_name + "/" + str(validate_step)) + for user_accept in [True, False]: + compare_args = (TESTS_SPECULOS_DIR, test_name + "/" + str(user_accept)) # Create a credential rp, credential_data, _ = generate_get_assertion_params(client) @@ -23,9 +19,9 @@ def test_reset(client, test_name): allow_list = [{"id": credential_data.credential_id, "type": "public-key"}] client.ctap2.get_assertion(rp["id"], client_data_hash, allow_list) - if validate_step == 3: # Abort + if not user_accept: # Abort with pytest.raises(CtapError) as e: - client.ctap2.reset(validate_step=validate_step, check_screens="full", + client.ctap2.reset(user_accept=user_accept, check_screens=True, compare_args=compare_args) assert e.value.code == CtapError.ERR.OPERATION_DENIED @@ -35,7 +31,7 @@ def test_reset(client, test_name): client.ctap2.get_assertion(rp["id"], client_data_hash, allow_list) else: # Confirm - client.ctap2.reset(validate_step=validate_step, check_screens="full", + client.ctap2.reset(user_accept=user_accept, check_screens=True, compare_args=compare_args) client_data_hash = generate_random_bytes(32) @@ -59,6 +55,6 @@ def test_reset_cancel(client, test_name): compare_args = (TESTS_SPECULOS_DIR, test_name) with pytest.raises(CtapError) as e: - client.ctap2.reset(check_screens="full", check_cancel=True, - compare_args=compare_args) + client.ctap2.reset(check_screens=True, check_cancel=True, + user_accept=None, compare_args=compare_args) assert e.value.code == CtapError.ERR.KEEPALIVE_CANCEL diff --git a/tests/speculos/requirements.txt b/tests/speculos/requirements.txt index bda766c4..2b6d673a 100644 --- a/tests/speculos/requirements.txt +++ b/tests/speculos/requirements.txt @@ -1,3 +1,4 @@ -ragger[tests,speculos]>=1.7.0 +ragger[tests,speculos]>=1.11.5 pytest>=6.1.1,<7.0.0 fido2==1.0.0 +cryptography>=3.3.1,<4.0.0 diff --git a/tests/speculos/screen_size_utils.py b/tests/speculos/screen_size_utils.py deleted file mode 100644 index 71c05441..00000000 --- a/tests/speculos/screen_size_utils.py +++ /dev/null @@ -1,169 +0,0 @@ -import math - -# The code in this file is dirtily adapted from SDK: -# lib_ux/src/ux_layout_paging_compute.c -# But it stll allow to compute the number of line needed -# to display a regular text on the Nano device screen. - - -PIXEL_PER_LINE = 114 -NANOS_FIRST_CHAR = 0x20 -NANOS_LAST_CHAR = 0x7F - -nanos_characters_width = [ - 3 << 4 | 3, # code 0020 - 3 << 4 | 3, # code 0021 - 4 << 4 | 6, # code 0022 - 7 << 4 | 7, # code 0023 - 6 << 4 | 6, # code 0024 - 9 << 4 | 10, # code 0025 - 8 << 4 | 9, # code 0026 - 2 << 4 | 3, # code 0027 - 3 << 4 | 4, # code 0028 - 3 << 4 | 4, # code 0029 - 6 << 4 | 6, # code 002A - 6 << 4 | 6, # code 002B - 3 << 4 | 3, # code 002C - 4 << 4 | 4, # code 002D - 3 << 4 | 3, # code 002E - 4 << 4 | 5, # code 002F - 6 << 4 | 8, # code 0030 - 6 << 4 | 6, # code 0031 - 6 << 4 | 7, # code 0032 - 6 << 4 | 7, # code 0033 - 8 << 4 | 8, # code 0034 - 6 << 4 | 6, # code 0035 - 6 << 4 | 8, # code 0036 - 6 << 4 | 7, # code 0037 - 6 << 4 | 8, # code 0038 - 6 << 4 | 8, # code 0039 - 3 << 4 | 3, # code 003A - 3 << 4 | 3, # code 003B - 6 << 4 | 5, # code 003C - 6 << 4 | 6, # code 003D - 6 << 4 | 5, # code 003E - 5 << 4 | 6, # code 003F - 10 << 4 | 10, # code 0040 - 7 << 4 | 8, # code 0041 - 7 << 4 | 7, # code 0042 - 7 << 4 | 7, # code 0043 - 8 << 4 | 8, # code 0044 - 6 << 4 | 6, # code 0045 - 6 << 4 | 6, # code 0046 - 8 << 4 | 8, # code 0047 - 8 << 4 | 8, # code 0048 - 3 << 4 | 4, # code 0049 - 4 << 4 | 5, # code 004A - 7 << 4 | 8, # code 004B - 6 << 4 | 6, # code 004C - 10 << 4 | 11, # code 004D - 8 << 4 | 9, # code 004E - 9 << 4 | 9, # code 004F - 7 << 4 | 7, # code 0050 - 9 << 4 | 9, # code 0051 - 7 << 4 | 8, # code 0052 - 6 << 4 | 6, # code 0053 - 7 << 4 | 6, # code 0054 - 8 << 4 | 8, # code 0055 - 7 << 4 | 6, # code 0056 - 10 << 4 | 11, # code 0057 - 6 << 4 | 8, # code 0058 - 6 << 4 | 7, # code 0059 - 6 << 4 | 7, # code 005A - 4 << 4 | 5, # code 005B - 4 << 4 | 5, # code 005C - 4 << 4 | 5, # code 005D - 6 << 4 | 7, # code 005E - 5 << 4 | 6, # code 005F - 6 << 4 | 7, # code 0060 - 6 << 4 | 7, # code 0061 - 7 << 4 | 7, # code 0062 - 5 << 4 | 6, # code 0063 - 7 << 4 | 7, # code 0064 - 6 << 4 | 7, # code 0065 - 5 << 4 | 6, # code 0066 - 6 << 4 | 7, # code 0067 - 7 << 4 | 7, # code 0068 - 3 << 4 | 4, # code 0069 - 4 << 4 | 5, # code 006A - 6 << 4 | 7, # code 006B - 3 << 4 | 4, # code 006C - 10 << 4 | 10, # code 006D - 7 << 4 | 7, # code 006E - 7 << 4 | 7, # code 006F - 7 << 4 | 7, # code 0070 - 7 << 4 | 7, # code 0071 - 4 << 4 | 5, # code 0072 - 5 << 4 | 6, # code 0073 - 4 << 4 | 5, # code 0074 - 7 << 4 | 7, # code 0075 - 6 << 4 | 7, # code 0076 - 9 << 4 | 10, # code 0077 - 6 << 4 | 7, # code 0078 - 6 << 4 | 7, # code 0079 - 5 << 4 | 6, # code 007A - 4 << 4 | 5, # code 007B - 6 << 4 | 6, # code 007C - 4 << 4 | 5, # code 007D - 6 << 4 | 6, # code 007E - 7 << 4 | 6, # code 007F -] - - -def is_delimiter(char): - return char in [' ', '\n', '\t', '-', '_'] - - -# This function is used to retrieve the width of a line of text. -def se_compute_line_width_light(text): - line_width = 0 - - for current_char in text: - char_code = ord(current_char) - if (char_code < NANOS_FIRST_CHAR or char_code > NANOS_LAST_CHAR): - if (current_char == '\n' or current_char == '\r'): - break - - else: - # consider only Regular. - line_width += (nanos_characters_width[char_code - NANOS_FIRST_CHAR] >> 0x04) & 0x0F - - return line_width - - -def get_message_nb_screen(model, message): - if model == "nanos": - nb_lines = 1 - else: - nb_lines = 3 - - offset = 0 - lines = 0 - while offset < len(message): - line_start_offset = offset - last_word_delim = 0 - line_offset = line_start_offset - while line_offset < len(message): - if se_compute_line_width_light(message[offset: line_offset + 1]) > PIXEL_PER_LINE: - break - - c = message[line_offset] - if is_delimiter(c): - last_word_delim = line_offset - line_offset += 1 - - # new line, don't go further - if c == '\n': - break - - # if not splitting line onto a word delimiter, then cut at the previous word_delim, - # adjust len accordingly - if line_offset != len(message) and last_word_delim != 0: - if not is_delimiter(message[line_offset - 1]) and \ - not is_delimiter(message[line_offset]): - line_offset = last_word_delim - - lines += 1 - offset = line_offset - - return math.ceil(lines / nb_lines) diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00001.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00001.png deleted file mode 100644 index 18fd0e15..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00002.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00002.png deleted file mode 100644 index f0feb274..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00003.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00004.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00004.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00005.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00005.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00006.png b/tests/speculos/snapshots/nanosp/test_authenticate_ok/00006.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_ok/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00004.png b/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00004.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00005.png b/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00005.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_authenticate_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00000.png deleted file mode 100644 index 4bd95842..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00001.png deleted file mode 100644 index 01f7f83f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/0/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00000.png deleted file mode 100644 index 4bd95842..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00001.png deleted file mode 100644 index e6f2764f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00002.png deleted file mode 100644 index 22a3cd72..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00003.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00004.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00005.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00005.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/1/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00000.png deleted file mode 100644 index 4bd95842..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00001.png deleted file mode 100644 index a70d53f6..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00002.png deleted file mode 100644 index f6281e07..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00003.png deleted file mode 100644 index cf491279..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00004.png deleted file mode 100644 index 808241d7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00005.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00005.png deleted file mode 100644 index cf2bf14c..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00006.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00006.png deleted file mode 100644 index 8f0a8a72..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00007.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00007.png deleted file mode 100644 index fc71cff8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00008.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00008.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00009.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00009.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00010.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00010.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/2/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00000.png deleted file mode 100644 index 4bd95842..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00001.png deleted file mode 100644 index 01f7f83f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple/3/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00000.png deleted file mode 100644 index d12afcf3..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00001.png deleted file mode 100644 index 01f7f83f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00003.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/accepted/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00000.png deleted file mode 100644 index d12afcf3..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00001.png deleted file mode 100644 index 01f7f83f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00003.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00005.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00005.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00006.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00006.png deleted file mode 100644 index 7a8040fa..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_multiple/refused/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00000.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00000.png deleted file mode 100644 index 4bd95842..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00001.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00001.png deleted file mode 100644 index 01f7f83f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00002.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00003.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00004.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00005.png b/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00005.png deleted file mode 100644 index 7a8040fa..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_extensions_txAuthSimple_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/get/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_short_id/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00002.png index b8d980a3..c30baad2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00003.png index 6bec2793..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00004.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00002.png index b8d980a3..954be377 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00003.png index 6bec2793..8a735253 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_display_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/get/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_icon/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00002.png index 87b0abf4..be14aeb7 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00003.png index c27b8008..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00004.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00002.png index 87b0abf4..4fc1292a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00003.png index c27b8008..6839e807 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00002.png index b8d980a3..c30baad2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00003.png index 6bec2793..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00004.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00000.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00000.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00001.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00001.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00002.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00002.png index b8d980a3..954be377 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00002.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00003.png b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00003.png index 6bec2793..8a735253 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00003.png and b/tests/speculos/snapshots/nanosp/test_fido2_screens_user_name_and_display_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00000.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00000.png index 60174013..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00000.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00001.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00001.png index 7b1ea9f7..b80e5a01 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00001.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00002.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00002.png index ab88bd3a..12341d7d 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00002.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00003.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00003.png index ba9d2519..ab88bd3a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00003.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00004.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00004.png index bff2d6b3..ba9d2519 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00004.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00004.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00005.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00005.png index 4396a8a4..3b4ca7d4 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00005.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00005.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00006.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00006.png index 5abfef6e..fbfb8bf1 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00006.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00006.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00007.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00007.png index 14cdaf3e..742f87fd 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00007.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00007.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00008.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00008.png index 2278bf49..d98ce709 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00008.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00008.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00009.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00009.png index b8af2548..2278bf49 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00009.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00009.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00010.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00010.png index 49ff1ca0..213978d5 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00010.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00010.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00011.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00011.png index 7e7acbbd..49ff1ca0 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00011.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00011.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00012.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00012.png index 5d85f7a4..ba9d2519 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00012.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00012.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00013.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00013.png index a82d1858..61861f29 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00013.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00013.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00014.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00014.png index 112329cc..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00014.png and b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00014.png differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00015.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00015.png deleted file mode 100644 index c0e3760f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00015.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00016.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00016.png deleted file mode 100644 index 112329cc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00016.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00017.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00017.png deleted file mode 100644 index ba9d2519..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00017.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00018.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00018.png deleted file mode 100644 index 61861f29..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00018.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00019.png b/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00019.png deleted file mode 100644 index 60174013..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_fido_screens_settings/00019.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion/00003.png and b/tests/speculos/snapshots/nanosp/test_get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00000.png index 1efb51a0..00e7ef19 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00001.png index 25a68fc2..1f77b5a5 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00002.png index a8483b15..37cb58d0 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00003.png index d47ca34f..00a36180 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00003.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00004.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00004.png index e0928b19..9f9509b0 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00004.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00004.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00005.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00005.png deleted file mode 100644 index 6605f4d8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00006.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00007.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00007.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00008.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00008.png deleted file mode 100644 index d895c591..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00009.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00010.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00010.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00011.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00011.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00012.png b/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_allow_list/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_cancel/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_cancel/00000.png deleted file mode 100644 index 2f21a5a5..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00003.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_duplicate_allow_list_entries/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00000.png index 19e6ca5f..b8571f18 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00001.png index 95d51d1d..2148054a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00002.png index db7a3c7f..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_get_assertion_no_credentials/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00003.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_user_refused/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00003.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_uv/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00000.png index 19e6ca5f..b8571f18 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00001.png index 95d51d1d..2148054a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00002.png index db7a3c7f..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_id/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00000.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00000.png index 19e6ca5f..b8571f18 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00000.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00001.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00001.png index fccf4705..2148054a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00001.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00002.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00002.png index db7a3c7f..3cd3826c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00002.png and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00003.png b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_get_assertion_wrong_rp/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_cancel/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_cancel/00000.png deleted file mode 100644 index 81b00e8f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential_certificate/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential_exclude_list/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_up/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_up/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_up/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential_up/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_up/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential_up/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_up/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential_up/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_up/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential_up/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_up/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential_up/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential_user_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00000.png b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00000.png and b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00001.png b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00001.png and b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00002.png b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_make_credential_uv/00002.png and b/tests/speculos/snapshots/nanosp/test_make_credential_uv/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00002.png index 069d4c34..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_allow_list/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00002.png index 069d4c34..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/get_rk/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00000.png index 872c6510..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00001.png index 35d93365..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00002.png index bdc71c81..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00003.png index 069d4c34..4f49ad8c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00004.png deleted file mode 100644 index 7e4593dc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00005.png deleted file mode 100644 index 2772a7bb..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/0/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00000.png index 1efb51a0..00e7ef19 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00002.png index 88aef012..534e59eb 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00004.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00005.png deleted file mode 100644 index fb750960..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00006.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00007.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00007.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00008.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00008.png deleted file mode 100644 index 88aef012..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00009.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00000.png index 1efb51a0..00e7ef19 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00002.png index 88aef012..534e59eb 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00004.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00005.png deleted file mode 100644 index fb750960..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00006.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00007.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00007.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00008.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00008.png deleted file mode 100644 index 88aef012..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00009.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/get_rk/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00000.png index 872c6510..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00001.png index 35d93365..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00002.png index bdc71c81..39b235f4 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00003.png index 660acdc7..4f49ad8c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00004.png deleted file mode 100644 index 7e4593dc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00005.png deleted file mode 100644 index 2772a7bb..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/1/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00000.png index 1efb51a0..00e7ef19 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00002.png index ded2f2da..60321eac 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00004.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00005.png deleted file mode 100644 index 04f2c129..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00006.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00007.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00007.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00008.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00008.png deleted file mode 100644 index 43b4548a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00009.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00010.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00010.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00011.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00011.png deleted file mode 100644 index ded2f2da..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00012.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_allow_list/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00000.png index 1efb51a0..00e7ef19 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00002.png index ded2f2da..60321eac 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00004.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00005.png deleted file mode 100644 index 04f2c129..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00006.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00007.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00007.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00008.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00008.png deleted file mode 100644 index 43b4548a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00009.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00010.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00010.png deleted file mode 100644 index e0928b19..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00011.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00011.png deleted file mode 100644 index ded2f2da..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00012.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/get_rk/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00000.png index 872c6510..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00001.png index 35d93365..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00002.png index bdc71c81..e1d4d355 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00003.png index a66f5162..4f49ad8c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00004.png deleted file mode 100644 index 7e4593dc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00005.png deleted file mode 100644 index 2772a7bb..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_get_assertion/2/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_make_cred_exclude_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png index d14d9444..9eb8e306 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00000.png index 872c6510..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00001.png index 35d93365..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00002.png index bdc71c81..9eb8e306 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00003.png index d14d9444..4f49ad8c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00004.png deleted file mode 100644 index 7e4593dc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00005.png deleted file mode 100644 index 2772a7bb..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/1/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png index bdc71c81..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png index b1b289cb..ff2b2d62 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png index d47ca34f..a7bb5944 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00000.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00000.png index 872c6510..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00000.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00001.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00001.png index 35d93365..012dd07f 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00001.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00002.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00002.png index bdc71c81..ff2b2d62 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00002.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00003.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00003.png index b1b289cb..4f49ad8c 100644 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00003.png and b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00004.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00004.png deleted file mode 100644 index 7e4593dc..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00005.png b/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00005.png deleted file mode 100644 index 2772a7bb..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_option_rk_overwrite_get_assertion/2/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00001.png b/tests/speculos/snapshots/nanosp/test_register_ok/00001.png deleted file mode 100644 index 18fd0e15..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00002.png b/tests/speculos/snapshots/nanosp/test_register_ok/00002.png deleted file mode 100644 index f0feb274..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00003.png b/tests/speculos/snapshots/nanosp/test_register_ok/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00004.png b/tests/speculos/snapshots/nanosp/test_register_ok/00004.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00005.png b/tests/speculos/snapshots/nanosp/test_register_ok/00005.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_ok/00006.png b/tests/speculos/snapshots/nanosp/test_register_ok/00006.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_ok/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_user_refused/00004.png b/tests/speculos/snapshots/nanosp/test_register_user_refused/00004.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_register_user_refused/00005.png b/tests/speculos/snapshots/nanosp/test_register_user_refused/00005.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_register_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/0/00000.png b/tests/speculos/snapshots/nanosp/test_reset/0/00000.png deleted file mode 100644 index 9039a39a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/0/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/2/00000.png b/tests/speculos/snapshots/nanosp/test_reset/2/00000.png deleted file mode 100644 index 9039a39a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/2/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/2/00001.png b/tests/speculos/snapshots/nanosp/test_reset/2/00001.png deleted file mode 100644 index ee730bc0..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/2/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/2/00002.png b/tests/speculos/snapshots/nanosp/test_reset/2/00002.png deleted file mode 100644 index eb0f0b46..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/2/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/3/00000.png b/tests/speculos/snapshots/nanosp/test_reset/3/00000.png deleted file mode 100644 index 9039a39a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/3/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/3/00001.png b/tests/speculos/snapshots/nanosp/test_reset/3/00001.png deleted file mode 100644 index ee730bc0..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/3/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/3/00002.png b/tests/speculos/snapshots/nanosp/test_reset/3/00002.png deleted file mode 100644 index eb0f0b46..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/3/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/3/00003.png b/tests/speculos/snapshots/nanosp/test_reset/3/00003.png deleted file mode 100644 index ab7fce4a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset/3/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/False/00000.png b/tests/speculos/snapshots/nanosp/test_reset/False/00000.png new file mode 100644 index 00000000..45213853 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_reset/False/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/False/00001.png b/tests/speculos/snapshots/nanosp/test_reset/False/00001.png new file mode 100644 index 00000000..b3303980 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_reset/False/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/False/00002.png b/tests/speculos/snapshots/nanosp/test_reset/False/00002.png new file mode 100644 index 00000000..d63be9f6 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_reset/False/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/True/00000.png b/tests/speculos/snapshots/nanosp/test_reset/True/00000.png new file mode 100644 index 00000000..45213853 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_reset/True/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_reset/True/00001.png b/tests/speculos/snapshots/nanosp/test_reset/True/00001.png new file mode 100644 index 00000000..b3303980 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_reset/True/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_reset_cancel/00000.png b/tests/speculos/snapshots/nanosp/test_reset_cancel/00000.png deleted file mode 100644 index 9039a39a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_reset_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00001.png deleted file mode 100644 index 4b592815..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00002.png deleted file mode 100644 index 32fe861b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00004.png deleted file mode 100644 index c4f92bd8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/0_Binance/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png deleted file mode 100644 index 2fa88cd6..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png deleted file mode 100644 index a8fed2c7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png deleted file mode 100644 index ed159d84..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png deleted file mode 100644 index e9fd305a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png deleted file mode 100644 index d84210d2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png deleted file mode 100644 index 614a7658..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png deleted file mode 100644 index 0fc0d22a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png deleted file mode 100644 index 0e7b43bd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png deleted file mode 100644 index 08a4fead..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png deleted file mode 100644 index 66298cec..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png deleted file mode 100644 index 4a061bb9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png deleted file mode 100644 index 242de8bf..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00001.png deleted file mode 100644 index 0859d749..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00002.png deleted file mode 100644 index fdb26fde..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00004.png deleted file mode 100644 index f190f6b7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/14_Google/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png deleted file mode 100644 index e54213f9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png deleted file mode 100644 index d0b3c602..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png deleted file mode 100644 index 7b0f6f86..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png deleted file mode 100644 index 9d81dd11..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png deleted file mode 100644 index 6ba347fd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png deleted file mode 100644 index bb0f246b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png deleted file mode 100644 index 9575e247..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png deleted file mode 100644 index 27814f29..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png deleted file mode 100644 index f736aeb1..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png deleted file mode 100644 index 75eb8f7b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png deleted file mode 100644 index 50777ad7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png deleted file mode 100644 index 0bcbcd74..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png deleted file mode 100644 index 45707f65..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png deleted file mode 100644 index 5581615d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png deleted file mode 100644 index b298a1d6..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png deleted file mode 100644 index 5030de5d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png deleted file mode 100644 index 49b1c5e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png deleted file mode 100644 index f8237d13..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png deleted file mode 100644 index 7a232a4a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png deleted file mode 100644 index fd01969e..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png deleted file mode 100644 index 991f126a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png deleted file mode 100644 index 44c08422..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png deleted file mode 100644 index 09dd2a4a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png deleted file mode 100644 index cc68854b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png deleted file mode 100644 index 5fc91814..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png deleted file mode 100644 index bbb4542a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png deleted file mode 100644 index aaccf2d2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png deleted file mode 100644 index 796df3f1..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png deleted file mode 100644 index 9b162e4c..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png deleted file mode 100644 index 9cab04f4..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png deleted file mode 100644 index 418d44ba..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png deleted file mode 100644 index 15a82285..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png deleted file mode 100644 index f5de6ae3..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png deleted file mode 100644 index 5fbba8e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png deleted file mode 100644 index 6b9e035a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png deleted file mode 100644 index 2cc6807f..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png deleted file mode 100644 index 64897c2e..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png deleted file mode 100644 index 00be30bd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png deleted file mode 100644 index e60602bd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png deleted file mode 100644 index c4461abf..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png deleted file mode 100644 index b5f040ca..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png deleted file mode 100644 index 4741d89e..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png deleted file mode 100644 index de80d8e4..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png deleted file mode 100644 index 66771ee1..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png deleted file mode 100644 index 041a0123..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png deleted file mode 100644 index 68e575ec..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png deleted file mode 100644 index 1cf441b2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png deleted file mode 100644 index 041a0123..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00001.png deleted file mode 100644 index f5d68fdd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00002.png deleted file mode 100644 index 17c528d4..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00004.png deleted file mode 100644 index 78d29b81..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/8_Duo/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png deleted file mode 100644 index 5f9a34e0..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png deleted file mode 100644 index a58ad3e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png deleted file mode 100644 index 8dcceb37..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png deleted file mode 100644 index 4b592815..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png deleted file mode 100644 index 32fe861b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png deleted file mode 100644 index 1d760789..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png deleted file mode 100644 index 2fa88cd6..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png deleted file mode 100644 index a8fed2c7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png deleted file mode 100644 index cc73b3ce..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png deleted file mode 100644 index e9fd305a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png deleted file mode 100644 index d84210d2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png deleted file mode 100644 index f90b329c..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png deleted file mode 100644 index 0fc0d22a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png deleted file mode 100644 index 0e7b43bd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png deleted file mode 100644 index ab5bb8e3..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png deleted file mode 100644 index 66298cec..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png deleted file mode 100644 index 4a061bb9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png deleted file mode 100644 index 5986f1d8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00001.png deleted file mode 100644 index 0859d749..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00002.png deleted file mode 100644 index fdb26fde..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00004.png deleted file mode 100644 index 9d3caa1d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/14_Google/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png deleted file mode 100644 index e54213f9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png deleted file mode 100644 index d0b3c602..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png deleted file mode 100644 index 80a30a88..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png deleted file mode 100644 index 9d81dd11..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png deleted file mode 100644 index 6ba347fd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png deleted file mode 100644 index 444f1314..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png deleted file mode 100644 index 9575e247..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png deleted file mode 100644 index 27814f29..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png deleted file mode 100644 index c5246fd3..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png deleted file mode 100644 index 75eb8f7b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png deleted file mode 100644 index 50777ad7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png deleted file mode 100644 index 4ebae923..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png deleted file mode 100644 index 45707f65..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png deleted file mode 100644 index 5581615d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png deleted file mode 100644 index 82bc163d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png deleted file mode 100644 index 5030de5d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png deleted file mode 100644 index 49b1c5e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png deleted file mode 100644 index 7addadc2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png deleted file mode 100644 index 7a232a4a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png deleted file mode 100644 index fd01969e..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png deleted file mode 100644 index efdc4d6a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png deleted file mode 100644 index 44c08422..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png deleted file mode 100644 index 09dd2a4a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png deleted file mode 100644 index 4a51302b..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png deleted file mode 100644 index 5fc91814..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png deleted file mode 100644 index bbb4542a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png deleted file mode 100644 index 9605a188..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png deleted file mode 100644 index 796df3f1..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png deleted file mode 100644 index 9b162e4c..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png deleted file mode 100644 index e0c761a9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png deleted file mode 100644 index 418d44ba..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png deleted file mode 100644 index 15a82285..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png deleted file mode 100644 index 3d70affe..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png deleted file mode 100644 index 5fbba8e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png deleted file mode 100644 index 6b9e035a..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png deleted file mode 100644 index 14e8b9d9..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png deleted file mode 100644 index 64897c2e..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png deleted file mode 100644 index 00be30bd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png deleted file mode 100644 index c21cbeab..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png deleted file mode 100644 index c4461abf..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png deleted file mode 100644 index b5f040ca..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png deleted file mode 100644 index 6aa3ea92..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png deleted file mode 100644 index de80d8e4..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png deleted file mode 100644 index 66771ee1..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png deleted file mode 100644 index e0840788..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png deleted file mode 100644 index 68e575ec..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png deleted file mode 100644 index 1cf441b2..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png deleted file mode 100644 index e0840788..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png deleted file mode 100644 index f5d68fdd..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png deleted file mode 100644 index 17c528d4..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png deleted file mode 100644 index ba694b8d..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png deleted file mode 100644 index 5f9a34e0..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png deleted file mode 100644 index a58ad3e7..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png deleted file mode 100644 index c41cfbf8..00000000 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00000.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00000.png index 60174013..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00000.png and b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00000.png differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00001.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00001.png index 7b1ea9f7..b80e5a01 100644 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00001.png and b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00001.png differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00002.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00002.png index ab88bd3a..12341d7d 100644 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00002.png and b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00002.png differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00003.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00003.png index 90a68074..ab88bd3a 100644 Binary files a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00003.png and b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00003.png differ diff --git a/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00004.png b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00004.png new file mode 100644 index 00000000..90a68074 Binary files /dev/null and b/tests/speculos/snapshots/nanosp/test_u2f_screens_idle/00004.png differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00001.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00001.png deleted file mode 100644 index 18fd0e15..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00002.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00002.png deleted file mode 100644 index f0feb274..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00003.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00004.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00004.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00005.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00005.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_ok/00006.png b/tests/speculos/snapshots/nanox/test_authenticate_ok/00006.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_ok/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00004.png b/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00004.png deleted file mode 100644 index 490b9fd8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00005.png b/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00005.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_authenticate_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00000.png deleted file mode 100644 index 14687e33..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00001.png deleted file mode 100644 index 3707371c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/0/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00000.png deleted file mode 100644 index 14687e33..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00001.png deleted file mode 100644 index f17e74c9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00002.png deleted file mode 100644 index ceeeaf72..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00003.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00004.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00005.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00005.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/1/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00000.png deleted file mode 100644 index 14687e33..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00001.png deleted file mode 100644 index b42dcc1c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00002.png deleted file mode 100644 index c7c6e965..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00003.png deleted file mode 100644 index 95d1da19..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00004.png deleted file mode 100644 index 6667040d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00005.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00005.png deleted file mode 100644 index 07a4b75e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00006.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00006.png deleted file mode 100644 index 7d7a0a08..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00007.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00007.png deleted file mode 100644 index d49a307c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00008.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00008.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00009.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00009.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00010.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00010.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/2/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00000.png deleted file mode 100644 index 14687e33..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00001.png deleted file mode 100644 index 3707371c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple/3/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00000.png deleted file mode 100644 index 76c6f028..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00001.png deleted file mode 100644 index 3707371c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00003.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/accepted/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00000.png deleted file mode 100644 index 76c6f028..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00001.png deleted file mode 100644 index 3707371c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00003.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00005.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00005.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00006.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00006.png deleted file mode 100644 index 503abd20..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_multiple/refused/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00000.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00000.png deleted file mode 100644 index 14687e33..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00001.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00001.png deleted file mode 100644 index 3707371c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00002.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00002.png deleted file mode 100644 index 95d51d1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00003.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00003.png deleted file mode 100644 index e7c3536f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00004.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00005.png b/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00005.png deleted file mode 100644 index 503abd20..00000000 Binary files a/tests/speculos/snapshots/nanox/test_extensions_txAuthSimple_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/get/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_short_id/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00002.png index b8d980a3..c30baad2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00003.png index 6bec2793..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00004.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00002.png index b8d980a3..954be377 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00003.png index 6bec2793..8a735253 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_display_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/get/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00002.png index 17c55a6e..7d28f0a8 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_icon/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00002.png index 87b0abf4..be14aeb7 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00003.png index c27b8008..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00004.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00002.png index 87b0abf4..4fc1292a 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00003.png index c27b8008..6839e807 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00002.png index b8d980a3..c30baad2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00003.png index 6bec2793..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00004.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00004.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/get/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00000.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00000.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00001.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00001.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00002.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00002.png index b8d980a3..954be377 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00002.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00003.png b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00003.png index 6bec2793..8a735253 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00003.png and b/tests/speculos/snapshots/nanox/test_fido2_screens_user_name_and_display_name/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00000.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00000.png index 9e224783..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00000.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00001.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00001.png index 7b1ea9f7..338339a2 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00001.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00002.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00002.png index d885fe67..12341d7d 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00002.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00003.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00003.png index 88f6b100..d885fe67 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00003.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00004.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00004.png index e4bd7713..88f6b100 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00004.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00004.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00005.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00005.png index db85053f..7bca7c44 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00005.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00005.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00006.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00006.png index 0bba9f5d..65bdbbc5 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00006.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00006.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00007.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00007.png index e67db4ec..02316ab8 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00007.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00007.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00008.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00008.png index 2278bf49..920390fe 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00008.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00008.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00009.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00009.png index 240105e0..2278bf49 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00009.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00009.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00010.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00010.png index a1d29576..66f370dc 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00010.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00010.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00011.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00011.png index d539d872..a1d29576 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00011.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00011.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00012.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00012.png index 11051941..88f6b100 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00012.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00012.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00013.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00013.png index 3f693616..61861f29 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00013.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00013.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00014.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00014.png index ddaa2e2a..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00014.png and b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00014.png differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00015.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00015.png deleted file mode 100644 index c0e3760f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00015.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00016.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00016.png deleted file mode 100644 index ddaa2e2a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00016.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00017.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00017.png deleted file mode 100644 index 88f6b100..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00017.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00018.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00018.png deleted file mode 100644 index 61861f29..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00018.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00019.png b/tests/speculos/snapshots/nanox/test_fido_screens_settings/00019.png deleted file mode 100644 index 9e224783..00000000 Binary files a/tests/speculos/snapshots/nanox/test_fido_screens_settings/00019.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion/00003.png and b/tests/speculos/snapshots/nanox/test_get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00000.png index 641bf2af..1d6995ac 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00001.png index 25a68fc2..1f77b5a5 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00002.png index a8483b15..55059fa6 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00003.png index d47ca34f..ea250a35 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00003.png and b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00004.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00004.png index a5758ff6..a73c9bca 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00004.png and b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00004.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00005.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00005.png deleted file mode 100644 index 6605f4d8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00006.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00007.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00007.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00008.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00008.png deleted file mode 100644 index d895c591..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00009.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00010.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00010.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00011.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00011.png deleted file mode 100644 index a8483b15..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00012.png b/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_allow_list/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_cancel/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_cancel/00000.png deleted file mode 100644 index 2f21a5a5..00000000 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00003.png and b/tests/speculos/snapshots/nanox/test_get_assertion_duplicate_allow_list_entries/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00000.png index 5d5c8862..491f84a1 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00001.png index 95d51d1d..8e330c92 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00002.png index db7a3c7f..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_get_assertion_no_credentials/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00003.png and b/tests/speculos/snapshots/nanox/test_get_assertion_user_refused/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_uv/00003.png and b/tests/speculos/snapshots/nanox/test_get_assertion_uv/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00000.png index 5d5c8862..491f84a1 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00001.png index 95d51d1d..8e330c92 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00002.png index db7a3c7f..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_id/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00000.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00000.png index 5d5c8862..491f84a1 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00000.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00001.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00001.png index fccf4705..8e330c92 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00001.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00002.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00002.png index db7a3c7f..3cd3826c 100644 Binary files a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00002.png and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00003.png b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00003.png new file mode 100644 index 00000000..db7a3c7f Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_get_assertion_wrong_rp/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential/00000.png b/tests/speculos/snapshots/nanox/test_make_credential/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential/00001.png b/tests/speculos/snapshots/nanox/test_make_credential/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential/00002.png b/tests/speculos/snapshots/nanox/test_make_credential/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_cancel/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_cancel/00000.png deleted file mode 100644 index 81b00e8f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00001.png b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00002.png b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_certificate/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential_certificate/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00001.png b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00002.png b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential_exclude_list/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_up/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_up/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_up/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential_up/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_up/00001.png b/tests/speculos/snapshots/nanox/test_make_credential_up/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_up/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential_up/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_up/00002.png b/tests/speculos/snapshots/nanox/test_make_credential_up/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_up/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential_up/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00001.png b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00002.png b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential_user_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_uv/00000.png b/tests/speculos/snapshots/nanox/test_make_credential_uv/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_uv/00000.png and b/tests/speculos/snapshots/nanox/test_make_credential_uv/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_uv/00001.png b/tests/speculos/snapshots/nanox/test_make_credential_uv/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_uv/00001.png and b/tests/speculos/snapshots/nanox/test_make_credential_uv/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_make_credential_uv/00002.png b/tests/speculos/snapshots/nanox/test_make_credential_uv/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_make_credential_uv/00002.png and b/tests/speculos/snapshots/nanox/test_make_credential_uv/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00002.png index 069d4c34..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_allow_list/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00002.png index 069d4c34..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/get_rk/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00000.png index a293ff9c..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00001.png index bea7d936..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00002.png index 4016fc69..a5df67ea 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00003.png index 069d4c34..62f92d19 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00004.png deleted file mode 100644 index a16329a4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00005.png deleted file mode 100644 index 70c4f163..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/0/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00000.png index 641bf2af..1d6995ac 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00002.png index 88aef012..44ad7367 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00004.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00005.png deleted file mode 100644 index fb750960..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00006.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00007.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00007.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00008.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00008.png deleted file mode 100644 index 88aef012..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00009.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00000.png index 641bf2af..1d6995ac 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00002.png index 88aef012..44ad7367 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00004.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00005.png deleted file mode 100644 index fb750960..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00006.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00007.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00007.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00008.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00008.png deleted file mode 100644 index 88aef012..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00009.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/get_rk/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00000.png index a293ff9c..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00001.png index bea7d936..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00002.png index 4016fc69..39b235f4 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00003.png index 660acdc7..62f92d19 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00004.png deleted file mode 100644 index a16329a4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00005.png deleted file mode 100644 index 70c4f163..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/1/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00000.png index 641bf2af..1d6995ac 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00002.png index ded2f2da..cc8930dc 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00004.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00005.png deleted file mode 100644 index 04f2c129..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00006.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00007.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00007.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00008.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00008.png deleted file mode 100644 index 43b4548a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00009.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00010.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00010.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00011.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00011.png deleted file mode 100644 index ded2f2da..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00012.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_allow_list/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00000.png index 641bf2af..1d6995ac 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00002.png index ded2f2da..cc8930dc 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00003.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00004.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00005.png deleted file mode 100644 index 04f2c129..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00006.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00006.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00007.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00007.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00007.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00008.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00008.png deleted file mode 100644 index 43b4548a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00008.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00009.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00009.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00009.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00010.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00010.png deleted file mode 100644 index a5758ff6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00010.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00011.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00011.png deleted file mode 100644 index ded2f2da..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00011.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00012.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00012.png deleted file mode 100644 index d47ca34f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/get_rk/00012.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00000.png index a293ff9c..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00001.png index bea7d936..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00002.png index 4016fc69..e1d4d355 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00003.png index a66f5162..62f92d19 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00004.png deleted file mode 100644 index a16329a4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00005.png deleted file mode 100644 index 70c4f163..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_get_assertion/2/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00000.png index 81b00e8f..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00001.png index 95d51d1d..5055d3f2 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00002.png index e7c3536f..64faf5be 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_make_cred_exclude_refused/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png index d14d9444..9eb8e306 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00000.png index a293ff9c..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00001.png index bea7d936..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00002.png index 4016fc69..9eb8e306 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00003.png index d14d9444..62f92d19 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00004.png deleted file mode 100644 index a16329a4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00005.png deleted file mode 100644 index 70c4f163..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/1/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png index 2f21a5a5..c4f4afef 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png index 4016fc69..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png index b1b289cb..ff2b2d62 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png index d47ca34f..2751bcf4 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/get_assertion/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00000.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00000.png index a293ff9c..d6133aff 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00000.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00001.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00001.png index bea7d936..64416f61 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00001.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00002.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00002.png index 4016fc69..ff2b2d62 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00002.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00003.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00003.png index b1b289cb..62f92d19 100644 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00003.png and b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00004.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00004.png deleted file mode 100644 index a16329a4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00005.png b/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00005.png deleted file mode 100644 index 70c4f163..00000000 Binary files a/tests/speculos/snapshots/nanox/test_option_rk_overwrite_get_assertion/2/make/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00001.png b/tests/speculos/snapshots/nanox/test_register_ok/00001.png deleted file mode 100644 index 18fd0e15..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00002.png b/tests/speculos/snapshots/nanox/test_register_ok/00002.png deleted file mode 100644 index f0feb274..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00003.png b/tests/speculos/snapshots/nanox/test_register_ok/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00004.png b/tests/speculos/snapshots/nanox/test_register_ok/00004.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00005.png b/tests/speculos/snapshots/nanox/test_register_ok/00005.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_ok/00006.png b/tests/speculos/snapshots/nanox/test_register_ok/00006.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_ok/00006.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_user_refused/00004.png b/tests/speculos/snapshots/nanox/test_register_user_refused/00004.png deleted file mode 100644 index e5843621..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_user_refused/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_register_user_refused/00005.png b/tests/speculos/snapshots/nanox/test_register_user_refused/00005.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_register_user_refused/00005.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/0/00000.png b/tests/speculos/snapshots/nanox/test_reset/0/00000.png deleted file mode 100644 index bf5aee4f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/0/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/2/00000.png b/tests/speculos/snapshots/nanox/test_reset/2/00000.png deleted file mode 100644 index bf5aee4f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/2/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/2/00001.png b/tests/speculos/snapshots/nanox/test_reset/2/00001.png deleted file mode 100644 index a31fcfa5..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/2/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/2/00002.png b/tests/speculos/snapshots/nanox/test_reset/2/00002.png deleted file mode 100644 index eb0f0b46..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/2/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/3/00000.png b/tests/speculos/snapshots/nanox/test_reset/3/00000.png deleted file mode 100644 index bf5aee4f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/3/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/3/00001.png b/tests/speculos/snapshots/nanox/test_reset/3/00001.png deleted file mode 100644 index a31fcfa5..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/3/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/3/00002.png b/tests/speculos/snapshots/nanox/test_reset/3/00002.png deleted file mode 100644 index eb0f0b46..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/3/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/3/00003.png b/tests/speculos/snapshots/nanox/test_reset/3/00003.png deleted file mode 100644 index ab7fce4a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset/3/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_reset/False/00000.png b/tests/speculos/snapshots/nanox/test_reset/False/00000.png new file mode 100644 index 00000000..45213853 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_reset/False/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_reset/False/00001.png b/tests/speculos/snapshots/nanox/test_reset/False/00001.png new file mode 100644 index 00000000..ef83d4c9 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_reset/False/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_reset/False/00002.png b/tests/speculos/snapshots/nanox/test_reset/False/00002.png new file mode 100644 index 00000000..cd110d51 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_reset/False/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_reset/True/00000.png b/tests/speculos/snapshots/nanox/test_reset/True/00000.png new file mode 100644 index 00000000..45213853 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_reset/True/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_reset/True/00001.png b/tests/speculos/snapshots/nanox/test_reset/True/00001.png new file mode 100644 index 00000000..ef83d4c9 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_reset/True/00001.png differ diff --git a/tests/speculos/snapshots/nanox/test_reset_cancel/00000.png b/tests/speculos/snapshots/nanox/test_reset_cancel/00000.png deleted file mode 100644 index bf5aee4f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_reset_cancel/00000.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00001.png deleted file mode 100644 index 4b592815..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00002.png deleted file mode 100644 index 32fe861b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00004.png deleted file mode 100644 index c4f92bd8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/0_Binance/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png deleted file mode 100644 index 2fa88cd6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png deleted file mode 100644 index a8fed2c7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png deleted file mode 100644 index ed159d84..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/10_Fedora/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png deleted file mode 100644 index e9fd305a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png deleted file mode 100644 index d84210d2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png deleted file mode 100644 index 614a7658..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/11_Gandi/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png deleted file mode 100644 index 0fc0d22a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png deleted file mode 100644 index 0e7b43bd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png deleted file mode 100644 index 08a4fead..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/12_GitHub/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png deleted file mode 100644 index 66298cec..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png deleted file mode 100644 index 4a061bb9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png deleted file mode 100644 index 242de8bf..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/13_GitLab/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00001.png deleted file mode 100644 index 0859d749..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00002.png deleted file mode 100644 index fdb26fde..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00004.png deleted file mode 100644 index f190f6b7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/14_Google/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png deleted file mode 100644 index e54213f9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png deleted file mode 100644 index d0b3c602..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png deleted file mode 100644 index 7b0f6f86..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/15_Keeper/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png deleted file mode 100644 index 9d81dd11..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png deleted file mode 100644 index 6ba347fd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png deleted file mode 100644 index bb0f246b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/16_LastPass/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png deleted file mode 100644 index 9575e247..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png deleted file mode 100644 index 27814f29..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png deleted file mode 100644 index 0ae7d6d3..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/17_Slush Pool/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png deleted file mode 100644 index 75eb8f7b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png deleted file mode 100644 index 50777ad7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png deleted file mode 100644 index c1a02b85..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/18_Stripe/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png deleted file mode 100644 index 45707f65..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png deleted file mode 100644 index 5581615d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png deleted file mode 100644 index b298a1d6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png deleted file mode 100644 index 5030de5d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png deleted file mode 100644 index 49b1c5e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png deleted file mode 100644 index f8237d13..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/1_Bitbucket/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png deleted file mode 100644 index 7a232a4a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png deleted file mode 100644 index fd01969e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png deleted file mode 100644 index 991f126a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png deleted file mode 100644 index 44c08422..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png deleted file mode 100644 index 09dd2a4a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png deleted file mode 100644 index cc68854b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png deleted file mode 100644 index 5fc91814..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png deleted file mode 100644 index bbb4542a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png deleted file mode 100644 index aaccf2d2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png deleted file mode 100644 index 796df3f1..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png deleted file mode 100644 index 9b162e4c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png deleted file mode 100644 index 9cab04f4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png deleted file mode 100644 index 418d44ba..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png deleted file mode 100644 index 15a82285..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png deleted file mode 100644 index f5de6ae3..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/2_Bitfinex/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png deleted file mode 100644 index 5fbba8e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png deleted file mode 100644 index 6b9e035a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png deleted file mode 100644 index 2cc6807f..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/3_Bitwarden/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png deleted file mode 100644 index 64897c2e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png deleted file mode 100644 index 00be30bd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png deleted file mode 100644 index e60602bd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/4_Coinbase/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png deleted file mode 100644 index c4461abf..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png deleted file mode 100644 index b5f040ca..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png deleted file mode 100644 index 4741d89e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/5_Dashlane/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png deleted file mode 100644 index de80d8e4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png deleted file mode 100644 index 66771ee1..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png deleted file mode 100644 index 041a0123..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/6_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png deleted file mode 100644 index 68e575ec..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png deleted file mode 100644 index 1cf441b2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png deleted file mode 100644 index 041a0123..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/7_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00001.png deleted file mode 100644 index f5d68fdd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00002.png deleted file mode 100644 index 17c528d4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00004.png deleted file mode 100644 index 78d29b81..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/8_Duo/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png deleted file mode 100644 index 5f9a34e0..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png deleted file mode 100644 index a58ad3e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png deleted file mode 100644 index d96bd937..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png deleted file mode 100644 index 8dcceb37..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/log/9_FastMail/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png deleted file mode 100644 index 4b592815..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png deleted file mode 100644 index 32fe861b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png deleted file mode 100644 index 1d760789..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/0_Binance/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png deleted file mode 100644 index 2fa88cd6..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png deleted file mode 100644 index a8fed2c7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png deleted file mode 100644 index cc73b3ce..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/10_Fedora/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png deleted file mode 100644 index e9fd305a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png deleted file mode 100644 index d84210d2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png deleted file mode 100644 index f90b329c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/11_Gandi/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png deleted file mode 100644 index 0fc0d22a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png deleted file mode 100644 index 0e7b43bd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png deleted file mode 100644 index ab5bb8e3..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/12_GitHub/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png deleted file mode 100644 index 66298cec..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png deleted file mode 100644 index 4a061bb9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png deleted file mode 100644 index 5986f1d8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/13_GitLab/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00001.png deleted file mode 100644 index 0859d749..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00002.png deleted file mode 100644 index fdb26fde..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00004.png deleted file mode 100644 index 9d3caa1d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/14_Google/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png deleted file mode 100644 index e54213f9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png deleted file mode 100644 index d0b3c602..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png deleted file mode 100644 index 80a30a88..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/15_Keeper/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png deleted file mode 100644 index 9d81dd11..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png deleted file mode 100644 index 6ba347fd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png deleted file mode 100644 index 444f1314..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/16_LastPass/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png deleted file mode 100644 index 9575e247..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png deleted file mode 100644 index 27814f29..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png deleted file mode 100644 index 8039224c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png deleted file mode 100644 index 75eb8f7b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png deleted file mode 100644 index 50777ad7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png deleted file mode 100644 index 77c5ef68..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/18_Stripe/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png deleted file mode 100644 index 45707f65..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png deleted file mode 100644 index 5581615d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png deleted file mode 100644 index 82bc163d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png deleted file mode 100644 index 5030de5d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png deleted file mode 100644 index 49b1c5e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png deleted file mode 100644 index 7addadc2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png deleted file mode 100644 index 7a232a4a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png deleted file mode 100644 index fd01969e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png deleted file mode 100644 index efdc4d6a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png deleted file mode 100644 index 44c08422..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png deleted file mode 100644 index 09dd2a4a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png deleted file mode 100644 index 4a51302b..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png deleted file mode 100644 index 5fc91814..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png deleted file mode 100644 index bbb4542a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png deleted file mode 100644 index 9605a188..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png deleted file mode 100644 index 796df3f1..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png deleted file mode 100644 index 9b162e4c..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png deleted file mode 100644 index e0c761a9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png deleted file mode 100644 index 418d44ba..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png deleted file mode 100644 index 15a82285..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png deleted file mode 100644 index 3d70affe..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png deleted file mode 100644 index 5fbba8e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png deleted file mode 100644 index 6b9e035a..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png deleted file mode 100644 index 14e8b9d9..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png deleted file mode 100644 index 64897c2e..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png deleted file mode 100644 index 00be30bd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png deleted file mode 100644 index c21cbeab..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/4_Coinbase/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png deleted file mode 100644 index c4461abf..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png deleted file mode 100644 index b5f040ca..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png deleted file mode 100644 index 6aa3ea92..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/5_Dashlane/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png deleted file mode 100644 index de80d8e4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png deleted file mode 100644 index 66771ee1..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png deleted file mode 100644 index e0840788..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/6_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png deleted file mode 100644 index 68e575ec..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png deleted file mode 100644 index 1cf441b2..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png deleted file mode 100644 index e0840788..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/7_Dropbox/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png deleted file mode 100644 index f5d68fdd..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png deleted file mode 100644 index 17c528d4..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png deleted file mode 100644 index ba694b8d..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/8_Duo/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png deleted file mode 100644 index 5f9a34e0..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00001.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png deleted file mode 100644 index a58ad3e7..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00002.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png deleted file mode 100644 index 74e0d724..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00003.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png deleted file mode 100644 index c41cfbf8..00000000 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_fido_known_list/reg/9_FastMail/00004.png and /dev/null differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00000.png b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00000.png index 9e224783..2080fae4 100644 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00000.png and b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00000.png differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00001.png b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00001.png index 7b1ea9f7..338339a2 100644 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00001.png and b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00001.png differ 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 d885fe67..12341d7d 100644 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00002.png and b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00002.png differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00003.png b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00003.png index 6c0191c9..d885fe67 100644 Binary files a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00003.png and b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00003.png differ diff --git a/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00004.png b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00004.png new file mode 100644 index 00000000..6c0191c9 Binary files /dev/null and b/tests/speculos/snapshots/nanox/test_u2f_screens_idle/00004.png differ diff --git a/tests/speculos/snapshots/stax/test_authenticate_ok/00000.png b/tests/speculos/snapshots/stax/test_authenticate_ok/00000.png new file mode 100644 index 00000000..4f831132 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_authenticate_ok/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_authenticate_user_refused/00000.png b/tests/speculos/snapshots/stax/test_authenticate_user_refused/00000.png new file mode 100644 index 00000000..4f831132 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_authenticate_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_short_id/get/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_short_id/get/00000.png new file mode 100644 index 00000000..c9459bee Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_short_id/get/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_short_id/make/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_short_id/make/00000.png new file mode 100644 index 00000000..90972db4 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_short_id/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/get/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/get/00000.png new file mode 100644 index 00000000..774b948a Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/make/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/make/00000.png new file mode 100644 index 00000000..9fa51473 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/get/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/get/00000.png new file mode 100644 index 00000000..c9459bee Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/get/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/make/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/make/00000.png new file mode 100644 index 00000000..90972db4 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_icon/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_name/get/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_name/get/00000.png new file mode 100644 index 00000000..43d97aad Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_name/get/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_name/make/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_name/make/00000.png new file mode 100644 index 00000000..eee3ae51 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_name/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/get/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/get/00000.png new file mode 100644 index 00000000..774b948a Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/get/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/make/00000.png b/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/make/00000.png new file mode 100644 index 00000000..9fa51473 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido2_screens_user_name_and_display_name/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00000.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00000.png new file mode 100644 index 00000000..3b0c2b11 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00001.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00001.png new file mode 100644 index 00000000..79892f2f Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00002.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00002.png new file mode 100644 index 00000000..422f08df Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00003.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00003.png new file mode 100644 index 00000000..a70b2888 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00003.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00004.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00004.png new file mode 100644 index 00000000..643f1da5 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00004.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00005.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00005.png new file mode 100644 index 00000000..3da7058c Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00005.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00006.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00006.png new file mode 100644 index 00000000..422f08df Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00006.png differ diff --git a/tests/speculos/snapshots/stax/test_fido_screens_settings/00007.png b/tests/speculos/snapshots/stax/test_fido_screens_settings/00007.png new file mode 100644 index 00000000..3b0c2b11 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_fido_screens_settings/00007.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion/00000.png b/tests/speculos/snapshots/stax/test_get_assertion/00000.png new file mode 100644 index 00000000..e422a642 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00000.png new file mode 100644 index 00000000..fec1390c Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00001.png b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00001.png new file mode 100644 index 00000000..ec92e9bb Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00002.png b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00002.png new file mode 100644 index 00000000..3a7b8238 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_duplicate_allow_list_entries/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_duplicate_allow_list_entries/00000.png new file mode 100644 index 00000000..e422a642 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_duplicate_allow_list_entries/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_no_credentials/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_no_credentials/00000.png new file mode 100644 index 00000000..649cbc24 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_no_credentials/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_user_refused/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_user_refused/00000.png new file mode 100644 index 00000000..e422a642 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_uv/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_uv/00000.png new file mode 100644 index 00000000..e422a642 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_uv/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_wrong_id/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_wrong_id/00000.png new file mode 100644 index 00000000..649cbc24 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_wrong_id/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_get_assertion_wrong_rp/00000.png b/tests/speculos/snapshots/stax/test_get_assertion_wrong_rp/00000.png new file mode 100644 index 00000000..a39b5049 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_get_assertion_wrong_rp/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential/00000.png b/tests/speculos/snapshots/stax/test_make_credential/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential_certificate/00000.png b/tests/speculos/snapshots/stax/test_make_credential_certificate/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential_certificate/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential_exclude_list/00000.png b/tests/speculos/snapshots/stax/test_make_credential_exclude_list/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential_exclude_list/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential_up/00000.png b/tests/speculos/snapshots/stax/test_make_credential_up/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential_up/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential_user_refused/00000.png b/tests/speculos/snapshots/stax/test_make_credential_user_refused/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_make_credential_uv/00000.png b/tests/speculos/snapshots/stax/test_make_credential_uv/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_make_credential_uv/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_allow_list/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_allow_list/00000.png new file mode 100644 index 00000000..ba399e6b Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_rk/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_rk/00000.png new file mode 100644 index 00000000..ba399e6b Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/make/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/make/00000.png new file mode 100644 index 00000000..95d136f3 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/0/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00000.png new file mode 100644 index 00000000..62620c05 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00001.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00001.png new file mode 100644 index 00000000..4ccfab54 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00002.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00002.png new file mode 100644 index 00000000..62620c05 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00000.png new file mode 100644 index 00000000..62620c05 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00001.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00001.png new file mode 100644 index 00000000..4ccfab54 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00002.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00002.png new file mode 100644 index 00000000..62620c05 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/make/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/make/00000.png new file mode 100644 index 00000000..9b0d559e Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00000.png new file mode 100644 index 00000000..4e39ed60 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00001.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00001.png new file mode 100644 index 00000000..c438d024 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00002.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00002.png new file mode 100644 index 00000000..4e39ed60 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_allow_list/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00000.png new file mode 100644 index 00000000..4e39ed60 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00001.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00001.png new file mode 100644 index 00000000..c438d024 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00002.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00002.png new file mode 100644 index 00000000..4e39ed60 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/get_rk/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/make/00000.png b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/make/00000.png new file mode 100644 index 00000000..88155763 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_make_cred_exclude_refused/00000.png b/tests/speculos/snapshots/stax/test_option_rk_make_cred_exclude_refused/00000.png new file mode 100644 index 00000000..e987a9ff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_make_cred_exclude_refused/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png new file mode 100644 index 00000000..37106758 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/make/00000.png b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/make/00000.png new file mode 100644 index 00000000..27ee25b5 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/1/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png new file mode 100644 index 00000000..567b6ee3 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/get_assertion/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/make/00000.png b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/make/00000.png new file mode 100644 index 00000000..55e66354 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_option_rk_overwrite_get_assertion/2/make/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_register_ok/00000.png b/tests/speculos/snapshots/stax/test_register_ok/00000.png new file mode 100644 index 00000000..8d190f17 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_register_ok/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_register_user_refused/00000.png b/tests/speculos/snapshots/stax/test_register_user_refused/00000.png new file mode 100644 index 00000000..8d190f17 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_register_user_refused/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_reset/False/00000.png b/tests/speculos/snapshots/stax/test_reset/False/00000.png new file mode 100644 index 00000000..bf508056 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_reset/False/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_reset/True/00000.png b/tests/speculos/snapshots/stax/test_reset/True/00000.png new file mode 100644 index 00000000..bf508056 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_reset/True/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/0_Binance/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/0_Binance/00000.png new file mode 100644 index 00000000..26953251 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/0_Binance/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/10_Fedora/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/10_Fedora/00000.png new file mode 100644 index 00000000..45d1635d Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/10_Fedora/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/11_Gandi/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/11_Gandi/00000.png new file mode 100644 index 00000000..e2a1f529 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/11_Gandi/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/12_GitHub/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/12_GitHub/00000.png new file mode 100644 index 00000000..f895eae1 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/12_GitHub/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/13_GitLab/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/13_GitLab/00000.png new file mode 100644 index 00000000..88ce6c14 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/13_GitLab/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/14_Google/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/14_Google/00000.png new file mode 100644 index 00000000..b93b3405 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/14_Google/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/15_Keeper/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/15_Keeper/00000.png new file mode 100644 index 00000000..e5bfaf2b Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/15_Keeper/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/16_LastPass/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/16_LastPass/00000.png new file mode 100644 index 00000000..f7520db2 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/16_LastPass/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/17_Slush Pool/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/17_Slush Pool/00000.png new file mode 100644 index 00000000..b26be14d Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/17_Slush Pool/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/18_Stripe/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/18_Stripe/00000.png new file mode 100644 index 00000000..be1b674e Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/18_Stripe/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00000.png new file mode 100644 index 00000000..1416629d Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/19_u2f.bin.coffee/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/1_Bitbucket/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/1_Bitbucket/00000.png new file mode 100644 index 00000000..acde8ed5 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/1_Bitbucket/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00000.png new file mode 100644 index 00000000..7af877bd Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/20_webauthn.bin.coffee/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00000.png new file mode 100644 index 00000000..23f7aa08 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/21_WebAuthn.io/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00000.png new file mode 100644 index 00000000..42d8c9b9 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/22_WebAuthn.me/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00000.png new file mode 100644 index 00000000..733bcc81 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/23_demo.yubico.com/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/2_Bitfinex/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/2_Bitfinex/00000.png new file mode 100644 index 00000000..c3fb8983 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/2_Bitfinex/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/3_Bitwarden/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/3_Bitwarden/00000.png new file mode 100644 index 00000000..f89d7b3d Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/3_Bitwarden/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/4_Coinbase/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/4_Coinbase/00000.png new file mode 100644 index 00000000..a707f335 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/4_Coinbase/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/5_Dashlane/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/5_Dashlane/00000.png new file mode 100644 index 00000000..f929e484 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/5_Dashlane/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/6_Dropbox/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/6_Dropbox/00000.png new file mode 100644 index 00000000..15c2ca8a Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/6_Dropbox/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/7_Dropbox/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/7_Dropbox/00000.png new file mode 100644 index 00000000..ac24a0a7 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/7_Dropbox/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/8_Duo/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/8_Duo/00000.png new file mode 100644 index 00000000..6fef6aec Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/8_Duo/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/9_FastMail/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/9_FastMail/00000.png new file mode 100644 index 00000000..ead1a1f3 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/log/9_FastMail/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/0_Binance/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/0_Binance/00000.png new file mode 100644 index 00000000..f2f92145 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/0_Binance/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/10_Fedora/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/10_Fedora/00000.png new file mode 100644 index 00000000..2c4321f5 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/10_Fedora/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/11_Gandi/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/11_Gandi/00000.png new file mode 100644 index 00000000..fddc2c99 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/11_Gandi/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/12_GitHub/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/12_GitHub/00000.png new file mode 100644 index 00000000..b8c22b2c Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/12_GitHub/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/13_GitLab/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/13_GitLab/00000.png new file mode 100644 index 00000000..715858c1 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/13_GitLab/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/14_Google/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/14_Google/00000.png new file mode 100644 index 00000000..4acef417 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/14_Google/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/15_Keeper/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/15_Keeper/00000.png new file mode 100644 index 00000000..2e5aabb9 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/15_Keeper/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/16_LastPass/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/16_LastPass/00000.png new file mode 100644 index 00000000..011901f0 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/16_LastPass/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00000.png new file mode 100644 index 00000000..c4ec1fff Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/17_Slush Pool/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/18_Stripe/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/18_Stripe/00000.png new file mode 100644 index 00000000..7a4d8a94 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/18_Stripe/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00000.png new file mode 100644 index 00000000..4ff13e7f Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/19_u2f.bin.coffee/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00000.png new file mode 100644 index 00000000..423cfd3a Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/1_Bitbucket/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00000.png new file mode 100644 index 00000000..733a1ccf Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/20_webauthn.bin.coffee/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00000.png new file mode 100644 index 00000000..fdc9675f Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/21_WebAuthn.io/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00000.png new file mode 100644 index 00000000..0dcccf36 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/22_WebAuthn.me/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00000.png new file mode 100644 index 00000000..316ea048 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/23_demo.yubico.com/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00000.png new file mode 100644 index 00000000..f63cd614 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/2_Bitfinex/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00000.png new file mode 100644 index 00000000..5cd86976 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/3_Bitwarden/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/4_Coinbase/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/4_Coinbase/00000.png new file mode 100644 index 00000000..fa8f1405 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/4_Coinbase/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/5_Dashlane/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/5_Dashlane/00000.png new file mode 100644 index 00000000..8840a0d4 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/5_Dashlane/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/6_Dropbox/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/6_Dropbox/00000.png new file mode 100644 index 00000000..009d565d Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/6_Dropbox/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/7_Dropbox/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/7_Dropbox/00000.png new file mode 100644 index 00000000..da4622d5 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/7_Dropbox/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/8_Duo/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/8_Duo/00000.png new file mode 100644 index 00000000..86819f52 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/8_Duo/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/9_FastMail/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/9_FastMail/00000.png new file mode 100644 index 00000000..965d26a3 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_fido_known_list/reg/9_FastMail/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_idle/00000.png b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00000.png new file mode 100644 index 00000000..3b0c2b11 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00000.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_idle/00001.png b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00001.png new file mode 100644 index 00000000..79892f2f Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00001.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_idle/00002.png b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00002.png new file mode 100644 index 00000000..422f08df Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00002.png differ diff --git a/tests/speculos/snapshots/stax/test_u2f_screens_idle/00003.png b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00003.png new file mode 100644 index 00000000..3b0c2b11 Binary files /dev/null and b/tests/speculos/snapshots/stax/test_u2f_screens_idle/00003.png differ diff --git a/tests/speculos/test_transport.py b/tests/speculos/test_transport.py new file mode 100644 index 00000000..1bce336f --- /dev/null +++ b/tests/speculos/test_transport.py @@ -0,0 +1,289 @@ +import pytest +import struct +import sys + +from fido2.hid import TYPE_INIT, CTAPHID +from fido2.ctap import CtapError + +from utils import generate_random_bytes + +BROADCAST_CID = 0xFFFFFFFF +PACKET_SIZE = 64 +INIT_U2F_VERSION = 0x02 +INIT_CAPABILITIES = 0x04 + +INIT_CMD_HEADER_SIZE = 4 + 1 + 2 # CID + CMD + LEN +CONT_FRAME_HEADER_SIZE = 4 + 1 # CID + SEQ +INIT_CMD_MAX_PAYLOAD_SIZE = PACKET_SIZE - INIT_CMD_HEADER_SIZE +CONT_FRAME_MAX_PAYLOAD_SIZE = PACKET_SIZE - CONT_FRAME_HEADER_SIZE + + +def send_cmd(client, cid, cmd, payload): + data = struct.pack(">IBH", cid, cmd, len(payload)) + data += payload + assert len(data) <= PACKET_SIZE + data = data.ljust(PACKET_SIZE, b"\xee") + client.hid_dev.write_packet(data) + + +def send_cont_frame(client, cid, seq, payload): + data = struct.pack(">IB", cid, seq) + data += payload + assert len(data) <= PACKET_SIZE + data = data.ljust(PACKET_SIZE, b"\xee") + client.hid_dev.write_packet(data) + + +def recv_resp(client, cid, cmd): + resp = client.hid_dev.read_packet() + assert len(resp) == PACKET_SIZE + resp_cid, resp_cmd, resp_len = struct.unpack(">IBH", resp[:7]) + assert resp_cid == cid + + if resp_cmd == cmd: + return resp_len, resp[7:7 + resp_len] + elif resp_cmd == TYPE_INIT | CTAPHID.ERROR: + raise CtapError(struct.unpack_from(">B", resp[7:])[0]) + else: + raise CtapError(CtapError.ERR.INVALID_COMMAND) + + +def recv_init_resp(client, cid, cmd, nonce): + resp_len, resp = recv_resp(client, cid, cmd) + assert resp_len == 17 + assert resp[:8] == nonce + new_cid = struct.unpack(">I", resp[8:12])[0] + assert new_cid != 0 and new_cid != BROADCAST_CID + assert int(resp[12]) == INIT_U2F_VERSION + assert int(resp[16]) == INIT_CAPABILITIES + return new_cid + + +def init_channel(client, cid=BROADCAST_CID): + cmd = TYPE_INIT | CTAPHID.INIT + nonce = generate_random_bytes(8) + send_cmd(client, cid, cmd, nonce) + + return recv_init_resp(client, cid, cmd, nonce) + + +@pytest.mark.skipif( + "--fast" in sys.argv, + reason="running in fast mode", +) +def test_no_unexpected_tx(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + with pytest.raises(TimeoutError): + client.hid_dev.read_packet() + + +@pytest.mark.skipif( + "--fast" in sys.argv, + reason="running in fast mode", +) +def test_no_resp_to_unexpected_cont(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = struct.unpack(">I", generate_random_bytes(4))[0] + payload = generate_random_bytes(CONT_FRAME_MAX_PAYLOAD_SIZE) + send_cont_frame(client, cid, 1, payload) + with pytest.raises(TimeoutError): + client.hid_dev.read_packet() + + +def test_init(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + new_cid = init_channel(client) + assert new_cid != 0 + + +def test_init_multiples(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid1 = init_channel(client) + cid2 = init_channel(client) + cid3 = init_channel(client) + assert len(set([cid1, cid2, cid3])) == 3 + + +def test_ping(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + payload = generate_random_bytes(50) + resp = client.dev.call(CTAPHID.PING, payload) + assert resp == payload + + +def test_long_ping(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + payload = generate_random_bytes(1024) + resp = client.dev.call(CTAPHID.PING, payload) + assert resp == payload + + +def test_reinit_during_ping(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = init_channel(client) + + # Send start of ping + cmd = TYPE_INIT | CTAPHID.PING + data = struct.pack(">IBH", cid, cmd, 1024) + data += generate_random_bytes(INIT_CMD_MAX_PAYLOAD_SIZE) + client.hid_dev.write_packet(data) + + # Send cont frame + for i in range(5): + payload = generate_random_bytes(CONT_FRAME_MAX_PAYLOAD_SIZE) + send_cont_frame(client, cid, i, payload) + + # Reinit the channel + cid1 = init_channel(client, cid=cid) + assert cid == cid1 + + +def test_invalid_cmd(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cmd = 0x21 + with pytest.raises(CtapError) as e: + client.dev.call(cmd, b"") + assert e.value.code == CtapError.ERR.INVALID_COMMAND + + +def test_invalid_init_cid(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + with pytest.raises(CtapError) as e: + init_channel(client, cid=0) + assert e.value.code == CtapError.ERR.INVALID_CHANNEL + + +def test_ping_on_invalid_cid(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + for cid in [0, BROADCAST_CID]: + cmd = TYPE_INIT | CTAPHID.PING + data = generate_random_bytes(50) + send_cmd(client, cid, cmd, data) + with pytest.raises(CtapError) as e: + recv_resp(client, cid, cmd) + assert e.value.code == CtapError.ERR.INVALID_CHANNEL + + +def test_invalid_seq(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = init_channel(client) + + # Send start of ping + cmd = TYPE_INIT | CTAPHID.PING + data = struct.pack(">IBH", cid, cmd, 1024) + data += generate_random_bytes(INIT_CMD_MAX_PAYLOAD_SIZE) + client.hid_dev.write_packet(data) + + # Send cont frame + for i in range(3): + payload = generate_random_bytes(CONT_FRAME_MAX_PAYLOAD_SIZE) + send_cont_frame(client, cid, i, payload) + + # Send wrong cont frame + payload = generate_random_bytes(CONT_FRAME_MAX_PAYLOAD_SIZE) + send_cont_frame(client, cid, 4, payload) + with pytest.raises(CtapError) as e: + recv_resp(client, cid, cmd) + assert e.value.code == CtapError.ERR.INVALID_SEQ + + +def test_cbor_invalid_length(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = init_channel(client) + + cmd = TYPE_INIT | CTAPHID.CBOR + send_cmd(client, cid, cmd, b"") + recv = recv_resp(client, cid, cmd) + with pytest.raises(CtapError) as e: + client.ctap2.parse_response(recv) + assert e.value.code == CtapError.ERR.INVALID_COMMAND + + +def test_cmd_to_long(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = init_channel(client) + + cmd = TYPE_INIT | CTAPHID.PING + data = struct.pack(">IBH", cid, cmd, 2000) + data = data.ljust(PACKET_SIZE, b"\xee") + client.hid_dev.write_packet(data) + + with pytest.raises(CtapError) as e: + recv_resp(client, cid, cmd) + assert e.value.code == CtapError.ERR.INVALID_LENGTH + + +# TODO spec behavior to confirm +# def test_init_while_processing(client): +# if client.use_raw_HID_endpoint: +# pytest.skip("Does not work with this transport") +# +# challenge = generate_random_bytes(32) +# app_param = generate_random_bytes(32) +# data = challenge + app_param +# +# # Send a U2F register command +# client.ctap1.send_apdu_nowait(cla=0x00, +# ins=Ctap1.INS.REGISTER, +# p1=0x00, +# p2=0x00, +# data=data) +# +# # Send an init on another channel +# init_channel(client) + + +def test_check_busy(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + cid = client.dev._channel_id + cmd = TYPE_INIT | CTAPHID.PING + + # Send start of ping + ping_data = generate_random_bytes(INIT_CMD_MAX_PAYLOAD_SIZE + 20) + data = struct.pack(">IBH", cid, cmd, len(ping_data)) + data += ping_data[:INIT_CMD_MAX_PAYLOAD_SIZE] + client.hid_dev.write_packet(data) + + # Send start of ping on another CID + new_cid = cid + 1 + data = struct.pack(">IBH", new_cid, cmd, 1024) + data += generate_random_bytes(INIT_CMD_MAX_PAYLOAD_SIZE) + client.hid_dev.write_packet(data) + with pytest.raises(CtapError) as e: + recv_resp(client, new_cid, cmd) + assert e.value.code == CtapError.ERR.CHANNEL_BUSY + + # Finish ping on first channel + send_cont_frame(client, cid, 0, ping_data[INIT_CMD_MAX_PAYLOAD_SIZE:]) + resp = client.dev.recv(cmd) + assert resp == ping_data + +# TODO missing CBOR keep-alive check diff --git a/tests/speculos/u2f/test_authenticate_cmd.py b/tests/speculos/u2f/test_authenticate_cmd.py index 711e78cc..d95b0bc7 100644 --- a/tests/speculos/u2f/test_authenticate_cmd.py +++ b/tests/speculos/u2f/test_authenticate_cmd.py @@ -126,7 +126,7 @@ def test_authenticate_with_reboot_ok(client): def test_authenticate_multiple_ok(client): registrations = [] - for _ in range(10): + for _ in range(5): app_param, registration_data = register(client) registrations.append((app_param, registration_data)) @@ -144,7 +144,7 @@ def test_authenticate_counter_increment(client): app_param, registration_data = register(client) prev = 0 - for _ in range(10): + for _ in range(5): challenge = generate_random_bytes(32) authentication_data = client.ctap1.authenticate(challenge, @@ -346,3 +346,29 @@ def test_authenticate_raw(client): authentication_data = SignatureData(response) authentication_data.verify(app_param, challenge, registration_data.public_key) + + +def test_authenticate_retrocompat(client): + # Make sure that app update will still works with previously generated + # key handles and public key already shared with some Relying Party + app_param_hex = "f430952043cccefab769aa034f8f38d6" + app_param_hex += "9c21d3d685ed7044a3602c4f8901ec73" + app_param = bytearray.fromhex(app_param_hex) + + key_handle_hex = "012f3f3858150bbef433cb4106cd3366" + key_handle_hex += "6355b8f6a9642da8a7b85a29c5c0c5a2d5" + key_handle = bytearray.fromhex(key_handle_hex) + + public_key_hex = "046aeca2df937f91bd30471e73f5c36d" + public_key_hex += "60a3cdff36cd469d1ac6c95c9d84e01c" + public_key_hex += "5db23952cc01a55c84b139277db0e810" + public_key_hex += "b92da64950770c6a67a47a8782ec827f8e" + public_key = bytearray.fromhex(public_key_hex) + + challenge = generate_random_bytes(32) + + authentication_data = client.ctap1.authenticate(challenge, + app_param, + key_handle) + + authentication_data.verify(app_param, challenge, public_key) diff --git a/tests/speculos/u2f/test_register_cmd.py b/tests/speculos/u2f/test_register_cmd.py index dd887ab9..8b64a280 100644 --- a/tests/speculos/u2f/test_register_cmd.py +++ b/tests/speculos/u2f/test_register_cmd.py @@ -1,5 +1,4 @@ import pytest -import socket from cryptography.x509 import load_der_x509_certificate @@ -82,7 +81,7 @@ def test_register_duplicate(client): def test_register_multiple_ok(client): - for i in range(10): + for i in range(5): challenge = generate_random_bytes(32) app_param = generate_random_bytes(32) @@ -181,113 +180,6 @@ def test_register_raw(client): registration_data.verify(app_param, challenge) -def test_register_raw_u2f_fake_channel_security_crc(client): - if client.use_raw_HID_endpoint: - pytest.skip("Does not work with this transport") - - # Only spec valid P1 is 0x00, however some platforms wrongly uses - # 0x03 as P1 for enroll: - # https://searchfox.org/mozilla-central/source/third_party/rust/authenticator/src/consts.rs#55 - # https://github.com/Yubico/python-u2flib-host/issues/34 - # We choose to allow it. - valid_p1 = [ - 0x00, - U2F_P1.REQUEST_USER_PRESENCE, - ] - for p1 in valid_p1: - challenge = bytearray(generate_random_bytes(32)) - app_param = generate_random_bytes(32) - data = challenge + app_param - - # On U2F endpoint, the device should return APDU.SW_CONDITIONS_NOT_SATISFIED - # until user validate, except if the request change! - client.ctap1.send_apdu_nowait(cla=0x00, - ins=Ctap1.INS.REGISTER, - p1=p1, - p2=0x00, - data=data) - - response = client.ctap1.device.recv(CTAPHID.MSG) - - with pytest.raises(ApduError) as e: - response = client.ctap1.parse_response(response) - - assert e.value.code == APDU.SW_CONDITIONS_NOT_SATISFIED - - # Confirm request - client.ctap1.confirm() - - # Change challenge first bit - challenge[0] ^= 0x40 - data = challenge + app_param - - client.ctap1.send_apdu_nowait(cla=0x00, - ins=Ctap1.INS.REGISTER, - p1=p1, - p2=0x00, - data=data) - - with pytest.raises(socket.timeout) as e: - response = client.ctap1.device.recv(CTAPHID.MSG) - - # App should then recover and allow new requests - client.ctap1.wait_for_return_on_dashboard() - - challenge = bytearray(generate_random_bytes(32)) - app_param = generate_random_bytes(32) - registration_data = client.ctap1.register(challenge, app_param) - registration_data.verify(app_param, challenge) - - -def test_register_raw_u2f_fake_channel_security_length(client): - challenge = generate_random_bytes(32) - app_param = generate_random_bytes(32) - data = challenge + app_param - - # This test is specific for U2F endpoint - if not client.use_U2F_endpoint: - pytest.skip("Does not work with this transport") - - # On U2F endpoint, the device should return APDU.SW_CONDITIONS_NOT_SATISFIED - # until user validate, except if the request change! - client.ctap1.send_apdu_nowait(cla=0x00, - ins=Ctap1.INS.REGISTER, - p1=0x00, - p2=0x00, - data=data) - - response = client.ctap1.device.recv(CTAPHID.MSG) - - with pytest.raises(ApduError) as e: - response = client.ctap1.parse_response(response) - - assert e.value.code == APDU.SW_CONDITIONS_NOT_SATISFIED - - # Confirm request - client.ctap1.confirm() - - # Change challenge length - challenge2 = challenge[:-1] - data = challenge2 + app_param - - client.ctap1.send_apdu_nowait(cla=0x00, - ins=Ctap1.INS.REGISTER, - p1=0x00, - p2=0x00, - data=data) - - with pytest.raises(socket.timeout) as e: - response = client.ctap1.device.recv(CTAPHID.MSG) - - # App should then recover and allow new requests - client.ctap1.wait_for_return_on_dashboard() - - challenge = generate_random_bytes(32) - app_param = generate_random_bytes(32) - registration_data = client.ctap1.register(challenge, app_param) - registration_data.verify(app_param, challenge) - - def test_register_wrong_p1p2(client): challenge = generate_random_bytes(32) app_param = generate_random_bytes(32) diff --git a/tests/speculos/u2f/test_u2f_fake_channel_security_crc.py b/tests/speculos/u2f/test_u2f_fake_channel_security_crc.py new file mode 100644 index 00000000..ac1e13f3 --- /dev/null +++ b/tests/speculos/u2f/test_u2f_fake_channel_security_crc.py @@ -0,0 +1,47 @@ +import pytest + +from fido2.ctap1 import ApduError, Ctap1 +from fido2.hid import CTAPHID + +from ctap1_client import APDU +from utils import generate_random_bytes + + +def test_register_raw_u2f_fake_channel_security_crc(client): + if client.use_raw_HID_endpoint: + pytest.skip("Does not work with this transport") + + challenge = bytearray(generate_random_bytes(32)) + app_param = generate_random_bytes(32) + data = challenge + app_param + + # On U2F endpoint, the device should return APDU.SW_CONDITIONS_NOT_SATISFIED + # until user validate, except if the request change! + client.ctap1.send_apdu_nowait(cla=0x00, + ins=Ctap1.INS.REGISTER, + p1=0x00, + p2=0x00, + data=data) + + response = client.ctap1.device.recv(CTAPHID.MSG) + + with pytest.raises(ApduError) as e: + response = client.ctap1.parse_response(response) + + assert e.value.code == APDU.SW_CONDITIONS_NOT_SATISFIED + + # Confirm request + client.ctap1.confirm() + + # Change challenge first bit + challenge[0] ^= 0x40 + data = challenge + app_param + + client.ctap1.send_apdu_nowait(cla=0x00, + ins=Ctap1.INS.REGISTER, + p1=0x00, + p2=0x00, + data=data) + + with pytest.raises((AssertionError, ConnectionResetError, TimeoutError)) as e: + response = client.ctap1.device.recv(CTAPHID.MSG) diff --git a/tests/speculos/u2f/test_u2f_fake_channel_security_length.py b/tests/speculos/u2f/test_u2f_fake_channel_security_length.py new file mode 100644 index 00000000..8e8a5247 --- /dev/null +++ b/tests/speculos/u2f/test_u2f_fake_channel_security_length.py @@ -0,0 +1,48 @@ +import pytest + +from fido2.ctap1 import ApduError, Ctap1 +from fido2.hid import CTAPHID + +from ctap1_client import APDU +from utils import generate_random_bytes + + +def test_register_raw_u2f_fake_channel_security_length(client): + challenge = generate_random_bytes(32) + app_param = generate_random_bytes(32) + data = challenge + app_param + + # This test is specific for U2F endpoint + if not client.use_U2F_endpoint: + pytest.skip("Does not work with this transport") + + # On U2F endpoint, the device should return APDU.SW_CONDITIONS_NOT_SATISFIED + # until user validate, except if the request change! + client.ctap1.send_apdu_nowait(cla=0x00, + ins=Ctap1.INS.REGISTER, + p1=0x00, + p2=0x00, + data=data) + + response = client.ctap1.device.recv(CTAPHID.MSG) + + with pytest.raises(ApduError) as e: + response = client.ctap1.parse_response(response) + + assert e.value.code == APDU.SW_CONDITIONS_NOT_SATISFIED + + # Confirm request + client.ctap1.confirm() + + # Change challenge length + challenge2 = challenge[:-1] + data = challenge2 + app_param + + client.ctap1.send_apdu_nowait(cla=0x00, + ins=Ctap1.INS.REGISTER, + p1=0x00, + p2=0x00, + data=data) + + with pytest.raises((AssertionError, ConnectionResetError, TimeoutError)) as e: + response = client.ctap1.device.recv(CTAPHID.MSG) diff --git a/tests/speculos/u2f/test_u2f_screens.py b/tests/speculos/u2f/test_u2f_screens.py index 24ae0d58..44303170 100644 --- a/tests/speculos/u2f/test_u2f_screens.py +++ b/tests/speculos/u2f/test_u2f_screens.py @@ -9,21 +9,30 @@ from utils import HAVE_RK_SUPPORT_SETTING -def test_u2f_screens_idle(client, test_name): +def test_u2f_screens_idle(client, test_name, firmware): # Refresh navigator screen content reference time.sleep(0.1) client.navigator._backend.get_current_screen_content() instructions = [] - # Screen 0 -> 1 - instructions.append(NavInsID.RIGHT_CLICK) - # Screen 1 -> 2 - instructions.append(NavInsID.RIGHT_CLICK) - - if HAVE_RK_SUPPORT_SETTING: + if firmware.device.startswith("nano"): + # Screen 0 -> 1 + instructions.append(NavInsID.RIGHT_CLICK) + # Screen 1 -> 2 + instructions.append(NavInsID.RIGHT_CLICK) # Screen 2 -> 3 instructions.append(NavInsID.RIGHT_CLICK) + if HAVE_RK_SUPPORT_SETTING: + # Screen 3 -> 4 + instructions.append(NavInsID.RIGHT_CLICK) + else: + instructions = [ + NavInsID.USE_CASE_HOME_SETTINGS, + NavInsID.USE_CASE_SETTINGS_NEXT, + NavInsID.USE_CASE_SETTINGS_MULTI_PAGE_EXIT + ] + client.navigator.navigate_and_compare(TESTS_SPECULOS_DIR, test_name, instructions, screen_change_before_first_instruction=False) diff --git a/tests/speculos/utils.py b/tests/speculos/utils.py index 3d53ba74..d9c752b3 100644 --- a/tests/speculos/utils.py +++ b/tests/speculos/utils.py @@ -7,6 +7,8 @@ from fido2.utils import sha256 from fido2.webauthn import AttestedCredentialData +from ragger.navigator import NavIns, NavInsID + # Application build configuration HAVE_NO_RESET_GENERATION_INCREMENT = True HAVE_RK_SUPPORT_SETTING = True @@ -16,26 +18,6 @@ "101112131415161718191a1b1c1d1e1f") -CRED_PARAMS = [ - ("webctap.myservice.com", - bytes.fromhex("000102030405060708090a0b0c0d0e0f" - "101112131415161718191a1b1c1d1e1f"), - "My user name"), - ("webctap.myservice_1.com", - bytes.fromhex("00000000000000000000000000000000" - "00000000000000000000000000000001"), - "My user 1 name"), - ("webctap.myservice_2.com", - bytes.fromhex("00000000000000000000000000000000" - "00000000000000000000000000000002"), - "My user 2 name"), - ("webctap.myservice_3.com", - bytes.fromhex("00000000000000000000000000000000" - "00000000000000000000000000000003"), - "My user 3 name") -] - - def prepare_apdu(cla=0, ins=0, p1=0, p2=0, data=b""): size = len(data) size_h = size >> 16 & 0xFF @@ -60,7 +42,16 @@ def generate_make_credentials_params(ref=None): user_id = generate_random_bytes(64) user_name = None else: - rp_id, user_id, user_name = CRED_PARAMS[ref] + if ref == 0: + rp_id = "webctap.myservice.com" + user_id = bytes.fromhex("000102030405060708090a0b0c0d0e0f" + "101112131415161718191a1b1c1d1e1f") + user_name = "My user name" + else: + rp_id = f"webctap.myservice_{ref}.com" + user_id = bytes.fromhex("00000000000000000000000000000000" + f"0000000000000000000000000000000{ref}") + user_name = f"My user {ref} name" client_data_hash = generate_random_bytes(32) rp = {"id": rp_id} @@ -143,3 +134,42 @@ def get_rp_id_hash(rp_id): "demo.yubico.com": "demo.yubico.com", } fido_known_appid = {get_rp_id_hash(x): y for x, y in fido_known_app.items()} + + +def navigate(navigator, + user_accept, + check_screens, + check_cancel, + compare_args, + text, + nav_ins, + val_ins): + + if check_screens: + assert compare_args + root, test_name = compare_args + else: + root, test_name = None, None + + if user_accept is not None: + # Over U2F endpoint (but not over HID) the device needs the + # response to be retrieved before continuing the UX flow. + + if text: + navigator.navigate_until_text_and_compare( + nav_ins, + val_ins, + text, + root, + test_name, + screen_change_after_last_instruction=False) + else: + navigator.navigate_and_compare( + root, + test_name, + val_ins, + screen_change_after_last_instruction=False) + + elif check_cancel: + navigator.navigate([NavIns(NavInsID.WAIT, (0.1,))], + screen_change_after_last_instruction=False)