From 90461356c0c015e38dafff5fe898329821ac9e69 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 26 Jul 2024 16:10:08 +0200 Subject: [PATCH 001/102] Version bump to 1.12.0-dev --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 53a94a7f3..532441b40 100644 --- a/Makefile +++ b/Makefile @@ -38,9 +38,9 @@ endif include ./makefile_conf/chain/$(CHAIN).mk APPVERSION_M = 1 -APPVERSION_N = 11 -APPVERSION_P = 1 -APPVERSION = $(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) +APPVERSION_N = 12 +APPVERSION_P = 0 +APPVERSION = $(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)-dev # Application source files APP_SOURCE_PATH += src src_features src_plugins From f4a29413a1aee3fadb948bc34716e5d6b0454027 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 11 Jun 2024 10:47:53 +0200 Subject: [PATCH 002/102] Cleaup useless flags --- src/extra_tokens.c | 61 --------- src/extra_tokens.h | 28 ---- .../cmd_provideTokenInfo.c | 126 +----------------- 3 files changed, 7 insertions(+), 208 deletions(-) delete mode 100644 src/extra_tokens.c delete mode 100644 src/extra_tokens.h diff --git a/src/extra_tokens.c b/src/extra_tokens.c deleted file mode 100644 index 9faefcbd3..000000000 --- a/src/extra_tokens.c +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Ledger Ethereum App - * (c) 2016-2019 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. - ********************************************************************************/ - -#ifdef HAVE_TOKENS_EXTRA_LIST - -#include "extra_tokens.h" - -const tokenDefinition_t TOKENS_EXTRA[NUM_TOKENS_EXTRA] = { - - // Ropsten DeversiFi tokens - {{0x4c, 0x5f, 0x66, 0x59, 0x61, 0x97, 0xa8, 0x6f, 0xb3, 0x0a, - 0x24, 0x35, 0xe2, 0xef, 0x4d, 0xdc, 0xb3, 0x93, 0x42, 0xc9}, - "tUSDT", - 6}, - {{0x1c, 0x0f, 0x17, 0x43, 0x67, 0x40, 0xbf, 0xb9, 0x2c, 0x10, - 0x70, 0xee, 0x86, 0x32, 0x2d, 0xe8, 0x90, 0x83, 0x7c, 0x6a}, - "tUSDT", - 6}, - {{0xcd, 0x07, 0x7a, 0xbe, 0xdd, 0x83, 0x1a, 0x34, 0x43, 0xff, - 0xbe, 0x24, 0xfb, 0x76, 0x66, 0x1b, 0xbb, 0x17, 0xeb, 0x69}, - "tZRX", - 18}, - {{0x40, 0xd8, 0x97, 0x85, 0x00, 0xbf, 0x68, 0x32, 0x4a, 0x51, - 0x53, 0x3c, 0xd6, 0xa2, 0x1e, 0x3e, 0x59, 0xbe, 0x32, 0x4a}, - "tBTC", - 18}, - // Goerli DeversiFi tokens - {{0xd9, 0x97, 0xa8, 0x63, 0x46, 0xe7, 0x65, 0x18, 0xe6, 0x92, - 0x25, 0x56, 0xf3, 0x4d, 0x76, 0x61, 0x30, 0xc0, 0xbb, 0xfd}, - "tUSDT", - 6}, - {{0xc1, 0xd5, 0x79, 0xeb, 0xff, 0x7c, 0x0f, 0x6c, 0xfd, 0x9a, - 0xd5, 0xfb, 0x26, 0x7f, 0xec, 0x73, 0xbe, 0x70, 0xc8, 0xf7}, - "tBTC", - 18}, - {{0xa8, 0xf3, 0x14, 0x4f, 0xea, 0x2c, 0x37, 0x5a, 0xd0, 0x58, - 0xec, 0x12, 0x09, 0x9a, 0x5a, 0x21, 0xa2, 0x6f, 0xe9, 0x96}, - "tDVF", - 18}, - {{0x4c, 0xda, 0xbe, 0xc1, 0x2a, 0x39, 0x7f, 0xb6, 0xef, 0xaf, - 0x46, 0x13, 0xd5, 0xdf, 0xd7, 0x9b, 0x30, 0x9a, 0xe9, 0xfa}, - "tXDVF", - 18}, - -}; - -#endif diff --git a/src/extra_tokens.h b/src/extra_tokens.h deleted file mode 100644 index f6b012c9a..000000000 --- a/src/extra_tokens.h +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Ledger Ethereum App - * (c) 2016-2019 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. - ********************************************************************************/ - -#pragma once - -#include "asset_info.h" - -#ifdef HAVE_TOKENS_EXTRA_LIST - -#define NUM_TOKENS_EXTRA 8 - -extern tokenDefinition_t const TOKENS_EXTRA[NUM_TOKENS_EXTRA]; - -#endif diff --git a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c index d5ed912ff..e4f9e2082 100644 --- a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c +++ b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c @@ -3,102 +3,9 @@ #include "public_keys.h" #include "common_ui.h" #include "os_io_seproxyhal.h" -#include "extra_tokens.h" #include "network.h" #include "manage_asset_info.h" -#ifdef HAVE_CONTRACT_NAME_IN_DESCRIPTOR - -void handleProvideErc20TokenInformation(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(flags); - uint32_t offset = 0; - uint8_t tickerLength, contractNameLength; - uint32_t chainId; - uint8_t hash[INT256_LENGTH]; - cx_sha256_t sha256; - cx_ecfp_public_key_t tokenKey; - - cx_sha256_init(&sha256); - - tokenDefinition_t *token = &get_current_asset_info()->token; - - if (dataLength < 1) { - THROW(0x6A80); - } - tickerLength = workBuffer[offset++]; - dataLength--; - if ((tickerLength + 2) >= sizeof(token->ticker)) { // +2 because ' \0' is appended to ticker - THROW(0x6A80); - } - if (dataLength < tickerLength + 1) { - THROW(0x6A80); - } - cx_hash((cx_hash_t *) &sha256, 0, workBuffer + offset, tickerLength, NULL, 0); - memmove(token->ticker, workBuffer + offset, tickerLength); - token->ticker[tickerLength] = '\0'; - offset += tickerLength; - dataLength -= tickerLength; - - contractNameLength = workBuffer[offset++]; - dataLength--; - if (dataLength < contractNameLength + 20 + 4 + 4) { - THROW(0x6A80); - } - cx_hash((cx_hash_t *) &sha256, - CX_LAST, - workBuffer + offset, - contractNameLength + 20 + 4 + 4, - hash, - 32); - memmove(token->contractName, - workBuffer + offset, - MIN(contractNameLength, sizeof(token->contractName) - 1)); - token->contractName[MIN(contractNameLength, sizeof(token->contractName) - 1)] = '\0'; - offset += contractNameLength; - dataLength -= contractNameLength; - - memmove(token->address, workBuffer + offset, 20); - offset += 20; - dataLength -= 20; - token->decimals = U4BE(workBuffer, offset); - offset += 4; - dataLength -= 4; - chainId = U4BE(workBuffer, offset); - if ((chainConfig->chainId != 0) && (chainConfig->chainId != chainId)) { - PRINTF("ChainId token mismatch\n"); - THROW(0x6A80); - } - offset += 4; - dataLength -= 4; - cx_ecfp_init_public_key(CX_CURVE_256K1, - LEDGER_SIGNATURE_PUBLIC_KEY, - sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), - &tokenKey); - if (!cx_ecdsa_verify(&tokenKey, - CX_LAST, - CX_SHA256, - hash, - 32, - workBuffer + offset, - dataLength)) { -#ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid token signature\n"); - THROW(0x6A80); -#endif - } - validate_current_asset_info(); - THROW(0x9000); -} - -#else - void handleProvideErc20TokenInformation(uint8_t p1, uint8_t p2, const uint8_t *workBuffer, @@ -151,32 +58,15 @@ void handleProvideErc20TokenInformation(uint8_t p1, offset += 4; dataLength -= 4; -#ifdef HAVE_TOKENS_EXTRA_LIST - tokenDefinition_t *currentToken = NULL; - uint32_t index; - for (index = 0; index < NUM_TOKENS_EXTRA; index++) { - currentToken = (tokenDefinition_t *) PIC(&TOKENS_EXTRA[index]); - if (memcmp(currentToken->address, token->address, 20) == 0) { - strcpy((char *) token->ticker, (char *) currentToken->ticker); - token->decimals = currentToken->decimals; - break; - } - } - if (index < NUM_TOKENS_EXTRA) { - PRINTF("Descriptor whitelisted\n"); - } else -#endif - { - CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, - LEDGER_SIGNATURE_PUBLIC_KEY, - sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), - &tokenKey)); - if (!cx_ecdsa_verify_no_throw(&tokenKey, hash, 32, workBuffer + offset, dataLength)) { + CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, + LEDGER_SIGNATURE_PUBLIC_KEY, + sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), + &tokenKey)); + if (!cx_ecdsa_verify_no_throw(&tokenKey, hash, 32, workBuffer + offset, dataLength)) { #ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid token signature\n"); - THROW(0x6A80); + PRINTF("Invalid token signature\n"); + THROW(0x6A80); #endif - } } G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; @@ -184,5 +74,3 @@ void handleProvideErc20TokenInformation(uint8_t p1, U2BE_ENCODE(G_io_apdu_buffer, 1, APDU_RESPONSE_OK); io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 3); } - -#endif From 1ac75092daa7053b4bbee04175478f9b5731f3c4 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 30 Jul 2024 14:35:56 +0200 Subject: [PATCH 003/102] Fix deprecated 'encodeABI' --- tests/ragger/test_blind_sign.py | 2 +- tests/ragger/test_nft.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/ragger/test_blind_sign.py b/tests/ragger/test_blind_sign.py index 08853890c..fa93bc5b7 100644 --- a/tests/ragger/test_blind_sign.py +++ b/tests/ragger/test_blind_sign.py @@ -34,7 +34,7 @@ def common_tx_params() -> dict: abi=json.load(file), address=None ) - data = contract.encodeABI("approve", [ + data = contract.encode_abi("approve", [ # Uniswap Protocol: Permit2 bytes.fromhex("000000000022d473030f116ddee9f6b43ac78ba3"), Web3.to_wei("2", "ether") diff --git a/tests/ragger/test_nft.py b/tests/ragger/test_nft.py index 38ffa629c..987682b8f 100644 --- a/tests/ragger/test_nft.py +++ b/tests/ragger/test_nft.py @@ -65,7 +65,7 @@ def common_test_nft(firmware: Firmware, pass _, DEVICE_ADDR, _ = ResponseParser.pk_addr(app_client.response().data) - data = collec.contract.encodeABI(action.fn_name, action.fn_args) + data = collec.contract.encode_abi(action.fn_name, action.fn_args) app_client.set_plugin(plugin_name, collec.addr, get_selector_from_data(data), From 264d1de96e8096929e48867d8bcd66dd5f120f0e Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Thu, 1 Aug 2024 16:50:46 +0200 Subject: [PATCH 004/102] Align internal plugin handler API with standard plugin handler API --- src_plugins/erc1155/erc1155_plugin.c | 25 ++++++++----------- src_plugins/erc1155/erc1155_plugin.h | 5 ++-- .../erc1155/erc1155_provide_parameters.c | 3 +-- src_plugins/erc1155/erc1155_ui.c | 3 +-- src_plugins/erc721/erc721_plugin.c | 25 ++++++++----------- src_plugins/erc721/erc721_plugin.h | 5 ++-- .../erc721/erc721_provide_parameters.c | 3 +-- src_plugins/erc721/erc721_ui.c | 3 +-- 8 files changed, 30 insertions(+), 42 deletions(-) diff --git a/src_plugins/erc1155/erc1155_plugin.c b/src_plugins/erc1155/erc1155_plugin.c index b1704ca2a..24ca169b2 100644 --- a/src_plugins/erc1155/erc1155_plugin.c +++ b/src_plugins/erc1155/erc1155_plugin.c @@ -16,8 +16,7 @@ const uint8_t *const ERC1155_SELECTORS[SELECTORS_COUNT] = { ERC1155_SAFE_BATCH_TRANSFER, }; -static void handle_init_contract(void *parameters) { - ethPluginInitContract_t *msg = (ethPluginInitContract_t *) parameters; +void handle_init_contract_1155(ethPluginInitContract_t *msg) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; if (NO_NFT_METADATA) { @@ -56,8 +55,7 @@ static void handle_init_contract(void *parameters) { } } -static void handle_finalize(void *parameters) { - ethPluginFinalize_t *msg = (ethPluginFinalize_t *) parameters; +void handle_finalize_1155(ethPluginFinalize_t *msg) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; if (context->selectorIndex != SAFE_BATCH_TRANSFER) { @@ -92,14 +90,11 @@ static void handle_finalize(void *parameters) { msg->result = ETH_PLUGIN_RESULT_OK; } -static void handle_provide_info(void *parameters) { - ethPluginProvideInfo_t *msg = (ethPluginProvideInfo_t *) parameters; - +void handle_provide_info_1155(ethPluginProvideInfo_t *msg) { msg->result = ETH_PLUGIN_RESULT_OK; } -static void handle_query_contract_id(void *parameters) { - ethQueryContractID_t *msg = (ethQueryContractID_t *) parameters; +void handle_query_contract_id_1155(ethQueryContractID_t *msg) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; msg->result = ETH_PLUGIN_RESULT_OK; @@ -131,22 +126,22 @@ static void handle_query_contract_id(void *parameters) { void erc1155_plugin_call(int message, void *parameters) { switch (message) { case ETH_PLUGIN_INIT_CONTRACT: { - handle_init_contract(parameters); + handle_init_contract_1155((ethPluginInitContract_t *) parameters); } break; case ETH_PLUGIN_PROVIDE_PARAMETER: { - handle_provide_parameter_1155(parameters); + handle_provide_parameter_1155((ethPluginProvideParameter_t *) parameters); } break; case ETH_PLUGIN_FINALIZE: { - handle_finalize(parameters); + handle_finalize_1155((ethPluginFinalize_t *) parameters); } break; case ETH_PLUGIN_PROVIDE_INFO: { - handle_provide_info(parameters); + handle_provide_info_1155((ethPluginProvideInfo_t *) parameters); } break; case ETH_PLUGIN_QUERY_CONTRACT_ID: { - handle_query_contract_id(parameters); + handle_query_contract_id_1155((ethQueryContractID_t *) parameters); } break; case ETH_PLUGIN_QUERY_CONTRACT_UI: { - handle_query_contract_ui_1155(parameters); + handle_query_contract_ui_1155((ethQueryContractUI_t *) parameters); } break; default: PRINTF("Unhandled message %d\n", message); diff --git a/src_plugins/erc1155/erc1155_plugin.h b/src_plugins/erc1155/erc1155_plugin.h index a60dab69b..d9615dfeb 100644 --- a/src_plugins/erc1155/erc1155_plugin.h +++ b/src_plugins/erc1155/erc1155_plugin.h @@ -8,6 +8,7 @@ #include "ethUstream.h" #include "uint256.h" #include "asset_info.h" +#include "eth_plugin_interface.h" // Internal plugin for EIP 1155: https://eips.ethereum.org/EIPS/eip-1155 @@ -48,8 +49,8 @@ typedef struct erc1155_context_t { uint8_t selectorIndex; } erc1155_context_t; -void handle_provide_parameter_1155(void *parameters); -void handle_query_contract_ui_1155(void *parameters); +void handle_provide_parameter_1155(ethPluginProvideParameter_t *parameters); +void handle_query_contract_ui_1155(ethQueryContractUI_t *parameters); #endif // HAVE_NFT_SUPPORT diff --git a/src_plugins/erc1155/erc1155_provide_parameters.c b/src_plugins/erc1155/erc1155_provide_parameters.c index 454f9a233..3a9f7bb88 100644 --- a/src_plugins/erc1155/erc1155_provide_parameters.c +++ b/src_plugins/erc1155/erc1155_provide_parameters.c @@ -115,8 +115,7 @@ static void handle_approval_for_all(ethPluginProvideParameter_t *msg, erc1155_co } } -void handle_provide_parameter_1155(void *parameters) { - ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters; +void handle_provide_parameter_1155(ethPluginProvideParameter_t *msg) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; PRINTF("erc1155 plugin provide parameter %d %.*H\n", diff --git a/src_plugins/erc1155/erc1155_ui.c b/src_plugins/erc1155/erc1155_ui.c index 1e9d45136..f566ad5f7 100644 --- a/src_plugins/erc1155/erc1155_ui.c +++ b/src_plugins/erc1155/erc1155_ui.c @@ -132,8 +132,7 @@ static void set_batch_transfer_ui(ethQueryContractUI_t *msg, erc1155_context_t * } } -void handle_query_contract_ui_1155(void *parameters) { - ethQueryContractUI_t *msg = (ethQueryContractUI_t *) parameters; +void handle_query_contract_ui_1155(ethQueryContractUI_t *msg) { erc1155_context_t *context = (erc1155_context_t *) msg->pluginContext; msg->result = ETH_PLUGIN_RESULT_OK; diff --git a/src_plugins/erc721/erc721_plugin.c b/src_plugins/erc721/erc721_plugin.c index 07ba0c7a6..10fb28cec 100644 --- a/src_plugins/erc721/erc721_plugin.c +++ b/src_plugins/erc721/erc721_plugin.c @@ -21,8 +21,7 @@ const uint8_t *const ERC721_SELECTORS[SELECTORS_COUNT] = { ERC721_SAFE_TRANSFER_DATA_SELECTOR, }; -static void handle_init_contract(void *parameters) { - ethPluginInitContract_t *msg = (ethPluginInitContract_t *) parameters; +void handle_init_contract_721(ethPluginInitContract_t *msg) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; if (NO_NFT_METADATA) { @@ -63,8 +62,7 @@ static void handle_init_contract(void *parameters) { } } -static void handle_finalize(void *parameters) { - ethPluginFinalize_t *msg = (ethPluginFinalize_t *) parameters; +void handle_finalize_721(ethPluginFinalize_t *msg) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; msg->tokenLookup1 = msg->pluginSharedRO->txContent->destination; @@ -99,14 +97,11 @@ static void handle_finalize(void *parameters) { msg->result = ETH_PLUGIN_RESULT_OK; } -static void handle_provide_info(void *parameters) { - ethPluginProvideInfo_t *msg = (ethPluginProvideInfo_t *) parameters; - +void handle_provide_info_721(ethPluginProvideInfo_t *msg) { msg->result = ETH_PLUGIN_RESULT_OK; } -static void handle_query_contract_id(void *parameters) { - ethQueryContractID_t *msg = (ethQueryContractID_t *) parameters; +void handle_query_contract_id_721(ethQueryContractID_t *msg) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; msg->result = ETH_PLUGIN_RESULT_OK; @@ -138,22 +133,22 @@ static void handle_query_contract_id(void *parameters) { void erc721_plugin_call(int message, void *parameters) { switch (message) { case ETH_PLUGIN_INIT_CONTRACT: { - handle_init_contract(parameters); + handle_init_contract_721((ethPluginInitContract_t *) parameters); } break; case ETH_PLUGIN_PROVIDE_PARAMETER: { - handle_provide_parameter_721(parameters); + handle_provide_parameter_721((ethPluginProvideParameter_t *) parameters); } break; case ETH_PLUGIN_FINALIZE: { - handle_finalize(parameters); + handle_finalize_721((ethPluginFinalize_t *) parameters); } break; case ETH_PLUGIN_PROVIDE_INFO: { - handle_provide_info(parameters); + handle_provide_info_721((ethPluginProvideInfo_t *) parameters); } break; case ETH_PLUGIN_QUERY_CONTRACT_ID: { - handle_query_contract_id(parameters); + handle_query_contract_id_721((ethQueryContractID_t *) parameters); } break; case ETH_PLUGIN_QUERY_CONTRACT_UI: { - handle_query_contract_ui_721(parameters); + handle_query_contract_ui_721((ethQueryContractUI_t *) parameters); } break; default: PRINTF("Unhandled message %d\n", message); diff --git a/src_plugins/erc721/erc721_plugin.h b/src_plugins/erc721/erc721_plugin.h index 685c5e9d0..42f1df68e 100644 --- a/src_plugins/erc721/erc721_plugin.h +++ b/src_plugins/erc721/erc721_plugin.h @@ -7,6 +7,7 @@ #include #include "ethUstream.h" #include "asset_info.h" +#include "eth_plugin_interface.h" // Internal plugin for EIP 721: https://eips.ethereum.org/EIPS/eip-721 @@ -39,8 +40,8 @@ typedef struct erc721_context_t { uint8_t selectorIndex; } erc721_context_t; -void handle_provide_parameter_721(void *parameters); -void handle_query_contract_ui_721(void *parameters); +void handle_provide_parameter_721(ethPluginProvideParameter_t *parameters); +void handle_query_contract_ui_721(ethQueryContractUI_t *parameters); #endif // HAVE_NFT_SUPPORT diff --git a/src_plugins/erc721/erc721_provide_parameters.c b/src_plugins/erc721/erc721_provide_parameters.c index 18a19cb6e..d5577db6d 100644 --- a/src_plugins/erc721/erc721_provide_parameters.c +++ b/src_plugins/erc721/erc721_provide_parameters.c @@ -63,8 +63,7 @@ static void handle_approval_for_all(ethPluginProvideParameter_t *msg, erc721_con } } -void handle_provide_parameter_721(void *parameters) { - ethPluginProvideParameter_t *msg = (ethPluginProvideParameter_t *) parameters; +void handle_provide_parameter_721(ethPluginProvideParameter_t *msg) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; PRINTF("erc721 plugin provide parameter %d %.*H\n", diff --git a/src_plugins/erc721/erc721_ui.c b/src_plugins/erc721/erc721_ui.c index 1c0facd3d..d27643108 100644 --- a/src_plugins/erc721/erc721_ui.c +++ b/src_plugins/erc721/erc721_ui.c @@ -121,8 +121,7 @@ static void set_transfer_ui(ethQueryContractUI_t *msg, erc721_context_t *context } } -void handle_query_contract_ui_721(void *parameters) { - ethQueryContractUI_t *msg = (ethQueryContractUI_t *) parameters; +void handle_query_contract_ui_721(ethQueryContractUI_t *msg) { erc721_context_t *context = (erc721_context_t *) msg->pluginContext; msg->result = ETH_PLUGIN_RESULT_OK; From c310d00a6fa48eddaede60720df59af69942ccea Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Mon, 29 Jul 2024 19:16:10 +0200 Subject: [PATCH 005/102] Add flag for sdk compilation --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 532441b40..26c380864 100644 --- a/Makefile +++ b/Makefile @@ -80,6 +80,9 @@ ifeq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_STAX TARGET_FLEX)) DEFINES += ICONGLYPH_SMALL=C_chain_$(CHAIN_ID) endif +# Don't define plugin function in the plugin SDK +DEFINES += IS_NOT_A_PLUGIN + # Application allowed derivation curves. # Possibles curves are: secp256k1, secp256r1, ed25519 and bls12381g1 From 53d2196a1922d7f4f7d4c21e43fbc8ee4e9da9bf Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Mon, 29 Jul 2024 19:16:46 +0200 Subject: [PATCH 006/102] Revert use case name change in manifest to restore compatibility --- ledger_app.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ledger_app.toml b/ledger_app.toml index a640f652a..4f50eae48 100644 --- a/ledger_app.toml +++ b/ledger_app.toml @@ -4,8 +4,8 @@ sdk = "C" devices = ["nanos", "nanox", "nanos+", "stax", "flex"] [use_cases] # Coherent build options that make sense for your application -test_keys = "CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" -dbg_test_keys = "DEBUG=1 CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" +use_test_keys = "CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" +dbg_use_test_keys = "DEBUG=1 CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" cal_bypass = "BYPASS_SIGNATURES=1" dbg_cal_bypass = "DEBUG=1 BYPASS_SIGNATURES=1" From 2008307c0c888f3a1b726968c81898270c787ab4 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 11 Jun 2024 10:55:11 +0200 Subject: [PATCH 007/102] Implement Ledger-PKI - Update src code to adapt to new API 'os_pki_verify' - Support both Ledger-PKI and legacy method --- src/ledger_pki.c | 76 +++++++++ src/public_keys.h | 12 ++ .../cmd_provide_domain_name.c | 52 +++--- .../cmd_provideTokenInfo.c | 35 ++-- .../cmd_provideNFTInfo.c | 102 +++++------ .../setExternalPlugin/cmd_setExternalPlugin.c | 40 +++-- src_features/setPlugin/cmd_setPlugin.c | 160 ++++++++---------- src_features/signMessageEIP712/filtering.c | 29 ++-- 8 files changed, 290 insertions(+), 216 deletions(-) create mode 100644 src/ledger_pki.c diff --git a/src/ledger_pki.c b/src/ledger_pki.c new file mode 100644 index 000000000..65d2bb38d --- /dev/null +++ b/src/ledger_pki.c @@ -0,0 +1,76 @@ +#include "apdu_constants.h" +#include "public_keys.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif + +#define KEY_USAGE_STR(x) \ + (x == CERTIFICATE_PUBLIC_KEY_USAGE_GENUINE_CHECK ? "GENUINE_CHECK" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_EXCHANGE_PAYLOAD ? "EXCHANGE_PAYLOAD" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_NFT_METADATA ? "NFT_METADATA" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_TRUSTED_NAME ? "TRUSTED_NAME" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_BACKUP_PROVIDER ? "BACKUP_PROVIDER" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_RECOVER_ORCHESTRATOR ? "RECOVER_ORCHESTRATOR" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_PLUGIN_METADATA ? "PLUGIN_METADATA" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META ? "COIN_META" \ + : x == CERTIFICATE_PUBLIC_KEY_USAGE_SEED_ID_AUTH ? "SEED_ID_AUTH" \ + : "Unknown") + +int check_signature_with_pubkey(const char *tag, + uint8_t *buffer, + const uint8_t bufLen, + const uint8_t *PubKey, + const uint8_t keyLen, +#ifdef HAVE_LEDGER_PKI + const uint8_t keyUsageExp, +#endif + uint8_t *signature, + const uint8_t sigLen) { + UNUSED(tag); + cx_ecfp_public_key_t verif_key = {0}; + cx_err_t error = CX_INTERNAL_ERROR; +#ifdef HAVE_LEDGER_PKI + uint8_t key_usage = 0; + size_t trusted_name_len = 0; + uint8_t trusted_name[CERTIFICATE_TRUSTED_NAME_MAXLEN] = {0}; + cx_ecfp_384_public_key_t public_key = {0}; +#endif + + PRINTF( + "[%s] " + "=======================================================================================\n", + tag); +#ifdef HAVE_LEDGER_PKI + error = os_pki_get_info(&key_usage, trusted_name, &trusted_name_len, &public_key); + if ((error == 0) && (key_usage == keyUsageExp)) { + PRINTF("[%s] Certificate '%s' loaded for usage 0x%x (%s)\n", + tag, + trusted_name, + key_usage, + KEY_USAGE_STR(key_usage)); + + // Checking the signature with PKI + if (!os_pki_verify(buffer, bufLen, signature, sigLen)) { + PRINTF("%s: Invalid signature\n", tag); +#ifndef HAVE_BYPASS_SIGNATURES + error = APDU_RESPONSE_INVALID_DATA; + goto end; +#endif + } + } else +#endif + { + PRINTF("[%s] ********** No certificate loaded. Using legacy path **********\n", tag); + CX_CHECK(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, PubKey, keyLen, &verif_key)); + if (!cx_ecdsa_verify_no_throw(&verif_key, buffer, bufLen, signature, sigLen)) { + PRINTF("%s: Invalid signature\n", tag); +#ifndef HAVE_BYPASS_SIGNATURES + error = APDU_RESPONSE_INVALID_DATA; + goto end; +#endif + } + } + error = CX_OK; +end: + return error; +} diff --git a/src/public_keys.h b/src/public_keys.h index d5964dbf4..18348d6f5 100644 --- a/src/public_keys.h +++ b/src/public_keys.h @@ -16,6 +16,7 @@ ********************************************************************************/ #pragma once +#include static const uint8_t LEDGER_SIGNATURE_PUBLIC_KEY[] = { #if defined(HAVE_CAL_TEST_KEY) @@ -101,3 +102,14 @@ static const uint8_t LEDGER_NFT_SELECTOR_PUBLIC_KEY[] = { 0x92, 0xc7, 0xc6, 0x48, 0x0d, 0x39, 0xce, 0xbb, 0xa3 #endif }; + +extern int check_signature_with_pubkey(const char *tag, + uint8_t *buffer, + const uint8_t bufLen, + const uint8_t *PubKey, + const uint8_t keyLen, +#ifdef HAVE_LEDGER_PKI + const uint8_t keyUsageExp, +#endif + uint8_t *signature, + const uint8_t sigLen); diff --git a/src_features/provideDomainName/cmd_provide_domain_name.c b/src_features/provideDomainName/cmd_provide_domain_name.c index cfcdc0ddf..be3c1850d 100644 --- a/src_features/provideDomainName/cmd_provide_domain_name.c +++ b/src_features/provideDomainName/cmd_provide_domain_name.c @@ -12,6 +12,9 @@ #include "hash_bytes.h" #include "network.h" #include "public_keys.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif #define P1_FIRST_CHUNK 0x01 #define P1_FOLLOWING_CHUNK 0x00 @@ -364,39 +367,36 @@ static bool handle_address(const s_tlv_data *data, */ static bool verify_signature(const s_sig_ctx *sig_ctx) { uint8_t hash[INT256_LENGTH]; - cx_ecfp_public_key_t verif_key; cx_err_t error = CX_INTERNAL_ERROR; - - CX_CHECK( - cx_hash_no_throw((cx_hash_t *) &sig_ctx->hash_ctx, CX_LAST, NULL, 0, hash, INT256_LENGTH)); - switch (sig_ctx->key_id) { #ifdef HAVE_DOMAIN_NAME_TEST_KEY - case KEY_ID_TEST: + e_key_id valid_key_id = KEY_ID_TEST; #else - case KEY_ID_PROD: + e_key_id valid_key_id = KEY_ID_PROD; #endif - CX_CHECK(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, - DOMAIN_NAME_PUB_KEY, - sizeof(DOMAIN_NAME_PUB_KEY), - &verif_key)); - break; - default: - PRINTF("Error: Unknown metadata key ID %u\n", sig_ctx->key_id); - return false; - } - if (!cx_ecdsa_verify_no_throw(&verif_key, - hash, - sizeof(hash), - sig_ctx->input_sig, - sig_ctx->input_sig_size)) { - PRINTF("Domain name signature verification failed!\n"); -#ifndef HAVE_BYPASS_SIGNATURES + bool ret_code = false; + + if (sig_ctx->key_id != valid_key_id) { + PRINTF("Error: Unknown metadata key ID %u\n", sig_ctx->key_id); return false; -#endif } - return true; + + CX_CHECK( + cx_hash_no_throw((cx_hash_t *) &sig_ctx->hash_ctx, CX_LAST, NULL, 0, hash, INT256_LENGTH)); + + CX_CHECK(check_signature_with_pubkey("Domain Name", + hash, + sizeof(hash), + DOMAIN_NAME_PUB_KEY, + sizeof(DOMAIN_NAME_PUB_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META, +#endif + (uint8_t *) (sig_ctx->input_sig), + sig_ctx->input_sig_size)); + + ret_code = true; end: - return false; + return ret_code; } /** diff --git a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c index e4f9e2082..9d9dc0f6b 100644 --- a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c +++ b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c @@ -5,6 +5,9 @@ #include "os_io_seproxyhal.h" #include "network.h" #include "manage_asset_info.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif void handleProvideErc20TokenInformation(uint8_t p1, uint8_t p2, @@ -20,22 +23,21 @@ void handleProvideErc20TokenInformation(uint8_t p1, uint8_t tickerLength; uint64_t chain_id; uint8_t hash[INT256_LENGTH]; - cx_ecfp_public_key_t tokenKey; - tokenDefinition_t *token = &get_current_asset_info()->token; + cx_err_t error = CX_INTERNAL_ERROR; PRINTF("Provisioning currentAssetIndex %d\n", tmpCtx.transactionContext.currentAssetIndex); if (dataLength < 1) { - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } tickerLength = workBuffer[offset++]; dataLength--; if ((tickerLength + 1) > sizeof(token->ticker)) { - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } if (dataLength < tickerLength + 20 + 4 + 4) { - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } cx_hash_sha256(workBuffer + offset, tickerLength + 20 + 4 + 4, hash, 32); memmove(token->ticker, workBuffer + offset, tickerLength); @@ -53,21 +55,26 @@ void handleProvideErc20TokenInformation(uint8_t p1, chain_id = U4BE(workBuffer, offset); if (!app_compatible_with_chain_id(&chain_id)) { UNSUPPORTED_CHAIN_ID_MSG(chain_id); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += 4; dataLength -= 4; - CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, - LEDGER_SIGNATURE_PUBLIC_KEY, - sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), - &tokenKey)); - if (!cx_ecdsa_verify_no_throw(&tokenKey, hash, 32, workBuffer + offset, dataLength)) { -#ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid token signature\n"); - THROW(0x6A80); + error = check_signature_with_pubkey("ERC20 Token Info", + hash, + sizeof(hash), + LEDGER_SIGNATURE_PUBLIC_KEY, + sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META, #endif + (uint8_t *) (workBuffer + offset), + dataLength); +#ifndef HAVE_BYPASS_SIGNATURES + if (error != CX_OK) { + THROW(APDU_RESPONSE_INVALID_DATA); } +#endif G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; validate_current_asset_info(); diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index 2b46d9d6e..3d409659b 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -9,6 +9,9 @@ #include "network.h" #include "public_keys.h" #include "manage_asset_info.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif #define TYPE_SIZE 1 #define VERSION_SIZE 1 @@ -50,19 +53,29 @@ void handleProvideNFTInformation(uint8_t p1, UNUSED(tx); UNUSED(flags); uint8_t hash[INT256_LENGTH]; - cx_ecfp_public_key_t nftKey; + nftInfo_t *nft = NULL; + size_t offset = 0; + size_t payloadSize = 0; + uint8_t collectionNameLength = 0; + uint64_t chain_id = 0; + uint8_t signatureLen = 0; + cx_err_t error = CX_INTERNAL_ERROR; +#ifdef HAVE_NFT_STAGING_KEY + uint8_t valid_keyId = STAGING_NFT_METADATA_KEY; +#else + uint8_t valid_keyId = PROD_NFT_METADATA_KEY; +#endif + PRINTF("In handle provide NFTInformation\n"); if ((pluginType != ERC721) && (pluginType != ERC1155)) { PRINTF("NFT metadata provided without proper plugin loaded!\n"); THROW(0x6985); } - nftInfo_t *nft = &get_current_asset_info()->nft; + nft = &get_current_asset_info()->nft; PRINTF("Provisioning currentAssetIndex %d\n", tmpCtx.transactionContext.currentAssetIndex); - size_t offset = 0; - if (dataLength <= HEADER_SIZE) { PRINTF("Data too small for headers: expected at least %d, got %d\n", HEADER_SIZE, @@ -70,34 +83,24 @@ void handleProvideNFTInformation(uint8_t p1, THROW(APDU_RESPONSE_INVALID_DATA); } - uint8_t type = workBuffer[offset]; - switch (type) { - case TYPE_1: - break; - default: - PRINTF("Unsupported type %d\n", type); - THROW(APDU_RESPONSE_INVALID_DATA); - break; + if (workBuffer[offset] != TYPE_1) { + PRINTF("Unsupported type %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += TYPE_SIZE; - uint8_t version = workBuffer[offset]; - switch (version) { - case VERSION_1: - break; - default: - PRINTF("Unsupported version %d\n", version); - THROW(APDU_RESPONSE_INVALID_DATA); - break; + if (workBuffer[offset] != VERSION_1) { + PRINTF("Unsupported version %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += VERSION_SIZE; - uint8_t collectionNameLength = workBuffer[offset]; + collectionNameLength = workBuffer[offset]; offset += NAME_LENGTH_SIZE; // Size of the payload (everything except the signature) - size_t payloadSize = HEADER_SIZE + collectionNameLength + ADDRESS_LENGTH + CHAIN_ID_SIZE + - KEY_ID_SIZE + ALGORITHM_ID_SIZE; + payloadSize = HEADER_SIZE + collectionNameLength + ADDRESS_LENGTH + CHAIN_ID_SIZE + + KEY_ID_SIZE + ALGORITHM_ID_SIZE; if (dataLength < payloadSize) { PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, @@ -124,7 +127,7 @@ void handleProvideNFTInformation(uint8_t p1, PRINTF("Address: %.*H\n", ADDRESS_LENGTH, workBuffer + offset); offset += ADDRESS_LENGTH; - uint64_t chain_id = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE); + chain_id = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE); // this prints raw data, so to have a more meaningful print, display // the buffer before the endianness swap PRINTF("ChainID: %.*H\n", sizeof(chain_id), (workBuffer + offset)); @@ -134,35 +137,18 @@ void handleProvideNFTInformation(uint8_t p1, } offset += CHAIN_ID_SIZE; - uint8_t keyId = workBuffer[offset]; - const uint8_t *rawKey; - uint8_t rawKeyLen; - - PRINTF("KeyID: %d\n", keyId); - switch (keyId) { -#ifdef HAVE_NFT_STAGING_KEY - case STAGING_NFT_METADATA_KEY: -#endif - case PROD_NFT_METADATA_KEY: - rawKey = LEDGER_NFT_METADATA_PUBLIC_KEY; - rawKeyLen = sizeof(LEDGER_NFT_METADATA_PUBLIC_KEY); - break; - default: - PRINTF("KeyID %d not supported\n", keyId); - THROW(APDU_RESPONSE_INVALID_DATA); - break; + if (workBuffer[offset] != valid_keyId) { + PRINTF("Unsupported KeyID %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } - PRINTF("RawKey: %.*H\n", rawKeyLen, rawKey); offset += KEY_ID_SIZE; - uint8_t algorithmId = workBuffer[offset]; - PRINTF("Algorithm: %d\n", algorithmId); - - if (algorithmId != ALGORITHM_ID_1) { - PRINTF("Incorrect algorithmId %d\n", algorithmId); + if (workBuffer[offset] != ALGORITHM_ID_1) { + PRINTF("Incorrect algorithmId %d\n", workBuffer[offset]); THROW(APDU_RESPONSE_INVALID_DATA); } offset += ALGORITHM_ID_SIZE; + PRINTF("hashing: %.*H\n", payloadSize, workBuffer); cx_hash_sha256(workBuffer, payloadSize, hash, sizeof(hash)); @@ -171,7 +157,7 @@ void handleProvideNFTInformation(uint8_t p1, THROW(APDU_RESPONSE_INVALID_DATA); } - uint8_t signatureLen = workBuffer[offset]; + signatureLen = workBuffer[offset]; PRINTF("Signature len: %d\n", signatureLen); if (signatureLen < MIN_DER_SIG_SIZE || signatureLen > MAX_DER_SIG_SIZE) { PRINTF("SignatureLen too big or too small. Must be between %d and %d, got %d\n", @@ -187,17 +173,21 @@ void handleProvideNFTInformation(uint8_t p1, THROW(APDU_RESPONSE_INVALID_DATA); } - CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, rawKey, rawKeyLen, &nftKey)); - if (!cx_ecdsa_verify_no_throw(&nftKey, - hash, - sizeof(hash), - (uint8_t *) workBuffer + offset, - signatureLen)) { + error = check_signature_with_pubkey("NFT Info", + hash, + sizeof(hash), + LEDGER_NFT_METADATA_PUBLIC_KEY, + sizeof(LEDGER_NFT_METADATA_PUBLIC_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_NFT_METADATA, +#endif + (uint8_t *) (workBuffer + offset), + signatureLen); #ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid NFT signature\n"); + if (error != CX_OK) { THROW(APDU_RESPONSE_INVALID_DATA); -#endif } +#endif G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; validate_current_asset_info(); diff --git a/src_features/setExternalPlugin/cmd_setExternalPlugin.c b/src_features/setExternalPlugin/cmd_setExternalPlugin.c index a2ddd71f2..96133367b 100644 --- a/src_features/setExternalPlugin/cmd_setExternalPlugin.c +++ b/src_features/setExternalPlugin/cmd_setExternalPlugin.c @@ -6,6 +6,9 @@ #include "plugin_utils.h" #include "common_ui.h" #include "os_io_seproxyhal.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif void handleSetExternalPlugin(uint8_t p1, uint8_t p2, @@ -18,41 +21,43 @@ void handleSetExternalPlugin(uint8_t p1, UNUSED(flags); PRINTF("Handling set Plugin\n"); uint8_t hash[INT256_LENGTH]; - cx_ecfp_public_key_t tokenKey; uint8_t pluginNameLength = *workBuffer; + uint32_t params[2]; + cx_err_t error = CX_INTERNAL_ERROR; + PRINTF("plugin Name Length: %d\n", pluginNameLength); const size_t payload_size = 1 + pluginNameLength + ADDRESS_LENGTH + SELECTOR_SIZE; if (dataLength <= payload_size) { PRINTF("data too small: expected at least %d got %d\n", payload_size, dataLength); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } if (pluginNameLength + 1 > sizeof(dataContext.tokenContext.pluginName)) { PRINTF("name length too big: expected max %d, got %d\n", sizeof(dataContext.tokenContext.pluginName), pluginNameLength + 1); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } // check Ledger's signature over the payload cx_hash_sha256(workBuffer, payload_size, hash, sizeof(hash)); - CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, - LEDGER_SIGNATURE_PUBLIC_KEY, - sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), - &tokenKey)); - if (!cx_ecdsa_verify_no_throw(&tokenKey, - hash, - sizeof(hash), - workBuffer + payload_size, - dataLength - payload_size)) { -#ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid plugin signature %.*H\n", - dataLength - payload_size, - workBuffer + payload_size); - THROW(0x6A80); + + error = check_signature_with_pubkey("External Plugin", + hash, + sizeof(hash), + LEDGER_SIGNATURE_PUBLIC_KEY, + sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META, #endif + (uint8_t *) (workBuffer + payload_size), + dataLength - payload_size); +#ifndef HAVE_BYPASS_SIGNATURES + if (error != CX_OK) { + THROW(APDU_RESPONSE_INVALID_DATA); } +#endif // move on to the rest of the payload parsing workBuffer++; @@ -63,7 +68,6 @@ void handleSetExternalPlugin(uint8_t p1, PRINTF("Check external plugin %s\n", dataContext.tokenContext.pluginName); // Check if the plugin is present on the device - uint32_t params[2]; params[0] = (uint32_t) dataContext.tokenContext.pluginName; params[1] = ETH_PLUGIN_CHECK_PRESENCE; BEGIN_TRY { diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index d083d9b06..737309274 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -9,6 +9,9 @@ #include "os_io_seproxyhal.h" #include "network.h" #include "public_keys.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif // Supported internal plugins #define ERC721_STR "ERC721" @@ -82,53 +85,51 @@ void handleSetPlugin(uint8_t p1, UNUSED(flags); PRINTF("Handling set Plugin\n"); uint8_t hash[INT256_LENGTH] = {0}; - cx_ecfp_public_key_t pluginKey = {0}; tokenContext_t *tokenContext = &dataContext.tokenContext; - size_t offset = 0; + uint8_t pluginNameLength = 0; + size_t payloadSize = 0; + uint64_t chain_id = 0; + uint8_t signatureLen = 0; + cx_err_t error = CX_INTERNAL_ERROR; +#ifdef HAVE_NFT_STAGING_KEY + enum KeyId valid_keyId = TEST_PLUGIN_KEY; +#else + enum KeyId valid_keyId = PROD_PLUGIN_KEY; +#endif + enum KeyId keyId; + uint32_t params[2]; if (dataLength <= HEADER_SIZE) { PRINTF("Data too small for headers: expected at least %d, got %d\n", HEADER_SIZE, dataLength); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } - enum Type type = workBuffer[offset]; - PRINTF("Type: %d\n", type); - switch (type) { - case ETH_PLUGIN: - break; - default: - PRINTF("Unsupported type %d\n", type); - THROW(0x6a80); - break; + if (workBuffer[offset] != ETH_PLUGIN) { + PRINTF("Unsupported type %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += TYPE_SIZE; - uint8_t version = workBuffer[offset]; - PRINTF("version: %d\n", version); - switch (version) { - case VERSION_1: - break; - default: - PRINTF("Unsupported version %d\n", version); - THROW(0x6a80); - break; + if (workBuffer[offset] != VERSION_1) { + PRINTF("Unsupported version %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += VERSION_SIZE; - uint8_t pluginNameLength = workBuffer[offset]; + pluginNameLength = workBuffer[offset]; offset += PLUGIN_NAME_LENGTH_SIZE; // Size of the payload (everything except the signature) - size_t payloadSize = HEADER_SIZE + pluginNameLength + ADDRESS_LENGTH + SELECTOR_SIZE + - CHAIN_ID_SIZE + KEY_ID_SIZE + ALGORITHM_ID_SIZE; + payloadSize = HEADER_SIZE + pluginNameLength + ADDRESS_LENGTH + SELECTOR_SIZE + CHAIN_ID_SIZE + + KEY_ID_SIZE + ALGORITHM_ID_SIZE; if (dataLength < payloadSize) { PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, dataLength); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } // `+ 1` because we want to add a null terminating character. @@ -136,7 +137,7 @@ void handleSetPlugin(uint8_t p1, PRINTF("plugin name too big: expected max %d, got %d\n", sizeof(dataContext.tokenContext.pluginName), pluginNameLength + 1); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } // Safe because we've checked the size before. @@ -155,7 +156,7 @@ void handleSetPlugin(uint8_t p1, PRINTF("Selector: %.*H\n", SELECTOR_SIZE, tokenContext->methodSelector); offset += SELECTOR_SIZE; - uint64_t chain_id = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE); + chain_id = u64_from_BE(workBuffer + offset, CHAIN_ID_SIZE); // this prints raw data, so to have a more meaningful print, display // the buffer before the endianness swap PRINTF("ChainID: %.*H\n", sizeof(chain_id), (workBuffer + offset)); @@ -165,105 +166,86 @@ void handleSetPlugin(uint8_t p1, } offset += CHAIN_ID_SIZE; - enum KeyId keyId = workBuffer[offset]; - uint8_t const *rawKey; - uint8_t rawKeyLen; - - PRINTF("KeyID: %d\n", keyId); - switch (keyId) { -#ifdef HAVE_NFT_STAGING_KEY - case TEST_PLUGIN_KEY: -#endif - case PROD_PLUGIN_KEY: - rawKey = LEDGER_NFT_SELECTOR_PUBLIC_KEY; - rawKeyLen = sizeof(LEDGER_NFT_SELECTOR_PUBLIC_KEY); - break; - default: - PRINTF("KeyID %d not supported\n", keyId); - THROW(0x6A80); - break; + keyId = workBuffer[offset]; + if (keyId != valid_keyId) { + PRINTF("Unsupported KeyID %d\n", keyId); + THROW(APDU_RESPONSE_INVALID_DATA); } - - PRINTF("RawKey: %.*H\n", rawKeyLen, rawKey); offset += KEY_ID_SIZE; - uint8_t algorithmId = workBuffer[offset]; - PRINTF("Algorithm: %d\n", algorithmId); - - if (algorithmId != ECC_SECG_P256K1__ECDSA_SHA_256) { - PRINTF("Incorrect algorithmId %d\n", algorithmId); - THROW(0x6a80); + if (workBuffer[offset] != ECC_SECG_P256K1__ECDSA_SHA_256) { + PRINTF("Incorrect algorithmId %d\n", workBuffer[offset]); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += ALGORITHM_ID_SIZE; + PRINTF("hashing: %.*H\n", payloadSize, workBuffer); cx_hash_sha256(workBuffer, payloadSize, hash, sizeof(hash)); if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE) { PRINTF("Data too short to hold signature length\n"); - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } - uint8_t signatureLen = workBuffer[offset]; + signatureLen = workBuffer[offset]; PRINTF("Signature len: %d\n", signatureLen); if (signatureLen < MIN_DER_SIG_SIZE || signatureLen > MAX_DER_SIG_SIZE) { PRINTF("SignatureLen too big or too small. Must be between %d and %d, got %d\n", MIN_DER_SIG_SIZE, MAX_DER_SIG_SIZE, signatureLen); - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } offset += SIGNATURE_LENGTH_SIZE; if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE + signatureLen) { PRINTF("Signature could not fit in data\n"); - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } - CX_ASSERT(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, rawKey, rawKeyLen, &pluginKey)); - if (!cx_ecdsa_verify_no_throw(&pluginKey, - hash, - sizeof(hash), - (unsigned char *) (workBuffer + offset), - signatureLen)) { -#ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid NFT signature\n"); - THROW(0x6A80); + error = check_signature_with_pubkey("Set Plugin", + hash, + sizeof(hash), + LEDGER_NFT_SELECTOR_PUBLIC_KEY, + sizeof(LEDGER_NFT_SELECTOR_PUBLIC_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_PLUGIN_METADATA, #endif + (uint8_t *) (workBuffer + offset), + signatureLen); +#ifndef HAVE_BYPASS_SIGNATURES + if (error != CX_OK) { + THROW(APDU_RESPONSE_INVALID_DATA); } +#endif pluginType = getPluginType(tokenContext->pluginName, pluginNameLength); if (keyId == PROD_PLUGIN_KEY) { if (pluginType != ERC721 && pluginType != ERC1155) { PRINTF("AWS key must only be used to set NFT internal plugins\n"); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } } - switch (pluginType) { - case EXTERNAL: { - PRINTF("Check external plugin %s\n", tokenContext->pluginName); - - // Check if the plugin is present on the device - uint32_t params[2]; - params[0] = (uint32_t) tokenContext->pluginName; - params[1] = ETH_PLUGIN_CHECK_PRESENCE; - BEGIN_TRY { - TRY { - os_lib_call(params); - } - CATCH_OTHER(e) { - PRINTF("%s external plugin is not present\n", tokenContext->pluginName); - memset(tokenContext->pluginName, 0, sizeof(tokenContext->pluginName)); - THROW(0x6984); - } - FINALLY { - } + if (pluginType == EXTERNAL) { + PRINTF("Check external plugin %s\n", tokenContext->pluginName); + + // Check if the plugin is present on the device + params[0] = (uint32_t) tokenContext->pluginName; + params[1] = ETH_PLUGIN_CHECK_PRESENCE; + BEGIN_TRY { + TRY { + os_lib_call(params); + } + CATCH_OTHER(e) { + PRINTF("%s external plugin is not present\n", tokenContext->pluginName); + memset(tokenContext->pluginName, 0, sizeof(tokenContext->pluginName)); + THROW(0x6984); + } + FINALLY { } - END_TRY; - break; } - default: - break; + END_TRY; } G_io_apdu_buffer[(*tx)++] = 0x90; diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index efefd6466..276fc3649 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -12,6 +12,9 @@ #include "path.h" #include "ui_logic.h" #include "filtering.h" +#ifdef HAVE_LEDGER_PKI +#include "os_pki.h" +#endif #define FILT_MAGIC_MESSAGE_INFO 183 #define FILT_MAGIC_AMOUNT_JOIN_TOKEN 11 @@ -95,26 +98,26 @@ static bool sig_verif_start(cx_sha256_t *hash_ctx, uint8_t magic) { */ static bool sig_verif_end(cx_sha256_t *hash_ctx, const uint8_t *sig, uint8_t sig_length) { uint8_t hash[INT256_LENGTH]; - cx_ecfp_public_key_t verifying_key; cx_err_t error = CX_INTERNAL_ERROR; + bool ret_code = false; // Finalize hash CX_CHECK(cx_hash_no_throw((cx_hash_t *) hash_ctx, CX_LAST, NULL, 0, hash, INT256_LENGTH)); - CX_CHECK(cx_ecfp_init_public_key_no_throw(CX_CURVE_256K1, - LEDGER_SIGNATURE_PUBLIC_KEY, - sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), - &verifying_key)); - if (!cx_ecdsa_verify_no_throw(&verifying_key, hash, sizeof(hash), sig, sig_length)) { -#ifndef HAVE_BYPASS_SIGNATURES - PRINTF("Invalid EIP-712 filtering signature\n"); - apdu_response_code = APDU_RESPONSE_INVALID_DATA; - return false; + CX_CHECK(check_signature_with_pubkey("EIP712 Filtering", + hash, + sizeof(hash), + LEDGER_SIGNATURE_PUBLIC_KEY, + sizeof(LEDGER_SIGNATURE_PUBLIC_KEY), +#ifdef HAVE_LEDGER_PKI + CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META, #endif - } - return true; + (uint8_t *) (sig), + sig_length)); + + ret_code = true; end: - return false; + return ret_code; } /** From a32e86ffd4b675264839803ece089f0428257193 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 2 Aug 2024 16:43:08 +0200 Subject: [PATCH 008/102] Return a dedicated error if Ledger-PKI APDU received but feature not enabled --- src/main.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main.c b/src/main.c index 38876d7c7..8478e0d68 100644 --- a/src/main.c +++ b/src/main.c @@ -150,6 +150,15 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { BEGIN_TRY { TRY { +#ifndef HAVE_LEDGER_PKI + if ((G_io_apdu_buffer[OFFSET_CLA] == 0xB0 && (G_io_apdu_buffer[OFFSET_INS] == 0x06))) { + // Ledger-PKI APDU not yet caught by the running OS. + // Command code not supported + PRINTF("Ledger-PKI not yet supported!\n"); + THROW(0x911C); + } +#endif // HAVE_LEDGER_PKI + if (G_io_apdu_buffer[OFFSET_CLA] != CLA) { THROW(0x6E00); } From fbbd1f41a4d347d713da0736728a9161905a2a5d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 10 Jul 2024 15:27:00 +0200 Subject: [PATCH 009/102] Add PKI class in client --- .../src/ledger_app_clients/ethereum/client.py | 113 ++++++++++++++++++ .../ethereum/eip712/InputData.py | 18 +++ 2 files changed, 131 insertions(+) diff --git a/client/src/ledger_app_clients/ethereum/client.py b/client/src/ledger_app_clients/ethereum/client.py index a09bd41ce..d9ddcae88 100644 --- a/client/src/ledger_app_clients/ethereum/client.py +++ b/client/src/ledger_app_clients/ethereum/client.py @@ -1,6 +1,8 @@ import rlp from enum import IntEnum from ragger.backend import BackendInterface +from ragger.firmware import Firmware +from ragger.error import ExceptionRAPDU from ragger.utils import RAPDU from typing import Optional @@ -22,6 +24,7 @@ class StatusWord(IntEnum): CONDITION_NOT_SATISFIED = 0x6985 REF_DATA_NOT_FOUND = 0x6a88 EXCEPTION_OVERFLOW = 0x6807 + NOT_IMPLEMENTED = 0x911c class DomainNameTag(IntEnum): @@ -36,10 +39,52 @@ class DomainNameTag(IntEnum): ADDRESS = 0x22 +class PKIPubKeyUsage(IntEnum): + PUBKEY_USAGE_GENUINE_CHECK = 0x01 + PUBKEY_USAGE_EXCHANGE_PAYLOAD = 0x02 + PUBKEY_USAGE_NFT_METADATA = 0x03 + PUBKEY_USAGE_TRUSTED_NAME = 0x04 + PUBKEY_USAGE_BACKUP_PROVIDER = 0x05 + PUBKEY_USAGE_RECOVER_ORCHESTRATOR = 0x06 + PUBKEY_USAGE_PLUGIN_METADATA = 0x07 + PUBKEY_USAGE_COIN_META = 0x08 + PUBKEY_USAGE_SEED_ID_AUTH = 0x09 + + +class PKIClient: + _CLA: int = 0xB0 + _INS: int = 0x06 + + def __init__(self, client: BackendInterface) -> None: + self._client = client + + def send_certificate(self, p1: PKIPubKeyUsage, payload: bytes) -> RAPDU: + try: + response = self.send_raw(p1, payload) + assert response.status == StatusWord.OK + except ExceptionRAPDU as err: + if err.status == StatusWord.NOT_IMPLEMENTED: + print("Ledger-PKI APDU not yet implemented. Legacy path will be used") + + def send_raw(self, p1: PKIPubKeyUsage, payload: bytes) -> RAPDU: + header = bytearray() + header.append(self._CLA) + header.append(self._INS) + header.append(p1) + header.append(0x00) + header.append(len(payload)) + return self._client.exchange_raw(header + payload) + + class EthAppClient: def __init__(self, client: BackendInterface): self._client = client + self._firmware = client.firmware self._cmd_builder = CommandBuilder() + self._pki_client: Optional[PKIClient] = None + if self._firmware != Firmware.NANOS: + # LedgerPKI not supported on Nanos + self._pki_client = PKIClient(self._client) def _exchange_async(self, payload: bytes): return self._client.exchange_async_raw(payload) @@ -168,6 +213,23 @@ def perform_privacy_operation(self, pubkey)) def provide_domain_name(self, challenge: int, name: str, addr: bytes) -> RAPDU: + + if self._pki_client is None: + print(f"Ledger-PKI Not supported on '{self._firmware.name}'") + else: + # pylint: disable=line-too-long + if self._firmware == Firmware.NANOSP: + cert_apdu = "01010102010210040102000011040000000212010013020002140101160400000000200b446f6d61696e5f4e616d6530020007310108320121332102b91fbec173e3ba4a714e014ebc827b6f899a9fa7f4ac769cde284317a00f4f653401013501031546304402201b5188f5af5cd4d40d2e5eee85609323ee129b789082d079644c89c0df9b6ce0022076c5d26bb5c8db8ab02771ecd577f63f68eaf1c90523173f161f9c12f6e978bd" # noqa: E501 + elif self._firmware == Firmware.NANOX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B446F6D61696E5F4E616D6530020007310108320121332102B91FBEC173E3BA4A714E014EBC827B6F899A9FA7F4AC769CDE284317A00F4F653401013501021546304402202CD052029B756890F0C56713409C58C24785FEFFD1A997E9C840A7BDB176B512022059A30E04E491CD27BD1DA1B5CB810CF8E4EAE67F6406F054FDFC371F7EB9F2C4" # noqa: E501 + elif self._firmware == Firmware.STAX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B446F6D61696E5F4E616D6530020007310108320121332102B91FBEC173E3BA4A714E014EBC827B6F899A9FA7F4AC769CDE284317A00F4F65340101350104154630440220741DB4E738749D4188436419B20B9AEF8F07581312A9B3C9BAA3F3E879690F6002204C4A3510569247777BC43DB830D129ACA8985B88552E2E234E14D8AA2863026B" # noqa: E501 + elif self._firmware == Firmware.FLEX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B446F6D61696E5F4E616D6530020007310108320121332102B91FBEC173E3BA4A714E014EBC827B6F899A9FA7F4AC769CDE284317A00F4F65340101350105154730450221008B6BBCE1716C0A06F110C77FE181F8395D1692441459A106411463F01A45D4A7022044AB69037E6FA9D1D1A409E00B202C2D4451D464C8E5D4962D509FE63153FE93" # noqa: E501 + # pylint: enable=line-too-long + + self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_COIN_META, bytes.fromhex(cert_apdu)) + payload = format_tlv(DomainNameTag.STRUCTURE_TYPE, 3) # TrustedDomainName payload += format_tlv(DomainNameTag.STRUCTURE_VERSION, 1) payload += format_tlv(DomainNameTag.SIGNER_KEY_ID, 0) # test key @@ -194,6 +256,23 @@ def set_plugin(self, key_id: int = 2, algo_id: int = 1, sig: Optional[bytes] = None) -> RAPDU: + + if self._pki_client is None: + print(f"Ledger-PKI Not supported on '{self._firmware.name}'") + else: + # pylint: disable=line-too-long + if self._firmware == Firmware.NANOSP: + cert_apdu = "01010102010210040102000011040000000212010013020002140101160400000000200A53657420506C7567696E30020003310107320121332103C055BC4ECF055E2D85085D35127A3DE6705C7F885055CD7071E87671BF191FE3340101350103154630440220401824348DA0E435C9BF16C3591665CFA1B7D8E729971BE884027E02BD3C35A102202289EE207B73D98E9E6110CC143EB929F03B99D54C63023C99561D3CE164D30F" # noqa: E501 + elif self._firmware == Firmware.NANOX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200A53657420506C7567696E30020003310107320121332103C055BC4ECF055E2D85085D35127A3DE6705C7F885055CD7071E87671BF191FE334010135010215473045022100E657DE255F954779E14D281E2E739D89DEF2E943B7FD4B4AFE49CF4FF7E1D84F022057F29C9AEA8FAA25C8438FDEE85C6DABF270E5CEC1655F17F2D9A6ADCD3ADC0E" # noqa: E501 + elif self._firmware == Firmware.STAX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200A53657420506C7567696E30020003310107320121332103C055BC4ECF055E2D85085D35127A3DE6705C7F885055CD7071E87671BF191FE334010135010415473045022100B8AF9667C190B60BF350D8F8CA66A4BCEA22BF47D757CB7F88F8D16C7794BCDC02205F7D6C8E9294F73744A82E1062B10FFEB809252682112E71A419EFC78227211B" # noqa: E501 + elif self._firmware == Firmware.FLEX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200A53657420506C7567696E30020003310107320121332103C055BC4ECF055E2D85085D35127A3DE6705C7F885055CD7071E87671BF191FE334010135010515473045022100F5069D8BCEDCF7CC55273266E3871B09FFCACD084B5753347A809DDDA67E6235022003CE65364BFA96B6FE7A9D8C13EC87B8E727E8B7BF4A63176F5D61AB8F97807E" # noqa: E501 + # pylint: enable=line-too-long + + self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_PLUGIN_METADATA, bytes.fromhex(cert_apdu)) + if sig is None: # Temporarily get a command with an empty signature to extract the payload and # compute the signature on it @@ -227,6 +306,23 @@ def provide_nft_metadata(self, key_id: int = 1, algo_id: int = 1, sig: Optional[bytes] = None) -> RAPDU: + + if self._pki_client is None: + print(f"Ledger-PKI Not supported on '{self._firmware.name}'") + else: + # pylint: disable=line-too-long + if self._firmware == Firmware.NANOSP: + cert_apdu = "0101010201021004010200001104000000021201001302000214010116040000000020084e46545f496e666f300200043101033201213321023cfb5fb31905f4bd39d9d535a40c26aab51c5d7d3219b28ac942b980fb206cfb34010135010315473045022100d43e142a6639b27a79bc4f021854df48f1bc1e828ac47b105578cb527b69f525022078f6e6b3eb9bb787a0a29e85531ce3512c2d6481e761e840db0fb6b0898911a1" # noqa: E501 + elif self._firmware == Firmware.NANOX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020084E46545F496E666F300200043101033201213321023CFB5FB31905F4BD39D9D535A40C26AAB51C5D7D3219B28AC942B980FB206CFB340101350102154730450221009BAE21BB8CBA6F95DDFF86AEEA991D63FA36A469A3071F61BDA8895F1A5F0AC3022061661F95D1513D3FDE81FFEA4B0C6D48ADCB27ED70915EE3ACD16A2A64CDE916" # noqa: E501 + elif self._firmware == Firmware.STAX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020084E46545F496E666F300200043101033201213321023CFB5FB31905F4BD39D9D535A40C26AAB51C5D7D3219B28AC942B980FB206CFB3401013501041546304402201DEE04EC830FFDE5C98A708EC6865605FC14FF6105A54BE5230F2B954C673B940220581A0A5E42A7779140963703E43B3BEABE4C69284EDEF00E76BB5875E0810C9B" # noqa: E501 + elif self._firmware == Firmware.FLEX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020084E46545F496E666F300200043101033201213321023CFB5FB31905F4BD39D9D535A40C26AAB51C5D7D3219B28AC942B980FB206CFB340101350105154730450221009ABCC7056D54C1B5DBB353178B13850C20521EE6884AA415AA61B329DB1D87F602204E308F273B8D18080184695438577F770524F717E5D08EE20ECBF1BC599F3538" # noqa: E501 + # pylint: enable=line-too-long + + self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_NFT_METADATA, bytes.fromhex(cert_apdu)) + if sig is None: # Temporarily get a command with an empty signature to extract the payload and # compute the signature on it @@ -278,6 +374,23 @@ def provide_token_metadata(self, decimals: int, chain_id: int, sig: Optional[bytes] = None) -> RAPDU: + + if self._pki_client is None: + print(f"Ledger-PKI Not supported on '{self._firmware.name}'") + else: + # pylint: disable=line-too-long + if self._firmware == Firmware.NANOSP: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B45524332305F546F6B656E300200063101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C64056188734010135010310040102000015473045022100C15795C2AE41E6FAE6B1362EE1AE216428507D7C1D6939B928559CC7A1F6425C02206139CF2E133DD62F3E00F183E42109C9853AC62B6B70C5079B9A80DBB9D54AB5" # noqa: E501 + elif self._firmware == Firmware.NANOX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B45524332305F546F6B656E300200063101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C64056188734010135010215473045022100E3B956F93FBFF0D41908483888F0F75D4714662A692F7A38DC6C41A13294F9370220471991BECB3CA4F43413CADC8FF738A8CC03568BFA832B4DCFE8C469080984E5" # noqa: E501 + elif self._firmware == Firmware.STAX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B45524332305F546F6B656E300200063101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C6405618873401013501041546304402206731FCD3E2432C5CA162381392FD17AD3A41EEF852E1D706F21A656AB165263602204B89FAE8DBAF191E2D79FB00EBA80D613CB7EDF0BE960CB6F6B29D96E1437F5F" # noqa: E501 + elif self._firmware == Firmware.FLEX: + cert_apdu = "01010102010211040000000212010013020002140101160400000000200B45524332305F546F6B656E300200063101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C64056188734010135010515473045022100B59EA8B958AA40578A6FBE9BBFB761020ACD5DBD8AA863C11DA17F42B2AFDE790220186316059EFA58811337D47C7F815F772EA42BBBCEA4AE123D1118C80588F5CB" # noqa: E501 + # pylint: enable=line-too-long + + self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_COIN_META, bytes.fromhex(cert_apdu)) + if sig is None: # Temporarily get a command with an empty signature to extract the payload and # compute the signature on it diff --git a/client/src/ledger_app_clients/ethereum/eip712/InputData.py b/client/src/ledger_app_clients/ethereum/eip712/InputData.py index 4981abd4f..966c47b6c 100644 --- a/client/src/ledger_app_clients/ethereum/eip712/InputData.py +++ b/client/src/ledger_app_clients/ethereum/eip712/InputData.py @@ -12,6 +12,8 @@ from ragger.firmware import Firmware +from client.client import PKIPubKeyUsage + # global variables app_client: EthAppClient = None filtering_paths: dict = {} @@ -450,6 +452,22 @@ def process_data(aclient: EthAppClient, pass prepare_filtering(filters, message) + if aclient._pki_client is None: + print(f"Ledger-PKI Not supported on '{aclient._firmware.name}'") + else: + # pylint: disable=line-too-long + if aclient._firmware == Firmware.NANOSP: + cert_apdu = "0101010201021004010200001104000000021201001302000214010116040000000020104549503731325f46696c746572696e67300200053101083201213321024cca8fad496aa5040a00a7eb2f5cc3b85376d88ba147a7d7054a99c64056188734010135010315473045022100ef197e5b1cabb3de5dfc62f965db8536b0463d272c6fea38ebc73605715b1df9022017bef619d52a9728b37a9b5a33f0143bcdcc714694eed07c326796ffbb7c2958" # noqa: E501 + elif aclient._firmware == Firmware.NANOX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020104549503731325F46696C746572696E67300200053101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C64056188734010135010215473045022100E07E129B0DC2A571D5205C3DB43BF4BB3463A2E9D2A4EEDBEC8FD3518CC5A95902205F80306EEF785C4D45BDCA1F25394A1341571BD1921C2740392DD22EB1ACDD8B" # noqa: E501 + elif aclient._firmware == Firmware.STAX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020104549503731325F46696C746572696E67300200053101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C6405618873401013501041546304402204EA7B30F0EEFEF25FAB3ADDA6609E25296C41DD1C5969A92FAE6B600AAC2902E02206212054E123F5F965F787AE7EE565E243F21B11725626D3FF058522D6BDCD995" # noqa: E501 + elif aclient._firmware == Firmware.FLEX: + cert_apdu = "0101010201021104000000021201001302000214010116040000000020104549503731325F46696C746572696E67300200053101083201213321024CCA8FAD496AA5040A00A7EB2F5CC3B85376D88BA147A7D7054A99C6405618873401013501051546304402205FB5E970065A95C57F00FFA3964946251815527613724ED6745C37E303934BE702203CC9F4124B42806F0A7CA765CFAB5AADEB280C35AB8F809FC49ADC97D9B9CE15" # noqa: E501 + # pylint: enable=line-too-long + + aclient._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_COIN_META, bytes.fromhex(cert_apdu)) + # send domain implementation with app_client.eip712_send_struct_impl_root_struct(domain_typename): enable_autonext() From 1a555d0996d19dd8c04f2cf87e4fac7b8f9d43ae Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 30 Jul 2024 16:39:52 +0200 Subject: [PATCH 010/102] Fix client 'settings_toggle' offset computation --- .../ledger_app_clients/ethereum/settings.py | 37 ++++++++++--------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/client/src/ledger_app_clients/ethereum/settings.py b/client/src/ledger_app_clients/ethereum/settings.py index 158a46c77..5e452a0ca 100644 --- a/client/src/ledger_app_clients/ethereum/settings.py +++ b/client/src/ledger_app_clients/ethereum/settings.py @@ -25,32 +25,35 @@ def get_device_settings(firmware: Firmware) -> list[SettingID]: ] -def get_setting_per_page(firmware: Firmware) -> int: - if firmware == Firmware.STAX: - return 3 - return 2 - - -def get_setting_position(firmware: Firmware, setting: Union[NavInsID, SettingID]) -> tuple[int, int]: - settings_per_page = get_setting_per_page(firmware) +def get_setting_position(firmware: Firmware, setting_idx: int, per_page: int) -> tuple[int, int]: if firmware == Firmware.STAX: screen_height = 672 # px header_height = 88 # px footer_height = 92 # px - option_offset = 350 # px + x_offset = 350 # px else: screen_height = 600 # px header_height = 92 # px footer_height = 97 # px - option_offset = 420 # px - usable_height = screen_height - (header_height + footer_height) - setting_height = usable_height // settings_per_page - index_in_page = get_device_settings(firmware).index(SettingID(setting)) % settings_per_page - return option_offset, header_height + (setting_height * index_in_page) + (setting_height // 2) + x_offset = 420 # px + index_in_page = setting_idx % per_page + if index_in_page == 0: + y_offset = header_height + 10 + elif per_page == 3: + if setting_idx == 1: + # 2nd setting over 3: middle of the screen + y_offset = screen_height // 2 + else: + # Last setting + y_offset = screen_height - footer_height - 10 + else: + # 2 per page, requesting the 2nd one; middle of screen is ok + y_offset = screen_height // 2 + return x_offset, y_offset def settings_toggle(firmware: Firmware, nav: Navigator, to_toggle: list[SettingID]): - moves: list[Union[NavIns, NavInsID]] = list() + moves: list[Union[NavIns, NavInsID]] = [] settings = get_device_settings(firmware) # Assume the app is on the home page if firmware.is_nano: @@ -63,12 +66,12 @@ def settings_toggle(firmware: Firmware, nav: Navigator, to_toggle: list[SettingI moves += [NavInsID.BOTH_CLICK] # Back else: moves += [NavInsID.USE_CASE_HOME_SETTINGS] - settings_per_page = get_setting_per_page(firmware) + settings_per_page = 3 if firmware == Firmware.STAX else 2 for setting in settings: setting_idx = settings.index(setting) if (setting_idx > 0) and (setting_idx % settings_per_page) == 0: moves += [NavInsID.USE_CASE_SETTINGS_NEXT] if setting in to_toggle: - moves += [NavIns(NavInsID.TOUCH, get_setting_position(firmware, setting))] + moves += [NavIns(NavInsID.TOUCH, get_setting_position(firmware, setting_idx, settings_per_page))] moves += [NavInsID.USE_CASE_SETTINGS_MULTI_PAGE_EXIT] nav.navigate(moves, screen_change_before_first_instruction=False) From 338f7cef45f470886fbbc856c692567af9a72a4f Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 11 Jun 2024 10:59:14 +0200 Subject: [PATCH 011/102] Adapt test to provide certificate APDU --- tests/ragger/setup.cfg | 1 + tests/ragger/test_domain_name.py | 1 + tests/ragger/test_erc20information.py | 5 ++--- tests/ragger/test_nft.py | 1 + 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/ragger/setup.cfg b/tests/ragger/setup.cfg index 89bf1ed45..4a673e2c3 100644 --- a/tests/ragger/setup.cfg +++ b/tests/ragger/setup.cfg @@ -13,6 +13,7 @@ disable = C0114, # missing-module-docstring R0912, # too-many-branches R0913, # too-many-arguments R0914, # too-many-locals + R0915, # too-many-statements W0603, # global-statement E0401 # import-error extension-pkg-whitelist=hid diff --git a/tests/ragger/test_domain_name.py b/tests/ragger/test_domain_name.py index 96fa27023..438e91d11 100644 --- a/tests/ragger/test_domain_name.py +++ b/tests/ragger/test_domain_name.py @@ -34,6 +34,7 @@ def common(firmware: Firmware, app_client: EthAppClient) -> int: if firmware == Firmware.NANOS: pytest.skip("Not supported on LNS") + challenge = app_client.get_challenge() return ResponseParser.challenge(challenge.data) diff --git a/tests/ragger/test_erc20information.py b/tests/ragger/test_erc20information.py index a858f5574..dfe606634 100644 --- a/tests/ragger/test_erc20information.py +++ b/tests/ragger/test_erc20information.py @@ -5,7 +5,6 @@ from client.client import EthAppClient, StatusWord - def test_provide_erc20_token(backend: BackendInterface): app_client = EthAppClient(backend) @@ -21,7 +20,7 @@ def test_provide_erc20_token_error(backend: BackendInterface): addr = bytes.fromhex("e41d2489571d322189246dafa5ebde1f4699f498") sign = bytes.fromhex("deadbeef") - with pytest.raises(ExceptionRAPDU) as e: + with pytest.raises(ExceptionRAPDU) as err: app_client.provide_token_metadata("ZRX", addr, 18, 1, sign) - assert e.value.status == StatusWord.INVALID_DATA + assert err.value.status == StatusWord.INVALID_DATA diff --git a/tests/ragger/test_nft.py b/tests/ragger/test_nft.py index 987682b8f..ed3b08ff1 100644 --- a/tests/ragger/test_nft.py +++ b/tests/ragger/test_nft.py @@ -70,6 +70,7 @@ def common_test_nft(firmware: Firmware, collec.addr, get_selector_from_data(data), collec.chain_id) + app_client.provide_nft_metadata(collec.name, collec.addr, collec.chain_id) tx_params = { "nonce": NONCE, From 6c90220fd4c3c95af0f09a3124953504f6ea0bc4 Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Mon, 12 Aug 2024 12:19:52 +0200 Subject: [PATCH 012/102] Implement swap with calldata --- CHANGELOG.md | 6 ++ src/eth_plugin_handler.c | 14 ++- src/eth_plugin_internal.h | 1 + src/handle_swap_sign_transaction.c | 53 +++++++++ src/main.c | 2 - src/shared_context.h | 24 ++++- src_features/setPlugin/cmd_setPlugin.c | 8 ++ src_features/setPlugin/cmd_setPlugin.h | 3 + src_features/signTx/logic_signTx.c | 10 ++ src_plugins/swap_with_calldata_plugin.c | 137 ++++++++++++++++++++++++ 10 files changed, 249 insertions(+), 9 deletions(-) create mode 100644 src_features/setPlugin/cmd_setPlugin.h create mode 100644 src_plugins/swap_with_calldata_plugin.c diff --git a/CHANGELOG.md b/CHANGELOG.md index c1d1bf415..6eccaa34c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [1.12.0](https://github.com/ledgerhq/app-ethereum/compare/1.11.0...1.11.1) - 2024-??-?? + +### Added + +- Added support for swap with calldata (Thorswap / LiFi / ...) + ## [1.11.2](https://github.com/ledgerhq/app-ethereum/compare/1.11.1...1.11.2) - 2024-08-13 ### Added diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index 475a2a40f..1d92ab631 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -4,6 +4,7 @@ #include "plugin_utils.h" #include "shared_context.h" #include "network.h" +#include "cmd_setPlugin.h" void eth_plugin_prepare_init(ethPluginInitContract_t *init, const uint8_t *selector, @@ -153,10 +154,13 @@ eth_plugin_result_t eth_plugin_perform_init(uint8_t *contractAddress, break; } - // Do not handle a plugin if running in swap mode if (G_called_from_swap && (contractAddress != NULL)) { - PRINTF("eth_plug_init aborted in swap mode\n"); - return 0; + PRINTF("contractAddress == %.*H\n", 20, contractAddress); + PRINTF("selector == %.*H\n", 20, contractAddress); + PRINTF("Fallback on swap_with_calldata plugin\n"); + set_swap_with_calldata_plugin_type(); + dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_OK; + contractAddress = NULL; } eth_plugin_result_t status = ETH_PLUGIN_RESULT_UNAVAILABLE; @@ -271,6 +275,10 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) { END_TRY; break; } + case SWAP_WITH_CALLDATA: { + swap_with_calldata_plugin_call(method, parameter); + break; + } #ifdef HAVE_NFT_SUPPORT case ERC721: { erc721_plugin_call(method, parameter); diff --git a/src/eth_plugin_internal.h b/src/eth_plugin_internal.h index 14eecea58..40466ac30 100644 --- a/src/eth_plugin_internal.h +++ b/src/eth_plugin_internal.h @@ -7,6 +7,7 @@ void erc721_plugin_call(int message, void* parameters); void erc1155_plugin_call(int message, void* parameters); +void swap_with_calldata_plugin_call(int message, void* parameters); typedef bool (*const PluginAvailableCheck)(void); typedef void (*PluginCall)(int, void*); diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index 2ea314af7..7b170c093 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -10,15 +10,37 @@ #include "nbgl_use_case.h" #endif // HAVE_NBGL +// Remember if we have been started by the Exchange application or not +bool G_called_from_swap; + +// Set this boolean when a transaction is signed in Swap mode. Safety against double sign +bool G_swap_response_ready; + // Save the BSS address where we will write the return value when finished static uint8_t* G_swap_sign_return_value_address; +// Standard or crosschain swap type +swap_mode_t G_swap_mode; + +// On crosschain swap, save the hash promised by the partner +uint8_t G_swap_crosschain_hash[CX_SHA256_SIZE]; + +typedef enum extra_id_type_e { + EXTRA_ID_TYPE_NATIVE, + EXTRA_ID_TYPE_EVM_CALLDATA, + // There are others but they are not relevant for the Ethereum application +} extra_id_type_t; + bool copy_transaction_parameters(create_transaction_parameters_t* sign_transaction_params, const chain_config_t* config) { // first copy parameters to stack, and then to global data. // We need this "trick" as the input data position can overlap with app-ethereum globals txStringProperties_t stack_data; + uint8_t destination_address_extra_data[CX_SHA256_SIZE + 1]; + memset(&stack_data, 0, sizeof(stack_data)); + memset(destination_address_extra_data, 0, sizeof(destination_address_extra_data)); + strlcpy(stack_data.toAddress, sign_transaction_params->destination_address, sizeof(stack_data.toAddress)); @@ -28,6 +50,12 @@ bool copy_transaction_parameters(create_transaction_parameters_t* sign_transacti return false; } + if (sign_transaction_params->destination_address_extra_id != NULL) { + memcpy(destination_address_extra_data, + sign_transaction_params->destination_address_extra_id, + sizeof(destination_address_extra_data)); + } + char ticker[MAX_TICKER_LEN]; uint8_t decimals; uint64_t chain_id = 0; @@ -71,6 +99,31 @@ bool copy_transaction_parameters(create_transaction_parameters_t* sign_transacti G_swap_sign_return_value_address = &sign_transaction_params->result; // Commit the values read from exchange to the clean global space + // if destination_address_extra_id is given, we use the first byte to determine if we use the + // normal swap protocol, or the one for cross-chain swaps + switch (destination_address_extra_data[0]) { + case EXTRA_ID_TYPE_NATIVE: + G_swap_mode = SWAP_MODE_STANDARD; + PRINTF("Standard swap\n"); + + // we don't use the payin_extra_id field in this mode + explicit_bzero(G_swap_crosschain_hash, sizeof(G_swap_crosschain_hash)); + break; + case EXTRA_ID_TYPE_EVM_CALLDATA: + G_swap_mode = SWAP_MODE_CROSSCHAIN_PENDING_CHECK; + + memcpy(G_swap_crosschain_hash, + destination_address_extra_data + 1, + sizeof(G_swap_crosschain_hash)); + + PRINTF("Crosschain swap with hash: %.*H\n", CX_SHA256_SIZE, G_swap_crosschain_hash); + break; + default: + // We can't return errors from here, we remember that we have an issue to report later + PRINTF("Invalid or unknown swap protocol\n"); + G_swap_mode = SWAP_MODE_ERROR; + } + memcpy(&strings.common, &stack_data, sizeof(stack_data)); return true; } diff --git a/src/main.c b/src/main.c index c115af24f..825668896 100644 --- a/src/main.c +++ b/src/main.c @@ -49,8 +49,6 @@ cx_sha3_t global_sha3; uint8_t appState; uint16_t apdu_response_code; -bool G_called_from_swap; -bool G_swap_response_ready; pluginType_t pluginType; #ifdef HAVE_ETH2 diff --git a/src/shared_context.h b/src/shared_context.h index dfde37f12..1c8dfd7b7 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -166,14 +166,30 @@ extern strings_t strings; extern cx_sha3_t global_sha3; extern const internalStorage_t N_storage_real; +typedef enum swap_mode_e { + SWAP_MODE_STANDARD, + SWAP_MODE_CROSSCHAIN_PENDING_CHECK, + SWAP_MODE_CROSSCHAIN_SUCCESS, + SWAP_MODE_ERROR, +} swap_mode_t; + extern bool G_called_from_swap; extern bool G_swap_response_ready; +extern swap_mode_t G_swap_mode; +extern uint8_t G_swap_crosschain_hash[CX_SHA256_SIZE]; typedef enum { - EXTERNAL, // External plugin, set by setExternalPlugin. - ERC721, // Specific ERC721 internal plugin, set by setPlugin. - ERC1155, // Specific ERC1155 internal plugin, set by setPlugin - OLD_INTERNAL // Old internal plugin, not set by any command. + // External plugin, set by setExternalPlugin + EXTERNAL, + // Specific SWAP_WITH_CALLDATA internal plugin + // set as fallback when started if calldata is provided in swap mode + SWAP_WITH_CALLDATA, + // Specific ERC721 internal plugin, set by setPlugin + ERC721, + // Specific ERC1155 internal plugin, set by setPlugin + ERC1155, + // Old internal plugin, not set by any command + OLD_INTERNAL } pluginType_t; extern pluginType_t pluginType; diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index 737309274..8c0122d62 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -65,15 +65,23 @@ typedef bool verificationAlgo(const cx_ecfp_public_key_t *, static pluginType_t getPluginType(char *pluginName, uint8_t pluginNameLength) { if (pluginNameLength == sizeof(ERC721_STR) - 1 && strncmp(pluginName, ERC721_STR, pluginNameLength) == 0) { + PRINTF("Using internal plugin ERC721\n"); return ERC721; } else if (pluginNameLength == sizeof(ERC1155_STR) - 1 && strncmp(pluginName, ERC1155_STR, pluginNameLength) == 0) { + PRINTF("Using internal plugin ERC1155\n"); return ERC1155; } else { + PRINTF("Using external plugin\n"); return EXTERNAL; } } +void set_swap_with_calldata_plugin_type(void) { + PRINTF("Using internal plugin SWAP_WITH_CALLDATA\n"); + pluginType = SWAP_WITH_CALLDATA; +} + void handleSetPlugin(uint8_t p1, uint8_t p2, const uint8_t *workBuffer, diff --git a/src_features/setPlugin/cmd_setPlugin.h b/src_features/setPlugin/cmd_setPlugin.h new file mode 100644 index 000000000..5749a1dbf --- /dev/null +++ b/src_features/setPlugin/cmd_setPlugin.h @@ -0,0 +1,3 @@ +#pragma once + +void set_swap_with_calldata_plugin_type(void); diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 513f704ef..4475bdc77 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -447,6 +447,16 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { return false; } + // Specific calldata check when in swap mode + if (G_called_from_swap) { + // Two success cases: we are in standard mode and no calldata was received + // We are in crosschain mode and the correct calldata has been received + if (G_swap_mode != SWAP_MODE_STANDARD && G_swap_mode != SWAP_MODE_CROSSCHAIN_SUCCESS) { + PRINTF("Error: G_swap_mode %d refused\n", G_swap_mode); + THROW(ERR_SILENT_MODE_CHECK_FAILED); + } + } + // Prepare destination address and amount to display if (g_use_standard_ui) { // Format the address in a temporary buffer, if in swap case compare it with validated diff --git a/src_plugins/swap_with_calldata_plugin.c b/src_plugins/swap_with_calldata_plugin.c new file mode 100644 index 000000000..b9ccf7d90 --- /dev/null +++ b/src_plugins/swap_with_calldata_plugin.c @@ -0,0 +1,137 @@ +#include +#include "lib_cxng/src/cx_sha256.h" +#include "plugin_utils.h" +#include "eth_plugin_internal.h" +#include "eth_plugin_interface.h" +#include "eth_plugin_handler.h" + +/* SWAP_WITH_CALLDATA 'internal plugin' + * + * This internal plugin is used to parse calldata in the SWAP_WITH_CALLDATA context. + * Used for example by Thorswap and LiFi. + * Difference with main swap mode: + * - The swap transaction promise made by the partner contains a 32 bytes hash additional field + * - This hash is the hash of the calldata of the final signing transaction + * - During the final TX signature in ETH, we check the destination and amount as usual + * - We also check the hash of the calldata against the promised hash. + * + * This minimalist internal plugin is used to do this calldata hashing and check. + */ + +typedef struct swap_with_calldata_context_s { + // Hash of the calldata received. + // Computed on (Selector + N * 32bytes parameters) + // We don't care at all about the content, we'll just compare the hash with the promised hash. + cx_sha256_t update_hash; +} swap_with_calldata_context_t; + +void handle_init_contract_swap_with_calldata(ethPluginInitContract_t *msg) { + PRINTF("handle_init_contract_swap_with_calldata\n"); + if (!G_called_from_swap) { + // Can't happen in theory, but let's double check. + PRINTF("swap_with_calldata plugin can't be used outside of SWAP context"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } + + swap_with_calldata_context_t *context = (swap_with_calldata_context_t *) msg->pluginContext; + + PRINTF("swap_with_calldata plugin init contract %.*H\n", SELECTOR_SIZE, msg->selector); + + // Can't fail + cx_sha256_init_no_throw(&context->update_hash); + + if (cx_sha256_update(&context->update_hash, msg->selector, SELECTOR_SIZE) != CX_OK) { + PRINTF("ERROR: cx_sha256_update on selector\n"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + } else { + msg->result = ETH_PLUGIN_RESULT_OK; + } +} + +void handle_provide_parameter_swap_with_calldata(ethPluginProvideParameter_t *msg) { + PRINTF("handle_provide_parameter_swap_with_calldata\n"); + if (!G_called_from_swap) { + // Can't happen in theory, but let's double check. + PRINTF("swap_with_calldata plugin can't be used outside of SWAP context"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } + + swap_with_calldata_context_t *context = (swap_with_calldata_context_t *) msg->pluginContext; + + PRINTF("swap_with_calldata plugin provide parameter %d %.*H\n", + msg->parameterOffset, + PARAMETER_LENGTH, + msg->parameter); + + if (cx_sha256_update(&context->update_hash, msg->parameter, PARAMETER_LENGTH) != CX_OK) { + PRINTF("ERROR: cx_sha256_update on parameter %d\n", msg->parameterOffset); + msg->result = ETH_PLUGIN_RESULT_ERROR; + } else { + msg->result = ETH_PLUGIN_RESULT_OK; + } +} + +void handle_finalize_swap_with_calldata(ethPluginFinalize_t *msg) { + PRINTF("handle_finalize_swap_with_calldata\n"); + if (!G_called_from_swap) { + // Can't happen in theory, but let's double check. + PRINTF("swap_with_calldata plugin can't be used outside of SWAP context"); + msg->result = ETH_PLUGIN_RESULT_ERROR; + return; + } + + swap_with_calldata_context_t *context = (swap_with_calldata_context_t *) msg->pluginContext; + + // Can't fail + uint8_t hash_digest[CX_SHA256_SIZE]; + cx_sha256_final(&context->update_hash, hash_digest); + + // Compare computed hash with promise made in Exchange by the partner + if (memcmp(hash_digest, G_swap_crosschain_hash, CX_SHA256_SIZE) != 0) { + PRINTF("ERROR: Wrong hash, promised %.*H, received %.*H\n", + CX_SHA256_SIZE, + G_swap_crosschain_hash, + CX_SHA256_SIZE, + hash_digest); + G_swap_mode = SWAP_MODE_ERROR; + } else { + PRINTF("Finalize successful, hashes match\n"); + if (G_swap_mode == SWAP_MODE_CROSSCHAIN_PENDING_CHECK) { + // Remember that a calldata exists and is valid + // This differentiates the case were there was no calldata is provided + G_swap_mode = SWAP_MODE_CROSSCHAIN_SUCCESS; + } else { + PRINTF("G_swap_mode %d wrong, refusing to validate the calldata", G_swap_mode); + G_swap_mode = SWAP_MODE_ERROR; + } + } + + // We use fallback so that the Eth UI takes back the display + // This is simpler than forwarding the values in txContent + // We return this even in case of errors because the error handling is done with G_swap_mode + msg->result = ETH_PLUGIN_RESULT_FALLBACK; + msg->tokenLookup1 = NULL; + msg->tokenLookup2 = NULL; +} + +void swap_with_calldata_plugin_call(int message, void *parameters) { + switch (message) { + case ETH_PLUGIN_INIT_CONTRACT: + handle_init_contract_swap_with_calldata((ethPluginInitContract_t *) parameters); + break; + case ETH_PLUGIN_PROVIDE_PARAMETER: + handle_provide_parameter_swap_with_calldata((ethPluginProvideParameter_t *) parameters); + break; + case ETH_PLUGIN_FINALIZE: + handle_finalize_swap_with_calldata((ethPluginFinalize_t *) parameters); + break; + case ETH_PLUGIN_PROVIDE_INFO: + case ETH_PLUGIN_QUERY_CONTRACT_ID: + case ETH_PLUGIN_QUERY_CONTRACT_UI: + default: + PRINTF("Unhandled message %d\n", message); + break; + } +} From 1abe011453c1c5e00ec6d4fa7317f3b47682fb2b Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 23 Aug 2024 16:15:15 +0200 Subject: [PATCH 013/102] Revert back to the simpler settings_toggle function in the Python client Also adjusted pixel dimensions --- .../ledger_app_clients/ethereum/settings.py | 26 +++++++------------ 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/client/src/ledger_app_clients/ethereum/settings.py b/client/src/ledger_app_clients/ethereum/settings.py index 3edd31e79..25718b6dc 100644 --- a/client/src/ledger_app_clients/ethereum/settings.py +++ b/client/src/ledger_app_clients/ethereum/settings.py @@ -31,28 +31,20 @@ def get_device_settings(firmware: Firmware) -> list[SettingID]: def get_setting_position(firmware: Firmware, setting_idx: int, per_page: int) -> tuple[int, int]: if firmware == Firmware.STAX: screen_height = 672 # px + screen_width = 400 # px header_height = 88 # px footer_height = 92 # px - x_offset = 350 # px else: screen_height = 600 # px - header_height = 92 # px - footer_height = 97 # px - x_offset = 420 # px + screen_width = 480 # px + header_height = 96 # px + footer_height = 96 # px + index_in_page = setting_idx % per_page - if index_in_page == 0: - y_offset = header_height + 10 - elif per_page == 3: - if setting_idx == 1: - # 2nd setting over 3: middle of the screen - y_offset = screen_height // 2 - else: - # Last setting - y_offset = screen_height - footer_height - 10 - else: - # 2 per page, requesting the 2nd one; middle of screen is ok - y_offset = screen_height // 2 - return x_offset, y_offset + usable_height = screen_height - (header_height + footer_height) + setting_height = usable_height // per_page + offset = (setting_height * index_in_page) + (setting_height // 2) + return screen_width // 2, header_height + offset def settings_toggle(firmware: Firmware, nav: Navigator, to_toggle: list[SettingID]): From abaa11e003c5a9f3df44e85b21f44d1072bedf88 Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Fri, 23 Aug 2024 16:35:03 +0200 Subject: [PATCH 014/102] Fix incompatibility with blind sign check --- src_features/signTx/logic_signTx.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 4475bdc77..a562e3bb3 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -389,6 +389,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { pluginFinalize.result = pluginProvideInfo.result; } if (pluginFinalize.result != ETH_PLUGIN_RESULT_FALLBACK) { + PRINTF("pluginFinalize.result %d successful\n", pluginFinalize.result); // Handle the right interface switch (pluginFinalize.uiType) { case ETH_UI_TYPE_GENERIC: @@ -423,6 +424,10 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { report_finalize_error(); return false; } + } else if (G_called_from_swap && G_swap_mode == SWAP_MODE_CROSSCHAIN_SUCCESS) { + PRINTF("Plugin swap_with_calldata fell back for UI with success\n"); + // We are not bling signing, the data has been validated by the plugin + tmpContent.txContent.dataPresent = false; } } @@ -441,12 +446,6 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { THROW(ERR_SILENT_MODE_CHECK_FAILED); } - if (tmpContent.txContent.dataPresent && !N_storage.dataAllowed) { - report_finalize_error(); - ui_error_blind_signing(); - return false; - } - // Specific calldata check when in swap mode if (G_called_from_swap) { // Two success cases: we are in standard mode and no calldata was received @@ -457,6 +456,13 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { } } + if (tmpContent.txContent.dataPresent && !N_storage.dataAllowed) { + PRINTF("Data is present but not allowed\n"); + report_finalize_error(); + ui_error_blind_signing(); + return false; + } + // Prepare destination address and amount to display if (g_use_standard_ui) { // Format the address in a temporary buffer, if in swap case compare it with validated From 2f13f4c352f5dc2060b23be4806439d8d032e1bd Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 22 Aug 2024 11:59:48 +0200 Subject: [PATCH 015/102] Fix EIP-712 end of empty arrays traversal If the app was skipping an empty array that was followed by a non-empty array of structs, the app would not stop at the struct array field but instead at its first non-array child, so its typehash was not computed and the resulting message hash was wrong. --- src_features/signMessageEIP712/path.c | 15 +++++++-------- src_features/signMessageEIP712/path.h | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index 732cbcb46..c403880ac 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -287,9 +287,10 @@ static bool array_depth_list_pop(void) { * * @param[in] skip_if_array skip if path is already pointing at an array * @param[in] stop_at_array stop at the first downstream array + * @param[in] do_typehash if a typehash needs to be done when a new struct is encountered * @return whether the path update worked or not */ -static bool path_update(bool skip_if_array, bool stop_at_array) { +static bool path_update(bool skip_if_array, bool stop_at_array, bool do_typehash) { uint8_t fields_count; const void *struct_ptr; const void *starting_field_ptr; @@ -327,9 +328,7 @@ static bool path_update(bool skip_if_array, bool stop_at_array) { return false; } - // The only times they are both at false is if we are traversing an empty array, - // don't do a typehash in that case - if ((skip_if_array != false) || (stop_at_array != false)) { + if (do_typehash) { // get the struct typehash if (type_hash(typename, typename_len, hash) == false) { return false; @@ -399,7 +398,7 @@ bool path_set_root(const char *const struct_name, uint8_t name_length) { struct_state = DEFINED; // because the first field could be a struct type - path_update(true, true); + path_update(true, true, true); return true; } @@ -467,7 +466,7 @@ bool path_new_array_depth(const uint8_t *const data, uint8_t length) { } array_size = *data; - if (!path_update(false, array_size > 0)) { + if (!path_update(false, array_size > 0, array_size > 0)) { return false; } array_depth_count_bak = path_struct->array_depth_count; @@ -583,7 +582,7 @@ static bool path_advance_in_array(void) { * * @return whether the advancement was successful or not */ -bool path_advance(bool array_check) { +bool path_advance(bool do_typehash) { bool end_reached; do { @@ -593,7 +592,7 @@ bool path_advance(bool array_check) { end_reached = false; } } while (end_reached); - return path_update(array_check, array_check); + return path_update(true, true, do_typehash); } /** diff --git a/src_features/signMessageEIP712/path.h b/src_features/signMessageEIP712/path.h index fbb655eec..336659e85 100644 --- a/src_features/signMessageEIP712/path.h +++ b/src_features/signMessageEIP712/path.h @@ -28,7 +28,7 @@ typedef struct { bool path_set_root(const char *const struct_name, uint8_t length); const void *path_get_field(void); -bool path_advance(bool array_check); +bool path_advance(bool do_typehash); bool path_init(void); void path_deinit(void); bool path_new_array_depth(const uint8_t *const data, uint8_t length); From f4361d2560c7bac637c6854b3aa19f50fe1855a3 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 30 Apr 2024 11:11:43 +0200 Subject: [PATCH 016/102] Cleanup ethUstream with LEDGER_ASSERT instead of THROW --- src/ethUstream.c | 147 ++++++++++++----------------------------------- src/ethUstream.h | 1 - 2 files changed, 36 insertions(+), 112 deletions(-) diff --git a/src/ethUstream.c b/src/ethUstream.c index 428adb5ed..901be0914 100644 --- a/src/ethUstream.c +++ b/src/ethUstream.c @@ -25,6 +25,24 @@ #define MAX_INT256 32 #define MAX_ADDRESS 20 +static void assert_fields(txContext_t *context, const char *name, uint32_t length) { + UNUSED(name); // Just for the case where DEBUG is not enabled + LEDGER_ASSERT((!context->currentFieldIsList), "Invalid type for %s\n", name); + if (length > 0) { + LEDGER_ASSERT((context->currentFieldLength <= length), "Invalid length for %s\n", name); + } +} + +static void assert_empty_list(txContext_t *context, const char *name) { + UNUSED(name); // Just for the case where DEBUG is not enabled + LEDGER_ASSERT((context->currentFieldIsList), "Invalid type for %s\n", name); +} + +static void assert_cmd_length(txContext_t *context, const char *name, uint32_t length) { + UNUSED(name); // Just for the case where DEBUG is not enabled + LEDGER_ASSERT((context->commandLength >= length), "%s Underflow\n", name); +} + void initTx(txContext_t *context, cx_sha3_t *sha3, txContent_t *content, @@ -39,12 +57,9 @@ void initTx(txContext_t *context, CX_ASSERT(cx_keccak_init_no_throw(context->sha3, 256)); } -uint8_t readTxByte(txContext_t *context) { +static uint8_t readTxByte(txContext_t *context) { uint8_t data; - if (context->commandLength < 1) { - PRINTF("readTxByte Underflow\n"); - THROW(EXCEPTION); - } + assert_cmd_length(context, "readTxByte", 1); data = *context->workBuffer; context->workBuffer++; context->commandLength--; @@ -58,10 +73,7 @@ uint8_t readTxByte(txContext_t *context) { } void copyTxData(txContext_t *context, uint8_t *out, uint32_t length) { - if (context->commandLength < length) { - PRINTF("copyTxData Underflow\n"); - THROW(EXCEPTION); - } + assert_cmd_length(context, "copyTxData", length); if (out != NULL) { memmove(out, context->workBuffer, length); } @@ -78,20 +90,14 @@ void copyTxData(txContext_t *context, uint8_t *out, uint32_t length) { static void processContent(txContext_t *context) { // Keep the full length for sanity checks, move to the next field - if (!context->currentFieldIsList) { - PRINTF("Invalid type for RLP_CONTENT\n"); - THROW(EXCEPTION); - } + assert_empty_list(context, "RLP_CONTENT"); context->dataLength = context->currentFieldLength; context->currentField++; context->processingField = false; } static void processAccessList(txContext_t *context) { - if (!context->currentFieldIsList) { - PRINTF("Invalid type for RLP_ACCESS_LIST\n"); - THROW(EXCEPTION); - } + assert_empty_list(context, "RLP_ACCESS_LIST"); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -104,14 +110,7 @@ static void processAccessList(txContext_t *context) { } static void processChainID(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_CHAINID\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_INT256) { - PRINTF("Invalid length for RLP_CHAINID\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_CHAINID", MAX_INT256); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -125,14 +124,7 @@ static void processChainID(txContext_t *context) { } static void processNonce(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_NONCE\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_INT256) { - PRINTF("Invalid length for RLP_NONCE\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_NONCE", MAX_INT256); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -146,14 +138,7 @@ static void processNonce(txContext_t *context) { } static void processStartGas(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_STARTGAS\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_INT256) { - PRINTF("Invalid length for RLP_STARTGAS %d\n", context->currentFieldLength); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_STARTGAS", MAX_INT256); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -172,14 +157,7 @@ static void processGasLimit(txContext_t *context) { } static void processGasprice(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_GASPRICE\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_INT256) { - PRINTF("Invalid length for RLP_GASPRICE\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_GASPRICE", MAX_INT256); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -193,14 +171,7 @@ static void processGasprice(txContext_t *context) { } static void processValue(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_VALUE\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_INT256) { - PRINTF("Invalid length for RLP_VALUE\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_VALUE", MAX_INT256); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -214,14 +185,7 @@ static void processValue(txContext_t *context) { } static void processTo(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_TO\n"); - THROW(EXCEPTION); - } - if (context->currentFieldLength > MAX_ADDRESS) { - PRINTF("Invalid length for RLP_TO\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_TO", MAX_ADDRESS); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -236,10 +200,7 @@ static void processTo(txContext_t *context) { static void processData(txContext_t *context) { PRINTF("PROCESS DATA\n"); - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_DATA\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_DATA", 0); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -257,10 +218,7 @@ static void processData(txContext_t *context) { } static void processAndDiscard(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for Discarded field\n"); - THROW(EXCEPTION); - } + assert_fields(context, "Discarded field", 0); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -273,15 +231,7 @@ static void processAndDiscard(txContext_t *context) { } static void processV(txContext_t *context) { - if (context->currentFieldIsList) { - PRINTF("Invalid type for RLP_V\n"); - THROW(EXCEPTION); - } - - if (context->currentFieldLength > sizeof(context->content->v)) { - PRINTF("Invalid length for RLP_V\n"); - THROW(EXCEPTION); - } + assert_fields(context, "RLP_V", sizeof(context->content->v)); if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = @@ -551,36 +501,11 @@ static parserStatus_e processTxInternal(txContext_t *context) { } parserStatus_e processTx(txContext_t *context, const uint8_t *buffer, uint32_t length) { - parserStatus_e result; - BEGIN_TRY { - TRY { - context->workBuffer = buffer; - context->commandLength = length; - result = processTxInternal(context); - PRINTF("result: %d\n", result); - } - CATCH_OTHER(e) { - result = USTREAM_FAULT; - } - FINALLY { - } - } - END_TRY; - return result; + context->workBuffer = buffer; + context->commandLength = length; + return processTxInternal(context); } parserStatus_e continueTx(txContext_t *context) { - parserStatus_e result; - BEGIN_TRY { - TRY { - result = processTxInternal(context); - } - CATCH_OTHER(e) { - result = USTREAM_FAULT; - } - FINALLY { - } - } - END_TRY; - return result; + return processTxInternal(context); } diff --git a/src/ethUstream.h b/src/ethUstream.h index b27e490b9..6ffae540b 100644 --- a/src/ethUstream.h +++ b/src/ethUstream.h @@ -134,4 +134,3 @@ void initTx(txContext_t *context, parserStatus_e processTx(txContext_t *context, const uint8_t *buffer, uint32_t length); parserStatus_e continueTx(txContext_t *context); void copyTxData(txContext_t *context, uint8_t *out, uint32_t length); -uint8_t readTxByte(txContext_t *context); From ef101b412b8c4c26d85f1566a7b4642e1465bcdc Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 30 Apr 2024 11:12:19 +0200 Subject: [PATCH 017/102] Cleanup check_address --- src/handle_check_address.c | 24 +++++++++++++----------- src/handle_check_address.h | 4 ++-- src/main.c | 5 ++++- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/handle_check_address.c b/src/handle_check_address.c index e41bb7329..8d1b39d7e 100644 --- a/src/handle_check_address.c +++ b/src/handle_check_address.c @@ -7,14 +7,14 @@ #define ZERO(x) explicit_bzero(&x, sizeof(x)) -void handle_check_address(check_address_parameters_t* params, const chain_config_t* chain_config) { +uint16_t handle_check_address(check_address_parameters_t* params, chain_config_t* chain_config) { params->result = 0; PRINTF("Params on the address %d\n", (unsigned int) params); PRINTF("Address to check %s\n", params->address_to_check); PRINTF("Inside handle_check_address\n"); if (params->address_to_check == 0) { PRINTF("Address to check == 0\n"); - return; + return APDU_RESPONSE_OK; } const uint8_t* bip32_path_ptr = params->address_parameters; @@ -22,25 +22,24 @@ void handle_check_address(check_address_parameters_t* params, const chain_config uint32_t bip32Path[MAX_BIP32_PATH]; char address[51]; uint8_t raw_pubkey[65]; + cx_err_t error = CX_INTERNAL_ERROR; if ((bip32PathLength < 0x01) || (bip32PathLength > MAX_BIP32_PATH) || (bip32PathLength * 4 != params->address_parameters_length - 1)) { PRINTF("Invalid path\n"); - return; + return APDU_RESPONSE_INVALID_DATA; } for (uint8_t i = 0; i < bip32PathLength; i++) { bip32Path[i] = U4BE(bip32_path_ptr, 0); bip32_path_ptr += 4; } - if (bip32_derive_get_pubkey_256(CX_CURVE_256K1, - bip32Path, - bip32PathLength, - raw_pubkey, - NULL, - CX_SHA512) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); - } + CX_CHECK(bip32_derive_get_pubkey_256(CX_CURVE_256K1, + bip32Path, + bip32PathLength, + raw_pubkey, + NULL, + CX_SHA512)); getEthAddressStringFromRawKey((const uint8_t*) raw_pubkey, address, chain_config->chainId); @@ -55,4 +54,7 @@ void handle_check_address(check_address_parameters_t* params, const chain_config PRINTF("Addresses match\n"); params->result = 1; } + error = APDU_RESPONSE_OK; +end: + return error; } diff --git a/src/handle_check_address.h b/src/handle_check_address.h index 89a554136..ec3dfa999 100644 --- a/src/handle_check_address.h +++ b/src/handle_check_address.h @@ -4,7 +4,7 @@ #include "swap_lib_calls.h" #include "chainConfig.h" -void handle_check_address(check_address_parameters_t* check_address_params, - const chain_config_t* chain_config); +uint16_t handle_check_address(check_address_parameters_t* check_address_params, + chain_config_t* chain_config); #endif // _HANDLE_CHECK_ADDRESS_H_ diff --git a/src/main.c b/src/main.c index 825668896..ce48b7142 100644 --- a/src/main.c +++ b/src/main.c @@ -605,7 +605,10 @@ __attribute__((noreturn)) void library_main(libargs_t *args) { PRINTF("Inside a library \n"); switch (args->command) { case CHECK_ADDRESS: - handle_check_address(args->check_address, args->chain_config); + if (handle_check_address(args->check_address, args->chain_config) != APDU_RESPONSE_OK) { + // Failed, non recoverable + os_sched_exit(-1); + } break; case SIGN_TRANSACTION: if (copy_transaction_parameters(args->create_transaction, args->chain_config)) { From 71106972fc3659175e050777f86a1be6b421ef93 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 30 Apr 2024 11:12:45 +0200 Subject: [PATCH 018/102] Cleanup printable_amount --- src/handle_get_printable_amount.c | 11 ++++++----- src/handle_get_printable_amount.h | 4 ++-- src/main.c | 6 +++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/handle_get_printable_amount.c b/src/handle_get_printable_amount.c index 5a70e881c..6565684b3 100644 --- a/src/handle_get_printable_amount.c +++ b/src/handle_get_printable_amount.c @@ -8,9 +8,10 @@ #include "uint256.h" #include "string.h" #include "network.h" +#include "apdu_constants.h" -void handle_get_printable_amount(get_printable_amount_parameters_t* params, - chain_config_t* config) { +uint16_t handle_get_printable_amount(get_printable_amount_parameters_t* params, + chain_config_t* config) { char ticker[MAX_TICKER_LEN]; uint8_t decimals; uint64_t chain_id = 0; @@ -18,7 +19,7 @@ void handle_get_printable_amount(get_printable_amount_parameters_t* params, memset(params->printable_amount, 0, sizeof(params->printable_amount)); if (params->amount_length > 32) { PRINTF("Amount is too big, 32 bytes max but buffer has %u bytes", params->amount_length); - return; + return APDU_RESPONSE_INVALID_DATA; } if (!parse_swap_config(params->coin_configuration, @@ -27,7 +28,7 @@ void handle_get_printable_amount(get_printable_amount_parameters_t* params, &decimals, &chain_id)) { PRINTF("Error while parsing config\n"); - return; + return APDU_RESPONSE_INVALID_DATA; } // If the amount is a fee, the ticker should be the chain's native currency if (params->is_fee) { @@ -47,5 +48,5 @@ void handle_get_printable_amount(get_printable_amount_parameters_t* params, sizeof(params->printable_amount))) { memset(params->printable_amount, 0, sizeof(params->printable_amount)); } - return; + return APDU_RESPONSE_OK; } diff --git a/src/handle_get_printable_amount.h b/src/handle_get_printable_amount.h index b81729404..706de9f50 100644 --- a/src/handle_get_printable_amount.h +++ b/src/handle_get_printable_amount.h @@ -4,7 +4,7 @@ #include "swap_lib_calls.h" #include "chainConfig.h" -void handle_get_printable_amount(get_printable_amount_parameters_t* get_printable_amount_params, - chain_config_t* config); +uint16_t handle_get_printable_amount(get_printable_amount_parameters_t* get_printable_amount_params, + chain_config_t* config); #endif // _HANDLE_GET_PRINTABLE_AMOUNT_H_ diff --git a/src/main.c b/src/main.c index ce48b7142..5beb9331e 100644 --- a/src/main.c +++ b/src/main.c @@ -620,7 +620,11 @@ __attribute__((noreturn)) void library_main(libargs_t *args) { } break; case GET_PRINTABLE_AMOUNT: - handle_get_printable_amount(args->get_printable_amount, args->chain_config); + if (handle_get_printable_amount(args->get_printable_amount, args->chain_config) != + APDU_RESPONSE_OK) { + // Failed, non recoverable + os_sched_exit(-1); + } break; default: break; From af8004646a8c1eb49fa91eac170086dd12e7b90a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 5 Aug 2024 15:57:10 +0200 Subject: [PATCH 019/102] remove useless flag 'ALLOW_DATA' --- makefile_conf/features.mk | 6 ------ 1 file changed, 6 deletions(-) diff --git a/makefile_conf/features.mk b/makefile_conf/features.mk index 59b707fce..086e87dde 100644 --- a/makefile_conf/features.mk +++ b/makefile_conf/features.mk @@ -1,11 +1,5 @@ # Activate requested features # --------------------------- -# Enables direct data signing without having to specify it in the settings. Useful when testing with speculos. -ALLOW_DATA ?= 0 -ifneq ($(ALLOW_DATA),0) - DEFINES += HAVE_ALLOW_DATA -endif - # Bypass the signature verification for setExternalPlugin, setPlugin, provideERC20TokenInfo and provideNFTInfo calls BYPASS_SIGNATURES ?= 0 ifneq ($(BYPASS_SIGNATURES),0) From 7ca9a65011099dcf92f7a86bebd7fdeabda4386a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 5 Aug 2024 16:07:34 +0200 Subject: [PATCH 020/102] Switch to full Standard App --- Makefile | 7 +- ledger_app.toml | 2 +- src/apdu_constants.h | 5 +- src/handle_swap_sign_transaction.c | 27 ++--- src/main.c | 135 +++---------------------- src/shared_context.h | 3 + src/uint128.c | 5 +- src/uint256.c | 9 +- src/uint_common.c | 32 ------ src/uint_common.h | 5 - src_bagl/ui_flow.c | 2 +- src_features/signTx/logic_signTx.c | 2 +- src_features/signTx/ui_common_signTx.c | 2 +- src_nbgl/ui_home.c | 2 +- 14 files changed, 41 insertions(+), 197 deletions(-) diff --git a/Makefile b/Makefile index 55a7e2610..0530a52ab 100644 --- a/Makefile +++ b/Makefile @@ -27,8 +27,6 @@ include $(BOLOS_SDK)/Makefile.defines ifeq ($(CHAIN),) CHAIN = ethereum - # Temporary definition to ensure VSCode extension works... To be cleaned later - APPNAME = Ethereum endif SUPPORTED_CHAINS = $(shell find makefile_conf/chain/ -type f -name '*.mk'| sed 's/.*\/\(.*\).mk/\1/g' | sort) @@ -51,9 +49,6 @@ else endif APP_SOURCE_FILES += $(filter-out ./ethereum-plugin-sdk/src/main.c, $(wildcard ./ethereum-plugin-sdk/src/*.c)) INCLUDES_PATH += ./ethereum-plugin-sdk/src -APP_SOURCE_FILES += ${BOLOS_SDK}/lib_standard_app/crypto_helpers.c -APP_SOURCE_FILES += ${BOLOS_SDK}/lib_standard_app/format.c -INCLUDES_PATH += ${BOLOS_SDK}/lib_standard_app ifeq ($(TARGET_NAME),$(filter $(TARGET_NAME),TARGET_STAX TARGET_FLEX)) NETWORK_ICONS_FILE = $(GEN_SRC_DIR)/net_icons.gen.c @@ -144,7 +139,7 @@ ENABLE_NBGL_QRCODE = 1 ######################################## # These advanced settings allow to disable some feature that are by # default enabled in the SDK `Makefile.standard_app`. -DISABLE_STANDARD_APP_FILES = 1 +#DISABLE_STANDARD_APP_FILES = 1 #DISABLE_DEFAULT_IO_SEPROXY_BUFFER_SIZE = 1 # To allow custom size declaration #DISABLE_STANDARD_APP_DEFINES = 1 # Will set all the following disablers #DISABLE_STANDARD_SNPRINTF = 1 diff --git a/ledger_app.toml b/ledger_app.toml index 4f50eae48..ebf8389e1 100644 --- a/ledger_app.toml +++ b/ledger_app.toml @@ -3,7 +3,7 @@ build_directory = "./" sdk = "C" devices = ["nanos", "nanox", "nanos+", "stax", "flex"] -[use_cases] # Coherent build options that make sense for your application +[use_cases] use_test_keys = "CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" dbg_use_test_keys = "DEBUG=1 CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" cal_bypass = "BYPASS_SIGNATURES=1" diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 471a26253..d05e0772c 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -1,6 +1,7 @@ #ifndef _APDU_CONSTANTS_H_ #define _APDU_CONSTANTS_H_ +#include "offsets.h" #include "shared_context.h" #define APP_FLAG_DATA_ALLOWED 0x01 @@ -33,8 +34,6 @@ #define P2_EIP712_LEGACY_IMPLEM 0x00 #define P2_EIP712_FULL_IMPLEM 0x01 -#define COMMON_CLA 0xB0 - #define APDU_RESPONSE_OK 0x9000 #define APDU_RESPONSE_ERROR_NO_INFO 0x6a00 #define APDU_RESPONSE_INVALID_DATA 0x6a80 @@ -45,8 +44,6 @@ #define APDU_RESPONSE_REF_DATA_NOT_FOUND 0x6a88 #define APDU_RESPONSE_UNKNOWN 0x6f00 -enum { OFFSET_CLA = 0, OFFSET_INS, OFFSET_P1, OFFSET_P2, OFFSET_LC, OFFSET_CDATA }; - #define ERR_APDU_EMPTY 0x6982 #define ERR_APDU_SIZE_MISMATCH 0x6983 diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index 7b170c093..c05d62a73 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -134,17 +134,12 @@ void __attribute__((noreturn)) finalize_exchange_sign_transaction(bool is_succes } void __attribute__((noreturn)) handle_swap_sign_transaction(const chain_config_t* config) { -#ifdef HAVE_NBGL - // On Stax, display a spinner at startup - UX_INIT(); - nbgl_useCaseSpinner("Signing"); -#endif // HAVE_NBGL - chainConfig = config; reset_app_context(); G_called_from_swap = true; G_swap_response_ready = false; - io_seproxyhal_init(); + + common_app_init(); if (N_storage.initialized != 0x01) { internalStorage_t storage; @@ -153,16 +148,14 @@ void __attribute__((noreturn)) handle_swap_sign_transaction(const chain_config_t nvm_write((void*) &N_storage, (void*) &storage, sizeof(internalStorage_t)); } - PRINTF("USB power ON/OFF\n"); - USB_power(0); - USB_power(1); -#ifdef HAVE_BLE - // grab the current plane mode setting - G_io_app.plane_mode = os_setting_get(OS_SETTING_PLANEMODE, NULL, 0); - BLE_power(0, NULL); - BLE_power(1, NULL); -#endif // HAVE_BLE +#ifdef HAVE_NBGL + nbgl_useCaseSpinner("Signing"); +#endif // HAVE_NBGL + app_main(); + // Failsafe - os_sched_exit(-1); + app_exit(); + while (1) + ; } diff --git a/src/main.c b/src/main.c index 5beb9331e..55d63188a 100644 --- a/src/main.c +++ b/src/main.c @@ -34,12 +34,6 @@ #include "crypto_helpers.h" #include "manage_asset_info.h" -unsigned char G_io_seproxyhal_spi_buffer[IO_SEPROXYHAL_BUFFER_SIZE_B]; - -void ui_idle(void); - -uint32_t set_result_get_publicKey(void); - tmpCtx_t tmpCtx; txContext_t txContext; tmpContent_t tmpContent; @@ -57,8 +51,6 @@ uint32_t eth2WithdrawalIndex; #endif #include "ux.h" -ux_state_t G_ux; -bolos_ux_params_t G_ux_params; const internalStorage_t N_storage_real; @@ -88,31 +80,6 @@ void io_seproxyhal_send_status(uint32_t sw) { io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); } -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) { - reset(); - } - 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; -} - const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_path_t *bip32) { if (*dataLength < 1) { PRINTF("Invalid data\n"); @@ -367,7 +334,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { finalize_exchange_sign_transaction(false); } else { PRINTF("Unrecoverable\n"); - os_sched_exit(-1); + app_exit(); } } } @@ -445,73 +412,6 @@ void app_main(void) { } } -// override point, but nothing more to do -#ifdef HAVE_BAGL -void io_seproxyhal_display(const bagl_element_t *element) { - io_seproxyhal_display_default(element); -} -#endif - -unsigned char io_event(__attribute__((unused)) unsigned char channel) { - // nothing done with the event, throw an error on the transport layer if - // needed - - // 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; -#ifdef HAVE_BAGL - case SEPROXYHAL_TAG_BUTTON_PUSH_EVENT: - UX_BUTTON_PUSH_EVENT(G_io_seproxyhal_spi_buffer); - break; -#endif // HAVE_BAGL - - 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; - - 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; - - case SEPROXYHAL_TAG_TICKER_EVENT: - UX_TICKER_EVENT(G_io_seproxyhal_spi_buffer, {}); - break; - } - - // close the event if not done previously (by a display or whatever) - if (!io_seproxyhal_spi_is_status_sent()) { - io_seproxyhal_general_status(); - } - - // command has been processed, DO NOT reset the current APDU transport - return 1; -} - -void app_exit() { - BEGIN_TRY_L(exit) { - TRY_L(exit) { - os_sched_exit(-1); - } - FINALLY_L(exit) { - } - } - END_TRY_L(exit); -} - void init_coin_config(chain_config_t *coin_config) { memset(coin_config, 0, sizeof(chain_config_t)); strcpy(coin_config->coinName, CHAINID_COINNAME); @@ -542,16 +442,9 @@ __attribute__((noreturn)) void coin_main(libargs_t *args) { reset_app_context(); for (;;) { - UX_INIT(); - BEGIN_TRY { TRY { - io_seproxyhal_init(); - -#ifdef HAVE_BLE - // grab the current plane mode setting - G_io_app.plane_mode = os_setting_get(OS_SETTING_PLANEMODE, NULL, 0); -#endif // HAVE_BLE + common_app_init(); if (!N_storage.initialized) { internalStorage_t storage; @@ -560,16 +453,8 @@ __attribute__((noreturn)) void coin_main(libargs_t *args) { nvm_write((void *) &N_storage, (void *) &storage, sizeof(internalStorage_t)); } - USB_power(0); - USB_power(1); - ui_idle(); -#ifdef HAVE_BLE - BLE_power(0, NULL); - BLE_power(1, NULL); -#endif // HAVE_BLE - #ifdef HAVE_DOMAIN_NAME // to prevent it from having a fixed value at boot roll_challenge(); @@ -591,7 +476,9 @@ __attribute__((noreturn)) void coin_main(libargs_t *args) { } END_TRY; } - os_sched_exit(-1); + app_exit(); + while (1) + ; } __attribute__((noreturn)) void library_main(libargs_t *args) { @@ -607,7 +494,7 @@ __attribute__((noreturn)) void library_main(libargs_t *args) { case CHECK_ADDRESS: if (handle_check_address(args->check_address, args->chain_config) != APDU_RESPONSE_OK) { // Failed, non recoverable - os_sched_exit(-1); + app_exit(); } break; case SIGN_TRANSACTION: @@ -616,14 +503,14 @@ __attribute__((noreturn)) void library_main(libargs_t *args) { handle_swap_sign_transaction(args->chain_config); } else { // Failed to copy, non recoverable - os_sched_exit(-1); + app_exit(); } break; case GET_PRINTABLE_AMOUNT: if (handle_get_printable_amount(args->get_printable_amount, args->chain_config) != APDU_RESPONSE_OK) { // Failed, non recoverable - os_sched_exit(-1); + app_exit(); } break; default: @@ -678,7 +565,7 @@ __attribute__((noreturn)) void clone_main(libargs_t *args) { #endif // HAVE_NBGL os_lib_call((unsigned int *) &libcall_params); // Ethereum should not return to us - os_sched_exit(-1); + app_exit(); } } FINALLY { @@ -687,7 +574,9 @@ __attribute__((noreturn)) void clone_main(libargs_t *args) { END_TRY; // os_lib_call will raise if Ethereum application is not installed. Do not try to recover. - os_sched_exit(-1); + app_exit(); + while (1) + ; } int ethereum_main(libargs_t *args) { diff --git a/src/shared_context.h b/src/shared_context.h index 1c8dfd7b7..50582736f 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -14,6 +14,9 @@ #include "nbgl_types.h" #endif +extern void app_exit(); +extern void common_app_init(void); + #define MAX_BIP32_PATH 10 #define SELECTOR_LENGTH 4 diff --git a/src/uint128.c b/src/uint128.c index 1dda65046..e25428e20 100644 --- a/src/uint128.c +++ b/src/uint128.c @@ -19,13 +19,14 @@ #include #include +#include "read.h" #include "uint128.h" #include "uint_common.h" #include "common_utils.h" // HEXDIGITS void readu128BE(const uint8_t *const buffer, uint128_t *const target) { - UPPER_P(target) = readUint64BE(buffer); - LOWER_P(target) = readUint64BE(buffer + 8); + UPPER_P(target) = read_u64_be(buffer, 0); + LOWER_P(target) = read_u64_be(buffer + 8, 0); } bool zero128(const uint128_t *const number) { diff --git a/src/uint256.c b/src/uint256.c index 7445b426c..48abdc44c 100644 --- a/src/uint256.c +++ b/src/uint256.c @@ -20,6 +20,8 @@ #include #include #include "uint256.h" +#include "read.h" +#include "write.h" #include "uint_common.h" #include "common_utils.h" // INT256_LENGTH @@ -168,12 +170,13 @@ void mul256(const uint256_t *const number1, uint8_t num1[INT256_LENGTH], num2[INT256_LENGTH], result[INT256_LENGTH * 2]; memset(&result, 0, sizeof(result)); for (uint8_t i = 0; i < 4; i++) { - write_u64_be(num1 + i * sizeof(uint64_t), number1->elements[i / 2].elements[i % 2]); - write_u64_be(num2 + i * sizeof(uint64_t), number2->elements[i / 2].elements[i % 2]); + write_u64_be(num1 + i * sizeof(uint64_t), 0, number1->elements[i / 2].elements[i % 2]); + write_u64_be(num2 + i * sizeof(uint64_t), 0, number2->elements[i / 2].elements[i % 2]); } CX_ASSERT(cx_math_mult_no_throw(result, num1, num2, sizeof(num1))); for (uint8_t i = 0; i < 4; i++) { - read_u64_be(result + 32 + i * sizeof(uint64_t), &target->elements[i / 2].elements[i % 2]); + target->elements[i / 2].elements[i % 2] = + read_u64_be((result + 32 + i * sizeof(uint64_t)), 0); } } diff --git a/src/uint_common.c b/src/uint_common.c index 5fe06a7c4..12264a362 100644 --- a/src/uint_common.c +++ b/src/uint_common.c @@ -15,40 +15,8 @@ * limitations under the License. ********************************************************************************/ -// Adapted from https://github.com/calccrypto/uint256_t - #include "uint_common.h" -void write_u64_be(uint8_t *const buffer, uint64_t value) { - buffer[0] = ((value >> 56) & 0xff); - buffer[1] = ((value >> 48) & 0xff); - buffer[2] = ((value >> 40) & 0xff); - buffer[3] = ((value >> 32) & 0xff); - buffer[4] = ((value >> 24) & 0xff); - buffer[5] = ((value >> 16) & 0xff); - buffer[6] = ((value >> 8) & 0xff); - buffer[7] = (value & 0xff); -} - -void read_u64_be(const uint8_t *const in, uint64_t *const out) { - uint8_t *out_ptr = (uint8_t *) out; - *out_ptr++ = in[7]; - *out_ptr++ = in[6]; - *out_ptr++ = in[5]; - *out_ptr++ = in[4]; - *out_ptr++ = in[3]; - *out_ptr++ = in[2]; - *out_ptr++ = in[1]; - *out_ptr = in[0]; -} - -uint64_t readUint64BE(const uint8_t *const buffer) { - return (((uint64_t) buffer[0]) << 56) | (((uint64_t) buffer[1]) << 48) | - (((uint64_t) buffer[2]) << 40) | (((uint64_t) buffer[3]) << 32) | - (((uint64_t) buffer[4]) << 24) | (((uint64_t) buffer[5]) << 16) | - (((uint64_t) buffer[6]) << 8) | (((uint64_t) buffer[7])); -} - void reverseString(char *const str, uint32_t length) { uint32_t i, j; for (i = 0, j = length - 1; i < j; i++, j--) { diff --git a/src/uint_common.h b/src/uint_common.h index c0e9ac23c..36ab3c9f9 100644 --- a/src/uint_common.h +++ b/src/uint_common.h @@ -15,8 +15,6 @@ * limitations under the License. ********************************************************************************/ -// Adapted from https://github.com/calccrypto/uint256_t - #ifndef _UINT_COMMON_H_ #define _UINT_COMMON_H_ @@ -30,9 +28,6 @@ #define UPPER(x) x.elements[0] #define LOWER(x) x.elements[1] -void write_u64_be(uint8_t *const buffer, uint64_t value); -void read_u64_be(const uint8_t *const in, uint64_t *const out); -uint64_t readUint64BE(const uint8_t *const buffer); void reverseString(char *const str, uint32_t length); #endif //_UINT_COMMON_H_ diff --git a/src_bagl/ui_flow.c b/src_bagl/ui_flow.c index 53a57ddd0..e4a7b395e 100644 --- a/src_bagl/ui_flow.c +++ b/src_bagl/ui_flow.c @@ -57,7 +57,7 @@ UX_STEP_CB( UX_STEP_CB( ux_idle_flow_4_step, pb, - os_sched_exit(-1), + app_exit(), { &C_icon_dashboard_x, "Quit", diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index a562e3bb3..26116df0d 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -435,7 +435,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { if (G_swap_response_ready) { // Unreachable given current return to exchange mechanism. Safeguard against regression PRINTF("FATAL: safety against double sign triggered\n"); - os_sched_exit(-1); + app_exit(); } G_swap_response_ready = true; } diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 4b567db5b..f48838dfa 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -65,7 +65,7 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen finalize_exchange_sign_transaction(true); } else { PRINTF("Unrecoverable\n"); - os_sched_exit(-1); + app_exit(); } } reset_app_context(); diff --git a/src_nbgl/ui_home.c b/src_nbgl/ui_home.c index 8c3accbc8..1e6f3c503 100644 --- a/src_nbgl/ui_home.c +++ b/src_nbgl/ui_home.c @@ -90,7 +90,7 @@ static void setting_toggle_callback(int token, uint8_t index, int page) { static void app_quit(void) { // exit app here - os_sched_exit(-1); + app_exit(); } const nbgl_icon_details_t *get_app_icon(bool caller_icon) { From 0355e766b22480fa7e0d524d4701d0031cbd360c Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 5 Aug 2024 18:12:52 +0200 Subject: [PATCH 021/102] Cleanup APDU_RESPONSE_XXX codes --- doc/ethapp.adoc | 14 +++++++++--- src/apdu_constants.h | 19 ++++++++++------ src/main.c | 18 +++++++-------- .../cmd_getAppConfiguration.c | 2 +- .../getEth2PublicKey/cmd_getEth2PublicKey.c | 8 +++---- .../cmd_performPrivacyOperation.c | 12 +++++----- .../cmd_provideTokenInfo.c | 5 +++-- .../cmd_provideNFTInfo.c | 2 +- .../cmd_setEth2WithdrawalIndex.c | 6 ++--- .../setExternalPlugin/cmd_setExternalPlugin.c | 11 +++++----- src_features/setPlugin/cmd_setPlugin.c | 9 ++++---- src_features/signTx/cmd_signTx.c | 22 +++++++++---------- src_features/signTx/logic_signTx.c | 4 +--- src_features/signTx/ui_common_signTx.c | 11 +++++----- 14 files changed, 79 insertions(+), 64 deletions(-) diff --git a/doc/ethapp.adoc b/doc/ethapp.adoc index 35a0d98e7..618b422b5 100644 --- a/doc/ethapp.adoc +++ b/doc/ethapp.adoc @@ -1122,14 +1122,22 @@ The following standard Status Words are returned for all APDUs - some specific S [width="80%"] |=============================================================================================== | *SW* | *Description* +| 6001 | Mode check fail | 6501 | TransactionType not supported | 6502 | Output buffer too small for chainId conversion -| 6503 | Plugin error -| 6504 | Failed to convert from int256 -| 6700 | Incorrect length +| 68xx | Internal error (Please report) | 6982 | Security status not satisfied (Canceled by user) +| 6983 | Wrong Data length +| 6984 | Plugin not installed +| 6985 | Condition not satisfied +| 6A00 | Error without info | 6A80 | Invalid data +| 6A84 | Insufficient memory +| 6A88 | Data not found | 6B00 | Incorrect parameter P1 or P2 +| 6D00 | Incorrect parameter INS +| 6E00 | Incorrect parameter CLA | 6Fxx | Technical problem (Internal error, please report) | 9000 | Normal ending of the command +| 911C | Command code not supported (i.e. Ledger-PKI not yet available) |=============================================================================================== diff --git a/src/apdu_constants.h b/src/apdu_constants.h index d05e0772c..797900e3d 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -34,18 +34,23 @@ #define P2_EIP712_LEGACY_IMPLEM 0x00 #define P2_EIP712_FULL_IMPLEM 0x01 -#define APDU_RESPONSE_OK 0x9000 +#define APDU_RESPONSE_TX_TYPE_NOT_SUPPORTED 0x6501 +#define APDU_RESPONSE_CHAINID_OUT_BUF_SMALL 0x6502 +#define APDU_RESPONSE_INTERNAL_ERROR 0x6800 +#define APDU_RESPONSE_SECURITY_NOT_SATISFIED 0x6982 +#define APDU_RESPONSE_WRONG_DATA_LENGTH 0x6983 +#define APDU_RESPONSE_PLUGIN_NOT_INSTALLED 0x6984 +#define APDU_RESPONSE_CONDITION_NOT_SATISFIED 0x6985 #define APDU_RESPONSE_ERROR_NO_INFO 0x6a00 #define APDU_RESPONSE_INVALID_DATA 0x6a80 #define APDU_RESPONSE_INSUFFICIENT_MEMORY 0x6a84 -#define APDU_RESPONSE_INVALID_INS 0x6d00 -#define APDU_RESPONSE_INVALID_P1_P2 0x6b00 -#define APDU_RESPONSE_CONDITION_NOT_SATISFIED 0x6985 #define APDU_RESPONSE_REF_DATA_NOT_FOUND 0x6a88 +#define APDU_RESPONSE_INVALID_P1_P2 0x6b00 +#define APDU_RESPONSE_INVALID_INS 0x6d00 +#define APDU_RESPONSE_INVALID_CLA 0x6e00 #define APDU_RESPONSE_UNKNOWN 0x6f00 - -#define ERR_APDU_EMPTY 0x6982 -#define ERR_APDU_SIZE_MISMATCH 0x6983 +#define APDU_RESPONSE_OK 0x9000 +#define APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED 0x911c void handleGetPublicKey(uint8_t p1, uint8_t p2, diff --git a/src/main.c b/src/main.c index 55d63188a..bb8b19075 100644 --- a/src/main.c +++ b/src/main.c @@ -120,12 +120,12 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { // Ledger-PKI APDU not yet caught by the running OS. // Command code not supported PRINTF("Ledger-PKI not yet supported!\n"); - THROW(0x911C); + THROW(APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED); } #endif // HAVE_LEDGER_PKI if (G_io_apdu_buffer[OFFSET_CLA] != CLA) { - THROW(0x6E00); + THROW(APDU_RESPONSE_INVALID_CLA); } switch (G_io_apdu_buffer[OFFSET_INS]) { @@ -296,7 +296,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { #endif default: - THROW(0x6D00); + THROW(APDU_RESPONSE_INVALID_INS); break; } } @@ -311,7 +311,7 @@ void handleApdu(unsigned int *flags, unsigned int *tx) { sw = e; reset_app_context(); break; - case 0x9000: + case APDU_RESPONSE_OK: // All is well sw = e; break; @@ -369,10 +369,10 @@ void app_main(void) { // no apdu received, well, reset the session, and reset the // bootloader configuration if (rx == 0) { - THROW(ERR_APDU_EMPTY); + THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); } if (rx > OFFSET_LC && rx != (G_io_apdu_buffer[OFFSET_LC] + 5)) { - THROW(ERR_APDU_SIZE_MISMATCH); + THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); } handleApdu(&flags, &tx); @@ -387,17 +387,17 @@ void app_main(void) { sw = e; reset_app_context(); break; - case 0x9000: + case APDU_RESPONSE_OK: // All is well sw = e; break; default: // Internal error - sw = 0x6800 | (e & 0x7FF); + sw = APDU_RESPONSE_INTERNAL_ERROR | (e & 0x7FF); reset_app_context(); break; } - if (e != 0x9000) { + if (e != APDU_RESPONSE_OK) { flags &= ~IO_ASYNCH_REPLY; } // Unexpected exception => report diff --git a/src_features/getAppConfiguration/cmd_getAppConfiguration.c b/src_features/getAppConfiguration/cmd_getAppConfiguration.c index 8b137d503..a33cb6311 100644 --- a/src_features/getAppConfiguration/cmd_getAppConfiguration.c +++ b/src_features/getAppConfiguration/cmd_getAppConfiguration.c @@ -18,5 +18,5 @@ void handleGetAppConfiguration(uint8_t p1, G_io_apdu_buffer[2] = MINOR_VERSION; G_io_apdu_buffer[3] = PATCH_VERSION; *tx = 4; - THROW(0x9000); + THROW(APDU_RESPONSE_OK); } diff --git a/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c b/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c index 995598053..76c918cb7 100644 --- a/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c +++ b/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c @@ -61,23 +61,23 @@ void handleGetEth2PublicKey(uint8_t p1, reset_app_context(); } if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } if (p2 != 0) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } dataBuffer = parseBip32(dataBuffer, &dataLength, &bip32); if (dataBuffer == NULL) { - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } getEth2PublicKey(bip32.path, bip32.length, tmpCtx.publicKeyContext.publicKey.W); if (p1 == P1_NON_CONFIRM) { *tx = set_result_get_eth2_publicKey(); - THROW(0x9000); + THROW(APDU_RESPONSE_OK); } else { ui_display_public_eth2(); diff --git a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c index e1a733f45..9ab312bba 100644 --- a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c @@ -35,21 +35,21 @@ void handlePerformPrivacyOperation(uint8_t p1, cx_err_t status = CX_OK; if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } if ((p2 != P2_PUBLIC_ENCRYPTION_KEY) && (p2 != P2_SHARED_SECRET)) { - THROW(0x6700); + THROW(APDU_RESPONSE_INVALID_P1_P2); } dataBuffer = parseBip32(dataBuffer, &dataLength, &bip32); if (dataBuffer == NULL) { - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } if ((p2 == P2_SHARED_SECRET) && (dataLength < 32)) { - THROW(0x6700); + THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); } cx_ecfp_private_key_t privateKey; @@ -87,12 +87,12 @@ void handlePerformPrivacyOperation(uint8_t p1, explicit_bzero(privateKeyData, sizeof(privateKeyData)); if (status != CX_OK) { - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } if (p1 == P1_NON_CONFIRM) { *tx = set_result_perform_privacy_operation(); - THROW(0x9000); + THROW(APDU_RESPONSE_OK); } else { snprintf(strings.common.toAddress, sizeof(strings.common.toAddress), diff --git a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c index 9d9dc0f6b..a3b3c9090 100644 --- a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c +++ b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c @@ -70,11 +70,12 @@ void handleProvideErc20TokenInformation(uint8_t p1, #endif (uint8_t *) (workBuffer + offset), dataLength); -#ifndef HAVE_BYPASS_SIGNATURES if (error != CX_OK) { + PRINTF("Invalid token signature\n"); +#ifndef HAVE_BYPASS_SIGNATURES THROW(APDU_RESPONSE_INVALID_DATA); - } #endif + } G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; validate_current_asset_info(); diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index 3d409659b..f7bdfec24 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -70,7 +70,7 @@ void handleProvideNFTInformation(uint8_t p1, if ((pluginType != ERC721) && (pluginType != ERC1155)) { PRINTF("NFT metadata provided without proper plugin loaded!\n"); - THROW(0x6985); + THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); } nft = &get_current_asset_info()->nft; diff --git a/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c b/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c index a7f6f72b6..7f6d9196d 100644 --- a/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c +++ b/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c @@ -10,16 +10,16 @@ void handleSetEth2WithdrawalIndex(uint8_t p1, __attribute__((unused)) unsigned int *flags, __attribute__((unused)) unsigned int *tx) { if (dataLength != 4) { - THROW(0x6700); + THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); } if ((p1 != 0) || (p2 != 0)) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } eth2WithdrawalIndex = U4BE(dataBuffer, 0); - THROW(0x9000); + THROW(APDU_RESPONSE_OK); } #endif diff --git a/src_features/setExternalPlugin/cmd_setExternalPlugin.c b/src_features/setExternalPlugin/cmd_setExternalPlugin.c index 96133367b..4584dee06 100644 --- a/src_features/setExternalPlugin/cmd_setExternalPlugin.c +++ b/src_features/setExternalPlugin/cmd_setExternalPlugin.c @@ -53,11 +53,12 @@ void handleSetExternalPlugin(uint8_t p1, #endif (uint8_t *) (workBuffer + payload_size), dataLength - payload_size); -#ifndef HAVE_BYPASS_SIGNATURES if (error != CX_OK) { + PRINTF("Invalid signature\n"); +#ifndef HAVE_BYPASS_SIGNATURES THROW(APDU_RESPONSE_INVALID_DATA); - } #endif + } // move on to the rest of the payload parsing workBuffer++; @@ -79,7 +80,7 @@ void handleSetExternalPlugin(uint8_t p1, memset(dataContext.tokenContext.pluginName, 0, sizeof(dataContext.tokenContext.pluginName)); - THROW(0x6984); + THROW(APDU_RESPONSE_PLUGIN_NOT_INSTALLED); } FINALLY { } @@ -94,6 +95,6 @@ void handleSetExternalPlugin(uint8_t p1, pluginType = EXTERNAL; - G_io_apdu_buffer[(*tx)++] = 0x90; - G_io_apdu_buffer[(*tx)++] = 0x00; + U2BE_ENCODE(G_io_apdu_buffer, *tx, APDU_RESPONSE_OK); + *tx += 2; } diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index 8c0122d62..fa0bc1114 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -221,11 +221,12 @@ void handleSetPlugin(uint8_t p1, #endif (uint8_t *) (workBuffer + offset), signatureLen); -#ifndef HAVE_BYPASS_SIGNATURES if (error != CX_OK) { + PRINTF("Invalid signature\n"); +#ifndef HAVE_BYPASS_SIGNATURES THROW(APDU_RESPONSE_INVALID_DATA); - } #endif + } pluginType = getPluginType(tokenContext->pluginName, pluginNameLength); if (keyId == PROD_PLUGIN_KEY) { @@ -256,6 +257,6 @@ void handleSetPlugin(uint8_t p1, END_TRY; } - G_io_apdu_buffer[(*tx)++] = 0x90; - G_io_apdu_buffer[(*tx)++] = 0x00; + U2BE_ENCODE(G_io_apdu_buffer, *tx, APDU_RESPONSE_OK); + *tx += 2; } diff --git a/src_features/signTx/cmd_signTx.c b/src_features/signTx/cmd_signTx.c index 99ac51f49..ab32059f2 100644 --- a/src_features/signTx/cmd_signTx.c +++ b/src_features/signTx/cmd_signTx.c @@ -14,7 +14,7 @@ void handleSign(uint8_t p1, if (os_global_pin_is_validated() != BOLOS_UX_OK) { PRINTF("Device is PIN-locked"); - THROW(0x6982); + THROW(APDU_RESPONSE_SECURITY_NOT_SATISFIED); } if (p1 == P1_FIRST) { if (appState != APP_STATE_IDLE) { @@ -25,7 +25,7 @@ void handleSign(uint8_t p1, workBuffer = parseBip32(workBuffer, &dataLength, &tmpCtx.transactionContext.bip32); if (workBuffer == NULL) { - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } tmpContent.txContent.dataPresent = false; @@ -35,7 +35,7 @@ void handleSign(uint8_t p1, if (dataLength < 1) { PRINTF("Invalid data\n"); - THROW(0x6a80); + THROW(APDU_RESPONSE_INVALID_DATA); } // EIP 2718: TransactionType might be present before the TransactionPayload. @@ -49,25 +49,25 @@ void handleSign(uint8_t p1, dataLength--; } else { PRINTF("Transaction type %d not supported\n", txType); - THROW(0x6501); + THROW(APDU_RESPONSE_TX_TYPE_NOT_SUPPORTED); } } else { txContext.txType = LEGACY; } PRINTF("TxType: %x\n", txContext.txType); } else if (p1 != P1_MORE) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } if (p2 != 0) { - THROW(0x6B00); + THROW(APDU_RESPONSE_INVALID_P1_P2); } if ((p1 == P1_MORE) && (appState != APP_STATE_SIGNING_TX)) { PRINTF("Signature not initialized\n"); - THROW(0x6985); + THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); } if (txContext.currentField == RLP_NONE) { PRINTF("Parser not initialized\n"); - THROW(0x6985); + THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); } txResult = processTx(&txContext, workBuffer, dataLength); switch (txResult) { @@ -76,12 +76,12 @@ void handleSign(uint8_t p1, case USTREAM_FINISHED: break; case USTREAM_PROCESSING: - THROW(0x9000); + THROW(APDU_RESPONSE_OK); case USTREAM_FAULT: - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); default: PRINTF("Unexpected parser status\n"); - THROW(0x6A80); + THROW(APDU_RESPONSE_INVALID_DATA); } if (txResult == USTREAM_FINISHED) { diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 26116df0d..d0b4d0369 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -12,8 +12,6 @@ #include "format.h" #include "manage_asset_info.h" -#define ERR_SILENT_MODE_CHECK_FAILED 0x6001 - static bool g_use_standard_ui; static uint32_t splitBinaryParameterPart(char *result, size_t result_size, uint8_t *parameter) { @@ -274,7 +272,7 @@ static void get_network_as_string(char *out, size_t out_size) { if (name == NULL) { // No network name found so simply copy the chain ID as the network name. if (!u64_to_string(chain_id, out, out_size)) { - THROW(0x6502); + THROW(APDU_RESPONSE_CHAINID_OUT_BUF_SMALL); } } else { // Network name found, simply copy it. diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index f48838dfa..29fb5d993 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -5,6 +5,7 @@ #include "common_ui.h" #include "handle_swap_sign_transaction.h" #include "feature_signTx.h" +#include "apdu_constants.h" unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_element_t *e) { uint32_t info = 0; @@ -19,7 +20,7 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen G_io_apdu_buffer + 1, G_io_apdu_buffer + 1 + 32, &info) != CX_OK) { - THROW(0x6F00); + THROW(APDU_RESPONSE_UNKNOWN); } if (txContext.txType == EIP1559 || txContext.txType == EIP2930) { @@ -94,18 +95,18 @@ unsigned int io_seproxyhal_touch_data_ok(__attribute__((unused)) const bagl_elem case USTREAM_FINISHED: break; case USTREAM_PROCESSING: - io_seproxyhal_send_status(0x9000); + io_seproxyhal_send_status(APDU_RESPONSE_OK); ui_idle(); break; case USTREAM_FAULT: reset_app_context(); - io_seproxyhal_send_status(0x6A80); + io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA); ui_idle(); break; default: PRINTF("Unexpected parser status\n"); reset_app_context(); - io_seproxyhal_send_status(0x6A80); + io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA); ui_idle(); } @@ -118,7 +119,7 @@ unsigned int io_seproxyhal_touch_data_ok(__attribute__((unused)) const bagl_elem unsigned int io_seproxyhal_touch_data_cancel(__attribute__((unused)) const bagl_element_t *e) { reset_app_context(); - io_seproxyhal_send_status(0x6985); + io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED); // Display back the original UX ui_idle(); return 0; // do not redraw the widget From 32e6a903c7d36aa02934151d75da63902541bf20 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Mon, 5 Aug 2024 17:48:44 +0200 Subject: [PATCH 022/102] Improve io_seproxyhal_xxx functions - Factorize and cleanup code in io_seproxyhal_send_status - Cleanup io_seproxy_hal_touch_xxx functions --- src/main.c | 17 +++-- src/plugins.c | 4 +- src/ui_callbacks.h | 22 +++---- src_bagl/ui_flow_erc20_approval.c | 4 +- src_bagl/ui_flow_getEth2PublicKey.c | 4 +- src_bagl/ui_flow_getPublicKey.c | 4 +- src_bagl/ui_flow_performPrivacyOperation.c | 4 +- src_bagl/ui_flow_signTx.c | 14 ++-- .../ui_common_getEth2PublicKey.c | 25 +------ .../getPublicKey/ui_common_getPublicKey.c | 23 ++----- .../ui_common_performPrivacyOperation.c | 23 ++----- .../signMessage/ui_common_signMessage.c | 42 ++++-------- .../signMessageEIP712_common/common_712.c | 20 +----- src_features/signTx/logic_signTx.c | 6 +- src_features/signTx/ui_common_signTx.c | 66 +++++++------------ src_nbgl/ui_approve_tx.c | 4 +- src_nbgl/ui_blind_signing.c | 4 +- src_nbgl/ui_confirm_parameter_selector.c | 4 +- src_nbgl/ui_display_privacy.c | 4 +- src_nbgl/ui_get_eth2_public_key.c | 4 +- src_nbgl/ui_get_public_key.c | 4 +- 21 files changed, 103 insertions(+), 199 deletions(-) diff --git a/src/main.c b/src/main.c index bb8b19075..318aefaf0 100644 --- a/src/main.c +++ b/src/main.c @@ -74,10 +74,19 @@ void reset_app_context() { memset((uint8_t *) &tmpContent, 0, sizeof(tmpContent)); } -void io_seproxyhal_send_status(uint32_t sw) { - G_io_apdu_buffer[0] = ((sw >> 8) & 0xff); - G_io_apdu_buffer[1] = (sw & 0xff); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); +unsigned int io_seproxyhal_send_status(uint32_t sw, uint32_t tx, bool reset, bool idle) { + unsigned int err = 0; + if (reset) { + reset_app_context(); + } + U2BE_ENCODE(G_io_apdu_buffer, tx, sw); + tx += 2; + err = io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); + if (idle) { + // Display back the original UX + ui_idle(); + } + return err; } const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_path_t *bip32) { diff --git a/src/plugins.c b/src/plugins.c index ee5a2f77c..e0bbbb926 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -11,7 +11,7 @@ void plugin_ui_get_id(void) { // Query the original contract for ID if it's not an internal alias if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_ID, (void *) &pluginQueryContractID)) { PRINTF("Plugin query contract ID call failed\n"); - io_seproxyhal_touch_tx_cancel(NULL); + io_seproxyhal_touch_tx_cancel(); } } @@ -28,7 +28,7 @@ void plugin_ui_get_item_internal(char *title_buffer, msg_buffer_size); if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_UI, (void *) &pluginQueryContractUI)) { PRINTF("Plugin query contract UI call failed\n"); - io_seproxyhal_touch_tx_cancel(NULL); + io_seproxyhal_touch_tx_cancel(); } } diff --git a/src/ui_callbacks.h b/src/ui_callbacks.h index bd933c471..7624dbfc5 100644 --- a/src/ui_callbacks.h +++ b/src/ui_callbacks.h @@ -7,18 +7,16 @@ typedef int bagl_element_t; #endif -unsigned int io_seproxyhal_touch_settings(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_exit(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_tx_ok(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_tx_cancel(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_address_ok(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_address_cancel(const bagl_element_t *e); +unsigned int io_seproxyhal_touch_tx_ok(void); +unsigned int io_seproxyhal_touch_tx_cancel(void); +unsigned int io_seproxyhal_touch_address_ok(void); +unsigned int io_seproxyhal_touch_address_cancel(void); unsigned int io_seproxyhal_touch_signMessage_ok(void); unsigned int io_seproxyhal_touch_signMessage_cancel(void); -unsigned int io_seproxyhal_touch_data_ok(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_data_cancel(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_eth2_address_ok(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_privacy_ok(const bagl_element_t *e); -unsigned int io_seproxyhal_touch_privacy_cancel(const bagl_element_t *e); +unsigned int io_seproxyhal_touch_data_ok(void); +unsigned int io_seproxyhal_touch_data_cancel(void); +unsigned int io_seproxyhal_touch_eth2_address_ok(void); +unsigned int io_seproxyhal_touch_privacy_ok(void); +unsigned int io_seproxyhal_touch_privacy_cancel(void); -void io_seproxyhal_send_status(uint32_t sw); +unsigned int io_seproxyhal_send_status(uint32_t sw, uint32_t tx, bool reset, bool idle); diff --git a/src_bagl/ui_flow_erc20_approval.c b/src_bagl/ui_flow_erc20_approval.c index 9c512b40d..2ff2e71af 100644 --- a/src_bagl/ui_flow_erc20_approval.c +++ b/src_bagl/ui_flow_erc20_approval.c @@ -45,7 +45,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_approval_allowance_6_step, pbb, - io_seproxyhal_touch_tx_ok(NULL), + io_seproxyhal_touch_tx_ok(), { &C_icon_validate_14, "Accept", @@ -55,7 +55,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_allowance_7_step, pb, - io_seproxyhal_touch_tx_cancel(NULL), + io_seproxyhal_touch_tx_cancel(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_getEth2PublicKey.c b/src_bagl/ui_flow_getEth2PublicKey.c index cccf070f8..2156e0b56 100644 --- a/src_bagl/ui_flow_getEth2PublicKey.c +++ b/src_bagl/ui_flow_getEth2PublicKey.c @@ -31,7 +31,7 @@ UX_STEP_NOCB_INIT( UX_STEP_CB( ux_display_public_eth2_flow_3_step, pb, - io_seproxyhal_touch_eth2_address_ok(NULL), + io_seproxyhal_touch_eth2_address_ok(), { &C_icon_validate_14, "Approve", @@ -39,7 +39,7 @@ UX_STEP_CB( UX_STEP_CB( ux_display_public_eth2_flow_4_step, pb, - io_seproxyhal_touch_address_cancel(NULL), + io_seproxyhal_touch_address_cancel(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_getPublicKey.c b/src_bagl/ui_flow_getPublicKey.c index 3ca3f7713..52b968d3c 100644 --- a/src_bagl/ui_flow_getPublicKey.c +++ b/src_bagl/ui_flow_getPublicKey.c @@ -20,7 +20,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_display_public_flow_3_step, pb, - io_seproxyhal_touch_address_ok(NULL), + io_seproxyhal_touch_address_ok(), { &C_icon_validate_14, "Approve", @@ -28,7 +28,7 @@ UX_STEP_CB( UX_STEP_CB( ux_display_public_flow_4_step, pb, - io_seproxyhal_touch_address_cancel(NULL), + io_seproxyhal_touch_address_cancel(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_performPrivacyOperation.c b/src_bagl/ui_flow_performPrivacyOperation.c index d1cb8d362..2fd411fad 100644 --- a/src_bagl/ui_flow_performPrivacyOperation.c +++ b/src_bagl/ui_flow_performPrivacyOperation.c @@ -27,7 +27,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_display_privacy_public_key_flow_4_step, pb, - io_seproxyhal_touch_privacy_ok(NULL), + io_seproxyhal_touch_privacy_ok(), { &C_icon_validate_14, "Approve", @@ -35,7 +35,7 @@ UX_STEP_CB( UX_STEP_CB( ux_display_privacy_public_key_flow_5_step, pb, - io_seproxyhal_touch_privacy_cancel(NULL), + io_seproxyhal_touch_privacy_cancel(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_signTx.c b/src_bagl/ui_flow_signTx.c index f854eca7d..c473e4673 100644 --- a/src_bagl/ui_flow_signTx.c +++ b/src_bagl/ui_flow_signTx.c @@ -31,7 +31,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_confirm_selector_flow_3_step, pb, - io_seproxyhal_touch_data_ok(NULL), + io_seproxyhal_touch_data_ok(), { &C_icon_validate_14, "Approve", @@ -39,7 +39,7 @@ UX_STEP_CB( UX_STEP_CB( ux_confirm_selector_flow_4_step, pb, - io_seproxyhal_touch_data_cancel(NULL), + io_seproxyhal_touch_data_cancel(), { &C_icon_crossmark, "Reject", @@ -72,7 +72,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_confirm_parameter_flow_3_step, pb, - io_seproxyhal_touch_data_ok(NULL), + io_seproxyhal_touch_data_ok(), { &C_icon_validate_14, "Approve", @@ -80,7 +80,7 @@ UX_STEP_CB( UX_STEP_CB( ux_confirm_parameter_flow_4_step, pb, - io_seproxyhal_touch_data_cancel(NULL), + io_seproxyhal_touch_data_cancel(), { &C_icon_crossmark, "Reject", @@ -176,7 +176,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_approval_accept_step, pbb, - io_seproxyhal_touch_tx_ok(NULL), + io_seproxyhal_touch_tx_ok(), { &C_icon_validate_14, "Accept", @@ -185,7 +185,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_accept_blind_step, pbb, - io_seproxyhal_touch_tx_ok(NULL), + io_seproxyhal_touch_tx_ok(), { &C_icon_validate_14, "Accept risk", @@ -194,7 +194,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_reject_step, pb, - io_seproxyhal_touch_tx_cancel(NULL), + io_seproxyhal_touch_tx_cancel(), { &C_icon_crossmark, "Reject", diff --git a/src_features/getEth2PublicKey/ui_common_getEth2PublicKey.c b/src_features/getEth2PublicKey/ui_common_getEth2PublicKey.c index 77b38c0e3..81dbea90d 100644 --- a/src_features/getEth2PublicKey/ui_common_getEth2PublicKey.c +++ b/src_features/getEth2PublicKey/ui_common_getEth2PublicKey.c @@ -1,32 +1,13 @@ #ifdef HAVE_ETH2 #include "shared_context.h" +#include "apdu_constants.h" #include "feature_getEth2PublicKey.h" #include "common_ui.h" -unsigned int io_seproxyhal_touch_eth2_address_ok(__attribute__((unused)) const bagl_element_t *e) { +unsigned int io_seproxyhal_touch_eth2_address_ok(void) { uint32_t tx = set_result_get_eth2_publicKey(); - G_io_apdu_buffer[tx++] = 0x90; - G_io_apdu_buffer[tx++] = 0x00; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_OK, tx, true, true); } -#if 0 -unsigned int io_seproxyhal_touch_eth2_address_cancel(const bagl_element_t *e) { - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget -} -#endif - #endif diff --git a/src_features/getPublicKey/ui_common_getPublicKey.c b/src_features/getPublicKey/ui_common_getPublicKey.c index d38724a36..870509840 100644 --- a/src_features/getPublicKey/ui_common_getPublicKey.c +++ b/src_features/getPublicKey/ui_common_getPublicKey.c @@ -1,26 +1,13 @@ #include "shared_context.h" +#include "apdu_constants.h" #include "feature_getPublicKey.h" #include "common_ui.h" -unsigned int io_seproxyhal_touch_address_ok(__attribute__((unused)) const bagl_element_t *e) { +unsigned int io_seproxyhal_touch_address_ok(void) { uint32_t tx = set_result_get_publicKey(); - G_io_apdu_buffer[tx++] = 0x90; - G_io_apdu_buffer[tx++] = 0x00; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_OK, tx, true, true); } -unsigned int io_seproxyhal_touch_address_cancel(__attribute__((unused)) const bagl_element_t *e) { - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget +unsigned int io_seproxyhal_touch_address_cancel(void) { + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } diff --git a/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c index a2cb1c3d7..652e6be11 100644 --- a/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/ui_common_performPrivacyOperation.c @@ -1,27 +1,14 @@ #include "shared_context.h" +#include "apdu_constants.h" #include "feature_getPublicKey.h" #include "common_ui.h" #include "feature_performPrivacyOperation.h" -unsigned int io_seproxyhal_touch_privacy_ok(__attribute__((unused)) const bagl_element_t *e) { +unsigned int io_seproxyhal_touch_privacy_ok(void) { uint32_t tx = set_result_perform_privacy_operation(); - G_io_apdu_buffer[tx++] = 0x90; - G_io_apdu_buffer[tx++] = 0x00; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_OK, tx, true, true); } -unsigned int io_seproxyhal_touch_privacy_cancel(__attribute__((unused)) const bagl_element_t *e) { - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget +unsigned int io_seproxyhal_touch_privacy_cancel(void) { + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } diff --git a/src_features/signMessage/ui_common_signMessage.c b/src_features/signMessage/ui_common_signMessage.c index d58fd6cff..31bc78ded 100644 --- a/src_features/signMessage/ui_common_signMessage.c +++ b/src_features/signMessage/ui_common_signMessage.c @@ -4,20 +4,17 @@ #include "common_ui.h" unsigned int io_seproxyhal_touch_signMessage_ok(void) { - uint32_t tx = 0; unsigned int info = 0; - if (bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, - tmpCtx.messageSigningContext.bip32.path, - tmpCtx.messageSigningContext.bip32.length, - CX_RND_RFC6979 | CX_LAST, - CX_SHA256, - tmpCtx.messageSigningContext.hash, - sizeof(tmpCtx.messageSigningContext.hash), - G_io_apdu_buffer + 1, - G_io_apdu_buffer + 1 + 32, - &info) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); - } + CX_ASSERT(bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, + tmpCtx.messageSigningContext.bip32.path, + tmpCtx.messageSigningContext.bip32.length, + CX_RND_RFC6979 | CX_LAST, + CX_SHA256, + tmpCtx.messageSigningContext.hash, + sizeof(tmpCtx.messageSigningContext.hash), + G_io_apdu_buffer + 1, + G_io_apdu_buffer + 1 + 32, + &info)); G_io_apdu_buffer[0] = 27; if (info & CX_ECCINFO_PARITY_ODD) { G_io_apdu_buffer[0]++; @@ -25,24 +22,9 @@ unsigned int io_seproxyhal_touch_signMessage_ok(void) { if (info & CX_ECCINFO_xGTn) { G_io_apdu_buffer[0] += 2; } - tx = 65; - G_io_apdu_buffer[tx++] = 0x90; - G_io_apdu_buffer[tx++] = 0x00; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, true); } unsigned int io_seproxyhal_touch_signMessage_cancel(void) { - reset_app_context(); - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } diff --git a/src_features/signMessageEIP712_common/common_712.c b/src_features/signMessageEIP712_common/common_712.c index 95b8866d5..75005861a 100644 --- a/src_features/signMessageEIP712_common/common_712.c +++ b/src_features/signMessageEIP712_common/common_712.c @@ -11,7 +11,6 @@ static const uint8_t EIP_712_MAGIC[] = {0x19, 0x01}; unsigned int ui_712_approve_cb(void) { uint8_t hash[INT256_LENGTH]; - uint32_t tx = 0; io_seproxyhal_io_heartbeat(); CX_ASSERT(cx_keccak_init_no_throw(&global_sha3, 256)); @@ -56,24 +55,9 @@ unsigned int ui_712_approve_cb(void) { if (info & CX_ECCINFO_xGTn) { G_io_apdu_buffer[0] += 2; } - tx = 65; - G_io_apdu_buffer[tx++] = 0x90; - G_io_apdu_buffer[tx++] = 0x00; - reset_app_context(); - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, true); } unsigned int ui_712_reject_cb(void) { - reset_app_context(); - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index d0b4d0369..72e00573d 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -178,9 +178,7 @@ customStatus_e customProcessor(txContext_t *context) { } void report_finalize_error(void) { - reset_app_context(); - io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA); - ui_idle(); + io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA, 0, true, true); } static void address_to_string(uint8_t *in, @@ -560,7 +558,7 @@ void finalizeParsing(void) { // If called from swap, the user has already validated a standard transaction // And we have already checked the fields of this transaction above if (G_called_from_swap && g_use_standard_ui) { - io_seproxyhal_touch_tx_ok(NULL); + io_seproxyhal_touch_tx_ok(); } else { // If blind-signing detected, start the warning flow beforehand if (tmpContent.txContent.dataPresent) { diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 29fb5d993..9ce31c036 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -7,21 +7,19 @@ #include "feature_signTx.h" #include "apdu_constants.h" -unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_element_t *e) { +uint32_t io_seproxyhal_touch_tx_ok(void) { uint32_t info = 0; - int err; - if (bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, - tmpCtx.transactionContext.bip32.path, - tmpCtx.transactionContext.bip32.length, - CX_RND_RFC6979 | CX_LAST, - CX_SHA256, - tmpCtx.transactionContext.hash, - sizeof(tmpCtx.transactionContext.hash), - G_io_apdu_buffer + 1, - G_io_apdu_buffer + 1 + 32, - &info) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); - } + int err = 0; + CX_ASSERT(bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, + tmpCtx.transactionContext.bip32.path, + tmpCtx.transactionContext.bip32.length, + CX_RND_RFC6979 | CX_LAST, + CX_SHA256, + tmpCtx.transactionContext.hash, + sizeof(tmpCtx.transactionContext.hash), + G_io_apdu_buffer + 1, + G_io_apdu_buffer + 1 + 32, + &info)); if (txContext.txType == EIP1559 || txContext.txType == EIP2930) { if (info & CX_ECCINFO_PARITY_ODD) { @@ -53,11 +51,8 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen } // Write status code at parity_byte + r + s - G_io_apdu_buffer[1 + 64] = 0x90; - G_io_apdu_buffer[1 + 64 + 1] = 0x00; - // Send back the response, do not restart the event loop - err = io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 1 + 64 + 2); + err = io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, false, false); if (G_called_from_swap) { PRINTF("G_called_from_swap\n"); @@ -75,52 +70,37 @@ unsigned int io_seproxyhal_touch_tx_ok(__attribute__((unused)) const bagl_elemen return 0; // do not redraw the widget } -unsigned int io_seproxyhal_touch_tx_cancel(__attribute__((unused)) const bagl_element_t *e) { - reset_app_context(); - G_io_apdu_buffer[0] = 0x69; - G_io_apdu_buffer[1] = 0x85; - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget +unsigned int io_seproxyhal_touch_tx_cancel(void) { + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } -unsigned int io_seproxyhal_touch_data_ok(__attribute__((unused)) const bagl_element_t *e) { +unsigned int io_seproxyhal_touch_data_ok(void) { parserStatus_e txResult = USTREAM_FINISHED; txResult = continueTx(&txContext); + unsigned int err = 0; switch (txResult) { case USTREAM_SUSPENDED: break; case USTREAM_FINISHED: break; case USTREAM_PROCESSING: - io_seproxyhal_send_status(APDU_RESPONSE_OK); - ui_idle(); + err = io_seproxyhal_send_status(APDU_RESPONSE_OK, 0, false, true); break; case USTREAM_FAULT: - reset_app_context(); - io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA); - ui_idle(); + err = io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA, 0, true, true); break; default: PRINTF("Unexpected parser status\n"); - reset_app_context(); - io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA); - ui_idle(); + err = io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA, 0, true, true); } if (txResult == USTREAM_FINISHED) { finalizeParsing(); } - return 0; + return err; } -unsigned int io_seproxyhal_touch_data_cancel(__attribute__((unused)) const bagl_element_t *e) { - reset_app_context(); - io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED); - // Display back the original UX - ui_idle(); - return 0; // do not redraw the widget +unsigned int io_seproxyhal_touch_data_cancel(void) { + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index 13aea2264..fdbf19134 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -34,12 +34,12 @@ struct tx_approval_context_t { static struct tx_approval_context_t tx_approval_context; static void reviewReject(void) { - io_seproxyhal_touch_tx_cancel(NULL); + io_seproxyhal_touch_tx_cancel(); memset(&tx_approval_context, 0, sizeof(tx_approval_context)); } static void confirmTransation(void) { - io_seproxyhal_touch_tx_ok(NULL); + io_seproxyhal_touch_tx_ok(); memset(&tx_approval_context, 0, sizeof(tx_approval_context)); } diff --git a/src_nbgl/ui_blind_signing.c b/src_nbgl/ui_blind_signing.c index 14bcbe7f0..12b7a05e5 100644 --- a/src_nbgl/ui_blind_signing.c +++ b/src_nbgl/ui_blind_signing.c @@ -15,9 +15,7 @@ static void ui_error_blind_signing_choice(bool confirm) { static void ui_warning_blind_signing_choice(bool confirm) { if (confirm) { - reset_app_context(); - io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED); - ui_idle(); + io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); } else { start_signature_flow(); } diff --git a/src_nbgl/ui_confirm_parameter_selector.c b/src_nbgl/ui_confirm_parameter_selector.c index e4dca607b..2292e6226 100644 --- a/src_nbgl/ui_confirm_parameter_selector.c +++ b/src_nbgl/ui_confirm_parameter_selector.c @@ -9,9 +9,9 @@ static nbgl_contentTagValueList_t pairsList; static void reviewChoice(bool confirm) { if (confirm) { - io_seproxyhal_touch_data_ok(NULL); + io_seproxyhal_touch_data_ok(); } else { - io_seproxyhal_touch_data_cancel(NULL); + io_seproxyhal_touch_data_cancel(); } } diff --git a/src_nbgl/ui_display_privacy.c b/src_nbgl/ui_display_privacy.c index 65b536337..209e0d99b 100644 --- a/src_nbgl/ui_display_privacy.c +++ b/src_nbgl/ui_display_privacy.c @@ -6,9 +6,9 @@ static void reviewChoice(bool confirm) { if (confirm) { - io_seproxyhal_touch_privacy_ok(NULL); + io_seproxyhal_touch_privacy_ok(); } else { - io_seproxyhal_touch_privacy_cancel(NULL); + io_seproxyhal_touch_privacy_cancel(); } } diff --git a/src_nbgl/ui_get_eth2_public_key.c b/src_nbgl/ui_get_eth2_public_key.c index 99d09a56b..3be40aa33 100644 --- a/src_nbgl/ui_get_eth2_public_key.c +++ b/src_nbgl/ui_get_eth2_public_key.c @@ -5,11 +5,11 @@ #include "uint_common.h" static void reviewReject(void) { - io_seproxyhal_touch_address_cancel(NULL); + io_seproxyhal_touch_address_cancel(); } static void confirmTransation(void) { - io_seproxyhal_touch_address_ok(NULL); + io_seproxyhal_touch_address_ok(); } static void reviewChoice(bool confirm) { diff --git a/src_nbgl/ui_get_public_key.c b/src_nbgl/ui_get_public_key.c index bc00ab690..855e9207c 100644 --- a/src_nbgl/ui_get_public_key.c +++ b/src_nbgl/ui_get_public_key.c @@ -6,11 +6,11 @@ #include "network_icons.h" static void cancel_send(void) { - io_seproxyhal_touch_address_cancel(NULL); + io_seproxyhal_touch_address_cancel(); } static void confirm_send(void) { - io_seproxyhal_touch_address_ok(NULL); + io_seproxyhal_touch_address_ok(); } static void review_choice(bool confirm) { From 97067acca53135bb4a204d9c359bf0b4b219a1f1 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Aug 2024 13:00:16 +0200 Subject: [PATCH 023/102] Factorize bip32 reading with SDK function --- src/handle_check_address.c | 21 ++++++++------------- src/main.c | 15 ++++++--------- src/shared_context.h | 3 +-- 3 files changed, 15 insertions(+), 24 deletions(-) diff --git a/src/handle_check_address.c b/src/handle_check_address.c index 8d1b39d7e..cf9e4f9c6 100644 --- a/src/handle_check_address.c +++ b/src/handle_check_address.c @@ -17,26 +17,21 @@ uint16_t handle_check_address(check_address_parameters_t* params, chain_config_t return APDU_RESPONSE_OK; } - const uint8_t* bip32_path_ptr = params->address_parameters; - uint8_t bip32PathLength = *(bip32_path_ptr++); - uint32_t bip32Path[MAX_BIP32_PATH]; char address[51]; uint8_t raw_pubkey[65]; cx_err_t error = CX_INTERNAL_ERROR; - - if ((bip32PathLength < 0x01) || (bip32PathLength > MAX_BIP32_PATH) || - (bip32PathLength * 4 != params->address_parameters_length - 1)) { + bip32_path_t bip32; + bip32.length = params->address_parameters[0]; + if (bip32_path_read(params->address_parameters + 1, + params->address_parameters_length, + bip32.path, + bip32.length) == false) { PRINTF("Invalid path\n"); return APDU_RESPONSE_INVALID_DATA; } - for (uint8_t i = 0; i < bip32PathLength; i++) { - bip32Path[i] = U4BE(bip32_path_ptr, 0); - bip32_path_ptr += 4; - } - CX_CHECK(bip32_derive_get_pubkey_256(CX_CURVE_256K1, - bip32Path, - bip32PathLength, + bip32.path, + bip32.length, raw_pubkey, NULL, CX_SHA512)); diff --git a/src/main.c b/src/main.c index 318aefaf0..92103f08a 100644 --- a/src/main.c +++ b/src/main.c @@ -97,11 +97,6 @@ const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_ bip32->length = *dataBuffer; - if (bip32->length < 0x1 || bip32->length > MAX_BIP32_PATH) { - PRINTF("Invalid bip32\n"); - return NULL; - } - dataBuffer++; (*dataLength)--; @@ -110,11 +105,13 @@ const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_ return NULL; } - for (uint8_t i = 0; i < bip32->length; i++) { - bip32->path[i] = U4BE(dataBuffer, 0); - dataBuffer += sizeof(uint32_t); - *dataLength -= sizeof(uint32_t); + if (bip32_path_read(dataBuffer, (size_t) dataLength, bip32->path, (size_t) bip32->length) == + false) { + PRINTF("Invalid Path data\n"); + return NULL; } + dataBuffer += bip32->length * sizeof(uint32_t); + *dataLength -= bip32->length * sizeof(uint32_t); return dataBuffer; } diff --git a/src/shared_context.h b/src/shared_context.h index 50582736f..ebf2a5fca 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -6,6 +6,7 @@ #include "os.h" #include "cx.h" +#include "bip32.h" #include "ethUstream.h" #include "tx_content.h" #include "chainConfig.h" @@ -17,8 +18,6 @@ extern void app_exit(); extern void common_app_init(void); -#define MAX_BIP32_PATH 10 - #define SELECTOR_LENGTH 4 #define PLUGIN_ID_LENGTH 30 From e5578a0d9555cc656cda3814374e3b1592db6198 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Aug 2024 15:25:22 +0200 Subject: [PATCH 024/102] Fix duplicated header filenames between sdk and app --- src/{swap_utils.c => eth_swap_utils.c} | 2 +- src/{swap_utils.h => eth_swap_utils.h} | 23 +++++-- src/handle_get_printable_amount.c | 2 +- src/handle_swap_sign_transaction.c | 2 +- src/main.c | 14 ++--- src/swap_lib_calls.h | 84 -------------------------- 6 files changed, 29 insertions(+), 98 deletions(-) rename src/{swap_utils.c => eth_swap_utils.c} (98%) rename src/{swap_utils.h => eth_swap_utils.h} (58%) delete mode 100644 src/swap_lib_calls.h diff --git a/src/swap_utils.c b/src/eth_swap_utils.c similarity index 98% rename from src/swap_utils.c rename to src/eth_swap_utils.c index 7774b7554..00410434b 100644 --- a/src/swap_utils.c +++ b/src/eth_swap_utils.c @@ -20,7 +20,7 @@ #include #include "asset_info.h" -#include "swap_utils.h" +#include "eth_swap_utils.h" bool parse_swap_config(const uint8_t *config, uint8_t config_len, diff --git a/src/swap_utils.h b/src/eth_swap_utils.h similarity index 58% rename from src/swap_utils.h rename to src/eth_swap_utils.h index 76ca90e56..17f9add45 100644 --- a/src/swap_utils.h +++ b/src/eth_swap_utils.h @@ -18,9 +18,24 @@ #pragma once #include +#include "swap_lib_calls.h" +#include "chainConfig.h" +#include "caller_api.h" -bool parse_swap_config(const uint8_t* config, +typedef struct eth_libargs_s { + unsigned int id; + unsigned int command; + chain_config_t *chain_config; + union { + check_address_parameters_t *check_address; + create_transaction_parameters_t *create_transaction; + get_printable_amount_parameters_t *get_printable_amount; + caller_app_t *caller_app; + }; +} eth_libargs_t; + +bool parse_swap_config(const uint8_t *config, uint8_t config_len, - char* ticker, - uint8_t* decimals, - uint64_t* chain_id); + char *ticker, + uint8_t *decimals, + uint64_t *chain_id); diff --git a/src/handle_get_printable_amount.c b/src/handle_get_printable_amount.c index 6565684b3..5b8d1f6c0 100644 --- a/src/handle_get_printable_amount.c +++ b/src/handle_get_printable_amount.c @@ -1,7 +1,7 @@ #include #include -#include "swap_utils.h" +#include "eth_swap_utils.h" #include "handle_get_printable_amount.h" #include "shared_context.h" #include "common_utils.h" diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index c05d62a73..d4d362a40 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -1,7 +1,7 @@ #include "os_io_seproxyhal.h" #include "os.h" #include "ux.h" -#include "swap_utils.h" +#include "eth_swap_utils.h" #include "handle_swap_sign_transaction.h" #include "shared_context.h" #include "common_utils.h" diff --git a/src/main.c b/src/main.c index 92103f08a..22882b6f4 100644 --- a/src/main.c +++ b/src/main.c @@ -24,7 +24,7 @@ #include "glyphs.h" #include "common_utils.h" -#include "swap_lib_calls.h" +#include "eth_swap_utils.h" #include "handle_swap_sign_transaction.h" #include "handle_get_printable_amount.h" #include "handle_check_address.h" @@ -424,7 +424,7 @@ void init_coin_config(chain_config_t *coin_config) { coin_config->chainId = CHAIN_ID; } -__attribute__((noreturn)) void coin_main(libargs_t *args) { +__attribute__((noreturn)) void coin_main(eth_libargs_t *args) { chain_config_t config; if (args) { if (args->chain_config != NULL) { @@ -487,7 +487,7 @@ __attribute__((noreturn)) void coin_main(libargs_t *args) { ; } -__attribute__((noreturn)) void library_main(libargs_t *args) { +__attribute__((noreturn)) void library_main(eth_libargs_t *args) { chain_config_t coin_config; if (args->chain_config == NULL) { // We have been started directly by Exchange, not by a Clone. Init default chain @@ -528,7 +528,7 @@ __attribute__((noreturn)) void library_main(libargs_t *args) { /* Eth clones do not actually contain any logic, they delegate everything to the ETH application. * Start Eth in lib mode with the correct chain config */ -__attribute__((noreturn)) void clone_main(libargs_t *args) { +__attribute__((noreturn)) void clone_main(eth_libargs_t *args) { PRINTF("Starting in clone_main\n"); BEGIN_TRY { TRY { @@ -585,7 +585,7 @@ __attribute__((noreturn)) void clone_main(libargs_t *args) { ; } -int ethereum_main(libargs_t *args) { +int ethereum_main(eth_libargs_t *args) { // exit critical section __asm volatile("cpsie i"); @@ -616,8 +616,8 @@ int ethereum_main(libargs_t *args) { __attribute__((section(".boot"))) int main(int arg0) { #ifdef USE_LIB_ETHEREUM - clone_main((libargs_t *) arg0); + clone_main((eth_libargs_t *) arg0); #else - return ethereum_main((libargs_t *) arg0); + return ethereum_main((eth_libargs_t *) arg0); #endif } diff --git a/src/swap_lib_calls.h b/src/swap_lib_calls.h deleted file mode 100644 index c4675e303..000000000 --- a/src/swap_lib_calls.h +++ /dev/null @@ -1,84 +0,0 @@ -#pragma once - -/* This file is the shared API between Exchange and the apps started in Library mode for Exchange - * - * DO NOT MODIFY THIS FILE IN APPLICATIONS OTHER THAN EXCHANGE - * On modification in Exchange, forward the changes to all applications supporting Exchange - */ - -#include "stdbool.h" -#include "chainConfig.h" -#include "shared_context.h" -#include "stdint.h" -#include "caller_api.h" - -#define RUN_APPLICATION 1 - -#define SIGN_TRANSACTION 2 - -#define CHECK_ADDRESS 3 - -#define GET_PRINTABLE_AMOUNT 4 - -/* - * Amounts are stored as bytes, with a max size of 16 (see protobuf - * specifications). Max 16B integer is 340282366920938463463374607431768211455 - * in decimal, which is a 32-long char string. - * The printable amount also contains spaces, the ticker symbol (with variable - * size, up to 12 in Ethereum for instance) and a terminating null byte, so 50 - * bytes total should be a fair maximum. - */ -#define MAX_PRINTABLE_AMOUNT_SIZE 50 - -// structure that should be send to specific coin application to get address -typedef struct check_address_parameters_s { - // IN - uint8_t *coin_configuration; - uint8_t coin_configuration_length; - // serialized path, segwit, version prefix, hash used, dictionary etc. - // fields and serialization format depends on specific coin app - uint8_t *address_parameters; - uint8_t address_parameters_length; - char *address_to_check; - char *extra_id_to_check; - // OUT - int result; -} check_address_parameters_t; - -// structure that should be send to specific coin application to get printable amount -typedef struct get_printable_amount_parameters_s { - // IN - uint8_t *coin_configuration; - uint8_t coin_configuration_length; - uint8_t *amount; - uint8_t amount_length; - bool is_fee; - // OUT - char printable_amount[MAX_PRINTABLE_AMOUNT_SIZE]; -} get_printable_amount_parameters_t; - -typedef struct create_transaction_parameters_s { - // IN - uint8_t *coin_configuration; - uint8_t coin_configuration_length; - uint8_t *amount; - uint8_t amount_length; - uint8_t *fee_amount; - uint8_t fee_amount_length; - char *destination_address; - char *destination_address_extra_id; - // OUT - uint8_t result; -} create_transaction_parameters_t; - -typedef struct libargs_s { - unsigned int id; - unsigned int command; - chain_config_t *chain_config; - union { - check_address_parameters_t *check_address; - create_transaction_parameters_t *create_transaction; - get_printable_amount_parameters_t *get_printable_amount; - caller_app_t *caller_app; - }; -} libargs_t; From 29701428eb8b4cc48695a0104798a624f8cc95d9 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 6 Aug 2024 17:30:55 +0200 Subject: [PATCH 025/102] Cleanup main.c - Use SDK function apdu_parser - Replace THROW by return code (1st step) - Cleanup BEGIN_TRY - Factorize storage_init code --- src/apdu_constants.h | 2 + src/main.c | 471 +++++++++++------------------ src/ui_callbacks.h | 2 +- src_features/signTx/logic_signTx.c | 10 +- 4 files changed, 189 insertions(+), 296 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 797900e3d..f37f29618 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -34,6 +34,8 @@ #define P2_EIP712_LEGACY_IMPLEM 0x00 #define P2_EIP712_FULL_IMPLEM 0x01 +#define APDU_NO_RESPONSE 0x0000 +#define APDU_RESPONSE_MODE_CHECK_FAILED 0x6001 #define APDU_RESPONSE_TX_TYPE_NOT_SUPPORTED 0x6501 #define APDU_RESPONSE_CHAINID_OUT_BUF_SMALL 0x6502 #define APDU_RESPONSE_INTERNAL_ERROR 0x6800 diff --git a/src/main.c b/src/main.c index 22882b6f4..890a7242c 100644 --- a/src/main.c +++ b/src/main.c @@ -21,6 +21,7 @@ #include "os_io_seproxyhal.h" +#include "parser.h" #include "glyphs.h" #include "common_utils.h" @@ -74,8 +75,8 @@ void reset_app_context() { memset((uint8_t *) &tmpContent, 0, sizeof(tmpContent)); } -unsigned int io_seproxyhal_send_status(uint32_t sw, uint32_t tx, bool reset, bool idle) { - unsigned int err = 0; +uint16_t io_seproxyhal_send_status(uint16_t sw, uint32_t tx, bool reset, bool idle) { + uint16_t err = 0; if (reset) { reset_app_context(); } @@ -116,244 +117,136 @@ const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_ return dataBuffer; } -void handleApdu(unsigned int *flags, unsigned int *tx) { - unsigned short sw = 0; +static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { + uint16_t sw = APDU_NO_RESPONSE; - BEGIN_TRY { - TRY { #ifndef HAVE_LEDGER_PKI - if ((G_io_apdu_buffer[OFFSET_CLA] == 0xB0 && (G_io_apdu_buffer[OFFSET_INS] == 0x06))) { - // Ledger-PKI APDU not yet caught by the running OS. - // Command code not supported - PRINTF("Ledger-PKI not yet supported!\n"); - THROW(APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED); - } + if ((cmd->cla == 0xB0) && (cmd->ins == 0x06)) { + // Ledger-PKI APDU not yet caught by the running OS. + // Command code not supported + PRINTF("Ledger-PKI not yet supported!\n"); + return APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED; + } #endif // HAVE_LEDGER_PKI - if (G_io_apdu_buffer[OFFSET_CLA] != CLA) { - THROW(APDU_RESPONSE_INVALID_CLA); - } + if (cmd->cla != CLA) { + return APDU_RESPONSE_INVALID_CLA; + } - switch (G_io_apdu_buffer[OFFSET_INS]) { - case INS_GET_PUBLIC_KEY: - forget_known_assets(); - handleGetPublicKey(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + switch (cmd->ins) { + case INS_GET_PUBLIC_KEY: + forget_known_assets(); + handleGetPublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_PROVIDE_ERC20_TOKEN_INFORMATION: - handleProvideErc20TokenInformation(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_PROVIDE_ERC20_TOKEN_INFORMATION: + handleProvideErc20TokenInformation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; #ifdef HAVE_NFT_SUPPORT - case INS_PROVIDE_NFT_INFORMATION: - handleProvideNFTInformation(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_PROVIDE_NFT_INFORMATION: + handleProvideNFTInformation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; #endif // HAVE_NFT_SUPPORT - case INS_SET_EXTERNAL_PLUGIN: - handleSetExternalPlugin(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_SET_EXTERNAL_PLUGIN: + handleSetExternalPlugin(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_SET_PLUGIN: - handleSetPlugin(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_SET_PLUGIN: + handleSetPlugin(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_PERFORM_PRIVACY_OPERATION: - handlePerformPrivacyOperation(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_PERFORM_PRIVACY_OPERATION: + handlePerformPrivacyOperation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_SIGN: - handleSign(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_SIGN: + handleSign(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_GET_APP_CONFIGURATION: - handleGetAppConfiguration(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_GET_APP_CONFIGURATION: + handleGetAppConfiguration(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_SIGN_PERSONAL_MESSAGE: + case INS_SIGN_PERSONAL_MESSAGE: + forget_known_assets(); + *flags |= IO_ASYNCH_REPLY; + if (!handleSignPersonalMessage(cmd->p1, cmd->p2, cmd->data, cmd->lc)) { + reset_app_context(); + } + break; + + case INS_SIGN_EIP_712_MESSAGE: + switch (cmd->p2) { + case P2_EIP712_LEGACY_IMPLEM: forget_known_assets(); - *flags |= IO_ASYNCH_REPLY; - if (!handleSignPersonalMessage(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC])) { - reset_app_context(); - } + handleSignEIP712Message_v0(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); break; - - case INS_SIGN_EIP_712_MESSAGE: - switch (G_io_apdu_buffer[OFFSET_P2]) { - case P2_EIP712_LEGACY_IMPLEM: - forget_known_assets(); - handleSignEIP712Message_v0(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; #ifdef HAVE_EIP712_FULL_SUPPORT - case P2_EIP712_FULL_IMPLEM: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_sign(G_io_apdu_buffer); - break; -#endif // HAVE_EIP712_FULL_SUPPORT - default: - THROW(APDU_RESPONSE_INVALID_P1_P2); - } + case P2_EIP712_FULL_IMPLEM: + *flags |= IO_ASYNCH_REPLY; + handle_eip712_sign(G_io_apdu_buffer); break; +#endif // HAVE_EIP712_FULL_SUPPORT + default: + THROW(APDU_RESPONSE_INVALID_P1_P2); + } + break; #ifdef HAVE_ETH2 - case INS_GET_ETH2_PUBLIC_KEY: - forget_known_assets(); - handleGetEth2PublicKey(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_GET_ETH2_PUBLIC_KEY: + forget_known_assets(); + handleGetEth2PublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; - case INS_SET_ETH2_WITHDRAWAL_INDEX: - handleSetEth2WithdrawalIndex(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC], - flags, - tx); - break; + case INS_SET_ETH2_WITHDRAWAL_INDEX: + handleSetEth2WithdrawalIndex(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + break; #endif #ifdef HAVE_EIP712_FULL_SUPPORT - case INS_EIP712_STRUCT_DEF: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_struct_def(G_io_apdu_buffer); - break; + case INS_EIP712_STRUCT_DEF: + *flags |= IO_ASYNCH_REPLY; + handle_eip712_struct_def(G_io_apdu_buffer); + break; - case INS_EIP712_STRUCT_IMPL: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_struct_impl(G_io_apdu_buffer); - break; + case INS_EIP712_STRUCT_IMPL: + *flags |= IO_ASYNCH_REPLY; + handle_eip712_struct_impl(G_io_apdu_buffer); + break; - case INS_EIP712_FILTERING: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_filtering(G_io_apdu_buffer); - break; + case INS_EIP712_FILTERING: + *flags |= IO_ASYNCH_REPLY; + handle_eip712_filtering(G_io_apdu_buffer); + break; #endif // HAVE_EIP712_FULL_SUPPORT #ifdef HAVE_DOMAIN_NAME - case INS_ENS_GET_CHALLENGE: - handle_get_challenge(); - break; + case INS_ENS_GET_CHALLENGE: + handle_get_challenge(); + break; - case INS_ENS_PROVIDE_INFO: - handle_provide_domain_name(G_io_apdu_buffer[OFFSET_P1], - G_io_apdu_buffer[OFFSET_P2], - G_io_apdu_buffer + OFFSET_CDATA, - G_io_apdu_buffer[OFFSET_LC]); - break; + case INS_ENS_PROVIDE_INFO: + handle_provide_domain_name(cmd->p1, cmd->p2, cmd->data, cmd->lc); + break; #endif // HAVE_DOMAIN_NAME -#if 0 - case 0xFF: // return to dashboard - goto return_to_dashboard; -#endif - - default: - THROW(APDU_RESPONSE_INVALID_INS); - break; - } - } - CATCH(EXCEPTION_IO_RESET) { - THROW(EXCEPTION_IO_RESET); - } - CATCH_OTHER(e) { - bool quit_now = G_called_from_swap && G_swap_response_ready; - switch (e & 0xF000) { - case 0x6000: - // Wipe the transaction context and report the exception - sw = e; - reset_app_context(); - break; - case APDU_RESPONSE_OK: - // All is well - sw = e; - break; - default: - // Internal error - sw = 0x6800 | (e & 0x7FF); - reset_app_context(); - break; - } - // Unexpected exception => report - G_io_apdu_buffer[*tx] = sw >> 8; - G_io_apdu_buffer[*tx + 1] = sw; - *tx += 2; - - // If we are in swap mode and have validated a TX, we send it and immediately quit - if (quit_now) { - if (io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, *tx) == 0) { - // In case of success, the apdu is sent immediately and eth exits - // Reaching this code means we encountered an error - finalize_exchange_sign_transaction(false); - } else { - PRINTF("Unrecoverable\n"); - app_exit(); - } - } - } - FINALLY { - } + default: + sw = APDU_RESPONSE_INVALID_INS; + break; } - END_TRY; + return sw; } void app_main(void) { - unsigned int rx = 0; - unsigned int tx = 0; - unsigned int flags = 0; + uint32_t rx = 0; + uint32_t tx = 0; + uint32_t flags = 0; + uint16_t sw = APDU_NO_RESPONSE; + command_t cmd = {0}; // DESIGN NOTE: the bootloader ignores the way APDU are fetched. The only // goal is to retrieve APDU. @@ -362,8 +255,6 @@ void app_main(void) { // switch event, before the apdu is replied to the bootloader. This avoid // APDU injection faults. for (;;) { - unsigned short sw = 0; - BEGIN_TRY { TRY { rx = tx; @@ -372,21 +263,30 @@ void app_main(void) { rx = io_exchange(CHANNEL_APDU | flags, rx); flags = 0; - // no apdu received, well, reset the session, and reset the - // bootloader configuration - if (rx == 0) { + if (apdu_parser(&cmd, G_io_apdu_buffer, rx) == false) { THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); } - if (rx > OFFSET_LC && rx != (G_io_apdu_buffer[OFFSET_LC] + 5)) { - THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); + PRINTF("=> CLA=%02X | INS=%02X | P1=%02X | P2=%02X | Lc=%02X\n", + cmd.cla, + cmd.ins, + cmd.p1, + cmd.p2, + cmd.lc); + + sw = handleApdu(&cmd, &flags, &tx); + if (sw == APDU_NO_RESPONSE) { + CLOSE_TRY; + continue; } - - handleApdu(&flags, &tx); + THROW(sw); } CATCH(EXCEPTION_IO_RESET) { - THROW(EXCEPTION_IO_RESET); + // reset IO and UX before continuing + CLOSE_TRY; + return; } CATCH_OTHER(e) { + bool quit_now = G_called_from_swap && G_swap_response_ready; switch (e & 0xF000) { case 0x6000: // Wipe the transaction context and report the exception @@ -407,9 +307,20 @@ void app_main(void) { flags &= ~IO_ASYNCH_REPLY; } // Unexpected exception => report - G_io_apdu_buffer[tx] = sw >> 8; - G_io_apdu_buffer[tx + 1] = sw; + U2BE_ENCODE(G_io_apdu_buffer, tx, sw); tx += 2; + + // If we are in swap mode and have validated a TX, we send it and immediately quit + if (quit_now) { + if (io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx) == 0) { + // In case of success, the apdu is sent immediately and eth exits + // Reaching this code means we encountered an error + finalize_exchange_sign_transaction(false); + } else { + PRINTF("Unrecoverable\n"); + app_exit(); + } + } } FINALLY { } @@ -418,12 +329,23 @@ void app_main(void) { } } -void init_coin_config(chain_config_t *coin_config) { +static void init_coin_config(chain_config_t *coin_config) { memset(coin_config, 0, sizeof(chain_config_t)); strcpy(coin_config->coinName, CHAINID_COINNAME); coin_config->chainId = CHAIN_ID; } +static void storage_init(void) { + internalStorage_t storage; + if (N_storage.initialized) { + return; + } + + explicit_bzero(&storage, sizeof(storage)); + storage.initialized = true; + nvm_write((void *) &N_storage, (void *) &storage, sizeof(internalStorage_t)); +} + __attribute__((noreturn)) void coin_main(eth_libargs_t *args) { chain_config_t config; if (args) { @@ -448,43 +370,21 @@ __attribute__((noreturn)) void coin_main(eth_libargs_t *args) { reset_app_context(); for (;;) { - BEGIN_TRY { - TRY { - common_app_init(); + common_app_init(); - if (!N_storage.initialized) { - internalStorage_t storage; - explicit_bzero(&storage, sizeof(storage)); - storage.initialized = true; - nvm_write((void *) &N_storage, (void *) &storage, sizeof(internalStorage_t)); - } + storage_init(); - ui_idle(); + ui_idle(); #ifdef HAVE_DOMAIN_NAME - // to prevent it from having a fixed value at boot - roll_challenge(); + // to prevent it from having a fixed value at boot + roll_challenge(); #endif // HAVE_DOMAIN_NAME - app_main(); - } - CATCH(EXCEPTION_IO_RESET) { - // reset IO and UX before continuing - CLOSE_TRY; - continue; - } - CATCH_ALL { - CLOSE_TRY; - break; - } - FINALLY { - } - } - END_TRY; + app_main(); } - app_exit(); - while (1) - ; + // Should not return + os_sched_exit(-1); } __attribute__((noreturn)) void library_main(eth_libargs_t *args) { @@ -530,59 +430,50 @@ __attribute__((noreturn)) void library_main(eth_libargs_t *args) { */ __attribute__((noreturn)) void clone_main(eth_libargs_t *args) { PRINTF("Starting in clone_main\n"); - BEGIN_TRY { - TRY { - unsigned int libcall_params[5]; - chain_config_t local_chainConfig; - init_coin_config(&local_chainConfig); - - libcall_params[0] = (unsigned int) "Ethereum"; - libcall_params[1] = 0x100; - libcall_params[3] = (unsigned int) &local_chainConfig; - - // Clone called by Exchange, forward the request to Ethereum - if (args != NULL) { - if (args->id != 0x100) { - os_sched_exit(0); - } - libcall_params[2] = args->command; - libcall_params[4] = (unsigned int) args->get_printable_amount; - os_lib_call((unsigned int *) &libcall_params); - // Ethereum fulfilled the request and returned to us. We return to Exchange. - os_lib_end(); - } else { - // Clone called from Dashboard, start Ethereum - libcall_params[2] = RUN_APPLICATION; + uint32_t libcall_params[5]; + chain_config_t local_chainConfig; + init_coin_config(&local_chainConfig); + + libcall_params[0] = (uint32_t) "Ethereum"; + libcall_params[1] = 0x100; + libcall_params[3] = (uint32_t) &local_chainConfig; + + // Clone called by Exchange, forward the request to Ethereum + if (args != NULL) { + if (args->id != 0x100) { + os_sched_exit(0); + } + libcall_params[2] = args->command; + libcall_params[4] = (uint32_t) args->get_printable_amount; + os_lib_call((uint32_t *) &libcall_params); + // Ethereum fulfilled the request and returned to us. We return to Exchange. + os_lib_end(); + } else { + // Clone called from Dashboard, start Ethereum + libcall_params[2] = RUN_APPLICATION; // On Stax, forward our icon to Ethereum #ifdef HAVE_NBGL - const char app_name[] = APPNAME; - caller_app_t capp; - nbgl_icon_details_t icon_details; - uint8_t bitmap[sizeof(ICONBITMAP)]; - - memcpy(&icon_details, &ICONGLYPH, sizeof(ICONGLYPH)); - memcpy(&bitmap, &ICONBITMAP, sizeof(bitmap)); - icon_details.bitmap = (const uint8_t *) bitmap; - capp.name = app_name; - capp.icon = &icon_details; - libcall_params[4] = (unsigned int) &capp; + const char app_name[] = APPNAME; + caller_app_t capp; + nbgl_icon_details_t icon_details; + uint8_t bitmap[sizeof(ICONBITMAP)]; + + memcpy(&icon_details, &ICONGLYPH, sizeof(ICONGLYPH)); + memcpy(&bitmap, &ICONBITMAP, sizeof(bitmap)); + icon_details.bitmap = (const uint8_t *) bitmap; + capp.name = app_name; + capp.icon = &icon_details; + libcall_params[4] = (uint32_t) &capp; #else - libcall_params[4] = 0; + libcall_params[4] = 0; #endif // HAVE_NBGL - os_lib_call((unsigned int *) &libcall_params); - // Ethereum should not return to us - app_exit(); - } - } - FINALLY { - } + os_lib_call((uint32_t *) &libcall_params); + // Ethereum should not return to us + app_exit(); } - END_TRY; // os_lib_call will raise if Ethereum application is not installed. Do not try to recover. - app_exit(); - while (1) - ; + os_sched_exit(-1); } int ethereum_main(eth_libargs_t *args) { diff --git a/src/ui_callbacks.h b/src/ui_callbacks.h index 7624dbfc5..c91796b51 100644 --- a/src/ui_callbacks.h +++ b/src/ui_callbacks.h @@ -19,4 +19,4 @@ unsigned int io_seproxyhal_touch_eth2_address_ok(void); unsigned int io_seproxyhal_touch_privacy_ok(void); unsigned int io_seproxyhal_touch_privacy_cancel(void); -unsigned int io_seproxyhal_send_status(uint32_t sw, uint32_t tx, bool reset, bool idle); +uint16_t io_seproxyhal_send_status(uint16_t sw, uint32_t tx, bool reset, bool idle); diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 72e00573d..3312f747a 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -439,7 +439,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // User has just validated a swap but ETH received apdus about a non standard plugin / contract if (G_called_from_swap && !g_use_standard_ui) { PRINTF("ERR_SILENT_MODE_CHECK_FAILED, G_called_from_swap\n"); - THROW(ERR_SILENT_MODE_CHECK_FAILED); + THROW(APDU_RESPONSE_MODE_CHECK_FAILED); } // Specific calldata check when in swap mode @@ -448,7 +448,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // We are in crosschain mode and the correct calldata has been received if (G_swap_mode != SWAP_MODE_STANDARD && G_swap_mode != SWAP_MODE_CROSSCHAIN_SUCCESS) { PRINTF("Error: G_swap_mode %d refused\n", G_swap_mode); - THROW(ERR_SILENT_MODE_CHECK_FAILED); + THROW(APDU_RESPONSE_MODE_CHECK_FAILED); } } @@ -472,7 +472,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // Ensure the values are the same that the ones that have been previously validated if (strcasecmp_workaround(strings.common.toAddress, displayBuffer) != 0) { PRINTF("ERR_SILENT_MODE_CHECK_FAILED, address check failed\n"); - THROW(ERR_SILENT_MODE_CHECK_FAILED); + THROW(APDU_RESPONSE_MODE_CHECK_FAILED); } } else { strlcpy(strings.common.toAddress, displayBuffer, sizeof(strings.common.toAddress)); @@ -497,7 +497,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { PRINTF("ERR_SILENT_MODE_CHECK_FAILED, amount check failed\n"); PRINTF("Expected %s\n", strings.common.fullAmount); PRINTF("Received %s\n", displayBuffer); - THROW(ERR_SILENT_MODE_CHECK_FAILED); + THROW(APDU_RESPONSE_MODE_CHECK_FAILED); } } else { strlcpy(strings.common.fullAmount, displayBuffer, sizeof(strings.common.fullAmount)); @@ -517,7 +517,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { PRINTF("ERR_SILENT_MODE_CHECK_FAILED, fees check failed\n"); PRINTF("Expected %s\n", strings.common.maxFee); PRINTF("Received %s\n", displayBuffer); - THROW(ERR_SILENT_MODE_CHECK_FAILED); + THROW(APDU_RESPONSE_MODE_CHECK_FAILED); } } else { strlcpy(strings.common.maxFee, displayBuffer, sizeof(strings.common.maxFee)); From 2e5411663c49ac7be4dd52daa99c9b2cf48d6552 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 16:13:00 +0200 Subject: [PATCH 026/102] Fix return code in 'get_challenge' --- src/main.c | 2 +- src_features/getChallenge/challenge.h | 2 +- src_features/getChallenge/cmd_get_challenge.c | 7 +++---- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main.c b/src/main.c index 890a7242c..574bb3e7b 100644 --- a/src/main.c +++ b/src/main.c @@ -226,7 +226,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { #ifdef HAVE_DOMAIN_NAME case INS_ENS_GET_CHALLENGE: - handle_get_challenge(); + sw = handle_get_challenge(tx); break; case INS_ENS_PROVIDE_INFO: diff --git a/src_features/getChallenge/challenge.h b/src_features/getChallenge/challenge.h index 9fdb01dcf..e0155ed65 100644 --- a/src_features/getChallenge/challenge.h +++ b/src_features/getChallenge/challenge.h @@ -7,7 +7,7 @@ void roll_challenge(void); uint32_t get_challenge(void); -void handle_get_challenge(void); +uint16_t handle_get_challenge(unsigned int *tx); #endif // CHALLENGE_H_ diff --git a/src_features/getChallenge/cmd_get_challenge.c b/src_features/getChallenge/cmd_get_challenge.c index 93e52d9df..43e866741 100644 --- a/src_features/getChallenge/cmd_get_challenge.c +++ b/src_features/getChallenge/cmd_get_challenge.c @@ -27,12 +27,11 @@ uint32_t get_challenge(void) { /** * Send back the current challenge */ -void handle_get_challenge(void) { +uint16_t handle_get_challenge(unsigned int *tx) { PRINTF("New challenge -> %u\n", get_challenge()); U4BE_ENCODE(G_io_apdu_buffer, 0, get_challenge()); - U2BE_ENCODE(G_io_apdu_buffer, 4, APDU_RESPONSE_OK); - - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 6); + *tx += 4; + return APDU_RESPONSE_OK; } #endif // HAVE_DOMAIN_NAME From 896ce568e2308b64f67f31d8f87adf5fde4b595f Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 16:33:00 +0200 Subject: [PATCH 027/102] Fix return code in 'handle_provide_domain_name' --- src/main.c | 2 +- .../cmd_provide_domain_name.c | 53 ++++++------------- src_features/provideDomainName/domain_name.h | 2 +- 3 files changed, 17 insertions(+), 40 deletions(-) diff --git a/src/main.c b/src/main.c index 574bb3e7b..3cd4a41f9 100644 --- a/src/main.c +++ b/src/main.c @@ -230,7 +230,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_ENS_PROVIDE_INFO: - handle_provide_domain_name(cmd->p1, cmd->p2, cmd->data, cmd->lc); + sw = handle_provide_domain_name(cmd->p1, cmd->data, cmd->lc); break; #endif // HAVE_DOMAIN_NAME diff --git a/src_features/provideDomainName/cmd_provide_domain_name.c b/src_features/provideDomainName/cmd_provide_domain_name.c index be3c1850d..c3b19b0cc 100644 --- a/src_features/provideDomainName/cmd_provide_domain_name.c +++ b/src_features/provideDomainName/cmd_provide_domain_name.c @@ -81,25 +81,6 @@ static s_tlv_payload g_tlv_payload = {0}; static s_domain_name_info g_domain_name_info; char g_domain_name[DOMAIN_NAME_MAX_LENGTH + 1]; -/** - * Send a response APDU - * - * @param[in] success whether it should use \ref APDU_RESPONSE_OK - * @param[in] off payload offset (0 if no data other than status word) - */ -static void response_to_domain_name(bool success, uint8_t off) { - uint16_t sw; - - if (success) { - sw = APDU_RESPONSE_OK; - } else { - sw = apdu_response_code; - } - U2BE_ENCODE(G_io_apdu_buffer, off, sw); - - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, off + 2); -} - /** * Checks if a domain name for the given chain ID and address is known * @@ -510,13 +491,11 @@ static bool get_der_value_as_uint8(const s_tlv_payload *payload, size_t *offset, if (value != NULL) { if (!parse_der_value(payload, offset, &tmp_value)) { - apdu_response_code = APDU_RESPONSE_INVALID_DATA; } else { if (tmp_value <= UINT8_MAX) { *value = tmp_value; ret = true; } else { - apdu_response_code = APDU_RESPONSE_INVALID_DATA; PRINTF("TLV DER-encoded value larger than 8 bits\n"); } } @@ -608,7 +587,6 @@ static bool parse_tlv(const s_tlv_payload *payload, */ static bool alloc_payload(s_tlv_payload *payload, uint16_t size) { if ((payload->buf = mem_alloc(size)) == NULL) { - apdu_response_code = APDU_RESPONSE_INSUFFICIENT_MEMORY; return false; } payload->expected_size = size; @@ -625,21 +603,24 @@ static void free_payload(s_tlv_payload *payload) { memset(payload, 0, sizeof(*payload)); } -static bool handle_first_chunk(const uint8_t **data, uint8_t *length, s_tlv_payload *payload) { +static bool handle_first_chunk(const uint8_t **data, + uint8_t *length, + s_tlv_payload *payload, + uint16_t *sw) { // check if no payload is already in memory if (payload->buf != NULL) { free_payload(payload); - apdu_response_code = APDU_RESPONSE_INVALID_P1_P2; + *sw = APDU_RESPONSE_INVALID_P1_P2; return false; } // check if we at least get the size if (*length < sizeof(payload->expected_size)) { - apdu_response_code = APDU_RESPONSE_INVALID_DATA; + *sw = APDU_RESPONSE_INVALID_DATA; return false; } if (!alloc_payload(payload, U2BE(*data, 0))) { - apdu_response_code = APDU_RESPONSE_INSUFFICIENT_MEMORY; + *sw = APDU_RESPONSE_INSUFFICIENT_MEMORY; return false; } @@ -653,31 +634,28 @@ static bool handle_first_chunk(const uint8_t **data, uint8_t *length, s_tlv_payl * Handle domain name APDU * * @param[in] p1 first APDU instruction parameter - * @param[in] p2 second APDU instruction parameter * @param[in] data APDU payload * @param[in] length payload size */ -void handle_provide_domain_name(uint8_t p1, uint8_t p2, const uint8_t *data, uint8_t length) { +uint16_t handle_provide_domain_name(uint8_t p1, const uint8_t *data, uint8_t length) { s_sig_ctx sig_ctx; + uint16_t sw = APDU_NO_RESPONSE; - (void) p2; if (p1 == P1_FIRST_CHUNK) { - if (!handle_first_chunk(&data, &length, &g_tlv_payload)) { - return response_to_domain_name(false, 0); + if (!handle_first_chunk(&data, &length, &g_tlv_payload, &sw)) { + return sw; } } else { // check if a payload is already in memory if (g_tlv_payload.buf == NULL) { - apdu_response_code = APDU_RESPONSE_INVALID_P1_P2; - return response_to_domain_name(false, 0); + return APDU_RESPONSE_INVALID_P1_P2; } } if ((g_tlv_payload.size + length) > g_tlv_payload.expected_size) { - apdu_response_code = APDU_RESPONSE_INVALID_DATA; free_payload(&g_tlv_payload); PRINTF("TLV payload size mismatch!\n"); - return response_to_domain_name(false, 0); + return APDU_RESPONSE_INVALID_DATA; } // feed into tlv payload memcpy(g_tlv_payload.buf + g_tlv_payload.size, data, length); @@ -690,8 +668,7 @@ void handle_provide_domain_name(uint8_t p1, uint8_t p2, const uint8_t *data, uin !verify_signature(&sig_ctx)) { free_payload(&g_tlv_payload); roll_challenge(); // prevent brute-force guesses - apdu_response_code = APDU_RESPONSE_INVALID_DATA; - return response_to_domain_name(false, 0); + return APDU_RESPONSE_INVALID_DATA; } g_domain_name_info.valid = true; PRINTF("Registered : %s => %.*h\n", @@ -701,7 +678,7 @@ void handle_provide_domain_name(uint8_t p1, uint8_t p2, const uint8_t *data, uin free_payload(&g_tlv_payload); roll_challenge(); // prevent replays } - return response_to_domain_name(true, 0); + return APDU_RESPONSE_OK; } #endif // HAVE_DOMAIN_NAME diff --git a/src_features/provideDomainName/domain_name.h b/src_features/provideDomainName/domain_name.h index 502254f4e..4dcabed35 100644 --- a/src_features/provideDomainName/domain_name.h +++ b/src_features/provideDomainName/domain_name.h @@ -9,7 +9,7 @@ #define DOMAIN_NAME_MAX_LENGTH 30 bool has_domain_name(const uint64_t *chain_id, const uint8_t *addr); -void handle_provide_domain_name(uint8_t p1, uint8_t p2, const uint8_t *data, uint8_t length); +uint16_t handle_provide_domain_name(uint8_t p1, const uint8_t *data, uint8_t length); extern char g_domain_name[DOMAIN_NAME_MAX_LENGTH + 1]; From 97f623e722277c6b52bbb59e54b73b5bb3b11328 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 16:59:00 +0200 Subject: [PATCH 028/102] Fix return code in 'handleGetEth2PublicKey' --- src/apdu_constants.h | 13 ++-- src/main.c | 2 +- .../getEth2PublicKey/cmd_getEth2PublicKey.c | 69 ++++++++++--------- 3 files changed, 46 insertions(+), 38 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index f37f29618..05ea19763 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -118,12 +118,13 @@ void handlePerformPrivacyOperation(uint8_t p1, #ifdef HAVE_ETH2 -void handleGetEth2PublicKey(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleGetEth2PublicKey(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx); + void handleSetEth2WinthdrawalIndex(uint8_t p1, uint8_t p2, uint8_t *dataBuffer, diff --git a/src/main.c b/src/main.c index 3cd4a41f9..892e54391 100644 --- a/src/main.c +++ b/src/main.c @@ -198,7 +198,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { case INS_GET_ETH2_PUBLIC_KEY: forget_known_assets(); - handleGetEth2PublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleGetEth2PublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); break; case INS_SET_ETH2_WITHDRAWAL_INDEX: diff --git a/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c b/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c index 76c918cb7..6f282d6da 100644 --- a/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c +++ b/src_features/getEth2PublicKey/cmd_getEth2PublicKey.c @@ -12,77 +12,84 @@ static const uint8_t BLS12_381_FIELD_MODULUS[] = { 0x64, 0x77, 0x4b, 0x84, 0xf3, 0x85, 0x12, 0xbf, 0x67, 0x30, 0xd2, 0xa0, 0xf6, 0xb0, 0xf6, 0x24, 0x1e, 0xab, 0xff, 0xfe, 0xb1, 0x53, 0xff, 0xff, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xab}; -void getEth2PublicKey(uint32_t *bip32Path, uint8_t bip32PathLength, uint8_t *out) { +uint32_t getEth2PublicKey(uint32_t *bip32Path, uint8_t bip32PathLength, uint8_t *out) { uint8_t privateKeyData[64]; cx_ecfp_256_extended_private_key_t privateKey; cx_ecfp_384_public_key_t publicKey; uint8_t yFlag = 0; uint8_t tmp[96]; int diff; + cx_err_t error = CX_INTERNAL_ERROR; io_seproxyhal_io_heartbeat(); - CX_ASSERT(os_derive_eip2333_no_throw(CX_CURVE_BLS12_381_G1, - bip32Path, - bip32PathLength, - privateKeyData)); + CX_CHECK(os_derive_eip2333_no_throw(CX_CURVE_BLS12_381_G1, + bip32Path, + bip32PathLength, + privateKeyData)); io_seproxyhal_io_heartbeat(); memset(tmp, 0, 48); memmove(tmp + 16, privateKeyData, 32); - CX_ASSERT(cx_ecfp_init_private_key_no_throw(CX_CURVE_BLS12_381_G1, - tmp, - 48, - (cx_ecfp_private_key_t *) &privateKey)); - CX_ASSERT(cx_ecfp_generate_pair_no_throw(CX_CURVE_BLS12_381_G1, - (cx_ecfp_public_key_t *) &publicKey, - (cx_ecfp_private_key_t *) &privateKey, - 1)); + CX_CHECK(cx_ecfp_init_private_key_no_throw(CX_CURVE_BLS12_381_G1, + tmp, + 48, + (cx_ecfp_private_key_t *) &privateKey)); + CX_CHECK(cx_ecfp_generate_pair_no_throw(CX_CURVE_BLS12_381_G1, + (cx_ecfp_public_key_t *) &publicKey, + (cx_ecfp_private_key_t *) &privateKey, + 1)); explicit_bzero(tmp, 96); - explicit_bzero((void *) &privateKey, sizeof(cx_ecfp_256_extended_private_key_t)); tmp[47] = 2; - CX_ASSERT(cx_math_mult_no_throw(tmp, publicKey.W + 1 + 48, tmp, 48)); - CX_ASSERT(cx_math_cmp_no_throw(tmp + 48, BLS12_381_FIELD_MODULUS, 48, &diff)); + CX_CHECK(cx_math_mult_no_throw(tmp, publicKey.W + 1 + 48, tmp, 48)); + CX_CHECK(cx_math_cmp_no_throw(tmp + 48, BLS12_381_FIELD_MODULUS, 48, &diff)); if (diff > 0) { yFlag = 0x20; } publicKey.W[1] &= 0x1f; publicKey.W[1] |= 0x80 | yFlag; memmove(out, publicKey.W + 1, 48); +end: + explicit_bzero(tmp, 96); + explicit_bzero((void *) &privateKey, sizeof(cx_ecfp_256_extended_private_key_t)); + return error; } -void handleGetEth2PublicKey(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { +uint16_t handleGetEth2PublicKey(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx) { bip32_path_t bip32; + cx_err_t error = CX_INTERNAL_ERROR; if (!G_called_from_swap) { reset_app_context(); } if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } if (p2 != 0) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } dataBuffer = parseBip32(dataBuffer, &dataLength, &bip32); if (dataBuffer == NULL) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } - getEth2PublicKey(bip32.path, bip32.length, tmpCtx.publicKeyContext.publicKey.W); + CX_CHECK(getEth2PublicKey(bip32.path, bip32.length, tmpCtx.publicKeyContext.publicKey.W)); if (p1 == P1_NON_CONFIRM) { *tx = set_result_get_eth2_publicKey(); - THROW(APDU_RESPONSE_OK); - } else { - ui_display_public_eth2(); - - *flags |= IO_ASYNCH_REPLY; + return APDU_RESPONSE_OK; } + ui_display_public_eth2(); + *flags |= IO_ASYNCH_REPLY; + // Return code will be sent after UI approve/cancel + error = 0; +end: + return error; } #endif From 7ea71c5c9369a88b7508f91d9989ea46efa0afe7 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:01:45 +0200 Subject: [PATCH 029/102] Fix return code in 'handleSetEth2WithdrawalIndex' --- src/apdu_constants.h | 7 ------- src/main.c | 2 +- .../cmd_setEth2WithdrawalIndex.c | 16 +++++++--------- .../setEth2WithdrawalIndex/withdrawal_index.h | 10 ++++------ 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 05ea19763..bdc69788a 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -125,13 +125,6 @@ uint16_t handleGetEth2PublicKey(uint8_t p1, unsigned int *flags, unsigned int *tx); -void handleSetEth2WinthdrawalIndex(uint8_t p1, - uint8_t p2, - uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); - #endif extern uint16_t apdu_response_code; diff --git a/src/main.c b/src/main.c index 892e54391..9a99cfc9f 100644 --- a/src/main.c +++ b/src/main.c @@ -202,7 +202,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_SET_ETH2_WITHDRAWAL_INDEX: - handleSetEth2WithdrawalIndex(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleSetEth2WithdrawalIndex(cmd->p1, cmd->p2, cmd->data, cmd->lc); break; #endif diff --git a/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c b/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c index 7f6d9196d..74337df34 100644 --- a/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c +++ b/src_features/setEth2WithdrawalIndex/cmd_setEth2WithdrawalIndex.c @@ -3,23 +3,21 @@ #include "shared_context.h" #include "apdu_constants.h" -void handleSetEth2WithdrawalIndex(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint16_t dataLength, - __attribute__((unused)) unsigned int *flags, - __attribute__((unused)) unsigned int *tx) { +uint16_t handleSetEth2WithdrawalIndex(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint16_t dataLength) { if (dataLength != 4) { - THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); + return APDU_RESPONSE_WRONG_DATA_LENGTH; } if ((p1 != 0) || (p2 != 0)) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } eth2WithdrawalIndex = U4BE(dataBuffer, 0); - THROW(APDU_RESPONSE_OK); + return APDU_RESPONSE_OK; } #endif diff --git a/src_features/setEth2WithdrawalIndex/withdrawal_index.h b/src_features/setEth2WithdrawalIndex/withdrawal_index.h index bf9d6a36f..ab8c9e554 100644 --- a/src_features/setEth2WithdrawalIndex/withdrawal_index.h +++ b/src_features/setEth2WithdrawalIndex/withdrawal_index.h @@ -3,11 +3,9 @@ #include "stdint.h" -void handleSetEth2WithdrawalIndex(uint8_t p1, - uint8_t p2, - uint8_t *dataBuffer, - uint16_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleSetEth2WithdrawalIndex(uint8_t p1, + uint8_t p2, + uint8_t *dataBuffer, + uint16_t dataLength); #endif // _SET_WITHDRAWAL_INDEX_H_ From cb46e3919a7fe111f57fe680ecdad16ecbed53fb Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:21:58 +0200 Subject: [PATCH 030/102] Fix return code in 'handleGetPublicKey' --- src/apdu_constants.h | 12 ++-- src/main.c | 2 +- src_features/getPublicKey/cmd_getPublicKey.c | 62 ++++++++++---------- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index bdc69788a..695c5c383 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -54,12 +54,12 @@ #define APDU_RESPONSE_OK 0x9000 #define APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED 0x911c -void handleGetPublicKey(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleGetPublicKey(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx); void handleProvideErc20TokenInformation(uint8_t p1, uint8_t p2, const uint8_t *workBuffer, diff --git a/src/main.c b/src/main.c index 9a99cfc9f..acb0bd3f0 100644 --- a/src/main.c +++ b/src/main.c @@ -136,7 +136,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { switch (cmd->ins) { case INS_GET_PUBLIC_KEY: forget_known_assets(); - handleGetPublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleGetPublicKey(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); break; case INS_PROVIDE_ERC20_TOKEN_INFORMATION: diff --git a/src_features/getPublicKey/cmd_getPublicKey.c b/src_features/getPublicKey/cmd_getPublicKey.c index 66a4b4c32..39d6702cd 100644 --- a/src_features/getPublicKey/cmd_getPublicKey.c +++ b/src_features/getPublicKey/cmd_getPublicKey.c @@ -6,13 +6,14 @@ #include "os_io_seproxyhal.h" #include "crypto_helpers.h" -void handleGetPublicKey(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { +uint16_t handleGetPublicKey(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx) { bip32_path_t bip32; + cx_err_t error = CX_INTERNAL_ERROR; if (!G_called_from_swap) { reset_app_context(); @@ -20,29 +21,26 @@ void handleGetPublicKey(uint8_t p1, if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { PRINTF("Error: Unexpected P1 (%u)!\n", p1); - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } if ((p2 != P2_CHAINCODE) && (p2 != P2_NO_CHAINCODE)) { PRINTF("Error: Unexpected P2 (%u)!\n", p2); - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } dataBuffer = parseBip32(dataBuffer, &dataLength, &bip32); - if (dataBuffer == NULL) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } tmpCtx.publicKeyContext.getChaincode = (p2 == P2_CHAINCODE); - if (bip32_derive_get_pubkey_256( - CX_CURVE_256K1, - bip32.path, - bip32.length, - tmpCtx.publicKeyContext.publicKey.W, - (tmpCtx.publicKeyContext.getChaincode ? tmpCtx.publicKeyContext.chainCode : NULL), - CX_SHA512) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); - } + CX_CHECK(bip32_derive_get_pubkey_256( + CX_CURVE_256K1, + bip32.path, + bip32.length, + tmpCtx.publicKeyContext.publicKey.W, + (tmpCtx.publicKeyContext.getChaincode ? tmpCtx.publicKeyContext.chainCode : NULL), + CX_SHA512)); getEthAddressStringFromRawKey(tmpCtx.publicKeyContext.publicKey.W, tmpCtx.publicKeyContext.address, chainConfig->chainId); @@ -57,21 +55,23 @@ void handleGetPublicKey(uint8_t p1, (void) dataBuffer; // to prevent dead increment warning if (dataLength > 0) { PRINTF("Error: Leftover unwanted data (%u bytes long)!\n", dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (p1 == P1_NON_CONFIRM) { *tx = set_result_get_publicKey(); - THROW(APDU_RESPONSE_OK); - } else { - snprintf(strings.common.toAddress, - sizeof(strings.common.toAddress), - "0x%.*s", - 40, - tmpCtx.publicKeyContext.address); - // don't unnecessarily pass the current app's chain ID - ui_display_public_key(chainConfig->chainId == chain_id ? NULL : &chain_id); - - *flags |= IO_ASYNCH_REPLY; + return APDU_RESPONSE_OK; } + snprintf(strings.common.toAddress, + sizeof(strings.common.toAddress), + "0x%.*s", + 40, + tmpCtx.publicKeyContext.address); + // don't unnecessarily pass the current app's chain ID + ui_display_public_key(chainConfig->chainId == chain_id ? NULL : &chain_id); + *flags |= IO_ASYNCH_REPLY; + // Return code will be sent after UI approve/cancel + error = 0; +end: + return error; } From 95d393db889cb9a14dae5d849b47c1375a5d76de Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:26:42 +0200 Subject: [PATCH 031/102] Fix return code in 'handleProvideErc20TokenInformation' --- src/apdu_constants.h | 9 +++---- src/main.c | 2 +- .../cmd_provideTokenInfo.c | 27 +++++++------------ 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 695c5c383..61bfea06f 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -60,12 +60,9 @@ uint16_t handleGetPublicKey(uint8_t p1, uint8_t dataLength, unsigned int *flags, unsigned int *tx); -void handleProvideErc20TokenInformation(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleProvideErc20TokenInformation(const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *tx); void handleProvideNFTInformation(uint8_t p1, uint8_t p2, const uint8_t *dataBuffer, diff --git a/src/main.c b/src/main.c index acb0bd3f0..f8db0f871 100644 --- a/src/main.c +++ b/src/main.c @@ -140,7 +140,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_PROVIDE_ERC20_TOKEN_INFORMATION: - handleProvideErc20TokenInformation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleProvideErc20TokenInformation(cmd->data, cmd->lc, tx); break; #ifdef HAVE_NFT_SUPPORT diff --git a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c index a3b3c9090..492c5244f 100644 --- a/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c +++ b/src_features/provideErc20TokenInformation/cmd_provideTokenInfo.c @@ -9,16 +9,9 @@ #include "os_pki.h" #endif -void handleProvideErc20TokenInformation(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(flags); - UNUSED(tx); +uint16_t handleProvideErc20TokenInformation(const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *tx) { uint32_t offset = 0; uint8_t tickerLength; uint64_t chain_id; @@ -29,15 +22,15 @@ void handleProvideErc20TokenInformation(uint8_t p1, PRINTF("Provisioning currentAssetIndex %d\n", tmpCtx.transactionContext.currentAssetIndex); if (dataLength < 1) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } tickerLength = workBuffer[offset++]; dataLength--; if ((tickerLength + 1) > sizeof(token->ticker)) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (dataLength < tickerLength + 20 + 4 + 4) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } cx_hash_sha256(workBuffer + offset, tickerLength + 20 + 4 + 4, hash, 32); memmove(token->ticker, workBuffer + offset, tickerLength); @@ -55,7 +48,7 @@ void handleProvideErc20TokenInformation(uint8_t p1, chain_id = U4BE(workBuffer, offset); if (!app_compatible_with_chain_id(&chain_id)) { UNSUPPORTED_CHAIN_ID_MSG(chain_id); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += 4; dataLength -= 4; @@ -73,12 +66,12 @@ void handleProvideErc20TokenInformation(uint8_t p1, if (error != CX_OK) { PRINTF("Invalid token signature\n"); #ifndef HAVE_BYPASS_SIGNATURES - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; #endif } G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; validate_current_asset_info(); - U2BE_ENCODE(G_io_apdu_buffer, 1, APDU_RESPONSE_OK); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 3); + *tx += 1; + return APDU_RESPONSE_OK; } From 898dd18307aee699292e30e1cc6de64999c724cc Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:33:17 +0200 Subject: [PATCH 032/102] Fix return code in 'handleGetAppConfiguration' --- src/apdu_constants.h | 7 +------ src/main.c | 2 +- .../getAppConfiguration/cmd_getAppConfiguration.c | 14 ++------------ 3 files changed, 4 insertions(+), 19 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 61bfea06f..ff7357f5a 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -75,12 +75,7 @@ void handleSign(uint8_t p1, uint8_t dataLength, unsigned int *flags, unsigned int *tx); -void handleGetAppConfiguration(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleGetAppConfiguration(unsigned int *tx); bool handleSignPersonalMessage(uint8_t p1, uint8_t p2, const uint8_t *const payload, diff --git a/src/main.c b/src/main.c index f8db0f871..3967c32fd 100644 --- a/src/main.c +++ b/src/main.c @@ -166,7 +166,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_GET_APP_CONFIGURATION: - handleGetAppConfiguration(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleGetAppConfiguration(tx); break; case INS_SIGN_PERSONAL_MESSAGE: diff --git a/src_features/getAppConfiguration/cmd_getAppConfiguration.c b/src_features/getAppConfiguration/cmd_getAppConfiguration.c index a33cb6311..761612314 100644 --- a/src_features/getAppConfiguration/cmd_getAppConfiguration.c +++ b/src_features/getAppConfiguration/cmd_getAppConfiguration.c @@ -1,22 +1,12 @@ #include "shared_context.h" #include "apdu_constants.h" -void handleGetAppConfiguration(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(workBuffer); - UNUSED(dataLength); - UNUSED(flags); +uint16_t handleGetAppConfiguration(unsigned int *tx) { G_io_apdu_buffer[0] = (N_storage.dataAllowed ? APP_FLAG_DATA_ALLOWED : 0x00); G_io_apdu_buffer[0] |= APP_FLAG_EXTERNAL_TOKEN_NEEDED; G_io_apdu_buffer[1] = MAJOR_VERSION; G_io_apdu_buffer[2] = MINOR_VERSION; G_io_apdu_buffer[3] = PATCH_VERSION; *tx = 4; - THROW(APDU_RESPONSE_OK); + return APDU_RESPONSE_OK; } From 4bbc1ee81da12359840cf807d03341a4b2cd5902 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:39:48 +0200 Subject: [PATCH 033/102] Fix return code in 'handleProvideNFTInformation' --- src/apdu_constants.h | 9 ++-- src/main.c | 2 +- .../cmd_provideNFTInfo.c | 43 ++++++++----------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index ff7357f5a..0a628b022 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -63,12 +63,9 @@ uint16_t handleGetPublicKey(uint8_t p1, uint16_t handleProvideErc20TokenInformation(const uint8_t *workBuffer, uint8_t dataLength, unsigned int *tx); -void handleProvideNFTInformation(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleProvideNFTInformation(const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *tx); void handleSign(uint8_t p1, uint8_t p2, const uint8_t *dataBuffer, diff --git a/src/main.c b/src/main.c index 3967c32fd..aadd0b47f 100644 --- a/src/main.c +++ b/src/main.c @@ -145,7 +145,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { #ifdef HAVE_NFT_SUPPORT case INS_PROVIDE_NFT_INFORMATION: - handleProvideNFTInformation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleProvideNFTInformation(cmd->data, cmd->lc, tx); break; #endif // HAVE_NFT_SUPPORT diff --git a/src_features/provideNFTInformation/cmd_provideNFTInfo.c b/src_features/provideNFTInformation/cmd_provideNFTInfo.c index f7bdfec24..46bcfc97e 100644 --- a/src_features/provideNFTInformation/cmd_provideNFTInfo.c +++ b/src_features/provideNFTInformation/cmd_provideNFTInfo.c @@ -42,16 +42,9 @@ typedef bool verificationAlgo(const cx_ecfp_public_key_t *, unsigned char *, unsigned int); -void handleProvideNFTInformation(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(tx); - UNUSED(flags); +uint16_t handleProvideNFTInformation(const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *tx) { uint8_t hash[INT256_LENGTH]; nftInfo_t *nft = NULL; size_t offset = 0; @@ -70,7 +63,7 @@ void handleProvideNFTInformation(uint8_t p1, if ((pluginType != ERC721) && (pluginType != ERC1155)) { PRINTF("NFT metadata provided without proper plugin loaded!\n"); - THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); + return APDU_RESPONSE_CONDITION_NOT_SATISFIED; } nft = &get_current_asset_info()->nft; @@ -80,18 +73,18 @@ void handleProvideNFTInformation(uint8_t p1, PRINTF("Data too small for headers: expected at least %d, got %d\n", HEADER_SIZE, dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (workBuffer[offset] != TYPE_1) { PRINTF("Unsupported type %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += TYPE_SIZE; if (workBuffer[offset] != VERSION_1) { PRINTF("Unsupported version %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += VERSION_SIZE; @@ -105,14 +98,14 @@ void handleProvideNFTInformation(uint8_t p1, PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (collectionNameLength > COLLECTION_NAME_MAX_LEN) { PRINTF("CollectionName too big: expected max %d, got %d\n", COLLECTION_NAME_MAX_LEN, collectionNameLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } // Safe because we've checked the size before. @@ -133,19 +126,19 @@ void handleProvideNFTInformation(uint8_t p1, PRINTF("ChainID: %.*H\n", sizeof(chain_id), (workBuffer + offset)); if (!app_compatible_with_chain_id(&chain_id)) { UNSUPPORTED_CHAIN_ID_MSG(chain_id); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += CHAIN_ID_SIZE; if (workBuffer[offset] != valid_keyId) { PRINTF("Unsupported KeyID %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += KEY_ID_SIZE; if (workBuffer[offset] != ALGORITHM_ID_1) { PRINTF("Incorrect algorithmId %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += ALGORITHM_ID_SIZE; @@ -154,7 +147,7 @@ void handleProvideNFTInformation(uint8_t p1, if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE) { PRINTF("Data too short to hold signature length\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } signatureLen = workBuffer[offset]; @@ -164,13 +157,13 @@ void handleProvideNFTInformation(uint8_t p1, MIN_DER_SIG_SIZE, MAX_DER_SIG_SIZE, signatureLen); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += SIGNATURE_LENGTH_SIZE; if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE + signatureLen) { PRINTF("Signature could not fit in data\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } error = check_signature_with_pubkey("NFT Info", @@ -185,14 +178,14 @@ void handleProvideNFTInformation(uint8_t p1, signatureLen); #ifndef HAVE_BYPASS_SIGNATURES if (error != CX_OK) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } #endif G_io_apdu_buffer[0] = tmpCtx.transactionContext.currentAssetIndex; validate_current_asset_info(); - U2BE_ENCODE(G_io_apdu_buffer, 1, APDU_RESPONSE_OK); - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 3); + *tx += 1; + return APDU_RESPONSE_OK; } #endif // HAVE_NFT_SUPPORT From a65c2da93c5928422fb93360927fe2e1e411b91e Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:42:25 +0200 Subject: [PATCH 034/102] Fix return code in 'handleSetExternalPlugin' --- src/apdu_constants.h | 7 +----- src/main.c | 2 +- .../setExternalPlugin/cmd_setExternalPlugin.c | 23 +++++-------------- 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 0a628b022..3648217e7 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -84,12 +84,7 @@ void handleSignEIP712Message_v0(uint8_t p1, unsigned int *flags, unsigned int *tx); -void handleSetExternalPlugin(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength); void handleSetPlugin(uint8_t p1, uint8_t p2, diff --git a/src/main.c b/src/main.c index aadd0b47f..d7a67517e 100644 --- a/src/main.c +++ b/src/main.c @@ -150,7 +150,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { #endif // HAVE_NFT_SUPPORT case INS_SET_EXTERNAL_PLUGIN: - handleSetExternalPlugin(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleSetExternalPlugin(cmd->data, cmd->lc); break; case INS_SET_PLUGIN: diff --git a/src_features/setExternalPlugin/cmd_setExternalPlugin.c b/src_features/setExternalPlugin/cmd_setExternalPlugin.c index 4584dee06..9a9993640 100644 --- a/src_features/setExternalPlugin/cmd_setExternalPlugin.c +++ b/src_features/setExternalPlugin/cmd_setExternalPlugin.c @@ -10,15 +10,7 @@ #include "os_pki.h" #endif -void handleSetExternalPlugin(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(flags); +uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength) { PRINTF("Handling set Plugin\n"); uint8_t hash[INT256_LENGTH]; uint8_t pluginNameLength = *workBuffer; @@ -30,14 +22,14 @@ void handleSetExternalPlugin(uint8_t p1, if (dataLength <= payload_size) { PRINTF("data too small: expected at least %d got %d\n", payload_size, dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (pluginNameLength + 1 > sizeof(dataContext.tokenContext.pluginName)) { PRINTF("name length too big: expected max %d, got %d\n", sizeof(dataContext.tokenContext.pluginName), pluginNameLength + 1); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } // check Ledger's signature over the payload @@ -56,7 +48,7 @@ void handleSetExternalPlugin(uint8_t p1, if (error != CX_OK) { PRINTF("Invalid signature\n"); #ifndef HAVE_BYPASS_SIGNATURES - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; #endif } @@ -80,7 +72,7 @@ void handleSetExternalPlugin(uint8_t p1, memset(dataContext.tokenContext.pluginName, 0, sizeof(dataContext.tokenContext.pluginName)); - THROW(APDU_RESPONSE_PLUGIN_NOT_INSTALLED); + return APDU_RESPONSE_PLUGIN_NOT_INSTALLED; } FINALLY { } @@ -88,13 +80,10 @@ void handleSetExternalPlugin(uint8_t p1, END_TRY; PRINTF("Plugin found\n"); - memmove(dataContext.tokenContext.contractAddress, workBuffer, ADDRESS_LENGTH); workBuffer += ADDRESS_LENGTH; memmove(dataContext.tokenContext.methodSelector, workBuffer, SELECTOR_SIZE); - pluginType = EXTERNAL; - U2BE_ENCODE(G_io_apdu_buffer, *tx, APDU_RESPONSE_OK); - *tx += 2; + return APDU_RESPONSE_OK; } From 94b224f61a3dd16f17513198a27ec161412acd45 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 8 Aug 2024 17:46:04 +0200 Subject: [PATCH 035/102] Fix return code in 'handleSetPlugin' --- src/apdu_constants.h | 7 +---- src/main.c | 2 +- src_features/setPlugin/cmd_setPlugin.c | 41 ++++++++++---------------- 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 3648217e7..c5c7e74aa 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -86,12 +86,7 @@ void handleSignEIP712Message_v0(uint8_t p1, uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength); -void handleSetPlugin(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleSetPlugin(const uint8_t *workBuffer, uint8_t dataLength); void handlePerformPrivacyOperation(uint8_t p1, uint8_t p2, diff --git a/src/main.c b/src/main.c index d7a67517e..b7b20c713 100644 --- a/src/main.c +++ b/src/main.c @@ -154,7 +154,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_SET_PLUGIN: - handleSetPlugin(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleSetPlugin(cmd->data, cmd->lc); break; case INS_PERFORM_PRIVACY_OPERATION: diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index fa0bc1114..92ee5c5ff 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -82,15 +82,7 @@ void set_swap_with_calldata_plugin_type(void) { pluginType = SWAP_WITH_CALLDATA; } -void handleSetPlugin(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(p1); - UNUSED(p2); - UNUSED(flags); +uint16_t handleSetPlugin(const uint8_t *workBuffer, uint8_t dataLength) { PRINTF("Handling set Plugin\n"); uint8_t hash[INT256_LENGTH] = {0}; tokenContext_t *tokenContext = &dataContext.tokenContext; @@ -112,18 +104,18 @@ void handleSetPlugin(uint8_t p1, PRINTF("Data too small for headers: expected at least %d, got %d\n", HEADER_SIZE, dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (workBuffer[offset] != ETH_PLUGIN) { PRINTF("Unsupported type %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += TYPE_SIZE; if (workBuffer[offset] != VERSION_1) { PRINTF("Unsupported version %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += VERSION_SIZE; @@ -137,7 +129,7 @@ void handleSetPlugin(uint8_t p1, PRINTF("Data too small for payload: expected at least %d, got %d\n", payloadSize, dataLength); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } // `+ 1` because we want to add a null terminating character. @@ -145,7 +137,7 @@ void handleSetPlugin(uint8_t p1, PRINTF("plugin name too big: expected max %d, got %d\n", sizeof(dataContext.tokenContext.pluginName), pluginNameLength + 1); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } // Safe because we've checked the size before. @@ -170,20 +162,20 @@ void handleSetPlugin(uint8_t p1, PRINTF("ChainID: %.*H\n", sizeof(chain_id), (workBuffer + offset)); if (!app_compatible_with_chain_id(&chain_id)) { UNSUPPORTED_CHAIN_ID_MSG(chain_id); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += CHAIN_ID_SIZE; keyId = workBuffer[offset]; if (keyId != valid_keyId) { PRINTF("Unsupported KeyID %d\n", keyId); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += KEY_ID_SIZE; if (workBuffer[offset] != ECC_SECG_P256K1__ECDSA_SHA_256) { PRINTF("Incorrect algorithmId %d\n", workBuffer[offset]); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += ALGORITHM_ID_SIZE; @@ -192,7 +184,7 @@ void handleSetPlugin(uint8_t p1, if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE) { PRINTF("Data too short to hold signature length\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } signatureLen = workBuffer[offset]; @@ -202,13 +194,13 @@ void handleSetPlugin(uint8_t p1, MIN_DER_SIG_SIZE, MAX_DER_SIG_SIZE, signatureLen); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } offset += SIGNATURE_LENGTH_SIZE; if (dataLength < payloadSize + SIGNATURE_LENGTH_SIZE + signatureLen) { PRINTF("Signature could not fit in data\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } error = check_signature_with_pubkey("Set Plugin", @@ -224,7 +216,7 @@ void handleSetPlugin(uint8_t p1, if (error != CX_OK) { PRINTF("Invalid signature\n"); #ifndef HAVE_BYPASS_SIGNATURES - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; #endif } @@ -232,7 +224,7 @@ void handleSetPlugin(uint8_t p1, if (keyId == PROD_PLUGIN_KEY) { if (pluginType != ERC721 && pluginType != ERC1155) { PRINTF("AWS key must only be used to set NFT internal plugins\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } } @@ -249,7 +241,7 @@ void handleSetPlugin(uint8_t p1, CATCH_OTHER(e) { PRINTF("%s external plugin is not present\n", tokenContext->pluginName); memset(tokenContext->pluginName, 0, sizeof(tokenContext->pluginName)); - THROW(0x6984); + return APDU_RESPONSE_PLUGIN_NOT_INSTALLED; } FINALLY { } @@ -257,6 +249,5 @@ void handleSetPlugin(uint8_t p1, END_TRY; } - U2BE_ENCODE(G_io_apdu_buffer, *tx, APDU_RESPONSE_OK); - *tx += 2; + return APDU_RESPONSE_OK; } From 36247f2946a05cd724e273bbe332edb511f44207 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:36:25 +0200 Subject: [PATCH 036/102] Fix return code in 'handlePerformPrivacyOperation' --- src/apdu_constants.h | 12 +- src/main.c | 2 +- .../cmd_performPrivacyOperation.c | 110 +++++++++--------- 3 files changed, 60 insertions(+), 64 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index c5c7e74aa..66fd693de 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -88,12 +88,12 @@ uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength); uint16_t handleSetPlugin(const uint8_t *workBuffer, uint8_t dataLength); -void handlePerformPrivacyOperation(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handlePerformPrivacyOperation(uint8_t p1, + uint8_t p2, + const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx); #ifdef HAVE_ETH2 diff --git a/src/main.c b/src/main.c index b7b20c713..47b7f57fc 100644 --- a/src/main.c +++ b/src/main.c @@ -158,7 +158,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_PERFORM_PRIVACY_OPERATION: - handlePerformPrivacyOperation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handlePerformPrivacyOperation(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); break; case INS_SIGN: diff --git a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c index 9ab312bba..6b5b6b3e1 100644 --- a/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c +++ b/src_features/performPrivacyOperation/cmd_performPrivacyOperation.c @@ -23,96 +23,92 @@ void decodeScalar(const uint8_t *scalarIn, uint8_t *scalarOut) { } } -void handlePerformPrivacyOperation(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { +uint16_t handlePerformPrivacyOperation(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags, + unsigned int *tx) { + cx_ecfp_private_key_t privateKey; uint8_t privateKeyData[64]; uint8_t privateKeyDataSwapped[INT256_LENGTH]; bip32_path_t bip32; - cx_err_t status = CX_OK; + cx_err_t error = CX_INTERNAL_ERROR; if ((p1 != P1_CONFIRM) && (p1 != P1_NON_CONFIRM)) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } if ((p2 != P2_PUBLIC_ENCRYPTION_KEY) && (p2 != P2_SHARED_SECRET)) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } dataBuffer = parseBip32(dataBuffer, &dataLength, &bip32); - if (dataBuffer == NULL) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if ((p2 == P2_SHARED_SECRET) && (dataLength < 32)) { - THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); + return APDU_RESPONSE_WRONG_DATA_LENGTH; } - cx_ecfp_private_key_t privateKey; - - CX_ASSERT(os_derive_bip32_no_throw( + CX_CHECK(os_derive_bip32_no_throw( CX_CURVE_256K1, bip32.path, bip32.length, privateKeyData, (tmpCtx.publicKeyContext.getChaincode ? tmpCtx.publicKeyContext.chainCode : NULL))); - CX_ASSERT(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &privateKey)); - CX_ASSERT(cx_ecfp_generate_pair_no_throw(CX_CURVE_256K1, - &tmpCtx.publicKeyContext.publicKey, - &privateKey, - 1)); + CX_CHECK(cx_ecfp_init_private_key_no_throw(CX_CURVE_256K1, privateKeyData, 32, &privateKey)); + CX_CHECK(cx_ecfp_generate_pair_no_throw(CX_CURVE_256K1, + &tmpCtx.publicKeyContext.publicKey, + &privateKey, + 1)); getEthAddressStringFromRawKey((const uint8_t *) &tmpCtx.publicKeyContext.publicKey.W, tmpCtx.publicKeyContext.address, chainConfig->chainId); if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { decodeScalar(privateKeyData, privateKeyDataSwapped); - CX_ASSERT(cx_ecfp_init_private_key_no_throw(CX_CURVE_Curve25519, - privateKeyDataSwapped, - 32, - &privateKey)); - CX_ASSERT(cx_ecfp_generate_pair_no_throw(CX_CURVE_Curve25519, - &tmpCtx.publicKeyContext.publicKey, - &privateKey, - 1)); - explicit_bzero(privateKeyDataSwapped, sizeof(privateKeyDataSwapped)); + CX_CHECK(cx_ecfp_init_private_key_no_throw(CX_CURVE_Curve25519, + privateKeyDataSwapped, + 32, + &privateKey)); + CX_CHECK(cx_ecfp_generate_pair_no_throw(CX_CURVE_Curve25519, + &tmpCtx.publicKeyContext.publicKey, + &privateKey, + 1)); } else { memmove(tmpCtx.publicKeyContext.publicKey.W + 1, dataBuffer, 32); - status = cx_x25519(tmpCtx.publicKeyContext.publicKey.W + 1, privateKeyData, 32); - } - explicit_bzero(&privateKey, sizeof(privateKey)); - explicit_bzero(privateKeyData, sizeof(privateKeyData)); - - if (status != CX_OK) { - THROW(APDU_RESPONSE_INVALID_DATA); + CX_CHECK(cx_x25519(tmpCtx.publicKeyContext.publicKey.W + 1, privateKeyData, 32)); } if (p1 == P1_NON_CONFIRM) { *tx = set_result_perform_privacy_operation(); - THROW(APDU_RESPONSE_OK); - } else { - snprintf(strings.common.toAddress, - sizeof(strings.common.toAddress), - "0x%.*s", - 40, - tmpCtx.publicKeyContext.address); - for (uint8_t i = 0; i < 32; i++) { - privateKeyData[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; - } - format_hex(privateKeyData, - 32, - strings.common.fullAmount, - sizeof(strings.common.fullAmount) - 1); - - if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { - ui_display_privacy_public_key(); - } else { - ui_display_privacy_shared_secret(); - } + return APDU_RESPONSE_OK; + } + snprintf(strings.common.toAddress, + sizeof(strings.common.toAddress), + "0x%.*s", + 40, + tmpCtx.publicKeyContext.address); + for (uint8_t i = 0; i < 32; i++) { + privateKeyData[i] = tmpCtx.publicKeyContext.publicKey.W[32 - i]; + } + format_hex(privateKeyData, + 32, + strings.common.fullAmount, + sizeof(strings.common.fullAmount) - 1); - *flags |= IO_ASYNCH_REPLY; + if (p2 == P2_PUBLIC_ENCRYPTION_KEY) { + ui_display_privacy_public_key(); + } else { + ui_display_privacy_shared_secret(); } + *flags |= IO_ASYNCH_REPLY; + // Return code will be sent after UI approve/cancel + error = 0; +end: + explicit_bzero(privateKeyDataSwapped, sizeof(privateKeyDataSwapped)); + explicit_bzero(&privateKey, sizeof(privateKey)); + explicit_bzero(privateKeyData, sizeof(privateKeyData)); + return error; } From 0596b821f8e2237e9f9f5cdfbb41ded4c130866e Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:37:05 +0200 Subject: [PATCH 037/102] Fix return code in 'handleSign' --- src/apdu_constants.h | 11 +++++---- src/main.c | 2 +- src_features/signTx/cmd_signTx.c | 38 +++++++++++++++----------------- 3 files changed, 24 insertions(+), 27 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 66fd693de..5737ff8a2 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -66,12 +66,11 @@ uint16_t handleProvideErc20TokenInformation(const uint8_t *workBuffer, uint16_t handleProvideNFTInformation(const uint8_t *dataBuffer, uint8_t dataLength, unsigned int *tx); -void handleSign(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleSign(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags); uint16_t handleGetAppConfiguration(unsigned int *tx); bool handleSignPersonalMessage(uint8_t p1, uint8_t p2, diff --git a/src/main.c b/src/main.c index 47b7f57fc..5c03add95 100644 --- a/src/main.c +++ b/src/main.c @@ -162,7 +162,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_SIGN: - handleSign(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleSign(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags); break; case INS_GET_APP_CONFIGURATION: diff --git a/src_features/signTx/cmd_signTx.c b/src_features/signTx/cmd_signTx.c index ab32059f2..2365e6ce8 100644 --- a/src_features/signTx/cmd_signTx.c +++ b/src_features/signTx/cmd_signTx.c @@ -3,18 +3,16 @@ #include "feature_signTx.h" #include "eth_plugin_interface.h" -void handleSign(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - UNUSED(tx); +uint16_t handleSign(uint8_t p1, + uint8_t p2, + const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *flags) { parserStatus_e txResult; if (os_global_pin_is_validated() != BOLOS_UX_OK) { PRINTF("Device is PIN-locked"); - THROW(APDU_RESPONSE_SECURITY_NOT_SATISFIED); + return APDU_RESPONSE_SECURITY_NOT_SATISFIED; } if (p1 == P1_FIRST) { if (appState != APP_STATE_IDLE) { @@ -23,19 +21,17 @@ void handleSign(uint8_t p1, appState = APP_STATE_SIGNING_TX; workBuffer = parseBip32(workBuffer, &dataLength, &tmpCtx.transactionContext.bip32); - if (workBuffer == NULL) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } tmpContent.txContent.dataPresent = false; dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_UNAVAILABLE; initTx(&txContext, &global_sha3, &tmpContent.txContent, customProcessor, NULL); - if (dataLength < 1) { PRINTF("Invalid data\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } // EIP 2718: TransactionType might be present before the TransactionPayload. @@ -49,25 +45,25 @@ void handleSign(uint8_t p1, dataLength--; } else { PRINTF("Transaction type %d not supported\n", txType); - THROW(APDU_RESPONSE_TX_TYPE_NOT_SUPPORTED); + return APDU_RESPONSE_TX_TYPE_NOT_SUPPORTED; } } else { txContext.txType = LEGACY; } PRINTF("TxType: %x\n", txContext.txType); } else if (p1 != P1_MORE) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } if (p2 != 0) { - THROW(APDU_RESPONSE_INVALID_P1_P2); + return APDU_RESPONSE_INVALID_P1_P2; } if ((p1 == P1_MORE) && (appState != APP_STATE_SIGNING_TX)) { PRINTF("Signature not initialized\n"); - THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); + return APDU_RESPONSE_CONDITION_NOT_SATISFIED; } if (txContext.currentField == RLP_NONE) { PRINTF("Parser not initialized\n"); - THROW(APDU_RESPONSE_CONDITION_NOT_SATISFIED); + return APDU_RESPONSE_CONDITION_NOT_SATISFIED; } txResult = processTx(&txContext, workBuffer, dataLength); switch (txResult) { @@ -76,12 +72,12 @@ void handleSign(uint8_t p1, case USTREAM_FINISHED: break; case USTREAM_PROCESSING: - THROW(APDU_RESPONSE_OK); + return APDU_RESPONSE_OK; case USTREAM_FAULT: - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; default: PRINTF("Unexpected parser status\n"); - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } if (txResult == USTREAM_FINISHED) { @@ -89,4 +85,6 @@ void handleSign(uint8_t p1, } *flags |= IO_ASYNCH_REPLY; + // Return code will be sent after UI approve/cancel + return APDU_NO_RESPONSE; } From 5950c782ea9e72d4f7179edec6edf6d3d7e2476a Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:37:48 +0200 Subject: [PATCH 038/102] Fix return code in 'handleSignPersonalMessage' --- src/apdu_constants.h | 8 +- src/main.c | 5 +- src_features/signMessage/cmd_signMessage.c | 91 +++++++++++++--------- 3 files changed, 60 insertions(+), 44 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index 5737ff8a2..d45f43b73 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -72,10 +72,10 @@ uint16_t handleSign(uint8_t p1, uint8_t dataLength, unsigned int *flags); uint16_t handleGetAppConfiguration(unsigned int *tx); -bool handleSignPersonalMessage(uint8_t p1, - uint8_t p2, - const uint8_t *const payload, - uint8_t length); +uint16_t handleSignPersonalMessage(uint8_t p1, + const uint8_t *const payload, + uint8_t length, + unsigned int *flags); void handleSignEIP712Message_v0(uint8_t p1, uint8_t p2, const uint8_t *dataBuffer, diff --git a/src/main.c b/src/main.c index 5c03add95..9f9d88669 100644 --- a/src/main.c +++ b/src/main.c @@ -171,10 +171,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { case INS_SIGN_PERSONAL_MESSAGE: forget_known_assets(); - *flags |= IO_ASYNCH_REPLY; - if (!handleSignPersonalMessage(cmd->p1, cmd->p2, cmd->data, cmd->lc)) { - reset_app_context(); - } + sw = handleSignPersonalMessage(cmd->p1, cmd->data, cmd->lc, flags); break; case INS_SIGN_EIP_712_MESSAGE: diff --git a/src_features/signMessage/cmd_signMessage.c b/src_features/signMessage/cmd_signMessage.c index 711073059..a2145ee99 100644 --- a/src_features/signMessage/cmd_signMessage.c +++ b/src_features/signMessage/cmd_signMessage.c @@ -15,18 +15,21 @@ static const char SIGN_MAGIC[] = "\x19" "Ethereum Signed Message:\n"; +#define SET_IDLE \ + do { \ + if (states.ui_started) { \ + ui_idle(); \ + } \ + } while (0) + /** * Send a response APDU with the given Status Word * * @param[in] sw status word */ static void apdu_reply(uint16_t sw) { - if ((sw != APDU_RESPONSE_OK) && states.ui_started) { - ui_idle(); - } - G_io_apdu_buffer[0] = (sw >> 8) & 0xff; - G_io_apdu_buffer[1] = sw & 0xff; - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); + bool idle = (sw != APDU_RESPONSE_OK) && states.ui_started; + io_seproxyhal_send_status(sw, 0, false, idle); } /** @@ -89,9 +92,10 @@ static void reset_ui_buffer(void) { * * @param[in] data the APDU payload * @param[in] length the payload size - * @return pointer to the start of the start of the message; \ref NULL if it failed + * @param[out] sw Status Word + * @return pointer to the start of the message; \ref NULL if it failed */ -static const uint8_t *first_apdu_data(const uint8_t *data, uint8_t *length) { +static const uint8_t *first_apdu_data(const uint8_t *data, uint8_t *length, uint16_t *sw) { cx_err_t error = CX_INTERNAL_ERROR; if (appState != APP_STATE_IDLE) { @@ -100,13 +104,13 @@ static const uint8_t *first_apdu_data(const uint8_t *data, uint8_t *length) { appState = APP_STATE_SIGNING_MESSAGE; data = parseBip32(data, length, &tmpCtx.messageSigningContext.bip32); if (data == NULL) { - apdu_reply(APDU_RESPONSE_INVALID_DATA); + *sw = APDU_RESPONSE_INVALID_DATA; return NULL; } if (*length < sizeof(uint32_t)) { PRINTF("Invalid data\n"); - apdu_reply(APDU_RESPONSE_INVALID_DATA); + *sw = APDU_RESPONSE_INVALID_DATA; return NULL; } @@ -135,8 +139,10 @@ static const uint8_t *first_apdu_data(const uint8_t *data, uint8_t *length) { reset_ui_buffer(); states.sign_state = STATE_191_HASH_DISPLAY; states.ui_started = false; + *sw = APDU_RESPONSE_OK; return data; end: + *sw = error; return NULL; } @@ -147,15 +153,15 @@ static const uint8_t *first_apdu_data(const uint8_t *data, uint8_t *length) { * @param[in] length the data length * @return whether it was successful or not */ -static bool feed_hash(const uint8_t *const data, const uint8_t length) { +static uint16_t feed_hash(const uint8_t *const data, const uint8_t length) { cx_err_t error = CX_INTERNAL_ERROR; if (length > tmpCtx.messageSigningContext.remainingLength) { PRINTF("Error: Length mismatch ! (%u > %u)!\n", length, tmpCtx.messageSigningContext.remainingLength); - apdu_reply(APDU_RESPONSE_INVALID_DATA); - return false; + SET_IDLE; + return APDU_RESPONSE_INVALID_DATA; } CX_CHECK(cx_hash_no_throw((cx_hash_t *) &global_sha3, 0, data, length, NULL, 0)); if ((tmpCtx.messageSigningContext.remainingLength -= length) == 0) { @@ -167,15 +173,15 @@ static bool feed_hash(const uint8_t *const data, const uint8_t length) { tmpCtx.messageSigningContext.hash, 32)); } - return true; + error = APDU_RESPONSE_OK; end: - return false; + return error; } /** * Feed the UI with new data */ -static void feed_display(void) { +static uint16_t feed_display(void) { int c; while ((unprocessed_length() > 0) && (remaining_ui_buffer_length() > 0)) { @@ -210,57 +216,70 @@ static void feed_display(void) { } if ((unprocessed_length() == 0) && (tmpCtx.messageSigningContext.remainingLength > 0)) { - apdu_reply(APDU_RESPONSE_OK); + return APDU_RESPONSE_OK; } + return APDU_NO_RESPONSE; } /** * EIP-191 APDU handler * * @param[in] p1 instruction parameter 1 - * @param[in] p2 instruction parameter 2 * @param[in] payload received data * @param[in] length data length + * @param[in] flags io_exchange flag * @return whether the handling of the APDU was successful or not */ -bool handleSignPersonalMessage(uint8_t p1, - uint8_t p2, - const uint8_t *const payload, - uint8_t length) { +uint16_t handleSignPersonalMessage(uint8_t p1, + const uint8_t *const payload, + uint8_t length, + unsigned int *flags) { const uint8_t *data = payload; + uint16_t sw = APDU_RESPONSE_UNKNOWN; - (void) p2; processed_size = 0; if (p1 == P1_FIRST) { - if ((data = first_apdu_data(data, &length)) == NULL) { - return false; + if ((data = first_apdu_data(data, &length, &sw)) == NULL) { + if (sw != APDU_RESPONSE_INVALID_DATA) { + *flags |= IO_ASYNCH_REPLY; + } + return sw; } processed_size = data - payload; } else if (p1 != P1_MORE) { PRINTF("Error: Unexpected P1 (%u)!\n", p1); - apdu_reply(APDU_RESPONSE_INVALID_P1_P2); - return false; + SET_IDLE; + return APDU_RESPONSE_INVALID_P1_P2; } else if (appState != APP_STATE_SIGNING_MESSAGE) { PRINTF("Error: App not already in signing state!\n"); - apdu_reply(APDU_RESPONSE_INVALID_DATA); - return false; + SET_IDLE; + return APDU_RESPONSE_INVALID_DATA; } - if (!feed_hash(data, length)) { - return false; + sw = feed_hash(data, length); + if (sw != APDU_RESPONSE_OK) { + if (sw != APDU_RESPONSE_INVALID_DATA) { + *flags |= IO_ASYNCH_REPLY; + } + return sw; } if (states.sign_state == STATE_191_HASH_DISPLAY) { - feed_display(); - } else // hash only - { + sw = feed_display(); + if (sw != APDU_RESPONSE_OK) { + *flags |= IO_ASYNCH_REPLY; + } + } else { + // hash only if (tmpCtx.messageSigningContext.remainingLength == 0) { ui_191_switch_to_sign(); + sw = APDU_NO_RESPONSE; + *flags |= IO_ASYNCH_REPLY; } else { - apdu_reply(APDU_RESPONSE_OK); + sw = APDU_RESPONSE_OK; } } - return true; + return sw; } /** From 0ca892061e057e4c4f4239faf8da07d4072798a0 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:40:29 +0200 Subject: [PATCH 039/102] Fix return code in 'handleSignEIP712Message_v0' --- src/apdu_constants.h | 10 ++++------ src/main.c | 4 ++-- .../signMessageEIP712_v0/cmd_signMessage712.c | 20 ++++++++----------- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/apdu_constants.h b/src/apdu_constants.h index d45f43b73..f322c89c3 100644 --- a/src/apdu_constants.h +++ b/src/apdu_constants.h @@ -76,12 +76,10 @@ uint16_t handleSignPersonalMessage(uint8_t p1, const uint8_t *const payload, uint8_t length, unsigned int *flags); -void handleSignEIP712Message_v0(uint8_t p1, - uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx); +uint16_t handleSignEIP712Message_v0(uint8_t p1, + const uint8_t *dataBuffer, + uint8_t dataLength, + unsigned int *flags); uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength); diff --git a/src/main.c b/src/main.c index 9f9d88669..0b5ef1d8e 100644 --- a/src/main.c +++ b/src/main.c @@ -178,7 +178,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { switch (cmd->p2) { case P2_EIP712_LEGACY_IMPLEM: forget_known_assets(); - handleSignEIP712Message_v0(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags, tx); + sw = handleSignEIP712Message_v0(cmd->p1, cmd->data, cmd->lc, flags); break; #ifdef HAVE_EIP712_FULL_SUPPORT case P2_EIP712_FULL_IMPLEM: @@ -187,7 +187,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; #endif // HAVE_EIP712_FULL_SUPPORT default: - THROW(APDU_RESPONSE_INVALID_P1_P2); + sw = APDU_RESPONSE_INVALID_P1_P2; } break; diff --git a/src_features/signMessageEIP712_v0/cmd_signMessage712.c b/src_features/signMessageEIP712_v0/cmd_signMessage712.c index d9587e67f..a5afa259a 100644 --- a/src_features/signMessageEIP712_v0/cmd_signMessage712.c +++ b/src_features/signMessageEIP712_v0/cmd_signMessage712.c @@ -4,25 +4,20 @@ #include "common_ui.h" #include "common_712.h" -void handleSignEIP712Message_v0(uint8_t p1, - uint8_t p2, - const uint8_t *workBuffer, - uint8_t dataLength, - unsigned int *flags, - unsigned int *tx) { - (void) tx; - (void) p2; - if (p1 != 00) { - THROW(APDU_RESPONSE_INVALID_P1_P2); +uint16_t handleSignEIP712Message_v0(uint8_t p1, + const uint8_t *workBuffer, + uint8_t dataLength, + unsigned int *flags) { + if (p1 != 0x00) { + return APDU_RESPONSE_INVALID_P1_P2; } if (appState != APP_STATE_IDLE) { reset_app_context(); } workBuffer = parseBip32(workBuffer, &dataLength, &tmpCtx.messageSigningContext.bip32); - if ((workBuffer == NULL) || (dataLength < (KECCAK256_HASH_BYTESIZE * 2))) { - THROW(APDU_RESPONSE_INVALID_DATA); + return APDU_RESPONSE_INVALID_DATA; } memmove(tmpCtx.messageSigningContext712.domainHash, workBuffer, KECCAK256_HASH_BYTESIZE); memmove(tmpCtx.messageSigningContext712.messageHash, @@ -32,4 +27,5 @@ void handleSignEIP712Message_v0(uint8_t p1, ui_sign_712_v0(); *flags |= IO_ASYNCH_REPLY; + return APDU_NO_RESPONSE; } From 4a1614de49ee75db08dd63f75477ecf3d7d59132 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:41:32 +0200 Subject: [PATCH 040/102] Fix return code in 'handle_eip712_xxx' --- src/main.c | 12 +- src_features/signMessageEIP712/commands_712.c | 126 ++++++++++-------- src_features/signMessageEIP712/commands_712.h | 15 ++- 3 files changed, 84 insertions(+), 69 deletions(-) diff --git a/src/main.c b/src/main.c index 0b5ef1d8e..29ad1df7e 100644 --- a/src/main.c +++ b/src/main.c @@ -182,8 +182,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; #ifdef HAVE_EIP712_FULL_SUPPORT case P2_EIP712_FULL_IMPLEM: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_sign(G_io_apdu_buffer); + sw = handle_eip712_sign(cmd->data, cmd->lc, flags); break; #endif // HAVE_EIP712_FULL_SUPPORT default: @@ -206,18 +205,15 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { #ifdef HAVE_EIP712_FULL_SUPPORT case INS_EIP712_STRUCT_DEF: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_struct_def(G_io_apdu_buffer); + sw = handle_eip712_struct_def(cmd->p2, cmd->data, cmd->lc); break; case INS_EIP712_STRUCT_IMPL: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_struct_impl(G_io_apdu_buffer); + sw = handle_eip712_struct_impl(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags); break; case INS_EIP712_FILTERING: - *flags |= IO_ASYNCH_REPLY; - handle_eip712_filtering(G_io_apdu_buffer); + sw = handle_eip712_filtering(cmd->p2, cmd->data, cmd->lc, flags); break; #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index 179cff749..70509e633 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -41,60 +41,64 @@ * * @param[in] success whether the command was successful */ -void handle_eip712_return_code(bool success) { +static void apdu_reply(bool success) { if (success) { apdu_response_code = APDU_RESPONSE_OK; - } else if (apdu_response_code == APDU_RESPONSE_OK) { // somehow not set - apdu_response_code = APDU_RESPONSE_ERROR_NO_INFO; - } - - G_io_apdu_buffer[0] = (apdu_response_code >> 8) & 0xff; - G_io_apdu_buffer[1] = apdu_response_code & 0xff; - - // Send back the response, do not restart the event loop - io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, 2); - - if (!success) { + } else { + if (apdu_response_code == APDU_RESPONSE_OK) { // somehow not set + apdu_response_code = APDU_RESPONSE_ERROR_NO_INFO; + } eip712_context_deinit(); ui_idle(); } } +/** + * Send the response to the previous APDU command + * + * In case of an error it uses the global variable to retrieve the error code and resets + * the app context + * + * @param[in] success whether the command was successful + */ +void handle_eip712_return_code(bool success) { + apdu_reply(success); + + io_seproxyhal_send_status(apdu_response_code, 0, false, false); +} + /** * Process the EIP712 struct definition command * * @param[in] apdu_buf the APDU payload * @return whether the command was successful or not */ -bool handle_eip712_struct_def(const uint8_t *const apdu_buf) { +uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t dataLength) { bool ret = true; if (eip712_context == NULL) { ret = eip712_context_init(); } - if (struct_state == DEFINED) { ret = false; } if (ret) { - switch (apdu_buf[OFFSET_P2]) { + switch (p2) { case P2_DEF_NAME: - ret = set_struct_name(apdu_buf[OFFSET_LC], &apdu_buf[OFFSET_CDATA]); + ret = set_struct_name(dataLength, dataBuffer); break; case P2_DEF_FIELD: - ret = set_struct_field(apdu_buf[OFFSET_LC], &apdu_buf[OFFSET_CDATA]); + ret = set_struct_field(dataLength, dataBuffer); break; default: - PRINTF("Unknown P2 0x%x for APDU 0x%x\n", - apdu_buf[OFFSET_P2], - apdu_buf[OFFSET_INS]); + PRINTF("Unknown P2 0x%x\n", p2); apdu_response_code = APDU_RESPONSE_INVALID_P1_P2; ret = false; } } - handle_eip712_return_code(ret); - return ret; + apdu_reply(ret); + return apdu_response_code; } /** @@ -103,17 +107,21 @@ bool handle_eip712_struct_def(const uint8_t *const apdu_buf) { * @param[in] apdu_buf the APDU payload * @return whether the command was successful or not */ -bool handle_eip712_struct_impl(const uint8_t *const apdu_buf) { +uint16_t handle_eip712_struct_impl(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + uint32_t *flags) { bool ret = false; bool reply_apdu = true; if (eip712_context == NULL) { apdu_response_code = APDU_RESPONSE_CONDITION_NOT_SATISFIED; } else { - switch (apdu_buf[OFFSET_P2]) { + switch (p2) { case P2_IMPL_NAME: // set root type - ret = path_set_root((char *) &apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = path_set_root((char *) dataBuffer, dataLength); if (ret) { if (N_storage.verbose_eip712) { ui_712_review_struct(path_get_root()); @@ -123,26 +131,24 @@ bool handle_eip712_struct_impl(const uint8_t *const apdu_buf) { } break; case P2_IMPL_FIELD: - if ((ret = field_hash(&apdu_buf[OFFSET_CDATA], - apdu_buf[OFFSET_LC], - apdu_buf[OFFSET_P1] != P1_COMPLETE))) { + if ((ret = field_hash(dataBuffer, dataLength, p1 != P1_COMPLETE))) { reply_apdu = false; } break; case P2_IMPL_ARRAY: - ret = path_new_array_depth(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = path_new_array_depth(dataBuffer, dataLength); break; default: - PRINTF("Unknown P2 0x%x for APDU 0x%x\n", - apdu_buf[OFFSET_P2], - apdu_buf[OFFSET_INS]); + PRINTF("Unknown P2 0x%x\n", p2); apdu_response_code = APDU_RESPONSE_INVALID_P1_P2; } } if (reply_apdu) { - handle_eip712_return_code(ret); + apdu_reply(ret); + return apdu_response_code; } - return ret; + *flags |= IO_ASYNCH_REPLY; + return APDU_NO_RESPONSE; } /** @@ -151,20 +157,21 @@ bool handle_eip712_struct_impl(const uint8_t *const apdu_buf) { * @param[in] apdu_buf the APDU payload * @return whether the command was successful or not */ -bool handle_eip712_filtering(const uint8_t *const apdu_buf) { +uint16_t handle_eip712_filtering(uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + uint32_t *flags) { bool ret = true; bool reply_apdu = true; if (eip712_context == NULL) { - apdu_response_code = APDU_RESPONSE_CONDITION_NOT_SATISFIED; - return false; + apdu_reply(false); + return APDU_RESPONSE_CONDITION_NOT_SATISFIED; } - if ((apdu_buf[OFFSET_P2] != P2_FILT_ACTIVATE) && - (ui_712_get_filtering_mode() != EIP712_FILTERING_FULL)) { - handle_eip712_return_code(true); - return true; + if ((p2 != P2_FILT_ACTIVATE) && (ui_712_get_filtering_mode() != EIP712_FILTERING_FULL)) { + return APDU_RESPONSE_OK; } - switch (apdu_buf[OFFSET_P2]) { + switch (p2) { case P2_FILT_ACTIVATE: if (!N_storage.verbose_eip712) { ui_712_set_filtering_mode(EIP712_FILTERING_FULL); @@ -173,29 +180,29 @@ bool handle_eip712_filtering(const uint8_t *const apdu_buf) { forget_known_assets(); break; case P2_FILT_MESSAGE_INFO: - ret = filtering_message_info(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = filtering_message_info(dataBuffer, dataLength); if (ret) { reply_apdu = false; } break; case P2_FILT_DATE_TIME: - ret = filtering_date_time(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = filtering_date_time(dataBuffer, dataLength); break; case P2_FILT_AMOUNT_JOIN_TOKEN: - ret = filtering_amount_join_token(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = filtering_amount_join_token(dataBuffer, dataLength); break; case P2_FILT_AMOUNT_JOIN_VALUE: - ret = filtering_amount_join_value(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = filtering_amount_join_value(dataBuffer, dataLength); break; case P2_FILT_RAW_FIELD: - ret = filtering_raw_field(&apdu_buf[OFFSET_CDATA], apdu_buf[OFFSET_LC]); + ret = filtering_raw_field(dataBuffer, dataLength); break; default: - PRINTF("Unknown P2 0x%x for APDU 0x%x\n", apdu_buf[OFFSET_P2], apdu_buf[OFFSET_INS]); + PRINTF("Unknown P2 0x%x\n", p2); apdu_response_code = APDU_RESPONSE_INVALID_P1_P2; ret = false; } - if ((apdu_buf[OFFSET_P2] > P2_FILT_MESSAGE_INFO) && ret) { + if ((p2 > P2_FILT_MESSAGE_INFO) && ret) { if (ui_712_push_new_filter_path()) { if (!ui_712_filters_counter_incr()) { ret = false; @@ -204,9 +211,11 @@ bool handle_eip712_filtering(const uint8_t *const apdu_buf) { } } if (reply_apdu) { - handle_eip712_return_code(ret); + apdu_reply(ret); + return apdu_response_code; } - return ret; + *flags |= IO_ASYNCH_REPLY; + return APDU_NO_RESPONSE; } /** @@ -215,9 +224,8 @@ bool handle_eip712_filtering(const uint8_t *const apdu_buf) { * @param[in] apdu_buf the APDU payload * @return whether the command was successful or not */ -bool handle_eip712_sign(const uint8_t *const apdu_buf) { +uint16_t handle_eip712_sign(const uint8_t *dataBuffer, uint8_t dataLength, uint32_t *flags) { bool ret = false; - uint8_t length = apdu_buf[OFFSET_LC]; if (eip712_context == NULL) { apdu_response_code = APDU_RESPONSE_CONDITION_NOT_SATISFIED; @@ -233,18 +241,22 @@ bool handle_eip712_sign(const uint8_t *const apdu_buf) { (ui_712_remaining_filters() != 0)) { PRINTF("%d EIP712 filters are missing\n", ui_712_remaining_filters()); apdu_response_code = APDU_RESPONSE_REF_DATA_NOT_FOUND; - } else if (parseBip32(&apdu_buf[OFFSET_CDATA], &length, &tmpCtx.messageSigningContext.bip32) != - NULL) { + } else if (parseBip32(dataBuffer, &dataLength, &tmpCtx.messageSigningContext.bip32) == NULL) { + apdu_response_code = APDU_RESPONSE_INVALID_DATA; + } else { if (!N_storage.verbose_eip712 && (ui_712_get_filtering_mode() == EIP712_FILTERING_BASIC)) { ui_712_message_hash(); } ret = true; ui_712_end_sign(); } + if (!ret) { - handle_eip712_return_code(ret); + apdu_reply(false); + return apdu_response_code; } - return ret; + *flags |= IO_ASYNCH_REPLY; + return APDU_NO_RESPONSE; } #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/commands_712.h b/src_features/signMessageEIP712/commands_712.h index dcfcf4570..a34d264e4 100644 --- a/src_features/signMessageEIP712/commands_712.h +++ b/src_features/signMessageEIP712/commands_712.h @@ -8,10 +8,17 @@ #define DOMAIN_STRUCT_NAME "EIP712Domain" -bool handle_eip712_struct_def(const uint8_t *const apdu_buf); -bool handle_eip712_struct_impl(const uint8_t *const apdu_buf); -bool handle_eip712_sign(const uint8_t *const apdu_buf); -bool handle_eip712_filtering(const uint8_t *const apdu_buf); +uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t dataLength); +uint16_t handle_eip712_struct_impl(uint8_t p1, + uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + uint32_t *flags); +uint16_t handle_eip712_sign(const uint8_t *dataBuffer, uint8_t dataLength, uint32_t *flags); +uint16_t handle_eip712_filtering(uint8_t p2, + const uint8_t *dataBuffer, + uint8_t dataLength, + uint32_t *flags); void handle_eip712_return_code(bool success); #endif // HAVE_EIP712_FULL_SUPPORT From 178fb89ea5b2be13c00b5156cd66686f5c733949 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:42:58 +0200 Subject: [PATCH 041/102] Fix THROW in eip191 --- src_features/signTx/cmd_signTx.c | 19 +-- src_features/signTx/feature_signTx.h | 5 +- src_features/signTx/logic_signTx.c | 153 ++++++++++++++----------- src_features/signTx/ui_common_signTx.c | 5 +- 4 files changed, 103 insertions(+), 79 deletions(-) diff --git a/src_features/signTx/cmd_signTx.c b/src_features/signTx/cmd_signTx.c index 2365e6ce8..f4ecbada9 100644 --- a/src_features/signTx/cmd_signTx.c +++ b/src_features/signTx/cmd_signTx.c @@ -9,6 +9,8 @@ uint16_t handleSign(uint8_t p1, uint8_t dataLength, unsigned int *flags) { parserStatus_e txResult; + uint16_t sw = APDU_NO_RESPONSE; + cx_err_t error = CX_INTERNAL_ERROR; if (os_global_pin_is_validated() != BOLOS_UX_OK) { PRINTF("Device is PIN-locked"); @@ -28,7 +30,10 @@ uint16_t handleSign(uint8_t p1, tmpContent.txContent.dataPresent = false; dataContext.tokenContext.pluginStatus = ETH_PLUGIN_RESULT_UNAVAILABLE; - initTx(&txContext, &global_sha3, &tmpContent.txContent, customProcessor, NULL); + if (initTx(&txContext, &global_sha3, &tmpContent.txContent, customProcessor, NULL) == + false) { + return APDU_RESPONSE_INVALID_DATA; + } if (dataLength < 1) { PRINTF("Invalid data\n"); return APDU_RESPONSE_INVALID_DATA; @@ -39,7 +44,10 @@ uint16_t handleSign(uint8_t p1, if (txType >= MIN_TX_TYPE && txType <= MAX_TX_TYPE) { // Enumerate through all supported txTypes here... if (txType == EIP2930 || txType == EIP1559) { - CX_ASSERT(cx_hash_no_throw((cx_hash_t *) &global_sha3, 0, workBuffer, 1, NULL, 0)); + error = cx_hash_no_throw((cx_hash_t *) &global_sha3, 0, workBuffer, 1, NULL, 0); + if (error != CX_OK) { + return error; + } txContext.txType = txType; workBuffer++; dataLength--; @@ -70,6 +78,7 @@ uint16_t handleSign(uint8_t p1, case USTREAM_SUSPENDED: break; case USTREAM_FINISHED: + sw = finalizeParsing(); break; case USTREAM_PROCESSING: return APDU_RESPONSE_OK; @@ -80,11 +89,7 @@ uint16_t handleSign(uint8_t p1, return APDU_RESPONSE_INVALID_DATA; } - if (txResult == USTREAM_FINISHED) { - finalizeParsing(); - } - *flags |= IO_ASYNCH_REPLY; // Return code will be sent after UI approve/cancel - return APDU_NO_RESPONSE; + return sw; } diff --git a/src_features/signTx/feature_signTx.h b/src_features/signTx/feature_signTx.h index a62514a47..ace67f0ae 100644 --- a/src_features/signTx/feature_signTx.h +++ b/src_features/signTx/feature_signTx.h @@ -11,11 +11,8 @@ typedef enum { } plugin_ui_state_t; customStatus_e customProcessor(txContext_t *context); -void finalizeParsing(); -void prepareFeeDisplay(); -void prepareNetworkDisplay(); +uint16_t finalizeParsing(); void ux_approve_tx(bool fromPlugin); -void report_finalize_error(void); void start_signature_flow(void); #endif // _SIGN_TX_H_ diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 3312f747a..0d5ac24e7 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -72,7 +72,9 @@ customStatus_e customProcessor(txContext_t *context) { } else if (status >= ETH_PLUGIN_RESULT_SUCCESSFUL) { dataContext.tokenContext.fieldIndex = 0; dataContext.tokenContext.fieldOffset = 0; - copyTxData(context, NULL, 4); + if (copyTxData(context, NULL, 4) == false) { + return CUSTOM_FAULT; + } if (context->currentFieldLength == 4) { return CUSTOM_NOT_HANDLED; } @@ -111,9 +113,11 @@ customStatus_e customProcessor(txContext_t *context) { PRINTF("currentFieldPos %d copySize %d\n", context->currentFieldPos, copySize); - copyTxData(context, - dataContext.tokenContext.data + dataContext.tokenContext.fieldOffset, - copySize); + if (copyTxData(context, + dataContext.tokenContext.data + dataContext.tokenContext.fieldOffset, + copySize) == false) { + return CUSTOM_FAULT; + } if (context->currentFieldPos == context->currentFieldLength) { PRINTF("\n\nIncrementing one\n"); @@ -177,22 +181,23 @@ customStatus_e customProcessor(txContext_t *context) { return CUSTOM_NOT_HANDLED; } -void report_finalize_error(void) { +static void report_finalize_error(void) { io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA, 0, true, true); } -static void address_to_string(uint8_t *in, - size_t in_len, - char *out, - size_t out_len, - uint64_t chainId) { +static uint16_t address_to_string(uint8_t *in, + size_t in_len, + char *out, + size_t out_len, + uint64_t chainId) { if (in_len != 0) { if (!getEthDisplayableAddress(in, out, out_len, chainId)) { - THROW(APDU_RESPONSE_ERROR_NO_INFO); + return APDU_RESPONSE_ERROR_NO_INFO; } } else { strlcpy(out, "Contract", out_len); } + return APDU_RESPONSE_OK; } static void raw_fee_to_string(uint256_t *rawFee, char *displayBuffer, uint32_t displayBufferSize) { @@ -239,7 +244,7 @@ static void raw_fee_to_string(uint256_t *rawFee, char *displayBuffer, uint32_t d // Compute the fees, transform it to a string, prepend a ticker to it and copy everything to // `displayBuffer` output -static void max_transaction_fee_to_string(const txInt256_t *BEGasPrice, +static bool max_transaction_fee_to_string(const txInt256_t *BEGasPrice, const txInt256_t *BEGasLimit, char *displayBuffer, uint32_t displayBufferSize) { @@ -253,8 +258,11 @@ static void max_transaction_fee_to_string(const txInt256_t *BEGasPrice, PRINTF("Gas limit %.*H\n", BEGasLimit->length, BEGasLimit->value); convertUint256BE(BEGasPrice->value, BEGasPrice->length, &gasPrice); convertUint256BE(BEGasLimit->value, BEGasLimit->length, &gasLimit); - mul256(&gasPrice, &gasLimit, &rawFee); + if (mul256(&gasPrice, &gasLimit, &rawFee) == false) { + return false; + } raw_fee_to_string(&rawFee, displayBuffer, displayBufferSize); + return true; } static void nonce_to_string(const txInt256_t *nonce, char *out, size_t out_size) { @@ -263,37 +271,40 @@ static void nonce_to_string(const txInt256_t *nonce, char *out, size_t out_size) tostring256(&nonce_uint256, 10, out, out_size); } -static void get_network_as_string(char *out, size_t out_size) { +static uint16_t get_network_as_string(char *out, size_t out_size) { uint64_t chain_id = get_tx_chain_id(); const char *name = get_network_name_from_chain_id(&chain_id); if (name == NULL) { // No network name found so simply copy the chain ID as the network name. if (!u64_to_string(chain_id, out, out_size)) { - THROW(APDU_RESPONSE_CHAINID_OUT_BUF_SMALL); + return APDU_RESPONSE_CHAINID_OUT_BUF_SMALL; } } else { // Network name found, simply copy it. strlcpy(out, name, out_size); } + return APDU_RESPONSE_OK; } -static void get_public_key(uint8_t *out, uint8_t outLength) { +static uint16_t get_public_key(uint8_t *out, uint8_t outLength) { uint8_t raw_pubkey[65]; + cx_err_t error = CX_INTERNAL_ERROR; if (outLength < ADDRESS_LENGTH) { - return; - } - if (bip32_derive_get_pubkey_256(CX_CURVE_256K1, - tmpCtx.transactionContext.bip32.path, - tmpCtx.transactionContext.bip32.length, - raw_pubkey, - NULL, - CX_SHA512) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); + return APDU_RESPONSE_WRONG_DATA_LENGTH; } + CX_CHECK(bip32_derive_get_pubkey_256(CX_CURVE_256K1, + tmpCtx.transactionContext.bip32.path, + tmpCtx.transactionContext.bip32.length, + raw_pubkey, + NULL, + CX_SHA512)); getEthAddressFromRawKey(raw_pubkey, out); + error = APDU_RESPONSE_OK; +end: + return error; } /* Local implementation of strncasecmp, workaround of the segfaulting base implem @@ -311,7 +322,7 @@ static int strcasecmp_workaround(const char *str1, const char *str2) { return 0; } -__attribute__((noinline)) static bool finalize_parsing_helper(void) { +__attribute__((noinline)) static uint16_t finalize_parsing_helper(void) { char displayBuffer[50]; uint8_t decimals = WEI_TO_ETHER; uint64_t chain_id = get_tx_chain_id(); @@ -325,9 +336,8 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { if (chainConfig->chainId != id) { PRINTF("Invalid chainID %u expected %u\n", id, chainConfig->chainId); - reset_app_context(); report_finalize_error(); - return false; + return APDU_NO_RESPONSE; } } // Store the hash @@ -339,13 +349,19 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { 32)); uint8_t msg_sender[ADDRESS_LENGTH] = {0}; - get_public_key(msg_sender, sizeof(msg_sender)); + error = get_public_key(msg_sender, sizeof(msg_sender)); + if (error != APDU_RESPONSE_OK) { + goto end; + } - address_to_string(msg_sender, - ADDRESS_LENGTH, - strings.common.fromAddress, - sizeof(strings.common.fromAddress), - chainConfig->chainId); + error = address_to_string(msg_sender, + ADDRESS_LENGTH, + strings.common.fromAddress, + sizeof(strings.common.fromAddress), + chainConfig->chainId); + if (error != APDU_RESPONSE_OK) { + goto end; + } PRINTF("FROM address displayed: %s\n", strings.common.fromAddress); // Finalize the plugin handling if (dataContext.tokenContext.pluginStatus >= ETH_PLUGIN_RESULT_SUCCESSFUL) { @@ -356,7 +372,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { if (!eth_plugin_call(ETH_PLUGIN_FINALIZE, (void *) &pluginFinalize)) { PRINTF("Plugin finalize call failed\n"); report_finalize_error(); - return false; + return APDU_NO_RESPONSE; } // Lookup tokens if requested ethPluginProvideInfo_t pluginProvideInfo; @@ -380,7 +396,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { ETH_PLUGIN_RESULT_UNSUCCESSFUL) { PRINTF("Plugin provide token call failed\n"); report_finalize_error(); - return false; + return APDU_NO_RESPONSE; } pluginFinalize.result = pluginProvideInfo.result; } @@ -404,7 +420,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { if ((pluginFinalize.amount == NULL) || (pluginFinalize.address == NULL)) { PRINTF("Incorrect amount/address set by plugin\n"); report_finalize_error(); - return false; + return APDU_NO_RESPONSE; } memmove(tmpContent.txContent.value.value, pluginFinalize.amount, 32); tmpContent.txContent.value.length = 32; @@ -418,7 +434,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { default: PRINTF("ui type %d not supported\n", pluginFinalize.uiType); report_finalize_error(); - return false; + return APDU_NO_RESPONSE; } } else if (G_called_from_swap && G_swap_mode == SWAP_MODE_CROSSCHAIN_SUCCESS) { PRINTF("Plugin swap_with_calldata fell back for UI with success\n"); @@ -438,8 +454,8 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // User has just validated a swap but ETH received apdus about a non standard plugin / contract if (G_called_from_swap && !g_use_standard_ui) { - PRINTF("ERR_SILENT_MODE_CHECK_FAILED, G_called_from_swap\n"); - THROW(APDU_RESPONSE_MODE_CHECK_FAILED); + PRINTF("APDU_RESPONSE_MODE_CHECK_FAILED, G_called_from_swap\n"); + return APDU_RESPONSE_MODE_CHECK_FAILED; } // Specific calldata check when in swap mode @@ -448,7 +464,7 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // We are in crosschain mode and the correct calldata has been received if (G_swap_mode != SWAP_MODE_STANDARD && G_swap_mode != SWAP_MODE_CROSSCHAIN_SUCCESS) { PRINTF("Error: G_swap_mode %d refused\n", G_swap_mode); - THROW(APDU_RESPONSE_MODE_CHECK_FAILED); + return APDU_RESPONSE_MODE_CHECK_FAILED; } } @@ -463,16 +479,19 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { if (g_use_standard_ui) { // Format the address in a temporary buffer, if in swap case compare it with validated // address, else commit it - address_to_string(tmpContent.txContent.destination, - tmpContent.txContent.destinationLength, - displayBuffer, - sizeof(displayBuffer), - chainConfig->chainId); + error = address_to_string(tmpContent.txContent.destination, + tmpContent.txContent.destinationLength, + displayBuffer, + sizeof(displayBuffer), + chainConfig->chainId); + if (error != APDU_RESPONSE_OK) { + goto end; + } if (G_called_from_swap) { // Ensure the values are the same that the ones that have been previously validated if (strcasecmp_workaround(strings.common.toAddress, displayBuffer) != 0) { - PRINTF("ERR_SILENT_MODE_CHECK_FAILED, address check failed\n"); - THROW(APDU_RESPONSE_MODE_CHECK_FAILED); + PRINTF("APDU_RESPONSE_MODE_CHECK_FAILED, address check failed\n"); + return APDU_RESPONSE_MODE_CHECK_FAILED; } } else { strlcpy(strings.common.toAddress, displayBuffer, sizeof(strings.common.toAddress)); @@ -488,16 +507,16 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { displayBuffer, sizeof(displayBuffer))) { PRINTF("OVERFLOW, amount to string failed\n"); - THROW(EXCEPTION_OVERFLOW); + return EXCEPTION_OVERFLOW; } if (G_called_from_swap) { // Ensure the values are the same that the ones that have been previously validated if (strcmp(strings.common.fullAmount, displayBuffer) != 0) { - PRINTF("ERR_SILENT_MODE_CHECK_FAILED, amount check failed\n"); + PRINTF("APDU_RESPONSE_MODE_CHECK_FAILED, amount check failed\n"); PRINTF("Expected %s\n", strings.common.fullAmount); PRINTF("Received %s\n", displayBuffer); - THROW(APDU_RESPONSE_MODE_CHECK_FAILED); + return APDU_RESPONSE_MODE_CHECK_FAILED; } } else { strlcpy(strings.common.fullAmount, displayBuffer, sizeof(strings.common.fullAmount)); @@ -507,17 +526,19 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { // Compute the max fee in a temporary buffer, if in swap case compare it with validated max fee, // else commit it - max_transaction_fee_to_string(&tmpContent.txContent.gasprice, - &tmpContent.txContent.startgas, - displayBuffer, - sizeof(displayBuffer)); + if (max_transaction_fee_to_string(&tmpContent.txContent.gasprice, + &tmpContent.txContent.startgas, + displayBuffer, + sizeof(displayBuffer)) == false) { + return APDU_RESPONSE_INVALID_DATA; + } if (G_called_from_swap) { // Ensure the values are the same that the ones that have been previously validated if (strcmp(strings.common.maxFee, displayBuffer) != 0) { - PRINTF("ERR_SILENT_MODE_CHECK_FAILED, fees check failed\n"); + PRINTF("APDU_RESPONSE_MODE_CHECK_FAILED, fees check failed\n"); PRINTF("Expected %s\n", strings.common.maxFee); PRINTF("Received %s\n", displayBuffer); - THROW(APDU_RESPONSE_MODE_CHECK_FAILED); + return APDU_RESPONSE_MODE_CHECK_FAILED; } } else { strlcpy(strings.common.maxFee, displayBuffer, sizeof(strings.common.maxFee)); @@ -532,11 +553,12 @@ __attribute__((noinline)) static bool finalize_parsing_helper(void) { PRINTF("Nonce: %s\n", strings.common.nonce); // Prepare network field - get_network_as_string(strings.common.network_name, sizeof(strings.common.network_name)); - PRINTF("Network: %s\n", strings.common.network_name); - return true; + error = get_network_as_string(strings.common.network_name, sizeof(strings.common.network_name)); + if (error == APDU_RESPONSE_OK) { + PRINTF("Network: %s\n", strings.common.network_name); + } end: - return false; + return error; } void start_signature_flow(void) { @@ -549,11 +571,13 @@ void start_signature_flow(void) { } } -void finalizeParsing(void) { +uint16_t finalizeParsing(void) { + uint16_t sw = APDU_RESPONSE_UNKNOWN; g_use_standard_ui = true; - if (!finalize_parsing_helper()) { - return; + sw = finalize_parsing_helper(); + if (sw != APDU_RESPONSE_OK) { + return sw; } // If called from swap, the user has already validated a standard transaction // And we have already checked the fields of this transaction above @@ -567,4 +591,5 @@ void finalizeParsing(void) { start_signature_flow(); } } + return APDU_RESPONSE_OK; } diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 9ce31c036..74caf859c 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -82,6 +82,7 @@ unsigned int io_seproxyhal_touch_data_ok(void) { case USTREAM_SUSPENDED: break; case USTREAM_FINISHED: + err = finalizeParsing(); break; case USTREAM_PROCESSING: err = io_seproxyhal_send_status(APDU_RESPONSE_OK, 0, false, true); @@ -94,10 +95,6 @@ unsigned int io_seproxyhal_touch_data_ok(void) { err = io_seproxyhal_send_status(APDU_RESPONSE_INVALID_DATA, 0, true, true); } - if (txResult == USTREAM_FINISHED) { - finalizeParsing(); - } - return err; } From 08262c7f5fa839e537dd7ae199068c0e87e37fe5 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:43:16 +0200 Subject: [PATCH 042/102] Fix THROW in eip712 --- src_features/signMessageEIP712/path.c | 25 +++++++++++++------ src_features/signMessageEIP712/ui_logic.c | 3 ++- .../signMessageEIP712_common/common_712.c | 22 ++++++++-------- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index c403880ac..d949a7cba 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -164,12 +164,16 @@ static bool finalize_hash_depth(uint8_t *hash) { * * @param[in] hash pointer to given hash */ -static void feed_last_hash_depth(const uint8_t *const hash) { +static bool feed_last_hash_depth(const uint8_t *const hash) { const cx_sha3_t *hash_ctx; hash_ctx = get_last_hash_ctx(); // continue progressive hash with the array hash - CX_ASSERT(cx_hash_no_throw((cx_hash_t *) hash_ctx, 0, hash, KECCAK256_HASH_BYTESIZE, NULL, 0)); + if (cx_hash_no_throw((cx_hash_t *) hash_ctx, 0, hash, KECCAK256_HASH_BYTESIZE, NULL, 0) != + CX_OK) { + return false; + } + return true; } /** @@ -214,7 +218,9 @@ static bool path_depth_list_pop(void) { to_feed = finalize_hash_depth(hash); if (path_struct->depth_count > 0) { if (to_feed) { - feed_last_hash_depth(hash); + if (feed_last_hash_depth(hash) == false) { + return false; + } } } else { switch (path_struct->root_type) { @@ -275,7 +281,9 @@ static bool array_depth_list_pop(void) { } finalize_hash_depth(hash); // return value not checked on purpose - feed_last_hash_depth(hash); + if (feed_last_hash_depth(hash) == false) { + return false; + } path_struct->array_depth_count -= 1; return true; @@ -333,7 +341,9 @@ static bool path_update(bool skip_if_array, bool stop_at_array, bool do_typehash if (type_hash(typename, typename_len, hash) == false) { return false; } - feed_last_hash_depth(hash); + if (feed_last_hash_depth(hash) == false) { + return false; + } } // TODO: Find a better way to show inner structs in verbose mode when it might be @@ -378,8 +388,9 @@ bool path_set_root(const char *const struct_name, uint8_t name_length) { if (type_hash(struct_name, name_length, hash) == false) { return false; } - feed_last_hash_depth(hash); - // + if (feed_last_hash_depth(hash) == false) { + return false; + } // init depth, at 0 : empty path path_struct->depth_count = 0; diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 5d698b1a4..11d08172b 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -258,7 +258,8 @@ static bool ui_712_format_addr(const uint8_t *data, uint8_t length, bool first) strings.tmp.tmp, sizeof(strings.tmp.tmp), chainConfig->chainId)) { - THROW(APDU_RESPONSE_ERROR_NO_INFO); + apdu_response_code = APDU_RESPONSE_ERROR_NO_INFO; + return false; } return true; } diff --git a/src_features/signMessageEIP712_common/common_712.c b/src_features/signMessageEIP712_common/common_712.c index 75005861a..53d4388f7 100644 --- a/src_features/signMessageEIP712_common/common_712.c +++ b/src_features/signMessageEIP712_common/common_712.c @@ -36,18 +36,16 @@ unsigned int ui_712_approve_cb(void) { PRINTF("EIP712 Message hash 0x%.*h\n", 32, tmpCtx.messageSigningContext712.messageHash); unsigned int info = 0; - if (bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, - tmpCtx.messageSigningContext712.bip32.path, - tmpCtx.messageSigningContext712.bip32.length, - CX_RND_RFC6979 | CX_LAST, - CX_SHA256, - hash, - sizeof(hash), - G_io_apdu_buffer + 1, - G_io_apdu_buffer + 1 + 32, - &info) != CX_OK) { - THROW(APDU_RESPONSE_UNKNOWN); - } + CX_ASSERT(bip32_derive_ecdsa_sign_rs_hash_256(CX_CURVE_256K1, + tmpCtx.messageSigningContext712.bip32.path, + tmpCtx.messageSigningContext712.bip32.length, + CX_RND_RFC6979 | CX_LAST, + CX_SHA256, + hash, + sizeof(hash), + G_io_apdu_buffer + 1, + G_io_apdu_buffer + 1 + 32, + &info)); G_io_apdu_buffer[0] = 27; if (info & CX_ECCINFO_PARITY_ODD) { G_io_apdu_buffer[0]++; From dffa1748e986dabab1483403ee786831513de99d Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:43:59 +0200 Subject: [PATCH 043/102] Fix THROW in src_plugins --- src_features/setExternalPlugin/cmd_setExternalPlugin.c | 1 + src_features/setPlugin/cmd_setPlugin.c | 1 + src_plugins/erc20/erc20_plugin.c | 3 ++- src_plugins/eth2/eth2_plugin.c | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src_features/setExternalPlugin/cmd_setExternalPlugin.c b/src_features/setExternalPlugin/cmd_setExternalPlugin.c index 9a9993640..6ab3b3915 100644 --- a/src_features/setExternalPlugin/cmd_setExternalPlugin.c +++ b/src_features/setExternalPlugin/cmd_setExternalPlugin.c @@ -72,6 +72,7 @@ uint16_t handleSetExternalPlugin(const uint8_t *workBuffer, uint8_t dataLength) memset(dataContext.tokenContext.pluginName, 0, sizeof(dataContext.tokenContext.pluginName)); + CLOSE_TRY; return APDU_RESPONSE_PLUGIN_NOT_INSTALLED; } FINALLY { diff --git a/src_features/setPlugin/cmd_setPlugin.c b/src_features/setPlugin/cmd_setPlugin.c index 92ee5c5ff..91455b4ce 100644 --- a/src_features/setPlugin/cmd_setPlugin.c +++ b/src_features/setPlugin/cmd_setPlugin.c @@ -241,6 +241,7 @@ uint16_t handleSetPlugin(const uint8_t *workBuffer, uint8_t dataLength) { CATCH_OTHER(e) { PRINTF("%s external plugin is not present\n", tokenContext->pluginName); memset(tokenContext->pluginName, 0, sizeof(tokenContext->pluginName)); + CLOSE_TRY; return APDU_RESPONSE_PLUGIN_NOT_INSTALLED; } FINALLY { diff --git a/src_plugins/erc20/erc20_plugin.c b/src_plugins/erc20/erc20_plugin.c index 009336f61..2dd28f8d1 100644 --- a/src_plugins/erc20/erc20_plugin.c +++ b/src_plugins/erc20/erc20_plugin.c @@ -190,7 +190,8 @@ void erc20_plugin_call(int message, void *parameters) { context->ticker, msg->msg, 100)) { - THROW(EXCEPTION_OVERFLOW); + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; } } msg->result = ETH_PLUGIN_RESULT_OK; diff --git a/src_plugins/eth2/eth2_plugin.c b/src_plugins/eth2/eth2_plugin.c index 9c42e3134..7cc3269aa 100644 --- a/src_plugins/eth2/eth2_plugin.c +++ b/src_plugins/eth2/eth2_plugin.c @@ -207,7 +207,8 @@ void eth2_plugin_call(int message, void *parameters) { ticker, msg->msg, 100)) { - THROW(EXCEPTION_OVERFLOW); + msg->result = ETH_PLUGIN_RESULT_ERROR; + break; } msg->result = ETH_PLUGIN_RESULT_OK; } break; From d39ba754274df1c5267f7e4bff432ef878375506 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:45:02 +0200 Subject: [PATCH 044/102] Replace most LEDGER_ASSERT and CX_ASSERT --- src/ethUstream.c | 297 +++++++++++++++++++++++++++++++---------------- src/ethUstream.h | 4 +- src/uint256.c | 7 +- src/uint256.h | 2 +- 4 files changed, 205 insertions(+), 105 deletions(-) diff --git a/src/ethUstream.c b/src/ethUstream.c index 901be0914..6616efff7 100644 --- a/src/ethUstream.c +++ b/src/ethUstream.c @@ -25,25 +25,38 @@ #define MAX_INT256 32 #define MAX_ADDRESS 20 -static void assert_fields(txContext_t *context, const char *name, uint32_t length) { +static bool check_fields(txContext_t *context, const char *name, uint32_t length) { UNUSED(name); // Just for the case where DEBUG is not enabled - LEDGER_ASSERT((!context->currentFieldIsList), "Invalid type for %s\n", name); - if (length > 0) { - LEDGER_ASSERT((context->currentFieldLength <= length), "Invalid length for %s\n", name); + if (context->currentFieldIsList) { + PRINTF("Invalid type for %s\n", name); + return false; } + if ((length > 0) && (context->currentFieldLength > length)) { + PRINTF("Invalid length for %s\n", name); + return false; + } + return true; } -static void assert_empty_list(txContext_t *context, const char *name) { +static bool check_empty_list(txContext_t *context, const char *name) { UNUSED(name); // Just for the case where DEBUG is not enabled - LEDGER_ASSERT((context->currentFieldIsList), "Invalid type for %s\n", name); + if (!context->currentFieldIsList) { + PRINTF("Invalid type for %s\n", name); + return false; + } + return true; } -static void assert_cmd_length(txContext_t *context, const char *name, uint32_t length) { +static bool check_cmd_length(txContext_t *context, const char *name, uint32_t length) { UNUSED(name); // Just for the case where DEBUG is not enabled - LEDGER_ASSERT((context->commandLength >= length), "%s Underflow\n", name); + if (context->commandLength < length) { + PRINTF("%s Underflow\n", name); + return false; + } + return true; } -void initTx(txContext_t *context, +bool initTx(txContext_t *context, cx_sha3_t *sha3, txContent_t *content, ustreamProcess_t customProcessor, @@ -54,12 +67,17 @@ void initTx(txContext_t *context, context->customProcessor = customProcessor; context->extra = extra; context->currentField = RLP_NONE + 1; - CX_ASSERT(cx_keccak_init_no_throw(context->sha3, 256)); + if (cx_keccak_init_no_throw(context->sha3, 256) != CX_OK) { + return false; + } + return true; } -static uint8_t readTxByte(txContext_t *context) { +static bool readTxByte(txContext_t *context, uint8_t *txByte) { uint8_t data; - assert_cmd_length(context, "readTxByte", 1); + if (check_cmd_length(context, "readTxByte", 1) == false) { + return false; + } data = *context->workBuffer; context->workBuffer++; context->commandLength--; @@ -67,140 +85,209 @@ static uint8_t readTxByte(txContext_t *context) { context->currentFieldPos++; } if (!(context->processingField && context->fieldSingleByte)) { - CX_ASSERT(cx_hash_no_throw((cx_hash_t *) context->sha3, 0, &data, 1, NULL, 0)); + if (cx_hash_no_throw((cx_hash_t *) context->sha3, 0, &data, 1, NULL, 0) != CX_OK) { + return false; + } } - return data; + *txByte = data; + return true; } -void copyTxData(txContext_t *context, uint8_t *out, uint32_t length) { - assert_cmd_length(context, "copyTxData", length); +bool copyTxData(txContext_t *context, uint8_t *out, uint32_t length) { + if (check_cmd_length(context, "copyTxData", length) == false) { + return false; + } if (out != NULL) { memmove(out, context->workBuffer, length); } if (!(context->processingField && context->fieldSingleByte)) { - CX_ASSERT( - cx_hash_no_throw((cx_hash_t *) context->sha3, 0, context->workBuffer, length, NULL, 0)); + if (cx_hash_no_throw((cx_hash_t *) context->sha3, + 0, + context->workBuffer, + length, + NULL, + 0) != CX_OK) { + return false; + } } context->workBuffer += length; context->commandLength -= length; if (context->processingField) { context->currentFieldPos += length; } + return true; } -static void processContent(txContext_t *context) { +static bool processContent(txContext_t *context) { // Keep the full length for sanity checks, move to the next field - assert_empty_list(context, "RLP_CONTENT"); + if (check_empty_list(context, "RLP_CONTENT") == false) { + return false; + } + context->dataLength = context->currentFieldLength; context->currentField++; context->processingField = false; + return true; } -static void processAccessList(txContext_t *context) { - assert_empty_list(context, "RLP_ACCESS_LIST"); +static bool processAccessList(txContext_t *context) { + if (check_empty_list(context, "RLP_ACCESS_LIST") == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, NULL, copySize); + if (copyTxData(context, NULL, copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->currentField++; context->processingField = false; } + return true; } -static void processChainID(txContext_t *context) { - assert_fields(context, "RLP_CHAINID", MAX_INT256); +static bool processChainID(txContext_t *context) { + if (check_fields(context, "RLP_CHAINID", MAX_INT256) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->chainID.value, copySize); + if (copyTxData(context, context->content->chainID.value, copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->chainID.length = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } -static void processNonce(txContext_t *context) { - assert_fields(context, "RLP_NONCE", MAX_INT256); +static bool processNonce(txContext_t *context) { + if (check_fields(context, "RLP_NONCE", MAX_INT256) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->nonce.value, copySize); + if (copyTxData(context, context->content->nonce.value, copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->nonce.length = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } -static void processStartGas(txContext_t *context) { - assert_fields(context, "RLP_STARTGAS", MAX_INT256); +static bool processStartGas(txContext_t *context) { + if (check_fields(context, "RLP_STARTGAS", MAX_INT256) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->startgas.value + context->currentFieldPos, copySize); + if (copyTxData(context, + context->content->startgas.value + context->currentFieldPos, + copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->startgas.length = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } // Alias over `processStartGas()`. -static void processGasLimit(txContext_t *context) { - processStartGas(context); +static bool processGasLimit(txContext_t *context) { + return processStartGas(context); } -static void processGasprice(txContext_t *context) { - assert_fields(context, "RLP_GASPRICE", MAX_INT256); +static bool processGasprice(txContext_t *context) { + if (check_fields(context, "RLP_GASPRICE", MAX_INT256) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->gasprice.value + context->currentFieldPos, copySize); + if (copyTxData(context, + context->content->gasprice.value + context->currentFieldPos, + copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->gasprice.length = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } -static void processValue(txContext_t *context) { - assert_fields(context, "RLP_VALUE", MAX_INT256); +static bool processValue(txContext_t *context) { + if (check_fields(context, "RLP_VALUE", MAX_INT256) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->value.value + context->currentFieldPos, copySize); + if (copyTxData(context, + context->content->value.value + context->currentFieldPos, + copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->value.length = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } -static void processTo(txContext_t *context) { - assert_fields(context, "RLP_TO", MAX_ADDRESS); +static bool processTo(txContext_t *context) { + if (check_fields(context, "RLP_TO", MAX_ADDRESS) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, context->content->destination + context->currentFieldPos, copySize); + if (copyTxData(context, + context->content->destination + context->currentFieldPos, + copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->destinationLength = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } -static void processData(txContext_t *context) { +static bool processData(txContext_t *context) { PRINTF("PROCESS DATA\n"); - assert_fields(context, "RLP_DATA", 0); + if (check_fields(context, "RLP_DATA", 0) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); @@ -208,164 +295,179 @@ static void processData(txContext_t *context) { if (copySize == 1 && *context->workBuffer == 0x00) { context->content->dataPresent = false; } - copyTxData(context, NULL, copySize); + if (copyTxData(context, NULL, copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { PRINTF("incrementing field\n"); context->currentField++; context->processingField = false; } + return true; } -static void processAndDiscard(txContext_t *context) { - assert_fields(context, "Discarded field", 0); +static bool processAndDiscard(txContext_t *context) { + if (check_fields(context, "Discarded field", 0) == false) { + return false; + } + if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); - copyTxData(context, NULL, copySize); + if (copyTxData(context, NULL, copySize) == false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->currentField++; context->processingField = false; } + return true; } -static void processV(txContext_t *context) { - assert_fields(context, "RLP_V", sizeof(context->content->v)); +static bool processV(txContext_t *context) { + if (check_fields(context, "RLP_V", sizeof(context->content->v)) == false) { + return false; + } if (context->currentFieldPos < context->currentFieldLength) { uint32_t copySize = MIN(context->commandLength, context->currentFieldLength - context->currentFieldPos); // Make sure we do not copy more than the size of v. copySize = MIN(copySize, sizeof(context->content->v)); - copyTxData(context, context->content->v + context->currentFieldPos, copySize); + if (copyTxData(context, context->content->v + context->currentFieldPos, copySize) == + false) { + return false; + } } if (context->currentFieldPos == context->currentFieldLength) { context->content->vLength = context->currentFieldLength; context->currentField++; context->processingField = false; } + return true; } static bool processEIP1559Tx(txContext_t *context) { + bool ret = false; switch (context->currentField) { case EIP1559_RLP_CONTENT: { - processContent(context); + ret = processContent(context); break; } case EIP1559_RLP_CHAINID: { - processChainID(context); + ret = processChainID(context); break; } case EIP1559_RLP_NONCE: { - processNonce(context); + ret = processNonce(context); break; } case EIP1559_RLP_MAX_FEE_PER_GAS: { - processGasprice(context); + ret = processGasprice(context); break; } case EIP1559_RLP_GASLIMIT: { - processGasLimit(context); + ret = processGasLimit(context); break; } case EIP1559_RLP_TO: { - processTo(context); + ret = processTo(context); break; } case EIP1559_RLP_VALUE: { - processValue(context); + ret = processValue(context); break; } case EIP1559_RLP_DATA: { - processData(context); + ret = processData(context); break; } case EIP1559_RLP_ACCESS_LIST: { - processAccessList(context); + ret = processAccessList(context); break; } case EIP1559_RLP_MAX_PRIORITY_FEE_PER_GAS: - processAndDiscard(context); + ret = processAndDiscard(context); break; default: PRINTF("Invalid RLP decoder context\n"); - return true; } - return false; + return ret; } static bool processEIP2930Tx(txContext_t *context) { + bool ret = false; switch (context->currentField) { case EIP2930_RLP_CONTENT: - processContent(context); + ret = processContent(context); break; case EIP2930_RLP_CHAINID: - processChainID(context); + ret = processChainID(context); break; case EIP2930_RLP_NONCE: - processNonce(context); + ret = processNonce(context); break; case EIP2930_RLP_GASPRICE: - processGasprice(context); + ret = processGasprice(context); break; case EIP2930_RLP_GASLIMIT: - processGasLimit(context); + ret = processGasLimit(context); break; case EIP2930_RLP_TO: - processTo(context); + ret = processTo(context); break; case EIP2930_RLP_VALUE: - processValue(context); + ret = processValue(context); break; case EIP2930_RLP_DATA: - processData(context); + ret = processData(context); break; case EIP2930_RLP_ACCESS_LIST: - processAccessList(context); + ret = processAccessList(context); break; default: PRINTF("Invalid RLP decoder context\n"); - return true; } - return false; + return ret; } static bool processLegacyTx(txContext_t *context) { + bool ret = false; switch (context->currentField) { case LEGACY_RLP_CONTENT: - processContent(context); + ret = processContent(context); break; case LEGACY_RLP_NONCE: - processNonce(context); + ret = processNonce(context); break; case LEGACY_RLP_GASPRICE: - processGasprice(context); + ret = processGasprice(context); break; case LEGACY_RLP_STARTGAS: - processStartGas(context); + ret = processStartGas(context); break; case LEGACY_RLP_TO: - processTo(context); + ret = processTo(context); break; case LEGACY_RLP_VALUE: - processValue(context); + ret = processValue(context); break; case LEGACY_RLP_DATA: - processData(context); + ret = processData(context); break; case LEGACY_RLP_R: case LEGACY_RLP_S: - processAndDiscard(context); + ret = processAndDiscard(context); break; case LEGACY_RLP_V: - processV(context); + ret = processV(context); break; default: PRINTF("Invalid RLP decoder context\n"); - return true; } - return false; + return ret; } static parserStatus_e parseRLP(txContext_t *context) { @@ -374,7 +476,9 @@ static parserStatus_e parseRLP(txContext_t *context) { while (context->commandLength != 0) { bool valid; // Feed the RLP buffer until the length can be decoded - context->rlpBuffer[context->rlpBufferPos++] = readTxByte(context); + if (readTxByte(context, &context->rlpBuffer[context->rlpBufferPos++]) == false) { + return USTREAM_FAULT; + } if (rlpCanDecode(context->rlpBuffer, context->rlpBufferPos, &valid)) { // Can decode now, if valid if (!valid) { @@ -469,28 +573,21 @@ static parserStatus_e processTxInternal(txContext_t *context) { if (customStatus == CUSTOM_NOT_HANDLED) { PRINTF("Current field: %d\n", context->currentField); switch (context->txType) { - bool fault; case LEGACY: - fault = processLegacyTx(context); - if (fault) { + if (processLegacyTx(context) == false) { return USTREAM_FAULT; - } else { - break; } + break; case EIP2930: - fault = processEIP2930Tx(context); - if (fault) { + if (processEIP2930Tx(context) == false) { return USTREAM_FAULT; - } else { - break; } + break; case EIP1559: - fault = processEIP1559Tx(context); - if (fault) { + if (processEIP1559Tx(context) == false) { return USTREAM_FAULT; - } else { - break; } + break; default: PRINTF("Transaction type %d is not supported\n", context->txType); return USTREAM_FAULT; diff --git a/src/ethUstream.h b/src/ethUstream.h index 6ffae540b..3548af985 100644 --- a/src/ethUstream.h +++ b/src/ethUstream.h @@ -126,11 +126,11 @@ typedef struct txContext_t { uint8_t txType; } txContext_t; -void initTx(txContext_t *context, +bool initTx(txContext_t *context, cx_sha3_t *sha3, txContent_t *content, ustreamProcess_t customProcessor, void *extra); parserStatus_e processTx(txContext_t *context, const uint8_t *buffer, uint32_t length); parserStatus_e continueTx(txContext_t *context); -void copyTxData(txContext_t *context, uint8_t *out, uint32_t length); +bool copyTxData(txContext_t *context, uint8_t *out, uint32_t length); diff --git a/src/uint256.c b/src/uint256.c index 48abdc44c..2d1d6a320 100644 --- a/src/uint256.c +++ b/src/uint256.c @@ -164,7 +164,7 @@ void or256(const uint256_t *const number1, or128(&LOWER_P(number1), &LOWER_P(number2), &LOWER_P(target)); } -void mul256(const uint256_t *const number1, +bool mul256(const uint256_t *const number1, const uint256_t *const number2, uint256_t *const target) { uint8_t num1[INT256_LENGTH], num2[INT256_LENGTH], result[INT256_LENGTH * 2]; @@ -173,11 +173,14 @@ void mul256(const uint256_t *const number1, write_u64_be(num1 + i * sizeof(uint64_t), 0, number1->elements[i / 2].elements[i % 2]); write_u64_be(num2 + i * sizeof(uint64_t), 0, number2->elements[i / 2].elements[i % 2]); } - CX_ASSERT(cx_math_mult_no_throw(result, num1, num2, sizeof(num1))); + if (cx_math_mult_no_throw(result, num1, num2, sizeof(num1)) != CX_OK) { + return false; + } for (uint8_t i = 0; i < 4; i++) { target->elements[i / 2].elements[i % 2] = read_u64_be((result + 32 + i * sizeof(uint64_t)), 0); } + return true; } void divmod256(const uint256_t *const l, diff --git a/src/uint256.h b/src/uint256.h index 4addf7f78..6e2a1c614 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -45,7 +45,7 @@ void sub256(const uint256_t *const number1, const uint256_t *const number2, uint256_t *const target); void or256(const uint256_t *const number1, const uint256_t *const number2, uint256_t *const target); -void mul256(const uint256_t *const number1, +bool mul256(const uint256_t *const number1, const uint256_t *const number2, uint256_t *const target); void divmod256(const uint256_t *const l, From 24633f20218c2e698d4f03804858a9cc1493288f Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 14:45:28 +0200 Subject: [PATCH 045/102] Finalize cleanup main.c --- src/handle_swap_sign_transaction.c | 7 +- src/main.c | 126 +++++++++++++---------------- src/shared_context.h | 1 + 3 files changed, 60 insertions(+), 74 deletions(-) diff --git a/src/handle_swap_sign_transaction.c b/src/handle_swap_sign_transaction.c index d4d362a40..7ac6d6f36 100644 --- a/src/handle_swap_sign_transaction.c +++ b/src/handle_swap_sign_transaction.c @@ -141,12 +141,7 @@ void __attribute__((noreturn)) handle_swap_sign_transaction(const chain_config_t common_app_init(); - if (N_storage.initialized != 0x01) { - internalStorage_t storage; - explicit_bzero(&storage, sizeof(storage)); - storage.initialized = true; - nvm_write((void*) &N_storage, (void*) &storage, sizeof(internalStorage_t)); - } + storage_init(); #ifdef HAVE_NBGL nbgl_useCaseSpinner("Signing"); diff --git a/src/main.c b/src/main.c index 29ad1df7e..ad819431a 100644 --- a/src/main.c +++ b/src/main.c @@ -20,6 +20,7 @@ #include "common_ui.h" #include "os_io_seproxyhal.h" +#include "io.h" #include "parser.h" #include "glyphs.h" @@ -239,6 +240,7 @@ void app_main(void) { uint32_t tx = 0; uint32_t flags = 0; uint16_t sw = APDU_NO_RESPONSE; + bool quit_now = false; command_t cmd = {0}; // DESIGN NOTE: the bootloader ignores the way APDU are fetched. The only @@ -250,75 +252,68 @@ void app_main(void) { for (;;) { BEGIN_TRY { TRY { - rx = tx; - tx = 0; // ensure no race in catch_other if io_exchange throws - // an error - rx = io_exchange(CHANNEL_APDU | flags, rx); - flags = 0; + rx = io_exchange(CHANNEL_APDU | flags, tx); if (apdu_parser(&cmd, G_io_apdu_buffer, rx) == false) { - THROW(APDU_RESPONSE_WRONG_DATA_LENGTH); + PRINTF("=> BAD LENGTH: %d\n", rx); + sw = APDU_RESPONSE_WRONG_DATA_LENGTH; + } else { + PRINTF("=> CLA=%02X | INS=%02X | P1=%02X | P2=%02X | Lc=%02X\n", + cmd.cla, + cmd.ins, + cmd.p1, + cmd.p2, + cmd.lc); + + tx = 0; + flags = 0; + sw = handleApdu(&cmd, &flags, &tx); } - PRINTF("=> CLA=%02X | INS=%02X | P1=%02X | P2=%02X | Lc=%02X\n", - cmd.cla, - cmd.ins, - cmd.p1, - cmd.p2, - cmd.lc); - - sw = handleApdu(&cmd, &flags, &tx); - if (sw == APDU_NO_RESPONSE) { - CLOSE_TRY; - continue; - } - THROW(sw); } CATCH(EXCEPTION_IO_RESET) { // reset IO and UX before continuing CLOSE_TRY; + // app_exit(); return; } CATCH_OTHER(e) { - bool quit_now = G_called_from_swap && G_swap_response_ready; - switch (e & 0xF000) { - case 0x6000: - // Wipe the transaction context and report the exception - sw = e; - reset_app_context(); - break; - case APDU_RESPONSE_OK: - // All is well - sw = e; - break; - default: - // Internal error - sw = APDU_RESPONSE_INTERNAL_ERROR | (e & 0x7FF); - reset_app_context(); - break; - } - if (e != APDU_RESPONSE_OK) { - flags &= ~IO_ASYNCH_REPLY; - } - // Unexpected exception => report - U2BE_ENCODE(G_io_apdu_buffer, tx, sw); - tx += 2; - - // If we are in swap mode and have validated a TX, we send it and immediately quit - if (quit_now) { - if (io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx) == 0) { - // In case of success, the apdu is sent immediately and eth exits - // Reaching this code means we encountered an error - finalize_exchange_sign_transaction(false); - } else { - PRINTF("Unrecoverable\n"); - app_exit(); - } - } + PRINTF("=> CATCH_OTHER: 0x%x\n", e); + // Just report the exception + sw = e; } FINALLY { } } END_TRY; + if (sw == APDU_NO_RESPONSE) { + // Nothing to report + continue; + } + quit_now = G_called_from_swap && G_swap_response_ready; + if ((sw != APDU_RESPONSE_OK) && (sw != APDU_RESPONSE_CMD_CODE_NOT_SUPPORTED)) { + if ((sw & 0xF000) != 0x6000) { + // Internal error + sw = APDU_RESPONSE_INTERNAL_ERROR | (sw & 0x7FF); + } + reset_app_context(); + flags &= ~IO_ASYNCH_REPLY; + } + + // Report Status Word + U2BE_ENCODE(G_io_apdu_buffer, tx, sw); + tx += 2; + + // If we are in swap mode and have validated a TX, we send it and immediately quit + if (quit_now) { + if (io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, tx) == 0) { + // In case of success, the apdu is sent immediately and eth exits + // Reaching this code means we encountered an error + finalize_exchange_sign_transaction(false); + } else { + PRINTF("Unrecoverable\n"); + app_exit(); + } + } } } @@ -328,7 +323,7 @@ static void init_coin_config(chain_config_t *coin_config) { coin_config->chainId = CHAIN_ID; } -static void storage_init(void) { +void storage_init(void) { internalStorage_t storage; if (N_storage.initialized) { return; @@ -339,7 +334,7 @@ static void storage_init(void) { nvm_write((void *) &N_storage, (void *) &storage, sizeof(internalStorage_t)); } -__attribute__((noreturn)) void coin_main(eth_libargs_t *args) { +void coin_main(eth_libargs_t *args) { chain_config_t config; if (args) { if (args->chain_config != NULL) { @@ -361,23 +356,18 @@ __attribute__((noreturn)) void coin_main(eth_libargs_t *args) { } reset_app_context(); + storage_init(); + common_app_init(); - for (;;) { - common_app_init(); - - storage_init(); - - ui_idle(); + io_init(); + ui_idle(); #ifdef HAVE_DOMAIN_NAME - // to prevent it from having a fixed value at boot - roll_challenge(); + // to prevent it from having a fixed value at boot + roll_challenge(); #endif // HAVE_DOMAIN_NAME - app_main(); - } - // Should not return - os_sched_exit(-1); + app_main(); } __attribute__((noreturn)) void library_main(eth_libargs_t *args) { diff --git a/src/shared_context.h b/src/shared_context.h index ebf2a5fca..323ffd177 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -203,5 +203,6 @@ extern uint32_t eth2WithdrawalIndex; void reset_app_context(void); const uint8_t *parseBip32(const uint8_t *dataBuffer, uint8_t *dataLength, bip32_path_t *bip32); +void storage_init(void); #endif // _SHARED_CONTEXT_H_ From 154eb42cff1e3574475f3b9f4206e5bdfd18e1c9 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 14 Aug 2024 18:07:04 +0200 Subject: [PATCH 046/102] Fix B2CA-1583 - App blocked after unplug usb when rejecting a transaction --- src/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index ad819431a..e61814589 100644 --- a/src/main.c +++ b/src/main.c @@ -273,8 +273,7 @@ void app_main(void) { CATCH(EXCEPTION_IO_RESET) { // reset IO and UX before continuing CLOSE_TRY; - // app_exit(); - return; + app_exit(); } CATCH_OTHER(e) { PRINTF("=> CATCH_OTHER: 0x%x\n", e); From 2af83159194f54ee764b3cd9cf624a5299c25c9f Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 16 Aug 2024 17:48:31 +0200 Subject: [PATCH 047/102] Fix missing destination directory in tool 'copy_clones.sh' --- tools/copy_clones.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/copy_clones.sh b/tools/copy_clones.sh index 6fcf062cd..71c7d043a 100755 --- a/tools/copy_clones.sh +++ b/tools/copy_clones.sh @@ -5,6 +5,7 @@ DEVICES=(nanos nanos2 nanox stax flex) for dev in "${DEVICES[@]}"; do elf_file="build/${dev}/bin/app.elf" if [[ -f ${elf_file} ]]; then + mkdir -p "tests/ragger/.test_dependencies/clone/build/${dev}/bin/" cp "${elf_file}" "tests/ragger/.test_dependencies/clone/build/${dev}/bin/" else echo "Ignoring unknown file/dev: ${elf_file}" From 528e768e9215ab16995a2748b9e3010a47106fc4 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Aug 2024 08:57:43 +0200 Subject: [PATCH 048/102] Update ethereum-plugin-sdk --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 0afd2a969..3ac55f35b 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 0afd2a969eb23e8a508560e0e308dc51fb9219e0 +Subproject commit 3ac55f35b804c9197f50bcb206d45dc735c098ab From b942e59c95b5a35e2bc557637e2fb5fc451a8907 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Fri, 30 Aug 2024 09:15:08 +0200 Subject: [PATCH 049/102] Remove useless duplicates between network.c and chain makefile configs --- makefile_conf/chain/apothemnetwork.mk | 4 ---- makefile_conf/chain/astar.mk | 2 +- makefile_conf/chain/bsc.mk | 4 ---- makefile_conf/chain/bttc.mk | 4 ---- makefile_conf/chain/conflux_espace.mk | 4 ---- makefile_conf/chain/cube.mk | 4 ---- makefile_conf/chain/energywebchain.mk | 2 +- makefile_conf/chain/ethereum_classic.mk | 2 +- makefile_conf/chain/kardiachain.mk | 4 ---- makefile_conf/chain/meter.mk | 4 ---- makefile_conf/chain/moonbeam.mk | 2 +- makefile_conf/chain/moonriver.mk | 2 +- makefile_conf/chain/multivac.mk | 4 ---- makefile_conf/chain/oasys.mk | 2 +- makefile_conf/chain/okc.mk | 4 ---- makefile_conf/chain/poa.mk | 4 ---- makefile_conf/chain/polygon.mk | 4 ---- makefile_conf/chain/shiden.mk | 2 +- makefile_conf/chain/shyft.mk | 4 ---- makefile_conf/chain/songbird.mk | 2 +- makefile_conf/chain/tecracoin.mk | 2 +- makefile_conf/chain/tecratestnet.mk | 2 +- makefile_conf/chain/volta.mk | 2 +- makefile_conf/chain/xdcnetwork.mk | 2 +- 24 files changed, 12 insertions(+), 60 deletions(-) delete mode 100644 makefile_conf/chain/apothemnetwork.mk delete mode 100644 makefile_conf/chain/bsc.mk delete mode 100644 makefile_conf/chain/bttc.mk delete mode 100644 makefile_conf/chain/conflux_espace.mk delete mode 100644 makefile_conf/chain/cube.mk delete mode 100644 makefile_conf/chain/kardiachain.mk delete mode 100644 makefile_conf/chain/meter.mk delete mode 100644 makefile_conf/chain/multivac.mk delete mode 100644 makefile_conf/chain/okc.mk delete mode 100644 makefile_conf/chain/poa.mk delete mode 100644 makefile_conf/chain/polygon.mk delete mode 100644 makefile_conf/chain/shyft.mk diff --git a/makefile_conf/chain/apothemnetwork.mk b/makefile_conf/chain/apothemnetwork.mk deleted file mode 100644 index 34464823d..000000000 --- a/makefile_conf/chain/apothemnetwork.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/550'" -TICKER = "TXDC" -CHAIN_ID = 51 -APPNAME = "ApothemNetwork" diff --git a/makefile_conf/chain/astar.mk b/makefile_conf/chain/astar.mk index e1523260c..cfafbebf2 100644 --- a/makefile_conf/chain/astar.mk +++ b/makefile_conf/chain/astar.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/810'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/810'" TICKER = "ASTR" CHAIN_ID = 592 APPNAME = "Astar Polkadot EVM" diff --git a/makefile_conf/chain/bsc.mk b/makefile_conf/chain/bsc.mk deleted file mode 100644 index 3a478411b..000000000 --- a/makefile_conf/chain/bsc.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "BNB" -CHAIN_ID = 56 -APPNAME = "Binance Smart Chain" diff --git a/makefile_conf/chain/bttc.mk b/makefile_conf/chain/bttc.mk deleted file mode 100644 index fdb1781fb..000000000 --- a/makefile_conf/chain/bttc.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "BTT" -CHAIN_ID = 199 -APPNAME = "BTTC" diff --git a/makefile_conf/chain/conflux_espace.mk b/makefile_conf/chain/conflux_espace.mk deleted file mode 100644 index 2dd6a4b7f..000000000 --- a/makefile_conf/chain/conflux_espace.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "CFX" -CHAIN_ID = 1030 -APPNAME = "Conflux eSpace" diff --git a/makefile_conf/chain/cube.mk b/makefile_conf/chain/cube.mk deleted file mode 100644 index 72b90bd38..000000000 --- a/makefile_conf/chain/cube.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "CUBE" -CHAIN_ID = 1818 -APPNAME = "Cube" diff --git a/makefile_conf/chain/energywebchain.mk b/makefile_conf/chain/energywebchain.mk index 6dbf94fcc..c34c8134c 100644 --- a/makefile_conf/chain/energywebchain.mk +++ b/makefile_conf/chain/energywebchain.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/246'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/246'" TICKER = "EWT" CHAIN_ID = 246 APPNAME = "EnergyWebChain" diff --git a/makefile_conf/chain/ethereum_classic.mk b/makefile_conf/chain/ethereum_classic.mk index 1aea2af95..8c49bc70f 100644 --- a/makefile_conf/chain/ethereum_classic.mk +++ b/makefile_conf/chain/ethereum_classic.mk @@ -1,5 +1,5 @@ # Also allows ETC to access the ETH derivation path to recover forked assets -PATH_APP_LOAD_PARAMS += "44'/61'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/61'" TICKER = "ETC" CHAIN_ID = 61 APPNAME = "Ethereum Classic" diff --git a/makefile_conf/chain/kardiachain.mk b/makefile_conf/chain/kardiachain.mk deleted file mode 100644 index 5d73e4500..000000000 --- a/makefile_conf/chain/kardiachain.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "KAI" -CHAIN_ID = 24 -APPNAME = "KardiaChain" diff --git a/makefile_conf/chain/meter.mk b/makefile_conf/chain/meter.mk deleted file mode 100644 index 2089edcf5..000000000 --- a/makefile_conf/chain/meter.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "MTR" -CHAIN_ID = 82 -APPNAME = "Meter" diff --git a/makefile_conf/chain/moonbeam.mk b/makefile_conf/chain/moonbeam.mk index edf4c3f50..4420f3f54 100644 --- a/makefile_conf/chain/moonbeam.mk +++ b/makefile_conf/chain/moonbeam.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" "44'/1284'" +PATH_APP_LOAD_PARAMS += "44'/1284'" TICKER = "GLMR" CHAIN_ID = 1284 APPNAME = "Moonbeam" diff --git a/makefile_conf/chain/moonriver.mk b/makefile_conf/chain/moonriver.mk index a777fe02e..d012dab7b 100644 --- a/makefile_conf/chain/moonriver.mk +++ b/makefile_conf/chain/moonriver.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" "44'/1285'" +PATH_APP_LOAD_PARAMS += "44'/1285'" TICKER = "MOVR" CHAIN_ID = 1285 APPNAME = "Moonriver" diff --git a/makefile_conf/chain/multivac.mk b/makefile_conf/chain/multivac.mk deleted file mode 100644 index 1fe26f946..000000000 --- a/makefile_conf/chain/multivac.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "MTV" -CHAIN_ID = 62621 -APPNAME = "MultiVAC" diff --git a/makefile_conf/chain/oasys.mk b/makefile_conf/chain/oasys.mk index b75afc985..2342767c8 100644 --- a/makefile_conf/chain/oasys.mk +++ b/makefile_conf/chain/oasys.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/685'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/685'" TICKER = "OAS" CHAIN_ID = 248 APPNAME = "Oasys" diff --git a/makefile_conf/chain/okc.mk b/makefile_conf/chain/okc.mk deleted file mode 100644 index 13e0f50a7..000000000 --- a/makefile_conf/chain/okc.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "OKT" -CHAIN_ID = 66 -APPNAME = "OKXChain" diff --git a/makefile_conf/chain/poa.mk b/makefile_conf/chain/poa.mk deleted file mode 100644 index 5590fc9d9..000000000 --- a/makefile_conf/chain/poa.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "POA" -CHAIN_ID = 99 -APPNAME = "POA" diff --git a/makefile_conf/chain/polygon.mk b/makefile_conf/chain/polygon.mk deleted file mode 100644 index 71b8a03ff..000000000 --- a/makefile_conf/chain/polygon.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "MATIC" -CHAIN_ID = 137 -APPNAME = "Polygon" diff --git a/makefile_conf/chain/shiden.mk b/makefile_conf/chain/shiden.mk index 74bf66abd..8cbf11d00 100644 --- a/makefile_conf/chain/shiden.mk +++ b/makefile_conf/chain/shiden.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/809'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/809'" TICKER = "SDN" CHAIN_ID = 336 APPNAME = "Shiden EVM" diff --git a/makefile_conf/chain/shyft.mk b/makefile_conf/chain/shyft.mk deleted file mode 100644 index ae9899470..000000000 --- a/makefile_conf/chain/shyft.mk +++ /dev/null @@ -1,4 +0,0 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" -TICKER = "SHFT" -CHAIN_ID = 7341 -APPNAME = "Shyft" diff --git a/makefile_conf/chain/songbird.mk b/makefile_conf/chain/songbird.mk index 7dc4b6f5f..157cfa2f9 100644 --- a/makefile_conf/chain/songbird.mk +++ b/makefile_conf/chain/songbird.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/554'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/554'" TICKER = "SGB" CHAIN_ID = 19 APPNAME = "Songbird" diff --git a/makefile_conf/chain/tecracoin.mk b/makefile_conf/chain/tecracoin.mk index fc34beb0c..23a87d88c 100644 --- a/makefile_conf/chain/tecracoin.mk +++ b/makefile_conf/chain/tecracoin.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/554'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/554'" TICKER = "TCR" CHAIN_ID = 20531812 APPNAME = "TecraCoin" diff --git a/makefile_conf/chain/tecratestnet.mk b/makefile_conf/chain/tecratestnet.mk index b778ca1ba..8135f4265 100644 --- a/makefile_conf/chain/tecratestnet.mk +++ b/makefile_conf/chain/tecratestnet.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/554'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/554'" TICKER = "TCR" CHAIN_ID = 20531811 APPNAME = "TecraTestnet" diff --git a/makefile_conf/chain/volta.mk b/makefile_conf/chain/volta.mk index 1d3f51a59..136c5de02 100644 --- a/makefile_conf/chain/volta.mk +++ b/makefile_conf/chain/volta.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/73799'" "44'/60'" +PATH_APP_LOAD_PARAMS += "44'/73799'" TICKER = "VOLTA" CHAIN_ID = 73799 APPNAME = "Volta" diff --git a/makefile_conf/chain/xdcnetwork.mk b/makefile_conf/chain/xdcnetwork.mk index 9a553969c..0de2ce325 100644 --- a/makefile_conf/chain/xdcnetwork.mk +++ b/makefile_conf/chain/xdcnetwork.mk @@ -1,4 +1,4 @@ -PATH_APP_LOAD_PARAMS += "44'/60'" "44'/550'" +PATH_APP_LOAD_PARAMS += "44'/550'" TICKER = "XDC" CHAIN_ID = 50 APPNAME = "XDC Network" From bf6236a62ccb19977af8c974656aea2fb83cf1e0 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 29 Aug 2024 19:19:08 +0200 Subject: [PATCH 050/102] Fix Apothem ticker name --- src/network.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network.c b/src/network.c index 660e58e24..ea2fd974d 100644 --- a/src/network.c +++ b/src/network.c @@ -29,7 +29,7 @@ static const network_info_t NETWORK_MAPPING[] = { {.chain_id = 40, .name = "Telos EVM Mainnet", .ticker = "TLOS"}, {.chain_id = 42, .name = "LUKSO", .ticker = "LYX"}, {.chain_id = 50, .name = "XDC", .ticker = "XDC"}, - {.chain_id = 51, .name = "Apothemnetwork", .ticker = "XDC"}, + {.chain_id = 51, .name = "Apothemnetwork", .ticker = "TXDC"}, {.chain_id = 56, .name = "BSC", .ticker = "BNB"}, {.chain_id = 57, .name = "Syscoin", .ticker = "SYS"}, {.chain_id = 61, .name = "Ethereum Classic", .ticker = "ETC"}, From 142d6e083c169800e4a72946da4080552d8f7d42 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 2 Sep 2024 14:51:37 +0200 Subject: [PATCH 051/102] Improved APDU debug print in main loop --- src/main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.c b/src/main.c index e61814589..95cda3e08 100644 --- a/src/main.c +++ b/src/main.c @@ -258,12 +258,14 @@ void app_main(void) { PRINTF("=> BAD LENGTH: %d\n", rx); sw = APDU_RESPONSE_WRONG_DATA_LENGTH; } else { - PRINTF("=> CLA=%02X | INS=%02X | P1=%02X | P2=%02X | Lc=%02X\n", + PRINTF("=> CLA=%02x, INS=%02x, P1=%02x, P2=%02x, LC=%02x, CDATA=%.*h\n", cmd.cla, cmd.ins, cmd.p1, cmd.p2, - cmd.lc); + cmd.lc, + cmd.lc, + cmd.data); tx = 0; flags = 0; From b984ed5ca7e28903fb862009139134e77d2c07a4 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 2 Sep 2024 14:52:08 +0200 Subject: [PATCH 052/102] Added missing error-handling to EIP-712 get_structn function calls --- src_features/signMessageEIP712/path.c | 4 +++- src_features/signMessageEIP712/type_hash.c | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index d949a7cba..bf7d95a0d 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -370,7 +370,9 @@ bool path_set_root(const char *const struct_name, uint8_t name_length) { return false; } - path_struct->root_struct = get_structn(struct_name, name_length); + if ((path_struct->root_struct = get_structn(struct_name, name_length)) == NULL) { + return false; + } if (path_struct->root_struct == NULL) { PRINTF("Struct name not found ("); diff --git a/src_features/signMessageEIP712/type_hash.c b/src_features/signMessageEIP712/type_hash.c index f37e20820..8318abcfd 100644 --- a/src_features/signMessageEIP712/type_hash.c +++ b/src_features/signMessageEIP712/type_hash.c @@ -129,7 +129,12 @@ static const void **get_struct_dependencies(uint8_t *const deps_count, // get struct name arg_structname = get_struct_field_typename(field_ptr, &arg_structname_length); // from its name, get the pointer to its definition - arg_struct_ptr = get_structn(arg_structname, arg_structname_length); + if ((arg_struct_ptr = get_structn(arg_structname, arg_structname_length)) == NULL) { + PRINTF("Error: could not find EIP-712 dependency struct \""); + for (int i = 0; i < arg_structname_length; ++i) PRINTF("%c", arg_structname[i]); + PRINTF("\" during type_hash\n"); + return NULL; + } // check if it is not already present in the dependencies array for (dep_idx = 0; dep_idx < *deps_count; ++dep_idx) { @@ -167,12 +172,18 @@ static const void **get_struct_dependencies(uint8_t *const deps_count, * @return whether the type_hash was successful or not */ bool type_hash(const char *const struct_name, const uint8_t struct_name_length, uint8_t *hash_buf) { - const void *const struct_ptr = get_structn(struct_name, struct_name_length); + const void *struct_ptr; uint8_t deps_count = 0; const void **deps; void *mem_loc_bak = mem_alloc(0); cx_err_t error = CX_INTERNAL_ERROR; + if ((struct_ptr = get_structn(struct_name, struct_name_length)) == NULL) { + PRINTF("Error: could not find EIP-712 struct \""); + for (int i = 0; i < struct_name_length; ++i) PRINTF("%c", struct_name[i]); + PRINTF("\" for type_hash\n"); + return false; + } CX_CHECK(cx_keccak_init_no_throw(&global_sha3, 256)); deps = get_struct_dependencies(&deps_count, NULL, struct_ptr); if ((deps_count > 0) && (deps == NULL)) { From c08d53c38ccd2f2abf25791f8c0b7440bf3a4e02 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Wed, 4 Sep 2024 14:58:43 +0200 Subject: [PATCH 053/102] Remove useless dashboard icons --- icons/flex_app_chain_1030.gif | Bin 456 -> 0 bytes icons/flex_app_chain_137.gif | Bin 413 -> 0 bytes icons/flex_app_chain_1818.gif | Bin 525 -> 0 bytes icons/flex_app_chain_199.gif | Bin 610 -> 0 bytes icons/flex_app_chain_24.gif | Bin 544 -> 0 bytes icons/flex_app_chain_51.gif | Bin 493 -> 0 bytes icons/flex_app_chain_56.gif | Bin 539 -> 0 bytes icons/flex_app_chain_62621.gif | Bin 506 -> 0 bytes icons/flex_app_chain_66.gif | Bin 239 -> 0 bytes icons/flex_app_chain_7341.gif | Bin 521 -> 0 bytes icons/flex_app_chain_82.gif | Bin 500 -> 0 bytes icons/flex_app_chain_99.gif | Bin 215 -> 0 bytes icons/nanos_app_chain_1030.gif | Bin 1135 -> 0 bytes icons/nanos_app_chain_137.gif | Bin 73 -> 0 bytes icons/nanos_app_chain_1818.gif | Bin 73 -> 0 bytes icons/nanos_app_chain_199.gif | Bin 76 -> 0 bytes icons/nanos_app_chain_24.gif | Bin 3174 -> 0 bytes icons/nanos_app_chain_51.gif | Bin 67 -> 0 bytes icons/nanos_app_chain_56.gif | Bin 71 -> 0 bytes icons/nanos_app_chain_62621.gif | Bin 75 -> 0 bytes icons/nanos_app_chain_66.gif | Bin 74 -> 0 bytes icons/nanos_app_chain_7341.gif | Bin 73 -> 0 bytes icons/nanos_app_chain_82.gif | Bin 84 -> 0 bytes icons/nanos_app_chain_99.gif | Bin 1128 -> 0 bytes icons/nanox_app_chain_1030.gif | Bin 1122 -> 0 bytes icons/nanox_app_chain_137.gif | Bin 69 -> 0 bytes icons/nanox_app_chain_1818.gif | Bin 70 -> 0 bytes icons/nanox_app_chain_199.gif | Bin 71 -> 0 bytes icons/nanox_app_chain_24.gif | Bin 3172 -> 0 bytes icons/nanox_app_chain_51.gif | Bin 65 -> 0 bytes icons/nanox_app_chain_56.gif | Bin 68 -> 0 bytes icons/nanox_app_chain_62621.gif | Bin 74 -> 0 bytes icons/nanox_app_chain_66.gif | Bin 71 -> 0 bytes icons/nanox_app_chain_7341.gif | Bin 76 -> 0 bytes icons/nanox_app_chain_82.gif | Bin 79 -> 0 bytes icons/nanox_app_chain_99.gif | Bin 1119 -> 0 bytes icons/stax_app_chain_1030.gif | Bin 347 -> 0 bytes icons/stax_app_chain_137.gif | Bin 362 -> 0 bytes icons/stax_app_chain_1818.gif | Bin 438 -> 0 bytes icons/stax_app_chain_199.gif | Bin 471 -> 0 bytes icons/stax_app_chain_24.gif | Bin 153 -> 0 bytes icons/stax_app_chain_51.gif | Bin 410 -> 0 bytes icons/stax_app_chain_56.gif | Bin 473 -> 0 bytes icons/stax_app_chain_62621.gif | Bin 161 -> 0 bytes icons/stax_app_chain_66.gif | Bin 131 -> 0 bytes icons/stax_app_chain_7341.gif | Bin 150 -> 0 bytes icons/stax_app_chain_82.gif | Bin 148 -> 0 bytes icons/stax_app_chain_99.gif | Bin 147 -> 0 bytes 48 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 icons/flex_app_chain_1030.gif delete mode 100644 icons/flex_app_chain_137.gif delete mode 100644 icons/flex_app_chain_1818.gif delete mode 100644 icons/flex_app_chain_199.gif delete mode 100644 icons/flex_app_chain_24.gif delete mode 100644 icons/flex_app_chain_51.gif delete mode 100644 icons/flex_app_chain_56.gif delete mode 100644 icons/flex_app_chain_62621.gif delete mode 100644 icons/flex_app_chain_66.gif delete mode 100644 icons/flex_app_chain_7341.gif delete mode 100644 icons/flex_app_chain_82.gif delete mode 100644 icons/flex_app_chain_99.gif delete mode 100644 icons/nanos_app_chain_1030.gif delete mode 100644 icons/nanos_app_chain_137.gif delete mode 100644 icons/nanos_app_chain_1818.gif delete mode 100644 icons/nanos_app_chain_199.gif delete mode 100644 icons/nanos_app_chain_24.gif delete mode 100644 icons/nanos_app_chain_51.gif delete mode 100644 icons/nanos_app_chain_56.gif delete mode 100644 icons/nanos_app_chain_62621.gif delete mode 100644 icons/nanos_app_chain_66.gif delete mode 100644 icons/nanos_app_chain_7341.gif delete mode 100644 icons/nanos_app_chain_82.gif delete mode 100644 icons/nanos_app_chain_99.gif delete mode 100644 icons/nanox_app_chain_1030.gif delete mode 100644 icons/nanox_app_chain_137.gif delete mode 100644 icons/nanox_app_chain_1818.gif delete mode 100644 icons/nanox_app_chain_199.gif delete mode 100644 icons/nanox_app_chain_24.gif delete mode 100644 icons/nanox_app_chain_51.gif delete mode 100644 icons/nanox_app_chain_56.gif delete mode 100644 icons/nanox_app_chain_62621.gif delete mode 100644 icons/nanox_app_chain_66.gif delete mode 100644 icons/nanox_app_chain_7341.gif delete mode 100644 icons/nanox_app_chain_82.gif delete mode 100644 icons/nanox_app_chain_99.gif delete mode 100644 icons/stax_app_chain_1030.gif delete mode 100644 icons/stax_app_chain_137.gif delete mode 100644 icons/stax_app_chain_1818.gif delete mode 100644 icons/stax_app_chain_199.gif delete mode 100644 icons/stax_app_chain_24.gif delete mode 100644 icons/stax_app_chain_51.gif delete mode 100644 icons/stax_app_chain_56.gif delete mode 100644 icons/stax_app_chain_62621.gif delete mode 100644 icons/stax_app_chain_66.gif delete mode 100644 icons/stax_app_chain_7341.gif delete mode 100644 icons/stax_app_chain_82.gif delete mode 100644 icons/stax_app_chain_99.gif diff --git a/icons/flex_app_chain_1030.gif b/icons/flex_app_chain_1030.gif deleted file mode 100644 index 6a4039d3f9dd466fcc1e6309159e2109f9f7756d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 456 zcmZ?wbhEHb)L_tH_{_rq1Z-?6~F(sT7* zi`O%IBBOWco)TneTM>6sk)h$k+Al>1cJN$U`1jF<2FHV!b$AXenGmr?C+g&ib)K4Y z8(NtR6q3!X_a`V$ypU(VdzQB4v?-IDoSU9=ALF{W+|oQob~{t9Xud^Et*v=Zu}-yt zk+N=LOodcSO`KRl&I}$-j?5~rb}1WIipE#<*|h0fwd>8<^SW@GNAwEMmTL2a5yKy{S>xm#`h? zIePKEMAZ|S?J8d!F6n$avEoJh;n__ld7GXHGoGDqo3%nLOM#>LfHNl-SBvGcMUr9# z5t4@w>{#L0*ciORU@GSUqZ5oRNG0o5}$~(#A&Nr3QiMx~K v!>0^UmB5%L>scn9G7J1xADZz{#QBm%#BL?qlO?MnQskb@jn!6UVz34Pw(PEv diff --git a/icons/flex_app_chain_137.gif b/icons/flex_app_chain_137.gif deleted file mode 100644 index b49f73b46088423a861a198a6c646db54db307cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 413 zcmV;O0b>3~Nk%w1VJHA70P+U_0000G5D+9JBv)5gtE;Qu-{0@=@Bjb*A^8LV00000 zA^!_WZDD6+O<`wgV`~m)VQp<;JuogbH8eFeH2^FC0000e04M+e1O9lr-2TkSDWScM zQp{u2RmT+rFcb$EicmoWKr9TZ!9ql=13^!Kw?;v*E5=TnV5(FM5RJbT>tz%W4ut2< zYP%VlfGeW}(+Rq)!Y)92kcw!LS|@%;a=N&~fMU#JeRh000eTDsB~}Z60D*f3R56AJ zZ#yTHJB}HHc@8-}MFW^Rnjd&PXna~mqKu^r5{zAyp=P6i7I$TZSY?(4d?l@!xsW>& zRX>Nrq!uo|05)rFEyM$L3Rz9kbQrD&!YGJF0m{S|-%KV(CcxZ0*lyPBGVT@U&cv%` zQ5!q)4!+UiK|{p>eASv|BZ8#H!EWdfQi5ghpErpgfP{KwMPLB5R|*_LJJR6Pv0^~9 zHTf}w9l(ql6bv-OP85qIGS#tj^6~=C1u9o6NikthuYZ#|{1g&y=q3(HgGh0Dld4n$ H2><{)kE)^8 diff --git a/icons/flex_app_chain_1818.gif b/icons/flex_app_chain_1818.gif deleted file mode 100644 index 6af034e826e4761737a4f8264b86b780992f2995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525 zcmZ?wbhEHb)L_tH_{_lo1OfsAN=izRk&zQ7OxUqw$Bi2|-oJnU|NnoG90pMQ$pRKr z{Lk%~o0y*Jo0y)NoXwY>n46nuYoKRh3W5weAT=Nx7+C%Zob+71_sfg58~=+QZ(O3D zmnt>ycnE`mjl>DXBNlev=6O9fF%MEDp7b#so*-~Qkd0ZSX+kyI6yGI1nJ*5quthAq ze6*3-KiB7jR6rrCvcrXm$2pj`S&3br9bc}?%F5Q#!qC#%)z;d{Xw1UW%#vyt$WfNW zTvr_s9%(!oG-M zm1WD#)rDL>e2k`h&TuBD#j>jU87=fQ&l2tC<|^fE+@X5Qm3uCaZs45M<8Fuh#lEHL z6y>JaDu{En{c(R8ZrGyJ7ArCH>;vU`)~p3bG>%M};pmpZyTklSlYLxBm8j4MP0rwU zxv-_L9;IW!t-DG?)E#uX}3kngICEH|Y zlqzfN6~9wgaqIQ{7@jWsjJs?~o7npn3WTZsX?*_ptd^6yn9eSfmzT6mTo@Rv0SBAE AX8-^I diff --git a/icons/flex_app_chain_199.gif b/icons/flex_app_chain_199.gif deleted file mode 100644 index d7d927686eff6d3ba03fb0fabc2bfcbd71cb32c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmZ?wbhEHb)L_tH_{_lo1OfsAYHDiX;o%b|OxUnt!|mI*-@kwV|NnoG90pMQ$pRKr z{Lk%~o0y*Jo0y)NoXwY>n46nuYoKRh3W5weAT=Nx7+C%Zob+71_sfg58%>WWurLU4 zFegUHJojvmIH$(T@#;#RzTh8Kkwgip3k4hQGA2t*4LW^V(L`8c%EhktkrgjzEpc$n z)SSY^@;;SY;f+?>Wv|-IX~))eHl|D!V{6baV+^+uW>PJ-s!vyqt2VFXU{TE!VRJK4 zj|-mKR>l;i;;*H^nk*sZ#?&^2p^Kx?T*1$Td4ngL8nY}%2eU|;idKhNdeADyJ>I)= zt2#267i+MxEN70@ktz(ItQvWVK~pWGe(|GeqB4iQ-3}Nyo^6?VtX5L`o%ep>nXE^9 z{DUqim-vUOupH()t0by2o5jbUtBh;Ik(Q;*jKW8ED=5h_@qJ?T2q_U;eTgGy>I;>N z4xLI)lkOO?1?((3#b5hK#0n9-dE2xLmxzkjGkj{`W%+ myDL5^Hk^Cw_Kjm(Z!zQMj9|`3MQ=pvujVfI+@Hq6U=092*5s@J diff --git a/icons/flex_app_chain_24.gif b/icons/flex_app_chain_24.gif deleted file mode 100644 index a4f59ce606f26f12804b0a56fa917e0f06b8946c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmZ?wbhEHb)L_tH_{_z?$jB%oBcrdc@95|l78aJ5m$z`?!n0@3K7IQ1)2C1W|Nmz| z1&TjezygZ@xjl0e(^GvD(=(H^`O*_}a}#Y1^h``akUWwOCaB5!6Ywr5B-X^J{3NGxw@6krg@5ou8n2!1flu6bSR1IBd?alWR3 z-*`AXy&1lm3cKoTD}VB?%8qNIjs(v#i?5>RN~C`5t_%W~_xDGU>|SJ~ZV;pp*O zc=Wmi2iwY-ceHkTIw;64)RYsDd2~4UqHWFFx))8`nU3!<%Zp-FdD7X$FR@{5M5sl; zf`+|ildrz2YwdX;C3ona6>A!*dgnsm%X?$Wnzo(VIQ zo=P-t&tAN_%5`GMh7;-Y^;efEI39iQ{-&0pKabMsu1`#Tc_He)(hZ?!{PhR@(0+o-8R&#$gcw|-0-L{oGH0=Rn^T{=9=X~6_)Vf#u^o)Rpq?h~W dxce(uy>ZIADz>PtjK})Kjav#9>KzOW)&Q@|)ujLc diff --git a/icons/flex_app_chain_51.gif b/icons/flex_app_chain_51.gif deleted file mode 100644 index e2a694f7d2e30bc7cc4479371432c96578af515e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 493 zcmZ?wbhEHb)L_tH_{_xs1RNY3LPA0s8X5@+3BA3&8#Zh>fByW-moLA3`SSn&e~=0! zp!kyo%v1c&?U|dHp6Z*Jo|&A@m!6oLn`mpGXJQJ13_2h+AR8E1{so-$%=Z1Z>}=t_ z_C%2sO{K8wwZcY1M-&*gDDV^{D$F~zQBNY*Lxqc@wfV^QpE4~+Gd@NMRaci?>!{&c#Y)v)stJkUc*EBJ+X-l&fHWjgyad9?wnWi(d zmUl45xEHutr1!{hRHZRVu)5eRifQq!>=sI8U`g6AbCU#HXN(sc1Cz$eXh!#Vu8!&@ zT&p>1Rv+CN!^)+>c|OQ|Di?eH)nE;-Jw+CtayJ9gE^-|RV)S4S6G|?au}XJKbclWB zw_SaGuc9ruL~n2JJD@Gc@vL`INq52&#{GR$Ze8Y?B-wmAL&NjI29M1FwUbqrNGTk= zvcg}eV6Hbqo`*@_Vy(&z5-)k?I>{X?Se^rVPTz}ojZ2yxO?~R`}gnv|Njq?!vKmuS-@h7 z|G7PL6Vp?D6Vo%3v-#2!b8{1I4fIS*L6AWQqy}UI1Is^wlb);hetEHWqx&%f3Hjr- z*BRCv=$I+(CCIp&&8aY=pk0owF_+^+Xw`223<&|jSfMBFA5?+f!5PG)bq;Swo!IY-MPOxT(=O<7%tHByIJl+~p{IKSr^o*&xF&r#P#zof5Zo(0ZlV|EQu+FOY%vV@6hhyUAr3|K-Y%aQC-o4r? z2N{;^Ug@NA{DkgKm#asn&j@5WcKwmg)r(uiu06i45<4>>f6*&5<`^mFi&I>q1KU5D z7v-OFSe)8*VJgF!8E5 z!p3Ma-;+xjUemWM@N&*ntK2&;xnP>rt;Hvr4$M+m z(zqd#d74yy9V2%EW6H*}N1J{paV!jR;8l0JE2&fB=eADAi#7d4&!M$Erpvi&=T%94 S%se$awZqSM_q|3A25SJ5z|idg diff --git a/icons/flex_app_chain_62621.gif b/icons/flex_app_chain_62621.gif deleted file mode 100644 index c8dc4076eb108a9339af8168a9ed606cb7c4d9d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 506 zcmZ?wbhEHb)L_tH_{_xs1OfsADk>_juC56Q2_+>Z^XJdMbm`K&ckjM^`}Y6;e~=0! zp!kyo%v1c&?U|dHp6Z*Jo|&A@m!6oLn`mpGXJQJ13_2h+AR8E1{so-$T)o%i<=Tz^ zMUOWwQP1mYoU%qmsX0tU>(bU6Z6Xc|=i8XyEjDCfIMI@HjE7IZUD;@7$~lfz%bys` zsG53h10!pY63;!8iZX)^{!^PSN*gSw-p^$7aGRAaJ5wf$Svf;?m9TYEp)jXGCUbR7 za7TeiE{lm%pLHe^o1UwOU1+Bm`y7$t;8N{HQ$l>I6(t*+S8ZsU*4rl>GjV6%Vo%P^ ziqg43OBU*#s0pe(#O1Z-%=$%=N0x5h%XJ{GWglnmD(T(JrboxdO;TiMon@l^eCo?y zc9yltqUqrdX0IOZ3~%&i%n|zY^Pt*?35I6(bVN88FAsP2RxyeUT&{afv8hYqRtKlX zMh}w-fA5^QEz;hj7bIb<&>-HXywyzhqO9=Jjh*HN3*y9HZ(G{$&&~0rQqbUKUw?a* zfJV>um(7fh4ow4FHmv$EyGU diff --git a/icons/flex_app_chain_66.gif b/icons/flex_app_chain_66.gif deleted file mode 100644 index f1db75aa5c0d42a7682808be1480f01682355042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmZ?wbhEHb)L_tH_{hWn1Pu)h|Ns97G8BKZfcOlG|G7PL6Vp?D6Vo%3v-#2!b8{1I z4fIS*L6AWQqy(g!foai{{*|XW`5$w?W$A1@IVr5L@PeA3e1u)f%h1G~UAdpT49$&A z%hP{uI{n4K-c`W(&78hTDNAM~xXlsJaIz9w!Vq@)ngB=l@h6*p%Gfn-kKJm1wQTW& zPyE+HmT&xAWhKAkd%B25g=@r)XYDgiZ2EC+MVp#srCaOsPfM5HU|-DHIWy_x)+v=M kf_GI)z0!2vmBsaAmeg%dYmMJ0GY@w?zV%WgoPog_0K2YZv;Y7A diff --git a/icons/flex_app_chain_7341.gif b/icons/flex_app_chain_7341.gif deleted file mode 100644 index bf6bd61884363d5bfca6af433fd611a3a40abd5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 521 zcmZ?wbhEHb)L_tH_{_-w1OfsA%F4>l&dvn|1^xZ~Yu2o}ef#$N_wWDz{|}Nz1&Tje zzygZ@xjl0e(^GvD(=(H^`O*_}a}#Y1^h``akUG2g!ZCco9gd5qYGuxtpl8@V zLorH0AYgK`=F_hSGK7vqhfQ9=9;-P+WrEBcV+N)iKlWVlte7kY4R&9Z3Tyv%v3zf~ z8nZgTWR3|_L~Uz1vywU4%%Z}TnHGpl5Sq4JB{`8{q5<mx^@RalUvL&w$guSaN`}||e zsdMknb^TPyUC4GI)=c%&x0i=q56v}A<6Qr7*0cjbCR$%vylUJpE;8hwd2^kL(e;fF zUHKnPo1%1b!vjz8Qmwk+igR~6rg=A&uKZclv_enYe{Ho=q67;{95emvv4CfO_&may=U*b!L=7J-iGzQJ>Nb)BSsO-d9L zSE@18nUsC~;&tupk5V%Q9U2gwulZf*qy1&bFizI*rX`}gnv|Njq?!vKmuS-@h7 z|G7PL6Vp?D6Vo%3v-#2!b8{1I4fIS*L6AWQqy}UI1Is^wlb);hetEHWPJD@c#Q2VXno7JaPL|cnmB&3eKJ8;*=KPl5I}>e%Q&7RsLYv zWC@N(>sfh)MSM7#7q}mYJakp#&w=JjcM&#+0U0~VKj^TooorE}A4r#FU``zY40p4VOn9? zy*J08I{M6WHrrOsKM@kb;vPE3?UsRXkypu7+q`}A8J}$nHejrE$gj|6TK0Z3qCtrO-fRVu(0JL2C*F%k zk{@=J*Up=}wf#D~Mu@soG4s|LX&NuwJ1n-Qh`k7TS#k43dFx5fr6v-9O7C~? zS5nAKu~iB;^)>Jhm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83mzLNn z0UZnRMQ#Dy*t}vru#fbT^KIbD3=a&{GrvjBLgRCmBaxO|uEXgkl$VOA1WZ66COq*1Iq>A4ng>ktMZm<(`2XMEKfizd{PF$U z*Ds$xef;qL-P<>>U%h}$>=IY|?mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH&FX#K^#) z_>%=(Sm=OAP}#x2q|(#B^7LE=W|mJEqSh~rI=w?tTss=C>}*;cg5=+L5-Vhq**B%>Ls diff --git a/icons/nanos_app_chain_24.gif b/icons/nanos_app_chain_24.gif deleted file mode 100644 index ed096104eebe807888adc84f9299d2cd3857e51e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3174 zcmZ?wbhEHb6krfw_`t{j1poj4SNzEWVlgQG=l0A^Oi%SqOwUZt=1ot`%}um5&@(YL zF*OBAM)(FOxFnV&0%;rjih{)C?9>v4q}24xJX`hmyZ5UrWTx1vhnxBu_!c;)W@LI) z6{QAO`Gq7`WhYyvsN36d*;H6n?69D>BnU^7C^P42|>*&D4R06s4qD1-ZCEjR5j&)iX*;3as??%gf94%8m8% zi_-NCEiEne4UF`SjC6r2bc-wVN)jt{^NN*$CU7Z$&2ULAPAn4M}uoLxJU{Ck`#}ouF>EkDFjGTJes;j zgNvjPAW88sN?nL{ZE7B{F%#K*@}C@U!{ z$jiyfNJ~jdh>MAe2nz`c@bmHVaC32Tu(PqUFf#!=2|A$80jS5oz@*yKzw-260fwHS jt6tA13K!+n1hTcMrYA}@cbyMiHbwZ_m)_^@j11NQgf~t( diff --git a/icons/nanos_app_chain_51.gif b/icons/nanos_app_chain_51.gif deleted file mode 100644 index f9d105ac0951972f67cba8144470b5d27e794006..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHb6krfw_{abP|G@yrQ2faP7SI8aAbAERk)HmQr{D5FW^Qvz$S*59&EK{t If`P#r0D{F6y#N3J diff --git a/icons/nanos_app_chain_56.gif b/icons/nanos_app_chain_56.gif deleted file mode 100644 index 290d658dcb09bbe43d53f751de090c7fd3444af5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71 zcmZ?wbhEHb6krfwXkcLY|NlP&1B2pE79h#MpaUX6G7L;|E&VG`zs+}I*kt7Sy5*-| WkM4u*nu<#%&MPf?$F0xGU=0AA#1)hP diff --git a/icons/nanos_app_chain_62621.gif b/icons/nanos_app_chain_62621.gif deleted file mode 100644 index f8853eb2b74178fc18fab319740e854cd39e4806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi_`r+?+?xAF`DlddVJ&oXt-s!*&b VO^BEzo1VF%`=Ex)^#Dc&YXHkT6|n#S diff --git a/icons/nanos_app_chain_66.gif b/icons/nanos_app_chain_66.gif deleted file mode 100644 index ef6b29c4d091633d4f42a8db1d9e74ba54a74f13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`3r+?+?wG4tR`tu@RZq3emZt12m VNme|e(`wP%>AN2JShF%%0|2sh6}6v-9O7C~? zS5nAKu~iB;^)>JRtPXT0NVp4u-iLDaQ zr4TRV7Wn$Y4bCgp1A9m>IX_pwBC$Z`6o8MwHZ8Jak{IhvcB7@NZMdgc|EB<3Zj!t`b$^qS$-Yvo*&npl!w6q28x1B<-YPZ)#CyS!#+~QGTuhIE1V+vADw3*}%li z)y2ue(!dS74({PcxqRv3 zh4bgmo;iK$#u35cm<%;FYmM&Sm zXyJnS^XAT(J!|HS>C>i8nLKIYg#NzXp6;&Bj`p_Jmgc6$hWfhNn(C^`it@73lH#Jm zg8aPPob0U3jP$hBl;otug!s7FnCPg;i14t`kl>)e0DnJUA8#*D4|g|L7iT9&2YWkP z8*3{|3v)A56JsMo1ARSR9c?X54RtkD6=fww1$jAH8EGj=32`w|5n&-g0e(JS9&Rp9 z4t6$H7G@?!1_s5SEa1XI2SkF(4hAOKp8l1m-_B=fNDRx!yTBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFlEiTau_y zk(-lOY*k^al$esAlxhWJ=cbk<>MJRLRg`4gDmj8A6e4^B6rA&mQWebg40V$Y3=9;^ zE%j1U5{;6K(-M<)6pRdv4D}6x$XwUZ+{(z<%Ft2)0+fK(6{VzE1-ZCEZ3FUbl`=|7 z3as??%ggo3jrH=2()A53EiLs8jP#9+bb$(Vi!1Yh9@Nb%R)!hil3JWxlvz-cnV+Ws zGB7bIzqI7PtrF0!5KrV5z>Uo-)&qM;FF8L~zap_f-%!s0^k2 zg-mftP%6T;SQQtCR2HP_2c;J0mlh?b0+lO+EGn>aE=o--$uA1Y&(DE{Vn9ZINq%ug zeu09Kv7VuVhHqkWW*$gHQwgZU*VoE3uec;JFFDoI#TF!@mzkMjWo%^bXy#^YVQg$> zXz1!}>11T?=3-`UWa?(*Xz|~|2y7cruSMv>2~=+iT&sZzcD+EYprin{IJGFV zEH%ZgC_h&L>}9J=oGvji#9^EgRBH;VL-debVuY#{>ItAj^notX2gNE@{ z(ZdJ#@7=v~`_|1H*RNi=eCgta^XJZZ;0$^0LyB;-bQW{Jh+p?5xa;^t9BJ|cQ;oTXD3GodplbjYb#3&b2C#DVqwaWPR5VIe^Qem-6vZZ1wv4t6$H7G@?!1_m8a=>RG+7?>1#`d3On_aFfv#J0CYhVU;qFB diff --git a/icons/nanox_app_chain_1818.gif b/icons/nanox_app_chain_1818.gif deleted file mode 100644 index 912c760e594a722601a4bd8a257291f2cdba1035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70 zcmZ?wbhEHb diff --git a/icons/nanox_app_chain_199.gif b/icons/nanox_app_chain_199.gif deleted file mode 100644 index 4b0b8d4d8acade89dfbb2926c02ba68de6937b9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71 zcmZ?wbhEHb diff --git a/icons/nanox_app_chain_24.gif b/icons/nanox_app_chain_24.gif deleted file mode 100644 index 4cd245ff0c58d084c9cb7105a4fcf6c468778c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3172 zcmZ?wbhEHbl^mD=Epg zRR_Dp%F4AOGc6=PKS#mPNYBtr9cV~VN}5%WiyPDkAkS7kqokz3N?*Ucyj-u`STDaQ zUEk2s(o)~RNZ-gv7pOwFxH7LKu|hYmSQ%&nmjc)fm(=3qqRfJl%=|nBkeP`|`K2Yc z>grqyP@_vS(-3Co73+bWs+XLfs}GXVH`FuG2b!j!U<2Y>`4?rT0xbawR)Qi1 zv{fHu4U)A$&wz!1z5y}ep#w6M_F&W!lEQd2xJHAEq!1uU@o4HA4K9*GfF#AEscSU2 zND2Xx6c3}+g=p8N<^dbC<-k@e-^T+pZU%!0*^zp;{cW>Xke)aOj^Jh<= zJbv`>!To!8@7%t1^TzdSSFc>Ybn(LZb7#+-K6UcM@nc7i96ogL!2W%E_w3%abI0~= zTeoc9v~k1wb!*qGUbS+?@?}exEMBy5!Tfo1=ggipbH?;(Q>RRxG;umQ)5GYU2RQuRb@qaS!qdeQDH%TUT#iyR%S+eT53viQer}UTx?8qRAfYWSZGLa zP+)++pRbR%m#2rjo2!enlcR&Zovn?vm8FHbnW>4fk)eUUp019zmZpZfnyQMjlA?mV zoUDwrl%#~Xn5c-bke~oRA1@C#7bgch8!HPl6R?+{1L_@sx(p0VN-g~>s~I24xfGwO e=xvVqel{^Sxl(XhjdJKz&(j%2KG)qC8LR;V-AvB_ diff --git a/icons/nanox_app_chain_51.gif b/icons/nanox_app_chain_51.gif deleted file mode 100644 index 387354d9039884c76f2601bcc6b90da8d738ecca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65 zcmZ?wbhEHb>$5Ug0|3|07B2t* diff --git a/icons/nanox_app_chain_66.gif b/icons/nanox_app_chain_66.gif deleted file mode 100644 index 5f729da9b160f115b85c3f2ce37383f1fa8eba7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71 zcmZ?wbhEHb)&-%((tSng VA+0?>Di?j4Dl2NMl`g_y4FI)}6$StR diff --git a/icons/nanox_app_chain_82.gif b/icons/nanox_app_chain_82.gif deleted file mode 100644 index d67c25f3a1c1aea11e154efcf79355a8b8e351d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79 zcmZ?wbhEHb+PV=6d?HDK(Sy#B5 e$0_u>hqqGb%Eft7<-TES`qr(`ToK5?U=097wilcL diff --git a/icons/nanox_app_chain_99.gif b/icons/nanox_app_chain_99.gif deleted file mode 100644 index 951bb4960b73a3be5c45f9c94a7298972c51ea85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1119 zcmZ?wbhEHbTBRz;GCL~=}}db8eHWUl3bOYY?-2DZ>L~WVFlEiTau_y zk(-lOY*k^al$esAlxhWJ=cbk<>MJRLRg`4gDmj8A6e4^B6rA&mQWZ?~%yg3tO$-#w zE%gk|3`|T7brg&Y49)coO!W=SbPWux3@ogS3>Bb2$vOKg>t6#hd!kXzvE3pY2fSP$$Sz2y8{{ffi_eM3D1{oGuTufX0dE(uCS zxB{!{;*f$={h-w1{L-T2RG?~Qm|kGG;kO5*5a<{ym;B_?+|;}hPZwJypom^dW{Q=C zqp^Xdqk*}FrJI4Fp{s?XlYxtinW2fJo1?k8iLog}ua#$BaYP}UIa|ljQ{`r{qy_R&mZ5vef{$J)5j0*-@SeF`qj%9 z&!0Vg^7zri2lwyYy>t84%^TORUA=Po(!~qs&z(JU`qar2$B!L7a`@1}1N-;w-Lrew z&K=vgZQZhY)5Z>a~ULJ04E=~@1HdYp9CPoGZ9Z>lIDl{0Fq9`!YtKh8ht8|BjpK>``7F{}J#>!v~0P^9EH~;_u diff --git a/icons/stax_app_chain_1030.gif b/icons/stax_app_chain_1030.gif deleted file mode 100644 index e39f4425b4ec3baf087bff28898107abaf77525c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 347 zcmZ?wbhEHbRA5kG_{_k-$jHdS!67XzZDeHR>FHToTH4&)ym8~kt5>hSdiCn-*RMZ* z{P_R>KLZRX{$v3&75{U4<|d}6`X;7lCTH`dC+6lR+8XGYn1UdK4oD5i1_qW_6Ha=r z-fOWr^wgyVTO}9+T3)y@IXqZ;Gh)+Q?r5$>NF;#H#0Ie9Zo#)NHYB3;iQc@ zR?Y_;CI#h+86MAlYOwmN-b3bH(ag?UUvV-WOl4aq!Xhj=U4f06!#1RvsYI01xuBBS zu{}7JiBqhqrpJmc*|}|sQ!P)u73*Y?mN}yJ^B0;dPLF96<7}_%jhmd#B^ylyL$EN^XJdMeEIUrmoGnm z{`~*{KLZRX{$v3&75{U4<|d}6`X;7lCTH`dC+6lR+8XGYn1UdK4oD5i1_qX&6Ha=r z-fQuCsdbq9qu$Go49$v@ZZwH7DlBe46xOMDrdU9rLz>y-0Wa6lnF}^ZNmei^C{Lfl z8=-z+y<6qclnBX%o{=^O#RC`*CZ=%CKYZqq(vfM4%H8^==?EFvFtFw&RTm3cS~oEi zR7un@2&o0Is@b>pN~TZZ=}vNVW@npOkSpxcVa#m0oJXdLjm?Z_x|dKq`#O;-bryEk z`O!kgOC+jTdo;9!cS@dUV)PL;WJj~kN!1@qq{pF$i>?)RE?aa63W1I zhNH~pnDWil2i;=Kzs9qiRW43uTq>8{vc%9Jfm^p#Tu4EI<73m#E(u*11_o;Yuo8Rz diff --git a/icons/stax_app_chain_1818.gif b/icons/stax_app_chain_1818.gif deleted file mode 100644 index 1a5b3c8e632acb0e9bdc6858a04aba0568d9ba14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmZ?wbhEHbRA5kG_{_k-$jHdU!y_gprmL&#>+4%oRMg+!zhT3M%a<=dd-m+hmoGnm z{`~*{KLZRX{$v3&75{U4<|d}6`X;7lCTH`dC+6lR+8XGYn1UdK4oD5i1_qXY6Ha=r z-fQvttkAEMhji|x*L8&`CARW3Do7k}I$>caqthtfek8?_L4uv_;KGa?DPET5g_gHF zCE6W?y)-Q5UUb+L`GK#chbb}EL+;A!AGZuLP9JY*S`uR>!opEk)6CA~P!klzz*6m- z#GD=P8_43#Y>>ss$gagaId9%1>!2VGRu3i?O`+Bl)@73z0#bt7){Ag8<#Gn@sttDY zS{bA(7Q<|ulcB%PZH~mw*xWdOXua=CAemXVx-T4Poofm0%$-Ac9}3SSOWm}bD)a= diff --git a/icons/stax_app_chain_199.gif b/icons/stax_app_chain_199.gif deleted file mode 100644 index cc8a3f986bfc9d18f5119c5f62e07c38ea8862f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmZ?wbhEHbRA5kG_{_k-%gd{!rRDGMUtC-~Wy+NG>(`$q>Nz3`gr;P1tYCN$P&%pMwUoXN`_Y`BhGW4ii_<^a+|3Ai z8#p&)kK4r+?uCn4OqhfAR4wW`+7P#;>gdg;!Y&~l8?FO8TtXxyje|0#{hG@1d=0bg zrj!RtJ{pV>)ATNWFniC|6zC|p*3u=rV?&3y)f$bjO2>Fgb!KxgPHS(`t*`j(#=u|= E0L#6tLjV8( diff --git a/icons/stax_app_chain_24.gif b/icons/stax_app_chain_24.gif deleted file mode 100644 index 0c092ffa257fc342a773f4f3ff577898f5b010ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJmS|r+?+?xBD3yOnj7|p6-2Iqq<;O z!*Piyjm{bKe=mAeaY%d3t++kcO5W_ASha7#g%e3n`%Z*-bVO@KUl7UnQk_<}ilcnl z;W{g$IMv;|=bpZPx9xPxhO60gwlV#`Hu+*P-`nk9Rm4t+dz2O3Sa{;bjR*z?YXBHP BMIQhF diff --git a/icons/stax_app_chain_51.gif b/icons/stax_app_chain_51.gif deleted file mode 100644 index 381f07069d1423f1f818c6e22dadc939d2c66dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 410 zcmZ?wbhEHbRA5kG_{_k-&(E)`s~Z>?n4h2D*Vngx{rZa+FTQy3;`8UvzkdDt|NlP& zDp35%0v1sG&+VC;n4apJn4X!O&6l2-o118Bpl4zVf($w!H6R-pSpEf^^jy97hLlpn z_eKW^&oI>tMHWRz5d*^w&5bjJig+9xWM(vGVSvP*FQxA4(Wmqv!_uN}Wg?$QM*LFr3na1!jF}boavs7d=1~j&daN1PcusSkM z;Y;se@S8&OAZL|$o@;Y2esQB4N=4b4B zs~fntEi9mhaq)o$(UL`T4;BUAY!_g)irON<$Y2csy#$Tp diff --git a/icons/stax_app_chain_56.gif b/icons/stax_app_chain_56.gif deleted file mode 100644 index 311d31a04c812cb467a1f537081efdbd1b6ef334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmZ?wbhEHbRA5kG_{_k-$jHda$tfu*X<}j$7#NtDnK^gv+{>3Qzk2oR%a<>|e*OCY z|33o~Q2faP<|+Q?_RLL8PxVbq&rHtdOHa(rO|&)8Gcg501|5(ZkPQqh{|ZieuHI|0 z-uRefmztluB11!f%;Gi)Ck6Hu2@1JOC0Mw4*bX0H_j#gX;BcTVdXJy?VULL%suioV z7Om0{3t>p}?++3_Cnrxwdo?g?q7qp1#2XQ&u**h|?)L@BrY!wNs z*lDy=gE>l^gMIq)y(e~RmC1{6Xw9;@w9|Dm3v=s~CD+&41ttqEV45U7by;uh9+z2p z8y8M*d&0?_`)cP>voEVRt&=q?+FmE2xov&>rU>sNdz*gql;nlsfSFbn)sEKIj>#lQ0i&n zlw|&tn<%>CSeKxeeAMj&P4gM*E!Vw>WXKCYIr(K@jh7>{@*HLHl4}!~%$+y$t$y|D JssJN{H2`lGtO)=B diff --git a/icons/stax_app_chain_62621.gif b/icons/stax_app_chain_62621.gif deleted file mode 100644 index ad33059e7d71fbdc36d477c04938f082cee4354d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJmS~r+?+?w|w(_3>&QOo0dPn8oKa% zq_TNZu+}E6$J>h7=P&EIQMu#s?n#R(G6Z7zzX}OCI#0TE^2^r+YN|zEPh~q!M;q

-`HJ#)$GcgCyki7N}f5DiaZ4r7`Y=G1=ZhQSvOMbF5Y I0SpY*0Q7D_WB>pF diff --git a/icons/stax_app_chain_66.gif b/icons/stax_app_chain_66.gif deleted file mode 100644 index 38cfa3cc3c79f9b8ffce4c16752d8190630f05cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJh)nr+?+_2mCV|Mb7+6IZ#=wUAth# zM7i)faj8}6(>AFkpYwiusq%D|;hW!~O-@`B*=@9PPBCx(Ddi-1K5gs9=w0iy70k0( d+$UVpUsrxRZQ~}>(B5m?9=~~F62ZV=4FF>`GXekr diff --git a/icons/stax_app_chain_7341.gif b/icons/stax_app_chain_7341.gif deleted file mode 100644 index 0741eddac35b5d095221e61f8539ed91f7aa0beb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJh)!r+?*XUjErW8;-qPx3VJhS4qdQ z+=UWzR+g@~!8(7w%I=L3+LhbizsTZZsy{rhn_b}8B#rxEPqY-uWAF(ZJ1!5RRo0zc6J diff --git a/icons/stax_app_chain_82.gif b/icons/stax_app_chain_82.gif deleted file mode 100644 index d07813d1a32156348c2d5d1078cf23b52f3f720e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJh)&r+?+?xBnaF2%Pg?eaI&JOvAM6 zF@i5=EL|e0@u|<@#J0S-M~eLp|M=*1;#-E?FqE?k& w{9Cejo90ySX%{c4Z@VeBdDrAyzBSggl1%|?D<+|t2kqO zBVTx5np#~}^dZIKJzsR^|L{9!ll$AS$!Q9Iho{!my-SU6)_9d(esv_PH)$s0qU&Ez uZp?ZhaZ|>3eb1E-KUe%(wEO8}y?6f}KL5UJ-H!Bj;UDTQAuYiS4Aua_s6kZ# From 5b815354180a8a7b26805a9bc74c5a593a8e41ef Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Mon, 9 Sep 2024 12:17:15 +0200 Subject: [PATCH 054/102] Add an option for opening PRs with golden run result in CI --- .github/workflows/build_and_functional_tests.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/build_and_functional_tests.yml b/.github/workflows/build_and_functional_tests.yml index 974ee5fb7..c9536290b 100644 --- a/.github/workflows/build_and_functional_tests.yml +++ b/.github/workflows/build_and_functional_tests.yml @@ -10,6 +10,15 @@ name: Build and run functional tests using ragger through reusable workflow on: workflow_dispatch: + inputs: + golden_run: + type: choice + required: true + default: 'Raise an error (default)' + description: CI behavior if the test snaphots are different than expected. + options: + - 'Raise an error (default)' + - 'Open a PR' push: branches: - master @@ -31,6 +40,7 @@ jobs: uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_ragger_tests.yml@v1 with: download_app_binaries_artifact: "ragger_elfs" + regenerate_snapshots: ${{ inputs.golden_run == 'Open a PR' }} build_clone_app: name: Build Clone app using the reusable workflow @@ -50,3 +60,4 @@ jobs: additional_app_binaries_artifact: "clone_elfs" additional_app_binaries_artifact_dir: ./tests/ragger/.test_dependencies/clone/build/ test_options: "--with_lib_mode" + regenerate_snapshots: ${{ inputs.golden_run == 'Open a PR' }} From a1d1cc32fe2d4a1e4288d998daa0b4527f04ee24 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 9 Sep 2024 17:39:07 +0000 Subject: [PATCH 055/102] [auto-update] Update Ragger snapshots --- .../ragger/snapshots/stax/get_pk_1/00001.png | Bin 13407 -> 13407 bytes .../snapshots/stax/get_pk_137/00001.png | Bin 13407 -> 13407 bytes .../ragger/snapshots/stax/get_pk_2/00001.png | Bin 13407 -> 13407 bytes .../ragger/snapshots/stax/get_pk_5/00001.png | Bin 13407 -> 13407 bytes .../snapshots/stax/get_pk_None/00001.png | Bin 13407 -> 13407 bytes .../stax/get_pk_rejected_60/00001.png | Bin 13407 -> 13407 bytes .../stax/get_pk_rejected_700/00001.png | Bin 13274 -> 13277 bytes .../snapshots/stax/test_get_eth2_pk/00001.png | Bin 21127 -> 21127 bytes .../stax/test_personal_sign_opensea/00001.png | Bin 25568 -> 27641 bytes .../stax/test_personal_sign_opensea/00002.png | Bin 22001 -> 19923 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/ragger/snapshots/stax/get_pk_1/00001.png b/tests/ragger/snapshots/stax/get_pk_1/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 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 diff --git a/tests/ragger/snapshots/stax/get_pk_137/00001.png b/tests/ragger/snapshots/stax/get_pk_137/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 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 diff --git a/tests/ragger/snapshots/stax/get_pk_2/00001.png b/tests/ragger/snapshots/stax/get_pk_2/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 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 diff --git a/tests/ragger/snapshots/stax/get_pk_5/00001.png b/tests/ragger/snapshots/stax/get_pk_5/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 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 diff --git a/tests/ragger/snapshots/stax/get_pk_None/00001.png b/tests/ragger/snapshots/stax/get_pk_None/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 zcmV+{5YzA9Xy0hC93y}KTe<*n>Feuj=^{Xx_xrtc5qco7bR(fKQmG29JiiDmmB=Yf z#8jXK0HZ}|oJMO0x~ z>xr$E23Au}bxEJnd(D3}CKpkK^;kn}ecf)iReh74w~zETxJZ91tkZ&-wW7eXlVyq` zO}&1Hh$^h#BC)lKz?w5k)*oA>6||T?vlb4lrQ&0?u|--zmzgtb$!iJi;qaML!~Vnp zCn6_8T0xzeEA28ZtW}-4TS;L^E9f;_J8OX!)=C1xSVL2bw1R50Rp7Y;Yi(&Imdz~E z3ctWS)p*vxk~n{uf5fT_Q>vLWi?qV8F+*jZFR)Bn&Gv}{ERtCOI+`i4RHT)dGqY%3 z;g^}ZO3x8kiqcBVlUbw{ex*q(_T+)3x_hO%@WAggQ#ipy?(*~Bh z&Y+C}cwlWN3@p`YB__%&npgPsCaUB-mk@v&Qw7#9XkLE_=Z!3ySNKOvQPpW-0Z?O- z!1^`KE8(z_Me_>(6z3J578U?C+y~Y#YhDSaH~?!v3u`{~2iGGAf+&iDATWRNeLoDt z1&j1sxvln&pG){Fn^z)^$QR)=)2@dBe%}oLDM9P zqSx!yvRkBSGmpdJU_LjBq9}^wmn;Z^=kxh~zjuGT-E4*VcMSf@)O?8?2A0FLdUyMJ z_g!+lG21xqpsVEjzDcXs>vcFBBqO3Ix?C=1&s;8-dCFrx^l&)L^NH}B2G)AJghutN z-ZYHYeaZQ)rzCSaold6P{{8)36ovdfP17_@^E^MDPM+uOcDv*8XkN9+KzN?#wXaqM zLEwM;eo++FA%fDdfGJq*f2)6yl4M!d@@lD^zVA!(-@NPJ^!4@S><4@OEv)zZ{dhc1 zr_aOJc}YB<&uV{dx7*39r_(72 zg3_U}Kh*9F+9XiSdTzH{b?_&X+NMN9f1XnOyYmE zOt_W4Vd;-1t+FhWu3{L5(sGHS=yW>CZ<0+KXcB)>6q)wg;c)o*`H?bYStf&Mp66Y! zS1DD~$z{XL8LnM&x7!s(AtyTHIF^-5KlggQrfC`k!QpU_L^~V~1lCxtI&p6MgYUI= z3ExAvbe^NRD#J#&O>e8zVv3@ux-);x!tei{EVlpNrARGZ!gpPN)_&D)UYWk3eHtN- zWBKFj_3FMKewn`CmnJ$|SYa4;?B8`?5>xv)-K3W3NtLFR${@Y0Gm4^8Q>D}bx?ZoY z&OByW*3v9W)6^bi&$3L?&2Chhw=)@VJO!8Ld{vBJ5;OSN+p1+^t~&N)Qeb~r6b{qA z6&=rA!j<&~R+s6ZeV4?X%vZhF{z}pWz``$J2F`c8UG0C=P%~fLj7*z>s?zfI-C&p;@XuOrV9CWC)p2xTU+2*> z*3Rhrvdp|t&+|^F)9dxRTrQW(B}tOk>t&`3$W$qDyX}+rs)dPQgHi7W@5vyWN&jsVIu;_4@t&UG3jxS+?11N`KGu zT-Gyraj{}wx7*FhEi|3qYt*zys_|TUsk&sfE#olb2XE=W*}^K3I}vAD)^P??-@7$n zg&cnS*4rhtnc2oNqOpH;aWGuVh0wMB@f)+C#95bc(&x&^$i?w^tgY*>zoz);l3#q& zdSLx@w6NNlX;zc=1jqYl$KCNSbNe0C5m<6l5szmC0RJ`}fyF%-0C*|_>ti>nr6<^O zs&NtY3h_^I{=IWK56kVi`wH*Dz=%7rto2SD{jK+4SV>zCnA(37Reil(!sz~2okkXZvFWNeEi3?POcGeX ztdTX*Yz7)x_?0HD*tD>gL}uZanYv0(6(%jSHA0G6`4=Mt9Y zmkx-Vrjsj=L=~Xj>H%d%gP)MhId&#eC~`|(DardgKd zc`pAAg5YpCEL)_J@;pz|)bqR`2%;!jx;P6kY2|rd5Cpf|ZRrwuMN!=Ecd2H+??+J- zhT%kiA9Oq(O;lYj7vJ|+QnmrYFf59~WL6xhXAd{KigAIyH8CC(E)R2u`Py^UspB@_j!D0?+e4Zu^{N z8zzdPG)))Jtc3$BP1B#BpQbkR^?J?oJV}y&nM;L{R+v^`r&E$7uh%O{lHG16%b0cwv{+$U zd4C6Aq9{5X4q+GuK@i9B>2&gaKhN_l%bb6rw5`@zw!tJ%<==~pXDu06rjzgc{`2{N zJRAv-_Z?9D6fN)}s4rWu3oZRMnMrrj_S;a@@@ip)g&x zzM;@^+|5`|>EE-JZEDMA)?$HG6ooW{J~Hk&_x{>b@q`A2CK z?0UU^eSLj>eI1WSIYssT{k_?2zQ4bJzrMbzLuTIJ7T?#`ms#!i_jl=|OH0Z+r2vbc zKv~>s)5`O_D2i&kFuh7BL+L+1KgZ+od_M2@`{VIw2g?0^-|zQQXYxGX@Av!t{(L^q zP_{WOm|2UBVVNM1CROb+CbR6*C8k2yvMk$fx0lPM^fM*CzrRa=*>1Ow$HQKKZI)#} zKR>1Rm(;m5P3<#Wd7f8SC~rR;4(l0lnAw`s%B!?r3_0Rmx^L#hpK1HZbdB@*9LKRF zP7nlgLQPgH73|~6$Cqt>i;ZX9ZnyUm%t6}icHQ6gcsxwWFPF>f^?E*^W>voLn$NVnoYHk6Y!6J$HR^udoP)oi{tq5cs!p^`?HcHDHWjfK{K1@_&%Rc z6Hh@9yk4&vK6Jdt;}OSk#~OGz9O5`W91iv$Z?~JImA%Qb+R~DfmTf6XlHC59=M$Ho zINJ9IMCy$U%*$_`ndBm)TGh8apU>0j6h+bLbTT<&H)Z8?q!i})e8zEq9ERcHa4-v- zHr@4lm5+$y_;$O=5b18WGf8?p9(!%hFR=2qRTDEP(Ph$!jDE_gA^Y!ARlLfm#hhhZ z(ENSF#kz!D2EVJqFzh>ig65^Yi1p@o8TY)bTC< zU`wjW;c$>y+R`^%ef!so%wQP5;e*Sz6w|za@@6?duvlQ3w#@y0 zZ<-K%KA)v2E_3QU&)e_!l2*R&%kY8NY&K&OBnSe@tUS*RZUB>S3l6E?Blj*l9IS?{%@jlHoe}UE1&WwV7oGN6fE{X$Nnwt|*G_c58mP%(;@<#%I&X!S2lNE*0Z?y~^A_6O?91t2!HSv)Ra$!Z9V$%N}vJ z&l|4C{eDl=RC-%|6G3WVZD2{=82R%#rfiE?B(1!~1Ir|T(eZfv^XHGG!*;v<^XHE_ zA7@Y6G>saQ3o>PNWJz|rom4oP6e=V7GL_jZQ2NLHe*gLTk<&wIno6J4+#baH?}qrK)(%lRsxD+x(VFE6?-3WaitPA6Zg6b6xnpf4kl6 zsVLIqsV)|O1cB5WGk@JIDHEpb<-fkZZ_>FbtCDm diff --git a/tests/ragger/snapshots/stax/get_pk_rejected_60/00001.png b/tests/ragger/snapshots/stax/get_pk_rejected_60/00001.png index 74e666deba11cda824dc94f8733daefd07738be2..4694f41e0c2223a8f676e813f73e24a65f742d0e 100644 GIT binary patch delta 4126 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 delta 4140 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 diff --git a/tests/ragger/snapshots/stax/get_pk_rejected_700/00001.png b/tests/ragger/snapshots/stax/get_pk_rejected_700/00001.png index 59b34f61156f3e5600f7cd0e1fe8198eb4a73001..901d45f08d03a9b0fd2cb079d170d1cce1b32bcb 100644 GIT binary patch delta 4127 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 diff --git a/tests/ragger/snapshots/stax/test_get_eth2_pk/00001.png b/tests/ragger/snapshots/stax/test_get_eth2_pk/00001.png index 4a25c17a1c802beb7e45c5d1b5d307838049a3c5..dfa82ea9af79e4d9ebf49490b6f8dca2eb89556b 100644 GIT binary patch delta 17086 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

ZdJ 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 delta 17015 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�N*7~Mz3@f(Ob0b;vk00X32e@$yGp=z$< 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 literal 22001 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 From 8775a2016ba1bfa0c0142f168b118ca0b6b3eb84 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Thu, 5 Sep 2024 17:53:10 +0200 Subject: [PATCH 056/102] Change Confirm/Cancel notifications order --- src/plugins.c | 3 +++ src/ui_callbacks.h | 3 +++ src_bagl/common_ui.c | 15 ++++++++++++ src_bagl/ui_flow_erc20_approval.c | 4 ++-- src_bagl/ui_flow_getEth2PublicKey.c | 2 +- src_bagl/ui_flow_getPublicKey.c | 10 ++++++-- src_bagl/ui_flow_signMessage.c | 14 +++++++++-- src_bagl/ui_flow_signMessage712.c | 15 ++++++++++-- src_bagl/ui_flow_signMessage712_v0.c | 15 ++++++++++-- src_bagl/ui_flow_signTx.c | 24 +++++++++++++------ .../getPublicKey/ui_common_getPublicKey.c | 4 ++-- .../signMessage/ui_common_signMessage.c | 4 ++-- .../signMessageEIP712_common/common_712.c | 4 ++-- src_features/signTx/logic_signTx.c | 1 + src_features/signTx/ui_common_signTx.c | 4 +--- src_nbgl/ui_approve_tx.c | 18 +++++--------- src_nbgl/ui_get_eth2_public_key.c | 14 ++++------- src_nbgl/ui_get_public_key.c | 16 ++++--------- src_nbgl/ui_message_signing.c | 14 ++++------- src_nbgl/ui_sign_message.c | 14 ++++------- 20 files changed, 118 insertions(+), 80 deletions(-) diff --git a/src/plugins.c b/src/plugins.c index e0bbbb926..3271f3d90 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -1,5 +1,6 @@ #include "eth_plugin_handler.h" #include "ui_callbacks.h" +#include "common_ui.h" void plugin_ui_get_id(void) { ethQueryContractID_t pluginQueryContractID; @@ -11,6 +12,7 @@ void plugin_ui_get_id(void) { // Query the original contract for ID if it's not an internal alias if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_ID, (void *) &pluginQueryContractID)) { PRINTF("Plugin query contract ID call failed\n"); + ui_idle(); io_seproxyhal_touch_tx_cancel(); } } @@ -28,6 +30,7 @@ void plugin_ui_get_item_internal(char *title_buffer, msg_buffer_size); if (!eth_plugin_call(ETH_PLUGIN_QUERY_CONTRACT_UI, (void *) &pluginQueryContractUI)) { PRINTF("Plugin query contract UI call failed\n"); + ui_idle(); io_seproxyhal_touch_tx_cancel(); } } diff --git a/src/ui_callbacks.h b/src/ui_callbacks.h index c91796b51..52296356f 100644 --- a/src/ui_callbacks.h +++ b/src/ui_callbacks.h @@ -18,5 +18,8 @@ unsigned int io_seproxyhal_touch_data_cancel(void); unsigned int io_seproxyhal_touch_eth2_address_ok(void); unsigned int io_seproxyhal_touch_privacy_ok(void); unsigned int io_seproxyhal_touch_privacy_cancel(void); +unsigned int address_cancel_cb(void); +unsigned int tx_ok_cb(void); +unsigned int tx_cancel_cb(void); uint16_t io_seproxyhal_send_status(uint16_t sw, uint32_t tx, bool reset, bool idle); diff --git a/src_bagl/common_ui.c b/src_bagl/common_ui.c index 80645a360..96826f8e6 100644 --- a/src_bagl/common_ui.c +++ b/src_bagl/common_ui.c @@ -49,4 +49,19 @@ void ui_confirm_parameter(void) { ux_flow_init(0, ux_confirm_parameter_flow, NULL); } +unsigned int address_cancel_cb(void) { + ui_idle(); + return io_seproxyhal_touch_address_cancel(); +} + +unsigned int tx_ok_cb(void) { + ui_idle(); + return io_seproxyhal_touch_tx_ok(); +} + +unsigned int tx_cancel_cb(void) { + ui_idle(); + return io_seproxyhal_touch_tx_cancel(); +} + #endif // HAVE_BAGL diff --git a/src_bagl/ui_flow_erc20_approval.c b/src_bagl/ui_flow_erc20_approval.c index 2ff2e71af..28ed3f7bb 100644 --- a/src_bagl/ui_flow_erc20_approval.c +++ b/src_bagl/ui_flow_erc20_approval.c @@ -45,7 +45,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_approval_allowance_6_step, pbb, - io_seproxyhal_touch_tx_ok(), + tx_ok_cb(), { &C_icon_validate_14, "Accept", @@ -55,7 +55,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_allowance_7_step, pb, - io_seproxyhal_touch_tx_cancel(), + tx_cancel_cb(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_getEth2PublicKey.c b/src_bagl/ui_flow_getEth2PublicKey.c index 2156e0b56..9d2122655 100644 --- a/src_bagl/ui_flow_getEth2PublicKey.c +++ b/src_bagl/ui_flow_getEth2PublicKey.c @@ -39,7 +39,7 @@ UX_STEP_CB( UX_STEP_CB( ux_display_public_eth2_flow_4_step, pb, - io_seproxyhal_touch_address_cancel(), + address_cancel_cb(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_getPublicKey.c b/src_bagl/ui_flow_getPublicKey.c index 52b968d3c..d70396d75 100644 --- a/src_bagl/ui_flow_getPublicKey.c +++ b/src_bagl/ui_flow_getPublicKey.c @@ -1,5 +1,11 @@ #include "shared_context.h" #include "ui_callbacks.h" +#include "common_ui.h" + +static unsigned int address_ok_cb(void) { + ui_idle(); + return io_seproxyhal_touch_address_ok(); +} // clang-format off UX_STEP_NOCB( @@ -20,7 +26,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_display_public_flow_3_step, pb, - io_seproxyhal_touch_address_ok(), + address_ok_cb(), { &C_icon_validate_14, "Approve", @@ -28,7 +34,7 @@ UX_STEP_CB( UX_STEP_CB( ux_display_public_flow_4_step, pb, - io_seproxyhal_touch_address_cancel(), + address_cancel_cb(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_signMessage.c b/src_bagl/ui_flow_signMessage.c index 60b3fcafb..561bb6cde 100644 --- a/src_bagl/ui_flow_signMessage.c +++ b/src_bagl/ui_flow_signMessage.c @@ -28,6 +28,16 @@ static void dummy_post_cb(void) { } } +static unsigned int signMessage_ok_cb(void) { + ui_idle(); + return io_seproxyhal_touch_signMessage_ok(); +} + +static unsigned int signMessage_cancel_cb(void) { + ui_idle(); + return io_seproxyhal_touch_signMessage_cancel(); +} + // clang-format off UX_STEP_NOCB( ux_191_step_review, @@ -79,7 +89,7 @@ UX_STEP_INIT( UX_STEP_CB( ux_191_step_sign, pbb, - io_seproxyhal_touch_signMessage_ok(), + signMessage_ok_cb(), { &C_icon_validate_14, "Sign", @@ -88,7 +98,7 @@ UX_STEP_CB( UX_STEP_CB( ux_191_step_cancel, pbb, - io_seproxyhal_touch_signMessage_cancel(), + signMessage_cancel_cb(), { &C_icon_crossmark, "Cancel", diff --git a/src_bagl/ui_flow_signMessage712.c b/src_bagl/ui_flow_signMessage712.c index 3ffb5b023..7a52baa4a 100644 --- a/src_bagl/ui_flow_signMessage712.c +++ b/src_bagl/ui_flow_signMessage712.c @@ -2,6 +2,7 @@ #include "ui_logic.h" #include "shared_context.h" // strings +#include "common_ui.h" enum { UI_712_POS_REVIEW, UI_712_POS_END }; static uint8_t ui_pos; @@ -28,6 +29,16 @@ static void dummy_cb(void) { } } +static unsigned int _approve_cb(void) { + ui_idle(); + return ui_712_approve(); +} + +static unsigned int _reject_cb(void) { + ui_idle(); + return ui_712_reject(); +} + // clang-format off UX_STEP_NOCB( ux_712_step_review, @@ -56,7 +67,7 @@ UX_STEP_INIT( UX_STEP_CB( ux_712_step_approve, pb, - ui_712_approve(), + _approve_cb(), { &C_icon_validate_14, "Approve", @@ -64,7 +75,7 @@ UX_STEP_CB( UX_STEP_CB( ux_712_step_reject, pb, - ui_712_reject(), + _reject_cb(), { &C_icon_crossmark, "Reject", diff --git a/src_bagl/ui_flow_signMessage712_v0.c b/src_bagl/ui_flow_signMessage712_v0.c index 72c643509..46cd039c8 100644 --- a/src_bagl/ui_flow_signMessage712_v0.c +++ b/src_bagl/ui_flow_signMessage712_v0.c @@ -2,6 +2,7 @@ #include "ui_callbacks.h" #include "common_712.h" #include "uint_common.h" +#include "common_ui.h" void prepare_domain_hash_v0() { array_bytes_string(strings.tmp.tmp, @@ -17,6 +18,16 @@ void prepare_message_hash_v0() { KECCAK256_HASH_BYTESIZE); } +static unsigned int _approve_cb(void) { + ui_idle(); + return ui_712_approve_cb(); +} + +static unsigned int _reject_cb(void) { + ui_idle(); + return ui_712_reject_cb(); +} + // clang-format off UX_STEP_NOCB( ux_sign_712_v0_flow_1_step, @@ -45,7 +56,7 @@ UX_STEP_NOCB_INIT( UX_STEP_CB( ux_sign_712_v0_flow_4_step, pbb, - ui_712_approve_cb(), + _approve_cb(), { &C_icon_validate_14, "Sign", @@ -54,7 +65,7 @@ UX_STEP_CB( UX_STEP_CB( ux_sign_712_v0_flow_5_step, pbb, - ui_712_reject_cb(), + _reject_cb(), { &C_icon_crossmark, "Cancel", diff --git a/src_bagl/ui_flow_signTx.c b/src_bagl/ui_flow_signTx.c index c473e4673..89ff9173f 100644 --- a/src_bagl/ui_flow_signTx.c +++ b/src_bagl/ui_flow_signTx.c @@ -11,6 +11,16 @@ #include "domain_name.h" #include "ui_domain_name.h" +static unsigned int data_ok_cb(void) { + ui_idle(); + return io_seproxyhal_touch_data_ok(); +} + +static unsigned int data_cancel_cb(void) { + ui_idle(); + return io_seproxyhal_touch_data_cancel(); +} + // clang-format off UX_STEP_NOCB( ux_confirm_selector_flow_1_step, @@ -31,7 +41,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_confirm_selector_flow_3_step, pb, - io_seproxyhal_touch_data_ok(), + data_ok_cb(), { &C_icon_validate_14, "Approve", @@ -39,7 +49,7 @@ UX_STEP_CB( UX_STEP_CB( ux_confirm_selector_flow_4_step, pb, - io_seproxyhal_touch_data_cancel(), + data_cancel_cb(), { &C_icon_crossmark, "Reject", @@ -72,7 +82,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_confirm_parameter_flow_3_step, pb, - io_seproxyhal_touch_data_ok(), + data_ok_cb(), { &C_icon_validate_14, "Approve", @@ -80,7 +90,7 @@ UX_STEP_CB( UX_STEP_CB( ux_confirm_parameter_flow_4_step, pb, - io_seproxyhal_touch_data_cancel(), + data_cancel_cb(), { &C_icon_crossmark, "Reject", @@ -176,7 +186,7 @@ UX_STEP_NOCB( UX_STEP_CB( ux_approval_accept_step, pbb, - io_seproxyhal_touch_tx_ok(), + tx_ok_cb(), { &C_icon_validate_14, "Accept", @@ -185,7 +195,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_accept_blind_step, pbb, - io_seproxyhal_touch_tx_ok(), + tx_ok_cb(), { &C_icon_validate_14, "Accept risk", @@ -194,7 +204,7 @@ UX_STEP_CB( UX_STEP_CB( ux_approval_reject_step, pb, - io_seproxyhal_touch_tx_cancel(), + tx_cancel_cb(), { &C_icon_crossmark, "Reject", diff --git a/src_features/getPublicKey/ui_common_getPublicKey.c b/src_features/getPublicKey/ui_common_getPublicKey.c index 870509840..fe1a0bae0 100644 --- a/src_features/getPublicKey/ui_common_getPublicKey.c +++ b/src_features/getPublicKey/ui_common_getPublicKey.c @@ -5,9 +5,9 @@ unsigned int io_seproxyhal_touch_address_ok(void) { uint32_t tx = set_result_get_publicKey(); - return io_seproxyhal_send_status(APDU_RESPONSE_OK, tx, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_OK, tx, true, false); } unsigned int io_seproxyhal_touch_address_cancel(void) { - return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, false); } diff --git a/src_features/signMessage/ui_common_signMessage.c b/src_features/signMessage/ui_common_signMessage.c index 31bc78ded..047b21a37 100644 --- a/src_features/signMessage/ui_common_signMessage.c +++ b/src_features/signMessage/ui_common_signMessage.c @@ -22,9 +22,9 @@ unsigned int io_seproxyhal_touch_signMessage_ok(void) { if (info & CX_ECCINFO_xGTn) { G_io_apdu_buffer[0] += 2; } - return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, false); } unsigned int io_seproxyhal_touch_signMessage_cancel(void) { - return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, false); } diff --git a/src_features/signMessageEIP712_common/common_712.c b/src_features/signMessageEIP712_common/common_712.c index 53d4388f7..bdf64cbd1 100644 --- a/src_features/signMessageEIP712_common/common_712.c +++ b/src_features/signMessageEIP712_common/common_712.c @@ -53,9 +53,9 @@ unsigned int ui_712_approve_cb(void) { if (info & CX_ECCINFO_xGTn) { G_io_apdu_buffer[0] += 2; } - return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_OK, 65, true, false); } unsigned int ui_712_reject_cb(void) { - return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, false); } diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 0d5ac24e7..6aba49f37 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -582,6 +582,7 @@ uint16_t finalizeParsing(void) { // If called from swap, the user has already validated a standard transaction // And we have already checked the fields of this transaction above if (G_called_from_swap && g_use_standard_ui) { + ui_idle(); io_seproxyhal_touch_tx_ok(); } else { // If blind-signing detected, start the warning flow beforehand diff --git a/src_features/signTx/ui_common_signTx.c b/src_features/signTx/ui_common_signTx.c index 74caf859c..c29f3672e 100644 --- a/src_features/signTx/ui_common_signTx.c +++ b/src_features/signTx/ui_common_signTx.c @@ -65,13 +65,11 @@ uint32_t io_seproxyhal_touch_tx_ok(void) { } } reset_app_context(); - // Display back the original UX - ui_idle(); return 0; // do not redraw the widget } unsigned int io_seproxyhal_touch_tx_cancel(void) { - return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); + return io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, false); } unsigned int io_seproxyhal_touch_data_ok(void) { diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index fdbf19134..118be0a85 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -33,21 +33,15 @@ struct tx_approval_context_t { static struct tx_approval_context_t tx_approval_context; -static void reviewReject(void) { - io_seproxyhal_touch_tx_cancel(); - memset(&tx_approval_context, 0, sizeof(tx_approval_context)); -} - -static void confirmTransation(void) { - io_seproxyhal_touch_tx_ok(); - memset(&tx_approval_context, 0, sizeof(tx_approval_context)); -} - static void reviewChoice(bool confirm) { if (confirm) { - nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_SIGNED, confirmTransation); + io_seproxyhal_touch_tx_ok(); + memset(&tx_approval_context, 0, sizeof(tx_approval_context)); + nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_SIGNED, ui_idle); } else { - nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_REJECTED, reviewReject); + io_seproxyhal_touch_tx_cancel(); + memset(&tx_approval_context, 0, sizeof(tx_approval_context)); + nbgl_useCaseReviewStatus(STATUS_TYPE_TRANSACTION_REJECTED, ui_idle); } } diff --git a/src_nbgl/ui_get_eth2_public_key.c b/src_nbgl/ui_get_eth2_public_key.c index 3be40aa33..e9b2ded0f 100644 --- a/src_nbgl/ui_get_eth2_public_key.c +++ b/src_nbgl/ui_get_eth2_public_key.c @@ -4,19 +4,13 @@ #include "ui_nbgl.h" #include "uint_common.h" -static void reviewReject(void) { - io_seproxyhal_touch_address_cancel(); -} - -static void confirmTransation(void) { - io_seproxyhal_touch_address_ok(); -} - static void reviewChoice(bool confirm) { if (confirm) { - nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_VERIFIED, confirmTransation); + io_seproxyhal_touch_address_ok(); + nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_VERIFIED, ui_idle); } else { - nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_REJECTED, reviewReject); + io_seproxyhal_touch_address_cancel(); + nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_REJECTED, ui_idle); } } diff --git a/src_nbgl/ui_get_public_key.c b/src_nbgl/ui_get_public_key.c index 855e9207c..bcaccfb78 100644 --- a/src_nbgl/ui_get_public_key.c +++ b/src_nbgl/ui_get_public_key.c @@ -1,23 +1,17 @@ -#include +#include "nbgl_use_case.h" #include "shared_context.h" #include "ui_callbacks.h" #include "ui_nbgl.h" #include "network.h" #include "network_icons.h" -static void cancel_send(void) { - io_seproxyhal_touch_address_cancel(); -} - -static void confirm_send(void) { - io_seproxyhal_touch_address_ok(); -} - static void review_choice(bool confirm) { if (confirm) { - nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_VERIFIED, confirm_send); + io_seproxyhal_touch_address_ok(); + nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_VERIFIED, ui_idle); } else { - nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_REJECTED, cancel_send); + io_seproxyhal_touch_address_cancel(); + nbgl_useCaseReviewStatus(STATUS_TYPE_ADDRESS_REJECTED, ui_idle); } } diff --git a/src_nbgl/ui_message_signing.c b/src_nbgl/ui_message_signing.c index 4fd171a19..ff18abb9f 100644 --- a/src_nbgl/ui_message_signing.c +++ b/src_nbgl/ui_message_signing.c @@ -1,18 +1,12 @@ #include "ui_nbgl.h" #include "ui_logic.h" -static void ui_message_712_approved(void) { - ui_712_approve(); -} - -static void ui_message_712_rejected(void) { - ui_712_reject(); -} - void ui_typed_message_review_choice(bool confirm) { if (confirm) { - nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, ui_message_712_approved); + ui_712_approve(); + nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, ui_idle); } else { - nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, ui_message_712_rejected); + ui_712_reject(); + nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, ui_idle); } } diff --git a/src_nbgl/ui_sign_message.c b/src_nbgl/ui_sign_message.c index 93312a064..efabd82d2 100644 --- a/src_nbgl/ui_sign_message.c +++ b/src_nbgl/ui_sign_message.c @@ -29,19 +29,13 @@ static bool g_skipped; static void ui_191_process_state(void); -static void reject_message(void) { - io_seproxyhal_touch_signMessage_cancel(); -} - -static void sign_message(void) { - io_seproxyhal_touch_signMessage_ok(); -} - static void ui_191_finish_cb(bool confirm) { if (confirm) { - nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, sign_message); + io_seproxyhal_touch_signMessage_ok(); + nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_SIGNED, ui_idle); } else { - nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, reject_message); + io_seproxyhal_touch_signMessage_cancel(); + nbgl_useCaseReviewStatus(STATUS_TYPE_MESSAGE_REJECTED, ui_idle); } } From 5c4c1c6195b9ed305e834286daa47bf21dc46f7a Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 1 Aug 2024 10:20:54 +0200 Subject: [PATCH 057/102] Fixed path start CRC-32 value --- src_features/signMessageEIP712/path.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index bf7d95a0d..c0527d8f8 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -655,7 +655,7 @@ uint8_t path_get_depth_count(void) { * @return CRC-32 checksum */ uint32_t get_path_crc(void) { - uint32_t value = CX_CRC32_INIT; + uint32_t value = 0; value = cx_crc32_update(value, &path_struct->root_struct, sizeof(path_struct->root_struct)); value = cx_crc32_update(value, &path_struct->depth_count, sizeof(path_struct->depth_count)); From 8a08f158ebc2a126cc19c3f24e4b99ec7f34f773 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 5 Aug 2024 17:21:07 +0200 Subject: [PATCH 058/102] Replaced breakpoint in client code by proper assert --- client/src/ledger_app_clients/ethereum/eip712/InputData.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/client/src/ledger_app_clients/ethereum/eip712/InputData.py b/client/src/ledger_app_clients/ethereum/eip712/InputData.py index 966c47b6c..8683f1443 100644 --- a/client/src/ledger_app_clients/ethereum/eip712/InputData.py +++ b/client/src/ledger_app_clients/ethereum/eip712/InputData.py @@ -195,9 +195,8 @@ def encode_bytes_dyn(value: str, typesize: int) -> bytes: def send_struct_impl_field(value, field): - # Something wrong happened if this triggers - if isinstance(value, list) or (field["enum"] == EIP712FieldType.CUSTOM): - breakpoint() + assert not isinstance(value, list) + assert field["enum"] != EIP712FieldType.CUSTOM data = encoding_functions[field["enum"]](value, field["typesize"]) From 9b71792390495b780b55b0f6c0966a64589548ae Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 1 Aug 2024 10:21:05 +0200 Subject: [PATCH 059/102] Updated APDU doc --- doc/ethapp.adoc | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/doc/ethapp.adoc b/doc/ethapp.adoc index 618b422b5..cb77ae79f 100644 --- a/doc/ethapp.adoc +++ b/doc/ethapp.adoc @@ -45,6 +45,9 @@ Application version 1.9.19 - 2022-05-17 - Add EIP-712 amount & date/time filtering - PROVIDE ERC 20 TOKEN INFORMATION & PROVIDE NFT INFORMATION now send back the index where the asset has been stored +### 1.12.0 + - Add EIP-712 discarded filter path support + ## About This application describes the APDU messages interface to communicate with the Ethereum application. @@ -828,6 +831,12 @@ Field substitution will be ignored if the full filtering is not activated. This command should come before the domain & message implementations. If activated, fields will be by default hidden unless they receive a field name substitution. +##### Discarded filter path + +This command gives the app the absolute path of the upcoming filter which will be discarded (because it targets a field within an empty array). + +The next filter should be marked as discarded (with P1) to be able to use this given filter path. + ##### Message info This command should come right after the implementation of the domain has been sent with *SEND STRUCT IMPLEMENTATION*, just before sending the message implementation. @@ -880,8 +889,11 @@ _Command_ [width="80%"] |========================================================================= | *CLA* | *INS* | *P1* | *P2* | *LC* | *Le* -| E0 | 1E | 00 - | 00 : activation +| E0 | 1E | 00 : standard + + 01 : discarded | 00 : activation + + 01 : discarded filter path 0F : message info @@ -901,6 +913,16 @@ _Input data_ None +##### If P2 == discarded filter path + +[width="80%"] +|========================================== +| *Description* | *Length (byte)* +| Path length | 1 +| Path | variable +|========================================== + + ##### If P2 == message info [width="80%"] From 79f7676b39f6ed83badec675bb07701b059f8053 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 4 Sep 2024 17:39:04 +0200 Subject: [PATCH 060/102] EIP-712 discarded filter path support in app --- src/main.c | 2 +- src_features/signMessageEIP712/commands_712.c | 55 +++--- src_features/signMessageEIP712/commands_712.h | 15 +- src_features/signMessageEIP712/filtering.c | 161 ++++++++++++++---- src_features/signMessageEIP712/filtering.h | 9 +- src_features/signMessageEIP712/path.c | 141 +++++++++++++-- src_features/signMessageEIP712/path.h | 3 + src_features/signMessageEIP712/ui_logic.c | 24 +++ src_features/signMessageEIP712/ui_logic.h | 2 + 9 files changed, 336 insertions(+), 76 deletions(-) diff --git a/src/main.c b/src/main.c index 95cda3e08..83a5d0b05 100644 --- a/src/main.c +++ b/src/main.c @@ -214,7 +214,7 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; case INS_EIP712_FILTERING: - sw = handle_eip712_filtering(cmd->p2, cmd->data, cmd->lc, flags); + sw = handle_eip712_filtering(cmd->p1, cmd->p2, cmd->data, cmd->lc, flags); break; #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index 70509e633..05438e6c9 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -27,6 +27,7 @@ #define P2_IMPL_ARRAY 0x0F #define P2_IMPL_FIELD P2_DEF_FIELD #define P2_FILT_ACTIVATE 0x00 +#define P2_FILT_DISCARDED_PATH 0x01 #define P2_FILT_MESSAGE_INFO 0x0F #define P2_FILT_DATE_TIME 0xFC #define P2_FILT_AMOUNT_JOIN_TOKEN 0xFD @@ -70,10 +71,12 @@ void handle_eip712_return_code(bool success) { /** * Process the EIP712 struct definition command * - * @param[in] apdu_buf the APDU payload + * @param[in] p2 instruction parameter 2 + * @param[in] cdata command data + * @param[in] length length of the command data * @return whether the command was successful or not */ -uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t dataLength) { +uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *cdata, uint8_t length) { bool ret = true; if (eip712_context == NULL) { @@ -86,10 +89,10 @@ uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t if (ret) { switch (p2) { case P2_DEF_NAME: - ret = set_struct_name(dataLength, dataBuffer); + ret = set_struct_name(length, cdata); break; case P2_DEF_FIELD: - ret = set_struct_field(dataLength, dataBuffer); + ret = set_struct_field(length, cdata); break; default: PRINTF("Unknown P2 0x%x\n", p2); @@ -104,13 +107,16 @@ uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t /** * Process the EIP712 struct implementation command * - * @param[in] apdu_buf the APDU payload + * @param[in] p1 instruction parameter 1 + * @param[in] p2 instruction parameter 2 + * @param[in] cdata command data + * @param[in] length length of the command data * @return whether the command was successful or not */ uint16_t handle_eip712_struct_impl(uint8_t p1, uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, + const uint8_t *cdata, + uint8_t length, uint32_t *flags) { bool ret = false; bool reply_apdu = true; @@ -121,7 +127,7 @@ uint16_t handle_eip712_struct_impl(uint8_t p1, switch (p2) { case P2_IMPL_NAME: // set root type - ret = path_set_root((char *) dataBuffer, dataLength); + ret = path_set_root((char *) cdata, length); if (ret) { if (N_storage.verbose_eip712) { ui_712_review_struct(path_get_root()); @@ -131,12 +137,12 @@ uint16_t handle_eip712_struct_impl(uint8_t p1, } break; case P2_IMPL_FIELD: - if ((ret = field_hash(dataBuffer, dataLength, p1 != P1_COMPLETE))) { + if ((ret = field_hash(cdata, length, p1 != P1_COMPLETE))) { reply_apdu = false; } break; case P2_IMPL_ARRAY: - ret = path_new_array_depth(dataBuffer, dataLength); + ret = path_new_array_depth(cdata, length); break; default: PRINTF("Unknown P2 0x%x\n", p2); @@ -154,12 +160,16 @@ uint16_t handle_eip712_struct_impl(uint8_t p1, /** * Process the EIP712 filtering command * - * @param[in] apdu_buf the APDU payload + * @param[in] p1 instruction parameter 1 + * @param[in] p2 instruction parameter 2 + * @param[in] cdata command data + * @param[in] length length of the command data * @return whether the command was successful or not */ -uint16_t handle_eip712_filtering(uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, +uint16_t handle_eip712_filtering(uint8_t p1, + uint8_t p2, + const uint8_t *cdata, + uint8_t length, uint32_t *flags) { bool ret = true; bool reply_apdu = true; @@ -179,23 +189,26 @@ uint16_t handle_eip712_filtering(uint8_t p2, } forget_known_assets(); break; + case P2_FILT_DISCARDED_PATH: + ret = filtering_discarded_path(cdata, length); + break; case P2_FILT_MESSAGE_INFO: - ret = filtering_message_info(dataBuffer, dataLength); + ret = filtering_message_info(cdata, length); if (ret) { reply_apdu = false; } break; case P2_FILT_DATE_TIME: - ret = filtering_date_time(dataBuffer, dataLength); + ret = filtering_date_time(cdata, length, p1 == 1); break; case P2_FILT_AMOUNT_JOIN_TOKEN: - ret = filtering_amount_join_token(dataBuffer, dataLength); + ret = filtering_amount_join_token(cdata, length, p1 == 1); break; case P2_FILT_AMOUNT_JOIN_VALUE: - ret = filtering_amount_join_value(dataBuffer, dataLength); + ret = filtering_amount_join_value(cdata, length, p1 == 1); break; case P2_FILT_RAW_FIELD: - ret = filtering_raw_field(dataBuffer, dataLength); + ret = filtering_raw_field(cdata, length, p1 == 1); break; default: PRINTF("Unknown P2 0x%x\n", p2); @@ -224,7 +237,7 @@ uint16_t handle_eip712_filtering(uint8_t p2, * @param[in] apdu_buf the APDU payload * @return whether the command was successful or not */ -uint16_t handle_eip712_sign(const uint8_t *dataBuffer, uint8_t dataLength, uint32_t *flags) { +uint16_t handle_eip712_sign(const uint8_t *cdata, uint8_t length, uint32_t *flags) { bool ret = false; if (eip712_context == NULL) { @@ -241,7 +254,7 @@ uint16_t handle_eip712_sign(const uint8_t *dataBuffer, uint8_t dataLength, uint3 (ui_712_remaining_filters() != 0)) { PRINTF("%d EIP712 filters are missing\n", ui_712_remaining_filters()); apdu_response_code = APDU_RESPONSE_REF_DATA_NOT_FOUND; - } else if (parseBip32(dataBuffer, &dataLength, &tmpCtx.messageSigningContext.bip32) == NULL) { + } else if (parseBip32(cdata, &length, &tmpCtx.messageSigningContext.bip32) == NULL) { apdu_response_code = APDU_RESPONSE_INVALID_DATA; } else { if (!N_storage.verbose_eip712 && (ui_712_get_filtering_mode() == EIP712_FILTERING_BASIC)) { diff --git a/src_features/signMessageEIP712/commands_712.h b/src_features/signMessageEIP712/commands_712.h index a34d264e4..3bc3377f7 100644 --- a/src_features/signMessageEIP712/commands_712.h +++ b/src_features/signMessageEIP712/commands_712.h @@ -8,16 +8,17 @@ #define DOMAIN_STRUCT_NAME "EIP712Domain" -uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *dataBuffer, uint8_t dataLength); +uint16_t handle_eip712_struct_def(uint8_t p2, const uint8_t *cdata, uint8_t length); uint16_t handle_eip712_struct_impl(uint8_t p1, uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, + const uint8_t *cdata, + uint8_t length, uint32_t *flags); -uint16_t handle_eip712_sign(const uint8_t *dataBuffer, uint8_t dataLength, uint32_t *flags); -uint16_t handle_eip712_filtering(uint8_t p2, - const uint8_t *dataBuffer, - uint8_t dataLength, +uint16_t handle_eip712_sign(const uint8_t *cdata, uint8_t length, uint32_t *flags); +uint16_t handle_eip712_filtering(uint8_t p1, + uint8_t p2, + const uint8_t *cdata, + uint8_t length, uint32_t *flags); void handle_eip712_return_code(bool success); diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index 276fc3649..d491a10a4 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -28,33 +28,41 @@ * Reconstruct the field path and hash it * * @param[in] hash_ctx the hashing context + * @param[in] discarded if the filter targets a field that does not exist (within an empty array) */ -static void hash_filtering_path(cx_hash_t *hash_ctx) { +static void hash_filtering_path(cx_hash_t *hash_ctx, bool discarded) { const void *field_ptr; const char *key; uint8_t key_len; - for (uint8_t i = 0; i < path_get_depth_count(); ++i) { - if (i > 0) { - hash_byte('.', hash_ctx); - } - if ((field_ptr = path_get_nth_field(i + 1)) != NULL) { - if ((key = get_struct_field_keyname(field_ptr, &key_len)) != NULL) { - // field name - hash_nbytes((uint8_t *) key, key_len, hash_ctx); - - // array levels - if (struct_field_is_array(field_ptr)) { - uint8_t lvl_count; - - get_struct_field_array_lvls_array(field_ptr, &lvl_count); - for (int j = 0; j < lvl_count; ++j) { - hash_nbytes((uint8_t *) ".[]", 3, hash_ctx); + if (discarded) { + key = ui_712_get_discarded_path(&key_len); + hash_nbytes((uint8_t *) key, key_len, hash_ctx); + } else { + for (uint8_t i = 0; i < path_get_depth_count(); ++i) { + if (i > 0) { + hash_byte('.', hash_ctx); + } + if ((field_ptr = path_get_nth_field(i + 1)) != NULL) { + if ((key = get_struct_field_keyname(field_ptr, &key_len)) != NULL) { + // field name + hash_nbytes((uint8_t *) key, key_len, hash_ctx); + + // array levels + if (struct_field_is_array(field_ptr)) { + uint8_t lvl_count; + + get_struct_field_array_lvls_array(field_ptr, &lvl_count); + for (int j = 0; j < lvl_count; ++j) { + hash_nbytes((uint8_t *) ".[]", 3, hash_ctx); + } } } } } } + // so it is only usable for the following filter + ui_712_set_discarded_path("", 0); } /** @@ -226,14 +234,104 @@ bool filtering_message_info(const uint8_t *payload, uint8_t length) { return true; } +/** + * Check if given path matches the backed-up path + * + * A match is found as long as the given path starts with the backed-up path. + * + * @param[in] path given path + * @param[in] path_len length of the path + * @param[out] offset_ptr offset to where the comparison stopped + * @return whether a match was found or not + */ +static bool matches_backup_path(const char *path, uint8_t path_len, uint8_t *offset_ptr) { + const void *field_ptr; + const char *key; + uint8_t key_len; + uint8_t offset = 0; + uint8_t lvl_count; + + for (uint8_t i = 0; i < path_backup_get_depth_count(); ++i) { + if (i > 0) { + if (((offset + 1) > path_len) || (memcmp(path + offset, ".", 1) != 0)) { + return false; + } + offset += 1; + } + if ((field_ptr = path_backup_get_nth_field(i + 1)) != NULL) { + if ((key = get_struct_field_keyname(field_ptr, &key_len)) != NULL) { + // field name + if (((offset + key_len) > path_len) || (memcmp(path + offset, key, key_len) != 0)) { + return false; + } + offset += key_len; + + // array levels + if (struct_field_is_array(field_ptr)) { + get_struct_field_array_lvls_array(field_ptr, &lvl_count); + for (int j = 0; j < lvl_count; ++j) { + if (((offset + 3) > path_len) || (memcmp(path + offset, ".[]", 3) != 0)) { + return false; + } + offset += 3; + } + } + } + } + } + if (offset_ptr != NULL) { + *offset_ptr = offset; + } + return true; +} + +/** + * Command to provide the filter path of a discarded filtered field + * + * Some filtered fields are discarded/never received because they are contained in an array + * that turns out to be empty. + * + * @param[in] payload the payload to parse + * @param[in] length the payload length + * @return whether it was successful or not + */ +bool filtering_discarded_path(const uint8_t *payload, uint8_t length) { + uint8_t path_len; + const char *path; + uint8_t offset = 0; + uint8_t path_offset; + + if ((offset + sizeof(path_len)) > length) { + return false; + } + path_len = payload[offset++]; + if ((offset + path_len) > length) { + return false; + } + path = (char *) &payload[offset]; + offset += path_len; + if (offset < path_len) { + return false; + } + if (!matches_backup_path(path, path_len, &path_offset)) { + return false; + } + if (!path_exists_in_backup(path + path_offset, path_len - path_offset)) { + return false; + } + ui_712_set_discarded_path(path, path_len); + return true; +} + /** * Command to display a field as a date-time * * @param[in] payload the payload to parse * @param[in] length the payload length + * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) * @return whether it was successful or not */ -bool filtering_date_time(const uint8_t *payload, uint8_t length) { +bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded) { uint8_t name_len; const char *name; uint8_t sig_len; @@ -269,7 +367,7 @@ bool filtering_date_time(const uint8_t *payload, uint8_t length) { if (!sig_verif_start(&hash_ctx, FILT_MAGIC_DATETIME)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; @@ -291,9 +389,10 @@ bool filtering_date_time(const uint8_t *payload, uint8_t length) { * * @param[in] payload the payload to parse * @param[in] length the payload length + * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) * @return whether it was successful or not */ -bool filtering_amount_join_token(const uint8_t *payload, uint8_t length) { +bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool discarded) { uint8_t token_idx; uint8_t sig_len; const uint8_t *sig; @@ -323,7 +422,7 @@ bool filtering_amount_join_token(const uint8_t *payload, uint8_t length) { if (!sig_verif_start(&hash_ctx, FILT_MAGIC_AMOUNT_JOIN_TOKEN)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); hash_byte(token_idx, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; @@ -343,9 +442,10 @@ bool filtering_amount_join_token(const uint8_t *payload, uint8_t length) { * * @param[in] payload the payload to parse * @param[in] length the payload length + * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) * @return whether it was successful or not */ -bool filtering_amount_join_value(const uint8_t *payload, uint8_t length) { +bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool discarded) { uint8_t name_len; const char *name; uint8_t token_idx; @@ -389,7 +489,7 @@ bool filtering_amount_join_value(const uint8_t *payload, uint8_t length) { if (!sig_verif_start(&hash_ctx, FILT_MAGIC_AMOUNT_JOIN_VALUE)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); hash_byte(token_idx, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { @@ -423,9 +523,10 @@ bool filtering_amount_join_value(const uint8_t *payload, uint8_t length) { * * @param[in] payload the payload to parse * @param[in] length the payload length + * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) * @return whether it was successful or not */ -bool filtering_raw_field(const uint8_t *payload, uint8_t length) { +bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded) { uint8_t name_len; const char *name; uint8_t sig_len; @@ -461,17 +562,19 @@ bool filtering_raw_field(const uint8_t *payload, uint8_t length) { if (!sig_verif_start(&hash_ctx, FILT_MAGIC_RAW_FIELD)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; } - // Handling - if (name_len > 0) { // don't substitute for an empty name - ui_712_set_title(name, name_len); + if (!discarded) { + // Handling + if (name_len > 0) { // don't substitute for an empty name + ui_712_set_title(name, name_len); + } + ui_712_flag_field(true, name_len > 0, false, false); } - ui_712_flag_field(true, name_len > 0, false, false); return true; } diff --git a/src_features/signMessageEIP712/filtering.h b/src_features/signMessageEIP712/filtering.h index d35963cd9..8143edfb1 100644 --- a/src_features/signMessageEIP712/filtering.h +++ b/src_features/signMessageEIP712/filtering.h @@ -9,10 +9,11 @@ #define MAX_FILTERS 50 bool filtering_message_info(const uint8_t *payload, uint8_t length); -bool filtering_date_time(const uint8_t *payload, uint8_t length); -bool filtering_amount_join_token(const uint8_t *payload, uint8_t length); -bool filtering_amount_join_value(const uint8_t *payload, uint8_t length); -bool filtering_raw_field(const uint8_t *payload, uint8_t length); +bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded); +bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool discarded); +bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool discarded); +bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded); +bool filtering_discarded_path(const uint8_t *payload, uint8_t length); #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index c0527d8f8..037550440 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -13,28 +13,30 @@ #include "typed_data.h" static s_path *path_struct = NULL; +static s_path *path_backup = NULL; /** - * Get the field pointer to by the first N depths of the path. + * Get the field pointer to by the first N depths of the given path * + * @param[in] path given path struct * @param[out] fields_count_ptr the number of fields in the last evaluated depth * @param[in] n the number of depths to evaluate * @return the field which the first Nth depths points to */ -static const void *get_nth_field(uint8_t *const fields_count_ptr, uint8_t n) { +static const void *get_nth_field_from(const s_path *path, uint8_t *fields_count_ptr, uint8_t n) { const void *struct_ptr = NULL; const void *field_ptr = NULL; const char *typename; uint8_t length; uint8_t fields_count; - if (path_struct == NULL) { + if (path == NULL) { return NULL; } - struct_ptr = path_struct->root_struct; + struct_ptr = path->root_struct; - if (n > path_struct->depth_count) // sanity check + if (n > path->depth_count) // sanity check { return NULL; } @@ -45,11 +47,11 @@ static const void *get_nth_field(uint8_t *const fields_count_ptr, uint8_t n) { *fields_count_ptr = fields_count; } // check if the index at this depth makes sense - if (path_struct->depths[depth] > fields_count) { + if (path->depths[depth] > fields_count) { return NULL; } - for (uint8_t index = 0; index < path_struct->depths[depth]; ++index) { + for (uint8_t index = 0; index < path->depths[depth]; ++index) { field_ptr = get_next_struct_field(field_ptr); } if (struct_field_type(field_ptr) == TYPE_CUSTOM) { @@ -62,6 +64,10 @@ static const void *get_nth_field(uint8_t *const fields_count_ptr, uint8_t n) { return field_ptr; } +static const void *get_nth_field(uint8_t *fields_count_ptr, uint8_t n) { + return get_nth_field_from(path_struct, fields_count_ptr, n); +} + /** * Get the element the path is pointing to. * @@ -82,6 +88,10 @@ const void *path_get_nth_field(uint8_t n) { return get_nth_field(NULL, n); } +const void *path_backup_get_nth_field(uint8_t n) { + return get_nth_field_from(path_backup, NULL, n); +} + /** * Get Nth to last struct field from path * @@ -452,6 +462,27 @@ static bool check_and_add_array_depth(const void *depth, return true; } +/** + * Back-up the current path + * + * Used for the handling of discarded filtered fields + */ +static void backup_path(void) { + const void *field_ptr; + + memcpy(path_backup, path_struct, sizeof(*path_backup)); + // decrease while it does not point to an array type + while (path_backup->depth_count > 1) { + if ((field_ptr = path_backup_get_nth_field(path_backup->depth_count)) == NULL) { + return; + } + if (struct_field_is_array(field_ptr)) { + break; + } + path_backup->depth_count -= 1; + } +} + /** * Add a new array depth with a given size (number of elements). * @@ -479,6 +510,9 @@ bool path_new_array_depth(const uint8_t *const data, uint8_t length) { } array_size = *data; + if (array_size == 0) { + backup_path(); + } if (!path_update(false, array_size > 0, array_size > 0)) { return false; } @@ -633,15 +667,92 @@ const void *path_get_root(void) { } /** - * Get the current amount of depth + * Get the current amount of depth in a given path struct * + * @param[in] given path struct * @return depth count */ -uint8_t path_get_depth_count(void) { - if (path_struct == NULL) { +static uint8_t get_depth_count(const s_path *path) { + if (path == NULL) { return 0; } - return path_struct->depth_count; + return path->depth_count; +} + +/** + * Get the current amount of depth in the path + * + * @return depth count + */ +uint8_t path_get_depth_count(void) { + return get_depth_count(path_struct); +} + +/** + * Get the current amount of depth in the backup path + * + * @return depth count + */ +uint8_t path_backup_get_depth_count(void) { + return get_depth_count(path_backup); +} + +/** + * Check if the given relative path exists in the backup path + * + * @param[in] path given path + * @param[in] length length of the path + * @return whether it exists or not + */ +bool path_exists_in_backup(const char *path, size_t length) { + size_t offset = 0; + size_t i; + const void *field_ptr; + s_path tmp_path; + const char *typename; + uint8_t typename_len; + const void *struct_ptr; + uint8_t fields_count; + const char *key; + uint8_t key_len; + + memcpy(&tmp_path, path_backup, sizeof(tmp_path)); + field_ptr = get_nth_field_from(&tmp_path, NULL, tmp_path.depth_count); + while (offset < length) { + if (((offset + 1) > length) || (memcmp(path + offset, ".", 1) != 0)) { + return false; + } + offset += 1; + if (((offset + 2) <= length) && (memcmp(path + offset, "[]", 2) == 0)) { + if (!struct_field_is_array(field_ptr)) { + return false; + } + offset += 2; + } else if (offset < length) { + for (i = 0; ((offset + i) < length) && (path[offset + i] != '.'); ++i) + ; + typename = get_struct_field_custom_typename(field_ptr, &typename_len); + if ((struct_ptr = get_structn(typename, typename_len)) == NULL) { + return false; + } + field_ptr = get_struct_fields_array(struct_ptr, &fields_count); + while (fields_count > 0) { + key = get_struct_field_keyname(field_ptr, &key_len); + if ((key_len == i) && (memcmp(key, path + offset, i) == 0)) { + break; + } + field_ptr = get_next_struct_field(field_ptr); + fields_count -= 1; + } + if (fields_count == 0) { + return false; + } + offset += i; + } else { + return false; + } + } + return true; } /** @@ -680,13 +791,15 @@ uint32_t get_path_crc(void) { */ bool path_init(void) { if (path_struct == NULL) { - if ((path_struct = MEM_ALLOC_AND_ALIGN_TYPE(*path_struct)) == NULL) { + if (((path_struct = MEM_ALLOC_AND_ALIGN_TYPE(*path_struct)) == NULL) || + ((path_backup = MEM_ALLOC_AND_ALIGN_TYPE(*path_backup)) == NULL)) { apdu_response_code = APDU_RESPONSE_INSUFFICIENT_MEMORY; } else { - path_struct->depth_count = 0; + explicit_bzero(path_struct, sizeof(*path_struct)); + explicit_bzero(path_backup, sizeof(*path_backup)); } } - return path_struct != NULL; + return (path_struct != NULL) && (path_backup != NULL); } /** diff --git a/src_features/signMessageEIP712/path.h b/src_features/signMessageEIP712/path.h index 336659e85..8285d68f4 100644 --- a/src_features/signMessageEIP712/path.h +++ b/src_features/signMessageEIP712/path.h @@ -35,8 +35,11 @@ bool path_new_array_depth(const uint8_t *const data, uint8_t length); e_root_type path_get_root_type(void); const void *path_get_root(void); const void *path_get_nth_field(uint8_t n); +const void *path_backup_get_nth_field(uint8_t n); +bool path_exists_in_backup(const char *path, size_t length); const void *path_get_nth_field_to_last(uint8_t n); uint8_t path_get_depth_count(void); +uint8_t path_backup_get_depth_count(void); uint32_t get_path_crc(void); #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 11d08172b..8694cf6e3 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -59,6 +59,8 @@ typedef struct { s_amount_context amount; uint8_t filters_received; uint32_t filters_crc[MAX_FILTERS]; + uint8_t discarded_path_length; + char discarded_path[255]; #ifdef SCREEN_SIZE_WALLET char ui_pairs_buffer[(SHARED_CTX_FIELD_1_SIZE + SHARED_CTX_FIELD_2_SIZE) * 2]; #endif @@ -805,6 +807,28 @@ bool ui_712_push_new_filter_path(void) { return true; } +/** + * Set a discarded filter path + * + * @param[in] path the given filter path + * @param[in] length the path length + */ +void ui_712_set_discarded_path(const char *path, uint8_t length) { + memcpy(ui_ctx->discarded_path, path, length); + ui_ctx->discarded_path_length = length; +} + +/** + * Get the discarded filter path + * + * @param[out] length the path length + * @return filter path + */ +const char *ui_712_get_discarded_path(uint8_t *length) { + *length = ui_ctx->discarded_path_length; + return ui_ctx->discarded_path; +} + #ifdef SCREEN_SIZE_WALLET /* * Get UI pairs buffer diff --git a/src_features/signMessageEIP712/ui_logic.h b/src_features/signMessageEIP712/ui_logic.h index 9ce4ee152..d04c8db10 100644 --- a/src_features/signMessageEIP712/ui_logic.h +++ b/src_features/signMessageEIP712/ui_logic.h @@ -44,6 +44,8 @@ void ui_712_token_join_prepare_amount(uint8_t index, const char *name, uint8_t n void amount_join_set_token_received(void); bool ui_712_show_raw_key(const void *field_ptr); bool ui_712_push_new_filter_path(void); +void ui_712_set_discarded_path(const char *path, uint8_t length); +const char *ui_712_get_discarded_path(uint8_t *length); #ifdef SCREEN_SIZE_WALLET char *get_ui_pairs_buffer(size_t *size); #endif From 1140bf515e4c7b8eb21cdde293d530ea9e1dda7c Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 5 Aug 2024 18:11:45 +0200 Subject: [PATCH 061/102] EIP-712 discarded filter path support in python client --- .../src/ledger_app_clients/ethereum/client.py | 21 ++++-- .../ethereum/command_builder.py | 26 +++++-- .../ethereum/eip712/InputData.py | 75 ++++++++++--------- 3 files changed, 70 insertions(+), 52 deletions(-) diff --git a/client/src/ledger_app_clients/ethereum/client.py b/client/src/ledger_app_clients/ethereum/client.py index d9ddcae88..a6008402b 100644 --- a/client/src/ledger_app_clients/ethereum/client.py +++ b/client/src/ledger_app_clients/ethereum/client.py @@ -146,25 +146,30 @@ def eip712_sign_legacy(self, def eip712_filtering_activate(self): return self._exchange_async(self._cmd_builder.eip712_filtering_activate()) + def eip712_filtering_discarded_path(self, path: str): + return self._exchange(self._cmd_builder.eip712_filtering_discarded_path(path)) + def eip712_filtering_message_info(self, name: str, filters_count: int, sig: bytes): return self._exchange_async(self._cmd_builder.eip712_filtering_message_info(name, filters_count, sig)) - def eip712_filtering_amount_join_token(self, token_idx: int, sig: bytes): + def eip712_filtering_amount_join_token(self, token_idx: int, sig: bytes, discarded: bool): return self._exchange_async(self._cmd_builder.eip712_filtering_amount_join_token(token_idx, - sig)) + sig, + discarded)) - def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: bytes): + def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: bytes, discarded: bool): return self._exchange_async(self._cmd_builder.eip712_filtering_amount_join_value(token_idx, name, - sig)) + sig, + discarded)) - def eip712_filtering_datetime(self, name: str, sig: bytes): - return self._exchange_async(self._cmd_builder.eip712_filtering_datetime(name, sig)) + def eip712_filtering_datetime(self, name: str, sig: bytes, discarded: bool): + return self._exchange_async(self._cmd_builder.eip712_filtering_datetime(name, sig, discarded)) - def eip712_filtering_raw(self, name: str, sig: bytes): - return self._exchange_async(self._cmd_builder.eip712_filtering_raw(name, sig)) + def eip712_filtering_raw(self, name: str, sig: bytes, discarded: bool): + return self._exchange_async(self._cmd_builder.eip712_filtering_raw(name, sig, discarded)) def sign(self, bip32_path: str, diff --git a/client/src/ledger_app_clients/ethereum/command_builder.py b/client/src/ledger_app_clients/ethereum/command_builder.py index bcd505cbe..238a19b66 100644 --- a/client/src/ledger_app_clients/ethereum/command_builder.py +++ b/client/src/ledger_app_clients/ethereum/command_builder.py @@ -41,6 +41,7 @@ class P2Type(IntEnum): LEGACY_IMPLEM = 0x00 NEW_IMPLEM = 0x01 FILTERING_ACTIVATE = 0x00 + FILTERING_DISCARDED_PATH = 0x01 FILTERING_MESSAGE_INFO = 0x0f FILTERING_DATETIME = 0xfc FILTERING_TOKEN_ADDR_CHECK = 0xfd @@ -164,6 +165,15 @@ def _eip712_filtering_send_name(self, name: str, sig: bytes) -> bytes: data += sig return data + def eip712_filtering_discarded_path(self, path: str) -> bytes: + data = bytearray() + data.append(len(path)) + data += path.encode() + return self._serialize(InsType.EIP712_SEND_FILTERING, + P1Type.COMPLETE_SEND, + P2Type.FILTERING_DISCARDED_PATH, + data) + def eip712_filtering_message_info(self, name: str, filters_count: int, sig: bytes) -> bytes: data = bytearray() data.append(len(name)) @@ -176,17 +186,17 @@ def eip712_filtering_message_info(self, name: str, filters_count: int, sig: byte P2Type.FILTERING_MESSAGE_INFO, data) - def eip712_filtering_amount_join_token(self, token_idx: int, sig: bytes) -> bytes: + def eip712_filtering_amount_join_token(self, token_idx: int, sig: bytes, discarded: bool) -> bytes: data = bytearray() data.append(token_idx) data.append(len(sig)) data += sig return self._serialize(InsType.EIP712_SEND_FILTERING, - P1Type.COMPLETE_SEND, + int(discarded), P2Type.FILTERING_TOKEN_ADDR_CHECK, data) - def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: bytes) -> bytes: + def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: bytes, discarded: bool) -> bytes: data = bytearray() data.append(len(name)) data += name.encode() @@ -194,19 +204,19 @@ def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: byt data.append(len(sig)) data += sig return self._serialize(InsType.EIP712_SEND_FILTERING, - P1Type.COMPLETE_SEND, + int(discarded), P2Type.FILTERING_AMOUNT_FIELD, data) - def eip712_filtering_datetime(self, name: str, sig: bytes) -> bytes: + def eip712_filtering_datetime(self, name: str, sig: bytes, discarded: bool) -> bytes: return self._serialize(InsType.EIP712_SEND_FILTERING, - P1Type.COMPLETE_SEND, + int(discarded), P2Type.FILTERING_DATETIME, self._eip712_filtering_send_name(name, sig)) - def eip712_filtering_raw(self, name: str, sig: bytes) -> bytes: + def eip712_filtering_raw(self, name: str, sig: bytes, discarded: bool) -> bytes: return self._serialize(InsType.EIP712_SEND_FILTERING, - P1Type.COMPLETE_SEND, + int(discarded), P2Type.FILTERING_RAW, self._eip712_filtering_send_name(name, sig)) diff --git a/client/src/ledger_app_clients/ethereum/eip712/InputData.py b/client/src/ledger_app_clients/ethereum/eip712/InputData.py index 8683f1443..e2d9f3e8d 100644 --- a/client/src/ledger_app_clients/ethereum/eip712/InputData.py +++ b/client/src/ledger_app_clients/ethereum/eip712/InputData.py @@ -194,6 +194,26 @@ def encode_bytes_dyn(value: str, typesize: int) -> bytes: encoding_functions[EIP712FieldType.DYN_BYTES] = encode_bytes_dyn +def send_filter(path: str, discarded: bool): + assert path in filtering_paths.keys() + + if filtering_paths[path]["type"] == "amount_join_token": + send_filtering_amount_join_token(path, filtering_paths[path]["token"], discarded) + elif filtering_paths[path]["type"] == "amount_join_value": + if "token" in filtering_paths[path].keys(): + token = filtering_paths[path]["token"] + else: + # Permit (ERC-2612) + token = 0xff + send_filtering_amount_join_value(path, token, filtering_paths[path]["name"], discarded) + elif filtering_paths[path]["type"] == "datetime": + send_filtering_datetime(path, filtering_paths[path]["name"], discarded) + elif filtering_paths[path]["type"] == "raw": + send_filtering_raw(path, filtering_paths[path]["name"], discarded) + else: + assert False + + def send_struct_impl_field(value, field): assert not isinstance(value, list) assert field["enum"] != EIP712FieldType.CUSTOM @@ -203,22 +223,7 @@ def send_struct_impl_field(value, field): if filtering_paths: path = ".".join(current_path) if path in filtering_paths.keys(): - if filtering_paths[path]["type"] == "amount_join_token": - send_filtering_amount_join_token(filtering_paths[path]["token"]) - elif filtering_paths[path]["type"] == "amount_join_value": - if "token" in filtering_paths[path].keys(): - token = filtering_paths[path]["token"] - else: - # Permit (ERC-2612) - token = 0xff - send_filtering_amount_join_value(token, - filtering_paths[path]["name"]) - elif filtering_paths[path]["type"] == "datetime": - send_filtering_datetime(filtering_paths[path]["name"]) - elif filtering_paths[path]["type"] == "raw": - send_filtering_raw(filtering_paths[path]["name"]) - else: - assert False + send_filter(path, False) with app_client.eip712_send_struct_impl_struct_field(data): enable_autonext() @@ -233,6 +238,12 @@ def evaluate_field(structs, data, field, lvls_left, new_level=True): if len(array_lvls) > 0 and lvls_left > 0: with app_client.eip712_send_struct_impl_array(len(data)): pass + if len(data) == 0: + for path in filtering_paths.keys(): + dpath = ".".join(current_path) + ".[]" + if path.startswith(dpath): + app_client.eip712_filtering_discarded_path(path) + send_filter(path, True) idx = 0 for subdata in data: current_path.append("[]") @@ -294,57 +305,49 @@ def send_filtering_message_info(display_name: str, filters_count: int): disable_autonext() -def send_filtering_amount_join_token(token_idx: int): +def send_filtering_amount_join_token(path: str, token_idx: int, discarded: bool): global sig_ctx - path_str = ".".join(current_path) - to_sign = start_signature_payload(sig_ctx, 11) - to_sign += path_str.encode() + to_sign += path.encode() to_sign.append(token_idx) sig = keychain.sign_data(keychain.Key.CAL, to_sign) - with app_client.eip712_filtering_amount_join_token(token_idx, sig): + with app_client.eip712_filtering_amount_join_token(token_idx, sig, discarded): pass -def send_filtering_amount_join_value(token_idx: int, display_name: str): +def send_filtering_amount_join_value(path: str, token_idx: int, display_name: str, discarded: bool): global sig_ctx - path_str = ".".join(current_path) - to_sign = start_signature_payload(sig_ctx, 22) - to_sign += path_str.encode() + to_sign += path.encode() to_sign += display_name.encode() to_sign.append(token_idx) sig = keychain.sign_data(keychain.Key.CAL, to_sign) - with app_client.eip712_filtering_amount_join_value(token_idx, display_name, sig): + with app_client.eip712_filtering_amount_join_value(token_idx, display_name, sig, discarded): pass -def send_filtering_datetime(display_name: str): +def send_filtering_datetime(path: str, display_name: str, discarded: bool): global sig_ctx - path_str = ".".join(current_path) - to_sign = start_signature_payload(sig_ctx, 33) - to_sign += path_str.encode() + to_sign += path.encode() to_sign += display_name.encode() sig = keychain.sign_data(keychain.Key.CAL, to_sign) - with app_client.eip712_filtering_datetime(display_name, sig): + with app_client.eip712_filtering_datetime(display_name, sig, discarded): pass # ledgerjs doesn't actually sign anything, and instead uses already pre-computed signatures -def send_filtering_raw(display_name): +def send_filtering_raw(path: str, display_name: str, discarded: bool): global sig_ctx - path_str = ".".join(current_path) - to_sign = start_signature_payload(sig_ctx, 72) - to_sign += path_str.encode() + to_sign += path.encode() to_sign += display_name.encode() sig = keychain.sign_data(keychain.Key.CAL, to_sign) - with app_client.eip712_filtering_raw(display_name, sig): + with app_client.eip712_filtering_raw(display_name, sig, discarded): pass From ab94ac864a9d2f970213aaf7f1bdc42b08020901 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 5 Aug 2024 18:11:59 +0200 Subject: [PATCH 062/102] EIP-712 discarded filter path Ragger test --- .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 9639 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 485 bytes .../00002.png | Bin 0 -> 390 bytes .../00003.png | Bin 0 -> 364 bytes .../00004.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 485 bytes .../00002.png | Bin 0 -> 390 bytes .../00003.png | Bin 0 -> 364 bytes .../00004.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 8956 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes tests/ragger/test_eip712.py | 91 ++++++++++++++++++ 19 files changed, 91 insertions(+) create mode 100644 tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00004.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00003.png diff --git a/tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00000.png b/tests/ragger/snapshots/flex/test_eip712_filtering_empty_array/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O000041i&FGB@G=N8&E~!=z~_MMS=md7oddI)GGA>V^OS001oax3~I~l5EEqH@4&# zrId647XN%;A#dy)0oRq=8((@v4yBZ0jCz08Yu6sxpPitqsC4(1A^2HeWu1ATx<1{mP zX)CS#uzu!kChlpQJFcj4NVSfDWy|#TsbK1)v1~>e7(g9UCnnHWq(_W}R_000000000000000 b0Mq;fEy|lAlNgKm00000NkvXXu0mjf#LnKr literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f070aac76a3152f761900266742d9af3cf259e2e GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{t1ba4!+nDh2#F5e*qo`yt| zdo91^SC)Tl=RC-i8tukdJ3rn^GT~>`E&-q(hVuTKvKu-&b_pfVxiopdn$lAbp1l_@ zXP2?BJ8@Vl*(d(<`Bfh_c|W(@&AfbRLtT=VQfk5F^{+lRnMpU89K8B%5}UG)&CS)@ z?lc|B3pC5w#uQa}{`tRO?D=_{895@ST-HmG-xF=a&B(y;pzf1y?3!tB!b;T(D+aRqWLZUMv6koI4!F_;lZuSq*oY);>G8 z?Zq~xYrd{A*8EpIlkeNrhVz_GbMB3)-+tiWlsUUL-hQO;dR;?7!vDRt5m(EzoL`DQ zuxDKrmHuWTlN-zD?U~0E*Ko!EVn53lA^K^`+Xa#-i{392%3Ack$8bhxY{oLb36jkV gIrKpxf&>iCNNdby-x(^%_Xs5F>FVdQ&MBb@0I$BM#Q*>R literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00003.png b/tests/ragger/snapshots/nanosp/test_eip712_filtering_empty_array/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00000.png b/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O000041i&FGB@G=N8&E~!=z~_MMS=md7oddI)GGA>V^OS001oax3~I~l5EEqH@4&# zrId647XN%;A#dy)0oRq=8((@v4yBZ0jCz08Yu6sxpPitqsC4(1A^2HeWu1ATx<1{mP zX)CS#uzu!kChlpQJFcj4NVSfDWy|#TsbK1)v1~>e7(g9UCnnHWq(_W}R_000000000000000 b0Mq;fEy|lAlNgKm00000NkvXXu0mjf#LnKr literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00002.png b/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f070aac76a3152f761900266742d9af3cf259e2e GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|{t1ba4!+nDh2#F5e*qo`yt| zdo91^SC)Tl=RC-i8tukdJ3rn^GT~>`E&-q(hVuTKvKu-&b_pfVxiopdn$lAbp1l_@ zXP2?BJ8@Vl*(d(<`Bfh_c|W(@&AfbRLtT=VQfk5F^{+lRnMpU89K8B%5}UG)&CS)@ z?lc|B3pC5w#uQa}{`tRO?D=_{895@ST-HmG-xF=a&B(y;pzf1y?3!tB!b;T(D+aRqWLZUMv6koI4!F_;lZuSq*oY);>G8 z?Zq~xYrd{A*8EpIlkeNrhVz_GbMB3)-+tiWlsUUL-hQO;dR;?7!vDRt5m(EzoL`DQ zuxDKrmHuWTlN-zD?U~0E*Ko!EVn53lA^K^`+Xa#-i{392%3Ack$8bhxY{oLb36jkV gIrKpxf&>iCNNdby-x(^%_Xs5F>FVdQ&MBb@0I$BM#Q*>R literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00003.png b/tests/ragger/snapshots/nanox/test_eip712_filtering_empty_array/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00000.png b/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00001.png b/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..efce2dfe667940b4206fb84b1638b50b163776ed GIT binary patch literal 8956 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00002.png b/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00003.png b/tests/ragger/snapshots/stax/test_eip712_filtering_empty_array/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 1f64fb159..830d2a5d3 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -437,3 +437,94 @@ def test_eip712_advanced_filtering(firmware: Firmware, # verify signature addr = recover_message(data_set.data, vrs) assert addr == get_wallet_addr(app_client) + + +def test_eip712_filtering_empty_array(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + default_screenshot_path: Path, + test_name: str, + golden_run: bool): + global SNAPS_CONFIG + + app_client = EthAppClient(backend) + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + SNAPS_CONFIG = SnapshotsConfig(test_name) + + data = { + "types": { + "EIP712Domain": [ + {"name": "name", "type": "string"}, + {"name": "version", "type": "string"}, + {"name": "chainId", "type": "uint256"}, + {"name": "verifyingContract", "type": "address"}, + ], + "Person": [ + {"name": "name", "type": "string"}, + {"name": "addr", "type": "address"}, + ], + "Message": [ + {"name": "title", "type": "string"}, + {"name": "to", "type": "Person[]"}, + ], + "Root": [ + {"name": "text", "type": "string"}, + {"name": "subtext", "type": "string[]"}, + {"name": "msg_list1", "type": "Message[]"}, + {"name": "msg_list2", "type": "Message[]"}, + ], + }, + "primaryType": "Root", + "domain": { + "name": "test", + "version": "1", + "verifyingContract": "0x0000000000000000000000000000000000000000", + "chainId": 1, + }, + "message": { + "text": "This is a test", + "subtext": [], + "msg_list1": [ + { + "title": "This is a test", + "to": [], + } + ], + "msg_list2": [], + } + } + filters = { + "name": "Empty array filtering", + "fields": { + "text": { + "type": "raw", + "name": "Text", + }, + "subtext.[]": { + "type": "raw", + "name": "Sub-Text", + }, + "msg_list1.[].to.[].addr": { + "type": "raw", + "name": "(1) Recipient addr", + }, + "msg_list2.[].to.[].addr": { + "type": "raw", + "name": "(2) Recipient addr", + }, + } + } + vrs = eip712_new_common(firmware, + navigator, + default_screenshot_path, + app_client, + data, + filters, + False, + golden_run) + + # verify signature + addr = recover_message(data, vrs) + assert addr == get_wallet_addr(app_client) From 8a50c3cc04bb7820c4047539975a57ab3792e6dc Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 6 Sep 2024 14:07:21 +0200 Subject: [PATCH 063/102] EIP-712 amount-joins can now handle with missing token information --- src_features/signMessageEIP712/filtering.c | 4 --- src_features/signMessageEIP712/ui_logic.c | 30 +++++++++++++++------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index d491a10a4..2a41cd5a8 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -139,10 +139,6 @@ static bool check_token_index(uint8_t idx) { PRINTF("Error: token index out of range (%u)\n", idx); return false; } - if (!tmpCtx.transactionContext.assetSet[idx]) { - PRINTF("Error: token not set (%u)\n", idx); - return false; - } return true; } diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 8694cf6e3..1914506db 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -415,19 +415,21 @@ static bool ui_712_format_uint(const uint8_t *data, uint8_t length, bool first) * @return whether it was successful or not */ static bool ui_712_format_amount_join(void) { - const tokenDefinition_t *token; - token = &tmpCtx.transactionContext.extraInfo[ui_ctx->amount.idx].token; + const tokenDefinition_t *token = NULL; + if (tmpCtx.transactionContext.assetSet[ui_ctx->amount.idx]) { + token = &tmpCtx.transactionContext.extraInfo[ui_ctx->amount.idx].token; + } if ((ui_ctx->amount.joins[ui_ctx->amount.idx].value_length == INT256_LENGTH) && ismaxint(ui_ctx->amount.joins[ui_ctx->amount.idx].value, ui_ctx->amount.joins[ui_ctx->amount.idx].value_length)) { strlcpy(strings.tmp.tmp, "Unlimited ", sizeof(strings.tmp.tmp)); - strlcat(strings.tmp.tmp, token->ticker, sizeof(strings.tmp.tmp)); + strlcat(strings.tmp.tmp, (token != NULL) ? token->ticker : "???", sizeof(strings.tmp.tmp)); } else { if (!amountToString(ui_ctx->amount.joins[ui_ctx->amount.idx].value, ui_ctx->amount.joins[ui_ctx->amount.idx].value_length, - token->decimals, - token->ticker, + (token != NULL) ? token->decimals : 0, + (token != NULL) ? token->ticker : "???", strings.tmp.tmp, sizeof(strings.tmp.tmp))) { return false; @@ -456,13 +458,23 @@ void amount_join_set_token_received(void) { * @return whether it was successful or not */ static bool update_amount_join(const uint8_t *data, uint8_t length) { - tokenDefinition_t *token; + const tokenDefinition_t *token = NULL; - token = &tmpCtx.transactionContext.extraInfo[ui_ctx->amount.idx].token; + if (tmpCtx.transactionContext.assetSet[ui_ctx->amount.idx]) { + token = &tmpCtx.transactionContext.extraInfo[ui_ctx->amount.idx].token; + } else { + if (tmpCtx.transactionContext.currentAssetIndex == ui_ctx->amount.idx) { + // So that the following amount-join find their tokens in the expected indices + tmpCtx.transactionContext.currentAssetIndex = + (tmpCtx.transactionContext.currentAssetIndex + 1) % MAX_ASSETS; + } + } switch (ui_ctx->amount.state) { case AMOUNT_JOIN_STATE_TOKEN: - if (memcmp(data, token->address, ADDRESS_LENGTH) != 0) { - return false; + if (token != NULL) { + if (memcmp(data, token->address, ADDRESS_LENGTH) != 0) { + return false; + } } amount_join_set_token_received(); break; From ff9028986c74b54d48b60655fc30cf0efac036e4 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 11 Sep 2024 17:06:01 +0200 Subject: [PATCH 064/102] Python client now handle missing token information for EIP-712 amount-joins Client now sends token information for EIP 712 amount-joins only when needed instead of all at the beginning of the flow. --- .../ethereum/eip712/InputData.py | 46 ++++++++++++++----- tests/ragger/test_eip712.py | 16 +++---- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/client/src/ledger_app_clients/ethereum/eip712/InputData.py b/client/src/ledger_app_clients/ethereum/eip712/InputData.py index e2d9f3e8d..43f88f3af 100644 --- a/client/src/ledger_app_clients/ethereum/eip712/InputData.py +++ b/client/src/ledger_app_clients/ethereum/eip712/InputData.py @@ -17,7 +17,8 @@ # global variables app_client: EthAppClient = None filtering_paths: dict = {} -current_path: list[str] = list() +filtering_tokens: list[dict] = [] +current_path: list[str] = [] sig_ctx: dict[str, Any] = {} @@ -194,18 +195,36 @@ def encode_bytes_dyn(value: str, typesize: int) -> bytes: encoding_functions[EIP712FieldType.DYN_BYTES] = encode_bytes_dyn +def send_filtering_token(token_idx: int): + assert token_idx < len(filtering_tokens) + if len(filtering_tokens[token_idx]) > 0: + token = filtering_tokens[token_idx] + if not token["sent"]: + app_client.provide_token_metadata(token["ticker"], + bytes.fromhex(token["addr"][2:]), + token["decimals"], + token["chain_id"]) + token["sent"] = True + + def send_filter(path: str, discarded: bool): assert path in filtering_paths.keys() - if filtering_paths[path]["type"] == "amount_join_token": - send_filtering_amount_join_token(path, filtering_paths[path]["token"], discarded) - elif filtering_paths[path]["type"] == "amount_join_value": + if filtering_paths[path]["type"].startswith("amount_join_"): if "token" in filtering_paths[path].keys(): - token = filtering_paths[path]["token"] + token_idx = filtering_paths[path]["token"] + send_filtering_token(token_idx) else: # Permit (ERC-2612) - token = 0xff - send_filtering_amount_join_value(path, token, filtering_paths[path]["name"], discarded) + send_filtering_token(0) + token_idx = 0xff + if filtering_paths[path]["type"].endswith("_token"): + send_filtering_amount_join_token(path, token_idx, discarded) + elif filtering_paths[path]["type"].endswith("_value"): + send_filtering_amount_join_value(path, + token_idx, + filtering_paths[path]["name"], + discarded) elif filtering_paths[path]["type"] == "datetime": send_filtering_datetime(path, filtering_paths[path]["name"], discarded) elif filtering_paths[path]["type"] == "raw": @@ -353,17 +372,20 @@ def send_filtering_raw(path: str, display_name: str, discarded: bool): def prepare_filtering(filtr_data, message): global filtering_paths + global filtering_tokens if "fields" in filtr_data: filtering_paths = filtr_data["fields"] else: filtering_paths = {} + if "tokens" in filtr_data: - for token in filtr_data["tokens"]: - app_client.provide_token_metadata(token["ticker"], - bytes.fromhex(token["addr"][2:]), - token["decimals"], - token["chain_id"]) + filtering_tokens = filtr_data["tokens"] + for token in filtering_tokens: + if len(token) > 0: + token["sent"] = False + else: + filtering_tokens = [] def handle_optional_domain_values(domain): diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 830d2a5d3..a363f1267 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -242,14 +242,14 @@ def __init__(self, data: dict, filters: dict, suffix: str = ""): "name": "Advanced Filtering", "tokens": [ { - "addr": "0x6b175474e89094c44da98b954eedeac495271d0f", - "ticker": "DAI", + "addr": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + "ticker": "WETH", "decimals": 18, "chain_id": 1, }, { - "addr": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", - "ticker": "WETH", + "addr": "0x6b175474e89094c44da98b954eedeac495271d0f", + "ticker": "DAI", "decimals": 18, "chain_id": 1, }, @@ -258,20 +258,20 @@ def __init__(self, data: dict, filters: dict, suffix: str = ""): "value_send": { "type": "amount_join_value", "name": "Send", - "token": 0, + "token": 1, }, "token_send": { "type": "amount_join_token", - "token": 0, + "token": 1, }, "value_recv": { "type": "amount_join_value", "name": "Receive", - "token": 1, + "token": 0, }, "token_recv": { "type": "amount_join_token", - "token": 1, + "token": 0, }, "with": { "type": "raw", From 6efc9cb465f948884080233dd150e3d69bc4b555 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 11 Sep 2024 17:16:26 +0200 Subject: [PATCH 065/102] Add Ragger test for missing token in EIP-712 amount-join --- .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11776 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11674 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 489 bytes .../00002.png | Bin 0 -> 343 bytes .../00003.png | Bin 0 -> 370 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 489 bytes .../00002.png | Bin 0 -> 367 bytes .../00003.png | Bin 0 -> 342 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 489 bytes .../00002.png | Bin 0 -> 343 bytes .../00003.png | Bin 0 -> 370 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 489 bytes .../00002.png | Bin 0 -> 367 bytes .../00003.png | Bin 0 -> 342 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10926 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10772 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes tests/ragger/test_eip712.py | 111 ++++++++++++++++++ 41 files changed, 111 insertions(+) create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00005.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00003.png diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 zcmeHtX;_kL+pcDFX|v>zR#s-Fu2trQqD^X=Lr!TB^MDBKr?vO~_WSKW``ADB{{Fnr4~_$PxbOS9#`8Qc9yr=t z$!}NQE+Zo&f5rNelZ=e)sEo`8_pKX%PtJAyZ6zafwDHQN^DglveCAl(kJe$`o1{Sg z=I_VjZ4MtdI{tXC^|luqoi^lI*la!i$KDIuqP7W>CtHV=Ra7@@R13iJx?bA6*8 z`Skcge{e(5)e{F~+Sf@TAej{AMtuv%4a$d4%F6G~OWC~D#zJo6@p9R;y#q4mx7|%C z|M%DbHp_o;IIQ(I?0Cnj4x_W96ZlT+{jny8GA(Jko7S^aCQODK+ge)a;dq*ExAb%Y z8ILzqvQup~YD!DtdbxguwgBIT(3gidrAi$vVm6W4XKt8i()k81wL6f;zd{~z7h4-t z^fCzBu(Xue=2KhS5O?r!If3{xC;&HfV8`L|2UkE_{!@nZUcT_7`IFZy<-mIivQIkk z*GB#G-XV>*0>7YyEUz40g`~GXIgDpSSec z74>syx*OJwfP13tvPr4B3jZrzfz4hZB|=WC_WJs|>CE=A*c<;_LW8yuu3))yh68E; z7fJsIwUHl9XoYHxu5Hw>dmEMngW;Lswcfj%AhLFc!Bhg4$Bj*_Iof_;+g)q~!K*Q> zMGwUq8L_MwJWj62{_`+nR}l~J77PaCX3x)sRN^3tX{&(^H|$R2hJfyo$f-w+Q1-lL z;?r@%580Jh{C}=Yf3N9UVj0sVXcG^Zl1?m2V!k4V$QXny6}dH2gW|r1 zhcfFyk{JF57gyIXJUungs$%f2ezW^6VhC=C!D8XVz{;6EzP?@Ka}Bng#%$Et)#Pq< z?wTyKkzeaeBEmhW`gYV$0k|Fext?n3>h#7M3?_`;)zyW^<3kGWQ0U??Ck?Z`u-%7b3Ktl7%NEc<2@g+eIQ# zc6RpRLuq!@RuU<~pm;7`^@a7jvLkL5*ImCF7u!qi+WJ>kR)l}`MH3!T)y)2j9W$DwvNqH4XQ+U93a_L{jp6q>oYIVU|q z;5ZV*(Wdd@h@}Q7`z`51hrBWK#acjubGcel7$?M_*iLdHq$uD_;k35r)5H>TYBq1l z1a^^=UsCru0Ow)iV6!V6Pv=8DX>r~(VU-@DIvhOQ=&f5oFpcxh?i#1|_XCbvScq9m zf|Q{R>%DY=-7t?AH-o`foA;K6gqoo2(bS6uFdO;2bG~9vx!j(g<)usl1*wV>5icmX87ETJfD-UN(3W z1Nc;Ol%3xO7~R^q8q=Fy(9`688mgOgsjAm(iO;W*rcoZ(0zcMp`;4!Be1)pd^|x}l zAsl;}zr41#CKPFU7TKdaHbMRlw-sS|SzY76y@1izyYHMaez5^Y{1qXVJA;VZS#VZ8-alGiH8aCyn8)Kqws7Aq z%}{IUp+;IC$LEyf*2tF*CWFAm8k*lMIBDzl;OzSqzjikInRoZ_(G0!i7mp}XrqY0> z;4BDwTh=?d8D(%gFugn8)aSHf?LQZaS|aH(e>41=akf{nFVdpS2{RVVoputhp45gO z9yf8T{uUuz(`)jvqiQ@{&YFH~yG!$|_)3RbH)S#@Nvyh-5IOFQD zZSrmDmza9@(`y`N!b9OElm&~h7d3uv2XOk1&Lma!u zQXrKsY^=e0SYE7~&vGh!#TjypLAIg8ZX{Y)^0jYq&Q)o?h_zut(}R}BXT;(*Dk#Cm zVg)p_zjh7pTnV?+JhN78RJpnL2Y+V;0__{<5gE9z0Z#Hwu2}5Av#>Lyi9F?&zlyg_ z0=}NVH`6&;0JaOfh!T&J&*bsczsGVk%#qRrL5y9p046N1YLChOA{7G>_3 z)RDJdrKYCkQ-9v{Ste&y5an8|C{95gAGFOE=jZnE8ogRs1}tH{^M*uU)#)Udhfs%p zWp-ak`KO^&a>K-CF<(S6xK(Q>o5@;VVFe;w+wJ@nhm+ zU4%-o@ZC4mwxP~{3!_hL0BYds$&!7x`5)CPN#JviPc_wlV~6xEsT##{xB6GIZv}&Q z7&``a6d-y7VZ`?FDFdmQY0u>2)CU=>^S$4Rw)f?Bl)B5Y71h<%caae92X`cE?V?pf znPX?npKSih_w0G+j7E2|nV*d&r&!!msQ$yutGYcJ4kQ;{SJ$txCVd^6Kt&Pmc{&)g zx+e+iRM}2pH_ae2JQ7~zA*GDdUG<-V0^J*tHg78+x9^qfw?C1)?i0-hyuxlb_cFc} zp_a5Za<1^|d|*L%RBl>?sTz9Q7Li-@Vw(7Us6lbqt;6!HM;<2E9*^* zGoIGs!H3k`MdI2?ZfudCf16JM?q+War1f0lQ>VD$Y%Ol|%}VLhq&v;Wt(TH4q<4Eu ze1bXxkFjy!eT{3$Oa&IQb^o$KGJ3|FyUYfni;ZK`f{Qe$tb{C|-$<)K{k^cy=`mGiw8!Izf{OlWwoLJfc7&o?4B-*yihR{@(~Exg&SLtVGh z4c6>LQiwiT9oqc+4?F`yX*<>Vbtm!VkQ`dEFiY|x6vC*c__$uC9?H&?NKZx^u`7Uyw z*7P+5woQ9U3CMcWpcZ7qxI{uUPvhU;R90Hr3k@j(l`faTHMas%jEz53(B`NAK@aS`iX~vTjdX zPpvqY4mz#Qx_(41#&==7qa(Q&MPf80zx|kO|5`T-^*P&{EnS{b_f0k|jkhB(9D{S! zXr!o*PI1l8VNcO#M>Ozj0O)#mB~dzjGa=)p9!MQqfr5S!8Uud*JH~KA4PubBdk*F#xC3 zq*x*l7|f>4b5JIvy^)=|aZjD{$BG4``4WLcI;B=?=Fes38TIGRK`8n?1R-8JZKMs> z2KyQSyL%*wu%P@7Z8?*=%}xykNiJPPVpRp`(`M|r{IQuxZ5=KHg&p_Oin=z}V)P{S zihmi&0Wo6e5X9n7n)EuqNWHZ%^saE4VAFsjg_duwcb>pZ;S09#8FB_1?6MC_Ph->(`8y!zlFp)f_@ zU^LxY&d8@$xd}r#P(L}8BTD|b9PEoKM4{gale{X}`H&Kl^~}QkRB<(xtIw1V^vzz@ z%71F>=?36{DTX_m^aLn#a07Aao#bE+%DiIJ;)8RJZV^;{IcKwKmfpH*+f89S`obFQ zL>2VU+oVbW2yqsKu_k7-0arLS|C~ay-nOT0As@UYU>Y9TWbI2it%pcZEvmxsam3gA&3MF|>NFTN<4^*pQY69ly5Rmpp~h@YL!d{#YHzpS5(IvW7AZMh7_ zw}ilthuTIXulf4=?jm@9B<_h0DiF;l4*-uxZmLTW#O|Jf_xaU*7s@{B8rMUd9>F`ql2n#0dT4uf?;u%j4s>4T|GNZWo^WH#BdtgI}k$@)xLKTM%r)o2WC zYvc9K9Kg|N&Ka-EMFTmOj+Lpq_XPa;;q=#n;YK@uwbIEY9<3IBKoT>ndEqJ9pSass zkjjekp1@=f8qBtou>Tkt5PdSPqRGVV0r4w za%(j$ft}`R5w}(K=km>emspkNM#Y8EA?D@Y^?#_8*fRldVQo$K?F>iXB}jdDhQC-Gk~Yv$w?T6Sa1By1s&%ye+?HBR(jn*_zw) zBA3D?aqkdFjsJt$_(B?nLNR|k`*ZFU_nk10w%!L>s(Y#EN7c{Jyf$nT3`XasPqDNs z#UM23ZI~x*iIQk^$5UwbazqL+(!#4m5j34lSl9%v7JI6g(G)CHrN3~rr0c601oBd? zrz5G**@{oOtfr=h!6;{1KK$UvN$(XfB^vB|xjo0?-sEX3O&%IaK;c*sIA?kzz(&Mf zqKKb)HFvmX0HSHe0{I3D=e?7!?Ef3f6T(MW1JD*kVj?EF7LWRx+-d2+lD&TsWaU_8 zoU125hU8Gj3D230VVuJbI`ys7N1V0;ReUbKq~Jy^&3Mp8Pfrh!b|Q`%?sC3>7($mQ zKl2}&Lh|W0H;zTH=jP^Sw_k0fhb8J&48Edngsk&lR7Ni?S05KgS)WLTRhYNQMP6w( zN&|FJu5}V1x4el1h_=aoXS$BLk6InDI2$wnJZUulxt#jg@pym<^Zj>o1^f*88$|^zPh5{FJLh3 zlIn4T#MDD6JE&<27%UHdxQ52d$jCsW(Tpd<_-=}J26y#p)IfxVYsT@*-=vM*9#2)$ zuQXGJ%=;X~$6N=|@V^+td@s8`dKlfnH_B`P4w=E9B#EF-HOurF!eAosU?CL+L$XcB zWDi}Z>OcH&RNXWPGB*CtMeOVe{3gsm~fLc<$-i{dC*tPD{NvfcZ9vuF5X!XX?(iZ9BMLdxuqmz zsw*l&b7ehNxn_%k2_(FN#*{VE)0r&JYu-;i*Ri}JY-b0BX5CwK3HGT(&+kbdxi(8U zCd}6B3R-^^gV?9K0(IJr&N&#g-h)3g*Oci4+cMg^G1f7`f=&eeOzyF_K+F16ef?&h zVV6+nQyb$1ug*07?Pb$~iw{5BV1PK?t!rgeLVT|AE%%hEtG$3_6lv2Pr6L~u6*?dG z3&v8=DTKb5{}hEGo7 zowFi(oa>N@73O%k$Xgps{)S)TlTnz1H4S>@F-bM1Tb+G=jxXFNuYj#q***LHL0y#g zK@Vj;quI^7^nde;2)uBJGl|dby7{8Ig>~xF;6JCa-8*o;QbW_beda}fGyxtTe{j;` zQ%xg==A$i#7vxBJv12$j(;_GvSLIsEqDa^;kzBiBKSXSaCCW?H9oh+;Q^IAK>i% zDOR1^*K26}_?*$wO)QOPF9om^Dy*{SF&Fa%=yoKM5%cNfWB$a0nV^xI#yD)NPtgRF zv*IHLcg(g##Gor!_CzIQoC|1qkBXS^PiAKQ(v#3sl+`txSE(U(!Z*{J@ySz7!rOpG z)-UOPeimg9Q+ydzWE$42s`OM)92MVT(8ijFsE8V!#1d4U`)Nx2o@u~TWauSNNmHhT zq44fFfjJr0ts$$RdLaplDt4NvYs=UrXB{ZVGV7YL-geGW4%E^z=P^RD3(eF1{2@vO zn@<+0=IjaV$wPrI+k&cJRbP7HC87VTj0uRr=ck&9-w$P_T(XFH+<|OSGy-|6{(FG) z@44203=IAc&}z-W)fMP-G~LZI-qI>e@R>rdmV*pTK>?tDdiEJfK}-Fr}rX;YTYr#nJ+BLBOP^QicN51wiDG5Fb2} z0HdSG#{~risO)UZie@aY8A5jZpCcncqiSo*>>9_tR=j_^&fUee!ArLqV^hN&3Wc)I z@L?*l;@R2XW~cA!7xe|8Y4eF~_P=IIK(h~SFp2up!oo0b5P1OvNaPL<4pQ+9(qX#j zWbr3EYKa#%;x2ueB>f9Hya^v(=gzp~+ZFb<95;A3uL2iFuO~Hy(SdGHqtPm^`_Pu? zboxIy0nn0neh@1hVntpt9LyrtrGyu~q%OSisa01~b7}?-`^NkT-ulY zbLJVsUxso#(X!U9x_>r02$0xkcND$knl{|1SF!mC2WD0A@ss`2j8FrBCWtI& zQ2u8BU5N&R2qcmN>$}CqTeV6faFCU&tH0D@NON|6{)sl=7;fwh+7h${P~wAf0Mh^p zlU|EfmV19ibvfNoUk1wi|9=3eV!~PPPcB!t2{8U`_ijN z#5Ucm*yTFs!bj}*N6DI&3H)%}(9WGTU_Ueef>_}#O#pMDuFA^Bt(joygL4^P$3lxH z08RH1nejU?;*fHMOT6pSeDI;VQd4&4VdK&Lcv_l0XaK`1{>%;b6xNS@*O7M^1C~q3 ziD7=&*7OV*^uRwr(0vUIcMFFTx$uv_qwJC5wS2!hfaArSaH7QtPzQ*>!ILWfrQj~;8E)i+;d8%@g57Cau^!(uQc-@UWW7TTkQbJ5Sdk&TIW z{s|t(i#!`c^?@=H`c^{VBTAUAlXNN6KpU(GOltspr$_+LA$R@2V1NjiZ>aBM6Bb9?TbDFn`QG5PkU zrptEJ7b5jv3pN|okEtAyMWzFkQopZe@mBD8Ib?w+pch%l{qbM%r;aaDSXh&97YJk1jqL~ z_o?!|e_mYHZ;v$dDxJ4_dgR5QkLR4kqQPRJLx;sp^wx-p#!Y`;G+j9NKw($E*w!+W z7X)(Oo1T;gfg~@P@+4g4)dC5a|Nnflg=?95qm+uFZw|Xl_J!1D-wf~snU;!k??f4m z!&i12t4~*6lfj3`sN*a_$4AO-WMJgg2*a!)cgfS0*$(cKOHPl=l~O%E*_>mr*i0t# z=Gv-aG#S)66so<5p{L_3g2o?}EA^jaja65FZd`63x>hMc)@X`eaPwCPmQEl#WB6cS z^lcm!ixZDOn$sH&gXXC9hc?u4gBp%jpLc?cVPS`O?Zu++;GJ_U{F}V%p?JbM96c ztd$IhRt4)96m*~y$6ojn;T;qV?id5T^d(cl-bywDzsKFab;+WsZaOoJxO#=80}2i- zlWKnDG*xl8Ju3Z0>O78BwuG-i<0D=B z$=ERoUfoEG;6hAV;T6;y7-;It5#9YZxb|q(Dg&+_4K0YZW5JL*R9Ws8(YbfCX;s(a z%GnzbqK&+*0sr~i@0+VnvzRfCtPW9pLr}mSa;~s6=zbD^^?-n1{E9s9yBTBM_?nS# zJj=MrV4+9lmle^D4PE}rB`;3G1o zuWy(ZK8uBs)4jv(#oC`u`cIFLbSDrn^zR!r8;MnyjK*hHNyUvSHPv6{0!rHRK|20z zq~!t0&UQ>>2h?5+ecu_9)BWiv?>)IXYOUmM@$>hXtXyw@zIY>(;zuOxJGC*-0g1$o zy1D#`$tFXe2j3mBLT|@aCkI#W>Me4O#7t2Us*T`oTh2Kf$N2B{YaeMY>5S7E!7iB! z27BRO8NLBhUK!cjdwbY3Ut?U;5oeN{3~goO?nW-aq!a2~cFG!@b1VHP>lK!^bylJ^ z14CrUk>9TrMPF~rvo($_&qz7rHu(wOS6wD56CDtXch#za`As8peoG%d}I20 z;)17qblOxHYTXO_fZyWNHR2YL=tP9OOO^~%l~Tv2%1i0(?UBbHk$qUp4h2J7zRj<@Mb2cf#F3Gm0cf_hJFshVab=o%NAO-�L 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 U7e0muD!W0J=C&6xX1DMEAEFp6#Q*>R literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-False-True/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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%0Aa;NPSO#S4f9k=&=)tcC@sr4R9OtosSUZJ<{;4 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 A0RR91 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_missing_token-True-False/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O00006_6ljWr=FfB?nBMN=%t+CxGP`@J=3H6GH})a)bUyv!7~Tr z#MjW~L-zFg5QK)3_H~a00000NkvXXu0mjf9sJ$$ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-False-True/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f27e25bb7787d9c881c2ab0c5f185c27b30b25f1 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^KlARZl6mM{tzLgn>NTgvvGV^i{U;J_cyHM|{PPNs`*^~2NAWfP17G&2 zIao`+tMEPWEw+1(n>+(ULZsTRg)gIK-!J;UUw`YznzroE`m1h)oS5(b?aHgonaa$S zyE=S#M*EsP{&&fJbxh}HrcnJzZLPAOTir@(<#Lat>23;Y;fcfA!gObdDQJ-a36$OMZT^m~IWD$sy~fVw>G~jV``lCXlu0zNDo@rFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O00006_6ljWr=FfB?nBMN=%t+CxGP`@J=3H6GH})a)bUyv!7~Tr z#MjW~L-zFg5QK)3_H~a00000NkvXXu0mjf9sJ$$ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..864ee3753bc784505414c06e0e00bf5f6cf2297b GIT binary patch literal 367 zcmV-#0g(QQP)JBu;81vI}cuhd~9*dkt9{>R0w(RbPR;2~-Vm(|v#fcVM5$mUxIbMiCW|+UfOM^w9 zAqdFXFJae1&_?%+_kIk`AQSz|R60b&PCL)UKr z)+U1Pr=b7<0FX2O4e;PPw;PRPB`ih)#7KY`2@oRz_yf~W0002s7jN(-aDUC;)4%`# N002ovPDHLkV1g6lnXdo< literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00003.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..087939498cbfa25d44f33d8682df34f6b6451a2a GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K>ba4!+nDh2#WL~p@07Jm` zSH3&`Pkg5Lx1%d&vx+8T^{nsz7}PhV?J=AJ)HVJ0i@S}_U0jOOXD!pSt;`nOc*Z3t zey{ZhsbafJz8&Z9$yPK*f5~6yZ*F`^JwftgjHSo?hBrXw&KJ*bv0YMM@F(tXv8z18 zgWRtx+syP=f4#YJ<*PSa*4#e-{q;9%_e&iW-_-wm319nJw7P3U{r;I&p3zI`v mEVp)?)*Q^K4-6V8nDb29*=XtVogZ{~K_Z^6elF{r5}E)-W}1Zn literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_missing_token-True-False/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O00006_6ljWr=FfB?nBMN=%t+CxGP`@J=3H6GH})a)bUyv!7~Tr z#MjW~L-zFg5QK)3_H~a00000NkvXXu0mjf9sJ$$ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-False-True/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f27e25bb7787d9c881c2ab0c5f185c27b30b25f1 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^KlARZl6mM{tzLgn>NTgvvGV^i{U;J_cyHM|{PPNs`*^~2NAWfP17G&2 zIao`+tMEPWEw+1(n>+(ULZsTRg)gIK-!J;UUw`YznzroE`m1h)oS5(b?aHgonaa$S zyE=S#M*EsP{&&fJbxh}HrcnJzZLPAOTir@(<#Lat>23;Y;fcfA!gObdDQJ-a36$OMZT^m~IWD$sy~fVw>G~jV``lCXlu0zNDo@rFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O00006_6ljWr=FfB?nBMN=%t+CxGP`@J=3H6GH})a)bUyv!7~Tr z#MjW~L-zFg5QK)3_H~a00000NkvXXu0mjf9sJ$$ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..864ee3753bc784505414c06e0e00bf5f6cf2297b GIT binary patch literal 367 zcmV-#0g(QQP)JBu;81vI}cuhd~9*dkt9{>R0w(RbPR;2~-Vm(|v#fcVM5$mUxIbMiCW|+UfOM^w9 zAqdFXFJae1&_?%+_kIk`AQSz|R60b&PCL)UKr z)+U1Pr=b7<0FX2O4e;PPw;PRPB`ih)#7KY`2@oRz_yf~W0002s7jN(-aDUC;)4%`# N002ovPDHLkV1g6lnXdo< literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00003.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..087939498cbfa25d44f33d8682df34f6b6451a2a GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^K>ba4!+nDh2#WL~p@07Jm` zSH3&`Pkg5Lx1%d&vx+8T^{nsz7}PhV?J=AJ)HVJ0i@S}_U0jOOXD!pSt;`nOc*Z3t zey{ZhsbafJz8&Z9$yPK*f5~6yZ*F`^JwftgjHSo?hBrXw&KJ*bv0YMM@F(tXv8z18 zgWRtx+syP=f4#YJ<*PSa*4#e-{q;9%_e&iW-_-wm319nJw7P3U{r;I&p3zI`v mEVp)?)*Q^K4-6V8nDb29*=XtVogZ{~K_Z^6elF{r5}E)-W}1Zn literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_missing_token-True-False/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..85b8c5362b9ccd781bdc6c95de3ce2bd603eca5c GIT binary patch literal 10926 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-False-True/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..ae760ec3853fb452807d3bf861bdc10e1d371dcc GIT binary patch literal 10772 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 S+d#J`$lTQCTJ;r=g#QJ>j|Hm$ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_missing_token-True-False/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index a363f1267..90f8022d6 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -528,3 +528,114 @@ def test_eip712_filtering_empty_array(firmware: Firmware, # verify signature addr = recover_message(data, vrs) assert addr == get_wallet_addr(app_client) + + +TOKENS = [ + [ + { + "addr": "0x1111111111111111111111111111111111111111", + "ticker": "SRC", + "decimals": 18, + "chain_id": 1, + }, + {}, + ], + [ + {}, + { + "addr": "0x2222222222222222222222222222222222222222", + "ticker": "DST", + "decimals": 18, + "chain_id": 1, + }, + ] +] + + +@pytest.fixture(name="tokens", params=TOKENS) +def tokens_fixture(request) -> list[dict]: + return request.param + + +def test_eip712_advanced_missing_token(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + default_screenshot_path: Path, + test_name: str, + tokens: list[dict], + golden_run: bool): + global SNAPS_CONFIG + + test_name += "-%s-%s" % (len(tokens[0]) == 0, len(tokens[1]) == 0) + SNAPS_CONFIG = SnapshotsConfig(test_name) + + app_client = EthAppClient(backend) + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + data = { + "types": { + "EIP712Domain": [ + {"name": "name", "type": "string"}, + {"name": "version", "type": "string"}, + {"name": "chainId", "type": "uint256"}, + {"name": "verifyingContract", "type": "address"}, + ], + "Root": [ + {"name": "token_from", "type": "address"}, + {"name": "value_from", "type": "uint256"}, + {"name": "token_to", "type": "address"}, + {"name": "value_to", "type": "uint256"}, + ] + }, + "primaryType": "Root", + "domain": { + "name": "test", + "version": "1", + "verifyingContract": "0x0000000000000000000000000000000000000000", + "chainId": 1, + }, + "message": { + "token_from": "0x1111111111111111111111111111111111111111", + "value_from": web3.Web3.to_wei(3.65, "ether"), + "token_to": "0x2222222222222222222222222222222222222222", + "value_to": web3.Web3.to_wei(15.47, "ether"), + } + } + + filters = { + "name": "Token not in CAL test", + "tokens": tokens, + "fields": { + "token_from": { + "type": "amount_join_token", + "token": 0, + }, + "value_from": { + "type": "amount_join_value", + "name": "From", + "token": 0, + }, + "token_to": { + "type": "amount_join_token", + "token": 1, + }, + "value_to": { + "type": "amount_join_value", + "name": "To", + "token": 1, + }, + } + } + vrs = eip712_new_common(firmware, + navigator, + default_screenshot_path, + app_client, + data, + filters, + False, + golden_run) + + # verify signature + addr = recover_message(data, vrs) + assert addr == get_wallet_addr(app_client) From 72aba0a1099d1dbc5fb2455b8604f09887979679 Mon Sep 17 00:00:00 2001 From: Bret <787344+bretep@users.noreply.github.com> Date: Thu, 12 Sep 2024 05:53:05 -0700 Subject: [PATCH 066/102] Add and update PulseChain Networks (#626) Co-authored-by: bretep <717695-bretep@users.noreply.gitlab.com> --- glyphs/chain_943_64px.gif | 1 + src/network.c | 1 + 2 files changed, 2 insertions(+) create mode 120000 glyphs/chain_943_64px.gif diff --git a/glyphs/chain_943_64px.gif b/glyphs/chain_943_64px.gif new file mode 120000 index 000000000..2192306a5 --- /dev/null +++ b/glyphs/chain_943_64px.gif @@ -0,0 +1 @@ +chain_369_64px.gif \ No newline at end of file diff --git a/src/network.c b/src/network.c index 36aed4ad9..d9ccd6617 100644 --- a/src/network.c +++ b/src/network.c @@ -52,6 +52,7 @@ static const network_info_t NETWORK_MAPPING[] = { {.chain_id = 369, .name = "PulseChain", .ticker = "PLS"}, {.chain_id = 592, .name = "Astar", .ticker = "ASTR"}, {.chain_id = 888, .name = "Wanchain", .ticker = "WAN"}, + {.chain_id = 943, .name = "PulseChain Testnet", .ticker = "tPLS"}, {.chain_id = 1030, .name = "Conflux", .ticker = "CFX"}, {.chain_id = 1088, .name = "Metis Andromeda", .ticker = "METIS"}, {.chain_id = 1101, .name = "Polygon zkEVM", .ticker = "ETH"}, From 37aba62935254bac7f5ceadcc47a60678d3aa7e5 Mon Sep 17 00:00:00 2001 From: albertov19 <64150856+albertov19@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:10:07 +0200 Subject: [PATCH 067/102] feat: updated Moonbeam/Moonriver logos (#625) * feat: updted Moonbeam/Moonriver logos * update flex/stax logos * checking CI * update glyphs --- glyphs/chain_1284_64px.gif | Bin 212 -> 315 bytes glyphs/chain_1285_64px.gif | Bin 294 -> 338 bytes icons/flex_app_chain_1284.gif | Bin 442 -> 205 bytes icons/flex_app_chain_1285.gif | Bin 494 -> 187 bytes icons/nanos_app_chain_1284.gif | Bin 66 -> 108 bytes icons/nanos_app_chain_1285.gif | Bin 70 -> 80 bytes icons/nanox_app_chain_1284.gif | Bin 63 -> 104 bytes icons/nanox_app_chain_1285.gif | Bin 67 -> 74 bytes icons/stax_app_chain_1284.gif | Bin 107 -> 169 bytes icons/stax_app_chain_1285.gif | Bin 142 -> 143 bytes 10 files changed, 0 insertions(+), 0 deletions(-) diff --git a/glyphs/chain_1284_64px.gif b/glyphs/chain_1284_64px.gif index e8485ee55ffc61d4337921b524d9f77985dd4c17..5856cfa6a100d822b7e7eae7fc55d75363394830 100644 GIT binary patch literal 315 zcmV-B0mS}CNk%w1VL$*t0Pq0-00030|NkNR1ONa4001HX3rTHZXJt)cXK7<=4rgI) zZDBnyE;KbXH8eEM>boT32^_jV-?5@NP^l8?cJB zdM(Dq-||p8dA;5I(TDa2cP7YX$R{YK*vCkC2q;n*7>QU(IcX_*!3nT=hv_E@ zI{H(0TAGRB`KkJ7xCu*YIhzVyI()N~3@kO(tb5qY>=e~d z14M&;)X{SZZM}`^tbM(jEiptj&Rvbv&JYh3u3pcs9C2>%)8Dz}FV?Yu|MC#bN8%u) NUe2Ag|06R*ijMV@D literal 212 zcmZ?wbhEHbbYO5`XkY+=|Ns9h{$v3&bwDIYhJk5yPyfo(Z}}I`*>bCU^SwR4`P-CO zr=(eCJ>RuVg?s)x;p=bL+}PEr{G0y;YlDN#LU8gx$t8`Bajh32i?Guwz L)6)~fz+epk(Cc4E diff --git a/glyphs/chain_1285_64px.gif b/glyphs/chain_1285_64px.gif index 1809857093c45d6200884392edab68983cc8e68f..89d465a7a968d28c7f8e8ee4fd7de9b21408ddc3 100644 GIT binary patch literal 338 zcmV-Y0j>T=Nk%w1VL$*t0Pq0-00030|NkNR1ONa4001HX3rTHZXJt)cXK7<=4rgI) zZDBnyE;KbXH8eEYA&GD~q`sOU0QNTshqOTRfuc%iPRs$~UR}>^zI? z+?c)GyL(;z0R>1sw$n}iYMvZhLABm?6cbMU4!?a{JpL1}e$TyDsUEt1^9H($Vo+Q= kg$o&a(q>0q!-V!GqT@yH55)|BTs9IS2Q8$?KLr2)J3DHc5C8xG literal 294 zcmV+>0ondXNk%w1VL$*t0Du4h00030|NkNR1ONa4001li0000$06+i$0{x7SsmtvT zqnxzbi?iMe_zwcyXoMz6X6K5g6AQO)6W8*L*t&=3``!!uhPa_|W+bMPM-o%Xc{Vpv zsH$qcV6&F(Pvhmj!axkUtUcSVH^!DN8b8?ymXCS8!w&N(S}4{PvS6aO=l2mYXqf2K zD91CF7ReU}NZ97~NU>RBNm;ju+38nlTKQG#d3qUIv-BCu+Hq1OyNcTyq{&L@Yv}+= zb*uY3>jT?MY@90$whXO&{4AXtT0O#C42;~&P3=7$Zas|cJidz_Oq_lVq21p703T1z sYaf43E8ec}u3Hb^K7r}{$qP6TVIGAG8K!Y)<{QL`6f0W1NTC1#JBk#CcmMzZ diff --git a/icons/flex_app_chain_1284.gif b/icons/flex_app_chain_1284.gif index dd919fc6f775a00b6dddebe7dcbd0227ab20aa25..0dbbeccb092bf905a029795c71eef47c6cc47e47 100644 GIT binary patch delta 172 zcmV;d08{_E1I+;#M@dFFIbkROC;;#Q00000|Ns9X`2+w6kwPnf0)~u_8Nkg7BXqO^ ziILqcOAdD45td?BY9YFL+}DopRE>#6Q?`QN`p)~2gg~ETNGu|ci==Y-Xr7)yk&|lB z)v(nWSLOYJd*bo74849=XlYoSYS+}%-+67n*SBPB|IN~uHiZEwSVR`Hr{_jD7zJ}^ a#uQ2EBAKOF2v}(gaX`*m73RXC3}S7%s~eU$=6Ds-u!Nw-E!4S zl4ZY&fV+v()C&y@J*{jO25PNnKgw02;9Sn5FvlaN$moOU#C2Jz2mfjw+5PNdd%BZ(gyhNIeUajR~X4N`@6{RDehO*4gX&26M3Yb#+|swzxP&xMRou1NZLj zd(94Hj&_|FHkL@t?_0&>~=-EYq7ihNnfkL!HyO z7;7Yx+=BI_&64hHSQ4o0e@wzl()yW@YxW6NU9G+pp#z(idQWQ&cw=F3z=4NxRsr9E zm7jx_OjgS}$>Xx%wn5@vgFjm~T=qKWYcpRjvZ#LXO&{8lbo zyCy9nFwyXg*Yvxwhd0kT86mg&(k;Esb&eSblX$Am(OPz+S^dNg@z5W~ n+;04kn0V=%i2KeJFQ2hW&60Ror1{G7nriw?rR}c*85pbq*yvFI literal 494 zcmZ?wbhEHb)L_tH_{_lo1OfsAN=iy$VPTz}otrmrzH{f!`}gnv|Njq?!vKmuS-@h7 z|G7PL6Vp?D6Vo%3v-#2!b8{1I4fIS*L6AWQqy}UI1Is^wlb);hetEHWqq!@ioZRus zP(v1n*L*FBGo`gw=B*Qc;!?h%F>i+O36=f#o+>Cm2Qm(OE?3vn{@Rn{;7?^tUBFAv)#7N?qpuQb1MTAD~B@2 z5n+}+9=%l@?Ar6D2(#G;IrTDZVK-v)Wiq@K^WdmM^r;K?SvZ)O&ezU4aihJ4kt62A z*)P-XN{GI`BgOT37UPfU1?MJmv448$?7=^agW+SCMo8MausxP_LN^27Y!C2pt9r8U zVwRJUiW(B&gM%`%*{=-HPACL z1wjTKkZO=V1}4=W-j&A}?!Phl;?lB5M=Q1)_ F0|3nABh3H+ literal 66 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`4r+?+?w+wR|zg*n4Zdy?CJ;p}% MqVUdTzKjgk05yFR#Q*>R diff --git a/icons/nanos_app_chain_1285.gif b/icons/nanos_app_chain_1285.gif index 5cc7ce20a9f7ffbbf42ee7d70082cb8b744b5442..0f7d89aa45d0726442685ff4caf09d9ab1468186 100644 GIT binary patch literal 80 zcmZ?wbhEHb6krfw_`t{j1poj4SNzGszyW0HfcPL81}60$-j&A}?!Phl;?lB5MWv~VSvo#xR literal 70 zcmZ?wbhEHb6krfwXkY+=|Ns9h{$v3&bwDIYhJi`8r+?+?w+we01A=b7o0^z@uQhRt Q%aWfGDO}s~q8S*h0g<2<2mk;8 diff --git a/icons/nanox_app_chain_1284.gif b/icons/nanox_app_chain_1284.gif index 0da2ed11b8cf475c072bef34c0dbb1de9c486924..6fd9373e34eced60f8e85cddc592be5e02317ff3 100644 GIT binary patch literal 104 zcmZ?wbhEHbB&gM%`%*{=-HPACL z1wjTKkZO=V1}4Q8!Ij5f9Sq32d__a`$giT~vI#dP-fh$M-Vzo1dQsFb16BrW05V)6 APXGV_ literal 63 zcmZ?wbhEHbB&gM%`%*{=-HPACL z1wjTKkZO=V2BxH*ezw!I`Tb`byLGLex^wqj+lQ`=OIPH2?J~&Cbn6hl+qom+TJJ#3~ANN~xDpq^(!q-2{ R-#+~M>9lP;e;@;cH2^A`Lx2DP literal 107 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJnecr+?+?xBR>_OzgT=hwg0dt&o%G zP|D~Ft8!bzwO7{jdRgSD4`;v6w|mLi-Y0M1;d7~H^Bg};QKRyUt4@1v&D!3^#9$2o D+|wpI diff --git a/icons/stax_app_chain_1285.gif b/icons/stax_app_chain_1285.gif index 69466a7a5c8aed3f47b2fb85e1ae5730f6f72baf..0ad7f34b016037b62def9c4287fbc6ca752f5cfe 100644 GIT binary patch literal 143 zcmZ?wbhEHbRA5kG_`t{j1poj4SNzGszyW0HfcPL82Bx&0ezw!I`Tb`byLGLex^wqj z+lQ`=OIPH2?J~9+Rl?-ZlN^`ZcO&OT;-O0vQ;r0X)h#o&W#< literal 142 zcmZ?wbhEHbRA5kGXkY+=|Ns9h{$v3&bwDIYhJh)yr+?+?x9=O~2)T8w_TAZBTOp^> z6&C5VqH=BW<4rz)&PhFT%iVk5ZTTnPf+_9(g*>%A_D?>2pJU2=I>XI$ZIf73R+-eL o%Hwx8-RSv!=!(Y&vsrTaPi4$Kz4jMBFSWaNo<-wD00V Date: Thu, 12 Sep 2024 15:44:19 +0200 Subject: [PATCH 068/102] Increased number of pairs for EIP-712 flow + added overflow check --- src_nbgl/ui_sign_712.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src_nbgl/ui_sign_712.c b/src_nbgl/ui_sign_712.c index 10b27d35d..a2ca46dd8 100644 --- a/src_nbgl/ui_sign_712.c +++ b/src_nbgl/ui_sign_712.c @@ -9,7 +9,7 @@ #include "ui_message_signing.h" #include "ledger_assert.h" -static nbgl_contentTagValue_t pairs[6]; +static nbgl_contentTagValue_t pairs[7]; static nbgl_contentTagValueList_t pairs_list; static uint8_t pair_idx; static size_t buf_idx; @@ -56,7 +56,7 @@ static void message_update(bool confirm) { buf_idx += buf_off; pair_idx += 1; pairs_list.nbPairs = nbgl_useCaseGetNbTagValuesInPage(pair_idx, &pairs_list, 0, &flag); - if (pairs_list.nbPairs < pair_idx) { + if ((pair_idx == ARRAYLEN(pairs)) || (pairs_list.nbPairs < pair_idx)) { nbgl_useCaseReviewStreamingContinue(&pairs_list, message_progress); } else { message_progress(true); From f5239b95b16c36337c3c279974001ba05d03358e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 12 Sep 2024 15:50:29 +0200 Subject: [PATCH 069/102] Updated plugin SDK submodule --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index 3ac55f35b..d993caa73 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit 3ac55f35b804c9197f50bcb206d45dc735c098ab +Subproject commit d993caa737b35555b361a644e387c2ee3e845adb From e2917a861c1ccf745a196217e66a8577cbd2b0fd Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Fri, 13 Sep 2024 10:50:57 +0200 Subject: [PATCH 070/102] Use dedicated ethereum sdk branch fbe/give_derivation_path_to_plugin --- ethereum-plugin-sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethereum-plugin-sdk b/ethereum-plugin-sdk index d993caa73..26662539b 160000 --- a/ethereum-plugin-sdk +++ b/ethereum-plugin-sdk @@ -1 +1 @@ -Subproject commit d993caa737b35555b361a644e387c2ee3e845adb +Subproject commit 26662539b1cd62ae7ef4826d66690dad80cb9bab From a8dbb38b448a6c9f16c7470b17831d393a02c37c Mon Sep 17 00:00:00 2001 From: Francois Beutin Date: Mon, 9 Sep 2024 17:47:04 +0200 Subject: [PATCH 071/102] Give knowledge of derivation path from eth to plugin --- src/eth_plugin_handler.c | 1 + src/shared_context.h | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/eth_plugin_handler.c b/src/eth_plugin_handler.c index 1d92ab631..8150eb730 100644 --- a/src/eth_plugin_handler.c +++ b/src/eth_plugin_handler.c @@ -211,6 +211,7 @@ eth_plugin_result_t eth_plugin_call(int method, void *parameter) { (uint8_t *) &dataContext.tokenContext.pluginContext; ((ethPluginInitContract_t *) parameter)->pluginContextLength = sizeof(dataContext.tokenContext.pluginContext); + ((ethPluginInitContract_t *) parameter)->bip32 = &tmpCtx.transactionContext.bip32; break; case ETH_PLUGIN_PROVIDE_PARAMETER: PRINTF("-- PLUGIN PROVIDE PARAMETER --\n"); diff --git a/src/shared_context.h b/src/shared_context.h index 323ffd177..94a23fcec 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -7,6 +7,7 @@ #include "os.h" #include "cx.h" #include "bip32.h" +#include "bip32_utils.h" #include "ethUstream.h" #include "tx_content.h" #include "chainConfig.h" @@ -26,11 +27,6 @@ extern void common_app_init(void); #define MAX_ASSETS 5 -typedef struct bip32_path_t { - uint8_t length; - uint32_t path[MAX_BIP32_PATH]; -} bip32_path_t; - typedef struct internalStorage_t { bool dataAllowed; bool contractDetails; From 0cc17ff8057f2d637b96af34f11d94986d553c4e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 12 Sep 2024 10:02:48 +0200 Subject: [PATCH 072/102] Renamed domain name to trusted name in app code --- .../workflows/build_and_functional_tests.yml | 2 +- ledger_app.toml | 4 +- makefile_conf/features.mk | 8 +- src/main.c | 12 +- src/public_keys.h | 4 +- src/shared_context.h | 6 +- src_bagl/ui_domain_name.h | 12 -- src_bagl/ui_flow.c | 48 +++---- src_bagl/ui_flow_signTx.c | 18 +-- .../{ui_domain_name.c => ui_trusted_name.c} | 12 +- src_bagl/ui_trusted_name.h | 12 ++ src_features/getChallenge/challenge.h | 4 +- src_features/getChallenge/cmd_get_challenge.c | 4 +- src_features/provideDomainName/domain_name.h | 18 --- .../cmd_provide_trusted_name.c} | 126 +++++++++--------- .../provideTrustedName/trusted_name.h | 18 +++ src_nbgl/ui_approve_tx.c | 20 +-- src_nbgl/ui_home.c | 36 ++--- 18 files changed, 182 insertions(+), 182 deletions(-) delete mode 100644 src_bagl/ui_domain_name.h rename src_bagl/{ui_domain_name.c => ui_trusted_name.c} (53%) create mode 100644 src_bagl/ui_trusted_name.h delete mode 100644 src_features/provideDomainName/domain_name.h rename src_features/{provideDomainName/cmd_provide_domain_name.c => provideTrustedName/cmd_provide_trusted_name.c} (83%) create mode 100644 src_features/provideTrustedName/trusted_name.h diff --git a/.github/workflows/build_and_functional_tests.yml b/.github/workflows/build_and_functional_tests.yml index c9536290b..65ebfa0cd 100644 --- a/.github/workflows/build_and_functional_tests.yml +++ b/.github/workflows/build_and_functional_tests.yml @@ -32,7 +32,7 @@ jobs: uses: LedgerHQ/ledger-app-workflows/.github/workflows/reusable_build.yml@v1 with: upload_app_binaries_artifact: "ragger_elfs" - flags: "CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" + flags: "CAL_TEST_KEY=1 TRUSTED_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" ragger_tests: name: Run ragger tests using the reusable workflow diff --git a/ledger_app.toml b/ledger_app.toml index ebf8389e1..fc54c10e9 100644 --- a/ledger_app.toml +++ b/ledger_app.toml @@ -4,8 +4,8 @@ sdk = "C" devices = ["nanos", "nanox", "nanos+", "stax", "flex"] [use_cases] -use_test_keys = "CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" -dbg_use_test_keys = "DEBUG=1 CAL_TEST_KEY=1 DOMAIN_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" +use_test_keys = "CAL_TEST_KEY=1 TRUSTED_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" +dbg_use_test_keys = "DEBUG=1 CAL_TEST_KEY=1 TRUSTED_NAME_TEST_KEY=1 SET_PLUGIN_TEST_KEY=1 NFT_TEST_KEY=1" cal_bypass = "BYPASS_SIGNATURES=1" dbg_cal_bypass = "DEBUG=1 BYPASS_SIGNATURES=1" diff --git a/makefile_conf/features.mk b/makefile_conf/features.mk index 086e87dde..8d1ab1ea3 100644 --- a/makefile_conf/features.mk +++ b/makefile_conf/features.mk @@ -50,10 +50,10 @@ endif # ENS ifneq ($(TARGET_NAME),TARGET_NANOS) - DEFINES += HAVE_DOMAIN_NAME - DOMAIN_NAME_TEST_KEY ?= 0 - ifneq ($(DOMAIN_NAME_TEST_KEY),0) - DEFINES += HAVE_DOMAIN_NAME_TEST_KEY + DEFINES += HAVE_TRUSTED_NAME + TRUSTED_NAME_TEST_KEY ?= 0 + ifneq ($(TRUSTED_NAME_TEST_KEY),0) + DEFINES += HAVE_TRUSTED_NAME_TEST_KEY endif endif diff --git a/src/main.c b/src/main.c index 83a5d0b05..f5516ab65 100644 --- a/src/main.c +++ b/src/main.c @@ -32,7 +32,7 @@ #include "handle_check_address.h" #include "commands_712.h" #include "challenge.h" -#include "domain_name.h" +#include "trusted_name.h" #include "crypto_helpers.h" #include "manage_asset_info.h" @@ -218,15 +218,15 @@ static uint16_t handleApdu(command_t *cmd, uint32_t *flags, uint32_t *tx) { break; #endif // HAVE_EIP712_FULL_SUPPORT -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME case INS_ENS_GET_CHALLENGE: sw = handle_get_challenge(tx); break; case INS_ENS_PROVIDE_INFO: - sw = handle_provide_domain_name(cmd->p1, cmd->data, cmd->lc); + sw = handle_provide_trusted_name(cmd->p1, cmd->data, cmd->lc); break; -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME default: sw = APDU_RESPONSE_INVALID_INS; @@ -363,10 +363,10 @@ void coin_main(eth_libargs_t *args) { io_init(); ui_idle(); -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME // to prevent it from having a fixed value at boot roll_challenge(); -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME app_main(); } diff --git a/src/public_keys.h b/src/public_keys.h index 18348d6f5..df4e69ea8 100644 --- a/src/public_keys.h +++ b/src/public_keys.h @@ -64,8 +64,8 @@ static const uint8_t LEDGER_NFT_METADATA_PUBLIC_KEY[] = { #endif }; -static const uint8_t DOMAIN_NAME_PUB_KEY[] = { -#ifdef HAVE_DOMAIN_NAME_TEST_KEY +static const uint8_t TRUSTED_NAME_PUB_KEY[] = { +#ifdef HAVE_TRUSTED_NAME_TEST_KEY 0x04, 0xb9, 0x1f, 0xbe, 0xc1, 0x73, 0xe3, 0xba, 0x4a, 0x71, 0x4e, 0x01, 0x4e, 0xbc, 0x82, 0x7b, 0x6f, 0x89, 0x9a, 0x9f, 0xa7, 0xf4, 0xac, 0x76, 0x9c, 0xde, 0x28, 0x43, 0x17, 0xa0, 0x0f, 0x4f, 0x65, 0x0f, 0x09, 0xf0, 0x9a, 0xa4, 0xff, 0x5a, 0x31, 0x76, diff --git a/src/shared_context.h b/src/shared_context.h index 94a23fcec..d0fed95d7 100644 --- a/src/shared_context.h +++ b/src/shared_context.h @@ -34,9 +34,9 @@ typedef struct internalStorage_t { #ifdef HAVE_EIP712_FULL_SUPPORT bool verbose_eip712; #endif // HAVE_EIP712_FULL_SUPPORT -#ifdef HAVE_DOMAIN_NAME - bool verbose_domain_name; -#endif // HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME + bool verbose_trusted_name; +#endif // HAVE_TRUSTED_NAME bool initialized; } internalStorage_t; diff --git a/src_bagl/ui_domain_name.h b/src_bagl/ui_domain_name.h deleted file mode 100644 index bcfa8b06d..000000000 --- a/src_bagl/ui_domain_name.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef HAVE_DOMAIN_NAME - -#ifndef UI_DOMAIN_NAME_H_ -#define UI_DOMAIN_NAME_H_ - -#include "ux.h" - -extern const ux_flow_step_t ux_domain_name_step; - -#endif // UI_DOMAIN_NAME_H_ - -#endif // HAVE_DOMAIN_NAME diff --git a/src_bagl/ui_flow.c b/src_bagl/ui_flow.c index e4a7b395e..43a115ef2 100644 --- a/src_bagl/ui_flow.c +++ b/src_bagl/ui_flow.c @@ -10,19 +10,19 @@ // Reuse the strings.common.fullAmount buffer for settings displaying. // No risk of collision as this buffer is unused in the settings menu -#define SETTING_BLIND_SIGNING_STATE (strings.common.fullAmount + (BUF_INCREMENT * 0)) -#define SETTING_VERBOSE_DOMAIN_NAME_STATE (strings.common.fullAmount + (BUF_INCREMENT * 1)) -#define SETTING_DISPLAY_NONCE_STATE (strings.common.fullAmount + (BUF_INCREMENT * 2)) -#define SETTING_VERBOSE_EIP712_STATE (strings.common.fullAmount + (BUF_INCREMENT * 3)) -#define SETTING_DISPLAY_DATA_STATE (strings.common.fullAmount + (BUF_INCREMENT * 4)) +#define SETTING_BLIND_SIGNING_STATE (strings.common.fullAmount + (BUF_INCREMENT * 0)) +#define SETTING_VERBOSE_TRUSTED_NAME_STATE (strings.common.fullAmount + (BUF_INCREMENT * 1)) +#define SETTING_DISPLAY_NONCE_STATE (strings.common.fullAmount + (BUF_INCREMENT * 2)) +#define SETTING_VERBOSE_EIP712_STATE (strings.common.fullAmount + (BUF_INCREMENT * 3)) +#define SETTING_DISPLAY_DATA_STATE (strings.common.fullAmount + (BUF_INCREMENT * 4)) #define BOOL_TO_STATE_STR(b) (b ? ENABLED_STR : DISABLED_STR) static void display_settings(const ux_flow_step_t* const start_step); static void switch_settings_blind_signing(void); -#ifdef HAVE_DOMAIN_NAME -static void switch_settings_verbose_domain_name(void); -#endif // HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME +static void switch_settings_verbose_trusted_name(void); +#endif // HAVE_TRUSTED_NAME static void switch_settings_display_data(void); static void switch_settings_display_nonce(void); #ifdef HAVE_EIP712_FULL_SUPPORT @@ -92,18 +92,18 @@ UX_STEP_CB( SETTING_BLIND_SIGNING_STATE }); -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME UX_STEP_CB( - ux_settings_flow_verbose_domain_name_step, + ux_settings_flow_verbose_trusted_name_step, bnnn, - switch_settings_verbose_domain_name(), + switch_settings_verbose_trusted_name(), { "ENS addresses", "Displays resolved", "addresses from ENS", - SETTING_VERBOSE_DOMAIN_NAME_STATE + SETTING_VERBOSE_TRUSTED_NAME_STATE }); -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME UX_STEP_CB( ux_settings_flow_display_nonce_step, @@ -170,9 +170,9 @@ UX_STEP_CB( UX_FLOW(ux_settings_flow, &ux_settings_flow_blind_signing_step, -#ifdef HAVE_DOMAIN_NAME - &ux_settings_flow_verbose_domain_name_step, -#endif // HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME + &ux_settings_flow_verbose_trusted_name_step, +#endif // HAVE_TRUSTED_NAME &ux_settings_flow_display_nonce_step, #ifdef HAVE_EIP712_FULL_SUPPORT &ux_settings_flow_verbose_eip712_step, @@ -191,11 +191,11 @@ static void display_settings(const ux_flow_step_t* const start_step) { BOOL_TO_STATE_STR(N_storage.verbose_eip712), BUF_INCREMENT); #endif // HAVE_EIP712_FULL_SUPPORT -#ifdef HAVE_DOMAIN_NAME - strlcpy(SETTING_VERBOSE_DOMAIN_NAME_STATE, - BOOL_TO_STATE_STR(N_storage.verbose_domain_name), +#ifdef HAVE_TRUSTED_NAME + strlcpy(SETTING_VERBOSE_TRUSTED_NAME_STATE, + BOOL_TO_STATE_STR(N_storage.verbose_trusted_name), BUF_INCREMENT); -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME ux_flow_init(0, ux_settings_flow, start_step); } @@ -224,11 +224,11 @@ static void switch_settings_verbose_eip712(void) { } #endif // HAVE_EIP712_FULL_SUPPORT -#ifdef HAVE_DOMAIN_NAME -static void switch_settings_verbose_domain_name(void) { - toggle_setting(&N_storage.verbose_domain_name, &ux_settings_flow_verbose_domain_name_step); +#ifdef HAVE_TRUSTED_NAME +static void switch_settings_verbose_trusted_name(void) { + toggle_setting(&N_storage.verbose_trusted_name, &ux_settings_flow_verbose_trusted_name_step); } -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME ////////////////////////////////////////////////////////////////////// // clang-format off diff --git a/src_bagl/ui_flow_signTx.c b/src_bagl/ui_flow_signTx.c index 89ff9173f..6fcdb80c6 100644 --- a/src_bagl/ui_flow_signTx.c +++ b/src_bagl/ui_flow_signTx.c @@ -8,8 +8,8 @@ #include "ui_plugin.h" #include "common_ui.h" #include "plugins.h" -#include "domain_name.h" -#include "ui_domain_name.h" +#include "trusted_name.h" +#include "ui_trusted_name.h" static unsigned int data_ok_cb(void) { ui_idle(); @@ -242,19 +242,19 @@ void ux_approve_tx(bool fromPlugin) { ux_approval_tx_flow[step++] = &ux_approval_from_step; } ux_approval_tx_flow[step++] = &ux_approval_amount_step; -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME uint64_t chain_id = get_tx_chain_id(); - if (has_domain_name(&chain_id, tmpContent.txContent.destination)) { - ux_approval_tx_flow[step++] = &ux_domain_name_step; - if (N_storage.verbose_domain_name) { + if (has_trusted_name(&chain_id, tmpContent.txContent.destination)) { + ux_approval_tx_flow[step++] = &ux_trusted_name_step; + if (N_storage.verbose_trusted_name) { ux_approval_tx_flow[step++] = &ux_approval_to_step; } } else { -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME ux_approval_tx_flow[step++] = &ux_approval_to_step; -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME } -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME } if (N_storage.displayNonce) { diff --git a/src_bagl/ui_domain_name.c b/src_bagl/ui_trusted_name.c similarity index 53% rename from src_bagl/ui_domain_name.c rename to src_bagl/ui_trusted_name.c index 3807a6132..c756520df 100644 --- a/src_bagl/ui_domain_name.c +++ b/src_bagl/ui_trusted_name.c @@ -1,17 +1,17 @@ -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME -#include "ui_domain_name.h" -#include "domain_name.h" +#include "ui_trusted_name.h" +#include "trusted_name.h" ////////////////////////////////////////////////////////////////////// // clang-format off UX_STEP_NOCB( - ux_domain_name_step, + ux_trusted_name_step, bnnn_paging, { .title = "To (domain)", - .text = g_domain_name + .text = g_trusted_name }); // clang-format on -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME diff --git a/src_bagl/ui_trusted_name.h b/src_bagl/ui_trusted_name.h new file mode 100644 index 000000000..ac76dcaae --- /dev/null +++ b/src_bagl/ui_trusted_name.h @@ -0,0 +1,12 @@ +#ifdef HAVE_TRUSTED_NAME + +#ifndef UI_TRUSTED_NAME_H_ +#define UI_TRUSTED_NAME_H_ + +#include "ux.h" + +extern const ux_flow_step_t ux_trusted_name_step; + +#endif // UI_TRUSTED_NAME_H_ + +#endif // HAVE_TRUSTED_NAME diff --git a/src_features/getChallenge/challenge.h b/src_features/getChallenge/challenge.h index e0155ed65..a671945b4 100644 --- a/src_features/getChallenge/challenge.h +++ b/src_features/getChallenge/challenge.h @@ -1,4 +1,4 @@ -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME #ifndef CHALLENGE_H_ #define CHALLENGE_H_ @@ -11,4 +11,4 @@ uint16_t handle_get_challenge(unsigned int *tx); #endif // CHALLENGE_H_ -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME diff --git a/src_features/getChallenge/cmd_get_challenge.c b/src_features/getChallenge/cmd_get_challenge.c index 43e866741..84898aa2f 100644 --- a/src_features/getChallenge/cmd_get_challenge.c +++ b/src_features/getChallenge/cmd_get_challenge.c @@ -1,4 +1,4 @@ -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME #include #include @@ -34,4 +34,4 @@ uint16_t handle_get_challenge(unsigned int *tx) { return APDU_RESPONSE_OK; } -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME diff --git a/src_features/provideDomainName/domain_name.h b/src_features/provideDomainName/domain_name.h deleted file mode 100644 index 4dcabed35..000000000 --- a/src_features/provideDomainName/domain_name.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifdef HAVE_DOMAIN_NAME - -#ifndef DOMAIN_NAME_H_ -#define DOMAIN_NAME_H_ - -#include -#include - -#define DOMAIN_NAME_MAX_LENGTH 30 - -bool has_domain_name(const uint64_t *chain_id, const uint8_t *addr); -uint16_t handle_provide_domain_name(uint8_t p1, const uint8_t *data, uint8_t length); - -extern char g_domain_name[DOMAIN_NAME_MAX_LENGTH + 1]; - -#endif // DOMAIN_NAME_H_ - -#endif // HAVE_DOMAIN_NAME diff --git a/src_features/provideDomainName/cmd_provide_domain_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c similarity index 83% rename from src_features/provideDomainName/cmd_provide_domain_name.c rename to src_features/provideTrustedName/cmd_provide_trusted_name.c index c3b19b0cc..b88d597bb 100644 --- a/src_features/provideDomainName/cmd_provide_domain_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -1,4 +1,4 @@ -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME #include #include @@ -6,7 +6,7 @@ #include #include "common_utils.h" // ARRAY_SIZE #include "apdu_constants.h" -#include "domain_name.h" +#include "trusted_name.h" #include "challenge.h" #include "mem.h" #include "hash_bytes.h" @@ -35,7 +35,7 @@ typedef enum { SIGNER_KEY_ID = 0x13, SIGNER_ALGO = 0x14, SIGNATURE = 0x15, - DOMAIN_NAME = 0x20, + TRUSTED_NAME = 0x20, COIN_TYPE = 0x21, ADDRESS = 0x22 } e_tlv_tag; @@ -58,7 +58,7 @@ typedef struct { bool valid; char *name; uint8_t addr[ADDRESS_LENGTH]; -} s_domain_name_info; +} s_trusted_name_info; typedef struct { e_key_id key_id; @@ -68,7 +68,7 @@ typedef struct { } s_sig_ctx; typedef bool(t_tlv_handler)(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx); typedef struct { @@ -78,29 +78,29 @@ typedef struct { } s_tlv_handler; static s_tlv_payload g_tlv_payload = {0}; -static s_domain_name_info g_domain_name_info; -char g_domain_name[DOMAIN_NAME_MAX_LENGTH + 1]; +static s_trusted_name_info g_trusted_name_info; +char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; /** - * Checks if a domain name for the given chain ID and address is known + * Checks if a trusted name for the given chain ID and address is known * - * Always wipes the content of \ref g_domain_name_info + * Always wipes the content of \ref g_trusted_name_info * * @param[in] chain_id given chain ID * @param[in] addr given address * @return whether there is or not */ -bool has_domain_name(const uint64_t *chain_id, const uint8_t *addr) { +bool has_trusted_name(const uint64_t *chain_id, const uint8_t *addr) { bool ret = false; - if (g_domain_name_info.valid) { + if (g_trusted_name_info.valid) { // Check if chain ID is known to be Ethereum-compatible (same derivation path) if ((chain_is_ethereum_compatible(chain_id)) && - (memcmp(addr, g_domain_name_info.addr, ADDRESS_LENGTH) == 0)) { + (memcmp(addr, g_trusted_name_info.addr, ADDRESS_LENGTH) == 0)) { ret = true; } } - memset(&g_domain_name_info, 0, sizeof(g_domain_name_info)); + memset(&g_trusted_name_info, 0, sizeof(g_trusted_name_info)); return ret; } @@ -132,15 +132,15 @@ static bool get_uint_from_data(const s_tlv_data *data, uint32_t *value) { * Handler for tag \ref STRUCTURE_TYPE * * @param[] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_structure_type(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { (void) data; - (void) domain_name_info; + (void) trusted_name_info; (void) sig_ctx; return true; // unhandled for now } @@ -149,15 +149,15 @@ static bool handle_structure_type(const s_tlv_data *data, * Handler for tag \ref STRUCTURE_VERSION * * @param[] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_structure_version(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { (void) data; - (void) domain_name_info; + (void) trusted_name_info; (void) sig_ctx; return true; // unhandled for now } @@ -166,15 +166,15 @@ static bool handle_structure_version(const s_tlv_data *data, * Handler for tag \ref CHALLENGE * * @param[in] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_challenge(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { uint32_t value; - (void) domain_name_info; + (void) trusted_name_info; (void) sig_ctx; if (!get_uint_from_data(data, &value)) { @@ -187,15 +187,15 @@ static bool handle_challenge(const s_tlv_data *data, * Handler for tag \ref SIGNER_KEY_ID * * @param[in] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[out] sig_ctx the signature context * @return whether it was successful */ static bool handle_sign_key_id(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { uint32_t value; - (void) domain_name_info; + (void) trusted_name_info; if (!get_uint_from_data(data, &value) || (value > UINT8_MAX)) { return false; @@ -208,16 +208,16 @@ static bool handle_sign_key_id(const s_tlv_data *data, * Handler for tag \ref SIGNER_ALGO * * @param[in] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_sign_algo(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { uint32_t value; - (void) domain_name_info; + (void) trusted_name_info; (void) sig_ctx; if (!get_uint_from_data(data, &value)) { return false; @@ -229,14 +229,14 @@ static bool handle_sign_algo(const s_tlv_data *data, * Handler for tag \ref SIGNATURE * * @param[in] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[out] sig_ctx the signature context * @return whether it was successful */ static bool handle_signature(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { - (void) domain_name_info; + (void) trusted_name_info; sig_ctx->input_sig_size = data->length; sig_ctx->input_sig = data->value; return true; @@ -267,18 +267,18 @@ static bool is_valid_domain_character(char c) { } /** - * Handler for tag \ref DOMAIN_NAME + * Handler for tag \ref TRUSTED_NAME * * @param[in] data the tlv data - * @param[out] domain_name_info the domain name information + * @param[out] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ -static bool handle_domain_name(const s_tlv_data *data, - s_domain_name_info *domain_name_info, - s_sig_ctx *sig_ctx) { +static bool handle_trusted_name(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { (void) sig_ctx; - if (data->length > DOMAIN_NAME_MAX_LENGTH) { + if (data->length > TRUSTED_NAME_MAX_LENGTH) { PRINTF("Domain name too long! (%u)\n", data->length); return false; } @@ -292,9 +292,9 @@ static bool handle_domain_name(const s_tlv_data *data, PRINTF("Domain name contains non-allowed character! (0x%x)\n", data->value[idx]); return false; } - domain_name_info->name[idx] = data->value[idx]; + trusted_name_info->name[idx] = data->value[idx]; } - domain_name_info->name[data->length] = '\0'; + trusted_name_info->name[data->length] = '\0'; return true; } @@ -302,16 +302,16 @@ static bool handle_domain_name(const s_tlv_data *data, * Handler for tag \ref COIN_TYPE * * @param[in] data the tlv data - * @param[] domain_name_info the domain name information + * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_coin_type(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { uint32_t value; - (void) domain_name_info; + (void) trusted_name_info; (void) sig_ctx; if (!get_uint_from_data(data, &value)) { return false; @@ -323,18 +323,18 @@ static bool handle_coin_type(const s_tlv_data *data, * Handler for tag \ref ADDRESS * * @param[in] data the tlv data - * @param[out] domain_name_info the domain name information + * @param[out] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ static bool handle_address(const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { (void) sig_ctx; if (data->length != ADDRESS_LENGTH) { return false; } - memcpy(domain_name_info->addr, data->value, ADDRESS_LENGTH); + memcpy(trusted_name_info->addr, data->value, ADDRESS_LENGTH); return true; } @@ -349,7 +349,7 @@ static bool handle_address(const s_tlv_data *data, static bool verify_signature(const s_sig_ctx *sig_ctx) { uint8_t hash[INT256_LENGTH]; cx_err_t error = CX_INTERNAL_ERROR; -#ifdef HAVE_DOMAIN_NAME_TEST_KEY +#ifdef HAVE_TRUSTED_NAME_TEST_KEY e_key_id valid_key_id = KEY_ID_TEST; #else e_key_id valid_key_id = KEY_ID_PROD; @@ -367,8 +367,8 @@ static bool verify_signature(const s_sig_ctx *sig_ctx) { CX_CHECK(check_signature_with_pubkey("Domain Name", hash, sizeof(hash), - DOMAIN_NAME_PUB_KEY, - sizeof(DOMAIN_NAME_PUB_KEY), + TRUSTED_NAME_PUB_KEY, + sizeof(TRUSTED_NAME_PUB_KEY), #ifdef HAVE_LEDGER_PKI CERTIFICATE_PUBLIC_KEY_USAGE_COIN_META, #endif @@ -388,14 +388,14 @@ static bool verify_signature(const s_sig_ctx *sig_ctx) { * @param[in] handlers list of tag / handler function pairs * @param[in] handler_count number of handlers * @param[in] data the TLV data - * @param[out] domain_name_info the domain name information + * @param[out] trusted_name_info the trusted name information * @param[out] sig_ctx the signature context * @return whether it was successful */ static bool handle_tlv_data(s_tlv_handler *handlers, int handler_count, const s_tlv_data *data, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { t_tlv_handler *fptr; @@ -404,7 +404,7 @@ static bool handle_tlv_data(s_tlv_handler *handlers, if (handlers[idx].tag == data->tag) { handlers[idx].found += 1; fptr = PIC(handlers[idx].func); - if (!(*fptr)(data, domain_name_info, sig_ctx)) { + if (!(*fptr)(data, trusted_name_info, sig_ctx)) { PRINTF("Error while handling tag 0x%x\n", handlers[idx].tag); return false; } @@ -509,12 +509,12 @@ static bool get_der_value_as_uint8(const s_tlv_payload *payload, size_t *offset, * Does the TLV parsing but also the SHA-256 hash of the payload. * * @param[in] payload the raw TLV payload - * @param[out] domain_name_info the domain name information + * @param[out] trusted_name_info the trusted name information * @param[out] sig_ctx the signature context * @return whether it was successful */ static bool parse_tlv(const s_tlv_payload *payload, - s_domain_name_info *domain_name_info, + s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { s_tlv_handler handlers[] = { {.tag = STRUCTURE_TYPE, .func = &handle_structure_type, .found = 0}, @@ -523,7 +523,7 @@ static bool parse_tlv(const s_tlv_payload *payload, {.tag = SIGNER_KEY_ID, .func = &handle_sign_key_id, .found = 0}, {.tag = SIGNER_ALGO, .func = &handle_sign_algo, .found = 0}, {.tag = SIGNATURE, .func = &handle_signature, .found = 0}, - {.tag = DOMAIN_NAME, .func = &handle_domain_name, .found = 0}, + {.tag = TRUSTED_NAME, .func = &handle_trusted_name, .found = 0}, {.tag = COIN_TYPE, .func = &handle_coin_type, .found = 0}, {.tag = ADDRESS, .func = &handle_address, .found = 0}}; e_tlv_step step = TLV_TAG; @@ -558,7 +558,7 @@ static bool parse_tlv(const s_tlv_payload *payload, if (!handle_tlv_data(handlers, ARRAY_SIZE(handlers), &data, - domain_name_info, + trusted_name_info, sig_ctx)) { return false; } @@ -631,13 +631,13 @@ static bool handle_first_chunk(const uint8_t **data, } /** - * Handle domain name APDU + * Handle trusted name APDU * * @param[in] p1 first APDU instruction parameter * @param[in] data APDU payload * @param[in] length payload size */ -uint16_t handle_provide_domain_name(uint8_t p1, const uint8_t *data, uint8_t length) { +uint16_t handle_provide_trusted_name(uint8_t p1, const uint8_t *data, uint8_t length) { s_sig_ctx sig_ctx; uint16_t sw = APDU_NO_RESPONSE; @@ -663,22 +663,22 @@ uint16_t handle_provide_domain_name(uint8_t p1, const uint8_t *data, uint8_t len // everything has been received if (g_tlv_payload.size == g_tlv_payload.expected_size) { - g_domain_name_info.name = g_domain_name; - if (!parse_tlv(&g_tlv_payload, &g_domain_name_info, &sig_ctx) || + g_trusted_name_info.name = g_trusted_name; + if (!parse_tlv(&g_tlv_payload, &g_trusted_name_info, &sig_ctx) || !verify_signature(&sig_ctx)) { free_payload(&g_tlv_payload); roll_challenge(); // prevent brute-force guesses return APDU_RESPONSE_INVALID_DATA; } - g_domain_name_info.valid = true; + g_trusted_name_info.valid = true; PRINTF("Registered : %s => %.*h\n", - g_domain_name_info.name, + g_trusted_name_info.name, ADDRESS_LENGTH, - g_domain_name_info.addr); + g_trusted_name_info.addr); free_payload(&g_tlv_payload); roll_challenge(); // prevent replays } return APDU_RESPONSE_OK; } -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME diff --git a/src_features/provideTrustedName/trusted_name.h b/src_features/provideTrustedName/trusted_name.h new file mode 100644 index 000000000..51ab3f1ea --- /dev/null +++ b/src_features/provideTrustedName/trusted_name.h @@ -0,0 +1,18 @@ +#ifdef HAVE_TRUSTED_NAME + +#ifndef TRUSTED_NAME_H_ +#define TRUSTED_NAME_H_ + +#include +#include + +#define TRUSTED_NAME_MAX_LENGTH 30 + +bool has_trusted_name(const uint64_t *chain_id, const uint8_t *addr); +uint16_t handle_provide_trusted_name(uint8_t p1, const uint8_t *data, uint8_t length); + +extern char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; + +#endif // TRUSTED_NAME_H_ + +#endif // HAVE_TRUSTED_NAME diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index 118be0a85..254129b48 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -5,7 +5,7 @@ #include "ui_nbgl.h" #include "ui_signing.h" #include "plugins.h" -#include "domain_name.h" +#include "trusted_name.h" #include "caller_api.h" #include "network_icons.h" #include "network.h" @@ -26,8 +26,8 @@ static char msg_buffer[MAX_PLUGIN_ITEMS][VALUE_MAX_LEN]; struct tx_approval_context_t { bool fromPlugin; bool displayNetwork; -#ifdef HAVE_DOMAIN_NAME - bool domain_name_match; +#ifdef HAVE_TRUSTED_NAME + bool trusted_name_match; #endif }; @@ -130,21 +130,21 @@ static uint8_t setTagValuePairs(void) { pairs[nbPairs].value = strings.common.fullAmount; nbPairs++; -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME uint64_t chain_id = get_tx_chain_id(); - tx_approval_context.domain_name_match = - has_domain_name(&chain_id, tmpContent.txContent.destination); - if (tx_approval_context.domain_name_match) { + tx_approval_context.trusted_name_match = + has_trusted_name(&chain_id, tmpContent.txContent.destination); + if (tx_approval_context.trusted_name_match) { pairs[nbPairs].item = "To (domain)"; - pairs[nbPairs].value = g_domain_name; + pairs[nbPairs].value = g_trusted_name; nbPairs++; } - if (!tx_approval_context.domain_name_match || N_storage.verbose_domain_name) { + if (!tx_approval_context.trusted_name_match || N_storage.verbose_trusted_name) { #endif pairs[nbPairs].item = "To"; pairs[nbPairs].value = strings.common.toAddress; nbPairs++; -#ifdef HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME } #endif if (N_storage.displayNonce) { diff --git a/src_nbgl/ui_home.c b/src_nbgl/ui_home.c index 1e6f3c503..9eaf38fb9 100644 --- a/src_nbgl/ui_home.c +++ b/src_nbgl/ui_home.c @@ -15,8 +15,8 @@ enum { BLIND_SIGNING_TOKEN = FIRST_USER_TOKEN, -#ifdef HAVE_DOMAIN_NAME - DOMAIN_NAME_VERBOSE_TOKEN, +#ifdef HAVE_TRUSTED_NAME + TRUSTED_NAME_VERBOSE_TOKEN, #endif NONCE_TOKEN, #ifdef HAVE_EIP712_FULL_SUPPORT @@ -27,8 +27,8 @@ enum { enum { BLIND_SIGNING_ID, -#ifdef HAVE_DOMAIN_NAME - DOMAIN_NAME_VERBOSE_ID, +#ifdef HAVE_TRUSTED_NAME + TRUSTED_NAME_VERBOSE_ID, #endif NONCE_ID, #ifdef HAVE_EIP712_FULL_SUPPORT @@ -61,13 +61,13 @@ static void setting_toggle_callback(int token, uint8_t index, int page) { switches[BLIND_SIGNING_ID].initState = (nbgl_state_t) value; nvm_write((void *) &N_storage.dataAllowed, (void *) &value, sizeof(value)); break; -#ifdef HAVE_DOMAIN_NAME - case DOMAIN_NAME_VERBOSE_TOKEN: - value = !N_storage.verbose_domain_name; - switches[DOMAIN_NAME_VERBOSE_ID].initState = (nbgl_state_t) value; - nvm_write((void *) &N_storage.verbose_domain_name, (void *) &value, sizeof(value)); +#ifdef HAVE_TRUSTED_NAME + case TRUSTED_NAME_VERBOSE_TOKEN: + value = !N_storage.verbose_trusted_name; + switches[TRUSTED_NAME_VERBOSE_ID].initState = (nbgl_state_t) value; + nvm_write((void *) &N_storage.verbose_trusted_name, (void *) &value, sizeof(value)); break; -#endif // HAVE_DOMAIN_NAME +#endif // HAVE_TRUSTED_NAME case NONCE_TOKEN: value = !N_storage.displayNonce; switches[NONCE_ID].initState = (nbgl_state_t) value; @@ -123,14 +123,14 @@ static void prepare_and_display_home(const char *appname, const char *tagline, u switches[BLIND_SIGNING_ID].token = BLIND_SIGNING_TOKEN; switches[BLIND_SIGNING_ID].tuneId = TUNE_TAP_CASUAL; -#ifdef HAVE_DOMAIN_NAME - switches[DOMAIN_NAME_VERBOSE_ID].initState = - N_storage.verbose_domain_name ? ON_STATE : OFF_STATE; - switches[DOMAIN_NAME_VERBOSE_ID].text = "ENS addresses"; - switches[DOMAIN_NAME_VERBOSE_ID].subText = "Display the resolved address of ENS domains."; - switches[DOMAIN_NAME_VERBOSE_ID].token = DOMAIN_NAME_VERBOSE_TOKEN; - switches[DOMAIN_NAME_VERBOSE_ID].tuneId = TUNE_TAP_CASUAL; -#endif // HAVE_DOMAIN_NAME +#ifdef HAVE_TRUSTED_NAME + switches[TRUSTED_NAME_VERBOSE_ID].initState = + N_storage.verbose_trusted_name ? ON_STATE : OFF_STATE; + switches[TRUSTED_NAME_VERBOSE_ID].text = "ENS addresses"; + switches[TRUSTED_NAME_VERBOSE_ID].subText = "Display the resolved address of ENS domains."; + switches[TRUSTED_NAME_VERBOSE_ID].token = TRUSTED_NAME_VERBOSE_TOKEN; + switches[TRUSTED_NAME_VERBOSE_ID].tuneId = TUNE_TAP_CASUAL; +#endif // HAVE_TRUSTED_NAME switches[NONCE_ID].initState = N_storage.displayNonce ? ON_STATE : OFF_STATE; switches[NONCE_ID].text = "Nonce"; From e333edc07cef6f488ea4791a6b82bff2aba77fa7 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 12 Sep 2024 18:12:46 +0200 Subject: [PATCH 073/102] Renamed global macros --- Makefile | 2 +- src/main.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 0530a52ab..09e9718d4 100644 --- a/Makefile +++ b/Makefile @@ -153,7 +153,7 @@ ENABLE_NBGL_QRCODE = 1 # Main app configuration # ######################################## -DEFINES += CHAINID_COINNAME=\"$(TICKER)\" CHAIN_ID=$(CHAIN_ID) +DEFINES += APP_TICKER=\"$(TICKER)\" APP_CHAIN_ID=$(CHAIN_ID) # Enabled Features # include makefile_conf/features.mk diff --git a/src/main.c b/src/main.c index f5516ab65..0a6793f65 100644 --- a/src/main.c +++ b/src/main.c @@ -320,8 +320,8 @@ void app_main(void) { static void init_coin_config(chain_config_t *coin_config) { memset(coin_config, 0, sizeof(chain_config_t)); - strcpy(coin_config->coinName, CHAINID_COINNAME); - coin_config->chainId = CHAIN_ID; + strcpy(coin_config->coinName, APP_TICKER); + coin_config->chainId = APP_CHAIN_ID; } void storage_init(void) { From c484dcb59dff3a2807f813958435094d2c3328cd Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 12 Sep 2024 18:13:43 +0200 Subject: [PATCH 074/102] Added missing check on struct_type of trusted name TLV --- .../provideTrustedName/cmd_provide_trusted_name.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src_features/provideTrustedName/cmd_provide_trusted_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c index b88d597bb..139baedca 100644 --- a/src_features/provideTrustedName/cmd_provide_trusted_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -19,7 +19,8 @@ #define P1_FIRST_CHUNK 0x01 #define P1_FOLLOWING_CHUNK 0x00 -#define ALGO_SECP256K1 1 +#define STRUCT_TYPE_TRUSTED_NAME 0x03 +#define ALGO_SECP256K1 1 #define SLIP_44_ETHEREUM 60 @@ -139,10 +140,14 @@ static bool get_uint_from_data(const s_tlv_data *data, uint32_t *value) { static bool handle_structure_type(const s_tlv_data *data, s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { - (void) data; + uint32_t value; + (void) trusted_name_info; (void) sig_ctx; - return true; // unhandled for now + if (!get_uint_from_data(data, &value)) { + return false; + } + return (value == STRUCT_TYPE_TRUSTED_NAME); } /** From e1c1511e97a3e543322c7e09b8163cb68da0be37 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 17 Sep 2024 17:57:27 +0200 Subject: [PATCH 075/102] Renamed domain names to trusted names in doc --- doc/ethapp.adoc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/doc/ethapp.adoc b/doc/ethapp.adoc index cb77ae79f..bab35c4a8 100644 --- a/doc/ethapp.adoc +++ b/doc/ethapp.adoc @@ -39,7 +39,7 @@ Application version 1.9.19 - 2022-05-17 - Update to SIGN ETH EIP712 ### 1.10.2 - - Add domain names support + - Add trusted names support ### 1.11.0 - Add EIP-712 amount & date/time filtering @@ -1014,12 +1014,13 @@ _Output data_ |=========================================== -### PROVIDE DOMAIN NAME +### PROVIDE TRUSTED NAME #### Description -This command provides a domain name (like ENS) to be displayed during transactions in place of the address it is associated to. -It shall be run just before a transaction involving the associated address that would be displayed on the device. +This command provides a trusted name (like an ENS domain) to be displayed during transactions in place of the +address it is associated to. It shall be run just before a transaction/message involving the associated +address that would be displayed on the device. The signature is computed on the TLV payload (minus the signature obviously). From 2e365c5b9a00d40648aca432ea3d0313b95a1e20 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 20 Sep 2024 15:43:44 +0200 Subject: [PATCH 076/102] Trusted name V2 TLV payload support --- .../cmd_provide_trusted_name.c | 348 +++++++++++++++--- 1 file changed, 296 insertions(+), 52 deletions(-) diff --git a/src_features/provideTrustedName/cmd_provide_trusted_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c index 139baedca..9b9efd71b 100644 --- a/src_features/provideTrustedName/cmd_provide_trusted_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -29,20 +29,60 @@ typedef enum { TLV_TAG, TLV_LENGTH, TLV_VALUE } e_tlv_step; +// This enum needs to be ordered the same way as the e_tlv_tag one ! typedef enum { - STRUCTURE_TYPE = 0x01, - STRUCTURE_VERSION = 0x02, + STRUCT_TYPE_RCV_BIT = 0, + STRUCT_VERSION_RCV_BIT, + NOT_VALID_AFTER_RCV_BIT, + CHALLENGE_RCV_BIT, + SIGNER_KEY_ID_RCV_BIT, + SIGNER_ALGO_RCV_BIT, + SIGNATURE_RCV_BIT, + TRUSTED_NAME_RCV_BIT, + COIN_TYPE_RCV_BIT, + ADDRESS_RCV_BIT, + CHAIN_ID_RCV_BIT, + TRUSTED_NAME_TYPE_RCV_BIT, + TRUSTED_NAME_SOURCE_RCV_BIT, + NFT_ID_RCV_BIT, +} e_tlv_rcv_bit; + +#define RCV_FLAG(a) (1 << a) + +typedef enum { + STRUCT_TYPE = 0x01, + STRUCT_VERSION = 0x02, + NOT_VALID_AFTER = 0x10, CHALLENGE = 0x12, SIGNER_KEY_ID = 0x13, SIGNER_ALGO = 0x14, SIGNATURE = 0x15, TRUSTED_NAME = 0x20, COIN_TYPE = 0x21, - ADDRESS = 0x22 + ADDRESS = 0x22, + CHAIN_ID = 0x23, + TRUSTED_NAME_TYPE = 0x70, + TRUSTED_NAME_SOURCE = 0x71, + NFT_ID = 0x72, } e_tlv_tag; typedef enum { KEY_ID_TEST = 0x00, KEY_ID_PROD = 0x03 } e_key_id; +typedef enum { + TYPE_ACCOUNT = 1, + TYPE_CONTRACT, + TYPE_NFT, +} e_name_type; + +typedef enum { + SOURCE_LAB = 0, + SOURCE_CAL, + SOURCE_ENS, + SOURCE_UD, + SOURCE_FN, + SOURCE_DNS, +} e_name_source; + typedef struct { uint8_t *buf; uint16_t size; @@ -56,9 +96,15 @@ typedef struct { } s_tlv_data; typedef struct { + uint32_t rcv_flags; bool valid; + uint8_t struct_version; char *name; uint8_t addr[ADDRESS_LENGTH]; + uint64_t chain_id; + e_name_type name_type; + e_name_source name_source; + uint8_t nft_id[INT256_LENGTH]; } s_trusted_name_info; typedef struct { @@ -73,9 +119,9 @@ typedef bool(t_tlv_handler)(const s_tlv_data *data, s_sig_ctx *sig_ctx); typedef struct { - uint8_t tag; + e_tlv_tag tag; t_tlv_handler *func; - uint8_t found; + e_tlv_rcv_bit rcv_bit; } s_tlv_handler; static s_tlv_payload g_tlv_payload = {0}; @@ -83,8 +129,9 @@ static s_trusted_name_info g_trusted_name_info; char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; /** - * Checks if a trusted name for the given chain ID and address is known + * Checks if a trusted name matches the given parameters * + * Does not care about the trusted name source for now. * Always wipes the content of \ref g_trusted_name_info * * @param[in] chain_id given chain ID @@ -130,16 +177,16 @@ static bool get_uint_from_data(const s_tlv_data *data, uint32_t *value) { } /** - * Handler for tag \ref STRUCTURE_TYPE + * Handler for tag \ref STRUCT_TYPE * - * @param[] data the tlv data + * @param[in] data the tlv data * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ -static bool handle_structure_type(const s_tlv_data *data, - s_trusted_name_info *trusted_name_info, - s_sig_ctx *sig_ctx) { +static bool handle_struct_type(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { uint32_t value; (void) trusted_name_info; @@ -151,20 +198,59 @@ static bool handle_structure_type(const s_tlv_data *data, } /** - * Handler for tag \ref STRUCTURE_VERSION + * Handler for tag \ref NOT_VALID_AFTER * - * @param[] data the tlv data + * @param[in] data the tlv data * @param[] trusted_name_info the trusted name information * @param[] sig_ctx the signature context * @return whether it was successful */ -static bool handle_structure_version(const s_tlv_data *data, - s_trusted_name_info *trusted_name_info, - s_sig_ctx *sig_ctx) { - (void) data; +static bool handle_not_valid_after(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + const uint8_t app_version[] = {MAJOR_VERSION, MINOR_VERSION, PATCH_VERSION}; + int i = 0; + (void) trusted_name_info; (void) sig_ctx; - return true; // unhandled for now + if (data->length != ARRAYLEN(app_version)) { + return false; + } + do { + if (data->value[i] < app_version[i]) { + PRINTF("Expired trusted name : %u.%u.%u < %u.%u.%u\n", + data->value[0], + data->value[1], + data->value[2], + app_version[0], + app_version[1], + app_version[2]); + return false; + } + i += 1; + } while ((i < (int) ARRAYLEN(app_version)) && (data->value[i] == app_version[i])); + return true; +} + +/** + * Handler for tag \ref STRUCT_VERSION + * + * @param[in] data the tlv data + * @param[out] trusted_name_info the trusted name information + * @param[] sig_ctx the signature context + * @return whether it was successful + */ +static bool handle_struct_version(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + uint32_t value; + + (void) sig_ctx; + if (!get_uint_from_data(data, &value) || (value > UINT8_MAX)) { + return false; + } + trusted_name_info->struct_version = value; + return true; } /** @@ -248,12 +334,12 @@ static bool handle_signature(const s_tlv_data *data, } /** - * Tests if the given domain name character is valid (in our subset of allowed characters) + * Tests if the given account name character is valid (in our subset of allowed characters) * * @param[in] c given character * @return whether the character is valid */ -static bool is_valid_domain_character(char c) { +static bool is_valid_account_character(char c) { if (isalpha((int) c)) { if (!islower((int) c)) { return false; @@ -287,17 +373,23 @@ static bool handle_trusted_name(const s_tlv_data *data, PRINTF("Domain name too long! (%u)\n", data->length); return false; } - // TODO: Remove once other domain name providers are supported - if ((data->length < 5) || (strncmp(".eth", (char *) &data->value[data->length - 4], 4) != 0)) { - PRINTF("Unexpected TLD!\n"); - return false; - } - for (int idx = 0; idx < data->length; ++idx) { - if (!is_valid_domain_character(data->value[idx])) { - PRINTF("Domain name contains non-allowed character! (0x%x)\n", data->value[idx]); + if ((trusted_name_info->struct_version == 1) || + (trusted_name_info->name_type == TYPE_ACCOUNT)) { + // TODO: Remove once other domain name providers are supported + if ((data->length < 5) || + (strncmp(".eth", (char *) &data->value[data->length - 4], 4) != 0)) { + PRINTF("Unexpected TLD!\n"); return false; } - trusted_name_info->name[idx] = data->value[idx]; + for (int idx = 0; idx < data->length; ++idx) { + if (!is_valid_account_character(data->value[idx])) { + PRINTF("Domain name contains non-allowed character! (0x%x)\n", data->value[idx]); + return false; + } + trusted_name_info->name[idx] = data->value[idx]; + } + } else { + memcpy(trusted_name_info->name, data->value, data->length); } trusted_name_info->name[data->length] = '\0'; return true; @@ -343,6 +435,111 @@ static bool handle_address(const s_tlv_data *data, return true; } +/** + * Handler for tag \ref CHAIN_ID + * + * @param[in] data the tlv data + * @param[out] trusted_name_info the trusted name information + * @param[] sig_ctx the signature context + * @return whether it was successful + */ +static bool handle_chain_id(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + (void) sig_ctx; + trusted_name_info->chain_id = u64_from_BE(data->value, data->length); + return true; +} + +/** + * Handler for tag \ref TRUSTED_NAME_TYPE + * + * @param[in] data the tlv data + * @param[out] trusted_name_info the trusted name information + * @param[] sig_ctx the signature context + * @return whether it was successful + */ +static bool handle_trusted_name_type(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + uint32_t value; + + (void) trusted_name_info; + (void) sig_ctx; + if (!get_uint_from_data(data, &value) || (value > UINT8_MAX)) { + return false; + } + switch (value) { + case TYPE_ACCOUNT: + case TYPE_CONTRACT: + break; + case TYPE_NFT: + default: + PRINTF("Error: unsupported trusted name type (%u)!\n", value); + return false; + } + trusted_name_info->name_type = value; + return true; +} + +/** + * Handler for tag \ref TRUSTED_NAME_SOURCE + * + * @param[in] data the tlv data + * @param[out] trusted_name_info the trusted name information + * @param[] sig_ctx the signature context + * @return whether it was successful + */ +static bool handle_trusted_name_source(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + uint32_t value; + + (void) trusted_name_info; + (void) sig_ctx; + if (!get_uint_from_data(data, &value) || (value > UINT8_MAX)) { + return false; + } + switch (value) { + case SOURCE_CAL: + case SOURCE_ENS: + break; + case SOURCE_LAB: + case SOURCE_UD: + case SOURCE_FN: + case SOURCE_DNS: + default: + PRINTF("Error: unsupported trusted name source (%u)!\n", value); + return false; + } + trusted_name_info->name_source = value; + return true; +} + +/** + * Handler for tag \ref NFT_ID + * + * @param[in] data the tlv data + * @param[out] trusted_name_info the trusted name information + * @param[] sig_ctx the signature context + * @return whether it was successful + */ +static bool handle_nft_id(const s_tlv_data *data, + s_trusted_name_info *trusted_name_info, + s_sig_ctx *sig_ctx) { + size_t diff; + + (void) trusted_name_info; + (void) sig_ctx; + if (data->length > sizeof(trusted_name_info->nft_id)) { + return false; + } + diff = sizeof(trusted_name_info->nft_id) - data->length; + memmove(trusted_name_info->nft_id + diff, data->value, data->length); + explicit_bzero(trusted_name_info->nft_id, diff); + return true; // unhandled for now +} + /** * Verify the signature context * @@ -407,7 +604,7 @@ static bool handle_tlv_data(s_tlv_handler *handlers, // check if a handler exists for this tag for (int idx = 0; idx < handler_count; ++idx) { if (handlers[idx].tag == data->tag) { - handlers[idx].found += 1; + trusted_name_info->rcv_flags |= RCV_FLAG(handlers[idx].rcv_bit); fptr = PIC(handlers[idx].func); if (!(*fptr)(data, trusted_name_info, sig_ctx)) { PRINTF("Error while handling tag 0x%x\n", handlers[idx].tag); @@ -420,21 +617,61 @@ static bool handle_tlv_data(s_tlv_handler *handlers, } /** - * Checks if all the TLV tags were found during parsing + * Verify the validity of the received trusted struct * - * @param[in,out] handlers list of tag / handler function pairs - * @param[in] handler_count number of handlers - * @return whether all tags were found + * @param[in] trusted_name_info the trusted name information + * @return whether the struct is valid */ -static bool check_found_tlv_tags(s_tlv_handler *handlers, int handler_count) { - // prevent missing or duplicated tags - for (int idx = 0; idx < handler_count; ++idx) { - if (handlers[idx].found != 1) { - PRINTF("Found %u occurrence(s) of tag 0x%x in TLV!\n", - handlers[idx].found, - handlers[idx].tag); +static bool verify_struct(const s_trusted_name_info *trusted_name_info) { + uint32_t required_flags; + + if (!(RCV_FLAG(STRUCT_VERSION_RCV_BIT) & trusted_name_info->rcv_flags)) { + PRINTF("Error: no struct version specified!\n"); + return false; + } + required_flags = RCV_FLAG(STRUCT_TYPE_RCV_BIT) | RCV_FLAG(STRUCT_VERSION_RCV_BIT) | + RCV_FLAG(SIGNER_KEY_ID_RCV_BIT) | RCV_FLAG(SIGNER_ALGO_RCV_BIT) | + RCV_FLAG(SIGNATURE_RCV_BIT) | RCV_FLAG(TRUSTED_NAME_RCV_BIT) | + RCV_FLAG(ADDRESS_RCV_BIT); + switch (trusted_name_info->struct_version) { + case 1: + required_flags |= RCV_FLAG(CHALLENGE_RCV_BIT) | RCV_FLAG(COIN_TYPE_RCV_BIT); + if ((trusted_name_info->rcv_flags & required_flags) != required_flags) { + return false; + } + break; + case 2: + required_flags |= RCV_FLAG(CHAIN_ID_RCV_BIT) | RCV_FLAG(TRUSTED_NAME_TYPE_RCV_BIT) | + RCV_FLAG(TRUSTED_NAME_SOURCE_RCV_BIT); + if ((trusted_name_info->rcv_flags & required_flags) != required_flags) { + return false; + } + switch (trusted_name_info->name_type) { + case TYPE_ACCOUNT: + if (trusted_name_info->name_source == SOURCE_CAL) { + PRINTF("Error: cannot accept an account name from the CAL!\n"); + return false; + } + if (!(trusted_name_info->rcv_flags & RCV_FLAG(CHALLENGE_RCV_BIT))) { + PRINTF("Error: trusted account name requires a challenge!\n"); + return false; + } + break; + case TYPE_CONTRACT: + if (trusted_name_info->name_source != SOURCE_CAL) { + PRINTF("Error: cannot accept a contract name from given source (%u)!\n", + trusted_name_info->name_source); + return false; + } + break; + default: + return false; + } + break; + default: + PRINTF("Error: unsupported trusted name struct version (%u) !\n", + trusted_name_info->struct_version); return false; - } } return true; } @@ -522,20 +759,27 @@ static bool parse_tlv(const s_tlv_payload *payload, s_trusted_name_info *trusted_name_info, s_sig_ctx *sig_ctx) { s_tlv_handler handlers[] = { - {.tag = STRUCTURE_TYPE, .func = &handle_structure_type, .found = 0}, - {.tag = STRUCTURE_VERSION, .func = &handle_structure_version, .found = 0}, - {.tag = CHALLENGE, .func = &handle_challenge, .found = 0}, - {.tag = SIGNER_KEY_ID, .func = &handle_sign_key_id, .found = 0}, - {.tag = SIGNER_ALGO, .func = &handle_sign_algo, .found = 0}, - {.tag = SIGNATURE, .func = &handle_signature, .found = 0}, - {.tag = TRUSTED_NAME, .func = &handle_trusted_name, .found = 0}, - {.tag = COIN_TYPE, .func = &handle_coin_type, .found = 0}, - {.tag = ADDRESS, .func = &handle_address, .found = 0}}; + {.tag = STRUCT_TYPE, .func = &handle_struct_type}, + {.tag = STRUCT_VERSION, .func = &handle_struct_version}, + {.tag = NOT_VALID_AFTER, .func = &handle_not_valid_after}, + {.tag = CHALLENGE, .func = &handle_challenge}, + {.tag = SIGNER_KEY_ID, .func = &handle_sign_key_id}, + {.tag = SIGNER_ALGO, .func = &handle_sign_algo}, + {.tag = SIGNATURE, .func = &handle_signature}, + {.tag = TRUSTED_NAME, .func = &handle_trusted_name}, + {.tag = COIN_TYPE, .func = &handle_coin_type}, + {.tag = ADDRESS, .func = &handle_address}, + {.tag = CHAIN_ID, .func = &handle_chain_id}, + {.tag = TRUSTED_NAME_TYPE, .func = &handle_trusted_name_type}, + {.tag = TRUSTED_NAME_SOURCE, .func = &handle_trusted_name_source}, + {.tag = NFT_ID, .func = &handle_nft_id}, + }; e_tlv_step step = TLV_TAG; s_tlv_data data; size_t offset = 0; size_t tag_start_off; + for (size_t i = 0; i < ARRAYLEN(handlers); ++i) handlers[i].rcv_bit = i; cx_sha256_init(&sig_ctx->hash_ctx); // handle TLV payload while (offset < payload->size) { @@ -580,7 +824,7 @@ static bool parse_tlv(const s_tlv_payload *payload, return false; } } - return check_found_tlv_tags(handlers, ARRAY_SIZE(handlers)); + return verify_struct(trusted_name_info); } /** From 49b0657e96e175061bd8f67662c6910e59c6cb45 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 18 Sep 2024 14:42:10 +0200 Subject: [PATCH 077/102] Improved has_trusted_name function --- src_bagl/ui_flow_signTx.c | 3 +- .../cmd_provide_trusted_name.c | 57 +++++++++++-------- .../provideTrustedName/trusted_name.h | 20 ++++++- src_nbgl/ui_approve_tx.c | 3 +- 4 files changed, 56 insertions(+), 27 deletions(-) diff --git a/src_bagl/ui_flow_signTx.c b/src_bagl/ui_flow_signTx.c index 6fcdb80c6..6558442e0 100644 --- a/src_bagl/ui_flow_signTx.c +++ b/src_bagl/ui_flow_signTx.c @@ -244,7 +244,8 @@ void ux_approve_tx(bool fromPlugin) { ux_approval_tx_flow[step++] = &ux_approval_amount_step; #ifdef HAVE_TRUSTED_NAME uint64_t chain_id = get_tx_chain_id(); - if (has_trusted_name(&chain_id, tmpContent.txContent.destination)) { + e_name_type type = TYPE_ACCOUNT; + if (has_trusted_name(1, &type, &chain_id, tmpContent.txContent.destination)) { ux_approval_tx_flow[step++] = &ux_trusted_name_step; if (N_storage.verbose_trusted_name) { ux_approval_tx_flow[step++] = &ux_approval_to_step; diff --git a/src_features/provideTrustedName/cmd_provide_trusted_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c index 9b9efd71b..c9cdefe5c 100644 --- a/src_features/provideTrustedName/cmd_provide_trusted_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -68,21 +68,6 @@ typedef enum { typedef enum { KEY_ID_TEST = 0x00, KEY_ID_PROD = 0x03 } e_key_id; -typedef enum { - TYPE_ACCOUNT = 1, - TYPE_CONTRACT, - TYPE_NFT, -} e_name_type; - -typedef enum { - SOURCE_LAB = 0, - SOURCE_CAL, - SOURCE_ENS, - SOURCE_UD, - SOURCE_FN, - SOURCE_DNS, -} e_name_source; - typedef struct { uint8_t *buf; uint16_t size; @@ -125,7 +110,7 @@ typedef struct { } s_tlv_handler; static s_tlv_payload g_tlv_payload = {0}; -static s_trusted_name_info g_trusted_name_info; +static s_trusted_name_info g_trusted_name_info = {0}; char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; /** @@ -134,21 +119,45 @@ char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; * Does not care about the trusted name source for now. * Always wipes the content of \ref g_trusted_name_info * + * @param[in] types_count number of given trusted name types + * @param[in] types given trusted name types * @param[in] chain_id given chain ID * @param[in] addr given address * @return whether there is or not */ -bool has_trusted_name(const uint64_t *chain_id, const uint8_t *addr) { +bool has_trusted_name(uint8_t types_count, + const e_name_type *types, + const uint64_t *chain_id, + const uint8_t *addr) { bool ret = false; - if (g_trusted_name_info.valid) { - // Check if chain ID is known to be Ethereum-compatible (same derivation path) - if ((chain_is_ethereum_compatible(chain_id)) && - (memcmp(addr, g_trusted_name_info.addr, ADDRESS_LENGTH) == 0)) { - ret = true; + if (g_trusted_name_info.rcv_flags != 0) { + for (int i = 0; i < types_count; ++i) { + switch (g_trusted_name_info.struct_version) { + case 1: + if (types[i] == TYPE_ACCOUNT) { + // Check if chain ID is known to be Ethereum-compatible (same derivation + // path) + if ((chain_is_ethereum_compatible(chain_id)) && + (memcmp(addr, g_trusted_name_info.addr, ADDRESS_LENGTH) == 0)) { + ret = true; + } + } + break; + case 2: + if (types[i] == g_trusted_name_info.name_type) { + if (*chain_id == g_trusted_name_info.chain_id) { + ret = true; + } + } + break; + default: + ret = false; + } + if (ret) break; } + memset(&g_trusted_name_info, 0, sizeof(g_trusted_name_info)); } - memset(&g_trusted_name_info, 0, sizeof(g_trusted_name_info)); return ret; } @@ -917,9 +926,9 @@ uint16_t handle_provide_trusted_name(uint8_t p1, const uint8_t *data, uint8_t le !verify_signature(&sig_ctx)) { free_payload(&g_tlv_payload); roll_challenge(); // prevent brute-force guesses + g_trusted_name_info.rcv_flags = 0; return APDU_RESPONSE_INVALID_DATA; } - g_trusted_name_info.valid = true; PRINTF("Registered : %s => %.*h\n", g_trusted_name_info.name, ADDRESS_LENGTH, diff --git a/src_features/provideTrustedName/trusted_name.h b/src_features/provideTrustedName/trusted_name.h index 51ab3f1ea..142a5b7b0 100644 --- a/src_features/provideTrustedName/trusted_name.h +++ b/src_features/provideTrustedName/trusted_name.h @@ -8,7 +8,25 @@ #define TRUSTED_NAME_MAX_LENGTH 30 -bool has_trusted_name(const uint64_t *chain_id, const uint8_t *addr); +typedef enum { + TYPE_ACCOUNT = 1, + TYPE_CONTRACT, + TYPE_NFT, +} e_name_type; + +typedef enum { + SOURCE_LAB = 0, + SOURCE_CAL, + SOURCE_ENS, + SOURCE_UD, + SOURCE_FN, + SOURCE_DNS, +} e_name_source; + +bool has_trusted_name(uint8_t types_count, + const e_name_type *types, + const uint64_t *chain_id, + const uint8_t *addr); uint16_t handle_provide_trusted_name(uint8_t p1, const uint8_t *data, uint8_t length); extern char g_trusted_name[TRUSTED_NAME_MAX_LENGTH + 1]; diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index 254129b48..3553abb7f 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -132,8 +132,9 @@ static uint8_t setTagValuePairs(void) { #ifdef HAVE_TRUSTED_NAME uint64_t chain_id = get_tx_chain_id(); + e_name_type type = TYPE_ACCOUNT; tx_approval_context.trusted_name_match = - has_trusted_name(&chain_id, tmpContent.txContent.destination); + has_trusted_name(1, &type, &chain_id, tmpContent.txContent.destination); if (tx_approval_context.trusted_name_match) { pairs[nbPairs].item = "To (domain)"; pairs[nbPairs].value = g_trusted_name; From 6178416a1be68b7bbf9fb5108691ed68ffaa7efe Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 17 Sep 2024 15:30:30 +0200 Subject: [PATCH 078/102] Trusted name V2 support in python client + global renaming domain name -> trusted name --- .../src/ledger_app_clients/ethereum/client.py | 83 ++++++++++++++---- .../ethereum/command_builder.py | 6 +- .../ledger_app_clients/ethereum/keychain.py | 2 +- .../{domain_name.pem => trusted_name.pem} | 0 .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00000.png | Bin .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin ...st_domain_name.py => test_trusted_name.py} | 69 ++++++++------- 141 files changed, 105 insertions(+), 55 deletions(-) rename client/src/ledger_app_clients/ethereum/keychain/{domain_name.pem => trusted_name.pem} (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1}/00000.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1}/00001.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1}/00002.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1}/00003.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1}/00004.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1}/00005.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00000.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00001.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00002.png (100%) rename tests/ragger/snapshots/flex/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00003.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00004.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00005.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00000.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00001.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00002.png (100%) rename tests/ragger/snapshots/flex/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00003.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00004.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00005.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00000.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00001.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00002.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00003.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00004.png (100%) rename tests/ragger/snapshots/flex/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00005.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00000.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00001.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00002.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00003.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00004.png (100%) rename tests/ragger/snapshots/flex/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1}/00000.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1}/00001.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1}/00002.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1}/00003.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1}/00004.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1}/00006.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00000.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00001.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00002.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00003.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00004.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00006.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00007.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00000.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00001.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00002.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00003.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00004.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00006.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00007.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00000.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00001.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00002.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00003.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00004.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00006.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00007.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00000.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00001.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00002.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00003.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00004.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00005.png (100%) rename tests/ragger/snapshots/nanosp/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00006.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1}/00000.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1}/00001.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1}/00002.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1}/00003.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1}/00004.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1}/00005.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1}/00006.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00000.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_non_mainnet}/00001.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00002.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00003.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00004.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00005.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00006.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00007.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00000.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_False => test_trusted_name_v1_unknown_chain}/00001.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00002.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00003.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00004.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00005.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00006.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00007.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00000.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00001.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00002.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00003.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00004.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00005.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00006.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00007.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00000.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00001.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00002.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00003.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00004.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00005.png (100%) rename tests/ragger/snapshots/nanox/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00006.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1}/00000.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1}/00001.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1}/00002.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1}/00003.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1}/00004.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1}/00005.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00000.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00001.png (100%) rename tests/ragger/snapshots/stax/{domain_name_non_mainnet => test_trusted_name_v1_non_mainnet}/00002.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00003.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00004.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_False => test_trusted_name_v1_non_mainnet}/00005.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00000.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00001.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00002.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00003.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00004.png (100%) rename tests/ragger/snapshots/stax/{domain_name_unknown_chain => test_trusted_name_v1_unknown_chain}/00005.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00000.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00001.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00002.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00003.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00004.png (100%) rename tests/ragger/snapshots/stax/{domain_name_verbose_True => test_trusted_name_v1_verbose}/00005.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00000.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00001.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00002.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00003.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00004.png (100%) rename tests/ragger/snapshots/stax/{domain_name_wrong_addr => test_trusted_name_v1_wrong_addr}/00005.png (100%) rename tests/ragger/{test_domain_name.py => test_trusted_name.py} (64%) diff --git a/client/src/ledger_app_clients/ethereum/client.py b/client/src/ledger_app_clients/ethereum/client.py index a6008402b..3f95c82c2 100644 --- a/client/src/ledger_app_clients/ethereum/client.py +++ b/client/src/ledger_app_clients/ethereum/client.py @@ -1,4 +1,5 @@ import rlp +import struct from enum import IntEnum from ragger.backend import BackendInterface from ragger.firmware import Firmware @@ -27,16 +28,36 @@ class StatusWord(IntEnum): NOT_IMPLEMENTED = 0x911c -class DomainNameTag(IntEnum): - STRUCTURE_TYPE = 0x01 - STRUCTURE_VERSION = 0x02 +class TrustedNameType(IntEnum): + ACCOUNT = 0x01 + CONTRACT = 0x02 + NFT = 0x03 + + +class TrustedNameSource(IntEnum): + LAB = 0x00 + CAL = 0x01 + ENS = 0x02 + UD = 0x03 + FN = 0x04 + DNS = 0x05 + + +class TrustedNameTag(IntEnum): + STRUCT_TYPE = 0x01 + STRUCT_VERSION = 0x02 + NOT_VALID_AFTER = 0x10 CHALLENGE = 0x12 SIGNER_KEY_ID = 0x13 SIGNER_ALGO = 0x14 SIGNATURE = 0x15 - DOMAIN_NAME = 0x20 + NAME = 0x20 COIN_TYPE = 0x21 ADDRESS = 0x22 + CHAIN_ID = 0x23 + NAME_TYPE = 0x70 + NAME_SOURCE = 0x71 + NFT_ID = 0x72 class PKIPubKeyUsage(IntEnum): @@ -217,8 +238,7 @@ def perform_privacy_operation(self, bip32_path, pubkey)) - def provide_domain_name(self, challenge: int, name: str, addr: bytes) -> RAPDU: - + def _provide_trusted_name_common(self, payload: bytes) -> RAPDU: if self._pki_client is None: print(f"Ledger-PKI Not supported on '{self._firmware.name}'") else: @@ -234,23 +254,48 @@ def provide_domain_name(self, challenge: int, name: str, addr: bytes) -> RAPDU: # pylint: enable=line-too-long self._pki_client.send_certificate(PKIPubKeyUsage.PUBKEY_USAGE_COIN_META, bytes.fromhex(cert_apdu)) - - payload = format_tlv(DomainNameTag.STRUCTURE_TYPE, 3) # TrustedDomainName - payload += format_tlv(DomainNameTag.STRUCTURE_VERSION, 1) - payload += format_tlv(DomainNameTag.SIGNER_KEY_ID, 0) # test key - payload += format_tlv(DomainNameTag.SIGNER_ALGO, 1) # secp256k1 - payload += format_tlv(DomainNameTag.CHALLENGE, challenge) - payload += format_tlv(DomainNameTag.COIN_TYPE, 0x3c) # ETH in slip-44 - payload += format_tlv(DomainNameTag.DOMAIN_NAME, name) - payload += format_tlv(DomainNameTag.ADDRESS, addr) - payload += format_tlv(DomainNameTag.SIGNATURE, - sign_data(Key.DOMAIN_NAME, payload)) - - chunks = self._cmd_builder.provide_domain_name(payload) + payload += format_tlv(TrustedNameTag.STRUCT_TYPE, 3) # TrustedName + payload += format_tlv(TrustedNameTag.SIGNER_KEY_ID, 0) # test key + payload += format_tlv(TrustedNameTag.SIGNER_ALGO, 1) # secp256k1 + payload += format_tlv(TrustedNameTag.SIGNATURE, + sign_data(Key.TRUSTED_NAME, payload)) + chunks = self._cmd_builder.provide_trusted_name(payload) for chunk in chunks[:-1]: self._exchange(chunk) return self._exchange(chunks[-1]) + def provide_trusted_name_v1(self, addr: bytes, name: str, challenge: int) -> RAPDU: + payload = format_tlv(TrustedNameTag.STRUCT_VERSION, 1) + payload += format_tlv(TrustedNameTag.CHALLENGE, challenge) + payload += format_tlv(TrustedNameTag.COIN_TYPE, 0x3c) # ETH in slip-44 + payload += format_tlv(TrustedNameTag.NAME, name) + payload += format_tlv(TrustedNameTag.ADDRESS, addr) + return self._provide_trusted_name_common(payload) + + def provide_trusted_name_v2(self, + addr: bytes, + name: str, + name_type: TrustedNameType, + name_source: TrustedNameSource, + chain_id: int, + nft_id: Optional[int] = None, + challenge: Optional[int] = None, + not_valid_after: Optional[tuple[int]] = None) -> RAPDU: + payload = format_tlv(TrustedNameTag.STRUCT_VERSION, 2) + payload += format_tlv(TrustedNameTag.NAME, name) + payload += format_tlv(TrustedNameTag.ADDRESS, addr) + payload += format_tlv(TrustedNameTag.NAME_TYPE, name_type) + payload += format_tlv(TrustedNameTag.NAME_SOURCE, name_source) + payload += format_tlv(TrustedNameTag.CHAIN_ID, chain_id) + if nft_id is not None: + payload += format_tlv(TrustedNameTag.NFT_ID, nft_id) + if challenge is not None: + payload += format_tlv(TrustedNameTag.CHALLENGE, challenge) + if not_valid_after is not None: + assert len(not_valid_after) == 3 + payload += format_tlv(TrustedNameTag.NOT_VALID_AFTER, struct.pack("BBB", *not_valid_after)) + return self._provide_trusted_name_common(payload) + def set_plugin(self, plugin_name: str, contract_addr: bytes, diff --git a/client/src/ledger_app_clients/ethereum/command_builder.py b/client/src/ledger_app_clients/ethereum/command_builder.py index 238a19b66..67399448a 100644 --- a/client/src/ledger_app_clients/ethereum/command_builder.py +++ b/client/src/ledger_app_clients/ethereum/command_builder.py @@ -23,7 +23,7 @@ class InsType(IntEnum): EIP712_SEND_FILTERING = 0x1e EIP712_SIGN = 0x0c GET_CHALLENGE = 0x20 - PROVIDE_DOMAIN_NAME = 0x22 + PROVIDE_TRUSTED_NAME = 0x22 EXTERNAL_PLUGIN_SETUP = 0x12 @@ -260,13 +260,13 @@ def sign(self, bip32_path: str, rlp_data: bytes, vrs: list) -> list[bytes]: def get_challenge(self) -> bytes: return self._serialize(InsType.GET_CHALLENGE, 0x00, 0x00) - def provide_domain_name(self, tlv_payload: bytes) -> list[bytes]: + def provide_trusted_name(self, tlv_payload: bytes) -> list[bytes]: chunks = list() payload = struct.pack(">H", len(tlv_payload)) payload += tlv_payload p1 = 1 while len(payload) > 0: - chunks.append(self._serialize(InsType.PROVIDE_DOMAIN_NAME, + chunks.append(self._serialize(InsType.PROVIDE_TRUSTED_NAME, p1, 0x00, payload[:0xff])) diff --git a/client/src/ledger_app_clients/ethereum/keychain.py b/client/src/ledger_app_clients/ethereum/keychain.py index 0fc6712b1..4eb638573 100644 --- a/client/src/ledger_app_clients/ethereum/keychain.py +++ b/client/src/ledger_app_clients/ethereum/keychain.py @@ -9,7 +9,7 @@ # Example: for an entry in the Enum named DEV, its PEM file must be at keychain/dev.pem class Key(Enum): CAL = auto() - DOMAIN_NAME = auto() + TRUSTED_NAME = auto() SET_PLUGIN = auto() NFT = auto() diff --git a/client/src/ledger_app_clients/ethereum/keychain/domain_name.pem b/client/src/ledger_app_clients/ethereum/keychain/trusted_name.pem similarity index 100% rename from client/src/ledger_app_clients/ethereum/keychain/domain_name.pem rename to client/src/ledger_app_clients/ethereum/keychain/trusted_name.pem diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00000.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00000.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00000.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00001.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00001.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00001.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00002.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00002.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00002.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00003.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00003.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00003.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00004.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00004.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00004.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00005.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00005.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1/00005.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00000.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00000.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00000.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00001.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00001.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00001.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00002.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00002.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00002.png diff --git a/tests/ragger/snapshots/flex/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00003.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_non_mainnet/00003.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00003.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00004.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00004.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00004.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00005.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00005.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00005.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00000.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00000.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00000.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00001.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00001.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00001.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00002.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00002.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00002.png diff --git a/tests/ragger/snapshots/flex/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00003.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_unknown_chain/00003.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00003.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00004.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00004.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00004.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_False/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00005.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_False/00005.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00005.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00000.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00000.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00000.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00001.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00001.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00001.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00002.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00002.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00002.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00003.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00003.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00003.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00004.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00004.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00004.png diff --git a/tests/ragger/snapshots/flex/domain_name_verbose_True/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00005.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_verbose_True/00005.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00005.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00000.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00000.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00000.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00001.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00001.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00001.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00002.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00002.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00002.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00003.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00003.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00003.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00004.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00004.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00004.png diff --git a/tests/ragger/snapshots/flex/domain_name_wrong_addr/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00005.png similarity index 100% rename from tests/ragger/snapshots/flex/domain_name_wrong_addr/00005.png rename to tests/ragger/snapshots/flex/test_trusted_name_v1_wrong_addr/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00000.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00000.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00000.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00001.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00001.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00001.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00002.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00002.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00002.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00003.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00003.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00003.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00004.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00004.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00005.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00005.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00005.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00006.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1/00006.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00006.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1/00006.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00000.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00000.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00000.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00001.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00001.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00001.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00001.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00002.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00002.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00002.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00003.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00003.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00003.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00004.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00004.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00005.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00005.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00005.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00006.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00006.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00006.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00006.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00007.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00007.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_non_mainnet/00007.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_non_mainnet/00007.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00000.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00000.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00000.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_False/00001.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00001.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_False/00001.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00001.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00002.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00002.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00002.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00003.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00003.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00003.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00004.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00004.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00005.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00005.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00005.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00006.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00006.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00006.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00006.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00007.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00007.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_unknown_chain/00007.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_unknown_chain/00007.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00000.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00000.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00000.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00001.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00001.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00001.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00001.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00002.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00002.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00002.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00003.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00003.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00003.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00004.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00004.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00005.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00005.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00005.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00006.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00006.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00006.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00006.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_verbose_True/00007.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00007.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_verbose_True/00007.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_verbose/00007.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00000.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00000.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00000.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00001.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00001.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00001.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00001.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00002.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00002.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00002.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00003.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00003.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00003.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00004.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00004.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00004.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00005.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00005.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00005.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00005.png diff --git a/tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00006.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00006.png similarity index 100% rename from tests/ragger/snapshots/nanosp/domain_name_wrong_addr/00006.png rename to tests/ragger/snapshots/nanosp/test_trusted_name_v1_wrong_addr/00006.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00000.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00000.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00000.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00001.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00001.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00001.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00002.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00002.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00002.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00003.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00003.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00003.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00004.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00004.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00004.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00005.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00005.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00005.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00005.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00006.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1/00006.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00006.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1/00006.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00000.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00000.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00000.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00001.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00001.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00001.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00001.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00002.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00002.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00002.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00003.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00003.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00003.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00004.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00004.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00004.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00005.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00005.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00005.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00005.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00006.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00006.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00006.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00006.png diff --git a/tests/ragger/snapshots/nanox/domain_name_non_mainnet/00007.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00007.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_non_mainnet/00007.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_non_mainnet/00007.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00000.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00000.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00000.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_False/00001.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00001.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_False/00001.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00001.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00002.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00002.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00002.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00003.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00003.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00003.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00004.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00004.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00004.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00005.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00005.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00005.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00005.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00006.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00006.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00006.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00006.png diff --git a/tests/ragger/snapshots/nanox/domain_name_unknown_chain/00007.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00007.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_unknown_chain/00007.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_unknown_chain/00007.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00000.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00000.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00000.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00001.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00001.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00001.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00001.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00002.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00002.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00002.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00003.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00003.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00003.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00004.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00004.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00004.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00005.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00005.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00005.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00005.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00006.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00006.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00006.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00006.png diff --git a/tests/ragger/snapshots/nanox/domain_name_verbose_True/00007.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00007.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_verbose_True/00007.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_verbose/00007.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00000.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00000.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00000.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00001.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00001.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00001.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00001.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00002.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00002.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00002.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00003.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00003.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00003.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00004.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00004.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00004.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00005.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00005.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00005.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00005.png diff --git a/tests/ragger/snapshots/nanox/domain_name_wrong_addr/00006.png b/tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00006.png similarity index 100% rename from tests/ragger/snapshots/nanox/domain_name_wrong_addr/00006.png rename to tests/ragger/snapshots/nanox/test_trusted_name_v1_wrong_addr/00006.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00000.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00000.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00000.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00001.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00001.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00001.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00002.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00002.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00002.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00003.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00003.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00003.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00004.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00004.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00004.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v1/00005.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00005.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1/00005.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00000.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00000.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00000.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00001.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00001.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00001.png diff --git a/tests/ragger/snapshots/stax/domain_name_non_mainnet/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00002.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_non_mainnet/00002.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00002.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00003.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00003.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00003.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00004.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00004.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00004.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_False/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00005.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_False/00005.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_non_mainnet/00005.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00000.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00000.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00000.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00001.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00001.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00001.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00002.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00002.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00002.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00003.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00003.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00003.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00004.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00004.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00004.png diff --git a/tests/ragger/snapshots/stax/domain_name_unknown_chain/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00005.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_unknown_chain/00005.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_unknown_chain/00005.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00000.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00000.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00000.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00001.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00001.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00001.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00002.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00002.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00002.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00003.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00003.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00003.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00004.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00004.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00004.png diff --git a/tests/ragger/snapshots/stax/domain_name_verbose_True/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00005.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_verbose_True/00005.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_verbose/00005.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00000.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00000.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00000.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00001.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00001.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00001.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00002.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00002.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00002.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00003.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00003.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00003.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00004.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00004.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00004.png diff --git a/tests/ragger/snapshots/stax/domain_name_wrong_addr/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00005.png similarity index 100% rename from tests/ragger/snapshots/stax/domain_name_wrong_addr/00005.png rename to tests/ragger/snapshots/stax/test_trusted_name_v1_wrong_addr/00005.png diff --git a/tests/ragger/test_domain_name.py b/tests/ragger/test_trusted_name.py similarity index 64% rename from tests/ragger/test_domain_name.py rename to tests/ragger/test_trusted_name.py index 438e91d11..ea9e0176e 100644 --- a/tests/ragger/test_domain_name.py +++ b/tests/ragger/test_trusted_name.py @@ -39,18 +39,20 @@ def common(firmware: Firmware, app_client: EthAppClient) -> int: return ResponseParser.challenge(challenge.data) -def test_send_fund(firmware: Firmware, - backend: BackendInterface, - navigator: Navigator, - scenario_navigator: NavigateWithScenario, - verbose: bool): +def test_trusted_name_v1(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + scenario_navigator: NavigateWithScenario, + verbose: bool, + test_name: str): app_client = EthAppClient(backend) challenge = common(firmware, app_client) if verbose: settings_toggle(firmware, navigator, [SettingID.VERBOSE_ENS]) + test_name += "_verbose" - app_client.provide_domain_name(challenge, NAME, ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME, challenge) with app_client.sign(BIP32_PATH, { @@ -66,25 +68,26 @@ def test_send_fund(firmware: Firmware, else: end_text = "Sign" - scenario_navigator.review_approve(test_name=f"domain_name_verbose_{str(verbose)}", custom_screen_text=end_text) + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) -def test_send_fund_wrong_challenge(firmware: Firmware, backend: BackendInterface): +def test_trusted_name_v1_wrong_challenge(firmware: Firmware, backend: BackendInterface): app_client = EthAppClient(backend) challenge = common(firmware, app_client) with pytest.raises(ExceptionRAPDU) as e: - app_client.provide_domain_name(~challenge & 0xffffffff, NAME, ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME, ~challenge & 0xffffffff) assert e.value.status == StatusWord.INVALID_DATA -def test_send_fund_wrong_addr(firmware: Firmware, - backend: BackendInterface, - scenario_navigator: NavigateWithScenario): +def test_trusted_name_v1_wrong_addr(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): app_client = EthAppClient(backend) challenge = common(firmware, app_client) - app_client.provide_domain_name(challenge, NAME, ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME, challenge) addr = bytearray(ADDR) addr.reverse() @@ -103,16 +106,17 @@ def test_send_fund_wrong_addr(firmware: Firmware, else: end_text = "Sign" - scenario_navigator.review_approve(test_name="domain_name_wrong_addr", custom_screen_text=end_text) + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) -def test_send_fund_non_mainnet(firmware: Firmware, - backend: BackendInterface, - scenario_navigator: NavigateWithScenario): +def test_trusted_name_v1_non_mainnet(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): app_client = EthAppClient(backend) challenge = common(firmware, app_client) - app_client.provide_domain_name(challenge, NAME, ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME, challenge) with app_client.sign(BIP32_PATH, { @@ -128,16 +132,17 @@ def test_send_fund_non_mainnet(firmware: Firmware, else: end_text = "Sign" - scenario_navigator.review_approve(test_name="domain_name_non_mainnet", custom_screen_text=end_text) + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) -def test_send_fund_unknown_chain(firmware: Firmware, - backend: BackendInterface, - scenario_navigator: NavigateWithScenario): +def test_trusted_name_v1_unknown_chain(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): app_client = EthAppClient(backend) challenge = common(firmware, app_client) - app_client.provide_domain_name(challenge, NAME, ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME, challenge) with app_client.sign(BIP32_PATH, { @@ -153,40 +158,40 @@ def test_send_fund_unknown_chain(firmware: Firmware, else: end_text = "Sign" - scenario_navigator.review_approve(test_name="domain_name_unknown_chain", custom_screen_text=end_text) + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) -def test_send_fund_domain_too_long(firmware: Firmware, backend: BackendInterface): +def test_trusted_name_v1_name_too_long(firmware: Firmware, backend: BackendInterface): app_client = EthAppClient(backend) challenge = common(firmware, app_client) with pytest.raises(ExceptionRAPDU) as e: - app_client.provide_domain_name(challenge, "ledger" + "0"*25 + ".eth", ADDR) + app_client.provide_trusted_name_v1(ADDR, "ledger" + "0"*25 + ".eth", challenge) assert e.value.status == StatusWord.INVALID_DATA -def test_send_fund_domain_invalid_character(firmware: Firmware, backend: BackendInterface): +def test_trusted_name_v1_name_invalid_character(firmware: Firmware, backend: BackendInterface): app_client = EthAppClient(backend) challenge = common(firmware, app_client) with pytest.raises(ExceptionRAPDU) as e: - app_client.provide_domain_name(challenge, "l\xe8dger.eth", ADDR) + app_client.provide_trusted_name_v1(ADDR, "l\xe8dger.eth", challenge) assert e.value.status == StatusWord.INVALID_DATA -def test_send_fund_uppercase(firmware: Firmware, backend: BackendInterface): +def test_trusted_name_v1_uppercase(firmware: Firmware, backend: BackendInterface): app_client = EthAppClient(backend) challenge = common(firmware, app_client) with pytest.raises(ExceptionRAPDU) as e: - app_client.provide_domain_name(challenge, NAME.upper(), ADDR) + app_client.provide_trusted_name_v1(ADDR, NAME.upper(), challenge) assert e.value.status == StatusWord.INVALID_DATA -def test_send_fund_domain_non_ens(firmware: Firmware, backend: BackendInterface): +def test_trusted_name_v1_name_non_ens(firmware: Firmware, backend: BackendInterface): app_client = EthAppClient(backend) challenge = common(firmware, app_client) with pytest.raises(ExceptionRAPDU) as e: - app_client.provide_domain_name(challenge, "ledger.hte", ADDR) + app_client.provide_trusted_name_v1(ADDR, "ledger.hte", challenge) assert e.value.status == StatusWord.INVALID_DATA From 2e0fa7b30ab0bda47f3c37e29cbc9469295ed0a0 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 18 Sep 2024 11:28:25 +0200 Subject: [PATCH 079/102] Trusted name v2 ragger tests --- .../flex/test_trusted_name_v2/00000.png | Bin 0 -> 9601 bytes .../flex/test_trusted_name_v2/00001.png | Bin 0 -> 16610 bytes .../flex/test_trusted_name_v2/00002.png | Bin 0 -> 7206 bytes .../flex/test_trusted_name_v2/00003.png | Bin 0 -> 10236 bytes .../flex/test_trusted_name_v2/00004.png | Bin 0 -> 6357 bytes .../flex/test_trusted_name_v2/00005.png | Bin 0 -> 12445 bytes .../00000.png | Bin 0 -> 8627 bytes .../00001.png | Bin 0 -> 20569 bytes .../00002.png | Bin 0 -> 8845 bytes .../00003.png | Bin 0 -> 9314 bytes .../00004.png | Bin 0 -> 6357 bytes .../00005.png | Bin 0 -> 12445 bytes .../nanosp/test_trusted_name_v2/00000.png | Bin 0 -> 414 bytes .../nanosp/test_trusted_name_v2/00001.png | Bin 0 -> 702 bytes .../nanosp/test_trusted_name_v2/00002.png | Bin 0 -> 368 bytes .../nanosp/test_trusted_name_v2/00003.png | Bin 0 -> 446 bytes .../nanosp/test_trusted_name_v2/00004.png | Bin 0 -> 434 bytes .../nanosp/test_trusted_name_v2/00005.png | Bin 0 -> 472 bytes .../nanosp/test_trusted_name_v2/00006.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 702 bytes .../00002.png | Bin 0 -> 358 bytes .../00003.png | Bin 0 -> 527 bytes .../00004.png | Bin 0 -> 329 bytes .../00005.png | Bin 0 -> 420 bytes .../00006.png | Bin 0 -> 472 bytes .../00007.png | Bin 0 -> 381 bytes .../nanox/test_trusted_name_v2/00000.png | Bin 0 -> 414 bytes .../nanox/test_trusted_name_v2/00001.png | Bin 0 -> 702 bytes .../nanox/test_trusted_name_v2/00002.png | Bin 0 -> 368 bytes .../nanox/test_trusted_name_v2/00003.png | Bin 0 -> 446 bytes .../nanox/test_trusted_name_v2/00004.png | Bin 0 -> 434 bytes .../nanox/test_trusted_name_v2/00005.png | Bin 0 -> 472 bytes .../nanox/test_trusted_name_v2/00006.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 414 bytes .../00001.png | Bin 0 -> 702 bytes .../00002.png | Bin 0 -> 358 bytes .../00003.png | Bin 0 -> 527 bytes .../00004.png | Bin 0 -> 329 bytes .../00005.png | Bin 0 -> 420 bytes .../00006.png | Bin 0 -> 472 bytes .../00007.png | Bin 0 -> 381 bytes .../stax/test_trusted_name_v2/00000.png | Bin 0 -> 9085 bytes .../stax/test_trusted_name_v2/00001.png | Bin 0 -> 17087 bytes .../stax/test_trusted_name_v2/00002.png | Bin 0 -> 9650 bytes .../stax/test_trusted_name_v2/00003.png | Bin 0 -> 6218 bytes .../stax/test_trusted_name_v2/00004.png | Bin 0 -> 10991 bytes .../00000.png | Bin 0 -> 8078 bytes .../00001.png | Bin 0 -> 20415 bytes .../00002.png | Bin 0 -> 5603 bytes .../00003.png | Bin 0 -> 8666 bytes .../00004.png | Bin 0 -> 6218 bytes .../00005.png | Bin 0 -> 10991 bytes tests/ragger/test_trusted_name.py | 101 +++++++++++++++++- 54 files changed, 97 insertions(+), 4 deletions(-) create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00000.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00001.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00002.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00003.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00004.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2/00005.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00000.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00001.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00002.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00003.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00004.png create mode 100644 tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2/00006.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00006.png create mode 100644 tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00007.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2/00006.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00006.png create mode 100644 tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00007.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2/00000.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2/00001.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2/00002.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2/00003.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2/00004.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00000.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00001.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00002.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00003.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00004.png create mode 100644 tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00005.png diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v2/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd4319e22aadce8ef830091e379d35c75008321 GIT binary patch literal 9601 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 X{iQ+f8^B+y*o+L!Zq@$%Fya3IkvgyK literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v2/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..77e339b5deb2c042458a36e2e55122607684eac5 GIT binary patch literal 16610 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 E2kLgh<^TWy literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..be51a9d5595cf5ea25f8f90b684306d30395f329 GIT binary patch literal 6357 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 UPsf12D=dzNgdJ`>c;@PV1L0-a-2eap literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v2/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..dabe7afea35d5f2c73b04e4e20993035bd748cb3 GIT binary patch literal 12445 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..bb69fdc1dc13878fb074d7d32fb131297dfa6ea6 GIT binary patch literal 20569 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00002.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..b71bb8de5d8e3be205ee11df1f483ac1436722be GIT binary patch literal 8845 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00003.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..d5808be42e433572be485e3001df2f63df4aa718 GIT binary patch literal 9314 zcmeI2dpy(q|Nkc{MW~D9OsNzhl+zpwIY&9=oSd03!x*Aege&EoLqrFMOm)-E?>)l76H-~s#KEv~5KK>!3lJX{w4$H2- z#s|8;jjj~}fkG@z`O~fo=zs(*{xkSb5dN3H30wDnf_=LMe@VOvC9MJP_j?hKLJ13} z!dmCA90ZAzp?DW;jAIfZZiTg!#L&`i1>voZrcxN1lwCcR%I#CI7;jnjxJRI~GmhtB zP6-bTkyp5TOLr4`eR3SzOwO8#4SPlG%GbXM#Zg)>WRvxLx}nwM>5u~DFD!T@s#7J4 zxt(lWIjIvVwCRE(F?RA41(Qj>9h&GF$sQpN7l9^q5|es;TGebPp|wf6`nSe%q_sO6 zMQTHDCBjSVDk$e_w;oeYqBQ@av9yvTGnXa?w`;q5gg%AOlQ-X_KB`uEm;4-9vHO+z z(Xk^Aub+7*ebY+;%dafrX>na%=PxxZ;y2;F6FQMJ{-e2Rg;ivfVprXq!ZVeub@N4t zE_ZQ~+UBP}c(O`n_6tqV7{)S?6^Sjp8z#^u5S}Wzz7iWCvrXsk*F?Qj!w!@DPZ+4{ zkRZCuPO7Rv)to}DUM@}az2VHrs>tkzYwm$=;+(2lMZs@+GkM6ZggYKVCk=DS9rWjc zZ#D9ZbME^m=*e#NTIa8tY&|;4YyjhcsO@oMx>nV%A!_7BWd!c+g^kA}uA<){#9Gv} zPdB5R*AZY@ksU#0>)XbKz}0=cYLzB@xRW@1wwjU%N6MJ=-&jYgcc`a1+vF8Lsa~an z+T~A2B~!sTUdW>9YJoRfjb! zB&`OQV=f+i%{if%bgBqjyLqvo0y4ls5MA)D!b#*j44DOQccFC@!S3RZbFUKAElcZI zShIo)XdeyE2YkmwZaaG8<-QGv#gx;XzVk=RSz#*)7pC{r+a$=F2_NEn8h^tlO6%ri z);k|CEKS{NL&NYrDR`g7l!%2>OsHkq?{5Bi;_9!hXXM%EF$bW$kL)11%1F-uw>=du z!TnR#5M)g0G_nY7A1K(${iv|Njd+wYyEz0m4z;g;o@2af35~u^KQ}nYpf)YqO;-o~pk>jMhK5$^Tx{C&DZF(lRX1zsJ4;;S8zZ@#X)3Ew799x z#rU>PB|&U#WZuCxPUbt^EH*h}y(t*8&d;?V^6}W;+bV>jSb`y#&LVmJCePeRZ_6M< zmaJ?a8b)i_qyoo2myBI@&imYKvv^sQkb+c=+Uig1xbmJ(Em$!RR5<%Cv_OQ{A#!|I zY)mA|koZY6!uB)eC)5`2$VC>Pj9X?QpF7TCE(gx@n# z`>Bc?N7l=&R>`W4=AUme&qX?N|GpWNZRa$3o;rL>7V;zmA|ddRxjhwGKlEy}B?3j1 z&%@+h4v!Bp=55}Y`cpTJ=4VnbQ=p*K>C+$Ktv zElDS

~CD%#`~Y^`3*B$Jw*U?Ear# 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 diff --git a/tests/ragger/snapshots/flex/test_legacy_send_bsc/00001.png b/tests/ragger/snapshots/flex/test_legacy_send_bsc/00001.png index 898ca23b1dca2cdb2da1c5db3610bbab30bf7d08..7c58a7a44c208bd6ecf2388ab2fe2435c478dc29 100644 GIT binary patch delta 1902 zcmV-!2a))OtO0|p0gxmC%CRM3O$xlF@B6lGfA$9~laNg_f9R>}dK|}b9I0U^NwUv# z+qS)4ufi^g=V&Os2AWqG^ZHYNy;<&D(2u4~l_xn8eXmc3f0`@WY9N$V$)-t~Ro_r1@h{YD!7 z6I>kQI9@K7GrxcTZgfp>lX*Aeg&4>2?>GJryWWB~Rp&U4lOz#M@p`?!I{1W_((QJ; z-EMYc$MNr9sOnkog|6m zd1#vEbUINZYnrBMnk}uF+-F;J2@d6r)Hz`DD{4NAq9Es9UDvO+7{V~zaywa|aUA!3 z|3;>U{~G;f0TIMQFm zZ^SodE)PJ%d#Q5}1XT5NWUn=NkR?0v-J8FIJm!UDstKp_?k|g6eIvlq(O+(Qj{FhM_<$2C!x@}wTcpb-4{CCy#xKQ@} zy@IarS)+f#B%y}O<#IZmRPR{Zwx6G$bJ2TF(xIhmlec_*eF+@_u6Rdv4uT*_k~B@{ zhGJx2n-8Swx)uR*6st$~_I-aopZP#d4N;vO;VnY4e;!5A`wDd6@tomLu%M-8Cw?ZI zmwt|-D9bV$FkY`$y5)2_bzQgEA}!KsnubeomSu4qQ?x1l=6pU=plcLGMNv>{;`*W} zg54uY-kLX6XFcML47IQCd$JWId%5p>G7QVIBx{kbp=NeIpUH%`C^TWJ|9}Gb)Q-O0 zZcpzKf4NQ5RQ)R#GX6S3G2=LvZV`Xt33gp4(y6M-I-Te9Df&hjhF#b3M~FZ1TZUl} zk1mR0MbR9M5ABCLqu#6ZG<02;rfHg{yeaC*vMf#0EX!73<4x)zqT>Qm$Mf8&c!T$>KhQc)DrC^Ah``buMSH7EQ? z+d23);%LNXay>0U3}yyiG*#$!B{%iNLt;{2hi`WDn+bIAU22o?AZQ+sp*k`6oJ`xc znkgEKbhucny{oD!G0X(p`N8TOtWgK?y`Pgy5@=U3aKdo;F=Z~0H2T;V{2`NsNs@G3 zf5+ugn7w`9|55n(_)xE$#3CJT(Yts#@VlV(DM1hvMPc5A#Khp-1;V`0H+Vznd*Jh) z8$W~h6X@a_{!5x|twd2Iyc7DkPJIZfMLOaZC#DL}L-j5; z`3>HA&@BS((=>G+!{f@iAp)PnFjS{-=qYX6(w~wfd9QJ#Z&Mm?CeR%EfK#8OFneB_ z!ur@4p=pthXpyu^P_=_#V!P#MX!P}ZCE=sU=(V>~tJA13pG~pN<3H(0D_|vre|Epo z6rykH9K558gTsS8h3AeC&0=yJmvJ1aKP(!#7U}R7sSdi&=kv$M$H&Kqw15z7ACOp({L;f?-EI_6yfM#t zp3lWW-|u%dW|?psx%{Sa(7uH~3*OkpL8NIKh9QmY>bmAJbGO@#tkk~mKR!Ohf?6Kh zZ1SD7NQdv=^!4>cliiXH&Tk=eL+r`-_wU~z2=4bgw$@w4JNi0k>x|&re}^_Vq%-kL z&|XF3IG)evJkP}~V!!Dh7PIUMPi^NQ2;SNUEvTwW9JzA2T!fWMI~j@XwbY>>ed-s} zw@4>R5`K%iK;VAAOI?n?g-~h;^jh9dqlGkx1=*9BY+w|IVU}gI7Y8LJzWVg@;V}sw z;?zo2`&DVe`VR@@ldS>(p>XhyDZYlvW(W(s=4jDPMxEt;V1WvAPB^c zclSqcAxRRxcvYw~Sq$&x6y5>P)j0^>#0Tw!uInC;$K&xBhGFgkQ7oDb5Ej#!yybqs zOaALQhHnfLKNfG>&zt(A9kQy`{X)F;J9B=5i^GsbFCGt3GFg$ef9lcZcfrhY!rS>e zoa6Ao`=7@f*v>%^{0tX|6WX@rXNRL@{{ViouLEd!7j+JP#w4K=cvLcN{dHhwfGc1} z1Bo|M=KvP8N)$y~js^$5A=%Myclb1L2tP@~e{~KZ&;k+0Z*s;8crS!T7e#@w(Qk&L oT!J@I=O76F&?=^*lN(jn6m0p{^63%j;s5{u07*qoM6N<$f^g>20{{R3 delta 1903 zcmV-#2ax!KtO16s0gxmC&9Nn6O$z*^@B6lGfBe@glaNg_e`u)ddK|}b9H~_&NwUv# z+qS)4ufiya(w3BsCFn_zK^Ei&A&Z=YKa=DPx;H9<#wYrUdLh@g`%hXQ1g&qB70-Yp@ zXlPhW_i=rUUUR~F(HW$J$+;TgapK%=b zeg9r|hW{Gn~PYb6wYESxQ5&IF75TlG)diMR}fcnQq&bdtJwI6#rc{H!hTY zf0v*`eAeinFiEK4a=DyNC)GjLw(aNV=UnujlXPh5+T<-?UtdB;fGgfkor54qk|a&j zxp5fT*XEe6HcE?hnx^3roMl-Y#}sf%zd4`J6zdvAQBf3>nz+6w zieUFhlDFm^)me{t9YgKw`<@I1$zJaJo~**MEXh=)Yp9K#&u22>ElNz7>OY{g18?o< z+wJ!B9)FSBG)>jNav|fdBNQ`^W9b(0C!S!}bt0Xrs;tv_KA)m{gkjiq9e;%Q6Tf8` z2Jz^kC{`5B(fH7QxHIa#N^g#?>(Vq$)0DSEJz18eX_{r(s?_K%i$WWQfzsp+z&bU5 z@U1PqnFY;_*&qnowr!e5c-(k+TwT|~vR2({e1D33@ri5G;aMt*LK;Y>X-Z#dY_8^n zpJzJ<-xeGV*G#UbC5XYysEeiw-LB-OZg@yQ>Pzv>j(#(N4!%om5*`H2<1thx2A`H` z+g3A6W04LQYqf(_RV7B6U^_omor5*fAU^hUa!CU1Dh5tiEkC2cB_xeL_8ou7Bw>;y zU4PecxfEt^-}iqMK0ZFwD<`o?hgsXnjf$1VvGpw;wSvICp`tE%dG35c(c? zzURiz;Qa);_=f+IX5090%p0QKtguK&+=Ax21EM8(HTiBwS(emzXd>ES$_{M>3Vfyw za9pM76_V5J*v!0{iz7`_(JZno`}p`ES${0cQfe+y6bbKyKD1LGg=&$GxW$RJ0`yS5 zi%oumw;gwjDEl-`od@u^a&Cyg=P(S_`5Ssl+qU$lBuUd4HU?>0q$3(7trApCA(+^1`2iYzyq*Y=;Gk;cu(QHBSg!X+{tAeN9q!bMy^FVyiuxy?(_Nl@$vET@gXfB1Y5}S z{C#~LbzPHJmv1M(3Ld;Pd4Vu{ZS(m5g!4$(Y=73Cc&N@n@cwbo-0dL!l^ef282R~p zat#%~T#SP@Oy|kspo1W|-|yo0Jb%uFhph5A=p;#27tnEd)qc3g(1##a6K=N~1r%@0 zaGvLLanSesU5!~L+(s_HZydC5;m?9Mc5x7CnucLWgS)z}dCc7Hb|Wjb@B5FB53#0} zhc=shCoR(9`!{`kebIckWP|ft$l?%t^8Nk$Hwc3J{f@2mR`GVe4%#{+_1hPYeIp10 zvE!}%(OXE8gs)r`>P+Us+c|}Iz;ksDf;aI&JE7~k$K&yMJcePIyFe6+W)FnLbS7`P z-|v$DdXC{6!^Drp+xGL0{%D7+YI465Z~e}kpWxy!WYLkwqm)b*Wq+-DwE11Ibe!;B zz7FR&JnjBR@&>kZ5ClKN#o>guZTZ>ZXxu-5U+e1tdfr8ygP$=;=mZ{>OuK&_m>J-T zUv5VOl{Zr702Z`L6h&K(1_!<&+0pNK{xom}KS{%Xbq*lV0ujk?a>fdHFN8)HMS-!= pZ-xS0f;Um;APD}@LX#F%*%Wlu*7C2%XXF3?002ovPDHLkV1hC8(CGjG diff --git a/tests/ragger/snapshots/flex/test_sign_eip_2930/00000.png b/tests/ragger/snapshots/flex/test_sign_eip_2930/00000.png index 2cd4319e22aadce8ef830091e379d35c75008321..275ae3ac933250888d26026fd5903bc48c3e2b27 100644 GIT binary patch delta 1902 zcmV-!2a))JOMpv|BmqaUC1f23bdpW<4o9z(kR307UDb766ooM+Ns=gv?z*h9Eb}~f zEs{8nSF6>4`BYVv=Xo5*`Zw}!w=>4%d2Wo6*7UGdevEkp^w-x{$EQ>yZh?TiNfU z+-|q~{eI*O@mzCE=RD6PosBWp+Pk(As;UZ_kV%pZo0TM8RaI40Y0f(_ql}(MKzFO_ zTFzE~&gb)(7Kgtx46doe)OG#w@gc7#IoM!!=`4-VM_$I1gfhl#Hk&cqM}J2_(_Auo zW&s^Vk&Di{uKoVvx~{*zzK+M^;F()%Pp4B^mQfU?X*xl1Z$ZcRgl3n{e#1FQ68HM9 zq{@x#B=k4+yv!n_XBN;&k_0^uMNxcxeMwb+D~h5hiZP8}=|me_N<7u<(pl=QF~(ZE z*=%G);KPsq?7FI8jn+kzf5%4NHM z-O5Z>tJQM399#5fP@d7V4`}mme{u5|emESq+ih?b7RT{!w+pIcRaKv#pYnRQ+qvO5 zx6a3rL6^<1Y&IKLW`CjXTk_6kvr$!7^qXlq$8kK#73rcV4u?aq3s`GctCb(qWm)>Y z#&uo0|K3y#x3wSNA2=<|8U5nppx5hv_1D)|vyZGS%g@ixOQZKDna^^$Tr3u?Us)^` z?)nU-GShT6qdOVI;c##R=4AM(%(kkk<#OqtqBRGnww~KvC9!U;oqIr=e;Z_~#z((G z3p%KL?zOae<+Zgo%Q9=Nf35uM>+5_zU#*t|=2H}fAHi9c#c?cSPUW5Da%ru9O_IcQ zJNnaaHXHNsktDM=-*lctRaMeT2-?e4RY{X@yWL7V(fsyw8)KHsWnI_9#y-2Ix}L`7 zNJ`t$`~Ch$Jy+T^O`D(kLFTWH+e_m(4!+_(@@IHHpWS?RyWQaV{QUg5JtT^v^ZD#A z!hPg_<@@{FEqb%r+^}h$O+)>EIiJt_U;fsfsq^`qrfHg{r_-tDSF$Wi(=^Mnj=A|& z+W*#o`u6?(E%Wq${lRln#qZeEur4!eLHmtaV@z3=MNzm;H-C8C;c##*>t@f|X0wr- zU#|9Y4498!q+o=poDa%T`jJ=aU)Y`;1h11^2E&JeqQ%0lSo3?iJ z%mUi{ZnakaAZUL)Msuh2FYA?M*>UlDzTOZ&O;Xw)vCwuZ!I+ivja-U!ev+fHV)yZ&R9W z-ZWuDK?Xj{({HAlr#8#w(!UA*xrLcoK&NTyYDSi2A0HnQi`(rss4>=BckGsl*<1`1%$JI-@OR$+2G_j}k<{2&Zts{l~>nLLublPJT<+WMUc`X;`1P_m;(fVXetdjq<>Txy-bHG9W@FDtq%m}dO49!z06n_0J@#csEAPm5l!*RB^rE@HSFNsh;(-+Wju zm##Mdc;l>_2FyoJ?xaPN=Xsi@Zv2yf1IwlMMNt$=D#yIMb30n9Xi*f+O68t%KK{NZ z8T)+c(=oTbJe|&THgj)58)MQmb%*Q2;ovuNU07FD_3`n4@%8n!Ua!~d^~cADOVvKV z#DMwuz154w;`8(K>+9?D^V2=lDfo)t=qQTf@87?F|NfonQyib@ZQIdOm+HC>?&_BN zzs-w|S)Pj8bT%*0f;Nptv>OdAPcm{3*=n8u%8gG~=RaURNs{A{fK&Bu-QpHJ&o-1DHXPCT!F`&tbe-&W0`yXOh3#3AMOx2C-VLk|deSp_&#nfcG+&bT$Mu o0H~932vd`w2qcrB2oM(a|GbW=(WD+`B>(^b07*qoM6N<$f_x+iX#fBK delta 2026 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 delta 1945 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 delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5-dFK9#fE@Apv@*)ysriZmY;uMyB+UtgZT#&NvaY^HDJ zq9{x{M^Uuf?T*Le!~*eLFO<%w)2ZDGIUEjoo$-LtlB1Vs@~*Dyx~?^E?H9`E z-_XU;G=I(a_xFGQ{Wq~|LN=KfYrGgu)BN{C|7q7tc+qrD(=^L6dng_bher=Skz46_ zJRXn7ap#V&b=>av`lbQj=+EdE3+Ofz*`J@E=D&T-jj}Awp%cfk=L&{x1tdw*dB_HqBh^2WAM&qF)0n^7 z-+$Qen7%r|&%tNL8ZGy3HNI{LT2xP2&}PN&^&=bV3~X}aIyM8Q^Rw)ty0;w547zN; zWxL(lI?ILHcbVV3M82rU28U0dr=oo_TLw*X#9Ko~X5lsCJ&=4KlHwB+2UrbbqAy zn&EF~K|6sTYuZtYSsR$3^KVoHZjvQb>3qCBnzyn%9gX=??;z& zyWQ+(BaY*$s^lW$Ao<41Nzz1G(AsH$qUTCG+qc_{kjdA?e$ z@;tw*H1ni(?)`FIe*(i$2vMh?icDKplai`PCwtuYKeQNUh z_}~)nEk{;qyWKixk*n3pd`mOA+AMx$+d2Aa#F;a;kk^}A5Tl+GFLSAI-aEO?C-Es` zQXfZKJNm@}I{Mjao#Y^BIUb|ki6O7alx69;L^Gls8P@Gj*M7gZrt{k{FlP9w^ZE&4fD z4u6ZeKP8Hy?RFb}2-ypReJ`-h3;zKh$b27Yo^#`Oc)ft${*b>kSKH)o!jD3Kn_@&c z_AMN{3$RCms*CTV?RGnJ{FrOeGnPDKbHNOJHgn+2Ri++Jr`dBW^M7Jp9IMsJ9us+< zzrVkmSlsP)&asjtiS3>6kL&agK^;+!eakFO75JI`ZYTMTUiqZk4zypbRJ766)yI<%MqPBF7Ua^Zql7l^M z&z)fpi_U3Wnx-+Ihrvefh;rl+**@uBuh;MI@9*#L&JBc^Vzb%2bYI8mbTYlVaz^>P z$ni^^FR;ztv330a;(pF+rY~zT3e!1?UVj|4>~?VeDjUCYFn{vxc9R)ue>pe~I-zou-QG|uhc<_NPmU-@ z&foO;`Dre8JAZ9(`4-dMuygYL_uqd}6rIm!rq;X5EB1AmsWYOVKD545x{!VeGgnd5 zH0$+xv)S0U*!iY^*_h?IC~Z4OQS{P%(AIvxw~t);{{FVDR5O#2onEVb>Sw;{2g@H( zPL^fzE$tfw&gZl9k&|m-lbV3O*UM$JjRt!|cBhaDjDO-d&hy;N#bJuF-}>g~r;kZc zNOL+zuigi3$V=X4N@)A1JkKweOS{!zGBM# z&a3xFPmyJrym{58vuQEBR;Ta+l&5nPy+|MQEUK!yTrQW(<$AsLy})i3&jbjA<#fK~ zd_Ft<*MEJkKLQJXF15$ci}pv)=&qyg4^rFjEd7QqjzELGcyfqR$Q@aCEjs*NG;?P0 za(x}MoAH77zt0P_ouerF9bFu=D9chlJDel?7x>G49q@RSbdG+w5JFXNf7{F@tb2#t-0000SBmrNsCEGIzQ(f0(S^oNOuagNhHGjwHbZVNWX&Q4>XIZw)a?7$j z91gZolBVgntyI_b;c!UPG)>dFK9Y~H-|wR+vS(CL6lp#xUL&BtzP>zvjpKN;*-YQc zMNyb^j-qI{+Z~U`i3Q@hUL~DRr&GHLayT6FJb!dd*LCf*B1bRLgk4?NbzQ67)W!>C z^l#|mXn&gK`}_O9|NfiUH6feKi?v^jrfL5Bq5rh&CA?xfr)ipHnLQ2sp2$sf zJRXn7u8;cE`f^_qXXZcxYR}9Dj8a`w30|^?a3D$V;@NUo4=rEOUAu zilX@X`ZC8^Q4~c{OgW%U58BjP;;CLGog;B^rCrJGc58a}PN&nOn+tIqPkFm(ex_+! z*Y#_)GxTTliv@I>iR{nMPxIft7Dri@=IDvz*mDuXHUyF+={#x!%aQ6I$q)J0rfJMy z?SF6VcT8U$;PFD~97U1Y?|p58BuU0ao@vrHO_L-^nx=h6a`e-JmQCP$8z{To&J?oQ zY}V`by;XfWcg z-?H6qZJp&p?Yqox^yiBY4Y}b-iA%;!FisiX=(e$3g)6{v3{gW)Psw!K~e!m}G z&h2)yACEYWtE!TVuz!+oxn8e!(cA6zj!pAy8jc^?8TDFQuTND~tJP|?TFK+kFVFMU zYL(~tU8R|Kjo4_{>(!Jg4}j67>7ngdda)L?Y|KVcRF-8?6t>4r4v#yXPJgy#-R@SC zm&gZ~cyBqfO55$$IgwngR_0rp$<=1@``XUYPYceRu7$kb+=3YOoOPK?h4bFYZ9axi z8Ibx=+S<`C7SPepR_i1OLCf(N?M@7NS*9#Y&sCZc<;bvZf57(py*<;!biXy7qkE#k ze%bfMr3vV{#=zND%kS9W4u2=3pSzB~Ns`#!3IEVe|0vWE<=D5((prI^+3$9e-{@t}yX`3Z)oL~S0G_!z zH|)UYIF8%bZ_HB4vNV6nvh3wfBDG!8c(H(%%y+o?Oq!AQa%d*$)#x;^N|>A>XRj|1a+6yk`2cmZUJ9qv-X=LCbCj=dZHyD}M(g-)=XVq4t-9P9s>|haxm>Q-Yu^j(X7S8{Fj!9K zTh8aR(|>>6=lUbC@aIx{{Jdg+^o;I0`4BQXRP40*o@w8 tx11aOWoDpD^djjTMbVqNk(1Lqt`su#z-kGUB&h%Z002ovPDHLkV1lF&UX%a; diff --git a/tests/ragger/snapshots/flex/test_sign_nonce_display/00000.png b/tests/ragger/snapshots/flex/test_sign_nonce_display/00000.png index 2cd4319e22aadce8ef830091e379d35c75008321..275ae3ac933250888d26026fd5903bc48c3e2b27 100644 GIT binary patch delta 1902 zcmV-!2a))JOMpv|BmqaUC1f23bdpW<4o9z(kR307UDb766ooM+Ns=gv?z*h9Eb}~f zEs{8nSF6>4`BYVv=Xo5*`Zw}!w=>4%d2Wo6*7UGdevEkp^w-x{$EQ>yZh?TiNfU z+-|q~{eI*O@mzCE=RD6PosBWp+Pk(As;UZ_kV%pZo0TM8RaI40Y0f(_ql}(MKzFO_ zTFzE~&gb)(7Kgtx46doe)OG#w@gc7#IoM!!=`4-VM_$I1gfhl#Hk&cqM}J2_(_Auo zW&s^Vk&Di{uKoVvx~{*zzK+M^;F()%Pp4B^mQfU?X*xl1Z$ZcRgl3n{e#1FQ68HM9 zq{@x#B=k4+yv!n_XBN;&k_0^uMNxcxeMwb+D~h5hiZP8}=|me_N<7u<(pl=QF~(ZE z*=%G);KPsq?7FI8jn+kzf5%4NHM z-O5Z>tJQM399#5fP@d7V4`}mme{u5|emESq+ih?b7RT{!w+pIcRaKv#pYnRQ+qvO5 zx6a3rL6^<1Y&IKLW`CjXTk_6kvr$!7^qXlq$8kK#73rcV4u?aq3s`GctCb(qWm)>Y z#&uo0|K3y#x3wSNA2=<|8U5nppx5hv_1D)|vyZGS%g@ixOQZKDna^^$Tr3u?Us)^` z?)nU-GShT6qdOVI;c##R=4AM(%(kkk<#OqtqBRGnww~KvC9!U;oqIr=e;Z_~#z((G z3p%KL?zOae<+Zgo%Q9=Nf35uM>+5_zU#*t|=2H}fAHi9c#c?cSPUW5Da%ru9O_IcQ zJNnaaHXHNsktDM=-*lctRaMeT2-?e4RY{X@yWL7V(fsyw8)KHsWnI_9#y-2Ix}L`7 zNJ`t$`~Ch$Jy+T^O`D(kLFTWH+e_m(4!+_(@@IHHpWS?RyWQaV{QUg5JtT^v^ZD#A z!hPg_<@@{FEqb%r+^}h$O+)>EIiJt_U;fsfsq^`qrfHg{r_-tDSF$Wi(=^Mnj=A|& z+W*#o`u6?(E%Wq${lRln#qZeEur4!eLHmtaV@z3=MNzm;H-C8C;c##*>t@f|X0wr- zU#|9Y4498!q+o=poDa%T`jJ=aU)Y`;1h11^2E&JeqQ%0lSo3?iJ z%mUi{ZnakaAZUL)Msuh2FYA?M*>UlDzTOZ&O;Xw)vCwuZ!I+ivja-U!ev+fHV)yZ&R9W z-ZWuDK?Xj{({HAlr#8#w(!UA*xrLcoK&NTyYDSi2A0HnQi`(rss4>=BckGsl*<1`1%$JI-@OR$+2G_j}k<{2&Zts{l~>nLLublPJT<+WMUc`X;`1P_m;(fVXetdjq<>Txy-bHG9W@FDtq%m}dO49!z06n_0J@#csEAPm5l!*RB^rE@HSFNsh;(-+Wju zm##Mdc;l>_2FyoJ?xaPN=Xsi@Zv2yf1IwlMMNt$=D#yIMb30n9Xi*f+O68t%KK{NZ z8T)+c(=oTbJe|&THgj)58)MQmb%*Q2;ovuNU07FD_3`n4@%8n!Ua!~d^~cADOVvKV z#DMwuz154w;`8(K>+9?D^V2=lDfo)t=qQTf@87?F|NfonQyib@ZQIdOm+HC>?&_BN zzs-w|S)Pj8bT%*0f;Nptv>OdAPcm{3*=n8u%8gG~=RaURNs{A{fK&Bu-QpHJ&o-1DHXPCT!F`&tbe-&W0`yXOh3#3AMOx2C-VLk|deSp_&#nfcG+&bT$Mu o0H~932vd`w2qcrB2oM(a|GbW=(WD+`B>(^b07*qoM6N<$f_x+iX#fBK delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5- zZQEWh7h#vgacoymecxX$mpG2&ICj-5ol{j+5Cr0lDhL9fTg7__^znGq{2GQ~p6A<3 zxoH|w=O75mvb4!ufnAr@>Rr1!{O3U4`Voc9*F=cndrF%>+7063O$>G|lmN zq(;^>P17`6S~I!Nw&oJNls8i6fQ_%H`7DZpoO^X$Kigsm!*I*#WP!$U-1q$(nHv6U z^qUE^3Q6|&_c#4JXKu7@OHC&XL(K?=umYkenrs2GlP*pcNnYw41OZk3oLLY>k)7m` zNjr{X6h(0y&o$=Y$Aac2@LC(CEK5ox&-2siv^J}+#dD2*dw~xA^%tv6xvuN7ET#9a zIF75Tk{XkZP8)yCTj+~dyq!7+L69WLIF1hA+nT1KXb}Eo6h(QSbD3`2mOEa@aTNcq z8XgzQzQ0${6+Ub9Ckzs5IG@kQ<5BgFwQc+L^)(m0=Oi7Px;A;r_xHEZ5#Wk}&HEsk*L3z#PTu(Ybx!pH3(KqNawZPQHKPEkd#$MbY~Tbl~xr;U`$o zQnM4E$>yccQ50oaMlXz)%Y{xk9*xR7^?gsaf@ClEeNTpAS(aoi(lOM`PNx%@@D_z8O!W^a za8K>%>-B&7@E(!dG)>iCxsdVO5sDedv2=>~i6_`~ok*vuD(iF}kB8_RVHkE@$1fp% z;-?J5ATC`L#fqYNH9oW-?u>e`($mm&U7Dt8n)0ToC(E)lO|vXpl^UI8QEtO9P@23A zSf}O*zO|({v!J;#8w5eywoTIrcN-6ntLs`=)~bI`jgOBnUU6+YJWEAUNNo=|BW>s4$B3ghHk0FN3Suzx;zdJ+Zf9~+Pkc#C>hti;j(#(N4t`2)5*`H2<1thx z1|O4Y+g39~W04LQYqfV(RV7|C!FE1aor5*%AfESga!CU1Dh5s%E+13o0!gD^dxIY` zNSJ>lN!N8;E`{0K_x&G*!{MMFIf+F&+@g1JbKrMD^HYK#D2l?o35kKhxdViGp>Obp z(DT6OH8(zk_Y>&i2mU3Ew()PwTcO^jut-Oog0{N@q9u4W_-;*EmehV|EZSkp4$TD$ ze5N&UT&3v`lGE(9nRzo8N1CRhO=MYiI2?aS7R$1f+Da5f!aJdl>(qy!TBIXRabl_f zJyh>vk>B8*U%Ex0eVV4uV|ZLSH$>ob7>4Q)4qc^fTly(UlJ|O#^leDv%>wK|Oo^U)OBJpPl8Gy{KD zLTL9J4I%ob&cQpnI5<4mQ+VzO(JUsHaT&*v`op4;Ymp9bk?KqL>2x|A4u``*nm`D) zkmvbZ`#S2nCa*4EQGOLXerfUmVfNbQ@&5_uk&fAZt=;fYorB>07JPtZZlGO$DI=pH>++*lN5UU~A>y-kE zH|9Cd^SLtEE8@cm)|rF+PCm$!5h0ch%`;ZFr+uTx~_T5-1T}TE4AvYm}OUZYC8u(@YX(PK~+^^%a!x_EUZ*o$w(}(rM~*n zqkb`ci*%AC;isq*1a7yR)aCeH2&INVujTDDT1bPKkUfdX0!CpNW?4pSaZpm?sZXC@ z9+Ti9KC5%^?mlRO4|&s)(BglmEX(fqyJ|I%=9;hCWsy#nWi-E5&286p>KHw}esbRk zfGUXU-?MI1E|z;_(nAlNoKuH=AfXd@R5C67^}@^m zSHO-25^to=0W4^hD2ldh4Gw%mvZLQ_^J(A^zLSRk>Ks6z1tN^!WRDf_UI>jYiURLO qzZr^h3Eo7VgCO`rvzU_~RM`{{Os43P@G({Z0000Bu}J&xlzj?}7?B-!V> zZQEWh7h#mdacoygecxX$mpG2&ICj+~pFvesK@f;Hsvrn_ZWZq#(8uFZ^J^G}d7f`C z<)&#!or54K%kp}?ZcGromUmI-x~^3d4!ufnAr@>Qg1!{F0{e+7063O$>G|lmN zq;}RcP17`68Z>#(w&oJNly_0*fDNvwnJkKeJbQIrKigag!*I*#WPZkR-1q%^*%|(8 z^qUE^3Q6|&_c#4JXK}P`ORXmiL(L$DFa)9~nrvXThUswnAEF=luj4qMUkE4kx4s_V-!Vk9M84n;KzdICh%GVr7TNIB+v8H>9jVhFUNC@ zetUrq{`D8Dt+}r2vMi-nusDvZs*>81j7}SWjsN=M8}FsgK@cQKGLECem$s&9C>n%+ z8AVZ^=Uk@Sw&h;eaU8|JtH#EKvhVK_bcoLy{RxAF8qVkQ@px1nWNq7ieSOVE?>R|_ zrmjt%^8NiSbOgBK?bJC4f+R`OG@W}7Bm3I?Evl|-5im!wdUS5z_ovf|zon`1sgtjN zcZ-m$M^W_F0v&ifX7~vfwAAv%XR>+ea}-5cmeD)o<#M4@j>luyb&HMCBAupbxCCce z7RNCKoYFU^(}`kTqbMqhf>IO57ex{59!c`nyrVkn5w~NgeSP1Pp&;4IeczK+Se7N3 zigXOMvD4{9CcH(72~+(8N;~k@j=o-huMh7LxlPkl{gn$Dza62NaU4shh@W_ZUDt_p zs;aV1=ka)m?h%Gz*LD07;wOH}Fbv|-MNzCMnpfjP`{B;0_bRcrr~GHu&xMrkb4;bN_Ju&S!Wnb+XMjFJ!eoih) zpk2kl39IEZ3S2_c=-1xkhYS*bCP~tD9hXaC_V#`MN8xZds7Fp>kq)=$UECb_MbP|| zAP9=0FmFF%U~ujLVO!{1yCL*E@O;gU&*1$8y7+;ANuzE28}o*!H!CdC5vQQ}?to|s zUJbt6QI;h&9vX;tn6g7#fdZdt0UTFpdWGaPdu?Xk%*BzWsc05imK_d%2a?6IET!fW zMUn7M=tDd8QK%N_h*O+cD?ks`yIABmc-!}G5oMpIsq+9HSI!L)_#B3zI(|b}Y1@{5 zN|NO5ULt)P(s(n0=Fl^o`Xoi#^U@Rs$i^T|i*!Vzq*;QhDFhSSEgzuKm&=8Ok0PVj zo=#0pqr!YB#Ws)sq$5p#f0Yp0{a!XyjU? z!yBdg(tSFe4u`|xaF8Ytf-U5E{=UABx~|Eq%a@a11rJ`DJV2Pewt4)2!g-`)wqI*c zJXGf(c>g$P?skxV<;E`$Mt(dVTtmf|i*e9~={#5*bPxo$+f96b&*MyZ$SRM6PLgDG z0lf~d+7I^_`Vhow!u5KkfZ~lA&hvaO4*GVxsWHoh+sNhjjf3_r{8{kEE)F71(=ZI_ z<*u%49y52nUdc-B`~Gk^h&i=9wAti2X^{?Jzv=t?o5s5(8=Rj)7Kd1q@9*EgK@i+- zH!Q8UinsH1(9#)y!H)xN?tRY0FF|V+jpKMao$@>vr-=2YKQCt46`tD8K@hyP4_Z)F zmDqCSd_D^+l~ytmD{QH6fAq9pOy44%BuV%w>KuXF?I!g)eiuTiA<%1iFO3$uASPr_ zVzPiy7=~Gv(OMjolz8OR=a&a0_=(Tz9K5>^n&6|}v?R2D_$kY>`~9vO4y3u}3wK$h zlVurAu~l>1b)7m)Pj8^yH-aD#JKowKy@e!6_{>$I&SWmUol|%RJXhx+coQGA6S}Uu z-|zSPeHezh14OZC)<9THXY!QW?I!uJ=NNu4O#HQY+kW2BAMKD;P40K%t>2mR2`&yp z79Dv!O37q@Qr4u`?4-R?hQn+Z=}uvENGP|ineSG4tzthqu+7=Y2XUJlZOB5 z96+E2B9h-^j}`D<2#qd^0`Eq@847d>-b9^)AoxQ96Pc47RM`|4D5mI&1vrNQ0000< KMNUMnLSTYEBeSmn diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00000.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00000.png index d614f30f54139ef5da6809b7f53eb3905c45e6b4..eb6139b2083f9af629ed84c8665b4f7fce080cb6 100644 GIT binary patch literal 10326 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

puWzdM9nkHQ()X z(7YKCF=zP>OMrjbM-7+msZmBSV}nIq^-B?i?q9j}eJ|K-RI(Rq_O9E!sS_dE=@yqE zz7LDA60?zBWv%`&pvb6IGIOB-pBxI+eW#*Ms^doOEv-Fz^}O50z9=9tN%+rBj_k;$ zrjBTicERg9L*UlQ=~Vn~v^IRD+K*ywwX=dME2UanO`jeIsI;%9_-QMa68XES%uuHx zThuWdVsfE~e$X{xuLRS9UJGHQ7%7jKc0U=lkHIzbHwn`VaOiUTB1TZY_-}%L=Is#` zULaTLE~wgO_I)+%4+{=Ra1M9V^wqlre$d-GrNY?VeQFE1xGb4xik!rOfWy_XgHN;z z1#Y+-PO`c^N3d(9G^atiRSSycVIH%%^-*oX}++Udd{s)D4!BQDVJfVq}?drO85 z?w^AmB^r=UJz6~~o z>aU6jVAX{Kaw2fVFtLA6mJs{K@oJpG!hNIhIlrVT(gIb;h;IsWVNK_S2 z^^OK+0wN5D)y;(zwD&zRSXAU(g4qa;JQtfP3Uds$ECnz9Bv1Wn;@)#=3Kn#gtvcWacV8nQC}UhXid5-JqH zc|Sx56i+ztGlH&sABX_%Xq-y9I@}O;qi$etw0u6cHwQmk*x+-2929%jc@hm=b}Hxl eFDd37vfyLMs#l<`UxE9AAh5yhoAozb68;C{lQ5zH literal 10325 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 diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00003.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00003.png index ec8d2e657ff6957bc88107130624140f66626f6e..48fd55291b06856e6d98a18fbf1ccf124aefe56a 100644 GIT binary patch delta 2027 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 delta 1899 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 diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00006.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00006.png index ec8d2e657ff6957bc88107130624140f66626f6e..48fd55291b06856e6d98a18fbf1ccf124aefe56a 100644 GIT binary patch delta 2027 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 delta 1899 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 Yb5G{quiXS6zQ|m?482ry;r9Li0z+`^>;M1& literal 8992 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 diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00009.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00009.png index 4397e0e079d9238071d2933ac719f166bd2c74dd..acbb161dfd465dba1fe0b49424f867d887f47c32 100644 GIT binary patch literal 18507 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 literal 17145 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 TWEuQR3y6`v+11yVZ^ZpCni`Qo diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00010.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00010.png index 8949bed7476595b500db4bef21311ab375f2f1bf..a36989ec6657badeae9bc5bc310ff0e1eeed7822 100644 GIT binary patch delta 1895 zcmV-t2blQHQq5AZQy~XB$u9bYU$2u|AuxYZRaNDAZj6cJI0%B5uB#}DEX!<-B#NT# zcH3h)Wm#rf7DbW%oqRkVjWJo48Dpe2-EWhpv5bITuh%WF20^ghZinw>w~g{}IGj$W zfeXaEmYB|2mPtArW5O_eX)U2FORowU$8oNS(c^dyb}w`=w$?SyQ-?>YUO`+ zyA7#vxF&_NK` z=&Y*BZ7;5>YQ0`xE|=a555w?!y%t3g1VNG{BNX=;G<=U}ap~+zMP&5C0y>UkujL`n^YwZyhgyH0=XstFsr*VK+R##BR*Oq#Ic|+HVHocBdl?Zp z+1dv-b4&F(ilVYC7gx#9pV12o=sJn))oLaG&9ba9po^lA11JcBmXp?=*kKqp9=IKs z<0}6M|8QTes!Cq9&)DCXdu2e2#ig^Ars*gRYqAHbs*)z`dxx?4Q-dBd%H@A>ILJb_ z+wEqv8Cvu?D9`A{2ekRSy}14xem!d_LO&b29u?7F(9(X0vfG(dvU!8?Wsil2{MJaOnYU{;rUz8Xx@*HE8eP zvyY|DE04o4Ow%+BL$|MdyIRv+Irc1#qR9J*eaT(m?RK-vIUbL_m-GAkYtN7%2yVBVy9)b~ z`;niYAG_-Pe*eU-nVWxxJ*3@F z^*G*setu+`?zi82X{xvln;N!dVKr#CGHZ+}iXzW*+vw&Fk2{~wwq{*#S=;aTa`Vf> zR*oLaaf{@QFqP{;`IVlsr~Zw7c-`3;Q&p85Z;h8+(p5O_o!ozN4$d+f_0_c1qZby? z=FeVhmJK-!`kaDebv>5j*67FBIG~N~7`*oe z`@1#DZHn@H@UeeChZ9>~4O;p)%->aM>1}i0*8Ny)uUYh1j{OKn@C2lKX#P~C+2?g5 zRup95v&?=o)-tu(Y&Pyq@beaCVF8^ai9IsXH2wPel2|+(4&D(HhM~RqZ6Dp)J~+R} za_mQ#9)1Fn$YgYju^KmQbAJ#7_0AhvOHmZ^(gaiSy@G$2&a?jxEi9m2@-r^=Xc=tp z?oE4^4jiZ1V>$M?l)D7$c|jF>Tpym%a=f*qu-lI^WJPv4-o39Lo861+Le!SdX6bFv z?vT&jZs#5}_TXro%%!TTEX(A+?e8);m*w2 z?#QLaH`sq_@9=d6_j&IbzOIQWOlPy`8niebk9M}`-EL=FA*2(--biw}T-@rzX0x$J z^RF|`x~|7^)md*+wH!-zHF*?`6hZS z$8D`%tybUP-|O}I`}^BY>g0XIt#ssh{@;K9{rBI03!TMrMju;`mSd@^D(|jtx&Pa| z>6qoQs7+_{1~q6?t3=z;&@z*eon)(i0Vp>27oX+MAYS6|QuMNSyLoZF!>-Ac%J4ohspS!Ea za?&)FyKL*Fz1?p0>rJ_F)@{7|oC@H$KC>Pj$FY0cs!eC9D=e{5cmm4P*%2&&# zYactI_`P|Sr3FJC*QXopzMRI7*!iFzzIlIH_qm+UXPw8-C*K18)baMQ^ry3Vk0y?e z9v-ajK&3ACWj(d(?w?vjF6;N1Z5@JWerOTtY~G`ZV-!VExPLpG1=4?utxc-oluK@Gl=bW8^`fdeyXWK1NbaUNoPYq1AtnS h;TA}f&?r9^{|_XGW;WB`WJmx2002ovPDHLkV1n?5_tpRa delta 1907 zcmV-(2aNd5Qq5AZQy~Wm$^Q9}pRSWyAuxYBRaNDAZj6cJI0%B5uB#}DEX!Abib{h#xeqWyvB9#^St_AZ_F+mq8DsYQ{g9obzm=fTQZjmB0UZQ^ zjn1m7-1g$Cs@CiE<#Or0@GuOo*K1J}K@cQKGD2~mLBscmmX*$K#W{{+`}n2gcpKP4 z=`-1G*>*IfjBDXgO)^i5-Svn7I2^nSu_%g;$D?;dmSy?<{Vk7=$D=O~Is>5k6x{Cqxp$A1`x+wInk>7ppyR^zIw z?0=sshTYZEHwKPQb4I`UIOu=fZns{q>&;|EQG9=Y-y6L*%5pZF&1$u3{K#sxvRyP7 z%M#Ps3~po)=kwVPn3J)mve>dLH=B)neO4ct+IV62ki>czhHnti=I;ubs`1h9P=of4 zKl@nfyz)202i+m=W7 z{rmmiOg@ri(H5G{qbSQ#st8_vxhzYm4;~H&sU(^|E#1bL&1O?oRll*%wyLhDra7F_ zdi3dZ`c==CHc68Dt8S3Fn`6(?D2lv~*q7V|-flO$oa6D>dpW3;RSm!^%|u&H5l7FL6HE3?L!qA2n_x9x83@VN8&Y-`r_#&9Jff`AXB*{lwav7JL})rC)b^gF;!K`!Pa=aC0&K%-pPM0C*UkYQ753S9=))D zHh=b7BXR(+@>hM2cLiWTR4m5)u5$|!~9*9mfkk^ZQT#Y_R2+%<=BsK5KlmAh~`gKntkpW zv6dhMpJnQsv6iXOX0vhcgP*rB3k&EZN$kOqrs>z$m&D@XaPSVAFbwU*Z~Fkx_VM{W zmSaD{^zajqL?)x}8LM%_w)F==Q17{swG>4mFHJBN--~~E={);S(ZT}SCBNiSkCyTF z?%uR#>A<0yJ(gn+O}R_3o)=WH$Mwk>EeBgm3cH;sLsn#$x<`CO{1%Cb!E+iqV)kL9?BW_`r_X0!SF`uh6%@@^o+5borhUB1@0 z;SO7Be1m_j_6}cHaG&>{;p>{7!gMx^u0f0A@n~m@-tBg_6+-$k?2ROs%f+ohY&IKv zK>s@9tm}F#N3QRrQj=v_k|cHrlzRiqy(&hY=SmKaW%<~8v>cy#p4X2kJH`3%o1SFs z^SxJx-1ee@&U7|QuR$AQk|eRe*yr=vt>oIUF3W%N>+5U1Uhj6h-EQ~w^<`7F%Qw+u zIc{t9YPI_Q{$8)w-{0SMQYY^tZoMPV^Z)+)@4x^4Tkb@TbNS4Av>ZrPRe5)H%l+Tx zea9@1MQu8pH>g3IS|!?!hL)L(>^xibYe2d8>EZHwEGLd*_apT?1-zQLw-t8wROUW? z)(3yqqk|ww(^Tf-kS-Z}0Vj`VABv!v=5#i1P=hwccx?#o9eQb+Ua!}B^+7VX`}AEs zmXoHb+-O@b?d^7}UvkR5vu^v{hg1MZ_ks23IF8+WR&6>L3PN&m{ zT>jWO#qZ6tEG-!FxIW!z_vJKx#Lfr(@XdeAy3gf&KI=SwKK2&yrw+DHrazs{do*!$ z^ze9f$0~KXHS4KWcmLEPa#_C*Z0it2a~F$9XY(FS9HS_T!u{Lf9O7@_1KT>##ZuDQ zd{hm(ojWS|)qn9Glljg8SY{hlFo)E4r`P@+zGYlI)m75w{aXV<)@k&G=R^tlyo)(GytfR t!4_zfAQuUfAQuUfAQuUfAQuD{_5ae7W;XU@UabHC002ovPDHLkV1hmb42S># diff --git a/tests/ragger/snapshots/flex/test_sign_parameter_selector/00011.png b/tests/ragger/snapshots/flex/test_sign_parameter_selector/00011.png index 2b71d8212a1a0d792686f4d88367968747809692..cf3b20e5b3b494f2cf16b6d562c7a62b326039af 100644 GIT binary patch delta 1985 zcmV;y2R`_~qyfF80gxmC1hFNXNePy&>zbzd*$=Rj$w@PRGgVayA%qa**h!LXbKa(D zZnv9^OX4`5*HB&8-EOxyj^j9Xbyqs)dc6igAm6BhAn@5MK0}~Sr<38^FbwlNU*5`f zU6VQoK~R?E{eE9qAlR1=Qs=6w^eE(ZyJcCnwoG?jrv#F-&q#XLbzRqWKDYJ zaR?zUm&@OOzke5|CV0raS@1##A^v{j|7+Jr@S*A)$8nM*(iLyF+uDOqcq`rS_xt@m z@7?jU{PudienhV0Ga_h77=}_hg%CVnEQC0nPLIc9cHvPJJ)h5}X~Hl})6{{vQ$XU| zAs?j9LI_f4J+W}PTqtR#L*un&`FXgnTNWrPp1<(SzXt4 zT`%!wN}nyY670$csdK>kS9CjzqM+nnRaI+83}F~9`8h?PaU6GD_d%hC{~G;a09DGO6JOrK^qm*Syh2(jDKA)$Wx-Xt<^v4Ty@Nd3Y zcjc<8%Cc16zv4K)UayKHc3t=N^+lg~ifU>(5*l==|D-4iX)`~m{1yG>BlN{9K2Dv3 zAV`u#2;uO(t*&bt4Z{BzMNyvTT&A0*;fYs&A%y(zr0#L4?AvDrUE#Av|AbCL1DDI? zbUNwTv8HLhzP^S=?>Q-lrmpq=(1vhe^JwisP?|$jY6^>MbYO9bl`EH;ZKO56}OY0DdwfmQ50oaMlX!F+l_vI zayp&bwjK4z8RgV<%_TU?vN(=uv?=}Nd_L1a*C>jLqM*{`@kLPtn~x;c#yP}ya%hEK>vTRam^s5=|_IkajOzs1-OY;QZeCfj?XdcW4LC`c! zUDq<*#)rpMRV5>9J*UR|$4AdNwH$6zQ54EsWSXY*l*Zy}PWX|rbMPI+(Hon8&G9q^ zF&KF9qOL->Gr8$b++|GadiWMcf0#fA->udQ9|X#hH3m)wEc)s(c)Dk|dKGXg|F2AD%JvVGye&_xqg&6fd-YInVQ0!%1M%h|3sf4 z@OV6wTaMR4Dm4UpDj%oOQX1rh>|SgZFbcyk%Q9MvgNl+*efqrnm;?{;S)GGV&p{Ks z%bS*jmS1IA_Iy6|sDU)se$}oSl@3$ z_r+WP`Oti{Lne9MFT~rtGv_CyI4l{>;_)F$HZ!s&o!b6a2y>k9ak&oXINb35=kWot za}WeSBgNr=gr;fu-r?}+w8FdJ`1VQMN#10=r=>7T!If#=O76F z&@86C%>bWDRaKwjKjwwM!SCUNJOL3j_$_?OJqgwX=7T%|lMx|xlh7zY7s~$!s9rN? T$B*BG00000NkvXXu0mjfLq_sM delta 1996 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 delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5- 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 KMNUMnLSTYEBeSmn diff --git a/tests/ragger/snapshots/flex/test_sign_simple/00000.png b/tests/ragger/snapshots/flex/test_sign_simple/00000.png index 2cd4319e22aadce8ef830091e379d35c75008321..275ae3ac933250888d26026fd5903bc48c3e2b27 100644 GIT binary patch delta 1902 zcmV-!2a))JOMpv|BmqaUC1f23bdpW<4o9z(kR307UDb766ooM+Ns=gv?z*h9Eb}~f zEs{8nSF6>4`BYVv=Xo5*`Zw}!w=>4%d2Wo6*7UGdevEkp^w-x{$EQ>yZh?TiNfU z+-|q~{eI*O@mzCE=RD6PosBWp+Pk(As;UZ_kV%pZo0TM8RaI40Y0f(_ql}(MKzFO_ zTFzE~&gb)(7Kgtx46doe)OG#w@gc7#IoM!!=`4-VM_$I1gfhl#Hk&cqM}J2_(_Auo zW&s^Vk&Di{uKoVvx~{*zzK+M^;F()%Pp4B^mQfU?X*xl1Z$ZcRgl3n{e#1FQ68HM9 zq{@x#B=k4+yv!n_XBN;&k_0^uMNxcxeMwb+D~h5hiZP8}=|me_N<7u<(pl=QF~(ZE z*=%G);KPsq?7FI8jn+kzf5%4NHM z-O5Z>tJQM399#5fP@d7V4`}mme{u5|emESq+ih?b7RT{!w+pIcRaKv#pYnRQ+qvO5 zx6a3rL6^<1Y&IKLW`CjXTk_6kvr$!7^qXlq$8kK#73rcV4u?aq3s`GctCb(qWm)>Y z#&uo0|K3y#x3wSNA2=<|8U5nppx5hv_1D)|vyZGS%g@ixOQZKDna^^$Tr3u?Us)^` z?)nU-GShT6qdOVI;c##R=4AM(%(kkk<#OqtqBRGnww~KvC9!U;oqIr=e;Z_~#z((G z3p%KL?zOae<+Zgo%Q9=Nf35uM>+5_zU#*t|=2H}fAHi9c#c?cSPUW5Da%ru9O_IcQ zJNnaaHXHNsktDM=-*lctRaMeT2-?e4RY{X@yWL7V(fsyw8)KHsWnI_9#y-2Ix}L`7 zNJ`t$`~Ch$Jy+T^O`D(kLFTWH+e_m(4!+_(@@IHHpWS?RyWQaV{QUg5JtT^v^ZD#A z!hPg_<@@{FEqb%r+^}h$O+)>EIiJt_U;fsfsq^`qrfHg{r_-tDSF$Wi(=^Mnj=A|& z+W*#o`u6?(E%Wq${lRln#qZeEur4!eLHmtaV@z3=MNzm;H-C8C;c##*>t@f|X0wr- zU#|9Y4498!q+o=poDa%T`jJ=aU)Y`;1h11^2E&JeqQ%0lSo3?iJ z%mUi{ZnakaAZUL)Msuh2FYA?M*>UlDzTOZ&O;Xw)vCwuZ!I+ivja-U!ev+fHV)yZ&R9W z-ZWuDK?Xj{({HAlr#8#w(!UA*xrLcoK&NTyYDSi2A0HnQi`(rss4>=BckGsl*<1`1%$JI-@OR$+2G_j}k<{2&Zts{l~>nLLublPJT<+WMUc`X;`1P_m;(fVXetdjq<>Txy-bHG9W@FDtq%m}dO49!z06n_0J@#csEAPm5l!*RB^rE@HSFNsh;(-+Wju zm##Mdc;l>_2FyoJ?xaPN=Xsi@Zv2yf1IwlMMNt$=D#yIMb30n9Xi*f+O68t%KK{NZ z8T)+c(=oTbJe|&THgj)58)MQmb%*Q2;ovuNU07FD_3`n4@%8n!Ua!~d^~cADOVvKV z#DMwuz154w;`8(K>+9?D^V2=lDfo)t=qQTf@87?F|NfonQyib@ZQIdOm+HC>?&_BN zzs-w|S)Pj8bT%*0f;Nptv>OdAPcm{3*=n8u%8gG~=RaURNs{A{fK&Bu-QpHJ&o-1DHXPCT!F`&tbe-&W0`yXOh3#3AMOx2C-VLk|deSp_&#nfcG+&bT$Mu o0H~932vd`w2qcrB2oM(a|GbW=(WD+`B>(^b07*qoM6N<$f_x+iX#fBK delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5- 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 KMNUMnLSTYEBeSmn diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v1/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1/00000.png index 2cd4319e22aadce8ef830091e379d35c75008321..275ae3ac933250888d26026fd5903bc48c3e2b27 100644 GIT binary patch delta 1902 zcmV-!2a))JOMpv|BmqaUC1f23bdpW<4o9z(kR307UDb766ooM+Ns=gv?z*h9Eb}~f zEs{8nSF6>4`BYVv=Xo5*`Zw}!w=>4%d2Wo6*7UGdevEkp^w-x{$EQ>yZh?TiNfU z+-|q~{eI*O@mzCE=RD6PosBWp+Pk(As;UZ_kV%pZo0TM8RaI40Y0f(_ql}(MKzFO_ zTFzE~&gb)(7Kgtx46doe)OG#w@gc7#IoM!!=`4-VM_$I1gfhl#Hk&cqM}J2_(_Auo zW&s^Vk&Di{uKoVvx~{*zzK+M^;F()%Pp4B^mQfU?X*xl1Z$ZcRgl3n{e#1FQ68HM9 zq{@x#B=k4+yv!n_XBN;&k_0^uMNxcxeMwb+D~h5hiZP8}=|me_N<7u<(pl=QF~(ZE z*=%G);KPsq?7FI8jn+kzf5%4NHM z-O5Z>tJQM399#5fP@d7V4`}mme{u5|emESq+ih?b7RT{!w+pIcRaKv#pYnRQ+qvO5 zx6a3rL6^<1Y&IKLW`CjXTk_6kvr$!7^qXlq$8kK#73rcV4u?aq3s`GctCb(qWm)>Y z#&uo0|K3y#x3wSNA2=<|8U5nppx5hv_1D)|vyZGS%g@ixOQZKDna^^$Tr3u?Us)^` z?)nU-GShT6qdOVI;c##R=4AM(%(kkk<#OqtqBRGnww~KvC9!U;oqIr=e;Z_~#z((G z3p%KL?zOae<+Zgo%Q9=Nf35uM>+5_zU#*t|=2H}fAHi9c#c?cSPUW5Da%ru9O_IcQ zJNnaaHXHNsktDM=-*lctRaMeT2-?e4RY{X@yWL7V(fsyw8)KHsWnI_9#y-2Ix}L`7 zNJ`t$`~Ch$Jy+T^O`D(kLFTWH+e_m(4!+_(@@IHHpWS?RyWQaV{QUg5JtT^v^ZD#A z!hPg_<@@{FEqb%r+^}h$O+)>EIiJt_U;fsfsq^`qrfHg{r_-tDSF$Wi(=^Mnj=A|& z+W*#o`u6?(E%Wq${lRln#qZeEur4!eLHmtaV@z3=MNzm;H-C8C;c##*>t@f|X0wr- zU#|9Y4498!q+o=poDa%T`jJ=aU)Y`;1h11^2E&JeqQ%0lSo3?iJ z%mUi{ZnakaAZUL)Msuh2FYA?M*>UlDzTOZ&O;Xw)vCwuZ!I+ivja-U!ev+fHV)yZ&R9W z-ZWuDK?Xj{({HAlr#8#w(!UA*xrLcoK&NTyYDSi2A0HnQi`(rss4>=BckGsl*<1`1%$JI-@OR$+2G_j}k<{2&Zts{l~>nLLublPJT<+WMUc`X;`1P_m;(fVXetdjq<>Txy-bHG9W@FDtq%m}dO49!z06n_0J@#csEAPm5l!*RB^rE@HSFNsh;(-+Wju zm##Mdc;l>_2FyoJ?xaPN=Xsi@Zv2yf1IwlMMNt$=D#yIMb30n9Xi*f+O68t%KK{NZ z8T)+c(=oTbJe|&THgj)58)MQmb%*Q2;ovuNU07FD_3`n4@%8n!Ua!~d^~cADOVvKV z#DMwuz154w;`8(K>+9?D^V2=lDfo)t=qQTf@87?F|NfonQyib@ZQIdOm+HC>?&_BN zzs-w|S)Pj8bT%*0f;Nptv>OdAPcm{3*=n8u%8gG~=RaURNs{A{fK&Bu-QpHJ&o-1DHXPCT!F`&tbe-&W0`yXOh3#3AMOx2C-VLk|deSp_&#nfcG+&bT$Mu o0H~932vd`w2qcrB2oM(a|GbW=(WD+`B>(^b07*qoM6N<$f_x+iX#fBK delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5-oxwwBcu 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 R%aH&8002ovPDHLkV1kt?W)}be diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_non_mainnet/00001.png index 77e339b5deb2c042458a36e2e55122607684eac5..12e12ece688cb65da0e253c2b632c559bb5c2e00 100644 GIT binary patch delta 1993 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 O0000|AF6 delta 1979 zcmV;s2SoU@L$gD$a2W=mw0(Zbp_6tQG=EOhG@H$)s;bFkG8&D(bXnW&cD-Kb=E!(F zp3mn;%xAaTt=H@EczhLGc(qzpRkdEPtEx(^>EqV=dt66A-{0R4d^#G9=JWaKTe<9` ze0+R-dU`r>hFsRwrSp2dPU&1#RbAI#+Cl3b9;a!Vo12^T`YZ<>q_TTX{)NL>w39drs06!w)7Lbxl{9bJRa|MyK8J=#Lws}3+S#C*>`t$>A&ms zx;LP=+ij{tqtR$!r_DQdUDv&J_rUp-c7N4>m7g|ElRnMw=kte$hf|AwA;B~H>I1s^Z+~(3F#i1f{P_6T zIuRR>$E($!1-RNQF1ue@E|$?5{0bTvKK^AI!^iOC(x9VSho!Y$Vb$?ygv)Qb!>+*8> z{r&yh+uMg#^N9IuHk&enXS3OOJWj(-(>o6j4|QEnCX?LrSWdrOE~{@JNpjV$G@Z|4 zx7(#ALaV*J+wD?&@bU36H4>}8J>6ARJv=-#O>^AX=iF3})6zU$(026G)6<{ua%rd2 zY4_7I$ja5pd+B&QZhw6xe^k!!?d>hkXSG@#J)b{+{^XrxG#b6Vy_Ji|AC+Hue}B)5 zUM`oP*ff_Gq5izRy*>R^ZtZLI_VzZNPN&o9>+9=*UzyEj)9G|Jn+?pZtk31Qj;L(! z@9$}zZ*scdoX%BonBNzdDWK0a z1}?W(LY)48jek}~Uv^D@$VI}*Wb*d*R>oy+_U?AOe>(DQd)0rtu)B_!PuZeB$I8K8 z`NH773GzYfEVn792$TNob2%GINZ26Vm|pRD)Bc+EyU_? zQ`$CfIb$m!4SY_IzB$)C1A2IPDDQ*6Y+Pp+EjF2QbIXkwq&Z_emc*#=U$yohqjg7SP?H@>#y z?7qfJh=0-2xw`f~=yKHOVzDUeO|Bok&vR*-X1!jg`?iM{am0Mes@Wa!{_yZ{b8~ZZ zbJMzkkW-Wo=RD+R{V~d6OT821X7B0C8tvDb=JaKKzkumnU3CjOS*=$2Y0-lpb)l9!j4vIX(*@Q^F?pJJSK*Aeqc=Xa@5vwvQ%r_*U30#)9?vagA;*=&MTj_dMk z+tI0hZZ?~4jmnQWKmDesH1>Jlr>ETZ5<$##uCBcWT~*a|I?YGy=jZ3Lk(JAjeDjo$csUk(#Dy-PN7$|E_-SnB{W`o6gk_XhBzub09kTUo1$A5PnF`wCNmTt7|miF!Kt$WIu?wu|B?|w-G z@a%qJJ9;vil=rOWbWRP0EA15i2Eo(0s;YmUo}PZm=}&&9_`c^Xryh*-y8F1%!{^ic zmHa&D4=28^`&^!%pJUdaUwaGqrz+cT7C)V*%2CN*{TJ`~HovwV z%|2I@&XpE)S6$bq{AqBaX|PX}{~v!12!BT&h^PPn N002ovPDHLkV1mT2YBB%- diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_unknown_chain/00001.png index bb69fdc1dc13878fb074d7d32fb131297dfa6ea6..075e3efc8f066398da1e5a53299a99d43b1f3bc4 100644 GIT binary patch delta 1980 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 R;|Bl$002ovPDHLkV1jt37C-<1 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00000.png b/tests/ragger/snapshots/flex/test_trusted_name_v1_verbose/00000.png index 2cd4319e22aadce8ef830091e379d35c75008321..275ae3ac933250888d26026fd5903bc48c3e2b27 100644 GIT binary patch delta 1902 zcmV-!2a))JOMpv|BmqaUC1f23bdpW<4o9z(kR307UDb766ooM+Ns=gv?z*h9Eb}~f zEs{8nSF6>4`BYVv=Xo5*`Zw}!w=>4%d2Wo6*7UGdevEkp^w-x{$EQ>yZh?TiNfU z+-|q~{eI*O@mzCE=RD6PosBWp+Pk(As;UZ_kV%pZo0TM8RaI40Y0f(_ql}(MKzFO_ zTFzE~&gb)(7Kgtx46doe)OG#w@gc7#IoM!!=`4-VM_$I1gfhl#Hk&cqM}J2_(_Auo zW&s^Vk&Di{uKoVvx~{*zzK+M^;F()%Pp4B^mQfU?X*xl1Z$ZcRgl3n{e#1FQ68HM9 zq{@x#B=k4+yv!n_XBN;&k_0^uMNxcxeMwb+D~h5hiZP8}=|me_N<7u<(pl=QF~(ZE z*=%G);KPsq?7FI8jn+kzf5%4NHM z-O5Z>tJQM399#5fP@d7V4`}mme{u5|emESq+ih?b7RT{!w+pIcRaKv#pYnRQ+qvO5 zx6a3rL6^<1Y&IKLW`CjXTk_6kvr$!7^qXlq$8kK#73rcV4u?aq3s`GctCb(qWm)>Y z#&uo0|K3y#x3wSNA2=<|8U5nppx5hv_1D)|vyZGS%g@ixOQZKDna^^$Tr3u?Us)^` z?)nU-GShT6qdOVI;c##R=4AM(%(kkk<#OqtqBRGnww~KvC9!U;oqIr=e;Z_~#z((G z3p%KL?zOae<+Zgo%Q9=Nf35uM>+5_zU#*t|=2H}fAHi9c#c?cSPUW5Da%ru9O_IcQ zJNnaaHXHNsktDM=-*lctRaMeT2-?e4RY{X@yWL7V(fsyw8)KHsWnI_9#y-2Ix}L`7 zNJ`t$`~Ch$Jy+T^O`D(kLFTWH+e_m(4!+_(@@IHHpWS?RyWQaV{QUg5JtT^v^ZD#A z!hPg_<@@{FEqb%r+^}h$O+)>EIiJt_U;fsfsq^`qrfHg{r_-tDSF$Wi(=^Mnj=A|& z+W*#o`u6?(E%Wq${lRln#qZeEur4!eLHmtaV@z3=MNzm;H-C8C;c##*>t@f|X0wr- zU#|9Y4498!q+o=poDa%T`jJ=aU)Y`;1h11^2E&JeqQ%0lSo3?iJ z%mUi{ZnakaAZUL)Msuh2FYA?M*>UlDzTOZ&O;Xw)vCwuZ!I+ivja-U!ev+fHV)yZ&R9W z-ZWuDK?Xj{({HAlr#8#w(!UA*xrLcoK&NTyYDSi2A0HnQi`(rss4>=BckGsl*<1`1%$JI-@OR$+2G_j}k<{2&Zts{l~>nLLublPJT<+WMUc`X;`1P_m;(fVXetdjq<>Txy-bHG9W@FDtq%m}dO49!z06n_0J@#csEAPm5l!*RB^rE@HSFNsh;(-+Wju zm##Mdc;l>_2FyoJ?xaPN=Xsi@Zv2yf1IwlMMNt$=D#yIMb30n9Xi*f+O68t%KK{NZ z8T)+c(=oTbJe|&THgj)58)MQmb%*Q2;ovuNU07FD_3`n4@%8n!Ua!~d^~cADOVvKV z#DMwuz154w;`8(K>+9?D^V2=lDfo)t=qQTf@87?F|NfonQyib@ZQIdOm+HC>?&_BN zzs-w|S)Pj8bT%*0f;Nptv>OdAPcm{3*=n8u%8gG~=RaURNs{A{fK&Bu-QpHJ&o-1DHXPCT!F`&tbe-&W0`yXOh3#3AMOx2C-VLk|deSp_&#nfcG+&bT$Mu o0H~932vd`w2qcrB2oM(a|GbW=(WD+`B>(^b07*qoM6N<$f_x+iX#fBK delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5-oxwwBcu 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 delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5-F z!|(sj%sXq=e3_Yd&6*d#xZrv2XWzN6eeG-CQSX)C;5;RN3Ic&}4O5{BPeOIF%2ma2CZw&$+fiWQW!)W1rc z0lQl;u8A2B1iBcLMKPF#PC>5B3YdZ)M#q>gh&a^5`uG_LbQ5CFKHjw8ux^A3`VbPV zECmeJrwTf2X(kg&8G=pG($d{)G3@TC-}IEfpp<74s!x5{-c3S*_SQZ$SGH7Qb#uuR z2E0X_Lk*^!Yqz5 zpGbe2erKqmkw|ZoG0EM^m=uTx0xhhUNDvv!YG^$3JAWaoLf>9m3TrQL>gL+NZa=)P z+~Y`9$l1Oz9zFAUR@7XH6`WVOM~!*a?vxR(C~qYB`4OmPr9mRe)KZ6`qypcO+3-(u z+-VaNtaJHCbLD5IL1fn5!ujo)&zE{xd{mK#zoHxrOay^I)r5Lj5c&MUIksexF%0B0 zci2bW;GR^-c|b>5LY4c|l8(rd%i~WIMSiC-LytiqPhix}ulO-M_*4~@UR_`(xR zEtmMZLAq-mGGe?@wk6tQ^s_3FK7Uqz7Hal{2n5o`GYbEO6PHSQ^Et9}nt&2jW-TOv zvuFSW!tI$MaMww}V*hwzd#e7rCDQK^D55VFbDkzL>=CFV#E5BpXXY{J1~-mz987Je zuI-LT+wlk_29Kp)Ij&(sgOySNmmJ`t-Icz>uTj=0dwFu??Y-fVnCp+uET zq*nni9eTp@!i3CjUxB_?tpdC5%^3Q)?wAVLWDXs)BH;29Gvl!hI_Tyt?k{=Z&3lyp z*xly)r&x8C4^hDqx6XwTec<*=eX!rgXRo zX}=3azgu9zp>IuF;U&i_;<$|&GDy=vSL6aMnQ0Sa!d(|hN+&!zaiqxR2M-)}n8}@N zak-quHiV9qL_e^1rn^pJR5fd^5o+QklnqbuD$#XtqGv)!Zvk5wD+o#REDo2g1{hXvTwQuEIBZGc#A2!S+3 ze~WbY-Irs7Y~qE_0Z!M)HM%hDL5~?%1~57gM%XccJv3@1`JK2VU2X ztG{2Xfc5VtAtOkAIX8pZZDcy(VBy#Je(753rBiCm0wx|6+laW0eBN*Ds$d!05xl!% z85Nv-NY{pmJ|z2_H9o3_h6{8QDWas-JlB3$HCuMkSPJ|of1TQhcO0~2#vM@ba+Cdj z_&&t~H!xe^+nV4E1w%vlBm}A*qqCFwkpc79({jQ$S5w~XIE~+osz^HW$F|jkJ_ITV zC2qr)w-&w)THMO4Lp&|q z5St8sCAxXB**%RZiM{4O0Uc9ZRqcn}T!m$6`>E8xtRfC?Cf5Y1TAFqAtF(^OeM^(3 zy!G_VvckDlx=gqzDP$%NJk~SHtl)Gb7Ad@#&6TXM0vqxxCyM^BQv=P|$}sbOpF4P# zJf46`3^isg+d|WnLO(wN#3^Mr2|a_3QIB;|>5D*V?{${dCi*oncBx`!e6PUfit}rN z0d0l~v^yHz+vj7x`2xLs>b9Y!k|XA*2R#XkLLuamc8+`6cJ^(w>`{iP7u)j$r-jic zDEn!}`afhp3tnKo<+N>u)3nWa4gGP27jK^k?4G0r_X~>{1FQA^=0^Q~6t2(FDn|$` z+x>+ioA&nhEwHBL^pQ8Q{-Dfjd2LivWr_imHeTn_(#gdc__{_Gcpy&W*6mdi2g{kU z0s`jIxNT2Aelzg%D`g>p?hR{>fOUqf>tF#>&#`w7XD)S*Q)wZaB)(rj04(=2`p@-a z>xI7_EiS7oUlQLA4ZR3ANwM(G+4ffciv05%4pE|O<&9g1v)ch9e75VKEzUU9Fc3wj zljn(kC+$AFCOC?0Wm9mGMym{WBP0HoB@7%avA6|zGAh6~?kF~9j0k90RWd@*@f zr%F+VyG;E}XovUJjTB@ls>dAG9rdtwp|augc_~8d(~oCZ6J>llqXH{4*0@|$?hO4p z5WreT%AR}hW zhIb#?S~|legk1_X&~(*oM2eDd^%~@S)Da$Qxo%&5GO_COqfgeJ7%5GC>LaOl&`Ytn zadV7zGTUFqcxEl1@Uo4n9$q7{*S|`hv1x0;G%iwEgPCiU%^~yBgtW-Ur)9~yJ<5yz zV(EqiRo5)YQ=jvNwy7b#Xep6x``XT}+shz+PZj2TNtb#b(m*>OK^2S7F5}^9UN}+f zf=X)S7=zm`%Z^RSmgT$GpRd}#@?oQ01<)VsApA+jj4JDxo*w@)J?$-@D$!vHpBn$5 z^E-_RHduReeO`5OxJX-q?s+&lp&xenov`UMCPb!y$Ch^|c1=7_zkVTk4cPNGlA&EISJYjsP}JI}^<@{a0ms zJ_9Q_(NiUtCue7TOak(WB2;*H$qNmh*@B5Q%8Kmz@e7r5D&P^qTE3g4zWTIOlNcS2 zL4RpZT$>D-q%YLK_vQF=oI2hY$77<~{aTia-v}yA(aSS*KSe$P z*DVX&DN=sIpDyP2VRPP-3*X6>6jC*dAn`J}urVxzmv7__rSBEADz`R&)Y+#Vx78x- z?>V@D$u%t~or)JvVO6Z^a-P*3{dhT4t0T(QIkvQrQ8W=sa|KI;)w^5(driE3;&p93 zjN9LXa1#!tmxhc|=Xd0{%3&ciwq!Df$nW43SR|XV>}_n$7=KwFQKCLq&R>NJHO}z9 zkmlvzuyD?bbw002@Td#tmRF@E+d!+<`;)lvq6{|hOP``Us0{a=09@@bS76EfrA3hX;extnn{_M>x>!egF7d*?@BB;?rg#$|kjH6sSj!0elBbi# z#zO1u{SxWNwv&XOTvDlrt`=c1pxhen%Ql*~`<(S*V%6G-CN7!mkAx*FdWm}ezz%r+4@&W=(o1dbwYk6N@^%$L&$;z?6c2T+M z5OF3Y+G*>u>f*Y#xqDCc^wc-~;S{x5S{+coHpd!sNZ3d9fd@7>7ld(K@p~i(`mo~$ z{k%~pvx{mCY?s4`uF#QoOlcVpPrkyM@MMrvnvlfWO*E$PnMTqo5t|Ji>EzAsaA8}e z^O5ZQ1Jiznt@5>VvtoOy((hSbOWnJ_93L_`6+Np**B()pvWd|8Nhl*BSl#qh-BW15v3{WOm8{Rq(+%4# zh=Gmb_rW|Fy62zw>pOyRd{?!G2`L*IsTW^~f;=`04)a6N6N-KtX2xY4ePtVJ^B^Z- z)q0KCSB(jaOfauE$XvS6Y#&>e+@rZ@&xa`64V4|uB1K7JpL1|5&uz zm&7Vq6b%TNKZM6JlmZcU8rJ_#_`KQChE@HkxzfhcpQ8V6tQ-Rba`Pjw*4<~gSS}ke zmrNPjRMmKf;ANL5wBf~!YCr5%We&|QPa;q;j@Hn+YA1R5qGb;5tCOLg0mZR?+U;56 z77XWQE2oWKlColdwy`0#rCEiH&e$wd$dWWV35$jtmuWjX2>WScYRvaAam{@&d#?t; zQZMyIa~V#h7)JUX&B&^l8zxN}(uY51Rw^)BaFfSL12bSt>*7sS6ZUa=qDQl=6Z3uKlrQk9mi>%TPO^|q^KI3xt z`p!>GK#A^7sz0gvuRj6^*&(SzG8E1oh!E8DJbnL5)&7AY8~ zR3Fvx-e$dcKrN%_RqoiDmg3X84Jl&H!;@&;oib%ocdt@Z!>J<&f@(El# ztmtN;YuRx#;d!zx>9Z=kfp3=_6T6u@_XpRvTk)_f*Ob5M0U}gMzQV75HT=-PAtl~A z^O5&}uqO`iC<=v?#b%!#r6ifu`Fz3B(QXSTX&Beaem$OXq^WA2B;3`IW0YO*P?EdP zJl?uC3E3QN($D)MaI_J-(ZL}~ukVNBMxFTmNfW*>h7b+vnIZDQemktwYb%_zNH!;0XMge6DQ542h$|)dzIa+ZeNpT^N(r$zTE8^l z#)kCWCQs8N4PeE|ozodL)?&e8>)OWQ=qd1db@kA0frtZu zeaQopib~p1M$j^%%Lg_UphHPXTRQt~b4q#eq>1cI@Qwr!BCZ*iP@1dI|A`#iuDg-t z6^gj7abK6=;_*5nM>%LjXM5UBw3Z~Du_Y7&EwMBq5OeaNsVnuIkzqg8P#vxjldaiq zTaJ_t+FIp*mNWYS+S);O?M~=n@FrVD62DmT*!6V;)h_{&XwTbY{p4PC+!CbZF7G0! ziO(1y1q!T+N?DZ1W<1dCUiUlUqng3Gf1OATmuZ=v6r^0+YG~YO0dCmO&kq}Sg*W2* zuldVpVM5eLmmU=T1q*5iBB!zbsJf@r5hm7aSDoiaW7L=#MXSkTg3BM`^|%mqBG}S< z5v7N|Dy2-Y#nJLQ<7@Jda#QMF;+!$CFkX9!DToy2njn8k3Oi>{tIsQ9628>Ry<)00 zL9uLQ`Y@#_XJ(PyvAXbc=RyLWD*>Wgh=1I=wn*~VDS6V8z4_cU2@8xM4w%$W-4u&0 zU0Hz;h1K8gL#0F~%ch3*EBoK$5n5XwU&C2RZ6#c9Xx9}my zqhT$Lm-;mFgviM0kCl63;^Jrhax?>de0g1g?)KmcX)Egt%UW0=_cI^6I@%G3)(kV% zHp1tjV_n}^+J7EjoSn(sw;>M6gSKo(@0rA=LJtQ-p5QH9s(I(J_0ORAi{Uoi<4(`lK41?JQFIb-@r4X^|ie}2o6cN52J*(n9AI-ww2Vu@zhCc}* zecq&Yl+BZDgTO%ePX#S#ou%G~SxNbswE$B|IkgQ$(GKW+F8f?LlJVd=p5w%_utb70=9HcybC*e@#6Ff!{NdEf*EiVujMY^I zEOvTOX8&mo=;%;Q<&8{RpAcu^XjkpLRhzKg?00&<>QZo~{XTYGT5|Eyu@q#wtacOs zGtSz0EnAqMnsx;hodvsC#7gObgVw4n0mO)t{o>aO;gJwKEcj2*5?1bznubO=@x{oD zqH?}w#n>)Ix&C8@qkdW2zmEIZTSxY_15O8CG#R@Z@mWw6tOFY?H0d-SBENqU@JLi#6q`M0&oZ06PVoFSoDVumniU z9k$ilE|E61Cw+z_Ja$y~i_xksJ7tq^Rn24>Qn@F`{x)Kz-RLj=@%*#PepVW*B(iyQ z$=NBVK6!q-z5O*Z+lFgvt*f%@EuV4Zr|hQ2x|h%2WGHY|Egx{ggckeSH-iomF?C;j zRp5=~JLwNw9%Jj5WyVd)r1|oe9uW;N^H@Hy)o^Umn}V!CeL4^} zgX6#5pLV~uzo3U+EISJDd41x4v}PBDBjsfIX4WLWn;id$ZvoSGdIrkQCo=L?Q@GQ- zxpRd-G3cE_iD3CMCFkzm9_yGJ_fh>`GZ6l~NFO-CULL93>k+i3l_&fy$!qjBN-$fw zpktz+t)DY4FG@%16)Cm0;JJBZn-c0lDLNbfss1;+lg00D@+C7^xdQDUlR0ctswVf0 zjJ&j-6TMNP=R4cyS6s!5bZYUxA61qbMP5R@6Z%~2y*5_ozM)$qCLd21im%o^37>9R zm-$U1;>^d!C!e^DWCmVzT@-tFeRm76yPXFfY66Sk@io1%?Wu^up10+?k4;D?*E*UO zDjf90;=c!82u9G$x9-u^mM$-G?q2$pUXk`6uODj{j6%}6hHAHwmtG=2UoXy`Kz%OU z@?V72iUtnW>f4|_5zp^oU3%<#+on*@SNy1&?2{0q0Me}nYwU9S0YJuei6^W9sFLpg zAOo}CYAk;6u3Kxxur?jQIm(SVMHc%d>h-60h0HcqbjqaRSgBF@XY(@N*q)EI8{|MA z*yrpz1EBX*${9r&eAoRS&3`(x+KtX7X1Y+=u?(759CKmY^vW@A=Ce%dulUHIfb9El zQEq+Ou+27f=JOp_g|vJaNF-k@e7Bgf#5W-&C$_H@F(HjxYEOotg60w{&~%q_)yL+< zzOw8Vlx+Dfx4!xLe#9Qzw!YU9UWJo~=A zGas?s-EgdMa#1FsaPP!gwo4uFoap_aW`ZbPGkqL@TVYysZ0f{e=o>`(iG4Xaa$0EI z^fdGGWy%po1Uo=~;NZrwPB8Wk^m z&z*0Rf9iZUf?j!sC(%9vHChP=rMUJ0^lYFAN!-AXxU%WRY=8JgTuJ^ZQDWrSe2|_k zEq339Uu16@CDmD3>251v`@t{eJotAVbN16xnkWLN)_1aq0%IRO&LN&#%P5JCz;<7B z-j20}&Qr8bgtUC3972eb5M=BNMDLXh8O85|%fcC6bUl_3irIEPbL|crZib3$;UL7# z%%SyJ7n*eAH{>L;;|vc|Fec0UWUqP4*3?TgXS+a6p$>X;8$goF?6IY$aG|{KhSj)? zzJKHTlMqG>QraM^|E^G3LZS7qH&I43`uvE1X-#tK+d7#j7rz>A^4RX^YETq4@FNyi z0rzfiZ|8~!-re0^Z;$21$HxzC7Nn93APrEyShz%&bis{twUr9=bcP-1~EW-QOS4{Vh=|xHQ~_BD!*@$OdR#PeWrC z>W}a=cyoy7QY|EH6$^~KhjAta?@K=%I5T#I;2~Kjj-J*BtfL^%-;;3=`xuq zezu8=U)aI~edolbl(f=e7%uG=xfoBVVN!kTphi(a)z`4>QveGUwBXVQa03I@=u3GX z!8H^D2&m&jEbUG*if9g4v)_1pFzXap zlXeR!mfhRl9Q7@gdsS7O5n*Jk{|u6x%QtddniM&P3>q(dU2vFf=nMS*8cRXcz(>~M zVWd2QKCi#?35+2Du2(3#faz&BSKK<=kYQCS>9bkL$ch|Z(?1i4OHj`mlrlM(D}D6d z(-|9Gi}u!-PfXFv8+GKR;adx^42|hFM9G^x0_i2v69r`Byen)Uwqh71>bzeyd8`wi zx>A<#jsq88XR_Q2{$?B&IQd&nbpPe>?grmWd03AT$KQ1>csmPirJod$K&n5!_b@p=1?<}Il0~5mr@=$-WfR2lN0hmJL%U(U zb)@!Vi(nbw$`{4sBKhkLJNE0$iaIP?GXcJ_P+`efkqUwLCt98f+q8Tf$lWUXX`#%w z7wHPIlN}?UVraAZDd~C@mh&pZ;`0*m6HqmlFUOpCqfb^ddkQ_7-=$De1NT`!GA#Ks z6S@BECxx_9&v4t~KS{zDDQkOb5hj9-qows&G45##4-4xdNvHQ0Q=X0$NJ&nex(kJw z$YCh~l=fz-Q&VQ){)-ncXg5oZcH(xf?*NW^t;5M8upD{GcJdrx>I%kw25M_)sDN9C zca;|w14zU5O+pT7=AZ@&>E{ro>D#u*j=+0ZNH^DTt>Py}OcdQXY2DD*Jev>a0_9wQ z)}hW5{o5M}q=U(2JT7`vcnE}HcCEUd<2U(qkfRAHZd|}~?2p+bKqp0oF;9KXu^co! z(RsW4?9*3MLJo6v;%XS~H!{u2D=kX^T+Z`LZP57|Sp%6Me^?X4Vkoy%^OfonL!j7f zL3rmL=?!DwRcGOsgm1XE^omvCklT1ov5c}13mserXKVGCt&`b@HObpJDp~e^H$5?* zoEk0#AovE-x}+O(dyD=F7)+Pg&YVkoQ;6f2$LW(MBFl#UyW|Bt#b^y^uki*fkag0UWSzjJ*;5oS`5$- z$nWspww0FB%gfC~7pxFpXc0mUfLQAbxPWP}R#9X1`c^p@aD}HDQxF*yR7vNSrJgAF zR$X$)R5fcK#Pagi{sRU`r(tU6pt1B9u}-Pz9`9FxyVdKZr5s4gup=h>kbD|FY+I<0$waFU`XFvUE6>!WEtVlwP+D5^Xre5570^N8{o)Ab zA2<>kK+*d!4D2;&epp`b=^uJ|^oS`wCF#cnEtPI!nQY#DPehfy5)AW;>G{L=u?sg?=WmNRTkz}Cku6byLo zj{r!fD+-x}ReSj+Vh~9AgTy_54>g<`bH9(019;523zs>r$mSoSsn8~)=yz%FPP1bz zX~gGJ7J?fF`7R7WC(B2m6_~&4xLC~M?)7qnsUYwm00Zvq2yXsq0#lWu1GU6JHRVfh ztp^s+$;H}tsG_f0O)j(IXldVypX3;=_b(W=b)g!Kpz2S8u$T{m?FmT zMyc#af~eOqA;d{he8nvrw^;A(6>|5Q0lCejJ%J5g1-*Qqdsbw@j|YqRAFQ2|d*6NF zq38Pw7cZf{wv>e<&QDk}nA08-38v=!xADG_f@$1$@}q(zfGuqM$R`F?<2(Z4 z-!KmmmT_FjBF_C0bbjb7FEI2BFXc$X=lTIT9T>=T{HIYIo*>XWCIGSx8jkTs1>ApJ zy7>t7LAp9jVivjtiCyh3G0a64rxc%_({MvC7&_VJYYvlnxd{`DZCYnsU@-M-pAdn#O z-BWji*;7E)ghM5P!VaZE0hDi@MnO4Qwxluy{t{X=pcSpPDv5W&+#aA0h>;*P@&O#s z_rpG;pdygY=dJ?Z_Zvb0&=Od!l8A1XB!5~Vg%bN31GLfvyo7Z z1@w}f-|d2mpl`3+Q!SxWH;2@iU0f8;LxGWd)4x};{2*+2Yv(e)_=gKyMl-{b^pCCt z;8F;x(1b99>E#QUnh}R!Ni4vj0QpvfXg~nFcLJpRKAS&j29h@%Fk0*dK;(&aK_%%% zJpurnr&YpFfPHWD9}93T#way*o3~oDdtE5PS1mi1p#}!C^#dlPKvdlC(i)x6eptd1 zd}v_S$lWFIRv`4yy6)(-hL%r>u97y+ELzlkKL)^?9<5pC<14OM_U+sEbe-a9Z{uTY_;f z;v)v$33DfIU#>`#$Ry+^u{Bk5|4XXJ>CoL`(Z6B1q5@W8S?8Apxb0Tq8QE6Coq;ld z+Pm`6cI@%n+u-&#a5TX_t1x36C-wk@gBzRXI*pA9fUBX8T9!(rFVme1Q$o8s^C{UC z`Sxu8EqTQ<%@wpH;aT|VysSDOAWD%ZJR<;@Av@CJH+dLg8qgL!#!>r0MJ8nMNA2EbCjoo3p1#cHW8kx+p4XlTRAx5G&p!LeJy34FL>NRv z>`u*FY&dRaF%Z+LAH+$Ug}A%ExD7w|^5gc3&mv6^y@$!vS)QB@G$&G3bQ-yszNRov zRMr^?9@Jj8td!83Tm4#SBji22@_4TYlk;fhcC&MEL^r27*PVfv(5#ZuT$d5=?$l<_kG(TO#Jmjp z5PR`a8iSG=hj|_9{AgTM$Z;7}Ywu93Gw0+5S1QTxJC3GmIzTh?S6SRm-)tgIlptb%@>FBv(uArH8ys^C-J!nLwTDBOK zAb`aRp^QqZ@@JHVlv9c!zYWkfds=VYPVMar6{qTbd~fiBBiO^j3ftr@g4NMsVt^(M8i;pG>xYL3X9pzOS1LehQ78;(k7l5`)y<09)d zaWIc*cn}+2zhvPZbGr*KvQO(X$s+Z>&oTqVB#up)Kf7YrwRtgzqtN06fw;`YfH|&OxkcN*Bcc4p$CCLFk7QV^x1m2i7;W-CUv(!B>p3n3Zgh)Ix`a z*}dt;3b2!{uAXuXcJ1Gl*z++PO29*0`q_4+aC1UUU)O$q!n-a=<;%_4L`{mtxAnA) zRhZ=zeNEZ%?vIOI=y;DqrjGWL7ihXK9Pyg7#kQ~S(rJH&CaLo3OlmU9qFU(eYSBcl zd#P$?lP1hj`vugk0Ozue;yHB)9R%pnHALZygPx1@m-)<><(2!+=$!rL?PYFs6gk87 znU=MST|N)OMoUF1k#xKSa>sB3lO!UOpXwz(OVT;PhtRO^UiVmMVSQ5m3rfo zTm-Dq_D{B@*B2tX@FPcwmhkH3uJQnIYzn;gbC=Z-z;vQvgfFl4{P49c32|Vv|Bj0y zN;Z;S3~z4ykdJOtpzLG$tubz?E==|UZYG}p0%L73vd3~2d2RJvKd{=;FOG*)Ex zVwbr%EFZAf3`O9JQ%5r&?HT&QNTPwY$#Y!(;W)ZYVyls=wk5~<6b;gF2)4p&jhnX8 zL(N9su4Ji0;*8Zd$}z=9EDaC3#L+2SpWcmRW_GvLp2$}>C04K_>_UNjvY7G37w7A+rpC*WQ6?BI;I;_1CSj-)j+)}th*8X3&Pt;$ z!66>*B>==POL&;RE~vCqvDa->H}kmseKV5ZVVB{QP0Gy(qjib(N9gS{@>oh{cxiyc zd@9pir7*^y$!i=8#=Y{+3H0}$uo^M<(UQGt7tb9tRef>>8o8?2B1A6%rf`y+}VioM&a#CWE&3K*@lG4%{PnrfNmua*00-F4nG z@iF-XHYIY=Je+{9e6Do16)<45!Xm;?;rj*oECJZFkxw&=R=>JE@Z|z33KyUI)@zT zh$`^bN{NHa-~{bIDvAh-bnHFgVLv{sFrL1FN^&!Lc&VJ>sO3QPx-n^F+KE3~r|8Xv z9iZy!?&saQ^TmlnBPFqnGzz<2P2W0 zFh2GoGIxDPY)7|Pg6a&zA2H8jAfbu;;A zcCrPTObdiHcXmbFuavBfi>ya}B%NL!&|g;Q=Z~I|yXiB^ejA+PSP|KETF@*l9x(Bk zk;N`k9!s41!c2d|g3b6yh?{n41}N0|W3bSuI<~vA-nQ69ulMv+&s*0f?{+Vy#e0v?B5{)-DdcF$(~9J&sUGD!qhlKvOjOpMh<+*S|Ybu@ZiGdHyZJVhjDul?3{Zx+gDqp6qQ_J zI|f0MXp9&)Y9H(nAjyB%5pf0#s>>G(4!hd5V%Hsg^+`YXH0#+q6kEHiW61vp_( zsi^fiQ@KT8B})391No^vjG3r}z=;0~>bQT^qSa1RF0=R}qGNwxlPJ~*zQhb}uDncC z^cb396OelTO!cyxD+aKD-~}VFWxozRX>Ssq@54mIjo}BRlH`bK(%a~~jBfDVk8!rj z`4?vHdHc?Nt?NtA{{B$}2X;5TJh2#jM)t3H)uyaBnPQ4by`Y7?%QC(EuokL;qq)6< z#yom&HK}q8pq=3+<1>0WJsMeGkw8040KZ7(~|CKIRr>k}%Qiq>E(aEk*oWDPe^x%d74*U+N8l*H58ln zHMwsC3J;S+&lSW9YOMbJbWfY=9r8k$dkydTlX~*ljQwDdbFh>ugd;CeDR!Mhfc91K z&znFIDt(iF4`*jn03o^3slF|A&NMv-@C)$O`*PlsJw&u$Y!Tp8E_O>(2Rt zag0@VFR@sFz=2EVf$&nk=6yly5d2wl-#BR^ilAyvF7Ks`FVL5k*!tKWP|sg7ALhpI%yCcJdEn5sW`FsGh>7^J zYXa)%D8eCVh>*iYbueMWr38?X-2b4#kVF zTmI#g|3AaviP2p5gAiN*KO5N-NtV_0nG4#xz)p8(KD}`(B%-@XpV0QYw|ADWa0S3W zTlu&<{mGHq3rSAy0+WNI^nNAci8g7v!`vJ*fekx2+LP(9eOhZRk3RgO)3&weq`$%e z$eR)WOW*Zryv}LJN3U{586oAEv~G=WHW_>|k!5)}$r$WMCwTliS)>!y9v8zyMU60Q zD?dSQ!W-?j={O#0DV60I+@8zK2;0WZgHv^cQ}3?DME>I;6bM@qOwUIpE1x z6{-=t;|se?P<_AE^J9U!c>^OYX04i^r*9s>A77D?g8)C#VZr?Q3;Z`Q6M>`Lz_tQZ z=;Wxx{WW*_+KxeVqd48~^;2aw_6A3(Cx74zt0~9W4^#ni_^c1^T&d!~>QURRQsz}2 zjUouvq8xc?v+(!Kr@?`>H#5U!{C@(rs!e8iVMKI^luBu2{l|0B-f*-|?WS#g0GPZ9 zTb5WHU=QaK=B^dJuatcq^{kb$R6}nWF{I= z$|P^rj6p_`zY6s4s}2iL==PjtdYKJqFoM_X6$8>B`}wZ~qnG11REoOKrvO;IJSgaR zyNO@=(Bk-yGI%u*ApQct@x3}krOYNnHOMA0y3l90L6G}I)6p))BEEn9>;c90uhYo% zgb299(avD>7&-qSW)!rHL^H?E zKjH>x4X>W%WsxSVRG>y5{kn07YVPK_pZpKd)w>;H}Pc+~VPwdcqcp{$@nF1k0MsZRO zS!IP8^U(hStybp!8(Iwx*uPoO);9RX9hABDSf){+mh8bsGD}8DB#q4zA@cB-1uRtQ zyL+9Zm{pKAYuoS_fO%bKqqHgMP@#9iJI|7|it2}f#jtgRRX>%$jm1z`qZm4!OxeO( zo3s9>=Li3OETa6L?oq~@S&U0e+T350@*6E_e_BlfZs*F>KeVz ze<;Vu{e-f^l!j7lhdIQvJ6@d%C?G3<_Ft>eSJoW*MpsDmvB^zUMHjpud#0wm18Sx% zDFy6j976&kf-8GbVIT~2xX?h!rjK$axGfi{6r8lDWt1HzkY(cV09@5zIt)TH0w;)S z_=@|MUY_=olo8iR)5FfC1GU6v^sybSxjdpYvk%B)72aagKkUtaXfCtwM6c45q_Sc+ zt#DKJ-y=|sC{NR#cl@}yA-QAp9WEjN4uInJHG~Z9{dfFn4>j!(4p76ry5$WKNikT9 zs_P8c-jrnsl)9y9r~(4xe+M`Z_K_<(841s>9+3{k9);QRiN%-VADco0DM)tc zj4Y}i?lLK>A&@fdU03=zAgWUy>%2|2pe%P7G{mmBR_Zp^gZm;J9P>sdF+_fTvnSH& zhCe8PRV}xU?em>oM$DL~9#IP5?P86T69FGLIrwZ>zlysbK-Og<2PmV$rwfhA93HM| z*$o7ysYmG_i#{Heab= z5_ZjEa84}Rm8ew^!3gbpARg#G1n+c;!e3Tpp910E=?QswzC8A~MS!njh$|cGf5lyE zb|GSIj-M1^3Qrh#HpWPY*d&J7bB;UJIn&?5p(k%;MOHnZLTEN=QE81#x?Jgi0t!k? zi89+XlJ2O4S~d&}k&l$f-o*0Qql;N7Vd9)o6*q#O4b@S{Sbzv5#mubQY6Vb93+Cyy zumS%ZkHXYXzwmQcIiqA14wV$so%k{j?=spowQ!TDPAV>FC{|z~^>4IgpD$KTJ zFO->FDD<$S^c*_{tPiO&jLdGw0psa9i~zEHCGVy*iUr7?XMXtKzq7z&0g^J4N}w>T zUCvXtD1|sT_2lW+P-jzq0u;yFwa+9j>GCVb0HV8|zeBNG-eOD+Dqu2VOL$mQEo0c~ z)fcySWO_9MfHK)aDx35Xh$8MEN>a)3d%4jz5VxFP1LZoUhdvEZC@ge9>Ut;^s8=5> zLaDF?QkkV78!&*|+jl$i=XJAqzC9mWajhr!hMJ;+ob>^oj>8RL1_?VmM;3{7-+xv~ zsz}(*k&@#id_Y_yDK7t*HRORZ(qQRqR=ABU(aH)VrhkA+Nxs%PStoaJUNx@T5xgdm zZ{n>)bU?bHZi1`jL6QJb!ido8abYv<`&V)e^F+jH!GkB&!T+racnvw160RS3dF=RL z>&V092MrhH39s&w=Zr^^!&Zc!<}6})4=@98yFgY2(%9(?mT4`%+0`clx}P1}C&?%e zaK#t)t}rk!M-w1iWwU7%4vRRras{pxpl>K;38;QB=5t+w1b};aqC@*z6I(f&xU_5! zlvhp40|X2MUa1}dv?XX|#|tvua(MlK5I!^2rZF@vcDZ^TmA&X1j%Ktl%X%1Z%6QZ( zpElT-nRNVYV>N{mW>ps+KJO2M2V*FWP@DgiuPbnxtui<9&9Y`iCI5hck)SL=MlSt` z?;9`!QuUm}l0+US0`i6L7(tHzsIzXG*c75I4v2Muq8+?nI(aW0Mv#7vwx)2jrnD-_ z=0*b0_laL>d0$#Xm-5!bh&3&E=5gd}U~Er0JKAKtBfKEx-? zjRM>+@Q-u^s{w%3$y~Xwx{|fBlj{~A`U#ZJ`6B`Y0yxyS!-!|h?E4zuKET0G0-g_R z!5sjo@_I@1I>n>J#F}AtWu&R1n6sKTI5>>5K%T=&El9ILL-)+ z(H8tISZ2~MX_L4yNYk0PBnn6lvkld*WrB^g9v@t!QqldEk z0|OxQ2I9F#lXMo!{>y$Q&9w^i{0>1y>oyBm6Lbtm%Zj9n}BmHHhCZ#`i-Q4TmfZl#;-LrLIUx+ zxnKoMu&f*4+7sXw1cO;L$s<3pWBPj(dgy4aJ>q1iq_p%9xUgiPCW-#nmS<)W@OfGe zfI_G&0Pajd96lt$_IFF%M-M!(f+gyUgQ<^xvBuGiZzFY(4y55aDeP67&6V=mA=FH; z0=A(r^v-q)x$Lr1)z2TVZ*z)%&+{xnv%zw@_q4wOftA7RrTzlOSOHL`1yLdm2ksD%blLvU(l`5-N)d z+dF$JAEMEX=Gq!oA~k5#!upe#f;LVpO#=9m1=Vh|Snk+{`GX3qttXS&zp?(4u@><1 zqdg;)q4e!nFV9O$b%jkayPXGqgM<297NJW)QaJZ~SH>t6Qi-<@RWFoS0vSa#vroF; zPleDFd|-m18_bO3e!XV63J+X37xiboqh01UvjCCDeHoR+AFp_Ug;l^*n7$>O`%n}018R+E^=eP?FKna~S{#`#4 ztd?z^X9;&buK+3wt;lgAyAoYsl|Mk{@=*Bobx_RnQGDBT52OuB_;KSnrG zvBHjslNqGWjNY&2^i5dkw70$a^w(Xe1mQ}vo=OMijWhcVK7J-J*H}^Q*0NN70FVsF z_Ms+o|7F{B|8ss6wFgcZcFsTdxyJ44n_m8ZhbIRfUuDaidwU-6AdidrQYQay*lOzk;p}uiF~`pdW*kk+GGFZydue8816;u<7`fWg^q#%l z&+g*4AC#U}>TOl>UoO0N>Bb$igzHk@$kebGUP&^xoVQGYO_^8!l~#%M`d~M6S*A&>iCEc=h}Hhr-#K-^qzVC^*cXgW&9U>&i^65a(nOpqj$K!8n(8| z7IM{;GqY8n8z}O`{)+h93!4rXG_u)Umazb9#cO7*A9=i0ThNpk^lQxMT zGHnZQwL0&=WWrlJRpsQyTNC${X3F?1u>8WbJbhBz&Cj<)E*?K5I7_Uo#r=|wqbZ+L z$J=T57he4Sdu~g=o7;KYxqJK;AKGJnbX$-88xP|I)s`~(72FriOZoa{JbLiq;5?;b zcaH56F~^p^udb3)YmVWzzN38A?fcUr;E@+VFhNbANi`+1>_v=wXy}xyPqj~-Z|aYi zvTh|w!>$3OjYc|{RIqflU zIZ1_$+@tq3b2#PKpE?d~oEhzI`gU0R|3gV6|`x%+X$szx0gJ z!?Guz9FIHxHv1D<@IZteIMjH^V9B)D(9oJQF_F_mmX^hS|M*c+?aHTxXVu<&a$DE@ zT?XuVzIrn)si2OlRXWLcA8?5?o8yNHn+;p;>GaKby&PpOuO}EaroaQwcOUg zW=ZfBPA1?+i>fC-LOGVUIh=o5Af>y+(dUHRkrc+o20WKdmTt8;F{R@5<>z;gt5kFV zw}{Euvip9}%a0O@s+qd%C2+ynVzx^$pF?-+yjhaz^*Q_MCEzCGZx@3||-C!8G%4(>k`IL~u~8T%)e ep?S31fBsKx!BW4a44wj8WelFKelF{r5}E+Q*{?|e literal 20293 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 delta 2026 zcmb`F|3A}<9>>!+r`w5JEwMvRrya+UFPX0m8{H62N+OdlS2ZGM#Vq-@kHaY)$$ZJz znRV3&v6%T@D%BG6F^jd0trIpZTQ#gPc6J{3Ke&(k`swx4>-By=p07;5-~0+-I>%am zykMdWDOymN$YY-MdrD(?uV_G3fE*-p>zJ3#<5J*>7WuxiZPS^ z?s?DTuwk*J%hoHD(?7mqE8aO085wCp@d{`QZF+SX(??9~nUpD43+-OuSk`2PYgv-x ztB^}_{?P{w78g-wKJfV9UAQ2vsE0pR8DSP(H+G*5=O(rTiAW059-&@~x`HvOZI%*= z`YCP$&$cRjV`6_teu37$D7KBJ^YVDkD{0$8SwG&3F&GJebj?1L^5r(o(iN#xdd*d@ zx{I-#gebunc?MM0?uIB0lG0CHjF|iAR8o;41=?%Ob88GaUrPvWEz}o*tb=6gDD?b828rc$V-qrd?m$l$Rb|Xf2nxc*N6mt> z6hgwPQT+Seqv=E3PuPl28I43~ zPq~10^r2NgB!qKEuV>WjkwgZI<@>D#z(R0zYiLvH;LN)k)E{5+sx#b4!0Ihh&gcF= zA5CJjcegm_C-;P(JkZ#%qE_GGYB}s+cHxov-*(3nFmzrge04isRFv#Uy4}!SBQoY3 z&Y$wJ_TKB6;B1_=a=9tIDVXp}8D>ri<>D9C(*kWLY6fnNghSEVQKo~c! z;HRETE_u<-Sl+UcuNHhC=zv_=6FTCthNDqg2Wd?VbSe7M+Te_~L84H_jTs-J)R?Qk z8E&=AKW}u^LT*{+cM15l2-YlNQwVfkc@7a)!KkQJz#1Bg%#MsiG&lJ2vjq#m&_Bc- zbpk_rn6!F7hs5gW;ULUB}8{1FH1psZobC?Or(Vu>w2I)hMSO zt%>W;{C0O{kHb2Ce)IXg8}T}D!nV(#E$qV~jU#m?j)X#M=HE?r8XhuL?y>m1>DYF* z+L6i=|F-SyHuxv>z6`rD*FB-uW$PKAK&zpljfmrcXAZYou73Sm5Hf-7@SwJgcNdFf zI@Oa?3f&=Q#&u>tDia1b${09J{;rvZ%B>NXe24Z$mwsVy+V?W~Cl3UGT03b^&s-iT z4CAxmLZPS5M-D#onD)uQJ;?%pooA784Eb`fHnoijyuJ`u` zR%F)1>fN;figbxjb805EAwg=h)D@h0vLN&PwwxI0Ksq2S8=PVOE$=Iv_P_dMI?R*A zWEibKqKO-brV8fs0idSTxsUA9AAj!VRuV%I&hHSg zfdB{wZ3ccQ@Po@X`$wQM%(J2^|C?jDdvX8Q^Hg+^Tr|DNbPH6E;!3Hy z|B7%jb>aiarpN>^`w8N6FCfDmHr7K(L4j~1ArO-mv!X5c+UtGdjINs@GTI02OZ7%+si%hrdUH}w@JnQYu6Tg^c4P4o4 zSDfUSl;B*f{?q@#ORC+?vA7c0K$zZG+g+XBvab8|{daZTtu{h8-1$Lke*Qn0fd4(H aUZWdVU(c?-f?3?4m5-oxwwBcu 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 O0000|AF6 delta 1979 zcmV;s2SoU@L$gD$a2W=mw0(Zbp_6tQG=EOhG@H$)s;bFkG8&D(bXnW&cD-Kb=E!(F zp3mn;%xAaTt=H@EczhLGc(qzpRkdEPtEx(^>EqV=dt66A-{0R4d^#G9=JWaKTe<9` ze0+R-dU`r>hFsRwrSp2dPU&1#RbAI#+Cl3b9;a!Vo12^T`YZ<>q_TTX{)NL>w39drs06!w)7Lbxl{9bJRa|MyK8J=#Lws}3+S#C*>`t$>A&ms zx;LP=+ij{tqtR$!r_DQdUDv&J_rUp-c7N4>m7g|ElRnMw=kte$hf|AwA;B~H>I1s^Z+~(3F#i1f{P_6T zIuRR>$E($!1-RNQF1ue@E|$?5{0bTvKK^AI!^iOC(x9VSho!Y$Vb$?ygv)Qb!>+*8> z{r&yh+uMg#^N9IuHk&enXS3OOJWj(-(>o6j4|QEnCX?LrSWdrOE~{@JNpjV$G@Z|4 zx7(#ALaV*J+wD?&@bU36H4>}8J>6ARJv=-#O>^AX=iF3})6zU$(026G)6<{ua%rd2 zY4_7I$ja5pd+B&QZhw6xe^k!!?d>hkXSG@#J)b{+{^XrxG#b6Vy_Ji|AC+Hue}B)5 zUM`oP*ff_Gq5izRy*>R^ZtZLI_VzZNPN&o9>+9=*UzyEj)9G|Jn+?pZtk31Qj;L(! z@9$}zZ*scdoX%BonBNzdDWK0a z1}?W(LY)48jek}~Uv^D@$VI}*Wb*d*R>oy+_U?AOe>(DQd)0rtu)B_!PuZeB$I8K8 z`NH773GzYfEVn792$TNob2%GINZ26Vm|pRD)Bc+EyU_? zQ`$CfIb$m!4SY_IzB$)C1A2IPDDQ*6Y+Pp+EjF2QbIXkwq&Z_emc*#=U$yohqjg7SP?H@>#y z?7qfJh=0-2xw`f~=yKHOVzDUeO|Bok&vR*-X1!jg`?iM{am0Mes@Wa!{_yZ{b8~ZZ zbJMzkkW-Wo=RD+R{V~d6OT821X7B0C8tvDb=JaKKzkumnU3CjOS*=$2Y0-lpb)l9!j4vIX(*@Q^F?pJJSK*Aeqc=Xa@5vwvQ%r_*U30#)9?vagA;*=&MTj_dMk z+tI0hZZ?~4jmnQWKmDesH1>Jlr>ETZ5<$##uCBcWT~*a|I?YGy=jZ3Lk(JAjeDjo$csUk(#Dy-PN7$|E_-SnB{W`o6gk_XhBzub09kTUo1$A5PnF`wCNmTt7|miF!Kt$WIu?wu|B?|w-G z@a%qJJ9;vil=rOWbWRP0EA15i2Eo(0s;YmUo}PZm=}&&9_`c^Xryh*-y8F1%!{^ic zmHa&D4=28^`&^!%pJUdaUwaGqrz+cT7C)V*%2CN*{TJ`~HovwV z%|2I@&XpE)S6$bq{AqBaX|PX}{~v!12!BT&h^PPn N002ovPDHLkV1mT2YBB%- diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00001.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00001.png index bb69fdc1dc13878fb074d7d32fb131297dfa6ea6..075e3efc8f066398da1e5a53299a99d43b1f3bc4 100644 GIT binary patch delta 1980 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 R;|Bl$002ovPDHLkV1jt37C-<1 diff --git a/tests/ragger/snapshots/stax/test_blind_sign_rejected/00000.png b/tests/ragger/snapshots/stax/test_blind_sign_rejected/00000.png index 04055db7b46c91a2fb0d5f0ce51a2ad417852b14..9696ae12345b6098c7b397ffe3c35f540de0f477 100644 GIT binary patch literal 15903 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 PzM!t6^Q`Kr&71!Qw~1h^ literal 15007 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 FzX2ENb+iBg diff --git a/tests/ragger/snapshots/stax/test_blind_sign_signed/00000.png b/tests/ragger/snapshots/stax/test_blind_sign_signed/00000.png index 04055db7b46c91a2fb0d5f0ce51a2ad417852b14..9696ae12345b6098c7b397ffe3c35f540de0f477 100644 GIT binary patch literal 15903 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 PzM!t6^Q`Kr&71!Qw~1h^ literal 15007 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 FzX2ENb+iBg diff --git a/tests/ragger/snapshots/stax/test_sign_parameter_selector/00009.png b/tests/ragger/snapshots/stax/test_sign_parameter_selector/00009.png index 04055db7b46c91a2fb0d5f0ce51a2ad417852b14..9696ae12345b6098c7b397ffe3c35f540de0f477 100644 GIT binary patch literal 15903 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 PzM!t6^Q`Kr&71!Qw~1h^ literal 15007 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 FzX2ENb+iBg

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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00004.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..be51a9d5595cf5ea25f8f90b684306d30395f329 GIT binary patch literal 6357 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 UPsf12D=dzNgdJ`>c;@PV1L0-a-2eap literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00005.png b/tests/ragger/snapshots/flex/test_trusted_name_v2_wrong_chainid/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..dabe7afea35d5f2c73b04e4e20993035bd748cb3 GIT binary patch literal 12445 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f9840e3ab2d8d3d0aa480d1bd85c972c3b916b9e GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#;HG8;9*4kN zFa2)(pR{Ruok6Mw%PKM7E7kidv`(>fn&`6tH9gqo;^MN#J@G-NZG(W*iG}t#e1Fb- zKV8KTt0a`{lX$B4$~o~B?x*6e)~<@4Iz4h@Jmb~b5&vc;g`2H9{psfXevRGF%X%)F z{W^G1#bn40-weR!F*3L+ubT($m0wc}!uNKw0-sV5H z;CF7g9MJJ=+rKjGEBl+3>A2QyMfKUZ+;mUbm;0)$KRWh$yq((D^ZhGdwuD|?hi~Df z@|&)@8Hr8?_0j7y!?>j6!~H8~TztJ`f#FwsF1bzDbkz>zesQ*DR9hWnx9on|hmN^& zyJ|dM`zN>MP3ZiWI3+;%Z?hr$v=dI#e(*&r?E!in863#FcU<{Z?XiYs!60EzS3j3^ HP6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00003.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..a74d347ceda28460e696a38a0448e8a7a6d8ee8c GIT binary patch literal 446 zcmV;v0YUzWP)uSlW z!uED7xo7(}Xj6B?!>?=W`v6W&pRSpc&wdJ*^DRJ6ndQUbHS3|%_n9h{t^#BuGDQaH ztQbFG-&9m1@BK^vIZiLXR{gVG-}E=?beT1Xze;og^mqm{@}Kl7W@qbTs0n94#ru3O zXH4Y6Vi#Qi`z$mg^}(FeYB%8w7~C3F%WiWOK6__X;?FKY9{0XCkY};Z)01dPhMlAv z003OdczyG}3}(2@&VLdPmSNJRIlG}!b8E8~BO`myYt7BOMeLF`xAVU1fvXIA@WB|? zOtiEx_#7$G8Q_$dZOy67FTklcWir^9n0#%SUjU=z^Z2p405NZ(3;iNc9;rIk3)3Ag zqiBXr+~z!(-ki&2^R?xDb^D)oU=J(6(i}qaQEkHPzFgyeHF%QytwK+7Fv--w71Ij< o000000000000000006l80|tpcEwFQ_-T(jq07*qoM6N<$f;SG$TL1t6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcb78761fd15fd94377813eb932cf0245af596a GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Dba4!+nDh2VbkSi29*4kN zC;e{xpLE09-X@L1U)6Pz@cqwE59$gurmhhHYGNq1|K_}GN?*6c;}uWe+Wo)TzqkE6 zOWCglJJRQIPYCKV44Z9klmA?K*;8eu`j}gF&*pmny7TUOg-vG#S9-~<9VNyDU;XaOUjRnu`wU6rmV;;(%8h-cKt95^+cIY}x^|>`ynr&iL>69AV zQ?XZH9Ls(%r|F4eU1s7g$2l(7wEwqoFI!-AH6`DME7ab-W_RyC{Y0P#t1qo>JIAe` zn*86P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00000.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*c&zur@%X+Ij*PoU?OAnNg* zN4T4^dIr3nrv^aEjK}fR0F?i==%L;R00000_*iT;)ZFLw$(CoqpczYBSToEP$uRcJ ztaMiHE_xSX&a#);$Ly(hQ(B}KtV|@?tlvwhbEum>Ls$#)OI^xB&XYWO9cJ{+bD_LC zP>iEaKgW!&I4QeF+ZMfwbQf$;&H2Lt*tX4i`oC6%pQ!0Ot9jpY87oIi(s6^i{4cLy zA-WUMlU`vlZlCnX1CXT60J`)%1xHF!x`*ovo98o=HPtlC(^7+T&A(x6M5(A$S7q|GGnDg)R$w? zwIEtIsEPZraFNGyBuhLxWl|Pp@suMi08S~*k7;o3XjA5*OUBbbB)yPT6Im6+DWkG)l^4=fqgnb#dhcJ4Q+}vD;(X|w zv-^1e9@x@hHadr!g=N7Kw93CK@Zb6UJ{rm@0gxW}rnO@3gSwY9e;cZ3*UdK6?CIHD ke)={P000000Dw};FJ0{81JjCfLI3~&07*qoM6N<$f~{Cmb^rhX literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00002.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..23d61ed8947ad7b4d2eb1dce9684c32aba4e40be GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hsba4!+nDh2#w9p|19*2uB zb_jplzvRtPez%m0(gj;R-`d7caY|)c(xn8{b0Bx+s#Q__hYnn>Vo*}j{IdLP zk^Bq1L!CJceO3ybUg@}5?R}`t@`{jqXS)9KX@n)!NhVJh?@D|5?wR|OyTO(%3DUJ6 z4Hz$m=)CH%KB>;VXUT%sZUyR(WhX3uX0`MCmFlB5lXZ$GHho%Rb9L!Yv9<9M&F{9~ ztpr-WP3{`=53O@$$EKGakK4=B-+#ftLiSZ`-~MyecDo8bI_L0T`*d*GwEtJwX_A>eAS;o0F>khMis^8_P z_G@`&%d8jkdn`A&h;2GjeM9IWE6`G8Q1^`YO8Ps-6_@Wtf`mO?{an^LB{Ts5Os(!ZbAI64qyOB_K(z?TN&mHATw^O2IdQ39rFc{P2biwV7>tE zfA_bQeEk8n#zxBjlyn(a5 zorYxHewqy;rRK3|=xeS-b{yN-=!OZrbjIyE8(~n z7h0?*epu%|}*95j!AaiI6M9QJ_4*lR(fG+F=v004mZ@&~uO>GO1R RX)XW&002ovPDHLkV1ia>@Q?ri literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00004.png b/tests/ragger/snapshots/nanosp/test_trusted_name_v2_wrong_chainid/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..de64317f383985afbe59fea50520fb3451f89260 GIT binary patch literal 329 zcmV-P0k-~$P)3_DdRG1v(7o!({4Q7F68kzHEaC1(75npAB8JE0X2~t zWlbmlNVmmE6O|Z0ayqhDZ~-1*NAUHUC@)ccTK4s z{L=zI?Pe>*7hqIFX}eH6IR6c4x}xEm0RX^T340s*yzy-hF}D5*f5ksyZ$$xk&er{B zd(w~e8tM0Yz+QLNy)nJMU#7azo$Tvw$kJctBx>m|rUsF8p-A@ONa6(m0000000000 bfPeE1sz=D;0Gkew5NNldBtebbIo`1^r=ASC|&`gUK24`a9T;(9F zPt|+4Zj#Bqn?|b1zB9%k5>+S?_u)vS7XSbN000000000000000Smp6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*c&zur@%X+Ij*PoU?OAnNg* zN4T4^dIr3nrv^aEjK}fR0F?i==%L;R00000_*iT;)ZFLw$(CoqpczYBSToEP$uRcJ ztaMiHE_xSX&a#);$Ly(hQ(B}KtV|@?tlvwhbEum>Ls$#)OI^xB&XYWO9cJ{+bD_LC zP>iEaKgW!&I4QeF+ZMfwbQf$;&H2Lt*tX4i`oC6%pQ!0Ot9jpY87oIi(s6^i{4cLy zA-WUMlU`vlZlCnX1CXT60J`)%1xHF!x`*ovo98o=HPtlC(^7+T&A(x6M5(A$S7q|GGnDg)R$w? zwIEtIsEPZraFNGyBuhLxWl|Pp@suMi08S~*k7;o3XjA5*OUBbbB)yPT6Im6+DWkG)l^4=fqgnb#dhcJ4Q+}vD;(X|w zv-^1e9@x@hHadr!g=N7Kw93CK@Zb6UJ{rm@0gxW}rnO@3gSwY9e;cZ3*UdK6?CIHD ke)={P000000Dw};FJ0{81JjCfLI3~&07*qoM6N<$f~{Cmb^rhX literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..f9840e3ab2d8d3d0aa480d1bd85c972c3b916b9e GIT binary patch literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-&ba4!+nDh2#;HG8;9*4kN zFa2)(pR{Ruok6Mw%PKM7E7kidv`(>fn&`6tH9gqo;^MN#J@G-NZG(W*iG}t#e1Fb- zKV8KTt0a`{lX$B4$~o~B?x*6e)~<@4Iz4h@Jmb~b5&vc;g`2H9{psfXevRGF%X%)F z{W^G1#bn40-weR!F*3L+ubT($m0wc}!uNKw0-sV5H z;CF7g9MJJ=+rKjGEBl+3>A2QyMfKUZ+;mUbm;0)$KRWh$yq((D^ZhGdwuD|?hi~Df z@|&)@8Hr8?_0j7y!?>j6!~H8~TztJ`f#FwsF1bzDbkz>zesQ*DR9hWnx9on|hmN^& zyJ|dM`zN>MP3ZiWI3+;%Z?hr$v=dI#e(*&r?E!in863#FcU<{Z?XiYs!60EzS3j3^ HP6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2/00003.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..a74d347ceda28460e696a38a0448e8a7a6d8ee8c GIT binary patch literal 446 zcmV;v0YUzWP)uSlW z!uED7xo7(}Xj6B?!>?=W`v6W&pRSpc&wdJ*^DRJ6ndQUbHS3|%_n9h{t^#BuGDQaH ztQbFG-&9m1@BK^vIZiLXR{gVG-}E=?beT1Xze;og^mqm{@}Kl7W@qbTs0n94#ru3O zXH4Y6Vi#Qi`z$mg^}(FeYB%8w7~C3F%WiWOK6__X;?FKY9{0XCkY};Z)01dPhMlAv z003OdczyG}3}(2@&VLdPmSNJRIlG}!b8E8~BO`myYt7BOMeLF`xAVU1fvXIA@WB|? zOtiEx_#7$G8Q_$dZOy67FTklcWir^9n0#%SUjU=z^Z2p405NZ(3;iNc9;rIk3)3Ag zqiBXr+~z!(-ki&2^R?xDb^D)oU=J(6(i}qaQEkHPzFgyeHF%QytwK+7Fv--w71Ij< o000000000000000006l80|tpcEwFQ_-T(jq07*qoM6N<$f;SG$TL1t6 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..1bcb78761fd15fd94377813eb932cf0245af596a GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|_8Dba4!+nDh2VbkSi29*4kN zC;e{xpLE09-X@L1U)6Pz@cqwE59$gurmhhHYGNq1|K_}GN?*6c;}uWe+Wo)TzqkE6 zOWCglJJRQIPYCKV44Z9klmA?K*;8eu`j}gF&*pmny7TUOg-vG#S9-~<9VNyDU;XaOUjRnu`wU6rmV;;(%8h-cKt95^+cIY}x^|>`ynr&iL>69AV zQ?XZH9Ls(%r|F4eU1s7g$2l(7wEwqoFI!-AH6`DME7ab-W_RyC{Y0P#t1qo>JIAe` zn*86P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00000.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..487ea10fcfeb2f3e6b79239459672251d49addd7 GIT binary patch literal 414 zcmV;P0b%}$P)vpO}&+|8}fC)JNq`>?#dJ%s{^>GN_4usXQirk{^@^BA?p!El9&T9q~zMsh2=YdLB`_ONiP zKy6XlUGFZ>Cn7mP3u*c&zur@%X+Ij*PoU?OAnNg* zN4T4^dIr3nrv^aEjK}fR0F?i==%L;R00000_*iT;)ZFLw$(CoqpczYBSToEP$uRcJ ztaMiHE_xSX&a#);$Ly(hQ(B}KtV|@?tlvwhbEum>Ls$#)OI^xB&XYWO9cJ{+bD_LC zP>iEaKgW!&I4QeF+ZMfwbQf$;&H2Lt*tX4i`oC6%pQ!0Ot9jpY87oIi(s6^i{4cLy zA-WUMlU`vlZlCnX1CXT60J`)%1xHF!x`*ovo98o=HPtlC(^7+T&A(x6M5(A$S7q|GGnDg)R$w? zwIEtIsEPZraFNGyBuhLxWl|Pp@suMi08S~*k7;o3XjA5*OUBbbB)yPT6Im6+DWkG)l^4=fqgnb#dhcJ4Q+}vD;(X|w zv-^1e9@x@hHadr!g=N7Kw93CK@Zb6UJ{rm@0gxW}rnO@3gSwY9e;cZ3*UdK6?CIHD ke)={P000000Dw};FJ0{81JjCfLI3~&07*qoM6N<$f~{Cmb^rhX literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00002.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..23d61ed8947ad7b4d2eb1dce9684c32aba4e40be GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|`hsba4!+nDh2#w9p|19*2uB zb_jplzvRtPez%m0(gj;R-`d7caY|)c(xn8{b0Bx+s#Q__hYnn>Vo*}j{IdLP zk^Bq1L!CJceO3ybUg@}5?R}`t@`{jqXS)9KX@n)!NhVJh?@D|5?wR|OyTO(%3DUJ6 z4Hz$m=)CH%KB>;VXUT%sZUyR(WhX3uX0`MCmFlB5lXZ$GHho%Rb9L!Yv9<9M&F{9~ ztpr-WP3{`=53O@$$EKGakK4=B-+#ftLiSZ`-~MyecDo8bI_L0T`*d*GwEtJwX_A>eAS;o0F>khMis^8_P z_G@`&%d8jkdn`A&h;2GjeM9IWE6`G8Q1^`YO8Ps-6_@Wtf`mO?{an^LB{Ts5Os(!ZbAI64qyOB_K(z?TN&mHATw^O2IdQ39rFc{P2biwV7>tE zfA_bQeEk8n#zxBjlyn(a5 zorYxHewqy;rRK3|=xeS-b{yN-=!OZrbjIyE8(~n z7h0?*epu%|}*95j!AaiI6M9QJ_4*lR(fG+F=v004mZ@&~uO>GO1R RX)XW&002ovPDHLkV1ia>@Q?ri literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00004.png b/tests/ragger/snapshots/nanox/test_trusted_name_v2_wrong_chainid/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..de64317f383985afbe59fea50520fb3451f89260 GIT binary patch literal 329 zcmV-P0k-~$P)3_DdRG1v(7o!({4Q7F68kzHEaC1(75npAB8JE0X2~t zWlbmlNVmmE6O|Z0ayqhDZ~-1*NAUHUC@)ccTK4s z{L=zI?Pe>*7hqIFX}eH6IR6c4x}xEm0RX^T340s*yzy-hF}D5*f5ksyZ$$xk&er{B zd(w~e8tM0Yz+QLNy)nJMU#7azo$Tvw$kJctBx>m|rUsF8p-A@ONa6(m0000000000 bfPeE1sz=D;0Gkew5NNldBtebbIo`1^r=ASC|&`gUK24`a9T;(9F zPt|+4Zj#Bqn?|b1zB9%k5>+S?_u)vS7XSbN000000000000000Smp6P)Nkl`l1;k+@4An6g^M6kcbtxu@7*hfO000000DuchDWw$aQJnB& zJ%BsK3VrpQ1hnYqoNY&PO0WdV>i`7cs)e_@w@x()p@w=B24`klR6(CLpxqtlZO|2 zIWjpO-F~*EHtLqUMt)Wc_@bMv^h#{CUFW0M(vJ1P=5N1GhWcHM(-Xu*&bc@D4_o$^ z7Y|pL)I@*DzttR=&yLH#^{|TW)8Sp0qphw%epiuSUG#WHS~ht|j~;`U4>BXmdi9@& zuz>%00000G5i7^TsbXePb2LB O0000U4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v2/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..646ad0e00aba71bed94da5e9a86b516c72459e75 GIT binary patch literal 9085 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v2/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..d3fa2f49442bdd7d662c5adb7d24a504cb66c2e6 GIT binary patch literal 9650 zcmeI2S6oxux9<@VK|oLu0g)z62~CNj2H46*2vwwpCLl$s0#ZU1rKl(%NN5t2DuD!~ z3ZZSIpo9>qp+`g#F@yjSB7}sy`0tnddOx3YKj%E0ysVj(HP@PJ&N;^Tjqk{l8&)PF zholej@bHL0P5-{h!?Q1ohllsI055RnvUNud505e&`uA14=vVYvT5hRpYpQ2VrqzQ( zNr(0s^@wTniR>Me_yn$A%K{F9Z@T2de^1dCl@t%d1^+t_|E>GM zGsf6P+*l{-O#L-JiAqQDPixVyu;NY%yh6wD%nlH~0c2e@GUM~ll$cY#6Oy`ag7C4o zC%8z~3MZwUQHFYPF{oen^ah+HYekb%zK9#!AbjY@ZRdI2O*}l$p-(^h-F18K#tQLt z0;vY2*rQVR7ME%0tB>(psrFoRi@Gd(LBG2}H6uaI@L-Wm#IzEpxj{qmGtGrb9+ zF=h@tkmkhG*X67~lQA?i=YoMSw^qO6E{3(6Q|+;&lsC>JC={vzRADfdYc|;ZBf#xj zG{jvqPZ0m)cp3EZ)xvms*lAB2aeYs_ktwTk)+yW(C&`a1fm-;R+^8p%d-GXVzkP#> ztyF<`;j_F3@eTN^vaCOZXY(RIcC@|qaGFtJ<%swRnz4wGs43PubywC(>QtWVaQhFz z#AslG_CvGt)8vch4Vfl%hGU4fQvIq}Qp&+WYPh&@<*!lavpVa4=Jo1zShKUlnD&@nKgx|?aSyU$-y3x9{}U%VyHsBSdW2wwz&p8*E{AS z8tBC4a3iq?u6np%lFjT}cyaRn-q`v!+3_$$)yNm5K|7gIN2+14BXd!P=!f#}XG20| ziX5|*CPP}`$dQE%1p$!oQNFA8_HZN~bP#THxn)?lnO*N}xB_=CtlZ2twh3x=fqxiC z=$6w-66zK^KdbYY!9I5qFM#{n5z*$_0HU=kYiHcXa@4GIby_$0uJ(v2@Rz2hyxC-T zQsL`SHsXB?Lm>)NwsOlS0&OMAMeZ0rR(V>=$~&dLrfO-+v=#hagFJLa(L6hW>56KW5g|puL*$UgauUdK@LNZ5<7_1rWH}bKfuQ(m2unUx zQRo$T_!|6VK(chJ?u|>ChOiMu$Ad4xNwREw$o;f6oDq`;7nXe9^TE_pvJiF{r<1v_ z4p_vw$Mc1H8UDgvy1YUQZJ0nZZbytMxvI!3q$T*!!vpsK5reA6_n}zM;YgZuc|^fGjKm?APD3+VBsX=lwl#2z$ev*?!QI99kkkl`M2M_)RnCH*jrga~oi{hH zJvo4swYT?y`3|ni3p|w1Z#8A)RxS~x-84^-SuRnN%ntnG@XlvWLhA`EnNgy3K_bw< zs*jVv=&xjMLGDh@QLPIrJteJ&*akf~wxf_8Q@~)O z?dun{*+1cPGd{4)|MX9rMJr6+Z*v`_HgdMl(qMr?wbOLpE^Q(+q}3%jiMA1tSl#Hj z+^0}KcNK5bTw`S;J~jugVtrtFy=s1bR0Z(+@3&OMFVO1So?!vfwzi$oKk4|cKe7O_L)6{kvn*9UrZf`G{%I0*n*&5qS zm}m(bP1cPo-R@k=q;4LcbM6>2X^u#TX4}~-oA=xNlHQey z*Y=qoADhy`+~e=w@zx?sxTvTrQGE$wPrG zSUx)0Ga5U)ob$c~?cA3Z+)ciSU;Vyv|A1{EJKk0Bxvyrryufm>h#`toWkQ@AYtb9~ zC&=fbB=&H%dtl(v!t*Y^9+vMZrE2ZHK9Shjp5Wlt>2c*o&@?@=PU0Odq%{z2bvYwk zPX=)8jyMHqHoVHS*Eo5<`5%144woB(@OBlfL2YxnE$o9qa3o9g-E(=DUfbg#?98z=PY6VDTJFw%(H ztJ|l%ovJn;L4L4q7~J`F_*|96#C`$avYTf~5rjL{Qu7V$b#MKKRA4KRJ_q=H{yFCIiGcH1A{Y6xj9il2G4JO0l>*)ik@Zq7?GH4ncSiFKiCPbCL@-oaw_L z>N;%zyE$k?0N+X%96GL87S&f<4{t7d=SGU4*ZI2&((B50@u=b*(ac}(M{wLD==ggd z!pkmX-p@5kHmnh@Eh#BsZY?*hLA0Kh(l(|x{=u9d9z_=V<<=**$MV*IbqOh?=Jm=d z-WtDOy_^K=k*0`!;mxBLbYh~m>pB6`YHvBB92X5CXpXk`Tt7ID)0i3>aXyl;HuH7^ zbJ+03D9l9;F~MN9PNQLCXYuRzF9%;JBKV%~5GqqUbbe}hEOUCJ-SYbJqPn7(k5~BL z#FH6PW;vB!yG|~S)yUaXjrRggtVvTyjW_xT@Xr^|>|~+r-7k(<8A*a=ytTzRJ4)+-`6sZE)c&Jas`f+>qjc)&8~@ zN>45s2XgMy8e8B_mSMXwGJRpU*h}}%kyj$Ion(fnmj9Ld7>P|t-LBti^>Thc?sh>6p@I=r@#XE51I-&Qv!B&c4k6aFE)b!BO^0f zr!_JboT)Dd?#I4MPA`UgTV;Mp++6PKw8T;lINRrZMS`XhJ13dua+q-g+&bhgIwH@f zTD^Y2QXymEV<-g5V%|IFs-BqV<6qg*|MqbQ7?Zr2r`&37>H3==TS{vD#QOAf$?H~p z>{l4f!`?nZPv!>$iS2x)N|cS&has9V4zre{k%S7ckO86_Np-7pWWGIPTOX=i8xKRv z>DuW1knK%N4H}Y#zUokBpA74F0tRJp+#(Eo+}M*0zv4}xyvlNUT%;a{(y~awu$_Bf z1dRGNZUK(K&ExORvKnAGW6}ZVK14%gtJ>lCIWHRT<^#%=n8F_|n_nEUf7KiUQM-xb z6G0aUu|ET%N<@P0OmKcr(;ZT!7c+K7mh5Qotp}vL1x=){5HtN&#&Z>;+)Zxuz)Js`KxPTt)5IKPt!MPw7@BHeu^{Mf;Dxw z*^Z6V4sxh0yy&tq19HIbR>CFa4A5_AEo_X`wEi+x{PJ$)sVUnExscy|g)u97g9+W% zBf6F&dKrZHV9G2svd`)unN@Mnt$mJu3f`G)_?)V{%wp?hu-KiP7nB@X**ynSw)M(o zDT-F|fVBM5kn;O+^jDO`)(y_?$O?2_{}RE88$N1|=T zt+YcvXulM^O2ojBI$4!V3EdZ&HdXDo1wcBJWW~oegbOsUijB&~%6qp=@finY;pT+n zx2)xWC`v~=nyE#-)xA=#ywqO0np<{O)cMYAX$Sb8zV!=R8}3SbN~GoZRySp0`N}>w zQam}xh^bd4N<11J-_e0Od&vw#OYr^tWd-pIexY{FOps1I+FU|R%O|^C+WK{7DZRz`XGC4p~826v%kP_d2C4@_) zYVtgY+G0|PIG==s1cMvdfPwVH2t(g;GeMAU0nlHaM=ovLv&UO#@(SGu`tUZujXCU< z-otAbbIT6g+VE;Zv7X1r;Fvu@LsOvzxcoWM#6FzH?3G~F^PHkss^6aTx`E?Ggechf z3^@!>Xp%{Ylia^uOpTpYXKC(QEyb(tju?M`AB`0!N*B zkY}-5a^nYFGm-DAHvNOqOP@1&6|{CFRiC|9s`f*a$aEzYmz$d3`@ixiNL1)Iz3$ig zYTTWz^NWd&FMtHt(2(As(G!M6pkH zlNsT80)~b{f2^T~z8@a-CNeir5Mm=JT&6E#*2lr!l@#GdvV)N9!av?Mk{hpChgfGT zL61H``zPG&y1UdVN=e8Vm^qz{sku}_tYesWW18Ve zlB>(E=h9`Bu#o)LfWD7>B^`5xj~03Z5+5ORs5u4>_0<{EVMWRI_VI~{Q5)V=IG4i- zt_&5i6aN&6&E396Sc{H}48~b@X%!JF1A~2F35kiVE4OQqw;QJE{D=VTY>Q@r4}fA$ zIvus}ieAw@;bLdhJQlV;uywkiMok!pUkt;}Vn~7F#=ZsgNcQM5eKy1okr&}!N5U^E z9?!zfYsUp+XaEeuFE)@Fi^qvf&D~Ly;m8Ue5S{d|+QOFcXDw}QPfE)k+td+!C~s+d zNu}YIQ3f`ALcI^}m$SNQ8tfUXznNU=OB;|~MS(BJ zOc_L8)+PD3TDzS1>E%F!yVH2fSQY8e3d(xxwB=lw8_A&DEv=$EsQHqZo8`5>(1-HT z0d+%>8de_P91I+gNR13g2t%m0YLpl6nnO^(Izf7*AAwb^x7d9NAdZnh;SOvSvp%(ZFu3L-$92!xf$H4T|%#$im1rs*S>2_+DISXXgb zsMohUq?ZySZtPij!HqdYKRaPJ_fAViz#03_``KO7$>rPU%7gS5{bx(1Zk9v;=n#C} zG%^d<%FC4h5Kr#M$Cd}GB)kldHNmDX06lD zi@fhrO&upwWpXfaaeZqajr0pD^wF=E`+;~`E$_a5O(^SqOIqtZd&71tA~mdUY2sb;^d%xxU#XGXw!OzTLKhoEFmtdG7p?Jk>M}&M;nz_q z{D^|H_6VQGE0kzR;Vmu(YERfsfi<8|lz8pU+4I&q`v6oPi2Jn>U;RSi!}#?QDgFDY zi|_S^qOh|_D^>sf{rze8llRFrPgH?ND??K~CHq3fjUz=$cQeGKD0e%JKGmLosyK2x z*zmB=A3%C9ixhY{Oc#f;hd<2;ky#6RRwH(RhW2VoD2MO=YxleQO#YS`)5vED@wk$!o6$t;esgtorJ$bw&_yGUivAG`idrd-idO| zRHJUiwbX5m^Di~Bhm9znVB725)6amU!Oj{1Sy!+e;UviMT@~YN$c~z+;p_Mg0I>b4 z*NJaYXWP~+SG=U6!TsxQjKV8RapaN!%8#r`!G+BVzjPIu#V2KTwdh=UJ3{xi>aE?o zEf3vS(<;%XzXU)7pIz-0=uVt=YA%%MSe-2Cds29TaPpQt~m*j6Cbc)C8J z8Q9kj&e=-M2bCT7Qnvw_cbHv={aVhUB=(ia=PL7e9b;v%`sjg#wcM+Mzg+@rR!=1v zi_lsd<;)p7SnIc&Z$ZPq&EY(By|7*qad3VNwH|#=`4$rrDKr`7> zFG^=s6NXshc!BTyJ9qz;y6yk5{JI+H19RAuHTC>_5_2^mJi!-W7N0?5>kwi?(8|r7 zhdpQU4Qfx@%-77J&VT|!ECNsrt5*VGNE>l=(}2bkjeg@~_(d%gDnMThL)-3Rz~_E~ zRiR;eGBSOFK<#B@&G;kJ!ue9h0(|aTMk10Lw$+BAwTDQiVrW)fxhPadU)d8Bz>2-q zOU_ISbTJ(5ea@)^s@AOGG4Sx4UKP0vwtrzpIvPS;%#3nuC_g%{mqCRKUHU??H?N^> zTxNS#qki4L{DtKG11_67|HJWhc`mIzY|dbYWsL}aB`>fJDba5f*A+}J{ln$T<^gQ` zi_|gWq0ziXaL#LtuFH?VT?1HO<2OJs2rp9z4iGH^4q)Gd~v$=pS*xH(8uyPRM#S%bNSWtp0 zE)|fQjKOu(=7{-L9JJF))OiA$S;VfC&u$ zn59z+U`An3EcgSEPriIm7r_X=$! z6-)+q+clTYF<4VkpiZ~Vb5tg5?htNuk{GG61fScA3kfNu01vx=LuLI7gB6J_umu=? zicC_%I%nJ}6PW@~J`Edj0O~aU1%P`anLatS=`=UZyx%3(AyJ{=+RE{gpADeyuC9Q6 zx5Ph%v|f?TvQH2>0E*vVi6EQ zevg}k2c`zR7@E^mf&T_!(Ba7~6Pv-$B`J zYTl|NQL^u9OuHJ~B07I;O4T&B$zM9WKCPUn3RQfRy19%37(JWo+ZZZC1p=B_trT}s z2|8erGEG-82exuM=H*%F(Iv&)Be!e^)LVQRW`ow7lOEgf&*v53WpZh5c z7`V|A(Jb3L`^C>AK1D-R>Sa(3)CsXDhxcvNX_Q(%_Nm;6zWhS^{m2zsz#l(LY7I4%{n_olrJc8{E1-M_Fu9pfo@ekRae$7Xoh z^jzraM(4u7lU!K%Z%e|UJj(7om9?s1;ajBb>XdZgC!!J<0-zyz-@p6LlL$HFnawgRdOkljQo?7 znmEqqz+@3D3@U@w5GAnT<6mQJM9x%!My5l}jP~%gIlk zP@cyEDn9Y-_$slG@w%nlj&nE-x12fUB#!NymA&Z73zvD^2$0)jFgBs`B#6ZtG~TVq=D!YEB3_Lj!FfIRbW`M%JB;$BYRTYcT$+BchGl3SiRLv-RxdXBG! zy5Bq))K@6GsF%SR0KtWgn9*N4-8hb)SBcwQT8#+$CvWf9n|hal@&Y6R5k>sf2Wmtr zhZ`&kWrtooCPrn#O%*>&mm`&;oTzlfnZm35BD@e3NZ;Cl7 zJz`HTNu|(SuQh)tV88d9BvAb83DcZ-^BaLD*W-jbm(vmn z)ABCi9+RRRrzt(Wmgl*^OS^&xu4lz^i`z!}VJ12C>F~lU{@~L&FnrLG$Lo|Pn{gSZ vW~rn3cwTnqo6*9eWFCjq|7MJ}W~h3y-1pwavL4{SSUgZ;tG_YVJRbfZ1fah_ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v2/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..392165d4fc71395ae212fb0ca017ebdd204c126b GIT binary patch literal 6218 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v2/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..339db1b45cb46ceed041751e09147f0574884fa8 GIT binary patch literal 10991 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00000.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b861aca15b444a63d71345a9e24eb55b0ebcc982 GIT binary patch literal 8078 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00001.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..36cae6f09df6bd818a3d230677eb5f84434796d8 GIT binary patch literal 20415 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 kZ5iQI<--G#7o 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 H8A<*RLci0Y literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00002.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c57378462487908ebdc0f7a37a5d4039272f0e GIT binary patch literal 5603 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 L;1SB9v)BI*z^w__ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00003.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..e91c22224d3134eb308249ad0bcf7c928fbffb3a GIT binary patch literal 8666 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 N(a!mN%ejE`{{n}h!xsPm literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00004.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..392165d4fc71395ae212fb0ca017ebdd204c126b GIT binary patch literal 6218 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00005.png b/tests/ragger/snapshots/stax/test_trusted_name_v2_wrong_chainid/00005.png new file mode 100644 index 0000000000000000000000000000000000000000..339db1b45cb46ceed041751e09147f0574884fa8 GIT binary patch literal 10991 zcmeHtc{r5s+qZm)z7!#{C0VkQCCZj0ktGQ;7)P!bu8$(k91tYxZ^ ziNTnWq={iB>tHO;?fZM*zn}Mbp5J>M@9`Y({5AJ=U-xxi*Lk1U=R7~3^Ll*4#{B5t zVt=!-u^qLzcI74;+o5M{Z0s+%*@2dewjH%>Y)Y*bS4?h2KVKq~@)|A0k5p=*EL?_7{i$%N>@x zU?ObYO!a#rtHRaNzoOCNa~ww(#hX zajUQkhwzJRNeAVDw29oHguu6E9*2eu6cNr|IG1!)cAguvI(FV9=b&@Pc!uB8k0pc! zjK{j(kq$TehPq!*`jDq@Pm1w$NEZ`E`HNd9&te^bXU38Buk)fkeU5{=uNLJKt41sf zZ({YDxK%vTTklxVkwjnNM9!d$v}OVIFDgKHVKaX@w<0iyFiM&sIk)ygM5wHr{k*x| zx@AXQH_&=wLF_>*QJeROiihB>>bz(ZVB`bC-Dk4yFXTl>$)*3xb{!Lgw;KBFm4T5C z?EAgc%@G?=T!lb1s+3g0H#*ClKAr&#Q{X+3u)oV(UvD8T?Xeif*xC6bD&K?M?19d| z?&ys-NE}P`B{r4aI_S;UMp}|BGr+GJ;KQC*`A1>M7+ecS1p2RX)9g3?V$)0raXr2Z z0sJHe!ywEU?8S`L^>w*jaBA=SRRfGCEe4B5vVM7jv*e}!_*c$5 z<-cy`Dyh0qYO}#!O{h`1j$f^u_>D%=&;kzXC)fUPv-527SFvjRi%)aMO-q6G@DZ#8 zTw`v+lZN#u?IVeN&_*8<)sGxw1NvlO*+m8`wZ^M)Ih2S!`_K z)muLScB!6+Hnk}Z`EyKW8(E40r_6=FZTi@u|1G%d_%{^WdU4g(_O>PA)*kU#X`>3p ziEl381!PoHw4kbn_gl=pngYPT$&D(k?QP90p~1K0mwUUrs{3~!x*4;28P>S39dmj% zWmKO!QwIlkcXv|9^fP(s7a)Rmlx(TZSuM)YmgK~Dy$mYcM<`Ze&<7O@&aZ+-Uo17i z>z~TBCVcRrp()N%20AL2&e^|RF+^)UPp{7EzvtO@dQ{fvQQf8O^etm4z#VFoI|AkJ5p5#ar#hf-Z z{hZu`n>(X>#L*$rsC?;!dO`XY^In(kE;x#BckD(l`?m-Pksj98G{D@YtxpC_S;$U| zDmUFJAD3VcV{Ta_OjiHysDt3z-qLHNmkC z4)qfa5`z;ACXzPfspxgg7#{z?v*BQ5X;)(2yLp?4ID=D57Ur3Qo`Fv=!Urz%6)WcV z9Pg`DrEN_Z+dOQFJY`fH7q|(ywA-J;AT~%X)1rjy*pS!KijewaCDHBgJ4U~7Vb2xP z4DdNVp5Xiy3DgNLZ3EBj%fRfY8Z}}nA{O{T z-K09BIk-A8(j~7()}qWXe^+$LBo**}k%v$aG19?--T*7`lLpMBkFCm{1CjrzU#mUq z&>#Uo>lt7fKI*kz*nw4q(=h-}kF)bccV*Ui8MegC0dOlMjk<5WdEauZsrKM@Q0l^` z7!&6U0LYjuXwtknz#B?m12MAaT40z(5(7geM;e#@t*r(;jx5HRxOm?rJ1|C~mm6e_;Hbq14S)S-*u z034MIgINDDnU5W0W(d7X;d}#izZhp7jI$X~_3w%VK;pJs{Hrk(*M{I#+>rK!TAg|P9y%r&xFlOs z52&}9-3Q}FmB8X(*yQ)A(kK+Lk3M$+7%p)vRE5`wFEM#E*Bk8MKs#YS!+y%#1FC~{ zIy@ggn8vMAXSzL!Y0$Mc^?|B#2#=i`S;I9xfr3GtiODC%vnr7dj+S8~%Z$jK- zuM@Pr!5OJy8o*t1>ma%}cw;g9`|NR0^tF8N*-_Q>tbtce$zq`i(2h0?Bl$}HPSJ6mr$vD=Gq5ta)N~4#Y=;YvFv44x8 z4eNcRXmO6XPl2$#IY%L?@s&MGz#x_Vy)|)>;3to2C z0tmp%U%6GLps;2PGPd2dGTD#mdtq#NSg}QQB11AE(-!=o3oxli*rT_4gHCf+Wxz@C&*M}eW=lj@U1WBuG2bYWU4;- zko~Z1pMVMfntWD!ir=ZDWbt6=NzIHyJU4oK1nM(3gp20le?tb&d7NYC;Yo)2UAPsk6iO}hTeD*-z@`NRkewE+fH&FJR0Do#>F~; zMxp@c3v3imDWjgtI7B;xLTT1Ge7wtGsPPybZPM|G*DTH*IPC}^MEvY4iTnLPe)iww z4gX$ze!7pvuq8ko9IOdeuH(#Iu(&$z=6O22j0$h!;R@nST=y}v1G4MKJkud<;PwcE zQ|T3VB+l~o;^rDF9C^^mkOn`)Q{SM){pK)}o=-CsChmD0{w+rvw{ zd)zO11YawoGSt{n{;qNyFAnRdQ~fd*n)j41Zz2fQavyvyW464!Jmf`e+1cwGZmH`Aj2LW2 zoMp6V@xz3EAkD7v8&9hkXE4dclB$WNsHz`h+1?ZPx}>B`HgkOm?e8QNAd;SbKoTKKkt^Iy}@(3A2O*|Luz<$x*Dy}^z`X8arlxVac?tIeA1>WG1Bh+FqC8%rLx*^whZZ}~WDt40~yw26AV=LTT|3zYDyV`)U% zXh&e%C70N>_^vi@=H`Hi?vYX(+!~OjS3hVL4VG_8G4kpV0Ni3@LLV8qvG<9$j`Bf^ zr@7T*yR1TCf!z4`@H8`ZW4y$%HfSfSdjaW9w7@VXTTqnJA9;QPdq+%}0>xTW^mqQn z1I@&gfmg+Z=r;vJ%w0-)d~HzNTS{Phlq7;hpJM4Q-{K7%f40oxkh&1zLr(M?ywb+y zJZ?CwsrRC#dwBSv!}-qf8#OOD6I-O~_i|5szG$~3k#+BP7`6bPvhi+cVA&TyrB`Le ziX6g0-%uJpLrYK7NeElAo{>Oe@_7vYH=RSEWODOH^+}_{)|ZFH^}H+(*FYL%){-Wf*N5VTpldtLi`02kY4GNzZK??PaH+gx$H z7s)494b(F{BkYk^9PET@pSOkMpZVvmpWj_Ea6gZTSRPn4Xgh1;SA2C(Rreu2xcstY z00>=bQ!Q(;C>YzHL6x-tsFx&&-^>m|%yj+b(i&D&j97Q%=OEJZ4)G_v@50UXJWP}7 zZssUo-g#f;|7lgwDWPxX$J3G;YbO=n^BD*H-TLysQxN%2f$cys@hDTl6<4)mKnIX; zF(ap{W>(Km=&8Es6Haq4ibxI? z6$W0F7_=t51K?=yB4@vO?EmW99l&Xy?_H}c;Yzg5{`oR{MjigY@5J12aLAaw)>~i6BR*@(P-{1K8x@3kDZX`?szZ#P{xp%3!Dr;YIpM!oX zDD+T%UP8y80hwv?CR)b0knZG}5JnyyG^WrqgcEdT%|=X|q#SW`;b9VIxsxccrF+jD zM^!RrU&;lCNs!zTJMAT)R#^+@u9q6TE@a(Ccg2L->~W=;sbuqSkz{AXgIr^bT)<#O zLfVYb6kCs>_j{mtkVW>m)Z*}2!tT{7Avc2+G8qDU6WvCt&+7v6j<~}5(dxJkvgGI8 z0C{1HbmQZo@UI$a6+o87%#Y7z?(J1}5hBT(#1Ht2{^z$$`1`^n%(9->)lW~_-bgAxw2^$3TdCXZo_EBQq4PKy&6wu$9L#1T}6+%SgYcok%8rS_rE=aTeWJL z;zgj%^1)7wB5gw$0N$bOU&B8I^-FC`6C;_kl1J(k-9N9L@n7Cb9EEh>{ku7TaZkmS z*n&T^wGAOks^?9FmQgooD=zbU^w`y&=Omo)sWZOOLS|&X%Ggcvbn|m8IU*ET`p#iT zW@L@xL+JQqkn(Y#6MI<4 zYl1;P#f#iF%{wuVX~%XwVq`Aee5H$`-|LV`jD(TFW+OjV&C$%L;vo@v$u_K49+2SS ztQIkn?Z?Rae_CSm2+Vl=Dgu$+InvKVYE+51=;WN-p}^C8o=x9&IC_W-Q`@P6#G^?PICjHYbnZvf3s66WoC*7o@-bj4tK`5 z^Cg|OCR8XaJ}hpz(`Jw{>jfUO4p1aTQ=XPYqrP17AnyulV*g~u0mDkR|F{6V_1*bA zsB$p=o`-5ab!#~~S4bi4N1TyZ|#v}|18{9OcXI|?IbaV8-bpk+WTb+1)O>zx6%l#m&`?0R|6 zQj`|4graPb9dm!}$d|_N9_C8!Fg$WT*?oho>gJ@RiA_B}M<@D@dt?CwjeJ(*>#9K) zIRr_I(${nL`V*fmyAshAD=@^?Pp921@f)T1s!rW@=AxsPE22Idf_z`(--YqdH}>Fn z>B0?x7rRo9Ev+A{?>J}|fv_YruM+`|pcr4V62hDcjP%d!k}EYSqehC~XcBH+->Bp9 z-+NN0@Adxu2K`#T)RC$ABm$sV!i}$}(DWAS;Bh+1qKxbma8P;q>ODOsUjS{ficRt|guf z$j#!DK7A1k{w=pi2rj#mL81*M#HO0tNX;9C&15xBJm_DVT{y-sF52UH_>i^nc=-hx z^5>rL(h$d)gj1Vzd8GatVc~EhgGFAxK`^FdWzk{8QU_U8?z;DKG;~PIjjHL)D6E@H z!qXhtEccJY(e%em0UOuoE6gZBn~e!YK96>^G8iwP=H1@fYL8Wi1~xVQy}vpR)Ac52 zl{=PE!?~U?Sk;7iD(nLd!yb4$tNB2_TFW>S`?MdngS%6i6_)4V5FZ~85VWqIFw(=4sA`DA8MRhit1#P=(8vx56p@mg@Kr=dsxa6XJ}Dm ztFciHN$G-jXfXY-l;VD0ykYngo-rW9j3r;%?xKtaHv=Cj$p+>ji6Mt{O}8OE^Su=d zeo{2w#XT^K;nz{|kc6Hb(vtZ!r5@gpO(>dVsf*0pA@s>DIYm%;x9=q_8WaE`9QAQ) z5%!f1!}G^39o_!V3JBlFp2M<9@)Cn@rLxo1ivEQDOuR&+`#qZS*9enQS6FgiD|U%M z5@~(r&+Z{8w%wnOPsa1lPk&=6KD9DxL1QAULJ`dg!^#05%`F>#4$T^pl=j+@zAzOn zHUHA&8!_Y>&MvGU%c-+ZB(;koxPh@i|K_+#~<_mJf@(*+-x zU87?ze=pa!=z}w$-|izdkI#`IB(Je!_*FE%L~M&=v4=0O30Cq&i!Uy2{RECMxmhR2 z2!a0;hfj%L*S}jeMgB0HSgRp|AV$pY>7r$wSrFE20+rfqw z*<*uWOLs^?l}OrHvmiDidN3>~;hd>`yzNBGZ@QCDS?S)9yDWV)i8txRD1N>2FUIC`c<_DKN_z^|D^D`2LA+N{ebtT#xCB6){ zobg^KhYnZ#fL};7*r+`YJ7#FR=;NY(G=a;+4)mk)OcKx z0-B^~&B0SUrWqwwS$|m(v~i6LMkq0opnbIWM#l9{cdECOnfsl*8+&IWeap1YCNSqE zf2p$YAMlI_lf^4ilaHPkkYhX&>vvCeBqIZS(yV&k#%T>F!m)z`)iT5}ElG_f1s^0MJvOltm=n}Y} z3#b`~`K*ko=}4ti71v^28gHKPwjVr0~}FCAn&ju@C3xK85NS zjv4+z`sVt^xyy9r(DUc4FsuvvJ7uHw#+Mv5VJ3ntHFdxs1NYFa{)Kz${$-H*B54@>;H`e810q!-cxl{3KtD*ya z>@QB>RYbsHDLkA$WhzY@UkvV|=7M;iD-c;eu7%-Gdi(Fr*yCp)3k-j@iV8o6Rn(7Fc1Igxf@ zAl-?C02Ex-qB1MNsGP~#O@bJEa-==qGPP4^P`{pv;oAEFs5#lP>ueGA9{P@o^+?lu zeOLdwe)WW`#Tj4XLiIx`JlnjD^f?lON$}l9%Atgr$Daf>xnNWX<0U(0e2J?(`tJrL&}wf z411qn?sf-oTU4>WIoaK<;#_TR)b>@Ya!;E0^yFapAWw=;Vb~>X1JlhnPx(eY&zoOr z1p1$66zJ*j%f+=HMydiKY;?DWz|iF%XHh=!>`eoP_0iu=9o6yAIJ*QdK$fQOFkZ-N zU5fjGN>Q9exq&B_MNd~rHO3v+d#($*o3ixO3T{$5fL(dihWkcJzFpr6T{*YxFRjnMPZWF>I{zsm*7j zIIYH4;Dgb3*2tim-9Kn+es@S&Xpd49eVSA}3pV z@S2h|+ueVaWB-rq*h!Wvr+>f-*c+~TK%W@QEs|gR)gl&vq$P6@Cc<&hdIOw~A=B^Z zbzn|+@0NOJw)*ZFTuN$foc?OzZTGz{KuF>>#jpO9t^w+~kq~`JfKd6$$CRD*eRsqCu5za0U5RRizgdYQE9lb9s6$>njjs-n z8w%6{8xRZhD-=M+i3&CrKU|(7HpZpFCmLkfd^JF~UL;n^^X&R7$5OKeF!}FvgIv@) zoAhdWqq04gk5RJzqBmqKVLJfyt$vT2ohJCi;6zIvyQ%2fYU~#ho-E-EIz{#ye0D1U zy`^x$&%7|GiTT)}e&E%GH;$y$YC%xt=(I^Si>i@15QO~=B2zTS8{6PIE5ob8@HH?& zd&NtO$_%602>~)Ftm1m?aENq<(52$1_3Tsel_yo-8z&ppb(x)!$7$y1q__$`*R#@2 ztLUA1=3T^bySQpa1>gXSbk&J;Nl@c1#oW+x@{3q?jGlz7vPG?NQulWHPuYZrUeAKe zuWDVpoD5Yk5l(s8K|)wr%mw~FURFjeGEbza0@dKE>iuW~Km<%Zc0_Dgb|*bswuY=QHy%Wi4tuX4`?DLd`D31$Wk+mTYzHM38&f{&F28_EGfxRHj+TF#zC!Kn$#!d?rod@fF z)q>fN2rR@I=~{bs-D_hLxC0w>SJ^JIx0|p!*)l*Vad%?qvB0ya7_Lieoum5iOa_K0xj09;>ufcYQ48q&pcMo4 zf4FXKeco-K$oZm$y<1knZ*=x>9TdsSqe_<~2BQuwLOva>D=(Lt2!hEvF|NKip16L* zhjYw!8v8I?k~~U7pZ6a@2=4A=h%7n2_v-Kqg@5unOS!J6jQXVdtjbdEIH3QhSh7R* z)+yLzTQS7#hNCfCjs_Bc1PkaH)G|Nq7bmH$+b z`TrgMU5A1G=UMXU{)LPj?+Hx$AvWeNa1cj>cN)UW_AXOi`rmz!>c48cPs7^Q|I~x` zkOxH&kUKcv%a$jVv7;24~OV8pmj< zy)(oBnkn1<+mmj8US+a-HU+4Pg=^S!cV5G#N>NtdI5id!%S4FZ{A^f z6q|JqUznbR6=5+3TRc`og`4nK`U5a6G5E2uP9g0ycmC3Af3d-^PXluasT9fSFVUur zm{$mdBlsj5qE;ZK;6!ZMy1Z(@fDC+V>e0|vFLqO9nL*F%HUGJh34#!1%&fEfnDMc2 zfb@Bvcgd)DgA9y?Kc4O9G1V`ASl+$nViAvki4roz7kbmdbG3-crKnmJ-lqU$dVCqlYAxH%*B(42l=6~nBEMfk-MV2~r*b_<(jxm?WITp! z^#nMXLs#-I1~~O@Sk&m^9ld7fR}ms9H#x@6YMiZf?H9jIfykj;iAR&VgY1=HvslkC ziR(x+yPs$z6>gDzt^4Rv3+rsz3{O$Zd}{jyBoymE)-w#$=h8Pj6E2pj72wv?67Z{w z%GpTZEZtHSsV@1YkkgU<3SBp&z+!n^W24HPGbK8=8BLX}g_0m)V?8(0y0Fa#EH;l=&GlqF(6;XC?EEwiV_E)i`LfhIbK3ja zfOEF2=C2nnTADtQ`GlrDksH0+93xw*C*A-&~l+rF=ZF6sMilA9B^w!5FIxQRG z(k(vG)-S$IBi3salTKpJ=>|d-%#PAb3t6lYZJmj`?XI$7QJ7LuaLDu#zam_`E* zwHdkYHY8ErP=!!pvAYwreE2>mx@l-EkE|0bzVE$M%k0NF&WtPQT-Q?Pk5`og}dyi0xp_i_O_y4}_J z?Hs)9mTsd8&8;$LFVy~ZI7HVXdw%uYJ0uCAaCAMPCF-YM27?7-H7&kh^T~Vp8W;R!lmpzjH1O6YjA^-pY literal 0 HcmV?d00001 diff --git a/tests/ragger/test_trusted_name.py b/tests/ragger/test_trusted_name.py index ea9e0176e..5f7468a19 100644 --- a/tests/ragger/test_trusted_name.py +++ b/tests/ragger/test_trusted_name.py @@ -1,3 +1,4 @@ +from typing import Optional import pytest from web3 import Web3 @@ -8,7 +9,7 @@ from ragger.navigator.navigation_scenario import NavigateWithScenario import client.response_parser as ResponseParser -from client.client import EthAppClient, StatusWord +from client.client import EthAppClient, StatusWord, TrustedNameType, TrustedNameSource from client.settings import SettingID, settings_toggle @@ -30,13 +31,15 @@ def verbose_fixture(request) -> bool: return request.param -def common(firmware: Firmware, app_client: EthAppClient) -> int: +def common(firmware: Firmware, app_client: EthAppClient, get_challenge: bool = True) -> Optional[int]: if firmware == Firmware.NANOS: pytest.skip("Not supported on LNS") - challenge = app_client.get_challenge() - return ResponseParser.challenge(challenge.data) + if get_challenge: + challenge = app_client.get_challenge() + return ResponseParser.challenge(challenge.data) + return None def test_trusted_name_v1(firmware: Firmware, @@ -195,3 +198,93 @@ def test_trusted_name_v1_name_non_ens(firmware: Firmware, backend: BackendInterf with pytest.raises(ExceptionRAPDU) as e: app_client.provide_trusted_name_v1(ADDR, "ledger.hte", challenge) assert e.value.status == StatusWord.INVALID_DATA + + +def test_trusted_name_v2(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): + app_client = EthAppClient(backend) + challenge = common(firmware, app_client) + + app_client.provide_trusted_name_v2(ADDR, + NAME, + TrustedNameType.ACCOUNT, + TrustedNameSource.ENS, + CHAIN_ID, + challenge=challenge) + + with app_client.sign(BIP32_PATH, + { + "nonce": NONCE, + "gasPrice": Web3.to_wei(GAS_PRICE, "gwei"), + "gas": GAS_LIMIT, + "to": ADDR, + "value": Web3.to_wei(AMOUNT, "ether"), + "chainId": CHAIN_ID + }): + if firmware.is_nano: + end_text = "Accept" + else: + end_text = "Sign" + + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) + + +def test_trusted_name_v2_wrong_chainid(firmware: Firmware, + backend: BackendInterface, + scenario_navigator: NavigateWithScenario, + test_name: str): + app_client = EthAppClient(backend) + challenge = common(firmware, app_client) + + app_client.provide_trusted_name_v2(ADDR, + NAME, + TrustedNameType.ACCOUNT, + TrustedNameSource.ENS, + CHAIN_ID, + challenge=challenge) + + with app_client.sign(BIP32_PATH, + { + "nonce": NONCE, + "gasPrice": Web3.to_wei(GAS_PRICE, "gwei"), + "gas": GAS_LIMIT, + "to": ADDR, + "value": Web3.to_wei(AMOUNT, "ether"), + "chainId": CHAIN_ID + 1, + }): + if firmware.is_nano: + end_text = "Accept" + else: + end_text = "Sign" + + scenario_navigator.review_approve(test_name=test_name, custom_screen_text=end_text) + + +def test_trusted_name_v2_missing_challenge(firmware: Firmware, backend: BackendInterface): + app_client = EthAppClient(backend) + common(firmware, app_client, False) + + with pytest.raises(ExceptionRAPDU) as e: + app_client.provide_trusted_name_v2(ADDR, + NAME, + TrustedNameType.ACCOUNT, + TrustedNameSource.ENS, + CHAIN_ID) + assert e.value.status == StatusWord.INVALID_DATA + + +def test_trusted_name_v2_expired(firmware: Firmware, backend: BackendInterface): + app_client = EthAppClient(backend) + challenge = common(firmware, app_client) + + with pytest.raises(ExceptionRAPDU) as e: + app_client.provide_trusted_name_v2(ADDR, + NAME, + TrustedNameType.ACCOUNT, + TrustedNameSource.ENS, + CHAIN_ID, + challenge=challenge, + not_valid_after=(0, 1, 2)) + assert e.value.status == StatusWord.INVALID_DATA From 0e34ff20239c9d331d4f8411e6da0f0f156c8893 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 18 Sep 2024 18:05:13 +0200 Subject: [PATCH 080/102] EIP-712 trusted name filtering in doc --- doc/ethapp.adoc | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/doc/ethapp.adoc b/doc/ethapp.adoc index bab35c4a8..90bdef47d 100644 --- a/doc/ethapp.adoc +++ b/doc/ethapp.adoc @@ -42,11 +42,12 @@ Application version 1.9.19 - 2022-05-17 - Add trusted names support ### 1.11.0 - - Add EIP-712 amount & date/time filtering + - Add EIP-712 amount-join & date/time filtering - PROVIDE ERC 20 TOKEN INFORMATION & PROVIDE NFT INFORMATION now send back the index where the asset has been stored ### 1.12.0 - Add EIP-712 discarded filter path support + - Add EIP-712 trusted name filtering ## About @@ -858,6 +859,7 @@ The signature is computed on : ##### Amount-join value This command should come before the corresponding *SEND STRUCT IMPLEMENTATION* and are only usable for message fields (and not domain ones). +The first byte is used so that a signature of one type cannot be valid as another type. A token index of 0xFF indicates the token address is in the _verifyingContract_ field of the EIP712Domain so the app won't receive an amount-join token filtering APDU. This enables support for Permit (ERC-2612) messages. @@ -868,11 +870,21 @@ The signature is computed on : ##### Date / Time This command should come before the corresponding *SEND STRUCT IMPLEMENTATION* and are only usable for message fields (and not domain ones). +The first byte is used so that a signature of one type cannot be valid as another type. The signature is computed on : 33 || chain ID (BE) || contract address || schema hash || field path || display name +##### Trusted name + +This command should come right after the implementation of the domain has been sent with *SEND STRUCT IMPLEMENTATION*, just before sending the message implementation. +The first byte is used so that a signature of one type cannot be valid as another type. + +The signature is computed on : + +44 || chain ID (BE) || contract address || schema hash || field path || display name || name types || name sources + ##### Show raw field This command should come before the corresponding *SEND STRUCT IMPLEMENTATION* and are only usable for message fields (and not domain ones). @@ -897,6 +909,8 @@ _Command_ 0F : message info + FB : trusted name + FC : date/time FD : amount-join token @@ -922,7 +936,6 @@ None | Path | variable |========================================== - ##### If P2 == message info [width="80%"] @@ -935,6 +948,21 @@ None | Signature | variable |========================================== +##### If P2 == trusted name + +[width="80%"] +|========================================== +| *Description* | *Length (byte)* +| Display name length | 1 +| Display name | variable +| Name types count | 1 +| Name types | variable +| Name sources count | 1 +| Name sources | variable +| Signature length | 1 +| Signature | variable +|========================================== + ##### If P2 == date / time [width="80%"] From be78e6fe20731bdfc4f58c8ef0471d1cb6858bf8 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 20 Sep 2024 11:55:54 +0200 Subject: [PATCH 081/102] EIP-712 trusted name filtering support --- src_features/signMessageEIP712/commands_712.c | 6 + src_features/signMessageEIP712/filtering.c | 123 +++++++++++++++++- src_features/signMessageEIP712/filtering.h | 1 + src_features/signMessageEIP712/ui_logic.c | 64 ++++++++- src_features/signMessageEIP712/ui_logic.h | 10 +- 5 files changed, 198 insertions(+), 6 deletions(-) diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index 05438e6c9..174e6ed5e 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -29,6 +29,7 @@ #define P2_FILT_ACTIVATE 0x00 #define P2_FILT_DISCARDED_PATH 0x01 #define P2_FILT_MESSAGE_INFO 0x0F +#define P2_FILT_CONTRACT_NAME 0xFB #define P2_FILT_DATE_TIME 0xFC #define P2_FILT_AMOUNT_JOIN_TOKEN 0xFD #define P2_FILT_AMOUNT_JOIN_VALUE 0xFE @@ -198,6 +199,11 @@ uint16_t handle_eip712_filtering(uint8_t p1, reply_apdu = false; } break; +#ifdef HAVE_TRUSTED_NAME + case P2_FILT_CONTRACT_NAME: + ret = filtering_trusted_name(cdata, length, p1 == 1); + break; +#endif case P2_FILT_DATE_TIME: ret = filtering_date_time(cdata, length, p1 == 1); break; diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index 2a41cd5a8..c0274252a 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -15,11 +15,13 @@ #ifdef HAVE_LEDGER_PKI #include "os_pki.h" #endif +#include "trusted_name.h" #define FILT_MAGIC_MESSAGE_INFO 183 #define FILT_MAGIC_AMOUNT_JOIN_TOKEN 11 #define FILT_MAGIC_AMOUNT_JOIN_VALUE 22 #define FILT_MAGIC_DATETIME 33 +#define FILT_MAGIC_TRUSTED_NAME 44 #define FILT_MAGIC_RAW_FIELD 72 #define TOKEN_IDX_ADDR_IN_DOMAIN 0xff @@ -319,6 +321,119 @@ bool filtering_discarded_path(const uint8_t *payload, uint8_t length) { return true; } +#ifdef HAVE_TRUSTED_NAME +/** + * Command to display a field as a trusted name + * + * @param[in] payload the payload to parse + * @param[in] length the payload length + * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @return whether it was successful or not + */ +bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discarded) { + uint8_t name_len; + const char *name; + uint8_t types_count; + e_name_type *types; + uint8_t sources_count; + e_name_source *sources; + uint8_t sig_len; + const uint8_t *sig; + uint8_t offset = 0; + + if (path_get_root_type() != ROOT_MESSAGE) { + apdu_response_code = APDU_RESPONSE_CONDITION_NOT_SATISFIED; + return false; + } + + // Parsing + if ((offset + sizeof(name_len)) > length) { + return false; + } + name_len = payload[offset++]; + if ((offset + name_len) > length) { + return false; + } + name = (char *) &payload[offset]; + offset += name_len; + if ((offset + sizeof(types_count)) > length) { + return false; + } + types_count = payload[offset++]; + if ((offset + types_count) > length) { + return false; + } + types = (e_name_type *) &payload[offset]; + // sanity check + for (int i = 0; i < types_count; ++i) { + switch (types[i]) { + case TYPE_ACCOUNT: + case TYPE_CONTRACT: + break; + default: + return false; + } + } + offset += types_count; + if ((offset + sizeof(sources_count)) > length) { + return false; + } + sources_count = payload[offset++]; + if ((offset + sources_count) > length) { + return false; + } + sources = (e_name_source *) &payload[offset]; + // sanity check + for (int i = 0; i < sources_count; ++i) { + switch (sources[i]) { + case SOURCE_LAB: + case SOURCE_CAL: + case SOURCE_ENS: + case SOURCE_UD: + case SOURCE_FN: + case SOURCE_DNS: + break; + default: + return false; + } + } + offset += sources_count; + // + if ((offset + sizeof(sig_len)) > length) { + return false; + } + sig_len = payload[offset++]; + if ((offset + sig_len) != length) { + return false; + } + sig = &payload[offset]; + + // Verification + cx_sha256_t hash_ctx; + if (!sig_verif_start(&hash_ctx, FILT_MAGIC_TRUSTED_NAME)) { + return false; + } + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); + hash_nbytes(types, types_count, (cx_hash_t *) &hash_ctx); + hash_nbytes(sources, sources_count, (cx_hash_t *) &hash_ctx); + if (!sig_verif_end(&hash_ctx, sig, sig_len)) { + return false; + } + + // Handling + if (!check_typename("address")) { + return false; + } + if (name_len > 0) { // don't substitute for an empty name + ui_712_set_title(name, name_len); + } + ui_712_flag_field(true, name_len > 0, false, false, true); + ui_712_set_trusted_name_requirements(types_count, types); + return true; +} +#endif // HAVE_TRUSTED_NAME + /** * Command to display a field as a date-time * @@ -376,7 +491,7 @@ bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded) if (name_len > 0) { // don't substitute for an empty name ui_712_set_title(name, name_len); } - ui_712_flag_field(true, name_len > 0, false, true); + ui_712_flag_field(true, name_len > 0, false, true, false); return true; } @@ -428,7 +543,7 @@ bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool di if (!check_typename("address") || !check_token_index(token_idx)) { return false; } - ui_712_flag_field(false, false, true, false); + ui_712_flag_field(false, false, true, false, false); ui_712_token_join_prepare_addr_check(token_idx); return true; } @@ -509,7 +624,7 @@ bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool di if (!check_typename("uint") || !check_token_index(token_idx)) { return false; } - ui_712_flag_field(false, false, true, false); + ui_712_flag_field(false, false, true, false, false); ui_712_token_join_prepare_amount(token_idx, name, name_len); return true; } @@ -569,7 +684,7 @@ bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded) if (name_len > 0) { // don't substitute for an empty name ui_712_set_title(name, name_len); } - ui_712_flag_field(true, name_len > 0, false, false); + ui_712_flag_field(true, name_len > 0, false, false, false); } return true; } diff --git a/src_features/signMessageEIP712/filtering.h b/src_features/signMessageEIP712/filtering.h index 8143edfb1..9d41df16a 100644 --- a/src_features/signMessageEIP712/filtering.h +++ b/src_features/signMessageEIP712/filtering.h @@ -9,6 +9,7 @@ #define MAX_FILTERS 50 bool filtering_message_info(const uint8_t *payload, uint8_t length); +bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discarded); bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded); bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool discarded); bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool discarded); diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 1914506db..07376c311 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -19,6 +19,7 @@ #include "common_ui.h" #include "uint_common.h" #include "filtering.h" +#include "trusted_name.h" #define AMOUNT_JOIN_FLAG_TOKEN (1 << 0) #define AMOUNT_JOIN_FLAG_VALUE (1 << 1) @@ -42,6 +43,7 @@ typedef enum { #define UI_712_FIELD_NAME_PROVIDED (1 << 1) #define UI_712_AMOUNT_JOIN (1 << 2) #define UI_712_DATETIME (1 << 3) +#define UI_712_TRUSTED_NAME (1 << 4) typedef struct { s_amount_join joins[MAX_ASSETS]; @@ -61,6 +63,9 @@ typedef struct { uint32_t filters_crc[MAX_FILTERS]; uint8_t discarded_path_length; char discarded_path[255]; +#ifdef HAVE_TRUSTED_NAME + e_name_type name_types; +#endif #ifdef SCREEN_SIZE_WALLET char ui_pairs_buffer[(SHARED_CTX_FIELD_1_SIZE + SHARED_CTX_FIELD_2_SIZE) * 2]; #endif @@ -491,6 +496,37 @@ static bool update_amount_join(const uint8_t *data, uint8_t length) { return true; } +#ifdef HAVE_TRUSTED_NAME +/** + * Try to substitute given address by a matching contract name + * + * Fallback on showing the address if no match is found. + * + * @param[in] data the data that needs formatting + * @param[in] length its length + * @return whether it was successful or not + */ +static bool ui_712_format_trusted_name(const uint8_t *data, uint8_t length) { + uint8_t types_count = 0; + e_name_type types[8]; + uint8_t types_bak = ui_ctx->name_types; + + if (length != ADDRESS_LENGTH) { + return false; + } + for (int i = 0; types_bak > 0; ++i) { + if (types_bak & 1) { + types[types_count++] = i; + } + types_bak >>= 1; + } + if (has_trusted_name(types_count, types, &eip712_context->chain_id, data)) { + strlcpy(strings.tmp.tmp, g_trusted_name, sizeof(strings.tmp.tmp)); + } + return true; +} +#endif + /** * Format given data as a human-readable date/time representation * @@ -606,6 +642,14 @@ bool ui_712_feed_to_display(const void *field_ptr, } } +#ifdef HAVE_TRUSTED_NAME + if (ui_ctx->field_flags & UI_712_TRUSTED_NAME) { + if (!ui_712_format_trusted_name(data, length)) { + return false; + } + } +#endif + // Check if this field is supposed to be displayed if (last && ui_712_field_shown()) { ui_712_redraw_generic_step(); @@ -682,8 +726,13 @@ unsigned int ui_712_reject() { * @param[in] name_provided if a substitution name has been provided * @param[in] token_join if this field is part of a token join * @param[in] datetime if this field should be shown and formatted as a date/time + * @param[in] trusted_name if this field should be shown as a trusted contract name */ -void ui_712_flag_field(bool show, bool name_provided, bool token_join, bool datetime) { +void ui_712_flag_field(bool show, + bool name_provided, + bool token_join, + bool datetime, + bool trusted_name) { if (show) { ui_ctx->field_flags |= UI_712_FIELD_SHOWN; } @@ -696,6 +745,9 @@ void ui_712_flag_field(bool show, bool name_provided, bool token_join, bool date if (datetime) { ui_ctx->field_flags |= UI_712_DATETIME; } + if (trusted_name) { + ui_ctx->field_flags |= UI_712_TRUSTED_NAME; + } } /** @@ -841,6 +893,16 @@ const char *ui_712_get_discarded_path(uint8_t *length) { return ui_ctx->discarded_path; } +#ifdef HAVE_TRUSTED_NAME +void ui_712_set_trusted_name_requirements(uint8_t types_count, const e_name_type *types) { + // pack into one byte to save on space + ui_ctx->name_types = 0; + for (int i = 0; i < types_count; ++i) { + ui_ctx->name_types |= (1 << types[i]); + } +} +#endif + #ifdef SCREEN_SIZE_WALLET /* * Get UI pairs buffer diff --git a/src_features/signMessageEIP712/ui_logic.h b/src_features/signMessageEIP712/ui_logic.h index d04c8db10..2ee134e7a 100644 --- a/src_features/signMessageEIP712/ui_logic.h +++ b/src_features/signMessageEIP712/ui_logic.h @@ -6,6 +6,7 @@ #include #include "ux.h" #include "uint256.h" +#include "trusted_name.h" typedef enum { EIP712_FILTERING_BASIC, EIP712_FILTERING_FULL } e_eip712_filtering_mode; typedef enum { @@ -30,7 +31,11 @@ void ui_712_set_title(const char *str, size_t length); void ui_712_set_value(const char *str, size_t length); void ui_712_message_hash(void); void ui_712_redraw_generic_step(void); -void ui_712_flag_field(bool show, bool name_provided, bool token_join, bool datetime); +void ui_712_flag_field(bool show, + bool name_provided, + bool token_join, + bool datetime, + bool contract_name); void ui_712_field_flags_reset(void); void ui_712_finalize_field(void); void ui_712_set_filtering_mode(e_eip712_filtering_mode mode); @@ -46,6 +51,9 @@ bool ui_712_show_raw_key(const void *field_ptr); bool ui_712_push_new_filter_path(void); void ui_712_set_discarded_path(const char *path, uint8_t length); const char *ui_712_get_discarded_path(uint8_t *length); +#ifdef HAVE_TRUSTED_NAME +void ui_712_set_trusted_name_requirements(uint8_t types_count, const e_name_type *types); +#endif #ifdef SCREEN_SIZE_WALLET char *get_ui_pairs_buffer(size_t *size); #endif From a2b004f64ad89abe641d6fcd78444677ac3676c7 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 20 Sep 2024 14:16:58 +0200 Subject: [PATCH 082/102] EIP-712 trusted name filtering support in python client --- .../src/ledger_app_clients/ethereum/client.py | 12 +++++++++ .../ethereum/command_builder.py | 23 +++++++++++++++++ .../ethereum/eip712/InputData.py | 25 +++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/client/src/ledger_app_clients/ethereum/client.py b/client/src/ledger_app_clients/ethereum/client.py index 3f95c82c2..9b6a4de89 100644 --- a/client/src/ledger_app_clients/ethereum/client.py +++ b/client/src/ledger_app_clients/ethereum/client.py @@ -189,6 +189,18 @@ def eip712_filtering_amount_join_value(self, token_idx: int, name: str, sig: byt def eip712_filtering_datetime(self, name: str, sig: bytes, discarded: bool): return self._exchange_async(self._cmd_builder.eip712_filtering_datetime(name, sig, discarded)) + def eip712_filtering_trusted_name(self, + name: str, + name_type: list[int], + name_source: list[int], + sig: bytes, + discarded: bool): + return self._exchange_async(self._cmd_builder.eip712_filtering_trusted_name(name, + name_type, + name_source, + sig, + discarded)) + def eip712_filtering_raw(self, name: str, sig: bytes, discarded: bool): return self._exchange_async(self._cmd_builder.eip712_filtering_raw(name, sig, discarded)) diff --git a/client/src/ledger_app_clients/ethereum/command_builder.py b/client/src/ledger_app_clients/ethereum/command_builder.py index 67399448a..ee59fb12e 100644 --- a/client/src/ledger_app_clients/ethereum/command_builder.py +++ b/client/src/ledger_app_clients/ethereum/command_builder.py @@ -43,6 +43,7 @@ class P2Type(IntEnum): FILTERING_ACTIVATE = 0x00 FILTERING_DISCARDED_PATH = 0x01 FILTERING_MESSAGE_INFO = 0x0f + FILTERING_TRUSTED_NAME = 0xfb FILTERING_DATETIME = 0xfc FILTERING_TOKEN_ADDR_CHECK = 0xfd FILTERING_AMOUNT_FIELD = 0xfe @@ -214,6 +215,28 @@ def eip712_filtering_datetime(self, name: str, sig: bytes, discarded: bool) -> b P2Type.FILTERING_DATETIME, self._eip712_filtering_send_name(name, sig)) + def eip712_filtering_trusted_name(self, + name: str, + name_types: list[int], + name_sources: list[int], + sig: bytes, + discarded: bool) -> bytes: + data = bytearray() + data.append(len(name)) + data += name.encode() + data.append(len(name_types)) + for t in name_types: + data.append(t) + data.append(len(name_sources)) + for s in name_sources: + data.append(s) + data.append(len(sig)) + data += sig + return self._serialize(InsType.EIP712_SEND_FILTERING, + int(discarded), + P2Type.FILTERING_TRUSTED_NAME, + data) + def eip712_filtering_raw(self, name: str, sig: bytes, discarded: bool) -> bytes: return self._serialize(InsType.EIP712_SEND_FILTERING, int(discarded), diff --git a/client/src/ledger_app_clients/ethereum/eip712/InputData.py b/client/src/ledger_app_clients/ethereum/eip712/InputData.py index 43f88f3af..c83e37ef9 100644 --- a/client/src/ledger_app_clients/ethereum/eip712/InputData.py +++ b/client/src/ledger_app_clients/ethereum/eip712/InputData.py @@ -227,6 +227,12 @@ def send_filter(path: str, discarded: bool): discarded) elif filtering_paths[path]["type"] == "datetime": send_filtering_datetime(path, filtering_paths[path]["name"], discarded) + elif filtering_paths[path]["type"] == "trusted_name": + send_filtering_trusted_name(path, + filtering_paths[path]["name"], + filtering_paths[path]["tn_type"], + filtering_paths[path]["tn_source"], + discarded) elif filtering_paths[path]["type"] == "raw": send_filtering_raw(path, filtering_paths[path]["name"], discarded) else: @@ -358,6 +364,25 @@ def send_filtering_datetime(path: str, display_name: str, discarded: bool): pass +def send_filtering_trusted_name(path: str, + display_name: str, + name_type: list[int], + name_source: list[int], + discarded: bool): + global sig_ctx + + to_sign = start_signature_payload(sig_ctx, 44) + to_sign += path.encode() + to_sign += display_name.encode() + for t in name_type: + to_sign.append(t) + for s in name_source: + to_sign.append(s) + sig = keychain.sign_data(keychain.Key.CAL, to_sign) + with app_client.eip712_filtering_trusted_name(display_name, name_type, name_source, sig, discarded): + pass + + # ledgerjs doesn't actually sign anything, and instead uses already pre-computed signatures def send_filtering_raw(path: str, display_name: str, discarded: bool): global sig_ctx From b79c4cc27f5da441c166f36d5ffca81fea06c6a2 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 19 Sep 2024 13:56:07 +0200 Subject: [PATCH 083/102] EIP-712 trusted name filtering ragger test --- .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11441 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11441 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 10584 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11441 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 10584 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11689 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11689 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 8943 bytes .../00001.png | Bin 0 -> 11689 bytes .../00002.png | Bin 0 -> 9417 bytes .../00003.png | Bin 0 -> 6132 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 403 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 403 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 403 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 408 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 403 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 472 bytes .../00001.png | Bin 0 -> 454 bytes .../00002.png | Bin 0 -> 439 bytes .../00003.png | Bin 0 -> 325 bytes .../00004.png | Bin 0 -> 364 bytes .../00005.png | Bin 0 -> 381 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10483 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10483 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 9691 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10483 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 9691 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10677 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10677 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes .../00000.png | Bin 0 -> 8642 bytes .../00001.png | Bin 0 -> 10677 bytes .../00002.png | Bin 0 -> 8645 bytes .../00003.png | Bin 0 -> 5988 bytes tests/ragger/test_eip712.py | 111 +++++++++++++++++- 161 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00003.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00005.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png create mode 100644 tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00005.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png create mode 100644 tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00005.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00003.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png create mode 100644 tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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%0A{H= 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 P{MIzUh7&B0Q3>ki1Y|rO=uNxDB3r zw%oyNAKQlGyQ*Yl1vUcJ8v3hAf>teEtYJQrR3Qp*Fv>qmn}exMi9YW>UY{{mEr-x+ zK68y{GN}0u9i1(TjI$a@+;Mpj6z8Y1I^MbRS9&2E5}e7sDX(M6%JTKTMus*tB8zY5 z9+&n|5WFwHXZ`lP``SE4UCBp)-mQ1qw_ZRDe zosm6asp2sm$SuBkcbBQP*}%GHaQ%XoETSS$8gKwo%iP?$L5!3@17}^}_?X4NiC}Wb aZCco(-Pn~Z3>-xU8R#47mEN*@`M&@X>v5z2 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 zcmeHtXH=72mv$%uieLj#KtKgVsY2*Q5CH*EIwTNKk={fIy(wZr0YwdvNS79>gn$s5 zAfSd2q=gou4@zhuLI@FJU~b=e*05=2m}(cynM+X1mgM%0&%+va04Tn{lyj_knA(dOD2xduW4jjZgI!%X4t%5hfuxT z^}Vj#h_08(ayoK;du_Q9GIGXy?eD$(x@%HPP{rF^3b~*|C#4wrh^ooF?tAv34s6q- z76Afv|L(*Jfy#J z>$SP~5j)`ebLvF*RMPR?bkRdY2Lo!pJivNHJ>Bg~^ZP6L(w)A08aon-rwUI#uXy_v z7=;S>fexl=`2}^Yd%ZutE3{Vt5YKtN-|JVMAukO4l*|Vz`p2933L@g6vVt`%U#!>o;;5qZ*LV(e-HM_T}r91fVtiGm|1nR;VjwbKXtiuMhoBWBf%L4 zNx5GRPaVJPTm4AOuiDgmV_o!n^Rq!$F|PD60ixgV@v75>Z{^<}x6w1@o+^B+{_4wN zB+AB4y& z1NvNlm;sStKx8H0*UjuCg&(5P?xc2d$Y$zE2n4ZofCPt;V9jdJ=3?8I!h0BPYWqpb zL2+<3wy*oH}g5$r)m#xzBEI2VOQu-drTi~NXaoy_GY%^D7}I0|W_>)6N& zC49s!3%gNl9vYn`YnSkA)chZzU}9A`SHdM7Pf6e}#n z@Q&gN@g>`~NdEX^j9|S2Vt_?JC~GkSohJc7$XOO=x{8?9gbjh`1#&EAx8iua)#4`& zBYviNL(pW$b{81Q=}Zza??mJ`upnjkQ7&pJpm8I?vomZ-auuU`DyZV|=?pK}%6pE_ zK>CNUnbv`=_z*+qd}`%v9IRJOJD<8Wx3-`s+UhaYy<@aAFO2y~WwZna`Zzq^YA4R@ zfgiyxze(CU`aLG(aZ0w$H5mOKosE8OcVRu`hy^XUl|rxiF)FtLHLfulIrNSkf{=XM z7$W4cwiZ2s+uv#6&+n=8Lh`&IBYFRHH?&D)sCk+Y-`pCjH{HJ9kDX@FgtX8~980^wd@pL)xK=yrmi_ z%7MSmukuQc(jndX?&C=xlm_^S1guHu*}{U|#KW=q+JyzL4GROEKt#r1(jtRsa7dY} z=Cu6&9-WLiosb8EZUyK4k!Ai+>w(ds*q5yy-7|t1alh4jE%-3Wa)0suFq&Ra`)~j` zKc12~_bU>(-_28E)8m32n=0@Agbv`~GK+H2Ufj@N3+!vaxW8v>Jnd9%1vkcBq{Dd! zWE}WC;d+3Huve|HDHo!9edj*wE2DS^Syy|`OjVr!xYDdwW#xzJl+&zl2>)Si&U&0(GsXCQB} zX#uNr{I!={VuRr`hnDT1JRvw06rcnbd|50RBBNL#wnZP2tQB6P$POq+8Wy?*)?uNW zs5pvZp{I%$qR6?tf_BlR10}jOW!?7lF?4U>2jl7h( zf5fM6_M=6@cWl^%?r8<_ND zQfil>`_#rnyjAH>;pB^r)jI0}Id#znQtWGIHKKd7Bccq;X>U#>eS2zfQ!}7UoZ|_n ze`tVwY8pMzYECx4Em^LR=F@N4ALdA(Gh$)$lCJ5q&2W#8Ta_pbCtR%~RY97qvM%j% z8Zh^NOsef?a*^g133r*Chht0FfvER8YciX#V==sv{d;?CJEOcIQo{VA@#rJ%KfX)0 z-NdMw*}dem7SHIs-6#DP3DpaYZT%v|-#E|ikm`IU`&f79qL9kMNPov}Ow%imRXdSN zrNM?P={mNVsPa0_#|aDj9AcAv^$0r_GdkG%C_&6zii=7IdpzuUA3y%v)yeA?GDbVv zto@6se)`a;6{?zn+AW^uijQaUHOq^mS zKeK+$sECg&(*IT}2;EWG{@Xk#KWS6^gL9&abwZUByVy;4z_~CR(EYQ2!g!lN0);LP zbuOXg?a;d$U6}U)^$84vu>_9;Q?=Ny-jGNgNu+W#kMr-Xt@F$01Ki)~CB;)*;u@!E zP-~-|?%btEns}K_hqg}TJrShzm(C^!7gVDXROX3-e*HQE+lMtfIqhxJx!$>Q9|&{T zXaCan@Els6CdDU7NkoS)4l5Y>((}saXt7{e)ldP>OTCE#C8#4zTJdVG)A4l(kr*BciO;5BD?OYC&B6! z_TkS|O*WqU47e1Pof!N(f%r*WSrM6Pkasn-6r;Z0oxAy{GORppLjMyd_-rBJ8k8La zadHZbpUBNEr9U8n*=d)3t~N%udw5d$`YPRTP?wc$s7ACI;f^#ht8Gs8^>d4r7r}moRyCQoNVYGh8dVWR z0~ldu)BZUr-DZRb2~N%yB$>xxrC!v+7N8B0_XFbsgnjAaxz75d^A6aQ8NHuHN5Niv z=r+lH6iq*Zfka^WUpc3*U*#TSYGH*Nb8q$5-q6RM%SiC#bJsad%oW#6t={$*#ot8L zmnPS?n=S=+kVBS&0e6eZ*Vb<()&6Xjx3*UeGb$)ih>dD^v&B7CU5oZmWU1rnir1p-$>lPf7uYzyGldLGacLA| zM&g*cDqcVTIIBN)UKO8(s&7wr4tS;i0!e6EhOOil5vdMjrt=^bQ+v)zV1ddwZf2+4 ztt5zgGRbN^Iz*&mm{j6e@}un3r*rR^Sq?oLv}Gfy%#lUMX$wu))h#+sMx&4!D5TGw z*+smd(37&aY1*XJNNsevn)1@-fP}N*uXBnT?!aZMx#ex}9>~;`-12;d;@rwj~~q)zW5_*UzZ~zHcy?n#3W& z3iQ&QmK-KQ9wWFZe=cIav1*#r#QVu;z5CEN9;AQS&DraA+IcAaXh@2Z=f|k_>E((^ zKB0+(@2RIhG@*3Lya!d@OyM2Hf=L;Hla}KKY`MT?H z2jfuW>d}bSK?;tzl>bXsBU{z@+8)+wO?*AEnaNHmi3>8uu)(DkEt zZiawPrk*L}x^nGuSNh2tVgO-s0 z>9cSyc!iBj2ll&r;Ht0ps}r*SYUVCiY0m^_1jXiW(?4CeMiW1G>s$XTr_Z^HmmZ_VTd@BM4g^jpx+p z6dB6EH`yt5i|7_{Fcenj!hA?)hsRrk>S4SaNHltTXU92--{dxqJg!W18>BK=tmc5f zbP9-pV*J)@EKTCGdW|G6m~Y>`uZf*vX5ZL5bpi4GM*)&fhXhZNam9%k>%)4;A>IWc zkszaIlRNcfcCNI2%3#AvY&*icQm;KGUyRq}*n<}{kyYq(K-kv?=no3(TKPy$uvDf6 zm6CWLf~e#_(QlU;3JV)I3=WxLan$y^;f5+x$0&9pa5%=nLKUx$>Dpdcgl!rS4c?g9 zxvPjVqa^#$d(8|hVm;U$b&;>fMZv+^&zGBK2`a>JYpp#dKp_Rdok>FN@@6)jo!Reo zTU(!vI?Vh2e%w?)EfN#j)?!t_GXdW)AUc$eWnKaZf;9u8bf$&N8ei1&562LgD7ZBu za&@kaCZDm)1S&s5te?%FI->)PzA?SKv$M0c<)2_BG;*wIlFNrYqJ$TIn36CDa4KYi zl<>pa5*Ne|w^Hm1doB7()^~ElHwVqRXq?c{U>Qm$t#~M5^v`jtrk!#ker~wp*?3NH z-5`mD`}yO}7te1e`omz_X{R_ac5M6jzMlxNP2i8w16qXEawn(U0x+6m68ig2OT{fE z{CczjQq&EH|B>YlsTo+JE8!iVSP)Cf@dqCiwVv^Bs@2H|H<0pQPG*EHuIRXh{H4~( z81Im&8lwqLbQWEZI>5LWs^vLDXF*TxKW6E->J_NbEgKi$EA?<>@m3PERy2@*Xr^xb zlxAGK8&XHI#PSlJG2@>6AR|>bTzvDKpjgAQSvmHi5Y%bIJmeA?Zx7t2q3X$&S`>Aw z;6l=9(hFJL0wPBdVwts|`n7|uz1);fE%k3TR_vdN3mA+XjiqYXjL2HfiZA#jD*Gv8 z#9xiwkmgz%>IuOyMXIwray|`V7~CLftnpcS8XQHiPic~LZGTFQ;aF#^ zdB7TagraNYp0L(S%dumq`>hEM@IA}Wfh*D&%MCeLU1MhN!qR^2q88TZ%=}t(d>~n6 z9()&3LJEKO#QQwQ@_I|p<6!^sc-r0R_)XKL!Hl`;J1=a>!ONI8t9#u>lEm#b61F{i z=Cd{r=Eh|ZfMvp7tL=xInm`Z_drV5vOMV80am;#k9%wl7iLZrQzi&APV`UtdPx1`` zxT;p}sg-=Dx`_dCgmW+!QNNoNPQ0Ma%Gb*%@d?*LrQjRD63?#TidE z{Oap4AV!HL3=x-*-gZZ@Zf}IPARnvX%^5+^nPEfSdwI^r!OJ2aD!{= zLeqe2V`$Q9oI^O>|HYDMd8-FND#>HTudm+`l!Ahyc-bxQ)i{qvqvKC6bxc>8oQ`cyU-Y%f85S>=?b;qqMaNM5(Jdz5pN z_|SY#b3sADcmPuO#Qk>DkQb2PY8%C(6Pf+bgNJlgw?2oCx=AoNM`hVxnv>h zCNMTLE2UmnO9G7EeRp*D1tKWz{ECQdk{Fu*uAea{Da_B9j&gG9pZoIKswPnCl$lMx zS6R)HK=m%0!wDWQ8S`W2Q&_Z!@0IFRT6du->-XcJb20gol3_ZM0n)mbSvhM{7@jzq z%f1(~Tie@uQkmKKA3)h7%>Qcex47W!IiI+=tg2zFoF-YUk-1?EK0_ug%d~t>tHoX5ra*GrZr*cuU%f|7uLWE@~4e;nFI9 zr<+?TbXE0jm&t5^5VQrLb0z&}Us;Vb!i8l>a8xF#V^EvAa9%M7U~7N7zSGG-*-ZrX zAH$SKE?vDIj3@B@rI5Bw)I|4*bFZ#Y0544!i9ltZG^@VjlJ`w@<;vsT3dT88nbTl`9%f zg8SyFn39VflMYlAdBHnNPrf6lYc2@w7F(q!OtlzQO^dmH%|J}b<${(Ly zXj+|&>zF@)ab*n7qjY3mAeRH0ry=$eD;eD%ER9E~qlG6QP7=0m>oo4%`t{?^d4AHB zvBCrKhq=W^9FABnw_JZ$ z=U9%#V#0n?h39eOcjtb|cD|8|-JxDjgPn9IH!LZz%qUOz8g@S`QL!zQ~WKt z*xoz<`llK@7sK6oriKDXDa)eak`(tc@DQc0H$*lh;<|k9rz!BtN#H;-X?~<26BDmc@PK= zAnYR#zD@OlK%-y&P5bSCwy*S0yH7L~E1=O(oJg0_jvEg2%b2u`WrmU9h5*D0&2p(k z2Xs=hy%%+^=2JW9*BT(k!oZzo@9Z=gEVr&MMga8nX-_%4`YRxFxvOM@Z7f0#K6@Z9 ztW<+W1L5;R($3Q$q*~R0$-$>8Bnbd3GDtt}K-Npws%%sGp1PC9zCfH_O?tRHjj>oP zTBJl<7?H6KAewGCS#AFrg;jmOUwzyHegg^u_n>%Fgg1pkIY<7}GYPu#gTzWe=C8dM z@Kdrf+x&LhcGo8Bjb`DKVue3FG7=o%{aWi>MN+qW7zQLbe`vqs&JT{ak(<-2Smz7H z7ra_OgZ5{aEgs2vX@u)mYg9eRYeK68+n`?Eq_7wUb;>{kipd=&d0;jJVEUmhK=_Nz zH6Y?tN*P z@narqjcNV?t-H%iblj!rd@-}<)EIAwyk)U7@N@@-u8KO#7jy=%u5qtKVLhQ!VISw~ zTJ(m2ssK08si0z}kRChnM*2@!vhVARkMPTv6Kluig*847j9fcYMrUK4HXP>pa7dk5 z@*rbtwBShX@+>`yAqR|}%j`Gp1S?DA9MJR|_*gxlm*F5{hVX7pK~5S1ZM!8TJpALQ zt$61YPmiWM`zJCWZx~xal!5&*D1V$+ii|hITn17i{Enhy1Inp>OT{8LT#w<=T zt$P?7(iJ&SpHW=VWF^@jCK=T(siqim_~ssygFrV?Lj{g)R>IdkAcv6L8^)4pIhxyN zBZYJJ1BzIajl*|ptg3Lq^EWpqG$$Ya6q?BJ@J2&kCs!UE%CS54AlCkkLRus)FRd5< z!ycvdiD5w2yHT+D(J10}SLDVyPR|KfKCblC3dnlDdPwW@0Wa^efJXb!5d zyGMuxI|WszYWXQqBlH%*f4JSiYP~DKy~#LQ`KN}^44K|J%+usG9~~ah3bYWXfyN>^ zv9q}otY)}v;&o?xC15i}3w0uZhio4Y!U@q88o^>u5qC2t-jesJ4gfs)@G^?4!wh+O)z@CGY2p!4M zMk}n|yOy-&)>zdBB{qYaIj2+O5CbX!9OL`ObEQ^O{vql@z{J#W|M~wp3he5l&P6{2t~^@&zOqf5i@6WPo_?pF=~pV zDJ7oDjFglb#^Fm;Py#{)1`!buND&1*?br5o?LS~&``SPC`~=U#`|_-{?sea5tzR$u zdFyU?{#e#_afhhLrW z6$$^FbojWTW^2U7cY`D_-0-a~W|D3(0fKcxJU6@7V79IB{cU^0QZE9xlPLL_u2t5iYk|VStNw2^Hwz5)-v<+P0ER! zz4>uG;HkNl%*N3;+nS83Gt2Yy^J+Dy_BXh-p)QitF-i)n=N$KQkDN@v74I*E?Ad z|MGNM-07+$?8JE1rWe&}b)Nq>jJzOrv1yRY3wEs-R@ z2+ds%Bp|h_>x^`ZsYmFXK*1H}?09KMM+f`lQ@Ext*-y}CL%z1I>lyHI#M?x-I1-Oo z8%e$ssOgIe#so>C|BODZqRU5+mrN_hX{Ru>!Iu{oed>i&63Iv5R??s>b1(?09=_Fm z1TH%;W>wH^S2NrUOS@@XqsXy{l$WE9&0a-_v zJ0kJb26>LPyc+Dzk*-OzHRU|dTj936vIfVygwj=+stW}Fb?$AYN*=3tOeT|4Shn`0 z-PSJ8d`r#lP1!M2TrQW<5sB0--CpRC++SN5m;F6uv7U}|vOJnikFPZ`HZCIEAjs+c zP*`cc5~As=m*7n?LUL1J&qvVW6zimiOv>Wfdg1$cOT6&cahi%dtqrOd{^Cw89RIE` z@v&ESPR@!-F7QR`gEs%|518NNAZ+sqkG8JJ{&PwoV(lAQOJ`nKx_F8mQILn}oA0|2 zLho5!t}K;?#%h00d5QsFU5IID zU^c|5_XYr*Kt$tM?T`P>5h@hjFl8>XVw_U#PDN7-XR%mp7@%C+QZ|X z!+1%yfw9@gD2pklt1h9bA`82`)$0dik?(8#(Ce)~6u9rbVOvvcS+J;7D%%8&2TKNo z%u4RvJ3o+*AP#jttmmVfnZqk(#RA%<7i|w{uI6~3-Zr8Thkm*kn7?88sxw&({3jt&;R9gkWR{p~tW_P(pE|^`dvMcQzYmXhYV$Bh+yC3< z(5@M|Dy`@3O3*I=qxMBuA$>ATtK2If*80iV2}O1uvhq|}{Oe0bDnL~Tx9!6%kt=Hm zR}|Jv5oZlh2?~W88#4LJA#VLD-{1~FC#&B|MNS3$oFd|~p2bC?$)I<{Jo?9#iRIvT zc4_yv{(n}4MY5O7BsE)WJ!uoO>&}2mDP`}kpFFgy*ZFL~zGbHQ!~d2)0vFhOOajzv zE~iADx*CwOe38ptTU)EZ06HX^-S3$yJ_2y6=*W;jF8k!C4zgI-{B64W1q)JMc+$9h zh5f|sVW45{91I6wutxea)Vx3b=ADg01yWJ-KP~deDBGIK{87Dah0G-S^2}#+nr<(K zme4&RX?Lz%U0PaVO`N+s8uy9?0Vw&lJycprH}v4VuOtq{4B~TcYM(l^%d7E$BlQ>e zFPqr9wr%TaeyNj0U}ZW(ltlzCWlC#NWI_xxt@x1X+&}XssT-6Bzzl|4=iB~nN5mw|1!!f1IVPcB1S#qN#B zKGtS-Zw;}bQf0l30dSl5S9SNH$Ew_Qem|DY7Zr9e#A}HBczM6!QduD^{vcpA0&h3m z?o`n4YeAuXgkUF%oQxySei8i{ZrXPI^xUF^4o}iPA4I_9S?k-l#V3D~ zIYkYR>yVHI(wC%ecRM}Axke{lki27>d)th{+Oe3NU{zy92x!^g<3JHBdY1|#*fBlf z^z}4n-w26gH4v?EOQ5iU;cCeOT1Z-QVi;$>YXK+VqTK!_t&9ldkR`>VJs4jmwF0)hcud5V1kt{E99p`5;hOKpidM+&5cj zH`5Cs-t{TzplQ)g;aFb+hiW)0Dpv?Y0G}xg=;90ohK7_f8A090;dmaiv2DDkmdbkG zKjP2J$=1kGyMVn~nc$+P*B4mu9@un_^U<`cB{F8=tYzVAjtqlF`||)aBnmqIqt~dQ ze>lD#?;M#*1^1hum264$ZS6OL3*W?_u6jhg2=Cz`@K)vHgVeHEJLMQ1vA*IyH|8J( zb?PV3qJTIVKQ40Tz>!wTp%OD37h|!lt#@ZgUBcd3n3mc$mK=YTY=vU;7o9WC)nke+ zbZP?fhC~ut{l|x+tqP-#(UY#UBa|XRvN8wH`%jxh7jvBgX+LRr-o+6?7Iwl7Ux`=- zu=mHyq(g=Mg*@^+1dAC7`q3!%Fd#%$oJ&rYmzmB1&(-!c8w-rpuSg`4TH5neVT6Z1 zK`wok#jGY^ADtPpboq&ZbSw+)k{x<1#pUv`MsOAMlaucFJcmDEkCd`kE&s(hsi)Tc zn>U|2C?XQQ72dC(IE1aQkc965B38=8R^N26F}+8>6udpH?hdD3a~bEvPIVBVY-I*n zfBdYD2{D-2ZL-0F{8i0L3@z)GrNNE11I`%6d#;ar2Fre`mjM(6u*rhsqk*W@a5Djy z6H<_$3I333qjK3&Dd}MIWNmmU@4s!<`Xwu{g16Ch@fjN~%fB5Mo%~ zt=EV*;t?VkZW2uNz#$e}GuX9(hRXq^viT=oiu*(xMld)(no%F#EEpSAN4?0*&Tct? zUNMS{j5IMZ!Q`K~T1wo7U$J7oM6j$sWq0{z4s2W#{{|Ikt6c}(GD&Cq`uZw6 z1ml0uk$P9w3V@ssu?)=0RtE3$bU3<{nUN-$7AACOBM`2&Bebb9peCT5>s+|VNwY57 z+2i8sTE|)tk#MRvb7NT#b4o+I=)A0@Kgu>BSQ0D4@Rb#5@$$1!TSy141a z0dFE0g81CxLtv*;+EHDhYYuiLjYepDX>;~{fMH=`uAG3^OP1P~H+<<7VlsT%!@(Wg zGFs^qKXi!nR!~N>2Z8&kX;ewyok-7ic9MRHoLYDnkTvc}CNU6tjIs>P?P(9jh^|C4 z$aao(E$k#)o&0HtZ4D4gwGKa$!`FVi5fTu$i;NJG1zpJB zSo|{NdT4v?=VUhW0K*0Tg-iHyy9g0$Y9BFH;DJfzGSg$aBf);DuZ~c#sZ#NuhuFah_IRG6g!! z(^cU;p;wTbz6gbY%!PEY)Oc1}7`&FC>M0>w0p$U8L#D|pbLY&^Gpxv#uRrq_jL>cz z0{8P=X}1$S_(PUbkk(Dz`Hg()|o0O}|`)TNV4bO~+>Wr4? zN9e7J&RizN5|@i~2eN%U`$E&W1^b6NKY;y))eYUKQEJMYTX{`Z=(}JwX|ei4L@f5L z!l=eBqbEF~Yk|=8A%dUs#;UlF1h9vlIrzZbMjBGKe-_Y*-e@o_$rdBM>y8C{(ql>? z77qFxv&8R$#=D|Wd25e+mTgm}o3_3Jq^gsBOY8&)6gAz6|4@Pou^J968=5xhV$LbW zlEDmYSb1pI0YX~Lxe3WapJra}EBYppqN(u~R6ZZs4gPi(h5*{xFzOFXKtr&SL1UDZQ)C&U?&|HTM?qW_tO7q%!>DvzcZDjoLab5LQaCD2a z7~~gqVq?;>BN}6TE28J6|I07OH9s%T-L`jjaRH|fD(v2dEaj~Jg1h82;z8|tf1T3# zPZ}_L;HRlj7if`hNUwO>)ra|aNqQSYH_T#vCu2TrgywTC(_MgBAb;QXuQS1~v(K*s g;Qy;BxMHKNHB58)hi$+xUqj=9r{DSZv)Awb7q|09fdBvi literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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%0A{H= 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 P{MIzUh7&B0Q3>ki1Y|rO=uNxDB3r zw%oyNAKQlGyQ*Yl1vUcJ8v3hAf>teEtYJQrR3Qp*Fv>qmn}exMi9YW>UY{{mEr-x+ zK68y{GN}0u9i1(TjI$a@+;Mpj6z8Y1I^MbRS9&2E5}e7sDX(M6%JTKTMus*tB8zY5 z9+&n|5WFwHXZ`lP``SE4UCBp)-mQ1qw_ZRDe zosm6asp2sm$SuBkcbBQP*}%GHaQ%XoETSS$8gKwo%iP?$L5!3@17}^}_?X4NiC}Wb aZCco(-Pn~Z3>-xU8R#47mEN*@`M&@X>v5z2 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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 L?0VJJyRrWU(L{jc literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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%0A{H= z6qk=i6FQse2(nrt>vb)&sjx|byf3WFOpfQu*UWb)tK%~)40wxeYU^EpLVxCrbzUW0MfzRo$1hRbo3|J#F(tm5#sP5 zDouW%ZLN9ES9EvXgfG+gf-q9&oKE*Y1Knr+!a+;1zjAhfxGdbXY5~wEk!a2S-<6H( zJYI3QqyNfpW@^k~kqvvZSWl>Ykp8r-b$3sT!+7D#^)oN&E8&T<9W5ELj7t$aoD*Fk z-(S(~4`0PFge6`6J})d9<|`P=zH6?HWweS}ro|XVk_Wmy+)v>cj=Gc?*64dQiDdD2avjg9#zJkKU5$dM`en{Yh3{5FXBQ{SH>6`L zWs>XEG)`RC)fHhnP%hi+F}GES&vV(2Hj2$#V_Rvcgu&aAR7Il0DlY2*fHLPMZoT4J zBlbE1J_!+?th%Apqv}RumNKXu^K=boVbmfU##UrY^XYo`66P|AguukMdk#%|8t55O4gOQ9XU4^Prfd+W{PtMxcTs)lzHTmYFRPhxT^$%AAD?Z*O`yVu(tW0)k~UP=0GHdu|5_~1Bft_nU< zlMn`Q50N%~6RYYnIJ5KKlf(^(ep5Nm?mV)91x-a+?rQMrU%WpXyh6L1 zX;f6qHQ;5od#6(7KGAPYq;@Z;S@&%|cEAE&WUMm5xfIZ_D#h;Agc)3{XdzI1&C3~8 z#O$u+0C4Rv@U5a_tBSr6J*5WlAp7S9t{MR@s=SD&!AB`ehbFX5>zx9~rdGCm)4k~C z$skC;z2`>bOjv6suEs3w31uo2ntt{p zV9biW|7wDCwO2Ogr!@l+-Kuge!b;B5z5)+)pnkV=13KV^dK-)x;&t1rem8$(136#c`}$4>HlP#=OBdHH4Mmq0-~X^!tl{&_ z^&kOHg@{U((!=r$NUzzVmOFtKm=*&R6^UVY6+}g)OmlH^al#h9iWchl9ZtB%?&Ba$;Wi)SSh;L1ayitOrwt%KrX}Q19}Sd-!l3Oe0Uv1d z@w*e}8Oaxi^^8z0WBJo5rsK@68nrivDtnOM0f1BcZ9S-QGKf~NtTbi?v6+yS;qB(x zyM|A+k^=s`8PEW*yOB`V8tpSLRayOZ3vQ%gj$oucFFm}eYK^?fe67SOL6+z`waQz_ z6HFh?yfR9dpc)p5({-CJ=CIlhtziTqGax$Of)oFaa*A03fthDnxVOBVv@9vt5#~RS zj$3!Nf7iOgBWZ9$6W4nqlDllKE%vH}pjClxlTnt%S>%}aA>^e)*sV|J4H#K2sjNzt zrDA?VZ*r5l2CnjDh@u^Divt16~8b>1><*i!D3fn*iOhevl5E;d`6? za%FmYx(Khiq~hObl9vs5Hp5Kl_>KHB&p( zbcSU#py6xq$eZFkRddO}K=8oqQ(i{{NI9+Sak@fM2l0Y-==o6N3<04bF8$lr# zf@*#CdTt%|&HF8^)@%3C2>7_`Rh2SFDnkA)gTaL}Dyg0%g=l4ipGeW)jrtZ^Z(C-J zKi>5?)8^xBlt@te6w&-$UUapiH;T;XFulao3HSwM-72b4C_=-b_t~vlZ?(z}f>w%8 z1euj#s!2Cl?MM~ZNPOk1wRLPCc-r^YY{qdN`jhG^ABA0OHSHYmrX7c*`(d0^!t{4m zFR%@>5b_6{xqkCvcG@Sy2h<-LB3zTq^nO}%LRg8_!Qa%P5_X`xuCd#B;~8Lf`Ta@o zZl1M!t-y;03ag*9+~M~~R(UQBNvFj6pvL1$jMsw)lJ-The(O>FfT)FQ=8c`+_0zC^ zP_P~HbFMaDwcR;4MoKnY~FRQAS5_>cE*pkE~&PI zzA^K;O}&jpmr-oQ{Ym8^aOCct5p3tCmC9Uds({Cle^ZQgiXUF3LZJp4(Ux!$R_4A% zDU*zQuF#ifnFnD|sn{5F4a712SEY>mz>vF2?@Is#fzLoHlx=UpmqWhpB+@keDL$Ye z?2KEt*89bJ#{T}*_TDE?ypjt)yJLxSOU+cYWx{jes%*SL(og<0uR4}+N0~ux4FjM8 z7Ne8W;3TssUO;zlTjxBVoGdOV{8B*wov$ZipSCg-!Ovrm)aNf-fU50c10`0^S&1Ck zMHQswB=Pk(+`anyi;IgF!lyk;DDb^D0KZ~B>RSA zkkEedoaOwvK;Q6v9kHb)dx1&jiE}nQ-C0VeyU#{fshh{@JxHBSL~cX)a<%<3zvN4% zx%H`VJ`-L?m?V|MG3aMzb!g37wS;Lku7*x)(lx^BJA@Eu%Un9A;9X!|z>+Z1nZ-{n zAkERg0(K)YCYQhl}1n{v{Cy zkWOqo1aQGR!n5Ygd~|>A=ZIai&!Plp8NU|;iF)RG1|;=7S1jkrfkMN=!VLO$8ZOcl zrcgI8X>9?_&l%pdo$uuipDl8T@hz2UUxR5AETb+E)XhObuOp*EGVG4;q)L?-8dL39BvR{S+8=r4V-$a0hP4^MYQ_u%LPM-#HH3C087unXtPR{JZAG zt2gcXCc7bDR-ZUymLEJ+^@Sg43kR}o<@s41PIokpnGZczo_ia=siK|S+6mJ?>${Ya zlkFA4&}^;1!~h$h&DJRdvYAl^jObdIo;o!UX!Bq0N7KE2p_ZvH_AVz(f5e?*2O$TZ zGc9M*_V<%;$>QoFTye`npz$+?BL9~k-gnlcJ2*?&VFbIK2*en-ki!wA?$ciJ66e#u zsCsr20{C8{5R}oz9ikEx`il%pY4L$nz#Za`Y}bmj1KJ0dVJQW!Li#<>JEuU2Ur5VM z+3xiqK+cq?Az_dQ-fAL=Z3KM8ea{+FTmyE1OU@f2+J+w!Fy(DIX3Gkyja`sT=y%)h zTYhq+yrvflTG~|&LmD_h*PQ^!Jm%>f|9Npl_1-S4)GG{-2m%h7zT7fUq7s6?6)+h9 zSabUycfhtprhPkv{>}Q>HyL&%pVymvOMyZv@K^XKc3`qQ-fC7>8(7JNa>smJBp}Bh zO`}ZR3={;|;@U0t#pP#>{xC6Rqpi zu@t{jast#u%yYQo`YrZxf& zl`@;`9huAqTh4JSC;0_3x$DUaK=gfQ6+5^E`oQ`UPEE5Bk%5!0y+(XHs-( zd@!Ivx%DyBG5+0%p9!zL9I=*qa;~hbEXFxs`fBVHgHdbA;r_ zGdK-J2z8Y*hqP53I71SD)i+5zFm>@1q3#edhg%9^|D-7CUPG#JSqw@P`ogdOF42f$ zHDt4N)YAc~rRp_m@d6^60Z87`hD26gs*qBs_UZZfxbZwux)T#h+@NSCw{#H@>I`ZC z!=k>aXhXP7!LVyJ!LRkfzT$o-bG`8;+UBMy!xGwWr=w~}#A1Ab16(oOm_s{Dc)oOf zFgSN7ntn!WF*DhjewhJwD&a`e(U`tEq8I`kJt(H!&nTSVVg{gj7GQ(Y?*Zp^+NLY2 z{>=MrumkhXsF?;T{dXw9&}?UeAPHZU7q|Cg2j}!3qqK{NuGDEijj#1;LBdU%79`4w z>Zo|;!;~4|qzf|W7EuYNE*5BE6bfbHD&VYcym`Z#w-TT6`K$Bpj-g0vT6x$7 zcOJm!VMJmFoM28EpqZhs!e#(G46w!nadJ7TzO?xyp;9Jcy3q9?A~@^lj9kS)=^%VK z-4^lHCZpv=QloOOVBn*Xf!u|&{_*n5c06|ko=r~f8oP?Lp`Zt*lPqoNYNcZYDz)Y? z>vf)Vf7QuC`sx__9b)kOed>?+rhejVC zETQQd4J=l3AnJyG`!omOF9D3WT*Vm!C{|4cz^3@s*2dQ>ir%%<1U6*kpwTS?Z`5s% zjAulvGzJbTb?Ob)3uAer{C6W|up~_8@t~8vf{FdV<_1}|=P!n;y0?|xiu7c9PVGN< zToBypQv~UvpMR09QnmqvP2p$U)X&N#!1R9VQ#I^Ys#j9Ymkqiij`D8z3A~u`&eVDFm~Ef<=J~XZTY{SYV!%ciSAAz z%#M+A;_}v9%~KrB9k%U-#%HLRz5uAKU7oidEk|8%qiK$BLJoJ2Ugj7xVnb`_fCch| zBE{o`25(`N!YY|t!#!XQB5Z~Lk2y4RY;)Tzv1DU94K7TqHc_`?>Qnc~y_=tx0u>ybRTr`VPYifYExV?GI%46-K z7b1aJ6$Mx?l=QLco;hYkEb`&Dq1NrmJzY(q&CeKc9Mv;|&ozC&XZ(i57bHNUr`LyY zb^LAX0S&0bd^1&dsrE|Ze4nj^ArW}XcD` P{MIzUh7&B0Q3>ki1Y|rO=uNxDB3r zw%oyNAKQlGyQ*Yl1vUcJ8v3hAf>teEtYJQrR3Qp*Fv>qmn}exMi9YW>UY{{mEr-x+ zK68y{GN}0u9i1(TjI$a@+;Mpj6z8Y1I^MbRS9&2E5}e7sDX(M6%JTKTMus*tB8zY5 z9+&n|5WFwHXZ`lP``SE4UCBp)-mQ1qw_ZRDe zosm6asp2sm$SuBkcbBQP*}%GHaQ%XoETSS$8gKwo%iP?$L5!3@17}^}_?X4NiC}Wb aZCco(-Pn~Z3>-xU8R#47mEN*@`M&@X>v5z2 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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 L?0VJJyRrWU(L{jc literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 zcmeHtX;_kL+pcDFX|v>zR#s-Fu2trQqD^X=Lr!TB^MDBKr?vO~_WSKW``ADB{{Fnr4~_$PxbOS9#`8Qc9yr=t z$!}NQE+Zo&f5rNelZ=e)sEo`8_pKX%PtJAyZ6zafwDHQN^DglveCAl(kJe$`o1{Sg z=I_VjZ4MtdI{tXC^|luqoi^lI*la!i$KDIuqP7W>CtHV=Ra7@@R13iJx?bA6*8 z`Skcge{e(5)e{F~+Sf@TAej{AMtuv%4a$d4%F6G~OWC~D#zJo6@p9R;y#q4mx7|%C z|M%DbHp_o;IIQ(I?0Cnj4x_W96ZlT+{jny8GA(Jko7S^aCQODK+ge)a;dq*ExAb%Y z8ILzqvQup~YD!DtdbxguwgBIT(3gidrAi$vVm6W4XKt8i()k81wL6f;zd{~z7h4-t z^fCzBu(Xue=2KhS5O?r!If3{xC;&HfV8`L|2UkE_{!@nZUcT_7`IFZy<-mIivQIkk z*GB#G-XV>*0>7YyEUz40g`~GXIgDpSSec z74>syx*OJwfP13tvPr4B3jZrzfz4hZB|=WC_WJs|>CE=A*c<;_LW8yuu3))yh68E; z7fJsIwUHl9XoYHxu5Hw>dmEMngW;Lswcfj%AhLFc!Bhg4$Bj*_Iof_;+g)q~!K*Q> zMGwUq8L_MwJWj62{_`+nR}l~J77PaCX3x)sRN^3tX{&(^H|$R2hJfyo$f-w+Q1-lL z;?r@%580Jh{C}=Yf3N9UVj0sVXcG^Zl1?m2V!k4V$QXny6}dH2gW|r1 zhcfFyk{JF57gyIXJUungs$%f2ezW^6VhC=C!D8XVz{;6EzP?@Ka}Bng#%$Et)#Pq< z?wTyKkzeaeBEmhW`gYV$0k|Fext?n3>h#7M3?_`;)zyW^<3kGWQ0U??Ck?Z`u-%7b3Ktl7%NEc<2@g+eIQ# zc6RpRLuq!@RuU<~pm;7`^@a7jvLkL5*ImCF7u!qi+WJ>kR)l}`MH3!T)y)2j9W$DwvNqH4XQ+U93a_L{jp6q>oYIVU|q z;5ZV*(Wdd@h@}Q7`z`51hrBWK#acjubGcel7$?M_*iLdHq$uD_;k35r)5H>TYBq1l z1a^^=UsCru0Ow)iV6!V6Pv=8DX>r~(VU-@DIvhOQ=&f5oFpcxh?i#1|_XCbvScq9m zf|Q{R>%DY=-7t?AH-o`foA;K6gqoo2(bS6uFdO;2bG~9vx!j(g<)usl1*wV>5icmX87ETJfD-UN(3W z1Nc;Ol%3xO7~R^q8q=Fy(9`688mgOgsjAm(iO;W*rcoZ(0zcMp`;4!Be1)pd^|x}l zAsl;}zr41#CKPFU7TKdaHbMRlw-sS|SzY76y@1izyYHMaez5^Y{1qXVJA;VZS#VZ8-alGiH8aCyn8)Kqws7Aq z%}{IUp+;IC$LEyf*2tF*CWFAm8k*lMIBDzl;OzSqzjikInRoZ_(G0!i7mp}XrqY0> z;4BDwTh=?d8D(%gFugn8)aSHf?LQZaS|aH(e>41=akf{nFVdpS2{RVVoputhp45gO z9yf8T{uUuz(`)jvqiQ@{&YFH~yG!$|_)3RbH)S#@Nvyh-5IOFQD zZSrmDmza9@(`y`N!b9OElm&~h7d3uv2XOk1&Lma!u zQXrKsY^=e0SYE7~&vGh!#TjypLAIg8ZX{Y)^0jYq&Q)o?h_zut(}R}BXT;(*Dk#Cm zVg)p_zjh7pTnV?+JhN78RJpnL2Y+V;0__{<5gE9z0Z#Hwu2}5Av#>Lyi9F?&zlyg_ z0=}NVH`6&;0JaOfh!T&J&*bsczsGVk%#qRrL5y9p046N1YLChOA{7G>_3 z)RDJdrKYCkQ-9v{Ste&y5an8|C{95gAGFOE=jZnE8ogRs1}tH{^M*uU)#)Udhfs%p zWp-ak`KO^&a>K-CF<(S6xK(Q>o5@;VVFe;w+wJ@nhm+ zU4%-o@ZC4mwxP~{3!_hL0BYds$&!7x`5)CPN#JviPc_wlV~6xEsT##{xB6GIZv}&Q z7&``a6d-y7VZ`?FDFdmQY0u>2)CU=>^S$4Rw)f?Bl)B5Y71h<%caae92X`cE?V?pf znPX?npKSih_w0G+j7E2|nV*d&r&!!msQ$yutGYcJ4kQ;{SJ$txCVd^6Kt&Pmc{&)g zx+e+iRM}2pH_ae2JQ7~zA*GDdUG<-V0^J*tHg78+x9^qfw?C1)?i0-hyuxlb_cFc} zp_a5Za<1^|d|*L%RBl>?sTz9Q7Li-@Vw(7Us6lbqt;6!HM;<2E9*^* zGoIGs!H3k`MdI2?ZfudCf16JM?q+War1f0lQ>VD$Y%Ol|%}VLhq&v;Wt(TH4q<4Eu ze1bXxkFjy!eT{3$Oa&IQb^o$KGJ3|FyUYfni;ZK`f{Qe$tb{C|-$<)K{k^cy=`mGiw8!Izf{OlWwoLJfc7&o?4B-*yihR{@(~Exg&SLtVGh z4c6>LQiwiT9oqc+4?F`yX*<>Vbtm!VkQ`dEFiY|x6vC*c__$uC9?H&?NKZx^u`7Uyw z*7P+5woQ9U3CMcWpcZ7qxI{uUPvhU;R90Hr3k@j(l`faTHMas%jEz53(B`NAK@aS`iX~vTjdX zPpvqY4mz#Qx_(41#&==7qa(Q&MPf80zx|kO|5`T-^*P&{EnS{b_f0k|jkhB(9D{S! zXr!o*PI1l8VNcO#M>Ozj0O)#mB~dzjGa=)p9!MQqfr5S!8Uud*JH~KA4PubBdk*F#xC3 zq*x*l7|f>4b5JIvy^)=|aZjD{$BG4``4WLcI;B=?=Fes38TIGRK`8n?1R-8JZKMs> z2KyQSyL%*wu%P@7Z8?*=%}xykNiJPPVpRp`(`M|r{IQuxZ5=KHg&p_Oin=z}V)P{S zihmi&0Wo6e5X9n7n)EuqNWHZ%^saE4VAFsjg_duwcb>pZ;S09#8FB_1?6MC_Ph->(`8y!zlFp)f_@ zU^LxY&d8@$xd}r#P(L}8BTD|b9PEoKM4{gale{X}`H&Kl^~}QkRB<(xtIw1V^vzz@ z%71F>=?36{DTX_m^aLn#a07Aao#bE+%DiIJ;)8RJZV^;{IcKwKmfpH*+f89S`obFQ zL>2VU+oVbW2yqsKu_k7-0arLS|C~ay-nOT0As@UYU>Y9TWbI2it%pcZEvmxsam3gA&3MF|>NFTN<4^*pQY69ly5Rmpp~h@YL!d{#YHzpS5(IvW7AZMh7_ zw}ilthuTIXulf4=?jm@9B<_h0DiF;l4*-uxZmLTW#O|Jf_xaU*7s@{B8rMUd9>F`ql2n#0dT4uf?;u%j4s>4T|GNZWo^WH#BdtgI}k$@)xLKTM%r)o2WC zYvc9K9Kg|N&Ka-EMFTmOj+Lpq_XPa;;q=#n;YK@uwbIEY9<3IBKoT>ndEqJ9pSass zkjjekp1@=f8qBtou>Tkt5PdSPqRGVV0r4w za%(j$ft}`R5w}(K=km>emspkNM#Y8EA?D@Y^?#_8*fRldVQo$K?F>iXB}jdDhQC-Gk~Yv$w?T6Sa1By1s&%ye+?HBR(jn*_zw) zBA3D?aqkdFjsJt$_(B?nLNR|k`*ZFU_nk10w%!L>s(Y#EN7c{Jyf$nT3`XasPqDNs z#UM23ZI~x*iIQk^$5UwbazqL+(!#4m5j34lSl9%v7JI6g(G)CHrN3~rr0c601oBd? zrz5G**@{oOtfr=h!6;{1KK$UvN$(XfB^vB|xjo0?-sEX3O&%IaK;c*sIA?kzz(&Mf zqKKb)HFvmX0HSHe0{I3D=e?7!?Ef3f6T(MW1JD*kVj?EF7LWRx+-d2+lD&TsWaU_8 zoU125hU8Gj3D230VVuJbI`ys7N1V0;ReUbKq~Jy^&3Mp8Pfrh!b|Q`%?sC3>7($mQ zKl2}&Lh|W0H;zTH=jP^Sw_k0fhb8J&48Edngsk&lR7Ni?S05KgS)WLTRhYNQMP6w( zN&|FJu5}V1x4el1h_=aoXS$BLk6InDI2$wnJZUulxt#jg@pym<^Zj>o1^f*88$|^zPh5{FJLh3 zlIn4T#MDD6JE&<27%UHdxQ52d$jCsW(Tpd<_-=}J26y#p)IfxVYsT@*-=vM*9#2)$ zuQXGJ%=;X~$6N=|@V^+td@s8`dKlfnH_B`P4w=E9B#EF-HOurF!eAosU?CL+L$XcB zWDi}Z>OcH&RNXWPGB*CtMeOVe{3gsm~fLc<$-i{dC*tPD{NvfcZ9vuF5X!XX?(iZ9BMLdxuqmz zsw*l&b7ehNxn_%k2_(FN#*{VE)0r&JYu-;i*Ri}JY-b0BX5CwK3HGT(&+kbdxi(8U zCd}6B3R-^^gV?9K0(IJr&N&#g-h)3g*Oci4+cMg^G1f7`f=&eeOzyF_K+F16ef?&h zVV6+nQyb$1ug*07?Pb$~iw{5BV1PK?t!rgeLVT|AE%%hEtG$3_6lv2Pr6L~u6*?dG z3&v8=DTKb5{}hEGo7 zowFi(oa>N@73O%k$Xgps{)S)TlTnz1H4S>@F-bM1Tb+G=jxXFNuYj#q***LHL0y#g zK@Vj;quI^7^nde;2)uBJGl|dby7{8Ig>~xF;6JCa-8*o;QbW_beda}fGyxtTe{j;` zQ%xg==A$i#7vxBJv12$j(;_GvSLIsEqDa^;kzBiBKSXSaCCW?H9oh+;Q^IAK>i% zDOR1^*K26}_?*$wO)QOPF9om^Dy*{SF&Fa%=yoKM5%cNfWB$a0nV^xI#yD)NPtgRF zv*IHLcg(g##Gor!_CzIQoC|1qkBXS^PiAKQ(v#3sl+`txSE(U(!Z*{J@ySz7!rOpG z)-UOPeimg9Q+ydzWE$42s`OM)92MVT(8ijFsE8V!#1d4U`)Nx2o@u~TWauSNNmHhT zq44fFfjJr0ts$$RdLaplDt4NvYs=UrXB{ZVGV7YL-geGW4%E^z=P^RD3(eF1{2@vO zn@<+0=IjaV$wPrI+k&cJRbP7HC87VTj0uRr=ck&9-w$P_T(XFH+<|OSGy-|6{(FG) z@44203=IAc&}z-W)fMP-G~LZI-qI>e@R>rdmV*pTK>?tDdiEJfK}-Fr}rX;YTYr#nJ+BLBOP^QicN51wiDG5Fb2} z0HdSG#{~risO)UZie@aY8A5jZpCcncqiSo*>>9_tR=j_^&fUee!ArLqV^hN&3Wc)I z@L?*l;@R2XW~cA!7xe|8Y4eF~_P=IIK(h~SFp2up!oo0b5P1OvNaPL<4pQ+9(qX#j zWbr3EYKa#%;x2ueB>f9Hya^v(=gzp~+ZFb<95;A3uL2iFuO~Hy(SdGHqtPm^`_Pu? zboxIy0nn0neh@1hVntpt9LyrtrGyu~q%OSisa01~b7}?-`^NkT-ulY zbLJVsUxso#(X!U9x_>r02$0xkcND$knl{|1SF!mC2WD0A@ss`2j8FrBCWtI& zQ2u8BU5N&R2qcmN>$}CqTeV6faFCU&tH0D@NON|6{)sl=7;fwh+7h${P~wAf0Mh^p zlU|EfmV19ibvfNoUk1wi|9=3eV!~PPPcB!t2{8U`_ijN z#5Ucm*yTFs!bj}*N6DI&3H)%}(9WGTU_Ueef>_}#O#pMDuFA^Bt(joygL4^P$3lxH z08RH1nejU?;*fHMOT6pSeDI;VQd4&4VdK&Lcv_l0XaK`1{>%;b6xNS@*O7M^1C~q3 ziD7=&*7OV*^uRwr(0vUIcMFFTx$uv_qwJC5wS2!hfaArSaH7QtPzQ*>!ILWfrQj~;8E)i+;d8%@g57Cau^!(uQc-@UWW7TTkQbJ5Sdk&TIW z{s|t(i#!`c^?@=H`c^{VBTAUAlXNN6KpU(GOltspr$_+LA$R@2V1NjiZ>aBM6Bb9?TbDFn`QG5PkU zrptEJ7b5jv3pN|okEtAyMWzFkQopZe@mBD8Ib?w+pch%l{qbM%r;aaDSlOgO33+5nIh+qF^V)cGm%4< z46z($G{+p~Jco_%?fto~-}m}m-~WE!?{)pY-{1Ay{@A^H+r8KQx?lJ6aeBs?-!&3E zbm9;Q1QIm9b@Ltw#5D>6?Xx+s57?vLR$v4IDLpa1sdqo`MVKaxiO__xX27l&dm)4LMc0(G!SHT)pZw2>}%ObY73_-2!P~2-OyzQ z5-=F(VYI6UHmN{9zF;DO2Xshj@T&ziAhTFGJL=SjekeTZ)ZdR1fKMNOJAE}c$NNfF zjYIg`$ttd(?1{$|)84tjYaaavnpMe{b_c2yQ`($+)hZN-Hec+QhDn3&%94>(+X~+K zo~y=bR+^H|1@ePT*1h!W(kTh)hd@7}?|ETpR~WVRwW@&8<2GCLMDU23sfDO``9hByl?r`Rx+oDF*WnR)j++n|;fO^`x`aNE`gM#S*16e0sudA4%E89vDm- z?QPJJ(Lf`_%RuCm+W?6Da92tw){0VpBWEfA#;5mz&MZ;%z|s)79Y%%V*9ZzU%heW4 z?NRf}G(=p*XA=H?5HK^KW|~<{d$?hcj&1Sr#M0&iY5U);85Rssy}s4Kk;ShB8&y7= z3l8>O@Kzq^aP`rWh7pW}dGv(UOncRmh69EXIDI>`Kl)LYjDZEPJ0^eWaiOxq1c^qe zoP~CrGOM#LpVjR0BY7^=U@#pk^#r4xg$>u2rd~L^f%erZu8nl`0e5S&S9j_&Oj@n> z_nu)OaI;towCnkFQ`~J^bdUJ&AT4~;t;pNz!S8<9K_J3Bw&7{ScA< z03~rAFw&^wY`Razj0l-`)EfHxZ2qh@xN_qDQPl(ctZV%3Ub53}`!MlXh`r7%!tbjn z5fb3Bwv6LDlk#2u-lE+CNj2>^ldi zM-(1;@8J2E*rE}LuSev_x2zA#$ zql(?U^N*vk{l7|VwCCQPGtQY(&YM^o;T1cP!F2~`E(nD>mkejVe4TZDFm$cmFMO^^ zRiN42P29(9Y^(t8Hw;Vm`oir}c zqx?FJ;aV>$yf!0CZZP0pAhDk#6{H1RI|e)ldI#j~Q8zF*EK!fa z^r$JtH$ha%Rj;xMNvRwbq%_oMx5zbt`a zC~>{W6Es3Apv`?A!U{y9gL4Tr?F$>4!K%hb>lQPv`TCN(9VeEmT6`3j&RGm)V@or1 z?zvSDY#e+1CZlkuqkAyh>SR3Hds zxvz?`c0@r++yyt=$*!bxuGRg?cQmG$$#ic`f##7Kw+z8XJ3DuLw*%sIK0))rcRRSI z@%Q7B8PDE~>5a+4O^34wT)7vM`vu%VjW3F_G(aGcBNR}cD3>7U_J49iX|?cU3OiAn zw5XPKZEl(W^Q;(eBN2UIxJ9a2 zorxf=4jCtjdz{_sSGl|$34D6GI<~!PS)GPE$pzE?npivO@*A5TdG$e0fJ4d|7s&s) z?tm_WZ@pjy5opTh5}+V){=U4>%KRqP`Z@s++t$CD8&ot>Du`D!K|YctUn=z}@qnU> zw5GR0??WJ>(d=wF<1)-bEw32d3+*ba0;SgY+gA6-I7zhmAhW8}N&5Np7!d;tsWyF; zzlLRv)4uv>6*=4Ysu@_+HlJ>h9L$)(U=Dl`&MMA;f z&cD=5g?ai1<>S-j-rS3v54^w(un={%#e+|itNID%=%V_+*Oe}7(xr46fR#Imv`4U&_>2x}EHh|5o^C_eZ zltC_H>DKA1eTpoKBk;L_2X6;(96ezQIX zv&_eQ?(|wNZucnSqgEF|eS(IV%2ZFhs3$CE{QJb|*An`vVhsEFR66nH~cR5)y z*#1B$*A(^LSqJuY2?~+#i(@f?GrNYTGbgS?n1ARaOUwm>G7uQ~f#tH;i|y-J8nt`U zyRYO+S=T-H#R@L%2DS)y$osVGE*+&zzP9#aw&p11k8I0|c&J>SQU6KJNRc`P2jtrM zF;^`j|3>F3mM3CSsn+9Z?`Yqn^J+m<6osfSlH0O7zCqi_X;Du}X2q_kSa8H3EP$@a zwvE|xiVPi^(x0??Mpu~q>g@9#@sPqtYgGM?^8R9}WfNnaTSOU!c^_@KFV(itZwjM2 zIy(AZ=%JN_xG;7)@9er!zt*r7C3n#$W;Q?6@391owpkZ}aEP&!vm_>ezS*Sfp1hte z>%g;7f6Yx?yX*Vt?aIW+*BO!6!QWpGPkrquHfuKeR57d7btaRlOx|UU+U30yP|-HY z|4O*xQx6q2$RNAAOF=C}b8~Zd9y#OBS$%Dl4O%)K}77H`mqznD>)Vh!`i0k5Sk%zRmnA4kdQrm}M;% zJo?gxjWV%W^;Og;%ItyD;fDQ~j>Q7tIKmX1fyFp9)U`cwTcG`Q0%5^s>)@<+@af$s zZE4EvXN8TKdOGvmkGPMCeDrxSQbwM)-8gGse1+w`hwXWykshM4w-p-}i;R4C(8n%vU4s%fI` z-CqBeE7Ru%C%Q5fTylV7lI0M-x5RHmgHIZ3TqjSkSjY?2X>wO{yQWrxNp!L$>cuC+ zs+vJQJBGVm;opSIMVpTz(&RG86TWqc-$nlte}|Q2IP&<%_H1_X>V2RgXqH3~@9US+ zo{XEPd|w|Wg~0h~Z`AN*X6GX#K%wG`hkcQX8^FRdt-StE3Bx-|QfLDOcI^F7E*i`_ z2IPMM1F%;|JnmZ!!3F%TNp&v#!}d|^X4=i!BfG7fWiHx@ljo`jHZ9xj;6_%Cr}9WL zq5O!DHIEP9ZQ}ztgONMZ*&f!Iw>xiWP~>ggyVUBs?Z0Mz1X1i#J&(Wfcz?|m2Iu2! zilGlrGaIItvVr>iO&)!4`rjwxA&hi2Z{iH}QGQK-xD|(wFzZlB&0pZN5T(71=rN_t z3C!PTPF)sg&e{$lI#espUQy{tU;e|z;c({N;OU-6du?4zw zRZ1vg3{g3J@MHfE3CAfG7`R(1xcE(b+dJ_~7Jk4hbM2eSu-#px45<&1_gqqYEahJJ z5m)^O265nr@(On0sa`bO_&kwMw>)VNoHFgX-kcjf&obub)31h!e?{5o@irc*B^-4V0 z{GnoYgyNBDcmp$JHClDa_~`BcFv=u>09coaJazoxzce51@mgY2`;}fm?-k>!9H}+- z;7@Py(k>U@_a-uk2F%xuMEac2C_CeS*P+-cR-J z!aOKVljAX&`MGuy*8C#~910$@-Q=F>_C8`HkZ>mZsiSvy{)j$SYWbG8&V+pY=OHie zhqvE%&VI3?)|CGm3dxc)W_sbziMfpze36jF9qQCgptQqof=J&AxRjj6n=BF^xvCsL zvU5w^*}Cr}M$xP?_s50A3yl;96I~YKZ-3sM7ZZbdNf!aBoD$7gn%2BuTO5;m=hd5w zavixE)6Q};hB+a(oraUX!Ry|ExTbZlm;%g?S(tPm@G4i8In_d%wYalcQttw z+8Dd_F#x#xI(A_ zeo>2lT#b&OZ|LG;!c*?_&iyV`U&qVG=Vw+*Duh={+>1kG7OTI9#vBPOtGIl~xxVu0 z0{E$b_l#I0rMY`1!;p32$Z3xPSbFOJGWB{h!uc2E&JJ)^m>dW;OEIH z->%=g4~iHZd$NJLsKZx68r}?BCvTQFZRjil^w6$rD^4nAEOFjZSsWLwk(_Jc0*d%~ zR2>ja%UT(vgo4)_A};_LLOQpDo|OSyl8F>mfz9ZF{p@1yovifZ1ANG%i3aJ|~|xcf0(VrJHg3P`8`7&SmCoKaq5 zA=>$4wMvl&dnIQa!6`nJKexDaX=~BgV?u8aGW28b2i|tLb^8K; z%CPKmiay%4$|bXS;pA%8V9CqQj%_$LJ?*B2+61C6k@z0d0jmJkL!CkzUlHFUiI}R? z5&q&CzOa$85cXU)O6yUsmd(IE@WGa`Cr?x~N1{4)^l(F7%u9Rf>eZhSkSGIuur2r4 z(EMlCv1Zl1X+#|Tae>{w>^7RywHYS;tr8G!h+kW6WB!^oc&*IsQ0-)-f?1l23$0|X zWizb7p;CV+crlV5TI-fetWKF)4S%XY-oMI<=t@g%klHDEkNlWwmZ?InTEHLXUEP>c z07wIuHer!LM(Q~4fPV|ay_iQ3XYL|f78GRJSi$34KT!P+i6!+jp@cR^f4MvY|8`dR z_*{0lRtb~;zHLQZv&2ieIJmuXd;!k1(VKpt`2%ZkWo4zhuT5WhwxeoQnp@ zO=*3dg%b|jDf)Er?15(*$wlkdkn{_2qO~>G%!U&HP>6*I)oywdp3k|JVHp+N3*K$% zpIJ||gVujs%UN09KWkUTJMXw9*!P;fo-|Um*%v#Kv{6UL#(b~PbF8%9?H$6NbX3l; z()G^>{;)`YNvPVAnOoTJU3QcT%YztI_y3qZw!`6sQ}y7)j$T#)q#IFVuZ<&7XN<#r?f(7q#!LmJ zg+p5gXHrr8K2o?rR&Ikhk#E?MbG}+4S*C)|EYc|X+(=K8`t*`ja@M@0EsJGx& zYV%t7EKksQ5Xv$NrJpb&r`G!1Ng^iyJ_L|vn2t)s#-t79YBF519>0kus|ApQ%pGViH91Qzwt0)lKCB_i-VFx)9&dFubg9AW zfV=aZG`XF6DJO}$-t@&TCI?0Oe*ZSgA(3x&qnck7HG=$hp`ddYO~iS@x*W8qvU{sX z#QSl!OwyV+=yuD1_pC%6*Kcr?i|yxMH<3G){K;Ld;GSOinRLVg>@-(LS6C#}ULeKjY@vW$blUAtD4-kePU0KXyMjFIreWEbx2etWjqqnIuA zG}vd1Q;;0y^nLoWpGrja4rl_MBC}A^omfl^iVpr~C`|X7$aNhQAbb~?OOIP#U7%-G zJAG$}d*X)HczrU9Wdn#Mq9fj($1#SR&Cx4b%y6X$@!|3#W>XpO00@to+*wb^cTp*p zT8xv{*&Ehm>Grc|MJ@9ds$E>|WNB1%xd(Qjc7b~d1I>cXZ)y*o!Jn&dVe z4?w^Tw>9oo>WJI`=gBCtDL$9OE%yhMy~HLZj2y@1N>J##oQHmV*igApNB5`1Aaj(=mWB!!Nf?3Rv5w`R6<>dq-OQ^F|V!&J+=kyFxUG2vx3Zn_aj=+)xN zX_QU-xs{2CUDjm^VGBiKStE@#Cte2b={tCfzcA0G8b)U%s(!J_)IhsoaqP*opvER= zIX_89JI^(XI3U`#bjw)mSHgKNj&?{RQ~TdXUj7eLF=RE^{lTNRpv5P98$zbB=$lNw3JHZ_svoCTkUH!#_*iTdK+=Jf*>w(ctf;Hb8iy52F2^!L;2Kz zNTw_Ra7+_r^SE@+1N7$A>HlUMTgc6f@>#qhx!7aR3bcV2%0n9@KzYLjTrl*+QqU{+ z^0sImyb0Gj@Qj0Es+{eV#kN3I z)O_G>qgUK;w!9#*59T7V_wU2BS!YX!w)*V0o3-!lg@RRjxcaZ|5J+$iy++;n`%;i% z{EeOgIuu3?&gu0PeBcCF<7XJ-OoFCG;(g-8`MvUns%}N#UWz5o2M)!Lref=kLgBa} zZ0K-bsa*X~1+$K7O44dyPGJ z<0bSgAE3M?Vhk*9eeVlU(mxb+>Ok`o!?tmN=fs@i)uX6&uC5|!A465n7RW1*@7=!U zn=1m!fp^zwJUi81HTOj0rp5RPnRf}RZq>oJWv&ej5;@ruMH6KY-;X1`ghA4{CVQz? z2~u4lMxoTwM7Ei@;(M#bDx{@T$XtAyn5``!YY!@S%8m?t_onF#V=3sZG$jBANJoS_ z6wVZc<5Z6b=%%D|LwWT6mWvy{{A%nk%YI+ljlCp_!n}g?uGC<~ul9oS+HPCL@b-s4$Mrpm(41MQ7Kv@vSjdX{ zrVE<>cvF|KaZNf!pWJS#Cwxa>Iu&v3@{Rue9P@*{KnUsojtyG$=MSiUnTXDMiUldf zKdc_O^)rz07vbV>tlnwmRe)r{;T3CzaCi7*iL-I9T5!&G7v5*&5|2;EkA01nifTWH zf@D9$t_pFn+FoSsCa)-?op7KAAZq0)wT0g>inVN%r;H|IabyBb-6(ZsK2rhsL}twJc{2{-h2o+ z9Xr4(`t9AauQ9jAUKeayJ>WUcl#jn#()&0;my&TFnLyTe*g;u*vk-$RkRNBt88@j)1$zK~{}pmo z{!z5fzcL;vo-eS_L!d5y4XFl4&w7xBXx$msHZhd#ubJI7)!#%kSzv8vsd!=MVWVN! z4@VO&o+VeEljZ}}Cj2>@+||{Ufgs7p1FslNjM%UFz)EFqkbrGL9OH?GgmXugf6~!~ zFGo5kDjMO3I;blp?m`s&tr=FbDF&r%A8Z}tuT}}A&qp9+GisGc1 z#0^7W6%@QYbAF8O=?~^+Lis^ri{jjaGMAjsKJtevfr8YDrc#yqFo{OHjRbY~2oO>t zMr2!qw2*uTw7QkRHBaA4D3~rn%5pvUOs9Ok_|xU$Pi9l4-nNJwSEK^-1O*ipMK2uy zuhuSwP$3ZYo`}1X-wUHoMnV+DDJbIFQu|8Q`9JstwF7Q>p0Rgj=0d=rt8Hz!enyttb3_LJ4D*c4XDbzBYjIj<7_U6=l>g! z{4YfLzp%kRX4+d0<9Tlm=^He79Us}6YrYp{1i&g`!sUQ=3rC?A0tq$zmkx3z(JL$9 zrD{ZrzJrzKXxE&n*4J8H^wWh0r$1vbwPHJ__CQ}(ld3&V)y7)X0I*5v-l^TY6|hKS zAU|g^_6Rh##w<9!*yFm6&V<57*!2~so&C@mcDdz#CY(fD^p3nm(=`p| zpH_~WtE^Pn^tKQsasdn;Mm6o_0Zfqm02xoXmoQH?j!_ozOJ=7UNX4obj<8N%zR#O@ zD%(eV{&+Y5_I-XuNsOSdr}FVoGvLe+MH&LlE1Sd6W#78m{p;JDxp|F}-cn>b(2Riw zf=qqy&Oic@A%VTwx9L}BFQlWKK^|=RGW2A=d+<7vG^v#P_b zy3Sr1tn=;iXG?UE%opRd=T0_|^iWk(OSqS)K|c`3T(I*ad*ke?gUr%!hMEk$+e4c7 zVFf}yMe|<27o)z@PqNMnHh-vz5AC3jnv1j%hcT?i$Sv9vmA*s=nn@YH z32)rIsZZw3F|f01%j(PHbd+B##$c)xVSMVO(BY*ZfA!ggzh46X80Cog?EC#!vg5n? zz**{Kd5w=08Ru_{#s!MwERd}t9%V)(TivYO!hSN7XP(tIjdJINA|a3@e{9yrlRD)b z6_<}dBZFL{<=;PoDy$4EB`Kuwvrc=7eM^do^*nZVD>peMC1oLv=;qm0*{$O|1!7w; zt)tMA?vo^lN8Qk*%9Zd*`qE!vmp?PC@^9ckb=!|om>wxVEqPN*WZOtlCv-$HkD(E0 zEoGb*78Z6(5x8;s(_hr|!`R7Yp=#ItpR@)JE8ICu0vWqpI$_p*d#dl6Z@sPVw#(6L zrAA=W-VS%x`SfkyYDd@BKznjb;?cRu{gAn-(}hc-gFOTFp_2Y+S7kxK#)6kC-{BD0 zclSDj+H2>RGF}6x*hbJE=~d%w{PSS5r6N4;Ji-Q8t6Gj&O0Mj1@;Gj>{ne-m zT%UG-mpN;+6Gaiht<0}QU1{CmCU8(^0YcKoK~ZSke=3{W+ z;(7Y%rc8^ctP{}-G~29#;C){>0DX88YJr~E z-C^kfZG!iuCG_n0+{~d!G0bCKeS42kqoZ5t(^hMK^=&?Ixa`X_w3_VmWgC5e790*h z=;QjLIXXWJFJ=$otAm(V+>f+vAXj$<20ZVXhFe8 z3h-hVv?P6`WQ6!gUe9BG2D_)U-o(uQXq9l@i>=AKA?*q-(vL1{byatDVtw_*?Q)(9hrpk(jat)6w1$t1Fk8@0M5+ zoADeWX3<0-kcr(u4Vg*D$j?HnAsPNxA~3w#KbYxr5g(TN-y0Q9B=roKM=ezKUtjJW zr4&O_9Dv%Gv1@W-t9L+{a#yOYC*@&>clju>HgU3PIwhgt)}&5Ig8vmYAB|qZ@YqRO zK&}|c2JH%z7qYdwx;rR>On6uQ7hsbp{rB)oN_V;6``C`c>K}*$E!ZGqgS$5?ZajGQ EZ{#t@?*IS* literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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 EZ{#t@?*IS* literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..14713d83b6d15156ce76fb2abc1239496eb5b63c GIT binary patch literal 8943 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 EZ{#t@?*IS* literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png b/tests/ragger/snapshots/flex/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..cbaa889017a3921bf11ec2717005e2897f59a30c GIT binary patch literal 9417 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7b417fa3ec7fcd5f47294eea7037145ebec1d GIT binary patch literal 403 zcmV;E0c`$>P)A5;^yK zt%!^1=!OcL<`>2Z5bJve?ET)s$2uam0ObRA{|m*1^Fc56E?awoYLdzRG(oD#{$$iZ ziCajC=de;=dROZsUL(?KwLaoCBHjFCBJW2^^n%1FfEWc3qX1$Q00000h|F$7q9kiW xqV$b6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7b417fa3ec7fcd5f47294eea7037145ebec1d GIT binary patch literal 403 zcmV;E0c`$>P)A5;^yK zt%!^1=!OcL<`>2Z5bJve?ET)s$2uam0ObRA{|m*1^Fc56E?awoYLdzRG(oD#{$$iZ ziCajC=de;=dROZsUL(?KwLaoCBHjFCBJW2^^n%1FfEWc3qX1$Q00000h|F$7q9kiW xqV$b6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00003.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png b/tests/ragger/snapshots/nanosp/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_account_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7b417fa3ec7fcd5f47294eea7037145ebec1d GIT binary patch literal 403 zcmV;E0c`$>P)A5;^yK zt%!^1=!OcL<`>2Z5bJve?ET)s$2uam0ObRA{|m*1^Fc56E?awoYLdzRG(oD#{$$iZ ziCajC=de;=dROZsUL(?KwLaoCBHjFCBJW2^^n%1FfEWc3qX1$Q00000h|F$7q9kiW xqV$b6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..dbbd8b2b6eb842860d8d73fd852a240643788e6e GIT binary patch literal 408 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|@{*ba4!+nDh2#v{17Gk3-<{ z%X2sUSKTifGcamBe6cFS3f^! zwSAs(kmJVg*)KZ3Dtb&^<1^brSZ(Dewsl*Na9CKSm5ZF)o{-wfV)Bx&Fs86I=cbAS z&!1$mRdYHXMQUGdvRJ=P0O*t-!AY0ZzP^1jduH-l`=qt|&#vdXmi)cx(AjBk%kLMe zE6GjMe^>razT0~4N^aAw#mO^Ys{ZrRjR`g^oiqRPtJ{*t6U?{#Ua7}(-0J!nwuruMvO@}WtQA%JsLH4rNlnY6Z-RxFJ7to{L3V#it95a<#i-e z7TNa-Wi7IowA^q+CuOBTN|AxcLsp=}kU`r|2F{bl3^{o$g&<*1S3j3^P6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_account_with_contract_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..c6c7b417fa3ec7fcd5f47294eea7037145ebec1d GIT binary patch literal 403 zcmV;E0c`$>P)A5;^yK zt%!^1=!OcL<`>2Z5bJve?ET)s$2uam0ObRA{|m*1^Fc56E?awoYLdzRG(oD#{$$iZ ziCajC=de;=dROZsUL(?KwLaoCBHjFCBJW2^^n%1FfEWc3qX1$Q00000h|F$7q9kiW xqV$b6lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_account_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00003.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b546f65af2e624cf54d7462335867daf18c90153 GIT binary patch literal 472 zcmV;}0Vn>6P)Nkl!1@zUYUn@802huw) z?fRqHv&kH0`to?FOand~0R4Elz%gFRzu3Y-*zSnjG9Fd{00000z+JzPLVxDA#@Ge` O0000^woX2uvY?Xye39) z&t&ZQ8d`k_AH}1!TC%mPRrz6_G<#+U007`4z4;p2ddYjp=zREF+??F^A0EGoFx29m z?%kS*sS{I8i_}`CEg%QBCPdEH0)GZ)>r{<8lRm$mo`J+snOBRK_IFSDYGHq6&Dq=8 zL}&dy0~r;)8tUB5r+i&`=#cx%v@M|tkn6YF^(o`Acb=Z|qs9Dz3|X)mYQJawQ&R?_ zuYid!e9n#4E_2!^)-J9*GvB>(^b07*qoM6N<$f{lpL>i_@% literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..2690b42f7876e7c4bd02db3d0de4a758c91aa872 GIT binary patch literal 439 zcmV;o0Z9IdP)Q31IlGsZ>P!Tc)9P%(}@A;@YC_HL{(RkYc004l05Mzun*54w}6poMJWr+>gWje%l#}#(V zX9L8+&soTri0Z7>8bP$HHv|9x03M@Xic#Cu2cBNb^kl51^g}$|@pRME9bD(hwV+N> zvn;#}YnkcKVHLAAQQ6+}Xt7XI{4x zklv2`d2lt$UIte$?EG5LbV+jATIQt-dtNp4$H){^=93|jfAR>HUUhrxK1eTM>&op6 zzN_QbzDw&0t9s8{;x-8HvWfVYG=og^Z=-~o=--Sz@I)5!Gzc<#a4EtI0000000000 h0000000017<^wPBV}#{^!w3KX002ovPDHLkV1kts${qj! literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..52c69d641da25c43921a752b206aa41066211aae GIT binary patch literal 325 zcmV-L0lNN)P)lVxfMaZP%T|yU^6Ru5QTEe@!E5>Ay@3MluVHbP}=}JW9L(00000000000PvV! X=qIlWDrT-|00000NkvXXu0mjfvKWm` literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png b/tests/ragger/snapshots/nanox/test_eip712_advanced_trusted_name_contract_with_contract_account/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..53ae65195fbea5b281a1bc1a80351dbf1cd79ff8 GIT binary patch literal 364 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|=-%ba4!+nDh2#AYZeBfa}G~ z%X2sUSKTFSd4J{-YHcY(QO5;J{<~e9q=7F?O4)!WO}6UUdH! zS+Hz=(4})vCM2-VD4nt3W%LdvkyzeG%km#`1t_mu*zR}#jNB{EKZnW}g5-=Bym-_% z`=7%C>zxJL|9msNSMXnbQRayy^)nr>EU7olTHqoc^vG(B%bo(Id*|kR{84!`z2x6n zZ`;PkbrPvd6U}A>Y0chs_tyHmLi6kw6c{>JvYiQ=+MTFTx8d*9^V|R0+_75oZt9or zLetinU!`YMvFyLCb8XxElhO0{v2rTkNR$jMW7~4}*8a52+MC^J%KMbxPN-JRb2RNP zEsp0ebAPS3=e2G53#Z$XZAI6Yd=YU4`s1;0 z?{f>9Zfbf|_00eLCwPudd#p2Mzfg8-=Z~Y&(Z3(6-dSPln_e}2 z&8bJe=5=w3_V0Wxpw!uqXV@ zTyg#0l&4R7|Ayyoo}1J3WZRs6lez;p_x-s3`O4ERHjEo5Zk@S4@1z`Oka)v{pj(C~ z>TB;CrkB0D2@>;k^>bP0l+XkKqsFS~ literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..356c1897fcf8fd7870338852b959bdf37b4857e0 GIT binary patch literal 10483 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..356c1897fcf8fd7870338852b959bdf37b4857e0 GIT binary patch literal 10483 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_account_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..225f6427ed1517772b8695979e908d0206d387cd GIT binary patch literal 9691 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 zcmeHtX;hP0w|Z|k|11W2ZNe3WSmD$L?W}sIWwZ{d zOW&6$7jG{z=1OT`hvC7fFm~E@nRZrr`8%Dp5zXxpfBmX7^&6-#{6rm;2)A9jDN(6b zrJd#Fbdr2}z-j&R@~;v)LWWA+U5Gpl$GniL*8ETq@|#c6T@hi)9mhP4p;dXw-vWaU z``HN@{`}>?n^H_4G$5Moa{X=Vsvd=SD7{&CjMLVC){oe8G{l8XC?e~^QQykP8-D};8TiOAIwRS~5)gu{>?v=iE zXXkcM0dwo~E1~lvnj-4yKTqNRsr@MV+yJG**_VY}H-O-qESR*`2zZ@IRV|=o8nc2&Fj(KJ|;*Fk^de+0)1Q_B;D7fcd>1+C})<&f<2fX6A-g!UDVow;zq$V*> z!%c3VLhq?r%2k9t_uX68AE;iBdnaAn?NFHGSzW3Z^Fj!a!R-qyZPMt|Uvd~aq`F>( z0Ez2+m`g(kU38F`H>YInN2Y|+@5byG0i!ltna#mBA>qNKrfV<3Ki*yo0hze{sV?zD z%Q3g_MbgI2=KHN#gM|Y*-P6Mfeo@M~&_5y%aRW=36xJtA-T*1lkZgmi--8nUbIFF#bk}hREqXQR$EDRX9|lT7#+;gph&;=E3)=C zZ+&Z*B%J`@q_fTt*xC7^vk%hOuwK+Z3n6vzbn1Ob%7!1bE z=1n@4pV7T0o~Sc&OgP-uKsP@-shpg#BB{?W7r%PFZFMWz8trFLs%^gW?Rsa-o%@=o z9s6sDuL-HmzPkB9tSnvqEgd=<%AtMYS&k!zn9&{{%+-kx3>&AwfpdWahFZ97TdvF1 z?f`zWwQJ>fAK5TM?i?Yw_@$C$Wlv9}!AL?2-DeI$wz6Igo;5KWlPp=3&#_{un)1gA z+kYzyQ}99soZ(x}KMOyG3;Pup)_lmj_{~zWbk{&e1`oTa3>GX8+w}L&1nS@v6uYgy zIG%5`RV+?*+}@x}E&hOsAra49ue|eKr_27~@Ik%!%)T-xGs(uJFeRf?|0TX8ElCP;^m)zuXd6L)J8>6dN8M(=@Rgj3S6`JMNT`=dcF{zn=ISW4JEjaDW-h`lfWe(Wr&B}2)uW2}5OR_9> zDekD1!--BRzruhg6-thHW9{Y%s+A9Gw!}L_&TmFM16==fR*UvFvrAv9S#sE~U@o<> zyj)k6`-*mYz&&g?+`2Qhnp_W>R0~qFHkIzp8i_ayI@G0KH`A;G%zG_L*(NS8M9#iA zWkSt!N?%F~<%X_8Ta&Ac=U#A2@5D9^Hm<=Mqv@?wc0)9#J$T9d?HpU&7C_!IukXU) z6P?X}DS=U+d-BHMk^8g}E&YTmp&$%+9;Jjnpa$dFyLl&lh<&Jq0f|1QZOxUW;?`P= zV84yD5RRlTMqfm0u2IeS6JG@4DHC7#&jT!sO=^g&cYpC1J&_KK<@gx+8ANJjYhdsf zEIX27)ioYDe2dG0CAKJGr9wf{(yys>C{@9J+WZFEpl+dksZ`q+F|5mc<~`E8OB}rt z{>iGTX>?njhP3dl*uQ$f+jYPFBb&G6=9LMxu){<>KM=BLAdE=MNx4V+?WUXDqELa7 z-(pgW5^SA37vd06Mq~!%PWzhY%E>D4q{m&J&Xs8?H#>=|NuhfkXBw6dvI z&W`~Ay}Qv-; zDU-Nb1!NNaxAbi)FjbJi82v7jQ-|je>6so>HEKhLmd8N(c(6pAmqSS!jX0d zlbZ1XUXaygDa5n@FRQqFh|-+i^|n}b8%-@34=l6O&3C#E`Erc!lK)54t94F38}{5j zkjA1c$8Wbha+9hJI8%3PytCo};)+3U6FEUvlnOC{XB~AWXC8`-h=_n=x&r!(4O&?B zK&%kO)HiPz*4gZpb?{np)Z*D^8_b3&oOU)!iJL8=20R?eKFNMs;Uhsl{MUy8BX90a zr(1tbtJ)>A+>#>sm&BgJogB3y%g{|D43z?tckR zTy?R9Qa_&njB~t+zTN`T_i8Z9d7({ct`@C$5<2IfQ)OHh4=09Hlxkfk*VI@Kle zG!F6h-RqH0i(Mk#*6X1K4W^Fa5b5Sz*($yo1%I8_-n($0Uw5BZ*kT)e+-S$NkXbpp zb;^$ZmUGb4!?+2VQXV0gr`PW7%#x_2%!rSTvke|=Y;A5TC4X3xX~@mZokJI9G2)l@ zw{9`6@P&ME9|qLs4sRd&QC@xwWyf4i_!Xz%B{60n*s7p-c@f#x$EYbUALQu7lvt_e zrk;JV^MWksEDQyCcmS*=pVZ@;m8!h}x8Ooh7~LD&wAe8pT-MI+*Bg@kNI4IWt)4~1 zC4T-w`Ao7kH9M>HT@T0xhxCx}bO7dW_xQB+e2esL=DMfN)5%>6ga@;cW=-`!Y~EQf zGge^fd~{3Poju*d5eBEcdqVpHf9rSbO;wFe6(!(1X7+Z@|Gh!a9S{QYdZ&`UcU3Je zQ{P1CD@wljQo--HS?h_-zCVhIq7}Z?6ky+sWwUY7=+2LhL6pP`c_BaS*Cp{yb~tlk zR((^)VM}R0jo2K2hUv-4biobE_+R(w@KrUnaN0$0+=tWcn%`8{j@SmP1tJdF;8fr2 zuLL4TZyt1gj75MWh;za!Q0fm-)A0M+{?z(9EDN#2H+9S_GSX70H1wWrfEHoiun5{& z0%3vVAq!&z6O7>ZJAttxW2Q{C#{k2dT@lovn9T!jdj*4DwFw@u^WHX@3YFI&x*i~8 z@GpiNrN{EDvPuPGf3IA)xT#jmz?YZPV3a*~FkqK5GL=dV!_R4TwN?P~XaXYG-g1|- zXC60Ag7+)-FKOWX_nxX$`v1%c?@fA&u)v^fsn2f7(bz}m%G(^+v4Qg zp~eNC>CYMB4~V`s!3)bnulFY(5@r=ib`L*@rfw12YIRJD2H?bX*Y}{J8~BNB0Y53S zO3;iKt(ZI=kJMi>tkBL%UHll^O6Q1s`TG76zo)-D@%WAUxaAC%x&5^!kSfhn%E|E5fXmQUIt%%tRw^W77hv#fPsLiBMnE|ciu0x^nX`c>w zSATmf%ra->NboD>v5l}+{di(Ql2@Ubhob$+TK2r}I@{aMneHD3x)bPkKZq{}+y}|l zG8ji>D3DL-W&M!L9yW3S3Gnycd6VP?u=MC)F|TsL?M!LnFK?IQ`)hRoIqL{fj2<-6 z1rFsW)V6Rx?D-vE;lHp@G!T!%BmK045mfeBblU}L!{Q*?bx$_E9YMYLac+++>4Zpy zI&KNd|FKRIOq~@#hc$1%#DE*9?Dic26)hgI4c^!9xnm-s^SgPmi@jSN^r~DB+6J+m zy`S0u2pL$8N1n#oO4~jFS=WJhL40`aq-oP)ZnW?`M?v9AGqtg3R*!qH7@<+sChOxp z9M)>LbKb{IZbD8x1KS4Z%s-|6S^ECF1pYt$zKw_PYI{ze`*_-!+7P6a5mcbzC}%(P zIo^+A?$5s%1Ff9>C_KKkM4EQij9Ct&2}&hkSp*mgAR*S@c$Or?aFxmePaa>8 zd0>0pv-+&g`9P}&D!YLa1!z{aZafizh@fu7n7;!5nDXz^?_b^Se6St)@wu)T4gCUo zl@+=P4(-yv&oGnf#(>QwbD=MHHrK8R+OZ(hvhjwmQ!af?UQy9CNsW^rTI{6xu@9D> zw-zS~opi^0`nl3FrFYil&5r};macB5EFGjo5YH~vCK*bkF_ypUwa_`x*FA?toyjfj z?RSH|n-^@{TOWZ0HDa$;y!cre*w%cZ{h=0;=>1_m0a^y!)_gwzUFaPCC14h3a#67! zm#|_<=WuoTk2MMd!ouIrCVZjO;6x}DC?uSA=Ea&J6mwhR;+0QTG9%RjSV}JV-5u65 zITkKrYG`tPU3d3`za|JA4yU-MGW(C+%m#q$!lhgrNsxrNHA1Y#RTv6`|He;6m>0v4 z^wz8f=nL)nh^??f@snfooi3kUt}u=gKRSz!7^}H>-rJc268JE7u_e>`pMpz2g zyz(?sD?%RjTqr9xZ0~o>8$X^iIIo~gjx~!`L@$2{vi9+IeH>bta_`jfFTjgVcP(>A z$aPzj1yP~&exz}5F8zr{X8X(7>%tr!T>$Jt&2(%TOl_cB7QSy#&In>IJSQ!lfe!r? zu4>HuiQc_XxoZ5Ksfc=4xzs^j>p5UcB4b9cz=@Wse(t4U6nUF(uBmQom(Ug!bKPr8R4QEXIr zxGw%e8--^T61};tylII_ChkoJ%-XhZ%Ct(wWs&%KU8Pc%c?>bQ;C{b8!2C#@q-CB; z`XtV8=Xg@&vMT3PGztUfC+H`A<$dw9$7 z2xRuY)FIwc9f7-`GujK?C3b1D-DGzK{s6+TtQ}iC9Ang=b-(^4gk%!Pw1Hh$O?&>h z!041V{?l{6Nux4p4y}hw|NG3&Kosg#o&h;%a${5=FJi0Q$LAzi{GR4d@3gW;ynK&x zGkHa};Vgy)pGhd8F0k2fRz~oo0UWQ$@c&Gu7SY%w`OyYQBj!8gj5FB*b%cwY7+^|- zaY>7`9$8=w2T2xq^fZkP-vBk@uPmCRf>F}`&a=5Go4M3>?#6Klipc)F@5cr+==0>@ zAT0ud8tr%bGD%vvI8t}&ss#x;5f*G6zox5=KO%vi7;TPI97^HnldBoa@4Pz6&E4^{ zTW=gWWo%A3C`y{;#5 z;O2bjKk9uyq?KlRWIC0QE!tU|%_p|^|JMqh|0vD==LOM!eg7}N{P)Jdrj|q+fZcEd zp{WK$n)>hL81}U(Jb=Dm0+NsX$9}>8W#>YqLdxn>f%ZEZjeT*y2R*dKpB#n%annuiPSEBXo^YG@&yGN= zUD%$OJuHHN&*Rp}|Z8jU)DaJ5s^VOxWj7ha+NV&}@|6lO_rB2^hsfAI>T8=9`E=OGg1qhWeoctdH zA45}Wwpc#05s~j3puC+?gST9KDt!qk$x}Q%p2{BsL>3-vZf?)t-29#V5pl}o^EbU{ zGv$Rhr=2-|agg`gS<-jUA{12st}f&8;c-hBFFRtE!RS_b8l>c-H5=aInIAbE=>7_f z0wiE#G^_^8YHVx-+CFpp1_K(gtbs5xXw>C^4y#m{-jS8k?Ily$0Hs9|=_@e_k1${l z4?t1Z$87LgEzX$T5D-lGZ{aDHsukrxPhjKYTuiOH6L~G!n&?@;PqIeO9h^CG^%UO! zIZ1y^v$Fg|4nyD`tYXzzY?jl9^u@u-t}HHVI8LT7>V%Xqb3OaqTY<;r%(HkI)yChy zoE`w0N@D1n&P5$Xe&1}AeqJh3%9L0u1MzDD0#<9h@ZhwI*=Rbvdr zA{L>;hjl_^s%PtkSCCTb#@fQvCt*^U)Hr?7u!9XR!psHk0Bw<+brKBIKM?D8v;vGu zJu105Z4O>HmaX+aiAx3{+1#Xx94RDHHKFC(IpGKdKH5h4+jKEJ^bnQX4V_A0r9)qF7i7GAKB1`P5r=GS;pUH=@ zl#1}rO%r0hPw4}%%+W)z={ZL!BT8%H;|1O-&fJ4(Dzs|JE$gag$pd+-b*y`*b0z#BBFp57F#DxDjroVBQ;MrcNv*a7TA+nR0X&c8{d|+iUrd|v4 zS>onM1}P0zw{5X9f^ImuOjdQa0=?16;v)r~S)8x(qbK4YbtDd->v0aaV%7@l>nA_@ zD%XZqbgY=_89HeF9gyn9@0{{NXk9{tNk5@6=ZdK$aikNVp9}Owb;4}Qafv>nbPF6% zZ``#)`c?}E2?Z&5RFruvS@q(2AG&woZwGDeW#H+}cSNU(e)%tT8ULFB)h5V}c}XZ? T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..356c1897fcf8fd7870338852b959bdf37b4857e0 GIT binary patch literal 10483 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_account_with_contract_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..225f6427ed1517772b8695979e908d0206d387cd GIT binary patch literal 9691 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 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00002.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..fbea72d8f0418646c42bfbfdbf513b79ac710de0 GIT binary patch literal 8645 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9beedee22929bafb95003f962b3ead8ff3b244da GIT binary patch literal 10677 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_account_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9beedee22929bafb95003f962b3ead8ff3b244da GIT binary patch literal 10677 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8072d46ba3724406e0b827908ff8136c55d479 GIT binary patch literal 8642 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 T+zt3|hLEGZ%Q>uFVA{U{__8iD literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..9beedee22929bafb95003f962b3ead8ff3b244da GIT binary patch literal 10677 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 HZt?#CCc$_0 literal 0 HcmV?d00001 diff --git a/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png b/tests/ragger/snapshots/stax/test_eip712_advanced_trusted_name_contract_with_contract_account/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..cfee3aec2b96566ef135772ac1ad4ce169166f31 GIT binary patch literal 5988 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 NpP=tL{uOuSe*iQ6;hz8i literal 0 HcmV?d00001 diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 90f8022d6..3e5f19a3d 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -16,7 +16,7 @@ import client.response_parser as ResponseParser from client.utils import recover_message -from client.client import EthAppClient +from client.client import EthAppClient, TrustedNameType, TrustedNameSource from client.eip712 import InputData from client.settings import SettingID, settings_toggle @@ -639,3 +639,112 @@ def test_eip712_advanced_missing_token(firmware: Firmware, # verify signature addr = recover_message(data, vrs) assert addr == get_wallet_addr(app_client) + + +TRUSTED_NAMES = [ + (TrustedNameType.CONTRACT, TrustedNameSource.CAL, "Validator contract"), + (TrustedNameType.ACCOUNT, TrustedNameSource.ENS, "validator.eth"), +] + +FILT_TN_TYPES = [ + [TrustedNameType.CONTRACT], + [TrustedNameType.ACCOUNT], + [TrustedNameType.CONTRACT, TrustedNameType.ACCOUNT], + [TrustedNameType.ACCOUNT, TrustedNameType.CONTRACT], +] + + +@pytest.fixture(name="trusted_name", params=TRUSTED_NAMES) +def trusted_name_fixture(request) -> tuple: + return request.param + + +@pytest.fixture(name="filt_tn_types", params=FILT_TN_TYPES) +def filt_tn_types_fixture(request) -> list[TrustedNameType]: + return request.param + + +def test_eip712_advanced_trusted_name(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + default_screenshot_path: Path, + test_name: str, + trusted_name: tuple, + filt_tn_types: list[TrustedNameType], + golden_run: bool): + global SNAPS_CONFIG + + test_name += "_%s_with" % (str(trusted_name[0]).split(".")[-1].lower()) + for t in filt_tn_types: + test_name += "_%s" % (str(t).split(".")[-1].lower()) + SNAPS_CONFIG = SnapshotsConfig(test_name) + + app_client = EthAppClient(backend) + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + data = { + "types": { + "EIP712Domain": [ + {"name": "name", "type": "string"}, + {"name": "version", "type": "string"}, + {"name": "chainId", "type": "uint256"}, + {"name": "verifyingContract", "type": "address"}, + ], + "Root": [ + {"name": "validator", "type": "address"}, + {"name": "enable", "type": "bool"}, + ] + }, + "primaryType": "Root", + "domain": { + "name": "test", + "version": "1", + "verifyingContract": "0x0000000000000000000000000000000000000000", + "chainId": 1, + }, + "message": { + "validator": "0x1111111111111111111111111111111111111111", + "enable": True, + } + } + + filters = { + "name": "Trusted name test", + "fields": { + "validator": { + "type": "trusted_name", + "name": "Validator", + "tn_type": filt_tn_types, + "tn_source": [TrustedNameSource.CAL], + }, + "enable": { + "type": "raw", + "name": "State", + }, + } + } + + if trusted_name[0] is TrustedNameType.ACCOUNT: + challenge = ResponseParser.challenge(app_client.get_challenge().data) + else: + challenge = None + + app_client.provide_trusted_name_v2(bytes.fromhex(data["message"]["validator"][2:]), + trusted_name[2], + trusted_name[0], + trusted_name[1], + data["domain"]["chainId"], + challenge=challenge) + vrs = eip712_new_common(firmware, + navigator, + default_screenshot_path, + app_client, + data, + filters, + False, + golden_run) + + # verify signature + addr = recover_message(data, vrs) + assert addr == get_wallet_addr(app_client) From 074711343b403edc37290337448dee23e9f53493 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 20 Sep 2024 16:11:46 +0200 Subject: [PATCH 084/102] Fix CodeQL warning --- src/public_keys.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/public_keys.h b/src/public_keys.h index df4e69ea8..250d7dfa1 100644 --- a/src/public_keys.h +++ b/src/public_keys.h @@ -64,6 +64,7 @@ static const uint8_t LEDGER_NFT_METADATA_PUBLIC_KEY[] = { #endif }; +#ifdef HAVE_TRUSTED_NAME static const uint8_t TRUSTED_NAME_PUB_KEY[] = { #ifdef HAVE_TRUSTED_NAME_TEST_KEY 0x04, 0xb9, 0x1f, 0xbe, 0xc1, 0x73, 0xe3, 0xba, 0x4a, 0x71, 0x4e, 0x01, 0x4e, 0xbc, @@ -79,6 +80,7 @@ static const uint8_t TRUSTED_NAME_PUB_KEY[] = { 0xae, 0xf5, 0xaf, 0xcf, 0x90, 0xe8, 0x40, 0x88, 0x71 #endif }; +#endif // HAVE_TRUSTED_NAME // Only used for signing NFT plugins (ERC721 and ERC1155) static const uint8_t LEDGER_NFT_SELECTOR_PUBLIC_KEY[] = { From c68196ece53286dcbd94b67753be1d3d03813312 Mon Sep 17 00:00:00 2001 From: Charles-Edouard de la Vergne Date: Tue, 10 Sep 2024 12:00:56 +0200 Subject: [PATCH 085/102] Migrate nbgl_useCaseReview to nbgl_useCaseReviewBlindSigning --- src_features/signTx/logic_signTx.c | 5 ++- src_nbgl/ui_approve_tx.c | 61 ++++++++++++++---------------- src_nbgl/ui_blind_signing.c | 18 --------- 3 files changed, 33 insertions(+), 51 deletions(-) diff --git a/src_features/signTx/logic_signTx.c b/src_features/signTx/logic_signTx.c index 6aba49f37..55690e5fc 100644 --- a/src_features/signTx/logic_signTx.c +++ b/src_features/signTx/logic_signTx.c @@ -585,10 +585,13 @@ uint16_t finalizeParsing(void) { ui_idle(); io_seproxyhal_touch_tx_ok(); } else { +#ifdef HAVE_BAGL // If blind-signing detected, start the warning flow beforehand if (tmpContent.txContent.dataPresent) { ui_warning_blind_signing(); - } else { + } else +#endif + { start_signature_flow(); } } diff --git a/src_nbgl/ui_approve_tx.c b/src_nbgl/ui_approve_tx.c index 3553abb7f..e42209a57 100644 --- a/src_nbgl/ui_approve_tx.c +++ b/src_nbgl/ui_approve_tx.c @@ -167,20 +167,23 @@ static uint8_t setTagValuePairs(void) { return nbPairs; } -static void reviewCommon(void) { +void ux_approve_tx(bool fromPlugin) { explicit_bzero(&pairsList, sizeof(pairsList)); + explicit_bzero(&tx_approval_context, sizeof(tx_approval_context)); + tx_approval_context.fromPlugin = fromPlugin; + + uint64_t chain_id = get_tx_chain_id(); + if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) { + tx_approval_context.displayNetwork = true; + } else { + tx_approval_context.displayNetwork = false; + } pairsList.nbPairs = setTagValuePairs(); pairsList.pairs = pairs; - nbgl_operationType_t op = TYPE_TRANSACTION; -#if API_LEVEL >= 19 - if (tmpContent.txContent.dataPresent) { - op |= BLIND_OPERATION; - } -#endif + uint32_t buf_size = SHARED_BUFFER_SIZE / 2; if (tx_approval_context.fromPlugin) { - uint32_t buf_size = SHARED_BUFFER_SIZE / 2; char op_name[sizeof(strings.common.fullAmount)]; plugin_ui_get_id(); @@ -198,36 +201,30 @@ static void reviewCommon(void) { op_name, (pluginType == EXTERNAL ? "on " : ""), strings.common.toAddress); + } else { + snprintf(g_stax_shared_buffer, buf_size, REVIEW("transaction")); + snprintf( + g_stax_shared_buffer + buf_size, + buf_size, + tmpContent.txContent.dataPresent ? BLIND_SIGN("transaction") : SIGN("transaction")); + } - nbgl_useCaseReview(op, + if (tmpContent.txContent.dataPresent) { + nbgl_useCaseReviewBlindSigning(TYPE_TRANSACTION, + &pairsList, + get_tx_icon(), + g_stax_shared_buffer, + NULL, + g_stax_shared_buffer + buf_size, + NULL, + reviewChoice); + } else { + nbgl_useCaseReview(TYPE_TRANSACTION, &pairsList, get_tx_icon(), g_stax_shared_buffer, NULL, g_stax_shared_buffer + buf_size, reviewChoice); - } else { - nbgl_useCaseReview( - op, - &pairsList, - get_tx_icon(), - REVIEW("transaction"), - NULL, - tmpContent.txContent.dataPresent ? BLIND_SIGN("transaction") : SIGN("transaction"), - reviewChoice); } } - -void ux_approve_tx(bool fromPlugin) { - memset(&tx_approval_context, 0, sizeof(tx_approval_context)); - - tx_approval_context.fromPlugin = fromPlugin; - tx_approval_context.displayNetwork = false; - - uint64_t chain_id = get_tx_chain_id(); - if (chainConfig->chainId == ETHEREUM_MAINNET_CHAINID && chain_id != chainConfig->chainId) { - tx_approval_context.displayNetwork = true; - } - - reviewCommon(); -} diff --git a/src_nbgl/ui_blind_signing.c b/src_nbgl/ui_blind_signing.c index 12b7a05e5..2e29544b2 100644 --- a/src_nbgl/ui_blind_signing.c +++ b/src_nbgl/ui_blind_signing.c @@ -13,14 +13,6 @@ static void ui_error_blind_signing_choice(bool confirm) { } } -static void ui_warning_blind_signing_choice(bool confirm) { - if (confirm) { - io_seproxyhal_send_status(APDU_RESPONSE_CONDITION_NOT_SATISFIED, 0, true, true); - } else { - start_signature_flow(); - } -} - void ui_error_blind_signing(void) { nbgl_useCaseChoice(&C_Warning_64px, "This transaction cannot be clear-signed", @@ -29,13 +21,3 @@ void ui_error_blind_signing(void) { "Reject transaction", ui_error_blind_signing_choice); } - -void ui_warning_blind_signing(void) { - nbgl_useCaseChoice(&C_Warning_64px, - "Blind signing ahead", - "This transaction's details are not fully verifiable. If you sign it, you " - "could lose all your assets.", - "Back to safety", - "Continue anyway", - ui_warning_blind_signing_choice); -} From 1f5fc88330cac0b992c0273ef799e62050356b8b Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 23 Sep 2024 15:36:27 +0200 Subject: [PATCH 086/102] Added blind-signing friction to the EIP-712 flow --- src/common_ui.h | 2 + src_bagl/ui_flow.h | 2 + src_bagl/ui_flow_signMessage712.c | 53 +++++++++++++++++-- src_features/signMessageEIP712/commands_712.c | 7 ++- src_features/signMessageEIP712/context_712.c | 1 + src_features/signMessageEIP712/context_712.h | 1 + src_features/signMessageEIP712/ui_logic.c | 21 ++++++-- src_features/signMessageEIP712/ui_logic.h | 2 +- src_nbgl/ui_blind_signing.c | 1 + src_nbgl/ui_message_signing.h | 9 ++-- src_nbgl/ui_sign_712.c | 20 ++++++- 11 files changed, 103 insertions(+), 16 deletions(-) diff --git a/src/common_ui.h b/src/common_ui.h index 677863d47..e29874bbb 100644 --- a/src/common_ui.h +++ b/src/common_ui.h @@ -3,6 +3,7 @@ #include #include +#include "ui_logic.h" void ui_idle(void); void ui_warning_blind_signing(void); @@ -24,6 +25,7 @@ void ui_191_switch_to_question(void); // EIP-712 void ui_712_start(void); +void ui_712_start_unfiltered(void); void ui_712_switch_to_message(void); void ui_712_switch_to_sign(void); diff --git a/src_bagl/ui_flow.h b/src_bagl/ui_flow.h index 1bc3074b8..5a040e68c 100644 --- a/src_bagl/ui_flow.h +++ b/src_bagl/ui_flow.h @@ -32,4 +32,6 @@ extern const ux_flow_step_t* const ux_display_privacy_shared_secret_flow[]; extern const ux_flow_step_t* ux_approval_tx_flow[15]; +extern const ux_flow_step_t ux_warning_blind_signing_warn_step; + #endif // _UI_FLOW_H_ diff --git a/src_bagl/ui_flow_signMessage712.c b/src_bagl/ui_flow_signMessage712.c index 7a52baa4a..1596abdc0 100644 --- a/src_bagl/ui_flow_signMessage712.c +++ b/src_bagl/ui_flow_signMessage712.c @@ -3,9 +3,14 @@ #include "ui_logic.h" #include "shared_context.h" // strings #include "common_ui.h" +#include "ui_flow.h" // ux_warning_blind_signing_warn_step enum { UI_712_POS_REVIEW, UI_712_POS_END }; static uint8_t ui_pos; +static bool filtered; + +// forward declaration for the BAGL step +static void ui_712_start_flow(void); static void dummy_cb(void) { switch (ui_712_next_field()) { @@ -72,6 +77,15 @@ UX_STEP_CB( &C_icon_validate_14, "Approve", }); +UX_STEP_CB( + ux_712_step_approve_risky, + pbb, + _approve_cb(), + { + &C_icon_validate_14, + "Accept risk", + "and sign", + }); UX_STEP_CB( ux_712_step_reject, pb, @@ -80,6 +94,15 @@ UX_STEP_CB( &C_icon_crossmark, "Reject", }); + +UX_STEP_INIT( + ux_712_warning_blind_signing_jump_step, + NULL, + NULL, + { + ui_712_start_flow(); + } +); // clang-format on UX_FLOW(ux_712_flow, @@ -89,18 +112,40 @@ UX_FLOW(ux_712_flow, &ux_712_step_approve, &ux_712_step_reject); -void ui_712_start(void) { - ux_flow_init(0, ux_712_flow, NULL); +UX_FLOW(ux_712_flow_unfiltered, + &ux_712_step_review, + &ux_712_step_dynamic, + &ux_712_step_dummy, + &ux_712_step_approve_risky, + &ux_712_step_reject); + +UX_FLOW(ux_712_warning_blind_signing_flow, + &ux_warning_blind_signing_warn_step, + &ux_712_warning_blind_signing_jump_step); + +static void ui_712_start_flow(void) { + ux_flow_init(0, filtered ? ux_712_flow : ux_712_flow_unfiltered, NULL); ui_pos = UI_712_POS_REVIEW; } +void ui_712_start(void) { + filtered = true; + ui_712_start_flow(); +} + +void ui_712_start_unfiltered(void) { + filtered = false; + ux_flow_init(0, ux_712_warning_blind_signing_flow, NULL); +} void ui_712_switch_to_message(void) { - ux_flow_init(0, ux_712_flow, &ux_712_step_dynamic); + ux_flow_init(0, filtered ? ux_712_flow : ux_712_flow_unfiltered, &ux_712_step_dynamic); ui_pos = UI_712_POS_REVIEW; } void ui_712_switch_to_sign(void) { - ux_flow_init(0, ux_712_flow, &ux_712_step_approve); + ux_flow_init(0, + filtered ? ux_712_flow : ux_712_flow_unfiltered, + filtered ? &ux_712_step_approve : &ux_712_step_approve_risky); ui_pos = UI_712_POS_END; } diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index 174e6ed5e..f248779f4 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -44,14 +44,19 @@ * @param[in] success whether the command was successful */ static void apdu_reply(bool success) { + bool home = true; + if (success) { apdu_response_code = APDU_RESPONSE_OK; } else { if (apdu_response_code == APDU_RESPONSE_OK) { // somehow not set apdu_response_code = APDU_RESPONSE_ERROR_NO_INFO; } + if (eip712_context != NULL) { + home = eip712_context->go_home_on_failure; + } eip712_context_deinit(); - ui_idle(); + if (home) ui_idle(); } } diff --git a/src_features/signMessageEIP712/context_712.c b/src_features/signMessageEIP712/context_712.c index 57d5be6dd..89a2a98b0 100644 --- a/src_features/signMessageEIP712/context_712.c +++ b/src_features/signMessageEIP712/context_712.c @@ -55,6 +55,7 @@ bool eip712_context_init(void) { // Since they are optional, they might not be provided by the JSON data explicit_bzero(eip712_context->contract_addr, sizeof(eip712_context->contract_addr)); eip712_context->chain_id = 0; + eip712_context->go_home_on_failure = true; struct_state = NOT_INITIALIZED; diff --git a/src_features/signMessageEIP712/context_712.h b/src_features/signMessageEIP712/context_712.h index 2ae5c8daf..2b020973f 100644 --- a/src_features/signMessageEIP712/context_712.h +++ b/src_features/signMessageEIP712/context_712.h @@ -10,6 +10,7 @@ typedef struct { uint8_t contract_addr[ADDRESS_LENGTH]; uint64_t chain_id; uint8_t schema_hash[224 / 8]; + bool go_home_on_failure; } s_eip712_context; extern s_eip712_context *eip712_context; diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index 07376c311..a53222893 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -54,7 +54,7 @@ typedef struct { typedef struct { bool shown; bool end_reached; - uint8_t filtering_mode; + e_eip712_filtering_mode filtering_mode; uint8_t filters_to_process; uint8_t field_flags; uint8_t structs_to_review; @@ -154,13 +154,26 @@ void ui_712_set_value(const char *str, size_t length) { /** * Redraw the dynamic UI step that shows EIP712 information */ -void ui_712_redraw_generic_step(void) { +bool ui_712_redraw_generic_step(void) { if (!ui_ctx->shown) { // Initialize if it is not already - ui_712_start(); + if ((ui_ctx->filtering_mode == EIP712_FILTERING_BASIC) && !N_storage.dataAllowed && + !N_storage.verbose_eip712) { + // Both settings not enabled => Error + ui_error_blind_signing(); + apdu_response_code = APDU_RESPONSE_INVALID_DATA; + eip712_context->go_home_on_failure = false; + return false; + } + if (ui_ctx->filtering_mode == EIP712_FILTERING_BASIC) { + ui_712_start_unfiltered(); + } else { + ui_712_start(); + } ui_ctx->shown = true; } else { ui_712_switch_to_message(); } + return true; } /** @@ -652,7 +665,7 @@ bool ui_712_feed_to_display(const void *field_ptr, // Check if this field is supposed to be displayed if (last && ui_712_field_shown()) { - ui_712_redraw_generic_step(); + if (!ui_712_redraw_generic_step()) return false; } return true; } diff --git a/src_features/signMessageEIP712/ui_logic.h b/src_features/signMessageEIP712/ui_logic.h index 2ee134e7a..7d60dc4fc 100644 --- a/src_features/signMessageEIP712/ui_logic.h +++ b/src_features/signMessageEIP712/ui_logic.h @@ -30,7 +30,7 @@ unsigned int ui_712_reject(); void ui_712_set_title(const char *str, size_t length); void ui_712_set_value(const char *str, size_t length); void ui_712_message_hash(void); -void ui_712_redraw_generic_step(void); +bool ui_712_redraw_generic_step(void); void ui_712_flag_field(bool show, bool name_provided, bool token_join, diff --git a/src_nbgl/ui_blind_signing.c b/src_nbgl/ui_blind_signing.c index 2e29544b2..ba0a40fb8 100644 --- a/src_nbgl/ui_blind_signing.c +++ b/src_nbgl/ui_blind_signing.c @@ -4,6 +4,7 @@ #include "feature_signTx.h" #include "ui_nbgl.h" #include "apdu_constants.h" +#include "context_712.h" static void ui_error_blind_signing_choice(bool confirm) { if (confirm) { diff --git a/src_nbgl/ui_message_signing.h b/src_nbgl/ui_message_signing.h index 48412fe41..cbdb7b22c 100644 --- a/src_nbgl/ui_message_signing.h +++ b/src_nbgl/ui_message_signing.h @@ -4,10 +4,11 @@ #include #include "ui_signing.h" -#define TEXT_MESSAGE "message" -#define TEXT_TYPED_MESSAGE "typed " TEXT_MESSAGE -#define TEXT_REVIEW_EIP712 REVIEW(TEXT_TYPED_MESSAGE) -#define TEXT_SIGN_EIP712 SIGN(TEXT_TYPED_MESSAGE) +#define TEXT_MESSAGE "message" +#define TEXT_TYPED_MESSAGE "typed " TEXT_MESSAGE +#define TEXT_REVIEW_EIP712 REVIEW(TEXT_TYPED_MESSAGE) +#define TEXT_SIGN_EIP712 SIGN(TEXT_TYPED_MESSAGE) +#define TEXT_BLIND_SIGN_EIP712 BLIND_SIGN(TEXT_TYPED_MESSAGE) void ui_typed_message_review_choice(bool confirm); diff --git a/src_nbgl/ui_sign_712.c b/src_nbgl/ui_sign_712.c index a2ca46dd8..9becf63a4 100644 --- a/src_nbgl/ui_sign_712.c +++ b/src_nbgl/ui_sign_712.c @@ -8,11 +8,13 @@ #include "nbgl_use_case.h" #include "ui_message_signing.h" #include "ledger_assert.h" +#include "apdu_constants.h" static nbgl_contentTagValue_t pairs[7]; static nbgl_contentTagValueList_t pairs_list; static uint8_t pair_idx; static size_t buf_idx; +static bool filtered; static void message_progress(bool confirm) { char *buf; @@ -66,13 +68,26 @@ static void message_update(bool confirm) { } } -void ui_712_start(void) { +static void ui_712_start_common(bool has_filtering) { explicit_bzero(&pairs, sizeof(pairs)); explicit_bzero(&pairs_list, sizeof(pairs_list)); pairs_list.pairs = pairs; pair_idx = 0; buf_idx = 0; + filtered = has_filtering; +} +void ui_712_start_unfiltered(void) { + ui_712_start_common(false); + nbgl_useCaseReviewStreamingBlindSigningStart(TYPE_MESSAGE, + &C_Review_64px, + TEXT_REVIEW_EIP712, + NULL, + message_update); +} + +void ui_712_start(void) { + ui_712_start_common(true); nbgl_useCaseReviewStreamingStart(TYPE_MESSAGE, &C_Review_64px, TEXT_REVIEW_EIP712, @@ -90,7 +105,8 @@ void ui_712_switch_to_sign(void) { pair_idx = 0; nbgl_useCaseReviewStreamingContinue(&pairs_list, message_progress); } else { - nbgl_useCaseReviewStreamingFinish(TEXT_SIGN_EIP712, ui_typed_message_review_choice); + nbgl_useCaseReviewStreamingFinish(filtered ? TEXT_SIGN_EIP712 : TEXT_BLIND_SIGN_EIP712, + ui_typed_message_review_choice); } } From ff163832fa0444a59bfbd4b30f1713bbc8d44afb Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 23 Sep 2024 17:19:59 +0200 Subject: [PATCH 087/102] Ragger tests --- tests/ragger/test_eip712.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 3e5f19a3d..d7bf04c24 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -13,10 +13,11 @@ from ragger.firmware import Firmware from ragger.navigator import Navigator, NavInsID from ragger.navigator.navigation_scenario import NavigateWithScenario +from ragger.error import ExceptionRAPDU import client.response_parser as ResponseParser from client.utils import recover_message -from client.client import EthAppClient, TrustedNameType, TrustedNameSource +from client.client import EthAppClient, StatusWord, TrustedNameType, TrustedNameSource from client.eip712 import InputData from client.settings import SettingID, settings_toggle @@ -158,6 +159,7 @@ def test_eip712_new(firmware: Firmware, input_file: Path, verbose: bool, filtering: bool): + settings_to_toggle: list[SettingID] = [] app_client = EthAppClient(backend) if firmware == Firmware.NANOS: pytest.skip("Not supported on LNS") @@ -172,9 +174,14 @@ def test_eip712_new(firmware: Firmware, filters = json.load(f) except (IOError, json.decoder.JSONDecodeError) as e: pytest.skip(f"{filterfile.name}: {e.strerror}") + else: + settings_to_toggle.append(SettingID.BLIND_SIGNING) if verbose: - settings_toggle(firmware, navigator, [SettingID.VERBOSE_EIP712]) + settings_to_toggle.append(SettingID.VERBOSE_EIP712) + + if len(settings_to_toggle) > 0: + settings_toggle(firmware, navigator, settings_to_toggle) with open(input_file, encoding="utf-8") as file: data = json.load(file) @@ -748,3 +755,24 @@ def test_eip712_advanced_trusted_name(firmware: Firmware, # verify signature addr = recover_message(data, vrs) assert addr == get_wallet_addr(app_client) + + +def test_eip712_bs_not_activated_error(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + default_screenshot_path: Path): + app_client = EthAppClient(backend) + if firmware == Firmware.NANOS: + pytest.skip("Not supported on LNS") + + with pytest.raises(ExceptionRAPDU) as e: + eip712_new_common(firmware, + navigator, + default_screenshot_path, + app_client, + ADVANCED_DATA_SETS[0].data, + None, + False, + False) + InputData.disable_autonext() # so the timer stops firing + assert e.value.status == StatusWord.INVALID_DATA From 1b83aa12392311e7254ea0b159453f140bc6865c Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 23 Sep 2024 18:25:55 +0200 Subject: [PATCH 088/102] Fix Ragger tests NBGL navigation for EIP-712 blind signing warning screen --- tests/ragger/test_eip712.py | 60 +++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index d7bf04c24..69343d573 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -22,18 +22,11 @@ from client.settings import SettingID, settings_toggle -class SnapshotsConfig: - test_name: str - idx: int - - def __init__(self, test_name: str, idx: int = 0): - self.test_name = test_name - self.idx = idx - - BIP32_PATH = "m/44'/60'/0'/0/0" -SNAPS_CONFIG: Optional[SnapshotsConfig] = None +autonext_idx: int +snapshots_dirname: Optional[str] = None WALLET_ADDR: Optional[bytes] = None +unfiltered_flow: bool def eip712_json_path() -> str: @@ -90,23 +83,28 @@ def test_eip712_legacy(backend: BackendInterface, scenario_navigator: NavigateWi def autonext(firmware: Firmware, navigator: Navigator, default_screenshot_path: Path): + global autonext_idx + moves = [] if firmware.is_nano: moves = [NavInsID.RIGHT_CLICK] else: - moves = [NavInsID.SWIPE_CENTER_TO_LEFT] - if SNAPS_CONFIG is not None: + if autonext_idx == 0 and unfiltered_flow: + moves = [NavInsID.USE_CASE_CHOICE_REJECT] + else: + moves = [NavInsID.SWIPE_CENTER_TO_LEFT] + if snapshots_dirname is not None: navigator.navigate_and_compare(default_screenshot_path, - SNAPS_CONFIG.test_name, + snapshots_dirname, moves, screen_change_before_first_instruction=False, screen_change_after_last_instruction=False, - snap_start_idx=SNAPS_CONFIG.idx) - SNAPS_CONFIG.idx += 1 + snap_start_idx=autonext_idx) else: navigator.navigate(moves, screen_change_before_first_instruction=False, screen_change_after_last_instruction=False) + autonext_idx += 1 def eip712_new_common(firmware: Firmware, @@ -117,11 +115,16 @@ def eip712_new_common(firmware: Firmware, filters: Optional[dict], verbose: bool, golden_run: bool): + global autonext_idx + global unfiltered_flow + + autonext_idx = 0 assert InputData.process_data(app_client, json_data, filters, partial(autonext, firmware, navigator, default_screenshot_path), golden_run) + unfiltered_flow = False # reset value with app_client.eip712_sign_new(BIP32_PATH): moves = [] if firmware.is_nano: @@ -136,13 +139,13 @@ def eip712_new_common(firmware: Firmware, if not verbose and filters is None: moves += [NavInsID.SWIPE_CENTER_TO_LEFT] moves += [NavInsID.USE_CASE_REVIEW_CONFIRM] - if SNAPS_CONFIG is not None: + if snapshots_dirname is not None: # Could break (time-out) if given a JSON that requires less moves # TODO: Maybe take list of moves as input instead of trying to guess them ? navigator.navigate_and_compare(default_screenshot_path, - SNAPS_CONFIG.test_name, + snapshots_dirname, moves, - snap_start_idx=SNAPS_CONFIG.idx) + snap_start_idx=autonext_idx) else: # Do them one-by-one to prevent an unnecessary move from timing-out and failing the test for move in moves: @@ -159,6 +162,8 @@ def test_eip712_new(firmware: Firmware, input_file: Path, verbose: bool, filtering: bool): + global unfiltered_flow + settings_to_toggle: list[SettingID] = [] app_client = EthAppClient(backend) if firmware == Firmware.NANOS: @@ -180,6 +185,9 @@ def test_eip712_new(firmware: Firmware, if verbose: settings_to_toggle.append(SettingID.VERBOSE_EIP712) + if not filters or verbose: + unfiltered_flow = True + if len(settings_to_toggle) > 0: settings_toggle(firmware, navigator, settings_to_toggle) @@ -424,13 +432,13 @@ def test_eip712_advanced_filtering(firmware: Firmware, test_name: str, data_set: DataSet, golden_run: bool): - global SNAPS_CONFIG + global snapshots_dirname app_client = EthAppClient(backend) if firmware == Firmware.NANOS: pytest.skip("Not supported on LNS") - SNAPS_CONFIG = SnapshotsConfig(test_name + data_set.suffix) + snapshots_dirname = test_name + data_set.suffix vrs = eip712_new_common(firmware, navigator, @@ -452,13 +460,13 @@ def test_eip712_filtering_empty_array(firmware: Firmware, default_screenshot_path: Path, test_name: str, golden_run: bool): - global SNAPS_CONFIG + global snapshots_dirname app_client = EthAppClient(backend) if firmware == Firmware.NANOS: pytest.skip("Not supported on LNS") - SNAPS_CONFIG = SnapshotsConfig(test_name) + snapshots_dirname = test_name data = { "types": { @@ -571,10 +579,10 @@ def test_eip712_advanced_missing_token(firmware: Firmware, test_name: str, tokens: list[dict], golden_run: bool): - global SNAPS_CONFIG + global snapshots_dirname test_name += "-%s-%s" % (len(tokens[0]) == 0, len(tokens[1]) == 0) - SNAPS_CONFIG = SnapshotsConfig(test_name) + snapshots_dirname = test_name app_client = EthAppClient(backend) if firmware == Firmware.NANOS: @@ -679,12 +687,12 @@ def test_eip712_advanced_trusted_name(firmware: Firmware, trusted_name: tuple, filt_tn_types: list[TrustedNameType], golden_run: bool): - global SNAPS_CONFIG + global snapshots_dirname test_name += "_%s_with" % (str(trusted_name[0]).split(".")[-1].lower()) for t in filt_tn_types: test_name += "_%s" % (str(t).split(".")[-1].lower()) - SNAPS_CONFIG = SnapshotsConfig(test_name) + snapshots_dirname = test_name app_client = EthAppClient(backend) if firmware == Firmware.NANOS: From 6018bcc616d0476658f85345d23bfc02e372b4b2 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 23 Sep 2024 15:11:17 +0200 Subject: [PATCH 089/102] Now EIP-712 NBGL flow has a skip button when not using filtering --- src_nbgl/ui_sign_712.c | 59 +++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/src_nbgl/ui_sign_712.c b/src_nbgl/ui_sign_712.c index 9becf63a4..bc9a32525 100644 --- a/src_nbgl/ui_sign_712.c +++ b/src_nbgl/ui_sign_712.c @@ -15,21 +15,24 @@ static nbgl_contentTagValueList_t pairs_list; static uint8_t pair_idx; static size_t buf_idx; static bool filtered; +static bool review_skipped; static void message_progress(bool confirm) { char *buf; size_t buf_size; size_t shift_off; - if (pairs_list.nbPairs < pair_idx) { - buf = get_ui_pairs_buffer(&buf_size); - memmove(&pairs[0], &pairs[pairs_list.nbPairs], sizeof(pairs[0])); - memmove(buf, pairs[0].item, (buf + buf_idx) - pairs[0].item); - shift_off = pairs[0].item - buf; - buf_idx -= shift_off; - pairs[0].value -= shift_off; - pairs[0].item = buf; - pair_idx = 1; + if (!review_skipped) { + if (pairs_list.nbPairs < pair_idx) { + buf = get_ui_pairs_buffer(&buf_size); + memmove(&pairs[0], &pairs[pairs_list.nbPairs], sizeof(pairs[0])); + memmove(buf, pairs[0].item, (buf + buf_idx) - pairs[0].item); + shift_off = pairs[0].item - buf; + buf_idx -= shift_off; + pairs[0].value -= shift_off; + pairs[0].item = buf; + pair_idx = 1; + } } if (confirm) { if (ui_712_next_field() == EIP712_NO_MORE_FIELD) { @@ -40,6 +43,11 @@ static void message_progress(bool confirm) { } } +static void review_skip(void) { + review_skipped = true; + message_progress(true); +} + static void message_update(bool confirm) { char *buf; size_t buf_size; @@ -48,18 +56,20 @@ static void message_update(bool confirm) { buf = get_ui_pairs_buffer(&buf_size); if (confirm) { - buf_off = strlen(strings.tmp.tmp2) + 1; - LEDGER_ASSERT((buf_idx + buf_off) < buf_size, "UI pairs buffer overflow"); - pairs[pair_idx].item = memmove(buf + buf_idx, strings.tmp.tmp2, buf_off); - buf_idx += buf_off; - buf_off = strlen(strings.tmp.tmp) + 1; - LEDGER_ASSERT((buf_idx + buf_off) < buf_size, "UI pairs buffer overflow"); - pairs[pair_idx].value = memmove(buf + buf_idx, strings.tmp.tmp, buf_off); - buf_idx += buf_off; - pair_idx += 1; - pairs_list.nbPairs = nbgl_useCaseGetNbTagValuesInPage(pair_idx, &pairs_list, 0, &flag); - if ((pair_idx == ARRAYLEN(pairs)) || (pairs_list.nbPairs < pair_idx)) { - nbgl_useCaseReviewStreamingContinue(&pairs_list, message_progress); + if (!review_skipped) { + buf_off = strlen(strings.tmp.tmp2) + 1; + LEDGER_ASSERT((buf_idx + buf_off) < buf_size, "UI pairs buffer overflow"); + pairs[pair_idx].item = memmove(buf + buf_idx, strings.tmp.tmp2, buf_off); + buf_idx += buf_off; + buf_off = strlen(strings.tmp.tmp) + 1; + LEDGER_ASSERT((buf_idx + buf_off) < buf_size, "UI pairs buffer overflow"); + pairs[pair_idx].value = memmove(buf + buf_idx, strings.tmp.tmp, buf_off); + buf_idx += buf_off; + pair_idx += 1; + pairs_list.nbPairs = nbgl_useCaseGetNbTagValuesInPage(pair_idx, &pairs_list, 0, &flag); + } + if (!review_skipped && ((pair_idx == ARRAYLEN(pairs)) || (pairs_list.nbPairs < pair_idx))) { + nbgl_useCaseReviewStreamingContinueExt(&pairs_list, message_progress, review_skip); } else { message_progress(true); } @@ -75,11 +85,12 @@ static void ui_712_start_common(bool has_filtering) { pair_idx = 0; buf_idx = 0; filtered = has_filtering; + review_skipped = false; } void ui_712_start_unfiltered(void) { ui_712_start_common(false); - nbgl_useCaseReviewStreamingBlindSigningStart(TYPE_MESSAGE, + nbgl_useCaseReviewStreamingBlindSigningStart(TYPE_MESSAGE | SKIPPABLE_OPERATION, &C_Review_64px, TEXT_REVIEW_EIP712, NULL, @@ -100,10 +111,10 @@ void ui_712_switch_to_message(void) { } void ui_712_switch_to_sign(void) { - if (pair_idx > 0) { + if (!review_skipped && (pair_idx > 0)) { pairs_list.nbPairs = pair_idx; pair_idx = 0; - nbgl_useCaseReviewStreamingContinue(&pairs_list, message_progress); + nbgl_useCaseReviewStreamingContinueExt(&pairs_list, message_progress, review_skip); } else { nbgl_useCaseReviewStreamingFinish(filtered ? TEXT_SIGN_EIP712 : TEXT_BLIND_SIGN_EIP712, ui_typed_message_review_choice); From 0f4c616a17396c6f68ee1ae76aa54aedff6cd4c9 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 24 Sep 2024 10:42:09 +0200 Subject: [PATCH 090/102] EIP-712 NBGL unfiltered flow now defaults to raw/verbose mode --- src_features/signMessageEIP712/commands_712.c | 11 ++++++++-- src_features/signMessageEIP712/ui_logic.c | 21 ++++++++++++++++--- src_features/signMessageEIP712/ui_logic.h | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index f248779f4..ad7f6df34 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -135,9 +135,14 @@ uint16_t handle_eip712_struct_impl(uint8_t p1, // set root type ret = path_set_root((char *) cdata, length); if (ret) { +#ifdef SCREEN_SIZE_WALLET + if (ui_712_get_filtering_mode() == EIP712_FILTERING_BASIC) { +#else if (N_storage.verbose_eip712) { - ui_712_review_struct(path_get_root()); - reply_apdu = false; +#endif + if ((ret = ui_712_review_struct(path_get_root()))) { + reply_apdu = false; + } } ui_712_field_flags_reset(); } @@ -268,9 +273,11 @@ uint16_t handle_eip712_sign(const uint8_t *cdata, uint8_t length, uint32_t *flag } else if (parseBip32(cdata, &length, &tmpCtx.messageSigningContext.bip32) == NULL) { apdu_response_code = APDU_RESPONSE_INVALID_DATA; } else { +#ifndef SCREEN_SIZE_WALLET if (!N_storage.verbose_eip712 && (ui_712_get_filtering_mode() == EIP712_FILTERING_BASIC)) { ui_712_message_hash(); } +#endif ret = true; ui_712_end_sign(); } diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index a53222893..e66ae90e3 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -82,7 +82,11 @@ static bool ui_712_field_shown(void) { bool ret = false; if (ui_ctx->filtering_mode == EIP712_FILTERING_BASIC) { +#ifdef SCREEN_SIZE_WALLET + if (true) { +#else if (N_storage.verbose_eip712 || (path_get_root_type() == ROOT_DOMAIN)) { +#endif ret = true; } } else { // EIP712_FILTERING_FULL @@ -153,6 +157,8 @@ void ui_712_set_value(const char *str, size_t length) { /** * Redraw the dynamic UI step that shows EIP712 information + * + * @return whether it was successful or not */ bool ui_712_redraw_generic_step(void) { if (!ui_ctx->shown) { // Initialize if it is not already @@ -207,21 +213,22 @@ e_eip712_nfs ui_712_next_field(void) { * Used to notify of a new struct to review * * @param[in] struct_ptr pointer to the structure to be shown + * @return whether it was successful or not */ -void ui_712_review_struct(const void *struct_ptr) { +bool ui_712_review_struct(const void *struct_ptr) { const char *struct_name; uint8_t struct_name_length; const char *title = "Review struct"; if (ui_ctx == NULL) { - return; + return false; } ui_712_set_title(title, strlen(title)); if ((struct_name = get_struct_name(struct_ptr, &struct_name_length)) != NULL) { ui_712_set_value(struct_name, struct_name_length); } - ui_712_redraw_generic_step(); + return ui_712_redraw_generic_step(); } /** @@ -680,7 +687,11 @@ void ui_712_end_sign(void) { return; } +#ifdef SCREEN_SIZE_WALLET + if (true) { +#else if (N_storage.verbose_eip712 || (ui_ctx->filtering_mode == EIP712_FILTERING_FULL)) { +#endif ui_ctx->end_reached = true; ui_712_switch_to_sign(); } @@ -812,7 +823,11 @@ void ui_712_field_flags_reset(void) { * Makes it so the user will have to go through a "Review struct" screen */ void ui_712_queue_struct_to_review(void) { +#ifdef SCREEN_SIZE_WALLET + if (true) { +#else if (N_storage.verbose_eip712) { +#endif ui_ctx->structs_to_review += 1; } } diff --git a/src_features/signMessageEIP712/ui_logic.h b/src_features/signMessageEIP712/ui_logic.h index 7d60dc4fc..1cc2bc6d2 100644 --- a/src_features/signMessageEIP712/ui_logic.h +++ b/src_features/signMessageEIP712/ui_logic.h @@ -18,7 +18,7 @@ typedef enum { bool ui_712_init(void); void ui_712_deinit(void); e_eip712_nfs ui_712_next_field(void); -void ui_712_review_struct(const void *const struct_ptr); +bool ui_712_review_struct(const void *const struct_ptr); bool ui_712_feed_to_display(const void *field_ptr, const uint8_t *data, uint8_t length, From b895e8daaad1fe1abccb37b300135f58c445830e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 24 Sep 2024 11:29:51 +0200 Subject: [PATCH 091/102] Fix uninitialized global variable in EIP712 Ragger tests --- tests/ragger/test_eip712.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 69343d573..0d7854816 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -26,7 +26,7 @@ autonext_idx: int snapshots_dirname: Optional[str] = None WALLET_ADDR: Optional[bytes] = None -unfiltered_flow: bool +unfiltered_flow: bool = False def eip712_json_path() -> str: From 92b6b5cc2e9faf56e8a59615b2bf2957656dab00 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 24 Sep 2024 13:29:58 +0200 Subject: [PATCH 092/102] EIP-712 skip function ragger test --- tests/ragger/test_eip712.py | 66 ++++++++++++++++++++++++++++++++----- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 0d7854816..741e9879f 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -11,7 +11,7 @@ from ragger.backend import BackendInterface from ragger.firmware import Firmware -from ragger.navigator import Navigator, NavInsID +from ragger.navigator import Navigator, NavInsID, NavIns from ragger.navigator.navigation_scenario import NavigateWithScenario from ragger.error import ExceptionRAPDU @@ -27,6 +27,7 @@ snapshots_dirname: Optional[str] = None WALLET_ADDR: Optional[bytes] = None unfiltered_flow: bool = False +skip_flow: bool = False def eip712_json_path() -> str: @@ -92,7 +93,19 @@ def autonext(firmware: Firmware, navigator: Navigator, default_screenshot_path: if autonext_idx == 0 and unfiltered_flow: moves = [NavInsID.USE_CASE_CHOICE_REJECT] else: - moves = [NavInsID.SWIPE_CENTER_TO_LEFT] + if autonext_idx == 2 and skip_flow: + InputData.disable_autonext() # so the timer stops firing + if firmware == Firmware.STAX: + skip_btn_pos = (355, 44) + else: # FLEX + skip_btn_pos = (420, 49) + moves = [ + # Ragger does not handle the skip button + NavIns(NavInsID.TOUCH, skip_btn_pos), + NavInsID.USE_CASE_CHOICE_CONFIRM, + ] + else: + moves = [NavInsID.SWIPE_CENTER_TO_LEFT] if snapshots_dirname is not None: navigator.navigate_and_compare(default_screenshot_path, snapshots_dirname, @@ -104,7 +117,7 @@ def autonext(firmware: Firmware, navigator: Navigator, default_screenshot_path: navigator.navigate(moves, screen_change_before_first_instruction=False, screen_change_after_last_instruction=False) - autonext_idx += 1 + autonext_idx += len(moves) def eip712_new_common(firmware: Firmware, @@ -117,6 +130,7 @@ def eip712_new_common(firmware: Firmware, golden_run: bool): global autonext_idx global unfiltered_flow + global skip_flow autonext_idx = 0 assert InputData.process_data(app_client, @@ -124,7 +138,6 @@ def eip712_new_common(firmware: Firmware, filters, partial(autonext, firmware, navigator, default_screenshot_path), golden_run) - unfiltered_flow = False # reset value with app_client.eip712_sign_new(BIP32_PATH): moves = [] if firmware.is_nano: @@ -133,11 +146,12 @@ def eip712_new_common(firmware: Firmware, moves += [NavInsID.RIGHT_CLICK] * 2 moves += [NavInsID.BOTH_CLICK] else: - # this move is necessary most of the times, but can't be 100% sure with the fields grouping - moves += [NavInsID.SWIPE_CENTER_TO_LEFT] - # need to skip the message hash - if not verbose and filters is None: + if not skip_flow: + # this move is necessary most of the times, but can't be 100% sure with the fields grouping moves += [NavInsID.SWIPE_CENTER_TO_LEFT] + # need to skip the message hash + if not verbose and filters is None: + moves += [NavInsID.SWIPE_CENTER_TO_LEFT] moves += [NavInsID.USE_CASE_REVIEW_CONFIRM] if snapshots_dirname is not None: # Could break (time-out) if given a JSON that requires less moves @@ -152,6 +166,10 @@ def eip712_new_common(firmware: Firmware, navigator.navigate([move], screen_change_before_first_instruction=False, screen_change_after_last_instruction=False) + # reset values + unfiltered_flow = False + skip_flow = False + return ResponseParser.signature(app_client.response().data) @@ -784,3 +802,35 @@ def test_eip712_bs_not_activated_error(firmware: Firmware, False) InputData.disable_autonext() # so the timer stops firing assert e.value.status == StatusWord.INVALID_DATA + + +def test_eip712_skip(firmware: Firmware, + backend: BackendInterface, + navigator: Navigator, + default_screenshot_path: Path, + test_name: str, + golden_run: bool): + global unfiltered_flow + global skip_flow + + app_client = EthAppClient(backend) + if firmware.is_nano: + pytest.skip("Not supported on Nano devices") + + unfiltered_flow = True + skip_flow = True + settings_toggle(firmware, navigator, [SettingID.BLIND_SIGNING]) + with open(input_files()[0], encoding="utf-8") as file: + data = json.load(file) + vrs = eip712_new_common(firmware, + navigator, + default_screenshot_path, + app_client, + data, + None, + False, + golden_run) + + # verify signature + addr = recover_message(data, vrs) + assert addr == get_wallet_addr(app_client) From cba09eaf86cc21f9cc5fbaf6dc9c1f4d875a652e Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Tue, 24 Sep 2024 16:47:08 +0200 Subject: [PATCH 093/102] Reset global variable between Ragger EIP-712 tests --- tests/ragger/test_eip712.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index 741e9879f..f2e98f9d4 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -131,6 +131,7 @@ def eip712_new_common(firmware: Firmware, global autonext_idx global unfiltered_flow global skip_flow + global snapshots_dirname autonext_idx = 0 assert InputData.process_data(app_client, @@ -169,6 +170,7 @@ def eip712_new_common(firmware: Firmware, # reset values unfiltered_flow = False skip_flow = False + snapshots_dirname = None return ResponseParser.signature(app_client.response().data) From 0831e8454e7adc8b465acc643b7a54e9332f5b4f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 25 Sep 2024 13:42:06 +0200 Subject: [PATCH 094/102] Added friction to the EIP-712 v0 flow --- src_bagl/ui_flow_signMessage712_v0.c | 6 ++++-- .../signMessageEIP712_v0/cmd_signMessage712.c | 4 ++++ src_nbgl/ui_sign_712_v0.c | 15 ++++++++------- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src_bagl/ui_flow_signMessage712_v0.c b/src_bagl/ui_flow_signMessage712_v0.c index 46cd039c8..e6ee1b359 100644 --- a/src_bagl/ui_flow_signMessage712_v0.c +++ b/src_bagl/ui_flow_signMessage712_v0.c @@ -3,6 +3,7 @@ #include "common_712.h" #include "uint_common.h" #include "common_ui.h" +#include "ui_flow.h" // ux_warning_blind_signing_warn_step void prepare_domain_hash_v0() { array_bytes_string(strings.tmp.tmp, @@ -59,8 +60,8 @@ UX_STEP_CB( _approve_cb(), { &C_icon_validate_14, - "Sign", - "message", + "Accept risk", + "and sign", }); UX_STEP_CB( ux_sign_712_v0_flow_5_step, @@ -74,6 +75,7 @@ UX_STEP_CB( // clang-format on UX_FLOW(ux_sign_712_v0_flow, + &ux_warning_blind_signing_warn_step, &ux_sign_712_v0_flow_1_step, &ux_sign_712_v0_flow_2_step, &ux_sign_712_v0_flow_3_step, diff --git a/src_features/signMessageEIP712_v0/cmd_signMessage712.c b/src_features/signMessageEIP712_v0/cmd_signMessage712.c index a5afa259a..844a3c8fc 100644 --- a/src_features/signMessageEIP712_v0/cmd_signMessage712.c +++ b/src_features/signMessageEIP712_v0/cmd_signMessage712.c @@ -15,6 +15,10 @@ uint16_t handleSignEIP712Message_v0(uint8_t p1, reset_app_context(); } + if (!N_storage.dataAllowed) { + ui_error_blind_signing(); + return APDU_RESPONSE_INVALID_DATA; + } workBuffer = parseBip32(workBuffer, &dataLength, &tmpCtx.messageSigningContext.bip32); if ((workBuffer == NULL) || (dataLength < (KECCAK256_HASH_BYTESIZE * 2))) { return APDU_RESPONSE_INVALID_DATA; diff --git a/src_nbgl/ui_sign_712_v0.c b/src_nbgl/ui_sign_712_v0.c index a3a39b7d2..4b8489e51 100644 --- a/src_nbgl/ui_sign_712_v0.c +++ b/src_nbgl/ui_sign_712_v0.c @@ -32,11 +32,12 @@ void ui_sign_712_v0(void) { pairs_list.pairs = pairs; pairs_list.nbMaxLinesForValue = 0; - nbgl_useCaseReview(TYPE_MESSAGE, - &pairs_list, - &C_Review_64px, - TEXT_REVIEW_EIP712, - NULL, - TEXT_SIGN_EIP712, - ui_typed_message_review_choice); + nbgl_useCaseReviewBlindSigning(TYPE_TRANSACTION, + &pairs_list, + &C_Review_64px, + TEXT_REVIEW_EIP712, + NULL, + TEXT_BLIND_SIGN_EIP712, + NULL, + ui_typed_message_review_choice); } From 1ba1854c659c93eae19bd0882b07f6ea51045195 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 25 Sep 2024 13:49:22 +0200 Subject: [PATCH 095/102] Fix Ragger test Scenario navigator wasn't working --- tests/ragger/test_eip712.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tests/ragger/test_eip712.py b/tests/ragger/test_eip712.py index f2e98f9d4..7713883de 100644 --- a/tests/ragger/test_eip712.py +++ b/tests/ragger/test_eip712.py @@ -12,7 +12,6 @@ from ragger.backend import BackendInterface from ragger.firmware import Firmware from ragger.navigator import Navigator, NavInsID, NavIns -from ragger.navigator.navigation_scenario import NavigateWithScenario from ragger.error import ExceptionRAPDU import client.response_parser as ResponseParser @@ -68,14 +67,27 @@ def get_wallet_addr(client: EthAppClient) -> bytes: return WALLET_ADDR -def test_eip712_legacy(backend: BackendInterface, scenario_navigator: NavigateWithScenario): +def test_eip712_v0(firmware: Firmware, backend: BackendInterface, navigator: Navigator): app_client = EthAppClient(backend) + settings_toggle(firmware, navigator, [SettingID.BLIND_SIGNING]) with open(input_files()[0], encoding="utf-8") as file: data = json.load(file) smsg = encode_typed_data(full_message=data) with app_client.eip712_sign_legacy(BIP32_PATH, smsg.header, smsg.body): - scenario_navigator.review_approve(custom_screen_text="Sign", do_comparison=False) + moves = [] + if firmware.is_nano: + moves += [NavInsID.RIGHT_CLICK] * 2 + if firmware == Firmware.NANOS: + moves += [NavInsID.RIGHT_CLICK] * 8 + else: + moves += [NavInsID.RIGHT_CLICK] * 4 + moves += [NavInsID.BOTH_CLICK] + else: + moves += [NavInsID.USE_CASE_CHOICE_REJECT] + moves += [NavInsID.SWIPE_CENTER_TO_LEFT] * 2 + moves += [NavInsID.USE_CASE_REVIEW_CONFIRM] + navigator.navigate(moves) vrs = ResponseParser.signature(app_client.response().data) recovered_addr = recover_message(data, vrs) From 5ff59f92ef1bd5b40728f3c31a4032dbb3fcb888 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 26 Sep 2024 15:09:24 +0200 Subject: [PATCH 096/102] Replace memset(0) by explicit_bzero --- src_features/provideTrustedName/cmd_provide_trusted_name.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src_features/provideTrustedName/cmd_provide_trusted_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c index c9cdefe5c..40297ab72 100644 --- a/src_features/provideTrustedName/cmd_provide_trusted_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -156,7 +156,7 @@ bool has_trusted_name(uint8_t types_count, } if (ret) break; } - memset(&g_trusted_name_info, 0, sizeof(g_trusted_name_info)); + explicit_bzero(&g_trusted_name_info, sizeof(g_trusted_name_info)); } return ret; } From d1a3b6af0184b3a94cb36b2f45fcc30ec299eb4f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Thu, 26 Sep 2024 15:55:52 +0200 Subject: [PATCH 097/102] Fix out-of-bounds read on TLV parser --- src_features/provideTrustedName/cmd_provide_trusted_name.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src_features/provideTrustedName/cmd_provide_trusted_name.c b/src_features/provideTrustedName/cmd_provide_trusted_name.c index 40297ab72..f8dcabc92 100644 --- a/src_features/provideTrustedName/cmd_provide_trusted_name.c +++ b/src_features/provideTrustedName/cmd_provide_trusted_name.c @@ -809,7 +809,8 @@ static bool parse_tlv(const s_tlv_payload *payload, break; case TLV_VALUE: - if (offset >= payload->size) { + if ((offset + data.length) > payload->size) { + PRINTF("Error: value would go beyond the TLV payload!\n"); return false; } data.value = &payload->buf[offset]; @@ -833,6 +834,10 @@ static bool parse_tlv(const s_tlv_payload *payload, return false; } } + if (step != TLV_TAG) { + PRINTF("Error: unexpected data at the end of the TLV payload!\n"); + return false; + } return verify_struct(trusted_name_info); } From f83780274e7f46f5902c5cc1460a3bc851a2cde9 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 27 Sep 2024 14:09:43 +0200 Subject: [PATCH 098/102] Removed useless temporary path variable --- src_features/signMessageEIP712/path.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index 037550440..61faa20b0 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -708,7 +708,6 @@ bool path_exists_in_backup(const char *path, size_t length) { size_t offset = 0; size_t i; const void *field_ptr; - s_path tmp_path; const char *typename; uint8_t typename_len; const void *struct_ptr; @@ -716,8 +715,7 @@ bool path_exists_in_backup(const char *path, size_t length) { const char *key; uint8_t key_len; - memcpy(&tmp_path, path_backup, sizeof(tmp_path)); - field_ptr = get_nth_field_from(&tmp_path, NULL, tmp_path.depth_count); + field_ptr = get_nth_field_from(path_backup, NULL, path_backup->depth_count); while (offset < length) { if (((offset + 1) > length) || (memcmp(path + offset, ".", 1) != 0)) { return false; From 00dccfa2d2f8a93937030b92eb6f737535baf7cb Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Fri, 27 Sep 2024 14:34:29 +0200 Subject: [PATCH 099/102] Simplified computation of filter paths + fix for discarded filters --- src_features/signMessageEIP712/commands_712.c | 13 ++--- src_features/signMessageEIP712/filtering.c | 49 ++++++++++++++----- src_features/signMessageEIP712/filtering.h | 25 ++++++++-- src_features/signMessageEIP712/path.c | 29 ----------- src_features/signMessageEIP712/path.h | 1 - src_features/signMessageEIP712/ui_logic.c | 5 +- src_features/signMessageEIP712/ui_logic.h | 2 +- 7 files changed, 67 insertions(+), 57 deletions(-) diff --git a/src_features/signMessageEIP712/commands_712.c b/src_features/signMessageEIP712/commands_712.c index ad7f6df34..dd3485a7e 100644 --- a/src_features/signMessageEIP712/commands_712.c +++ b/src_features/signMessageEIP712/commands_712.c @@ -184,6 +184,7 @@ uint16_t handle_eip712_filtering(uint8_t p1, uint32_t *flags) { bool ret = true; bool reply_apdu = true; + uint32_t path_crc = 0; if (eip712_context == NULL) { apdu_reply(false); @@ -211,20 +212,20 @@ uint16_t handle_eip712_filtering(uint8_t p1, break; #ifdef HAVE_TRUSTED_NAME case P2_FILT_CONTRACT_NAME: - ret = filtering_trusted_name(cdata, length, p1 == 1); + ret = filtering_trusted_name(cdata, length, p1 == 1, &path_crc); break; #endif case P2_FILT_DATE_TIME: - ret = filtering_date_time(cdata, length, p1 == 1); + ret = filtering_date_time(cdata, length, p1 == 1, &path_crc); break; case P2_FILT_AMOUNT_JOIN_TOKEN: - ret = filtering_amount_join_token(cdata, length, p1 == 1); + ret = filtering_amount_join_token(cdata, length, p1 == 1, &path_crc); break; case P2_FILT_AMOUNT_JOIN_VALUE: - ret = filtering_amount_join_value(cdata, length, p1 == 1); + ret = filtering_amount_join_value(cdata, length, p1 == 1, &path_crc); break; case P2_FILT_RAW_FIELD: - ret = filtering_raw_field(cdata, length, p1 == 1); + ret = filtering_raw_field(cdata, length, p1 == 1, &path_crc); break; default: PRINTF("Unknown P2 0x%x\n", p2); @@ -232,7 +233,7 @@ uint16_t handle_eip712_filtering(uint8_t p1, ret = false; } if ((p2 > P2_FILT_MESSAGE_INFO) && ret) { - if (ui_712_push_new_filter_path()) { + if (ui_712_push_new_filter_path(path_crc)) { if (!ui_712_filters_counter_incr()) { ret = false; apdu_response_code = APDU_RESPONSE_INVALID_DATA; diff --git a/src_features/signMessageEIP712/filtering.c b/src_features/signMessageEIP712/filtering.c index c0274252a..bb43b36a4 100644 --- a/src_features/signMessageEIP712/filtering.c +++ b/src_features/signMessageEIP712/filtering.c @@ -27,12 +27,13 @@ #define TOKEN_IDX_ADDR_IN_DOMAIN 0xff /** - * Reconstruct the field path and hash it + * Reconstruct the field path and hash it for the signature and the CRC * * @param[in] hash_ctx the hashing context * @param[in] discarded if the filter targets a field that does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path */ -static void hash_filtering_path(cx_hash_t *hash_ctx, bool discarded) { +static void hash_filtering_path(cx_hash_t *hash_ctx, bool discarded, uint32_t *path_crc) { const void *field_ptr; const char *key; uint8_t key_len; @@ -40,15 +41,18 @@ static void hash_filtering_path(cx_hash_t *hash_ctx, bool discarded) { if (discarded) { key = ui_712_get_discarded_path(&key_len); hash_nbytes((uint8_t *) key, key_len, hash_ctx); + *path_crc = cx_crc32_update(*path_crc, key, key_len); } else { for (uint8_t i = 0; i < path_get_depth_count(); ++i) { if (i > 0) { hash_byte('.', hash_ctx); + *path_crc = cx_crc32_update(*path_crc, ".", 1); } if ((field_ptr = path_get_nth_field(i + 1)) != NULL) { if ((key = get_struct_field_keyname(field_ptr, &key_len)) != NULL) { // field name hash_nbytes((uint8_t *) key, key_len, hash_ctx); + *path_crc = cx_crc32_update(*path_crc, key, key_len); // array levels if (struct_field_is_array(field_ptr)) { @@ -57,6 +61,7 @@ static void hash_filtering_path(cx_hash_t *hash_ctx, bool discarded) { get_struct_field_array_lvls_array(field_ptr, &lvl_count); for (int j = 0; j < lvl_count; ++j) { hash_nbytes((uint8_t *) ".[]", 3, hash_ctx); + *path_crc = cx_crc32_update(*path_crc, ".[]", 3); } } } @@ -328,9 +333,13 @@ bool filtering_discarded_path(const uint8_t *payload, uint8_t length) { * @param[in] payload the payload to parse * @param[in] length the payload length * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path * @return whether it was successful or not */ -bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discarded) { +bool filtering_trusted_name(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc) { uint8_t name_len; const char *name; uint8_t types_count; @@ -413,7 +422,7 @@ bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discard if (!sig_verif_start(&hash_ctx, FILT_MAGIC_TRUSTED_NAME)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded, path_crc); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); hash_nbytes(types, types_count, (cx_hash_t *) &hash_ctx); hash_nbytes(sources, sources_count, (cx_hash_t *) &hash_ctx); @@ -440,9 +449,13 @@ bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discard * @param[in] payload the payload to parse * @param[in] length the payload length * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path * @return whether it was successful or not */ -bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded) { +bool filtering_date_time(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc) { uint8_t name_len; const char *name; uint8_t sig_len; @@ -478,7 +491,7 @@ bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded) if (!sig_verif_start(&hash_ctx, FILT_MAGIC_DATETIME)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded, path_crc); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; @@ -501,9 +514,13 @@ bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded) * @param[in] payload the payload to parse * @param[in] length the payload length * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path * @return whether it was successful or not */ -bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool discarded) { +bool filtering_amount_join_token(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc) { uint8_t token_idx; uint8_t sig_len; const uint8_t *sig; @@ -533,7 +550,7 @@ bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool di if (!sig_verif_start(&hash_ctx, FILT_MAGIC_AMOUNT_JOIN_TOKEN)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded, path_crc); hash_byte(token_idx, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; @@ -554,9 +571,13 @@ bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool di * @param[in] payload the payload to parse * @param[in] length the payload length * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path * @return whether it was successful or not */ -bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool discarded) { +bool filtering_amount_join_value(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc) { uint8_t name_len; const char *name; uint8_t token_idx; @@ -600,7 +621,7 @@ bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool di if (!sig_verif_start(&hash_ctx, FILT_MAGIC_AMOUNT_JOIN_VALUE)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded, path_crc); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); hash_byte(token_idx, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { @@ -635,9 +656,13 @@ bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool di * @param[in] payload the payload to parse * @param[in] length the payload length * @param[in] discarded if the filter targets a field that is does not exist (within an empty array) + * @param[out] path_crc pointer to the CRC of the filter path * @return whether it was successful or not */ -bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded) { +bool filtering_raw_field(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc) { uint8_t name_len; const char *name; uint8_t sig_len; @@ -673,7 +698,7 @@ bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded) if (!sig_verif_start(&hash_ctx, FILT_MAGIC_RAW_FIELD)) { return false; } - hash_filtering_path((cx_hash_t *) &hash_ctx, discarded); + hash_filtering_path((cx_hash_t *) &hash_ctx, discarded, path_crc); hash_nbytes((uint8_t *) name, sizeof(char) * name_len, (cx_hash_t *) &hash_ctx); if (!sig_verif_end(&hash_ctx, sig, sig_len)) { return false; diff --git a/src_features/signMessageEIP712/filtering.h b/src_features/signMessageEIP712/filtering.h index 9d41df16a..71e8a9807 100644 --- a/src_features/signMessageEIP712/filtering.h +++ b/src_features/signMessageEIP712/filtering.h @@ -9,11 +9,26 @@ #define MAX_FILTERS 50 bool filtering_message_info(const uint8_t *payload, uint8_t length); -bool filtering_trusted_name(const uint8_t *payload, uint8_t length, bool discarded); -bool filtering_date_time(const uint8_t *payload, uint8_t length, bool discarded); -bool filtering_amount_join_token(const uint8_t *payload, uint8_t length, bool discarded); -bool filtering_amount_join_value(const uint8_t *payload, uint8_t length, bool discarded); -bool filtering_raw_field(const uint8_t *payload, uint8_t length, bool discarded); +bool filtering_trusted_name(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc); +bool filtering_date_time(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc); +bool filtering_amount_join_token(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc); +bool filtering_amount_join_value(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc); +bool filtering_raw_field(const uint8_t *payload, + uint8_t length, + bool discarded, + uint32_t *path_crc); bool filtering_discarded_path(const uint8_t *payload, uint8_t length); #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/path.c b/src_features/signMessageEIP712/path.c index 61faa20b0..c163a4bb4 100644 --- a/src_features/signMessageEIP712/path.c +++ b/src_features/signMessageEIP712/path.c @@ -753,35 +753,6 @@ bool path_exists_in_backup(const char *path, size_t length) { return true; } -/** - * Generate a unique checksum out of the current path - * - * Goes over the fields of the \ref path_struct with a few exceptions : we skip the root_type since - * we already go over root_struct, and in array_depths we only go over path_index since it would - * otherwise generate a different CRC for different fields which are targeted by the same filtering - * path. - * - * @return CRC-32 checksum - */ -uint32_t get_path_crc(void) { - uint32_t value = 0; - - value = cx_crc32_update(value, &path_struct->root_struct, sizeof(path_struct->root_struct)); - value = cx_crc32_update(value, &path_struct->depth_count, sizeof(path_struct->depth_count)); - value = cx_crc32_update(value, - path_struct->depths, - sizeof(path_struct->depths[0]) * path_struct->depth_count); - value = cx_crc32_update(value, - &path_struct->array_depth_count, - sizeof(path_struct->array_depth_count)); - for (int i = 0; i < path_struct->array_depth_count; ++i) { - value = cx_crc32_update(value, - &path_struct->array_depths[i].path_index, - sizeof(path_struct->array_depths[i].path_index)); - } - return value; -} - /** * Initialize the path context with its indexes in memory and sets it with a depth of 0. * diff --git a/src_features/signMessageEIP712/path.h b/src_features/signMessageEIP712/path.h index 8285d68f4..deb43ad39 100644 --- a/src_features/signMessageEIP712/path.h +++ b/src_features/signMessageEIP712/path.h @@ -40,7 +40,6 @@ bool path_exists_in_backup(const char *path, size_t length); const void *path_get_nth_field_to_last(uint8_t n); uint8_t path_get_depth_count(void); uint8_t path_backup_get_depth_count(void); -uint32_t get_path_crc(void); #endif // HAVE_EIP712_FULL_SUPPORT diff --git a/src_features/signMessageEIP712/ui_logic.c b/src_features/signMessageEIP712/ui_logic.c index e66ae90e3..da0c2c4c4 100644 --- a/src_features/signMessageEIP712/ui_logic.c +++ b/src_features/signMessageEIP712/ui_logic.c @@ -882,11 +882,10 @@ bool ui_712_show_raw_key(const void *field_ptr) { /** * Push a new filter path * + * @param[in] path_crc CRC of the filter path * @return if the path was pushed or not (in case it was already present) */ -bool ui_712_push_new_filter_path(void) { - uint32_t path_crc = get_path_crc(); - +bool ui_712_push_new_filter_path(uint32_t path_crc) { // check if already present for (int i = 0; i < ui_ctx->filters_received; ++i) { if (ui_ctx->filters_crc[i] == path_crc) { diff --git a/src_features/signMessageEIP712/ui_logic.h b/src_features/signMessageEIP712/ui_logic.h index 1cc2bc6d2..d64e47f32 100644 --- a/src_features/signMessageEIP712/ui_logic.h +++ b/src_features/signMessageEIP712/ui_logic.h @@ -48,7 +48,7 @@ void ui_712_token_join_prepare_addr_check(uint8_t index); void ui_712_token_join_prepare_amount(uint8_t index, const char *name, uint8_t name_length); void amount_join_set_token_received(void); bool ui_712_show_raw_key(const void *field_ptr); -bool ui_712_push_new_filter_path(void); +bool ui_712_push_new_filter_path(uint32_t path_crc); void ui_712_set_discarded_path(const char *path, uint8_t length); const char *ui_712_get_discarded_path(uint8_t *length); #ifdef HAVE_TRUSTED_NAME From 4ee51af1807ae6d52fcaf53e24b4ae6e06f24a6f Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Wed, 25 Sep 2024 11:45:01 +0200 Subject: [PATCH 100/102] Updated changelog & removed -dev version suffix --- CHANGELOG.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++- Makefile | 2 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29ebf3b22..013cb590d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,57 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [1.12.0](https://github.com/ledgerhq/app-ethereum/compare/1.11.0...1.11.1) - 2024-??-?? +## [1.12.0](https://github.com/ledgerhq/app-ethereum/compare/1.11.3...1.12.0) - 2024-09-27 ### Added +- Ledger PKI support - Added support for swap with calldata (Thorswap / LiFi / ...) +- (network) PulseChain Testnet +- The app now provides the derivation path to its plugins +- Support for Trusted Name V2 payloads +- EIP-712 filtering on trusted names + +### Removed + +- (clone) ApothemNetwork +- (clone) Binance Smart Chain +- (clone) BTTC +- (clone) Conflux eSpace +- (clone) Cube +- (clone) KardiaChain +- (clone) Meter +- (clone) MultiVAC +- (clone) OKXChain +- (clone) POA +- (clone) Polygon +- (clone) Shyft + +### Fixed + +- (network) Apothemnetwork ticker +- Missing error handling on EIP-712, which could lead to a crash of the app +- EIP-712 filtering on fields within an empty array (requires client support with a new APDU) +- EIP-712 amount-join filtering with missing token information +- EIP-712 UI-code overflow on Stax which could lead to a crash of the app + +### Changed + +- (clone) Astar Polkadot EVM, removed Ethereum derivation path +- (clone) EnergyWebChain, removed Ethereum derivation path +- (clone) Ethereum Classic, removed Ethereum derivation path +- (clone) Moonbeam, removed Ethereum derivation path +- (clone) Moonriver, removed Ethereum derivation path +- (clone) Oasys, removed Ethereum derivation path +- (clone) Shiden EVM, removed Ethereum derivation path +- (clone) Songbird, removed Ethereum derivation path +- (clone) TecraCoin, removed Ethereum derivation path +- (clone) TecraTestnet, removed Ethereum derivation path +- (clone) Volta, removed Ethereum derivation path +- (clone) XDC Network, removed Ethereum derivation path +- Now the app sends back its response immediately instead of after the Transaction/Message signed/rejected screen on Stax & Flex +- Added blind-signing friction to EIP-712 v0 & unfiltered flows +- EIP-712 unfiltered flow now defaults to raw/verbose mode on Stax & Flex, but adds a skip button ## [1.11.3](https://github.com/ledgerhq/app-ethereum/compare/1.11.2...1.11.3) - 2024-09-04 diff --git a/Makefile b/Makefile index 09e9718d4..9c99d7877 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ include ./makefile_conf/chain/$(CHAIN).mk APPVERSION_M = 1 APPVERSION_N = 12 APPVERSION_P = 0 -APPVERSION = $(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P)-dev +APPVERSION = $(APPVERSION_M).$(APPVERSION_N).$(APPVERSION_P) # Application source files APP_SOURCE_PATH += src src_features src_plugins From a02bbe71725707cd4fe0956e3207d4bb86ebf3b1 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 30 Sep 2024 13:47:51 +0200 Subject: [PATCH 101/102] Use new NBGL nbgl_useCaseGetNbTagValuesInPageExt for EIP-712 pairs packing --- src_nbgl/ui_sign_712.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src_nbgl/ui_sign_712.c b/src_nbgl/ui_sign_712.c index bc9a32525..cd4afcf90 100644 --- a/src_nbgl/ui_sign_712.c +++ b/src_nbgl/ui_sign_712.c @@ -66,7 +66,8 @@ static void message_update(bool confirm) { pairs[pair_idx].value = memmove(buf + buf_idx, strings.tmp.tmp, buf_off); buf_idx += buf_off; pair_idx += 1; - pairs_list.nbPairs = nbgl_useCaseGetNbTagValuesInPage(pair_idx, &pairs_list, 0, &flag); + pairs_list.nbPairs = + nbgl_useCaseGetNbTagValuesInPageExt(pair_idx, &pairs_list, 0, !filtered, &flag); } if (!review_skipped && ((pair_idx == ARRAYLEN(pairs)) || (pairs_list.nbPairs < pair_idx))) { nbgl_useCaseReviewStreamingContinueExt(&pairs_list, message_progress, review_skip); From cee9edd0a5031721f6e305c8535c2f2c3e1c2f95 Mon Sep 17 00:00:00 2001 From: Alexandre Paillier Date: Mon, 30 Sep 2024 14:41:53 +0200 Subject: [PATCH 102/102] Re-generate Ragger tests snapshots --- .../erc1155_safeBatchTransferFrom_1/00002.png | Bin 21252 -> 21252 bytes .../erc1155_safeBatchTransferFrom_1/00003.png | Bin 7165 -> 7164 bytes .../00002.png | Bin 19443 -> 19443 bytes .../00003.png | Bin 7469 -> 7469 bytes .../erc1155_safeBatchTransferFrom_5/00002.png | Bin 19518 -> 19518 bytes .../erc1155_safeBatchTransferFrom_5/00003.png | Bin 7165 -> 7164 bytes .../00002.png | Bin 18406 -> 18406 bytes .../00003.png | Bin 8857 -> 8856 bytes .../flex/erc1155_safeTransferFrom_1/00002.png | Bin 18406 -> 18406 bytes .../flex/erc1155_safeTransferFrom_1/00003.png | Bin 8857 -> 8856 bytes .../erc1155_safeTransferFrom_137/00002.png | Bin 15607 -> 15606 bytes .../erc1155_safeTransferFrom_137/00003.png | Bin 10069 -> 10069 bytes .../flex/erc1155_safeTransferFrom_5/00002.png | Bin 15872 -> 15871 bytes .../flex/erc1155_safeTransferFrom_5/00003.png | Bin 9594 -> 9594 bytes .../erc1155_setApprovalForAll_1/00000.png | Bin 12923 -> 12923 bytes .../erc1155_setApprovalForAll_1/00001.png | Bin 19248 -> 19245 bytes .../erc1155_setApprovalForAll_137/00000.png | Bin 12882 -> 12881 bytes .../erc1155_setApprovalForAll_137/00001.png | Bin 23376 -> 23373 bytes .../erc1155_setApprovalForAll_5/00000.png | Bin 12251 -> 12251 bytes .../erc1155_setApprovalForAll_5/00001.png | Bin 23376 -> 23373 bytes .../snapshots/flex/erc721_approve_1/00000.png | Bin 12923 -> 12923 bytes .../snapshots/flex/erc721_approve_1/00001.png | Bin 23396 -> 23393 bytes .../flex/erc721_approve_137/00002.png | Bin 16408 -> 16408 bytes .../flex/erc721_approve_137/00003.png | Bin 7469 -> 7469 bytes .../snapshots/flex/erc721_approve_5/00002.png | Bin 16466 -> 16466 bytes .../snapshots/flex/erc721_approve_5/00003.png | Bin 7165 -> 7164 bytes .../00000.png | Bin 11525 -> 11524 bytes .../00001.png | Bin 22975 -> 22972 bytes .../flex/erc721_safeTransferFrom_1/00000.png | Bin 11525 -> 11524 bytes .../flex/erc721_safeTransferFrom_1/00001.png | Bin 22975 -> 22972 bytes .../erc721_safeTransferFrom_137/00002.png | Bin 16408 -> 16408 bytes .../erc721_safeTransferFrom_137/00003.png | Bin 7469 -> 7469 bytes .../flex/erc721_safeTransferFrom_5/00002.png | Bin 16466 -> 16466 bytes .../flex/erc721_safeTransferFrom_5/00003.png | Bin 7165 -> 7164 bytes .../flex/erc721_setApprovalForAll_1/00000.png | Bin 12923 -> 12923 bytes .../flex/erc721_setApprovalForAll_1/00001.png | Bin 23501 -> 23499 bytes .../erc721_setApprovalForAll_137/00000.png | Bin 12882 -> 12881 bytes .../erc721_setApprovalForAll_137/00001.png | Bin 21736 -> 21733 bytes .../flex/erc721_setApprovalForAll_5/00000.png | Bin 12251 -> 12251 bytes .../flex/erc721_setApprovalForAll_5/00001.png | Bin 22371 -> 22368 bytes .../flex/erc721_transferFrom_1/00000.png | Bin 11525 -> 11524 bytes .../flex/erc721_transferFrom_1/00001.png | Bin 22975 -> 22972 bytes .../flex/erc721_transferFrom_137/00002.png | Bin 16408 -> 16408 bytes .../flex/erc721_transferFrom_137/00003.png | Bin 7469 -> 7469 bytes .../flex/erc721_transferFrom_5/00002.png | Bin 16466 -> 16466 bytes .../flex/erc721_transferFrom_5/00003.png | Bin 7165 -> 7164 bytes .../flex/test_blind_sign_rejected/00000.png | Bin 17145 -> 18507 bytes .../flex/test_blind_sign_rejected/00001.png | Bin 10573 -> 10573 bytes .../flex/test_blind_sign_rejected/00002.png | Bin 21056 -> 21053 bytes .../flex/test_blind_sign_signed/00000.png | Bin 17145 -> 18507 bytes .../flex/test_blind_sign_signed/00001.png | Bin 10573 -> 10573 bytes .../flex/test_blind_sign_signed/00002.png | Bin 21056 -> 21053 bytes .../flex/test_clone_thundercore/00000.png | Bin 8935 -> 8934 bytes .../flex/test_clone_thundercore/00001.png | Bin 21914 -> 21910 bytes .../flex/test_legacy_chainid/00000.png | Bin 8627 -> 8627 bytes .../flex/test_legacy_chainid/00001.png | Bin 21806 -> 21803 bytes .../flex/test_legacy_send_bsc/00000.png | Bin 9921 -> 9921 bytes .../flex/test_legacy_send_bsc/00001.png | Bin 22022 -> 22019 bytes .../flex/test_sign_eip_2930/00000.png | Bin 9601 -> 9600 bytes .../flex/test_sign_eip_2930/00001.png | Bin 21861 -> 21858 bytes .../flex/test_sign_limit_nonce/00000.png | Bin 9601 -> 9600 bytes .../flex/test_sign_limit_nonce/00001.png | Bin 15512 -> 15509 bytes .../flex/test_sign_nonce_display/00000.png | Bin 9601 -> 9600 bytes .../flex/test_sign_nonce_display/00001.png | Bin 21772 -> 21769 bytes .../test_sign_parameter_selector/00000.png | Bin 10325 -> 10326 bytes .../test_sign_parameter_selector/00001.png | Bin 7716 -> 7715 bytes .../test_sign_parameter_selector/00003.png | Bin 10363 -> 10363 bytes .../test_sign_parameter_selector/00004.png | Bin 11076 -> 11074 bytes .../test_sign_parameter_selector/00006.png | Bin 10363 -> 10363 bytes .../test_sign_parameter_selector/00007.png | Bin 8992 -> 8991 bytes .../test_sign_parameter_selector/00009.png | Bin 17145 -> 18507 bytes .../test_sign_parameter_selector/00010.png | Bin 10573 -> 10573 bytes .../test_sign_parameter_selector/00011.png | Bin 21056 -> 21053 bytes .../snapshots/flex/test_sign_reject/00000.png | Bin 9601 -> 9600 bytes .../snapshots/flex/test_sign_reject/00001.png | Bin 21772 -> 21769 bytes .../snapshots/flex/test_sign_simple/00000.png | Bin 9601 -> 9600 bytes .../snapshots/flex/test_sign_simple/00001.png | Bin 21772 -> 21769 bytes .../flex/test_trusted_name_v1/00000.png | Bin 9601 -> 9600 bytes .../flex/test_trusted_name_v1/00001.png | Bin 16610 -> 16607 bytes .../00000.png | Bin 8896 -> 8896 bytes .../00001.png | Bin 16610 -> 16607 bytes .../00000.png | Bin 8627 -> 8627 bytes .../00001.png | Bin 20569 -> 20566 bytes .../test_trusted_name_v1_verbose/00000.png | Bin 9601 -> 9600 bytes .../test_trusted_name_v1_verbose/00001.png | Bin 16610 -> 16607 bytes .../test_trusted_name_v1_wrong_addr/00000.png | Bin 9601 -> 9600 bytes .../test_trusted_name_v1_wrong_addr/00001.png | Bin 20293 -> 20290 bytes .../flex/test_trusted_name_v2/00000.png | Bin 9601 -> 9600 bytes .../flex/test_trusted_name_v2/00001.png | Bin 16610 -> 16607 bytes .../00000.png | Bin 8627 -> 8627 bytes .../00001.png | Bin 20569 -> 20566 bytes .../stax/test_blind_sign_rejected/00000.png | Bin 15007 -> 15903 bytes .../stax/test_blind_sign_signed/00000.png | Bin 15007 -> 15903 bytes .../test_sign_parameter_selector/00009.png | Bin 15007 -> 15903 bytes 94 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_1/00002.png b/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_1/00002.png index a61e4575a065865043660b6a1bc19ca09a7adc96..5ba96b74b6b6fe9898322641cf56a243cebbc7cc 100644 GIT binary patch delta 1916 zcmV-?2ZQ*8rU8Ve0kA(x3HVIgwsl?q;%}2kN;N5+wr#7bBKsf+f;f)1>f4jlbzKw% znYNRr4(7OG!T^fSXC9d9g3o0&*>|mzBkuf$an2veG{6YS;?|b?y|H9vxu{;0^ z@1@QJb&0{g6h+bEup$b{==+|0!DIbd{YWic&(EDqpDpMGdGiO)HTvxZTK(-WHoJ0J zme=c5vq7RL%JW?7g>Bn@ety!w^E}rEmG0><6m)6cl4Tj^Sw58SqF>%cU;N=6f7LmT z$;Y6gEUb||Nf_D$bHu6Umgd2xm>=#zs(V1UDuzVpY}QE zmFdvZwZU7yzP?yTz*fAYI!{9VXVyTfEK3fUqc~K$o#q?mSj~)59USBh!s+moW?7c+ z8$c}$GOyyJe}e_B^*R1G*}U}cljTekf4k#?bZB~q|C^>MjaB)_)9Dn3AqBc-Sw^Yx z^)&0Ub0o=I^DEW4C<>B1_bF=nn7 zV^W^rsU3a0-JagVxlNM9{Hqi)Ssd;nQ50#n@SkLYP1A5Xd7dv$=lOi{ixC7tf73Mb z5&S24OV@S$=q$@-RL#-&(0`;e>b+{uB+v6a&$BE`(=1*Oy(Daf<9Mgb{Gmjl|g%8G4B_}k^LZlG`E$} zwl%O|Hz*dQqfKywm%=^4tI79Gh~t>_noQ~S3GQYwy!C1?&1rUQX5P$#PLhO8j5JL@ zK0Zhm&B0U{hWr7y`@-ywiDRLRDT7& zO=-NDKuc)v0(vJY#$MJYcMF=ATl|y->9Czbs|3vs3KM%gzb2PT$|(mZ@*|EiYsU)8GXQmc5K|xm-@C(^$6OaqQ@!I;(dVX!SGY zO33aaH_G__{?>ZT>2x}sPM@EjyvgSn3(}GMlov%I1E=HymN9!A;dje;Q;n9Ji<*Ds zJ<1(TQMzof3vp7LEP&$GiGyop>Bl$nMEj}E>VFpqbdn^jhT39Nb{V&A`|F0|Ni?Ali+iCM~#*% zjOCdoG&m#G2!ggtzlY z2SJc!8D*9B%N@MHJ+(AVN$4p}T28VcsY%Y~Gih;ImgY<0d9^b>tF!tA7PL|-NfI8l zX~j=uW=m5a{Vf+^Ma)8Q0E_9y>+|Y-eP*tb9GkgP4?p0gr;d8kH_Qj=(=v~ z0Z_(2fte@@wuYjRHMNTyoEYHpU>am;@E_`uI1U`Z!tgvcHYj{ z0rueyJR3j!hDpLrkWtCr9v2Vh@^*8E;MKg5I;-C?Nw_Ux7_K=Q9QcN2MItx*!N0=0yp!P7yireplYthPk&hi0^8W!BIrHEk=iR0N0000e!RibzKw% z+a*yHO;%Lj_jaFt9LGTrY?j6Clcq{6e~UWzeSf`Px$hBGRfS=gW!bBr-nOk~NXBtI zc~@0cV`dW(hM~76&Kqg;dkD0hzVB(Y(lpJQkGAYjE`4-E`o918_@IAp^05K$qRwsG zl13<{csSVpa5|kxOurpoi%k%%JW?7h;7?`ety!w^E}tamG0><6m)6cl4Tj^Sw58SqF>%ZU%cY&f7CgS z$;Y6gEUb||Nhse$9>l5Umgd2xm>=#zs*5nUDuzVpZ00! zmFdvZwZU7yzP?yTz*fASI!{8KXVxgHEK3fUqaakeo#q?mK+OzM9US2e!s+moW?7bR z9Y8G&GOyyJe}e_Bbvyny*}U}cljTeke|zMDbZCZ$|C^>M4OjWc)9Dn3A;r38Sw^Yx z^)&Iab0o=I^ZV4fC<>B1_xWlPN@du~94Kb+`DBhT|Z&$BE`(=Z8MvGr2y&MbD zky+AWOT#csl7zm}*j#NBev|F2QFVzlP2ERPecw~B8@z?43O9@i34(y^?j%XLhw~)O z`>yly&5nLEfmT1YHi!&@mhl+ofJ;v6)pc!|wqB5q6l*hrm8_(($AP*08g*7b-KmpD zP9XwmbCYULBY&XO-^LmTV_Ys5moNHcU^2fQ6!Ez_v%^sAsSMf!Yk0pXj_e2dqq(z; zwzGi+yG^km9c_*qycF&UUQNEQCyry%Yci$RC%Bur@a{{!G^g3InRzn{I!O|?GSW2t z`1l}MG{;k681gsV?hdo}rv>ToE$-qD7DMgMoBXPyoqvWKLS8j(9n)fV+e=^{Q~gEw zHl^`q0xhBK3+SDsFnd{>+%sriZt+tVq{F5Ptr9f*C`{~a`NbMdeaS^zC$E&VDeE&v zi)jb{^uFEOH+5F;=;DybV9(3tA`J}|(?NF_4I63Qw*3(c(vdoD4!TdL)5pih$H#}Z zfDo+Ve1AT_qp#z1I(>hCTjsspx4e+?OM@3ISoSi;<#IWlPGi}A(}AOh>a5;fpw-Wm zDeA@+O~SEJ#OgRbCW@jGdATSjOyegx@XW9W`2RE^7Xj zHz;>BMd`A^{=-RavigZvCk`%@r61qR6YZxutAAf0&`FZ88fxoJ*=5|e?Z?LlnJSmd z<>TXntqhlzSdfnNR)2kceSUs^e}8{|e)6VH+ATp4a4D*)`tQI0{`>Dg%!AM6?KE00 zFP3MT(8!D=BM1V=?M8W0QCrnb>%Z0C3kBA|UH5vuN`sx3DUkbd{e$+wTXj}%?Sp3W zJb&jSS1y+eM?=$2MyJz>{%a2XXaUt^`U}#bus^=VTp)12-!-#HmV$RreJ?Y_2j0sc z9Rxv^Wt30aEO+n%_terfC84J@X*tP)q$W9^&!oj=S(%Q1&K{{!g()wC6w|`C3m?O<3Np82BbP>L(FYj>P%Z?7i@OHbI zJA%^L6nUP{@*2l+EElh`Ixk4d4)y%OrCYb#?Omn^Jy&O?-efP1O=z0t@pwEQkFM*+ zF5qgh?138`$9)FL= z4iDNE-?rTtlbuG^hf0r>Du<%~K z4zL?<;Mw@$H%t<4f{aS``NViIi}#u{1Uv9X>a2dpB;mG%VYudKaNrx79gX0{e;K(D z!GCpD5NL*WP`ur4E@!NO_kuM#%Q7;Ijs9gQ%0<12IxD6A(BTM2X9K(|Wm&#U|FLiU z4gMY8s3*XJ2LB50@=k(R^F}=ZlR-$e7s~$!GIR6b;32)T00000NkvXXu0mjft$62j diff --git a/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_1/00003.png b/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_1/00003.png index 92d19296643d3db1969d3b80eb6c5499ad66f799..19c095ef103af06cd0126dafe1c6abb870035b94 100644 GIT binary patch delta 4538 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 M1^r4naPG$c0FIyBLjV8( delta 4481 zcmbuC>0eR_)W^qcY}ZyT7nm~JEVXjnaH(m`9Jicuv?syLTrd$A6c^-HRyLNJnNqnh zPq>s$nxUW~kYi@%f@?^KWG)Br8U!3!~_blJ@J1YBC`-l5=-sM}k z>)flqzDCzaaktcV39O%06xQySlywT7RZm4u!?Sb;URFoj6^mL=3z$n@YH3Odt?(?D zPY>~pH9hS1vYZqPMx^O~@H43zSKqKLL050ZRx5)GT67(N#QO4qsEf=bW3L&{yTPNS zXS&NO;daG7|1%TsO&oM;?Tsi{dBPw^5ckEz4 z#BUciHOU{`<7sj0Lo4b90_7`$cZ>8dr6iSW{OIIVRe`yEia;cz4wiWT zk*JQZs4~sD3+9*I^!55Uc%;7d^~79HJ1g+$AF{o0I-gP8J99(`PKe8MF1vu_7I05J z!Lbl_CO5yk;9m?vkvOhP%CZ&wM#+ItGClnZuq9iu;g@4RmdUU7I{MYB@{LlQ7MHq~ zEHlMN9$Q-@*El~<*K=C5$XQDXalFF)t>x<#$^6vWXBHoX_Gw6nvmcf;iY}yeT|4pA zdmima&44nkt*s%9Lo-&Cw;wh_psHKSxB1RMQE~$lu3Y@I_Td^N_x}1n3YT zKItRbasY0)kNUH;l`Sa_trI%cjV3zkFXxL@PjB-thOWqtTUrhl9{Mve1O{u-6<{nX z$DzrvM03XP*0}EO$mc^no=!YRJcFF2;B)eL99Jshpqc2}2^LM-*q6L!U`%m=DtocC zylKL(YN%wmwYK(XcgNNGj7eSQnCXWQ{+9QQf^qJXy3ohE&uV?it7D0SqRz>9+Pi{H zdd6l8pb}llE@$NuC-20Z)vjeJ$f5ryH+E^2!%w3g1>3ej0D;ogHd#3tY#_||ec~mW zOMcl}I_b8VLJ^v~IY@6TNb7ut%JV{7J9tUZaHG?9e=?KQF~rtE=T6O zw%ZST{3|VZ^;Zp-ELSK}1vfJ=m??@xb!ybSFuYl2bGLosr3ZEjy2Mg{`CMLI&0sLR zNEi-uExc0%y2~onH|%x{GtL2%o(`G!(23kJyCYZi?G%8) zU>vq-#p3L+uuGhH@TjA>|3jk z+z4)KoYDM}vbF_R9Q!0KvsawhC70~`a5jQ?Np45&jFeN{{d*#a_vV?X9NydJY+Z}LfGP_ArLt9#ojmi_6?5|O} zt!~AXD-Bw#bE#&c2g^Df=r`3mQEmSyIp4&k?0-9*W=*2m$wXGU8!o&V>3Ql>5$Ed^ z1;e)bs&%8U>)Vk`PZG2MEleg;#T&ovdBQm7{iHO-d7QkpVp(F`>t%T3ztA-qXOf^i zH!!TIAJLXZRnI`*vCahq)VR@tKjfD*oS@bURi-wk`e^Z0X=fiM62S)1LmU`#s{ge0 zu$e*bS%NP4o0WkBd~HUd*7ZYQ;dXW(R@jeg=b4*naCf|b-KV+d(dSc}%sHuy0@#U= zaHDv;ga;%9t~-2uK#CMVB9<{zI<2j(QyLeW9czrX&zd;F|6x+wq}KQ!C3SqyB7Eu2 zV(^OIrHzO;65s_L5;>decWM zF$Kt9Oe@V|1O%A5QRBMi6nH?*Qh&W-6Li#Y#=hyLvgb59M4#)$CXrnqARXwykG}{_ zf}(kbwAAIXUrqG`YYOX6k|VM+JNwfo8vo~2u4Czw7`x({9#^!%44=gY#|s~ggY6KphZpYS87E7ge+K`fXtY|-3`+>DnMUl+903e%c{ zD;;Ma^T}i~GNoxAH}Csj4c9_QTdSVW-oh~fWZH6GtCGv*Vv#{>dt8;+q`z))ROs4h zpr?x~@ZV^<#~P8sVezij2Tg4#A|V*qoS(BcENn5;EEU|{2m;dYe@W36nPX}SJ3g4v zDf1-O1hU*qa!`#3w#z2;+0y&$&G-WGjz<^njAc8{)^IColmyo}V!P2>)!pySFi4rx z^fCMtgL{Y!xOkr<=D1oMt_beWH93BZ_A2&43!%AIyzljR$2bk4E$yE%Ii)q#0w{dt z9B&I=2)NBdt|kkx^5vg_IAil4@zIJ&kxm%$MUzY*(ON)2g(Z~}rS+Xx(yu%BnLsqI zXz5uAk+ozNDj_z~c({A?{){zLhyVH*le2$=XSo{aqe3iisQO=_gHc7vFyv%%&kNb`_b%SUlP2reTL&vKs>dC14h`#{v5&7?HA_PlNH>{oqSVbne9`VPmJk*uBI01)*EwfEi>x zD@L5L{`Pt1BGq6bXiaZO=!vJQmBs6>c&_qP6H$Rtt5m8(d24UZ@QS?;bWguIl&yuu zI%AjkB<-eNTx|UDo)y(_NrIESAzV4e1?XTR*Cqx)z!v% zoqUGDz^sO&{3-VhtPTxeGi-K04!=}19k4V=63JwVL$>bzt#rE5N3D~VROVYHcPTUf z)rS~tmDN5G=g|78U3sIWR*MA?ZgW<?bnzEs~>S&wY!J@5ok@Z14-Sb2Ice!s< z_)B-+#HOY?&T-nV*p&KOYYrpriZAk>ADWRVq8nS{GRK&iz^CTr9l4e8XO+#1q4qvQ zCg=VNSe&NX75CCYFZ@{)KDxJ0_t%xu?9&dyE?zt5b`q2qZ2meK4bEoxR3 zNBr!ZV@v6ZB(%H=rHXPf2*0XdKwmhNgMEF zwtzP45rBc&jalg%cW?t2nv#5Xv~im|7v4gWs%^N}?TR^q53%3&8n0ftSzBFgFMG|3 zfx%#d?cqe0mMmU+boeL9AYrN&MDFXrPsrjNVxG-F@I*he^;Kc%{S%3X^Z^6IS;S!$ z9lQF6h7xRr*3+V7;U0Li-a6mbsWz`mMGydt@rbReQ4mxFC5MC)6Z(}xH^#ji=B^5r7BUk1|6MGD7io`sBp)z(NB9L6i+CSUilv(sZBIsjB|$R zcyRtdej{q7R(}6{(KO0Q6ruf2@ijD?qyRLep~-xc)pq7-I*q2yV2qz&BxzNp!Ytb^ z++lknq3l##2pv0}8+XhA%KOTgI(w-Iw>FImUzvNbUJU*34WPQ60?xnh? zs89z9AYl~_gT-n$?m*P=YG`ifQGn zZ?gCt#&0{@&uNSC->AncN;tG2@#<4s8eR50I@a4KyO2#UEVKksujbjEkLb73CT4K!U>Z1*&4dnYg?t;+e$v0)MtKUlYy%nS5kx7 zxDZezt_Yo9Vpa{oUF8mV23U$Gj7BeHXbjz^_J;-pfWcr+@JuLj$W{~6g=AZ*A$O>v z2O^Zm0&}@rT2S#ChV9L}&Xo>f z5NhJs*hTFA+fE8>dBdC|)O+TWa)mVUAAvqnV-HW}W~RPAoI4Qp82oWkx~!f5@Ob6o z#Y;sBN7Wo^bfR-;54#K9%s+o;|0;!dUu7sSvvr2SmYsKRCNb`muS`mxMy0 z_5wk-s85GD=>41M@2qy36*rubP&jQ!^znHKmrmKz8=^`uTgYcCIG5HzcXnu1tvU@| z>WQXCqs>qO0S7fV#0Q5bs~};!L$?Vn`hv=wOMT_9GO_9DY*=*05|A4~WYHG;v>Tp( zId4&xM^ZVaf7^!g-$@ua#C$Es4vmQ`;bmoITJpg{z8k)*Z2r*X6JFOz(on|dZJdytCsB<8AAnXDZjA5S}p;?Uh`X#xU%s|IV}1kTu%*>=SlRCPVRoSvQr@l=a9E)G&%l44c`cm!PKOREKXwbGa z8!7+8+KrNEZs3GNqXC&iOLeulI54qv=-x!OrD)I`;9VyFRWm{;0d0oyo~Jz23NtOP zQh@KKQK`nznW``r?OL0Z%}T{-rQ^72(G?GvHcOQomCFiG*#OTG;QON|aDBfNXHlCj}Ser-3$-%G=t}`<~SgI?bj}6#=n{EMJ`JOMvldnzL zEwvQ9nfhLyW14!VSzkZpv6GS8&rYJ>_CW=%EAiXzfA|Rqt0t8fg7f2|f91#)eQVhLIKp>!0=}HR{ zAfZOOg49r?iS*y$zTY2TW^~4xd&={i{p`K=T5I3!lyloD=iWWN{#VBGCZ9xrISi(E zlKG%$#O3Nai2Bo`95Y7<1Tvl!$`_YJTHQ9;mX!F)U3X|Z3_G#Lnhp(7LYykA)pd=lXErWJ zw0{W<_87+0Jw(rkw8rNP5w?XN&?cqtHww{FazL^>=mluW4XpJ+x-oKAi28C@0FZ-x zy@9UH9g-HsKU&z-QBt&i`%i9G-WtG~Y8wwD;Vj`3rD81FHy^F5buI=(oA2l)zCEv- z`7g13;k}8;_c|E5o?CT%WSabu2O$CR2VccgHe(khs4x1A!BDrJce!%}S)@d0(F?nxw1?R%PXOU|U)!%90YH(Z0f*}5MZ2Zo?e+QV^=x|_OF>=S>3RLOD&8d=ks;V zldCxM1T;>QJ7Ear>-GjWByMl{q3umO_Hv`oJq3isS)FJ}@6T;*`d_ToKU{6GgG;rM zB^wL6_?-H#{GH~nqHxelkguE<9T|2y1+Taw&bqYZsjHj1ed6F!?)pb8ErneHZ@78~ z-uPTiXL2x{amg!Mw$CajGSdf|!39R^zbhSYjvZ7iQ}xXZmNHgrhC907F@#C+_!@@F z0wca1q8`2U1nwNifgsIP_Niithu6T1F7ncZ#tm<^LBh`MY^{qKC~I!Fn18igK7Y|VBX>T>K81hZ(ziZoM1;KC5b!zM z?QF?0H(2N`Xxzycs+b6ZpUlcXPj&=kF9wwFeSAC4YHifiX^6IOoa%S8)v}X*;#*b4 z%DxcbfuY>#bWXp{K#k|UezpVigk{96!8@uyYO;PkqRrjcIvvSO!K~k!*v`Kcq>+ZG z=f0kw1rzG|B*t@30FleF@3(bIOA_ZE&QFeXW?Q2R6(0B4J$*(vz#KbccWMXz7@BuSS~diXTi$HmjH~4Ns1J>i@i2Sf@q52lYEqAp>0q zRL<;vBjvYc1Pc0q^y?E0J+-mts5X_E>yp41>FCbI5HZRE%${YE=DNe2*bKhNTUm$4 z;Cjii&gs@-Y&n&^iQOG^X%dWjx-%j2T$3at&&!4$bs6u+!R*nz71CN~+Hzi(2iD>k zu%L#Q+`BAcrs#15q^O%)`^9eDX^UuAFBy_8J$L_ROS3#XblxGCJf zKNQL61G?a77*m?{O&|Wj@dmEr0Q6tt{h@=9TJ_cv$4fmxA|E^;RfJpaq*eb0^fnR9 zY-4ZiSZdYvQOei*roq#+y&R`HW}va$UbwU2OGg`~x<2x7= zn6$7+d7*91i7?)?2ol| zA*U-7kY@E(Vipg%n#Yr+4Tmgw`X;c?EV365Dlzzc{Ll34Zs=7>l?2RY@#zFVacDwQ z1boSnU*uavy~Lf`h*5;~k1EtQP;Ujr>APNExQ|O9{P##fVhX;n4zNb(uW-XIYpXTy zP6akwPqj8b$g7#Kd}Bc3oVNO8fz@Hr(s#^WY$jEY{)R^OKDs%?{F!peyWS~ajcI9l zE$_XUO>De+k@LzvOP^~Xn!gO50=u9w^e#svOYF^wSm>urb#h9OSrkLp^V2_^+_i zRh5z(gyG{xL=>IkOzmMQ(Yg`=F5tP&q z?@hcnq_JwNVdQpMRl(}(tL#F@WmhioJYcl(NYuu?Q!XnIT)y4p1``cEj5z+(i#l!j z@3XP{5$(UoWc?HC3KA;$wp*R$b{(s$-l(AO-PU)y6Z8jNl~B>gg=9uW{}9EKt0${k z`7Ly5*>3@>`e%RtJ~SEG^iOWxR^~D5V(cBPdOf$fBr6(^vxTAiLKY(zi|wZofc0); zZw4$Q%&!KT^_Nz`_CrfV7w^`Y%MoFPEY9f7c<6ZoEqpU6&WhCk@?a-*w!Nu^>&sC3|%lkeX?dLhpRCM);n?AYuY zyS|-T>pS|2tOaMs_FgXa2=KAx$4a$@%udCR-TfO}E1tpR_3iafcib1`rx%^mIPAj~-P+}4dqa2^Q-f+DrHjIiARi0f~TDL6sWy<4#V(s}Bqp54GQ>mk8 zIYRnzNQyd*aqg6khHGKtREw%p%01UplE9nxQr9%jz7Lp+N6v$&KrR3m7BZRl|JKoo z2wiu-d_mM2-Nta$sp?^ODDn`hqL0%?H1joB{TQW4`VhL?zCYZajJU}BzZD?o|5{Hf zxm3Lo&A$1V0a|B4LOk^R3P>@0V`OGMeqCTCmU4I;(mEra5^euDu>4sxM>kWd#``*Tr0MBK*CvBv)<%*Q9DlSx_5^fMuE? z@HPF_*dmA=8w&YQQ_s~b`05l~NRMf1xC^#};vK-fmBlBiUE%=xgJNEIxgC7+$eFHs zqk~o0+Az;|-xo@+0n==J+S!YQs_${stGbuhSB7*@;&)Lage{gK^6q%e7tM|*ay4F? zeDR@ZW9BJJ+$HGIf1e9G;zglSt+LY}1Xb3PFL&J6eYCeQqvD!hgv&7Nf8TG5IXmu( z#@cl;($mc=!KT!mUXz(}*OCh>p{=d0eN}emYd!@XX59@ne0qF>0ogVcX3k{A(*n8s zr0deBQ%M&Yt^*q|!W=>|ZL;U{MZ!J7cQf{4tQN(In2**DD?g4%KK#{C?U9_-y+dV! z3L9z|sq!G}(r8pjZ2ym?zhGt3D=H^5CRR_Z^)_S=WPMXhfZhH*Rx{rD_U}{dvQuy% zd*M6!4_+8&McWg{4VaOA)mSRZM_i64>%omyyxZ&AVPL{hkY#O#*fXzixBB@Mu0E1G zH7B5l!}atk7u>wR&uc7|KOsP*Loh)@EY54~nU;;KA@I3y8m{8{{K5s%MX!I2i}xMN z&o;u_%c*{#qCx<*ms!r1KFzrNLOxZvrV_flh8;#8@9#Ui@hfN)i65SdPw=S8yXmPc zxQI0aqEWNk)P5?6*d-7HJJK;kJC|!=%(|hG2G0=EwyMse4!?n$7ctc)Ax;s`!Mx#Wza5uq-Vuy zxp%jbvdx=ft;)8pys;dEsgMXZsW|k0va>WTd3oc*R8U{#R z%jnZ7gQvBS+>6O1?s=cl^hcw{+yb z?gtCbs+y8FCLsFg$xd@nc)tBgkbf(Njy>gVc)U7@J({7ni17+2^!r!*-%P*So1K8= zqIw|4#zS_sevsV)PP1d<|A40s7)=i$$idkUCLBZ%ZWm_4b;rRL7@r%HlBW zG=x|;AxhXDy|S!KI5zV)`mZ$dGlDmDdZtBi!4MUz2V1_BANeKl>7ng2`W$8*^i-Gs z{n4Q~UPLJNan{}a9Zx&9oDRRl^Sw2OQg_h?CtB#N_}uV5oMaE{L7@j^6!dweOuIX@ zPV6yzQ0I%DQ*r=x1&b2|^5PTm?o|lnTEc(~07aDeiGU#V4b+&0UoR1}Y!z6U+8kja zS6%Z?Io0jn10ChzRdHKYy`f>jj~eyd>4o+E-r3d-0z-I964IDu2xxS|G^F#Zc|!{9 z1mbK7sO&bP)P+D1-P_+*Ykt>LrS38t^tNw}{A01MoLbsNxnrRUB-`h+am;|IZzBLF z6EgX}=ek*mvEe*(7VB;GHJkDIN_DqB-Iwz?ovgo4(&oaIj`a9Mm}r_YM=8sG^00pn z?@P=n@4GuE@1b(hja6qgc|+&{NoP@YLT=9^(PK%4*>&F~h)Mj)(zM~M;7W45`pm{& z`K@+j(n|2?amZefs2?qHo6;hOc?Ia#WZOoUr^v^t`23i7Ju83xAS&yTS=H|%xr71g zw_noq&oFLJ>V#9ST$=a$j<>4ndjlNHJnn)`o!n`)|(k<`T;9Z#LXn zqOjcIyOF1f<=^Fw^Ev5}hetXLP-^2+)WMUo`lnX9{_ZlWK;%57MRY~GNrmP17Y+n{ zHS3JnRsW-@&GfNP7Iquof-Qo}RR8dWj*cv;ZZv&Qx=)(e7foua$#K0^EW)kw(C4V* zjWAM1MXh0Y-S$qf80R-c=xA0U8D1_@TT_mZRqmtd!7i z#M&T_Y3X}LAh=GQy!X0bbsdjL`J3<(H&fv!s)D5urLIpO+~=7d56VO+tm!NTuc>@Q zsAk!?HV5v^y|7uj@Nbeifp`DD?HIlXQwT zp{ycmm?iTT)Ls6|+Rozp{;F-)jOzXKX`bA#mK5$WVTMPb`U3)Nf+#bU zMSR_4&05PNKxvpOpcfwd>+EsH*4xLjLMxrz(YJ0d%zSGgw&uTAnJPTCk=;9->Wxu= zI=KSZYa-)y$YL&%8)L6>%oGXz6~GLJzYs_f)BNu9j?dsD7&3FGW!8eve8y|_w#`z7 zh>HGWSU(R-OGj(DymDcUX!cSGAyy_QxG;wEZT#I+hjo+7@o$jqxJ`#DuqOjMX@pzW zf_$iN-G_jgucmur)e6nr{QU|s0523)fhDL}V#Bc;6MhYQ?-mn*uv zBX-OnpxotRY&fL_;fh6G0k)b!1>v*dqKD>|xSLy(l()M#w0zmHDUzR1r)7e=q-&zIhy1_k3hXwakv% zB)NSu`^$ZMw9CbJg;a`<@-PAq=6oBo9te`zTx6YsLl;pW@+jP!l`WLsw>*6~i!}%1 zAw^cALCh!qOXEeIzU}*R1?p;<=}RB`hsZAFM?2+nPW_ygJ+otg%$BkZ*0gk_L_ass z`GogiV%ox+rrLxyqi?~xesaSvZTgejis`c~>)3N3DQn4a>2pCwit{BG)6WI(opuO! z?&XRi*GtkgL@U`!1LeziXg84f`zd&n?WVy#ejKsLPM0V*G(8^E@1a89_RM$5qH2u^5FWxN48QsPjNQ6Q?9-; z;})9+lcA?~ujX(paeFFW*lh!sbvHMo&Rp$rI;Lw8Y>~m_H+p}Mxrj6pv%h@l>pRhq zUSO9K_54TT{Ope%iE0j+Fb9^5B|n$a+6N!I?gWHJ1MO4p4X>Ua+52e))(D7Bsb$ps z=@ks74l`wHAQQJ9+e{GCJmD3)V2sdJA1)4|NV`nCX_y=^OZ5`kog<^KE%&UhaNJ^X z?9ywShRrWWYawc?t?x8&wEw0u=32kMoUTs75}TP2OS8)wD@XngH!L;^rntWYbvk(? zMti{49VOixwIKnGBV2!&Z49Ur?hu@t>OWS!FLU#waTD=AStd5E?*bC`t5 z0Cl5@fP(=#T_M1FSy?!$?a2LmaesW^1Yo1W>LJ?szo#lz{?Mh^MaX~ZSKshhh|c4T zIay2Z_5KpyGB98>UCz-6c7aIkFY`5IOVQ1_M^2AOyNip9H;{2BrmP68^U^Ux-#e20`Xb<^8ZkVYSPa?!poUoT)W_z z3n4v2epN%QEpw7M2R)!N{O!*Z?S`fwRZnbRHa(SV?5^*?e|}bKIxQxL*l^MG8FNC0 zNTdJmqAIx>Y(Hic3@qWHjyXV?wUpX=aHj(l?zvc3R)YDxOkF>Lwar*yC%d4J%o~jl zKM+?{vp1gj#ICb#d&rHCNKAF^NdM#tjOu>`o~2B6*IRcPJOC%_f<~upzpb&NA1l9A ze>u%Pzo{aZ+A6~kSBWTM4Yf zjBGSg#}jxA&5yh86d-GF$x99Q9AB8TbD2do_dI*h7g^wdcZCZ)eUC?xr86)dld5@a zs;0kJ3zMXt$y9#AF6$wFygYdB3^{mz7v$#0$cDk=}6}-c$sShKZvj{ja&A?W-8aXYVt@~I6Mc$*CIo3vRx)q81|zyqsCjO| zbFzn3yOB!I8(iz`spC?xrxz%U_au}TC>WuByzAKHBLeOAW_!P7gYfcFTdnNN(fxeP zWUsXu^S12^>dO$PtKR^-9rwdF@+dHOdvJc{|(^XZHsax{PKrwq2pn3Scm)D^lkiIh zI1L;L1Ig*Wm-#taemZU~QoIR_y1oqK4xOuic>VTgl=Q>3)E14%qQyFH%#T^Z$5sX6 z=AihyKd`hvb8Pq5bQ)#(svq17(BU2ZrJ4PYtxxg2;Fi*tXK1Ap^<^PdgWvgoe0r!oH}0%%po*&DV?5ZT>4*ROFcf%_jeP!4WWu+5;hz^M>Yom8L_-gG+?1{wT}*Mj?X`PL9=6Jzuc_TN^5a>ayV^6QPIdItl<1pb`bNZ zyz;#k23AI|F=*sYzUQ8F&aT32K(?zWnQ5uMC%=;#0C{kvEzdze^ew{Ig@Cv@!1 zpO_$(ug`BN6Eck1hrE(Ixm?7I>O7KV#C`H|I)&RIcn~JKz6ZSMBUmY1M`oar@GWMK<^Sn8PoxD2#&b-=5=#IE-oedGX%9ZzH>QZTa4& z2H_E_ie~ZlO!#Tr=IF$nymg2zdJL5S&Hzv`=0AZ{V_-#rYg zRmirgWO9bX$0Btj@#uM%D@qOfH&luiB?S^Jaxasox#r- zt+7yLJu=mJhal?6jDJpBJy*ol(D0}N<=H?Q8)bOPj-KvYM>YEzVj=^IcZ&hMBlxy& z@)mqN-_^9L8$qLeZNB)d*Z(Ajiap`Nx#7-zg6QKkikwkrWUwaMzS7+?k#AP^YTj@t z9lS>dyjJ5Ir?zn~=Rf5_=(w0KPJkQ~7cHj7#jp_kkhB}p%9B6?xi~8$SYpm;>Qo){ zW!@956_tO7?XW|&g5(Mu&zNRO(uuLXjcH)!F=NG&)`@j63J{l0kw_^=*n+BaKVh#~ zY`&mr`&qKf76=Q&{-jI(G zS4c5B@rWC9)YFn04$4k|_2kcpts{jF7)^gpZTcS_X-u3L?f_A`qa_gNw=H@Tt_16K zm1&3n{&NsbMpBzz!bhM%UK=)f_;$t3501H|Hz^g13g4p$lsfm-Ta01tjyrd}tDu|N zACSPJ(F~J2+Kib^1-AhYGAHD@>g6fuM_((gsf*at2*AQKe2necMldNhM)1 zjSwG7ZvrY+5fN>FPl&3X^kh3ri2rTz7Xkn%GdMK8Ue)?FvtPuQ-?zvZ!TMM7UM`Q6 zNq0eC-m@noKIda6*3h74H<+zVfc?7k=??IqXsDE-yZ9{K%g5R8Ptr5fzOL_igf1*o zGf3>1@yi3t1r*;<&M&xO{Ta+|B2*j@2p6TFz)c8*=0Ab*1`z@YeWiXLl4PTilXT}C z6|mJxl?@8sCMMZzf@fUNHz*OPQSvBvo}VoPr0 zE0qa0S!^$D@JtkN7Ht?ho2|&1Bks)f(NM12O$=%EWUUv9I&%^9HR7uS=2*2u)z2%( z^HVBDnjC{B# zywc#&a{qJLIR`u1&}lc>Q9*kcn3sg2wv=0WmhsW&Y*O6389)3onK5o z2vXHGW@*t;a@l$zKa8B(oetKUKYyf}%9qJp&<|2;Rb%D{H5OQ3pfM{*s6UDH+gl)8 z;@}*l@2*(f@)Hviv^|_88U3S#VfOFUUrFQwp{Thp%iCD;xcs9ezVDT8C@cn#wNt_K);N}wL-n^i7DSt6#(J@btT@j+Pd_WjpUYbp z&Ngjm8vJCE#z1E?@yL@47t#LhU^419=n!#EmxW7&UBQ7In8#je)6*E$73H@t6_xKs zwCBO>2$lB^U}$?7rulc`_K1tU-FT6Jq06Hm)0TX>AeT4gK`LYRngnez7T7CJ5X~jA zxb1zY#g*e!v;2o9CRmay)^H2EKK=dj0&{Rm{j@od{QO6pj^uKIxDMTMm}Pp5Safk! zOG`O#;FI_|2xfr&X>|nJM zYZlCz<*5R;%#Z)rS-~s>Z^kYkJc*U9I7bGAyZqv*ESBXYlM z+usG|AgISA5~Tg=l=p}e;{IBM*c?ODaOJMOsh1c@QM7m*G|hT)lLxL`0VUYhSVRK6 z8Ga?^L+e)@12laUCI^w z_EsyEFEcs`Cv19NIk`x@|0U@)W{3j_9BP9y{55!3;p-ftr1J9H>%A2jW@bj9q*s!&k4{hDIwQJ`O$fhzNBlh)iu2D=S8}6ssVpXwk#Nh>2EhK{=7eXn1-tqo{%ehM~}2&!9_|n~y$SmdfW!d)?^ckQwPD-DG=8 zxQxOkEBDt2|D;}qy$B`_5V|xg*&=!))A}|F7}BCc?o#FRY)ax8cEz;87aFH|@4lOH z*NqDU5~QZnogQ^boujh=%A>}y3hD|Mm1$$131NuXq3xCt2ww*r(OhWN2t7{ZXAeMkFca~=UIWN^GkJ^u< zUAZ&%ZteBtsM7{7H<>Z4N0LI5%p9qIUb>>5`|ReOv~zEmP+ZcGuWIz5cSRaFT4AHEVlFKKqL5#3b%`}ZgLILr77?$=`)PZ&zM5&FZvPOHQ@ z4*0L<10%nJFI zdp}A_R8>`V)MkTJGg=F=pk{D*d_n*i_~LPMsOHg}YQ^Nght0b~F+YP;jf{TVV9G(4 z(=qs4iBT7V`jzZ~db3B}LTfNHMCV_bV7`< z-REF?q>qGy;)3W$%^5o+{1imh2cX>KS(l-daC&k`I3j|&qR2OZPcLX(y`rv8h;BQ| z0&ChhRW8R(eZbh@0r~=bHOcp7`J?7Q22zF@8g-YGl@ZH!F}hxUN7EALwRZ^jOC;|q z?l7X{mlY;Yrko;-&P*m3k%;QJnJTEy%>42!G47SHQ(;D($r5PC1Pwo3Ra$*|ugYiW zPlV5eQ7J$aUukMoZExe`!`byrA;_X)fYlzDj2wbZx6 z7^$hMHbkxVx3lcrv!6wP-GxJb8B{;>$s92$cJ%i%7Hu#@f`jWhe<#Ze(L{w?admky zY8%5zag24N^hSD2ryw*y0shyJf$&RR)VwEj-!ocrq59n0$!8w7ExLj1Q7~lH)GA1& z1y-QJ4T_gGv|qI`dA}K=b>@XNeAcQ8N zy3_7*phtEsEe3bc6!{Vb3-|_m-uTs9osLyAC+h`cZsxn(~d2rP& zHMn1@-`wMGvpiEKUYbS}45eSPRL|vZfxDOc&UbhNmRl|=r2&ms7bnu$d9MBubkUr3 z)cG*V&p&Pg3=T6Ih04;qaQ(B}TBAG|P!Y*hx>p)_fNEX{06l9u;xiGs=3)#MtrM1J zqp}4`*`mbt^%C3y12-wSYh3>WX*%Etn~G&~`kbL^a!m&G8&|I@4eOSE;%D^{-Tj+6 zc!Z^hr97pF%IOtf8Z0R}IoxOk4ZISLUyG!jKMJcy2!w_mq%7h{536qZl-7yTmi%afvDpr<7*4%D= zQ#hB)|4_phoe;dr=eq_{e=%tuS>ltxtA4@qeLv7rWB`c2h>~b%-+bN;5b&I@!-#+9blU~Fd6%!2HX?AlGDqQ zy`nR-<|`2V*LbC{tk242tu)hB=1xAi6Ya#Y4} z$uROR&Vfk)OCpPj2)+wH9SM)N16&JkP=@KZ>Bk`VcXw+h z)?!v<2+`@mf(4QHxITZ+8~)=^HNe>qE28On(`M8YKdrlLI3V_AX@hocZnIePn&pg+ z>AlPk4@tSJu?7ID3o?fSd!UqaUd!A*#U*ebf~xM3PSMauxhS0nf0mgx&)R&El_S?Ppk-Ys z{yeHD&0mA67->wZk-t>X!kzr8lLb_BL`%3Eh+zr?2c!jRhsF123@O7aOFbG0go5Hy zlC4Gt*dSj8jy%(FU_)qPa@Oe9S3sk9qw@K{i3k|4cXEOG>)>-h6LH!f{@i z_AoA7AALU0M19HaeXxVvl23bWFjO5-&}&!QZ=~2FY4nk-sFygJjOz;p68Yc+MQ&hp{uN`XoJ_(ZpPp<+?0^W|jB(h|@SufyB)@StJMBu7w!ZgPe^SRkf+Y{Aa`))P!);Fhk|t%b*tcPyksRv72gc% z%|RX)e;kK+s-~!QJn&peSGE`&o-O7-3{rK~A9JefFX>OLO_>h|OD*Y29u$AZOc+)~ zP$Mt=!v*x+Z&M~{55!Qd=pcF?EuPK2FrU8Ml-YZ}YIUm-cr_`e`Wi#UEpyb`MF(1{ z$1|Qu!bnK7cOdX1n}Aa;#*Qz6%oNdG*+&zcC03-Gdv>K2vUo|A!^JSG3iy>RKQ7#J zc}t5K7N@xj&N8R=C7;sbex_pU`L49f&3;fE;rwF=>t1T)w{qQ7 za)b_ZPr>}g^dBY2zo{mFIi~GDHgtT2F$zc61Tg1FF zRYGuS_@B_9y5ct#Hlc*UU>#izI0KH#$ z^)@gDR#2YjzE%jny>w{ETTpLY1M3}}pSg3P=Jj1U2{Jxnp=UC2 zvHp9WBjruVk>sl@OTax*akunBhkAGl2T0}ZqNaA;*>u7)N-4F0SarY7L2d4h7}Eis z(8y1$ez@chke}SN+PU@t&q#HWU2HjJvVwhzo-k=A{%hI^@eiWcy@LwrmOJ zoqJVZ4AV=mXoolYMkYONES`vjdV$7$XJ6Q$<*Q!FdPh1j{1|QYg?~jfov&EAD3a~d zU^lTUH!H8|44Gcl9<{WS9+GaDl%DQ0i@Wq2f#%(9>#kgVAs-W0?W(F>NovfehJ>)6 zF@F=HZ?9+yO?<9>c+2HvHOYL6Q|CN5*KmU^LM^OTdz4{*F;x2e*VX@j1i@Rdq&l0< z$$VjwIqMRG`ni{1!LmheIQjQ)so8C}J*g7pVL++oC|I6rOBompgFrCM=;%2R+=9Q5 zkcK{YkYW%0L}?*(#@(Nfy#NL}Tjoj@W_cM=3C@FU1*w9x|Mqtr4g>+_vaS%wxlM}D zxN(6cFg;>T0TUBvv)%omkZd&$$c-0m-d=oq`LQ7XdfL_tfi$5>=0t|-?^fu-xt@HX z{zV@XlUeM8|Fs4(Vj&)_Gn^HB9(6t)N4wTA((a}|*z7pERgHDm3B>T}F>U{X7K-2p zn+Cy>U}vD3oNh4mgb5~)&j`VID`s6MEQSEB8G;z+l@@u!$3B~2pJV+3bVez@w;ux& zh2cJE_{4*kp19Oaq*Z`+3?q$1K4aU{uiX$IQJ(i|KHJ385u>?teLlF37=bD*nr~8Ji!WEJK;`_H8I)$4Y+g-Dh$FZ zNFb*nM+Na0{Z=oZ-%8@L2;2Oh=N15|#BD3eW+A#;iurFqO$mVJoRyX>Fpq+)XR{f7 zbxps0>x`>?O4IilZR58%O~;n+F@;hgsUR>HXWC3lr5`2Bv@pCR()M-cRm9|XADD8I z4B0|uiao7=0x!IjPyRkYD4gr10_UfCe76Tc*1KeXK}HHK_UOUYcFjOE3!fh1Lqzy!Zk|ql z$n&AMvLEeX4&QU8`3QM!aTN=qS#ug)Ms3egFTV!#@jct1OJ4APffZQ4a~bQQDFcpQ z&DjD9IRyAZ$?n3nl)7c%+)t3!j89fvZ4OnRF;)3OVBAa>3O$a|;zs51to-r(hj%5_ zMZaf&Ouq#K(@^tK{^X$a+IWzylhw8pc+w@%HH_{@w2yrg*6Ca=%Mg%1I!z98jhN6$ zeD2#RVH^g;r4;$G>aL!i+gI~*W@}xz8yDtTMYthNj5izPEjHP{X{^68ML;8to*i*w zeUkE2u3oLl^z5ig_X+D-9=OV#cigrfK90>v!mIFFSJVu2zuG8|5HnST__IyxMPW{gGZEp~JAvI&< z<1%vm`j%nWrx&)?1wgvml`|HK_o%box0`X}ukb&XbH>)2K4|E`QwD;io3Rth@vxkmAfHRB$V);yB_ z&ds%V?`gVUP~ix61IM}gRJ5_HhQiKusc?9BSq zkPXmyAdl9F01WvD+|&G#6J%f%RdZ*eeER$mix*dlJ*ajgd*I)$Lm(F@4^D>~V!J%*wh@#d;Xxo6 zCB3qJ=9j&gN`MgQRhLfVkzFQ?8V5!vR%eO|ohp;1F)q-BqyntAb{fy6-(g&u{umWAxH7%}8)Q zbOM`m1|_TPy#yE{G+DGAw620p2zFM5^5F1rV$+=qmz1r^3h1m@ovDg)eMUl2yk|ng z-fEGViTzk2481!IJ~L&W4@}A!aO92S_&UWJrrebs3(oZkd%8`f25~IKfN!_Cc@rRP zRfftvS}ZBi637>lyw$c60ruRlwv-Xt`xC1RNT%GhNqnQzP6pVy9sb^ED6eV#Qcm93 z*Z@GTQE`(`ubkuxL;pwou~#Zla?MC>>8x;RCzw}AUKu_xX9@qp9fvE}%v3$^9H`kG zzEDo(cI5bnmE+ifBFjE)K0qjH_VCbh{Jt@m-3%l`hNLg~JiKtyl%mL4R8`n-43h1p zC!f?Gyy0l;GCRp!g=+jeyL3v64>&xV4GL7gZb=1lE+Fn~04JObhs5;1?Y!pGv#`u| zROFB{H4Gunfa1YSx>2tZM&$C(pUuOtcLD?B=s{_2Zd1OS>|kdn{-sn!SM8AqDP!?3 z#uK{47(gHKRpwxgO7URAX40)^aXX-O#!~iPItC0Bmv9r4;E<4>836nT$CHC1+jqJ6 z1yK-w{f4OxPx9w9MYp_eS1R#A+gBO+ckg74uqE=1xyf2!@Rh?pVUote!0BVD-#1-% z#N)%j1PyWneT>gx=$xFKb%mwK*Dpy+UaJ4m(F6H+7F{VFQ{dya)JJui;W%&@EdHlNJ;?a= zdDgsJo=p`1Cs2^l`}YO?8>b8uBif%K6ytI22rwUk#A?Xv{rfW@d)!yx*EsdEBtYh7 zHP2cMs$$&L8#GKufQbgb9RwJZoFVJwT!S(0Ef;_K86FD zPVUQnP$&0Z9pfkH!ZgbG{Cg2Na3boVLuWr*$4^~Hrqg~o-rV6Sph zV&^2%3qVJ*8M@H6AEl*eQI_!wD1FY0RAG3tl`*Vv;B35m8AMz`svzmiBUjD1CzjHk zoO*>`A}J%sQ34YU+Z3R-w45%LnZXwSeSk?FEL(3!QHf zWwajtw=w*bGW)9ZFm$AKw6KcGw@&DrI_ouig+A+yG`Xr=Gq7GtY$>1q`*#KA#()94 zL-7}N;=NO;Iv;F3Hrf2H#U8CYB+V?1JZKMK#HH6HJ4;8q3x10EcyjS>#-P7c=xFye z)u14Mmo*9F%ql4^2OJ3B8kF#jDr0h!eQ2;6us_8i+V@@8GO%Kp`Sy^M0NL5H6*a_q zJzY_EV`-MSbdLb`tJsUTFxZwm>{2}q?t8bukArMdSOSH2p8tNM6n9fWFc9$A28U_} zp@*+Q@S$fwo@T0r_%(3gHX8IXgQ8~Tahxph)DZddeQS z!9_%PS`q{m4Ulmmq3U2D6ucRI{&-HZykrIB9#@msd=ED_pBY@tv3U-DDa+$sV0U+a ze;*Vcz|kaGWTi*s+>hjZp(s!^*l0aHv1JMp+9)1Cg@0BZ(z@W7&*8-t=ppAKa20DZ zRe7Rx5QzQCVn7C`gvX!CiCpbCuW+nEf2B-O*K;jQ7G!LEe)oXxp#frL(g3O%eJYC! zu0)l{9WyT9`;k*$Sg-igyB;u?O%MwoQ`wDmd#CQN1R%I@V9;0IKAf+${+R<#&GPOf zVxWTT2~Wg9(XkrD$Z|^BKSw-hU|9t=Pc{A%qNc;_I9DbDV=Y$!+{CA_m3vG`&E-_wY)T>YE znrT3h5sJ;7J5PUt6~MES4F?75&3{AaAYvy`VJx^fZ|q=(Q22T8fedf?FQ-4#{<+fD z9y>jjcx`x985ADsK#jGrZxC`prYZ7rgLMVHvXjo;3EzVEz`fi+@Z6vN40PqaX*QhU zA`L*lS{855ZT`C?76%i;Kg!`gVLdPXV%xWc!TgQfAGf1FoC36t8oK<{fmX^F=hqf4 z{u*maP}FU;O?+XU$d~3VE&uwBy)JXpKk))K-q#iVj1=zg)|icok_hY~f2^;?g3Llp z?1?>J2S17#8JE8lpBeLK#qDb&`2Tg7DLnpiRqo^s5FzJ6`+or~0Mh?h(D1MDE`1W7 n%^S4@lc6MTlh7nI7v=u~BJ@92Jq*(K00000NkvXXu0mjf!+=x4(Dv^=WUf zz-6mUDzAe;WQ*smvX?=iA?j2W@w(LK;^N4@b5xVAG4Myj@ST0;aZdqX0iSjXH{>?S z9*XjXwHU-NO6wWPm{l*SrEq&s+#6gW5qzkOjqhkAb3;6HbY-r9=F%g{kAfA`?U^+U zjg1lLmZT3vS-sH#2iq^;SXF)h=YK|4o~vb*sA+tvcBLio#p;)i=J`ly81_u}Ag$fC z-jjhgv8rV5e6gHZQFk^P&P3bX+^ndWOB>R&9EF41hz4^#13FM%?+6*2#&Br65-auM z;I52e_M9pdb$qHATOf}smFCfPS@toczb+1vk71;|J>e_peVEAP`I+Di!=IgbfWlP3 z?kc6u=BVQM#RNZi>#Z%%POny^c~xvd8L^q~W}_*LFIKf^1{sYb(bp1ExoNK@N^kK* z4RBRfq*!CXK61hJm2G$;^h+XnD)*$Dq+X^F_UXu2X*bfVb$a~)J0&P0 zAUsa(^)ee9+mFZe>vWaCRz+!U?gw!-+?HeNu5J0tr5{sJR`F2gUgDy3qVMLPV8y#s z5;ywzr`IQ9t?7|%GQcrGDym%(m_$V;(3|a7Dypj=pS~;caex4{s*33te%p0v0l%N(_*GR-KNhDY@a7?CeUbQfAxjMz2ivI za_^y$y?7{Dcwzw`&WG7ujy=ga>u5i+g}$%a<~w z*eF42h)m=aHVs3R{cUgFQH5Z2zrL|Gex~V9FIbUSK9@y0{BXHI%j_NIZvF$6 z^LJfPxIBBY!99_O+cH>DfrX%^o7krSJ#0 zQ^Ku1G*2O!gLblX-ICz=nA171XSakI2n0_pt&GJp2dC;vl2B$ktqfN0?;}`?jgsd3 zkw{vCSE}TIS#HdGAKh$L_#@E4t<IV6_a|*|K3nCg4MqoY%t>$9BGhA};OhYzXPftC6rK$!jUUXiKFZ8Qp9- zStjlVwpnFcW9v?U@M1F*hl>6V$=oL}hm+kXXmvimYcn-mpGrfP)b^~YS&1fX4ft#v% zEB1=u>re2A%$OCrp90-x9t-j~l02UHOx>NXh8Ml?09!Zf;fNAZ7iD=^ISEarB*{yu zksbXK*Q1Gwu&4ds!2)@+mbZuOz%yHJ>77+k(gFq^GZ*)KF5=QxI&v1!y(izjy+EL_ zOQ|ZCxKp28y7Pa3uOOGwvVZi278)D(`jypfuGyFhV@Lk-+lxNpi>#=y^T+eW+R^dj z=y&!)+CEEF-hu1&Sygkncn5M83fS$bf2d*%(a)S?2g6-9+{}*6_C_oUB6Gq1X9`5* z4|rhB0>b*$FSx7%L#eCJPcU|4{}@x_;rFEBaY`pfk~&Jw6?xN(b%U_N}2 z8G6>c-H$}sZ`>6zmGwB;)VT*19BQ1d+D}{JzsdD^ezWcFM+fM#ev!@~B_!oD$JKMa zdu(Lxy-x(Pkpn+qDCq4>tNT7YBU8<+I1+e0Kdof<)Ga)8JXM149FhWGdQlCZIhapZ zHhY!_q&W-~MA$7HwG$wpWnhc4AE=Z=_d486K~_>Qch_>=JquY83ir6_nlAPAz5#|? zR41}OrN^VuwW>oUlVghg#Ao|icRa+2ezg!#p$8ciZ`&P~pIs|iLR8bZHiMfft5;+CpWYv( zb7o08nimR3&#{{~&2LswTXTf#rxZ0R)R&OH^Hxfor(?UkTkDsBwXhztUVNoY_!mnd zWZQ0m#ZymQAm7ni)#e;=ckRo*Y~)1uoTy#%+`r|paTke#d*-qv`AvnAh6j!iJJiig zbTp50I#vVgnyzf%NmB(sbO|Px)ic6XI$0gtLBCJ=X4u~nr#fsJS+yaA+<3i2Zr=W< z1|&t$R#SQLw16Z#zjF_s?#eeR+79qaW&*`YS0Zf55-T0XXJt9ZDcAYqzRP==ia>U~xTB;_${(w8!oYd;exwnS{>6MvRV10@RO z+Mp?{XK=B!N|RJ>86+!p8&~L?Rp27*23C=5&qCNob3Z)T{s5WDm#)KrU3Uj*RIR<7 z?0$E`QSHK*+W0H(ZQp*dO-@4=dddZ*wo@Auh!Q{bKG`gaKoK>_{Kn*eyZ0# z&nm zZ?MTLv7O&U`f(asN9r1MDpk)s3JNN#SPPKvTam|gr+JZM`g%c$Yb{ z+?S>2R-CgEGmdy-Ys4O@qUGr_i&d8^jN_o>Q?u;NLZt~2SI7gad38)ZM?GJ*%iWa=VS;to1UF~7>Qpk5u6*4vZ&p*qwYX*Wi=tEdVFDjJ<(aS9!DcaqU zMkZdHoyot5DxdL+E_nEcJIz%=E7W)DJ5FMTJ>kAbU;|WQ93c<_Z~9nu;{oI{@yFp< z$2&MB-Tzk5>>Wh2vEBfkWx&1VzlO4?a+NNV`qj=H^(*>DT*tNX#4yo5RrA| z3M(HqsO)a`=V>z~_lP~Tv*b)0g?-hH^C zbFZ~n*&=pk&0)JckcI7z4V&``TvY7)^@KqrzF%r~7#V zew%)jxH~1$q}KUNs=;fEJ1HDxNHa`UflO7Lyg9G@wtYz5Ql4BUNfvxOz(>8!0qkr0}VwM>plgYrai3< z+z@VF1lqdB)R`!IUdX78XBR&oPo<=0Mtg@7naFQFj#n;{+TiEMw~X^ zRC|6J78B*v)tux*C-Noo>j9amaoc+O{_2EY4 z;!u*@hdbSz?-hM+lC#~kfnNK+`u3R4fFe*k$Z4?XC9Wzu^a0Yk-&I9vIiN0>;TjVD z!B(+ndtBI5pwg#U4F6w6m~!m$fceAp^f+wM#tNHQ!{NeQO%;o}s&Mk=eE;Ga(ohB4 zMr_@8jTV<)bAi5QEbv99Kp~BeELApeqiF+U*mrh#v5t36sv(Dq6JCid!c$EnTfY+u zq#0(n`;aW(e!5B8toQwE^H78NKUNAr-P#{~Q^)$CWp?9F5n{0lm25u=fWrCB+eOaB z^S+B!>L!(GiH{o?99)g5Dp^Lw(1#=u_Q>?mwk27dMVSgp#jf+e zna)(g(c5;+fqGF6_SAPKz*zI_(f=N{|J=8Qvcz?wv(_TEWL)hu<2bz4s%GFi9aQ~$ z`!E1^Csw{86$sPos1<~3G#tHhCe~WY`yYyl{zr4O{?S6OOUckw!^oG<)hGTyV~w)U z9&lK&fhevX{L>^m1%T+lUA4wPNjD}}SzuHgz3n^XS}WGwg2m3VHu~Byygjrp7&R;* zqr)j?($lGaW?!NN9buX~nml1^eVTU(^!1x6oiPaXJe5{O0$DdyJy-S2n1`ZH-S8bZ zB&)=ys@Gtl6u}+Kt|okIWCE+%rjh_6q9S>vQ7~kwLe=V|)C7-l}efup8)J1)jv) z+AJipAqD+fkT9aVeu~`_Nul((#km#4hS|uInmWSZ`t=VZ2^LEJ)g!*N-CHgV+m=M_|{&AZt_T_9*V2yA4yn;0rMz$j#K5_iI8A%%IYAq)6B--Lw_ayVB6QjP^ zl#Y#q4_EciU%3q!c z4Z}P_#wj;$tc*0jtye2NowmTwB3?)+#%Nrbn&JUEo=iD+cU@+^e{DNA>*w?eR|h`s zO%c}UB&u{KZ)hAH?;oEAwwX`oYq~$&lMnZBpF|&P$rr-w+|#;#zjTT%w6#qJ;O1w! z#%VpJf-~H2LUR_6l1VDYk`n-zMC{*|BnxCq!<@X+0~`KAlNZ=Jzt+S47eM{*>2R&w zf`A_m!Hx}?!KipN4nO(^!e!HHrH>``Mr}X_rzSlIJVYyf5duT{N<*c!Gk= z9ldwuDidIvHT0RW>3G+ih30^{>`P`SMkPFNRwhOj6JgZ?pBk#+lJW!B2e21w;T>8Q zdD(b8y87+;$3KRLDhKgIS1{Is>dqkRV|cNt5`^GUNs^bbpGh z%4v0Yy@r1%aRd?gwn5@Pe&kKWv_8^mRh}c%Jyp{4?cwO>c1R)~F36ch8J7QB&Ng-&m5E_lzj8nyHm8usNeKV>}WvpBzo9 zKgTYIwr3}cL|t)5CKO6;4LhAiXY~ht`n8faNcxT6Z*+#N9*@}bA^cKa^IydFNzFKs z+l_i!(s?d2hO8%~-G5GI=@&dw z_N+%EP~;=3Mp=1>Hc;Z5cYg-T_eafo_{-+No8&p}tDJ_8TnkcsY#^9}gQ+0FmZR~$yE>_Xps-`z%XcNIsbvlvBHxyyn zeDu81*E!~;E+?IogV<72g@`zCND8V>k%^y1rgn!0+A4XVex29DC-mP;9G8xAWChUa zn-UUUEWjSYWug9MlX<(B(4^!yH|uw|okGfX zE=An-?7How)l?rd?3>ZjJ!}8S1#Q~QeC6o(n7V;4+RD^tsnnlc%V*~2QwAJTiwj2@ zcWE%MY9?<^UuGL_-szrM4$^%>Z8aZd$23z_?us1j4#uvX1HHpca=wMCBX zd^x!@vUN13a(E)vae?}Tx8h(-*%LWBT+RqAijzB<4S$LBAVe)*IyHZN;UL==n>_aUISv zaZIaye*?ue`3B=7UbhwYjq=72T$~l2!zJGIQWQwfq>V^~Ra@i-Js=GAjz)|fZuKkI z&*`*qaG#H}M4BkgBC#ERS;K!GEv;7zoJN28;^0tT$xJGY6Q&UO;ROyaE#WBVpjy8c zP^FB!;{bGm?}npYC{rUpwT@7YwK=)rYmS2UuiiS#7VY^qKR^FK#ml_OU|0{}c7v?S zDk>If?4f@4KXQyoO%13MG26Pa{$7&y3dE3p8N*X3tF&Q{MEY8PZlK4EjmIAjulCq+ z+!!1E{Z;mITVhWji`GUZ@h0n3gb3lPj7NKYwF~7tdrQ_c+l9oKj16NJ%A+|s zOV)|0h=?CP4NZSW%j>W9`7X05$p}rs=~hd}X1$28kLy6jT~%zsJ8!#zlDG+3)Rg2URgwb1M30(`H=1xiCrm3yBoCMLbRG&e_jMv>vM^g9+@s|?ej{L zIUy! zbc+s%T_mAelfpen{^3Eu7o!1@qoxf1rs3*qqcB~A%Y(Hg1n@Z1J?xEoNlv>(N(lN=2idxegynIm?1ZrhaL^yjQkwCN%JDwryB)t4=-tp` za+RdYA46t=qhhmq~6Ri-{Q<=I)c>i}u9!Fy*l}sw5d@a%@g?5I@g($oJrr zk0g|bwrumqDylr+)-rx641T=xglR_Q-qroP#fWxuADcTb7{WsXl%}ZdcUWcMGoPUq zB77(YLR7cy=HOEz*Na<7x*sRU0IPV=aHHFWazNTi>$HB#dg}APd4V2BL=Hj+A19f` zTJM);WoBx$UFc=n;MO#qJ#LlYv+rGUeW%Uc)>ALt*2osxrxysL1MZM?t8yNPJ2h3l zzk<{6&~~7lEt{-8-KC(|DRjpfscn|QiRx(+3Dqqu6NHdQzR07*d#{_c@tuxpB|`e8 zMy|IiKYSfBromNKdL7n&26_N>?knfT*4YC56tK7)|BHM`3gy}piU*IZzPmaM&b(Y}uCCBlmCy(&DKeqgfZAt~9oWpt_-J$!; zBb`Wj_9TF>s91H*3Y@dw?BF6A%fNF;jJ$E4MI+fuiXHHsZNih4661{_LW!(@ z6I7m2?^@U@0Q69y(3ZQFLX1_~u4v->7_n(2XRxR?B)Zyq#a9cM)N`?3) zTb2Z~SXs4w2?v2YRLQD>hNx}-1-8jjXY(Xm?X04gF>_k-IG-we7@2}8wEjR=lfI#} zfPZ1?*{1f3xf~+sYg8n;`E-#-rO9*z?y=ny6NLdsq>oIkK?p#t)iEvk{?#}SkOwZ% znHtG^nYYo|4c?09r3PU>zEwUJC^3=J;c$d>4qPWSAq0V*xfom}_ezPzN06N5IrFP* zNLgAX7#m49>Cw3C|4-}$fO7n^kcqi_6B&H zN@To+bp0(e%$WnEQw54z2IPT|vAyGC3&ozI+c*jhu{4cy*V{9j`#_OEo}CKpIrc#U*kzBol5ChGV3eToeIX-zR^-LCi^X z2W&sA)a7M~TI%lZ22=)p8TKR&BnQVvCEO6-@ZMvN6Gmdc^gI-`r9zax7IkfOt<=Jc z0>eGh^<dUHp-ClfcY0_iP1N=ER*#Va!P2Z2>wcQn^-unLMwV01M0fB+x75H>gK)GJ19tqLADpBbsEcDuaCEvUE=u)LKCZfJ zxP>(dOlf!KPQ{kZLmQ{Ej6sjj%8B3v9qF((H|iHnsB>WDj%`x2M6m0%kCZw!4*qRc zEmuc7<;McYkV|4YJhUB8NKH~bQ`ULBD2*238JYd}FA2(w4-;)siy*VG;>A2boVZ|w z?_))wp9CSdy|QDUtSLtdEoA|p&HI&5z_&~ljDE`C&e&p`>Z{nTkzD?oGCMBN?YA zzq@&cT`}wFx}VBM9<{}DyxqIvkQ;(h7grltVa_ZDAFVH-qY8vyT$y7_>c(-@ug|OF zkO6kpH^1HnD;ajtt}aur#Ahm`$)3>5&sk={*a8&`6DH?(*;;~(WJY|#^%`uGm}R9VmMOvj8l>qiI2NflSMU3Pky0^-G0C z%7XNsh(jswwmj)jiO5Vy%}LmT{}_!11fh7k-U9-L<;8 zK`%JNADKe?>fRkjK~fHmg~WYf>Gn{3!=FF10t~R4aYIJLLtH{n_+vR^3&iynrP;lX z4ud7HBrQr~>$oAy{qw}19*xGvfM;aou#!af&lReg7gxZC9U%ddY6mTWbZCj+z0N$f zxj(?kr~&Xh4j6=grljXg0pBgBu$9`^%36kF^~%I%kJC`u8i|dHiYesg{?lf@*abjM zGCQjxHdhk?fzli>vW#yd?rNLrX{Q%d6PGLLu`JIuQMU*HUmRkD0$QFVz@b2zT(>WL zLwZ0&I2R5&XDuVD=apATO?8G0@jkk=&H4Q9@eyqGJyL;Ix$;u zzPUPqO9GMt#+IxMaRcT6(?;dsq3LzW*n-8avSWsnX>JIshO6EL2K+RrWDW2_n7W}y zEK&z%nhm^WC_Q&be9Q<&YOa2FYP4 zZirtC45Q!a#i23m(x94mi88-MdT<5fq_Sgc6{Biw++bDHAlX}Uw51>VXr6%S-}+I2 zr0?((Pl0fRh&&~5%#7H~FC{9f}C!xiR$$ z04wY;tQGKs+^K!um1y<>1N3$Fu`B|@IG@>?^s>(t6`g%|lZ|7BqTe0JK0?RVfwhv7 z69wX4A35u^^2IK0F=-3~S1WTBS=IYs!)RMRJ#U+IIP>>KkL!c?|FpxDuTQ;_oV64C z^dJLWml1k)Lz`ymY5n7_%;@NNWrN3CGIJT#i$aWgd~wE^3p>%zXwk0;o}`CAKA`Qn zLBFJEtCd^apNjo{`8NIDg$Dqi^$Xr5&YYd`ig&SZME1I~F22;I9zkVhiWK=01a<<& zy}UBT6b1{0Akd{cE-?IUw7jVcol!=BuRqj$o?{tX>M%$C)~rO~j4Dj%`>x8qzJz$4 z=$MzKv9Tfj2nG#HF)#I$Pbx*(`=xN#emCVl5dPkNX-M-k*(~-t8=xKEP2tYudl@)` zTXFx*u|3>H>f4qFcym5v9ilW=Vx5}y(t#twHk>_Q<-vh2%5J3jc6cOH93@3U7Wetb*SWqEzl9>MNy(S?11nhy0X0g>@oh9`#VE=~kkF*C=# zp%jv#e+fUpqABa;~G#U3YY`hQ%Rg}LY(ldPTsco~v-l`&akqY3$gd?w_Y(si=~JnYZ4V{7(e|RjOzy05kQ9JE z)QQ%5XHO23klA`S?qdI{VICV!{qd2C#n3P=xM^887L5H+JWI)WGw?SxY19ET?D~m0 zf$-EyA$dwkNR=VNLp#aptbnNQ$}=vm*COua1l9ai2E1%W-;01-U%%y!uI>oY#6Uqk zqkoaNC)Zds#V%PXcElH!=4Rwkr&2-nd)yQD^hauiM9RQiFUS6THY!T}ZJToW1lyXb zd`{hetKe_U?%Lnhs|cN1-}_ z>-c*jIDOhCD+dB~1Y|0k8r%C(r&Z-Rjt%Vw3Rco&d)9$lEQNfE&%gBO==f2`Eq?Yr zo>IxUqi&CxQYlq;&;CI@yJ1rL$iC7NN7c5&)9+xLJmnbjr20gF>dX-6g>0dKi-p*6 zuLW*k&~8isNWh(U^XbQ@a}CH4K(0u~+QaLP_7Lb|p5Ej<-u+|PU{0NZUJAFO%zmqS zR!M|5{e^yT)Sb;&UstcZzv2CkI|lK`0b>2rX_1E9MTLL%tkJtTN&jv`rjnmAt;Mj%Z?kf0K3>?~lDk5J9$V>+;%6bF z^VT)^Wq_Km+I{F<5c2_Wo?`39T>vX#x;SfPp$ZSIZJB|4o$Zf~8ls!aq`&yaVp zpQU#&Yl=_fk{u6BHC~FlEyQ3!Tpc8jE3u=7ZtUMbnh#j`96tHXR zg{+Ea^(OCVOwM8H_~D#xWY=#^yn*Xzv!&3+RhjZkMU!;=B7n7;tJxGhsu@q(jMIN_wr$C{~*f=CK)T+i*s|nZ-D9SlYd%nHm;o@m@0Z@yxzsD|WT-|T5 zYLRPQEF+pTzQj!G>i&bvh6D#cmH{PBQ3UFV3mmGJ1f&!%p7 zalAFz-`NcuxNyP5qrcFo)LOFEhc-42esI_Hm$%59O{(0;mV;X=iA|Vuw(SirdUm-f zD96q2_~{T+mh<8!rs1Vu)xNRddLp~Fsz zb870S2n3qgJn;=6^G!&BZD;;2zBi}5hJ(q0{6Fgft7%@`IygKmzr#A0h1Y%7OFHpx z0;F&tk+#g%YZAWV7~c$02TEn6_hs*iI9exm-1C_nXqPSwA>_yc3AN{CTG=5cA5 z<~cRMaX6{&bbSsrmOMd9J-yk1&vVb ztNWeSU%e|QLr#7heB>sxsh|LX~|7o30!H>WUV{^on$qAZWMQ)a7geopE1`lp6Xz@Fs$8UBQ* zPjDQsg###eqHz(T;pCh4N(D7jH?jHYs;V9GeN9cx1!P_#7yUu)Q)`)#qYm#~S@*M` zj|3-M;u{_#KS|zHee{{TwbLveIPsR*!7?kK_OeM+(X8lB+H6*BD!|O$_UnB^TppP3 zr09g;`)-bY{Z-r<`;a1glI-i+U3a_4PRLDPm{f>URa_YMD*8bliAW^EWu5PQ+RF__ zaL_wE?}fD~So9NQKB$!j9)oGdf=B+y)PAXdfH+24V_AnJXw2?zbCm=h`>SW^NbHKj z*?mZDav~}m4)51a|H9g?Xkpxhtc8Rl90csUKg@qCFk}T>ZB@g!qd1;ff6nBje&_xh!#t8p0xb-Y$jF1f(QdD~pVC zi4uZ4>ert&9EMN+zb4w@HW?@^OgWWPxfXeDu`K#u7k=R$-vDfr(FJ@EU~B@_1ARoV zVTkw5Dmgd*b}29J|9>=sK4;2J68lH+R?#nDx`KEObjF7A^P<8wu1@84)`L2NA-83e-w%4R z)|d$RCl|M-xbG)}{$&GJ2dV6Vz%~Z1qnFZ@vW;Z9ysvGvmG0x#}7sgU>#THZx0h1*E ziPu&%G;5Uql1N#ZuMz0D0%nS_1j4)GK|^|b=!3IMi>@18KbtiDt{`P#!PoUDWL*xB z33q@Aj(VvMySi#(^}TkWqpTdXhZYQi&ZUL3*W8OfNj+<-c1`Xvv35t<2kzjm$yl}A z`{TpfZ6j@AK2Ptoc-2|r+`jB%X5ud<4RJsM5C)Ag|FT}TC#xDCsv0h6^N{*R3 zjFQ)pHP0J3@!p~!BCRb>?=EAjx7ti}ELSEjtxnmRJ@jPGyop@NaX61NkV!xUT zXd;NznwEHP6++~D@UgifCDr7HL~6@W*9%#iuS$agf&>CD@}}9Fn@QcaL|GNhzaMD7 z$KVq}JMjlne|T$amUu~IOfLQUnKm9|#l&X7Lo9}30nNoRQowf_3k!Yw2d?kL6JIVP zgs?$b|7Zl@%@q$Z)u}g5KGywt^1?QoX22(_WLxy@%dZs`&2tu@f5aO$-$LoMW~R!e zD%Lqle@DceBAtYuxj(?b52fN&1oMaV`cJm=n?y_hAUwPY%qrJG?eX`>WuJ~xWIL2+ zdfxRu_e{LnQk!ov?lm@2JPrq$2g%AKt) z-pT=p7|!AWmH7=#L+-)U32}``3R-~5sT70i$sQn3=17RyL2_BgkL=imRbMwEg6 zSs>bIrrxeJ)jA3Smy%@pV`J|)Wb_L7vg;AhEb@$iJyMs!>W06ojTg9o3a$BZ>aaFa zdS)4;c2e$PC^s@+Vc~w?3of1UtJdaSi2~U}9ULCJ8bpI5hwF_sl6P-24~QoSNhSD` zQgv-F$>bD2ZhKS*mSd$ZkMX47=D|DVk%rR6I%yoh0=E&1_K0B>o_FE4*JQw z>PHuDeLrY%cW&J;F{6Esi`Wd*ISoTXyu0Mx!|~UEozCXV`(n5~G|O}f;C8CK8PIPo9?l>){e8N`^=7Y?I=fH59L6wA!b6<-`vS^agP41 zR)+L|hT;pOX)gOT6IbxkayEFduK#G4NOWzP{e(6%PBTDOJAiYza&`klkW+z^}0^QsU+$EQ{T zEr0YBft1TmlXLh$3^jQ00w9xGA9p(1P@C1@4`e~AyyA>eilVWcL{oQ5DHyp)=@ zvZHJ3U|Mc?iTu$uvok7z=>Z*UA;!w(?CyTE=EpL|lz5^sM_A$IdoN%4cx8yx6FeK$ z=ru&09^_)cm>s?g613qe!0oFfQoGZ-+8Xix4E(rjebVc# z>nB&g8$K~Nw=AG;-Q_;c=9hpKG?4`baH+z*>KBAxMa*2OBA8JhK0mozWt*C>aOaLh zj%Q~>mTkn3)!{pA`KRAEVy3F*Q?Ux1R=9@Yp4XezaY7dlV4Q>G?UKJ;_nUSpTe~7M zbHCSP=V#uHn{ahLVmXh7p|}J%DM30ZSLCnR#JcoJS$OGIQbu9-(q z{!09+lk&%}B@=0Zk3c__-GBPzYED**H0YoCT<4Vn| z(B+RS(KCR6AkUtT?jhRm88fbIS zqFEZH5{1+~fQzm*&u#8c5j+Ymi)A>Ffjs7>Uxl)(aV7d@knngsz$L70hPLlR@f;v! z<-GHP@iX6`*eh+FDbiW?=k#8z>Gr@2`}V=Uv4cQY$&b!Qo8x}~sRT|AP#{18O?_o+ zEJMm`6;0ATF=DH*m7jPp4>VPH9JH+B3P2T~560JMH6mQjn0{Ib;qPARFyHn9>3`n6hKuMFy8S)Fe&!U5;2=QaSr(0Y1a~%c*A zP0fGvaVt%USB`@A%f&~fXnT=oM@K1003B5VsS0Xr48wb|mO4+_gEOM;LsBMwtYjws zfSaar?9}+eurM)q>LrWB^|ZR_A&)g-_yvj$m;T|TvA(V4=C;+l z6oKkOga(Btp6xM8S&$Bcfg6cpPAORhT#_s{#>POI**-+Rlr}rnK8I7@hEK`^ zF_kG#jLX9O$!;7<&kKVLdf?6M=oejMOk~MqH!OidE4T<(kIDl5rE>b!}o&?j5N?cZK~%E~zeOV$951UHVv4XLP*Wl!?%+uz?` z_anL|bB!d^vXeZ~D) zuTY2sT&U8l0NILO0d7-+`KsT~xc6x*2oliOPo(9&mnfS9U_@W&;Cv7C7rL$ zqBCbsLV>})+V0cP^ODAn5hwD%tN(#XbLE6d3*+%zB_!*LiSg1c0`00(+??<+$Z)5z z*5Q@Nr|Bx(-8QL5lk#l0w`626>yQ7IQ%^_ zC4Xo1_A8d)Tz!;%0p3R2z~H5b&+pmNK&U(oAtrL?OVMkiftnq2#{;O)C@Q_j*{3&xmbkpzd@26B|hc&@sW8jI(HAr|NtWi;dl z2H)Up{w5xqfc(-I4UaG9#E@sZ)6)f6h1P27SZohZ%yI2H_3gy>+D%R5&NU*UN(P7J znx(~MfBLk{x~O$TJ6Fo-HYbRBPKU$*Yi9HGYX*uTU|8wyj*xd^TBATRopc5LgIVc0!@}K#f&uFRvL$p$8DNtP)qRTT4;97G zS@8DtrEf09P#fhGTHhN2Om}7Z67yr9<0~tU4i0V^*|*FBc$-O}V?{syu~txJ`xoRF zMI|NRC6$zv1`6~i_`O)Ofh4vCu$ZU&^T_xJnx%Dda|7XtpsdF@U2ZO54q{1jAg|zm z{S4B8KI4^hGXNy-{&mQD^_ip8+KKs<@d}|TWav%D@8_Q^0hZzci@Av?zz1)8Vu-wS zWr3p{$%(H|GmWz7$blM#v}ag-nlWxPkEOg3zQ3&nICZAixpV8xJcyUh%9jvAs>05F z@Dy6eZXKXP#sPvnDdu|9prESB3W3pV$dJCuL}1hlV-A#Qz^39X5xsn5;K!1z56pbG zf6AN&Lhi3~wMpgZY7y+U=NdLhX477a7XmOrSpu*6=IEo49WUPErLm$4i19K~bkWRX ztY=QMuWZhoeZZrazKI1=&^TKLz@&aLzg`3I14NLKV4}pWz)@#~CBWURA;UU@{HJ@; zKt3H>-@x>};HDyAf&${UW!9nTIKq6klLA(Qzak_qoG;ii+^57n)CLGb$bW4T$!`VL z*d$nxsNaHsRXE_}Dq}bJoqhQ}H8Ne1MLIy(`WpDh-2lnZ1FDGEn7qOiwK);?t6NsK zZ$5&6vNF8M#Qi><8&cv%MVZ){=3rWwenrND_x_je=yxQTNyPA{ae`n zztt|Tm+UO+yyr4^vBodu*~)vYq(7_!cE-vx?ca&C?tggyVQ&NR>FVdQ&MBb@0G`@ke*gdg diff --git a/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_137/00003.png b/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_137/00003.png index 9f4c2abc05ac5bf36aa115128d719fee3e6eca4b..28c02bfef0d3e762d1da8680d47bc13c03a7d891 100644 GIT binary patch literal 7469 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 diff --git a/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_5/00002.png b/tests/ragger/snapshots/flex/erc1155_safeBatchTransferFrom_5/00002.png index 72b6fdae4e707e2ee4e04910dbc06770846fd6cc..1175fc5f6e00d0d8c4b1bb8cb8beabe5e4a92279 100644 GIT binary patch literal 19518 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 M1^r4naPG$c0FIyBLjV8( delta 4481 zcmbuC>0eR_)W^qcY}ZyT7nm~JEVXjnaH(m`9Jicuv?syLTrd$A6c^-HRyLNJnNqnh zPq>s$nxUW~kYi@%f@?^KWG)Br8U!3!~_blJ@J1YBC`-l5=-sM}k z>)flqzDCzaaktcV39O%06xQySlywT7RZm4u!?Sb;URFoj6^mL=3z$n@YH3Odt?(?D zPY>~pH9hS1vYZqPMx^O~@H43zSKqKLL050ZRx5)GT67(N#QO4qsEf=bW3L&{yTPNS zXS&NO;daG7|1%TsO&oM;?Tsi{dBPw^5ckEz4 z#BUciHOU{`<7sj0Lo4b90_7`$cZ>8dr6iSW{OIIVRe`yEia;cz4wiWT zk*JQZs4~sD3+9*I^!55Uc%;7d^~79HJ1g+$AF{o0I-gP8J99(`PKe8MF1vu_7I05J z!Lbl_CO5yk;9m?vkvOhP%CZ&wM#+ItGClnZuq9iu;g@4RmdUU7I{MYB@{LlQ7MHq~ zEHlMN9$Q-@*El~<*K=C5$XQDXalFF)t>x<#$^6vWXBHoX_Gw6nvmcf;iY}yeT|4pA zdmima&44nkt*s%9Lo-&Cw;wh_psHKSxB1RMQE~$lu3Y@I_Td^N_x}1n3YT zKItRbasY0)kNUH;l`Sa_trI%cjV3zkFXxL@PjB-thOWqtTUrhl9{Mve1O{u-6<{nX z$DzrvM03XP*0}EO$mc^no=!YRJcFF2;B)eL99Jshpqc2}2^LM-*q6L!U`%m=DtocC zylKL(YN%wmwYK(XcgNNGj7eSQnCXWQ{+9QQf^qJXy3ohE&uV?it7D0SqRz>9+Pi{H zdd6l8pb}llE@$NuC-20Z)vjeJ$f5ryH+E^2!%w3g1>3ej0D;ogHd#3tY#_||ec~mW zOMcl}I_b8VLJ^v~IY@6TNb7ut%JV{7J9tUZaHG?9e=?KQF~rtE=T6O zw%ZST{3|VZ^;Zp-ELSK}1vfJ=m??@xb!ybSFuYl2bGLosr3ZEjy2Mg{`CMLI&0sLR zNEi-uExc0%y2~onH|%x{GtL2%o(`G!(23kJyCYZi?G%8) zU>vq-#p3L+uuGhH@TjA>|3jk z+z4)KoYDM}vbF_R9Q!0KvsawhC70~`a5jQ?Np45&jFeN{{d*#a_vV?X9NydJY+Z}LfGP_ArLt9#ojmi_6?5|O} zt!~AXD-Bw#bE#&c2g^Df=r`3mQEmSyIp4&k?0-9*W=*2m$wXGU8!o&V>3Ql>5$Ed^ z1;e)bs&%8U>)Vk`PZG2MEleg;#T&ovdBQm7{iHO-d7QkpVp(F`>t%T3ztA-qXOf^i zH!!TIAJLXZRnI`*vCahq)VR@tKjfD*oS@bURi-wk`e^Z0X=fiM62S)1LmU`#s{ge0 zu$e*bS%NP4o0WkBd~HUd*7ZYQ;dXW(R@jeg=b4*naCf|b-KV+d(dSc}%sHuy0@#U= zaHDv;ga;%9t~-2uK#CMVB9<{zI<2j(QyLeW9czrX&zd;F|6x+wq}KQ!C3SqyB7Eu2 zV(^OIrHzO;65s_L5;>decWM zF$Kt9Oe@V|1O%A5QRBMi6nH?*Qh&W-6Li#Y#=hyLvgb59M4#)$CXrnqARXwykG}{_ zf}(kbwAAIXUrqG`YYOX6k|VM+JNwfo8vo~2u4Czw7`x({9#^!%44=gY#|s~ggY6KphZpYS87E7ge+K`fXtY|-3`+>DnMUl+903e%c{ zD;;Ma^T}i~GNoxAH}Csj4c9_QTdSVW-oh~fWZH6GtCGv*Vv#{>dt8;+q`z))ROs4h zpr?x~@ZV^<#~P8sVezij2Tg4#A|V*qoS(BcENn5;EEU|{2m;dYe@W36nPX}SJ3g4v zDf1-O1hU*qa!`#3w#z2;+0y&$&G-WGjz<^njAc8{)^IColmyo}V!P2>)!pySFi4rx z^fCMtgL{Y!xOkr<=D1oMt_beWH93BZ_A2&43!%AIyzljR$2bk4E$yE%Ii)q#0w{dt z9B&I=2)NBdt|kkx^5vg_IAil4@zIJ&kxm%$MUzY*(ON)2g(Z~}rS+Xx(yu%BnLsqI zXz5uAk+ozNDj_z~c({A?{){zLhyVH*le2$=XSo{aqe3iisQO=_gHc7vFyv%%&kNb`_b%SUlP2reTL&vKs>dC14h`#{v5&7?HA_PlNH>{oqSVbne9`VPmJk*uBI01)*EwfEi>x zD@L5L{`Pt1BGq6bXiaZO=!vJQmBs6>c&_qP6H$Rtt5m8(d24UZ@QS?;bWguIl&yuu zI%AjkB<-eNTx|UDo)y(_NrIESAzV4e1?XTR*Cqx)z!v% zoqUGDz^sO&{3-VhtPTxeGi-K04!=}19k4V=63JwVL$>bzt#rE5N3D~VROVYHcPTUf z)rS~tmDN5G=g|78U3sIWR*MA?ZgW<?bnzEs~>S&wY!J@5ok@Z14-Sb2Ice!s< z_)B-+#HOY?&T-nV*p&KOYYrpriZAk>ADWRVq8nS{GRK&iz^CTr9l4e8XO+#1q4qvQ zCg=VNSe&NX75CCYFZ@{)KDxJ0_t%xu?9&dyE?zt5b`q2qZ2meK4bEoxR3 zNBr!ZV@v6ZB(%H=rHXPf2*0XdKwmhNgMEF zwtzP45rBc&jalg%cW?t2nv#5Xv~im|7v4gWs%^N}?TR^q53%3&8n0ftSzBFgFMG|3 zfx%#d?cqe0mMmU+boeL9AYrN&MDFXrPsrjNVxG-F@I*he^;Kc%{S%3X^Z^6IS;S!$ z9lQF6h7xRr*3+V7;U0Li-a6mbsWz`mMGydt@rbReQ4mxFC5MC)6Z(}xH^#ji=B^5r7BUk1|6MGD7io`sBp)z(NB9L6i+CSUilv(sZBIsjB|$R zcyRtdej{q7R(}6{(KO0Q6ruf2@ijD?qyRLep~-xc)pq7-I*q2yV2qz&BxzNp!Ytb^ z++lknq3l##2pv0}8+XhA%KOTgI(w-Iw>FImUzvNbUJU*34WPQ60?xnh? zs89z9AYl~_gT-n$?m*P=YG`ifQGn zZ?gCt#&0{@&uNSC->AncN;tG2@#<4s8eR50I@a4KyO2#UEVKksujbjEkLb73CT4K!U>Z1*&4dnYg?t;+e$v0)MtKUlYy%nS5kx7 zxDZezt_Yo9Vpa{oUF8mV23U$Gj7BeHXbjz^_J;-pfWcr+@JuLj$W{~6g=AZ*A$O>v z2O^Zm0&}@rT2S#ChV9L}&Xo>f z5NhJs*hTFA+fE8>dBdC|)O+TWa)mVUAAvqnV-HW}W~RPAoI4Qp82oWkx~!f5@Ob6o z#Y;sBN7Wo^bfR-;54#K9%s+o;|0;!dUu7sSvvr2SmYsKRCNb`muS`mxMy0 z_5wk-s85GD=>41M@2qy36*rubP&jQ!^znHKmrmKz8=^`uTgYcCIG5HzcXnu1tvU@| z>WQXCqs>qO0S7fV#0Q5bs~};!L$?Vn`hv=wOMT_9GO_9DY*=*05|A4~WYHG;v>Tp( zId4&xM^ZVaf7^!g-$@ua#C$Es4vmQ`;bmoITJpg{z8k)*Z2r*X6JFOz(on|dZJdytCsB<8AAnXDZjA5S}p;?Uh`X#xU%s|IV}1kTu%*>=SlRCPVRoSvQr@l=a9E)G&%l44c`cm!PKOREKXwbGa z8!7+8+KrNEZs3GNqXC&iOLeulI54qv=-x!OrD)I`;9VyFRWm{;0d0oyo~Jz23NtOP zQh@KKQK`nznW``r?OL0Z%}T{-rQ^72(G?GvHcOQomCFiG*#OTG;QON|aDBfNXHlCj}Ser-3$-%G=t}`<~SgI?bj}6#=n{EMJ`JOMvldnzL zEwvQ9nfhLyW14!VSzkZpv6GS8t|UO$MI|?&P0=QKP-P6sdL-5hr>ZvKSfnlNs{dM`&U1`X&S?q z%(Cq1T~$@}c}|KXNy7AU-bkb0L!jNXZL3-TmSwXKc&On!<6TISWV_u;nXcsJ5!UxY=xyBvBJx_xrtyO@~*bE(^~jd24>8IviuNlBTI~i~dPQc)Q(nJY`vqj_2`s=ocf7x)p`H7M&&r&I3adcFF` z77n4+r8o1Sr865vQC-)15Il+^IX&)wd_HT>+U`)>@Aqo)%hO(t5%EZqjESX5lH_@= zzS3;2HVZ$@cQ$H8Q560SskUuZ#p}F94HeEfCnSzz<#*?Kt}D47r+L$*UZMHXZzj;u zcdm6JCqc{k78Eni9*pMwW^wGlkr(Z4WsGeN z9Jn2d5%CxU-0)I#O$ci6eHOATQ+lmj>FE(J<}tkWYA>VHY+YmC%!AJJT)P-WQG9%S zC|R@{Q%REO54gK8%w3sA#G`NV7k3zqDtEofZ?u1Qr{TP)jx}Q`(`XjkPGA{V{S|~Z zr153~Em3uEcGdea&nnmR}C*u^1{Gd*{^o%Axan0EGssWzipx9xt!hP@SW97wG7F z$W+8#?F`Lb1v)O!pe(Fs=`xp_A+^76_Jj#hvasf-9KhE^KalENU%gsgY zU-cg4p0210)>(ygRI@CA(yJ3Y*UGAkZ`6Mi9i}=*KR}@KJlASyEH>3$#!b_Fe0(TB zWw+aXe0*pZ!>1%h#3OsF|Ni~^`T6nR# z=&k#pHDy`qBUg62ot_P?b~4&*HtJuy-KSPhJ&k`vJZjpXzQtZ0aJgIzpGc-c@1FWb zK1d+EU4L{O$NT+WnX2~7?F`@_TTv8B=vAC*Imw8qp0eF;l@_1RXZxiHJli!Pt8?@N zJm@Hj@;ukAHlvCcMRC1eZI?l5uK#~ZrxEcKMWGhg+ScA~H@lgc=lSV$lKq44*pU|k zZ|6rRNpd=!>>WYX@f2lQ4(c_|vP`aD)#^MVDmSX~cdp(#olb8tJQ%n-N70+?#W4%F z+wFS2Ua!~t{oWTqXNzM4gs1Uz-g3EI{U#W4$Y zUCXn>-=cvAZr-l11D4?pdN#iK34?^QAZH~9dt5vWBcxHzOA!gs;vK0wGE(C}M$mv<6g%^TGOld(La7v=v04f_%BzVOzR00000 LNkvXXu0mjf1rG7W delta 1927 zcmV;22YC4Aj{)Y70k8`{2`o+1)OG!{KVXv-KQt>iXqu*~D&-u+ahzq@TowB%bzL8i zN9~uSY5Fvy+O~D~>1SCM$MI|?&PS7TKP-Q{sB_!4hr>bFJw;VjNs{dM`&U1`X&S?k z%(Cq1T~$@}xlM{BNrH88-bkb0L!jNXZL3-pE^1tZQFi)e5k)?`Pjg_ zsB_aaN+Y5u(#^rjgx*r7y%)Zmp~wYShvG#x#sNKMIT+g9}j_f_WTTWVE!{oJSVYY%#aZ9x&Z zM!&s4NB{O0+qL<8J|7MT!wpH(v@A=bA~sF)`T42-F3ZwrSNg}JQIjt1TlV|Cwpl(@ z-=(g9yoJ65#oMWKmSwY#cBtVy<3&i4WV_u;nXcp66?DD{QPteLr;uHEnVxpsOGA^xY=xyBvEr+_xrtyO@~(lFAL8kd24>2IvGW~*hMimZ$`q8J;=@C5I+C0yH z?O&yk$>iu-lBTI~i~dPQc)Q(nJY`vqj_2`s=yxNIx)p`H7MUsr&I3adcFF` z78Ie?r8o1Sr865vQC-)196X95IX&)wd_HT>+U`@^@Aqo)%hO(t5%EZqjJc&rlH_@= zzS3;2HVZ$=cQ&d-Q562IsJ3lYt?Rr+4HeEfCnSzz<#*?Ku4}j+qpTKLnD8p=wD||PsZ5oc0OP9rxTO)+o5KBPByk1HTP6b+Jh;)-z<*(H}ayrvy8E` zfdjWsF(Mvgj2m8xt_eX6zE3C1GNsqbm7X5qV(!AbFZD7y&DJ&M%{=Hl&$X9P6vfBK zhmu9RJ(VPh{)W4|!`$_0L_GQye{qM=sB+hv{6>FkcN)%!>Qyt=F^y)iy#$tV)n7zt zLmF=;&=R$MfqEy^G<%twx@M?xxzSG<5s!9N)G9%{j^bj^%MaFQRhN9U^=U{snljxm zwV1Z^r}wSip{aB9j$IrQIoWf!+et@5i)m+fm})kvb=&SojEG0-xZUX9Y&IVsA0Hnd z#sYsrn8J3ueaF6z&1UoU_2n4%_TTbC&R^;bFk;zDAG_Udv)S~S{iY4a0M$8qcY%(+ zhg=o1#>kB_zP`SUO0(H)Hk-}o=cnG}vyTz+$gRqc$D^D(B^R*t`QuE#8^=3pwA@_O z{#9>K?&*rEV4d|xM>WgpC%rncbD^xd_+EcK(P64{^aBJs&vUJY#(GoTW!yB)$H#|q zRd&1G$H#~EGJHy6L_D&$`tRSrpP!#!Utgb}pL$a#Dg#=(d3 zb{Z|07t1qERLe|BMjXeU+l}f$MPpUBTK^sWyHH>Xy6PSd2kEfuWeTeMar%RnAy|KP zj^4TtT2q##K5}KZ+v(ZRYA2)3W~2VKn|^8m)zkP##G|JD>09gt0+-9haEoLr^zNze z<%Wd7d-X@halGH}m7Qv{+|B_0u@yz3gkHs|mXnN#>M7gpR%!A1e74_+kn`LiWOa^y zfCn8#QJ&|z;bzqGqA0G{tL-%?&Gmm@>@*^tqA1k*THD&&?Pj+$^E^MDPO^*eP5bgz z=e_*sBuP%Elf5ITI-8;_%R#-yS(eGgt6H5$MCC@+{LZCYr_2|A+vqo=X1PRfqRvqi{ZWS_ ztZfFoE9dk1UFwf}<8SyqyirZSgNEP2yS$U|YTl?OlhGDGk-uaX{~swe5%8`(?9%`M N002ovPDHLkV1k3}4toFq diff --git a/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_1-rejected/00003.png b/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_1-rejected/00003.png index e4e6c69a0a484ca5edd8725ae274852458ff4001..7926817984ffc956f91924ef4bb6e2ed4cd5fc3f 100644 GIT binary patch delta 6639 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 LNkvXXu0mjf1rG7W delta 1927 zcmV;22YC4Aj{)Y70k8`{2`o+1)OG!{KVXv-KQt>iXqu*~D&-u+ahzq@TowB%bzL8i zN9~uSY5Fvy+O~D~>1SCM$MI|?&PS7TKP-Q{sB_!4hr>bFJw;VjNs{dM`&U1`X&S?k z%(Cq1T~$@}xlM{BNrH88-bkb0L!jNXZL3-pE^1tZQFi)e5k)?`Pjg_ zsB_aaN+Y5u(#^rjgx*r7y%)Zmp~wYShvG#x#sNKMIT+g9}j_f_WTTWVE!{oJSVYY%#aZ9x&Z zM!&s4NB{O0+qL<8J|7MT!wpH(v@A=bA~sF)`T42-F3ZwrSNg}JQIjt1TlV|Cwpl(@ z-=(g9yoJ65#oMWKmSwY#cBtVy<3&i4WV_u;nXcp66?DD{QPteLr;uHEnVxpsOGA^xY=xyBvEr+_xrtyO@~(lFAL8kd24>2IvGW~*hMimZ$`q8J;=@C5I+C0yH z?O&yk$>iu-lBTI~i~dPQc)Q(nJY`vqj_2`s=yxNIx)p`H7MUsr&I3adcFF` z78Ie?r8o1Sr865vQC-)196X95IX&)wd_HT>+U`@^@Aqo)%hO(t5%EZqjJc&rlH_@= zzS3;2HVZ$=cQ&d-Q562IsJ3lYt?Rr+4HeEfCnSzz<#*?Ku4}j+qpTKLnD8p=wD||PsZ5oc0OP9rxTO)+o5KBPByk1HTP6b+Jh;)-z<*(H}ayrvy8E` zfdjWsF(Mvgj2m8xt_eX6zE3C1GNsqbm7X5qV(!AbFZD7y&DJ&M%{=Hl&$X9P6vfBK zhmu9RJ(VPh{)W4|!`$_0L_GQye{qM=sB+hv{6>FkcN)%!>Qyt=F^y)iy#$tV)n7zt zLmF=;&=R$MfqEy^G<%twx@M?xxzSG<5s!9N)G9%{j^bj^%MaFQRhN9U^=U{snljxm zwV1Z^r}wSip{aB9j$IrQIoWf!+et@5i)m+fm})kvb=&SojEG0-xZUX9Y&IVsA0Hnd z#sYsrn8J3ueaF6z&1UoU_2n4%_TTbC&R^;bFk;zDAG_Udv)S~S{iY4a0M$8qcY%(+ zhg=o1#>kB_zP`SUO0(H)Hk-}o=cnG}vyTz+$gRqc$D^D(B^R*t`QuE#8^=3pwA@_O z{#9>K?&*rEV4d|xM>WgpC%rncbD^xd_+EcK(P64{^aBJs&vUJY#(GoTW!yB)$H#|q zRd&1G$H#~EGJHy6L_D&$`tRSrpP!#!Utgb}pL$a#Dg#=(d3 zb{Z|07t1qERLe|BMjXeU+l}f$MPpUBTK^sWyHH>Xy6PSd2kEfuWeTeMar%RnAy|KP zj^4TtT2q##K5}KZ+v(ZRYA2)3W~2VKn|^8m)zkP##G|JD>09gt0+-9haEoLr^zNze z<%Wd7d-X@halGH}m7Qv{+|B_0u@yz3gkHs|mXnN#>M7gpR%!A1e74_+kn`LiWOa^y zfCn8#QJ&|z;bzqGqA0G{tL-%?&Gmm@>@*^tqA1k*THD&&?Pj+$^E^MDPO^*eP5bgz z=e_*sBuP%Elf5ITI-8;_%R#-yS(eGgt6H5$MCC@+{LZCYr_2|A+vqo=X1PRfqRvqi{ZWS_ ztZfFoE9dk1UFwf}<8SyqyirZSgNEP2yS$U|YTl?OlhGDGk-uaX{~swe5%8`(?9%`M N002ovPDHLkV1k3}4toFq diff --git a/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_1/00003.png b/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_1/00003.png index e4e6c69a0a484ca5edd8725ae274852458ff4001..7926817984ffc956f91924ef4bb6e2ed4cd5fc3f 100644 GIT binary patch delta 6639 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 delta 10552 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 diff --git a/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_5/00002.png b/tests/ragger/snapshots/flex/erc1155_safeTransferFrom_5/00002.png index f22f03da6c32ee21bf38a686cc3e6daa9417ae19..4c598e73098ed506d7e712b11725aefddb8828d1 100644 GIT binary patch literal 15871 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%0D>hmK_Tf71F<}^xE{pMqQW2(!f<`a#n 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 qTheYx?Tvm|{F1QIs;6Cx~}K-e7;hy*;)$l zN$`O{AOUNu%hy35t_cu``z9|paOHe^i6sbh+SK~8>5YgNRLV%$%d6zd$;I={Jo86_ zcolfS+{ybgSQ7o0 z*7@@C>Ol+p^$}DM$ZSlc*UNb@EZ~W6-WdpK_4MhoYUSvjX2p}n4Rzrx=DrDL1X9!z z3cY@XI2=xZRgsfhCj~~hk7?!m>2z8 zxl5hDMmhBFU*~!#IMX8?zh52u$UHR@PT0so!vSAp%0D|cpL%gz5W~z)4C^^VIK{;NlafZKD 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 A_y7O^ literal 9594 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 diff --git a/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_1/00000.png b/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_1/00000.png index 488291aa052975842ec503a6aeca3adf429c72b3..0c5fa6f3274f6770768ced213daeada3fa88f52a 100644 GIT binary patch delta 1903 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 diff --git a/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_137/00000.png b/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_137/00000.png index 3be49186075c6f1dd7a2d7c2f90616481fb81da8..3e45373cfdcdca476bfdcad216309b25410dd51e 100644 GIT binary patch delta 1925 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 diff --git a/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_5/00000.png b/tests/ragger/snapshots/flex/erc1155_setApprovalForAll_5/00000.png index fbd37e0cfc0bec9dd8afbef25d1c3bf6b13a664c..f1247b5cef78a01fc6049f86a4a387a28b4bdcf1 100644 GIT binary patch delta 1906 zcmV-&2aWjKU)x`>(I*GkB)jMxzP*#!CozAf>bfq9B8s9c%i=h`>AK3Y+-|q7Mv|uK zVzC&ooT{p}+ijYr_IL7Tvx%Z;yWK`nB(>>bn|vS75zs$BKY@4SI9@Ckj^m7DsSY3bD za(9?m`FoNt8$4Y)OC|K4w=pH5q9|IeR%7;${f2_3XUXU% z3+OnGU3AuUt=o(1y8ik3IUEjy7oH@^@pvrDGLGXs&nGDEHE8&r(9@-}t~h5|=Kj7Z zIpjt*66#(3T%IDMpDduWEc03(ilTq``T3DUttg73D8^KNr4emxDe+KGm(FtBMp2X` z$!fKd9)WjT`^aW)sXnJ^T2az?*+Kj`Ih`SbJBY$Gen^6TrXtM}d{%bCyT-{0S@ zvwVMlyZbYk%9EyZG`f*N?Du=uVNSZA%3`akn$PF@60O-ewe{NWB8l}RNuE8Rqkk)8 zrus*}LJitG_}t%8=as*cB$>@-Ns{P$7Ks*+lQS6{BGN~(nG^;+tQ(O*k<6h-s-ysqnE zeV<)b-A-k5B%}4{-EQ}5o-1vh=goI@km=2FXK9+I-Yo7dy};AyRj*d7D|XGJSvY=9r_=6_-rG;=bUNjEp6B`TcodCi>(|3mZOX0^)Qv|LHU-x=bic&_U3ixD2nR3mg9e|^^!|&6;Askx156y z>5Y18*6Ptu7SPe(UTdX0LF@h)&68H&)+@_0aPxY=a&%aGcN(K8+H5xNViV)Nc{)ex zo4zY9C7`G31LvwNCRzY)z{}{zZsv>JB+RnxbUNv{bk*Lfsy-UrV|&rRP1sEXmZNL* zQ*0a%;%*FfP2hjNwc=jW%y;(ERIj+i7# z+{JIWcW1bB{($AUSr{Jv4kVGu=zysjH(Yan9LLR@H?n`0vMlATI}F8l3tl=u{Cnuh z0$P)=aj8d3XM4Rj-B~)apXPw&xZ_fu5^UxLRqScKc}C0e7D!=zA7#vn+;Y5UUp+3n zpY9f-wRDc2y$xD-`CKlS`k-+KN9$lNbzN__TX}9fyov$K(Z^-8$NPLf|NQ*?{QUGD zAjBAYWX^v+AL}d8J(pT1aMj-N>x#R1(~Mu&of%B$=&5VaVzb$}(V~~jrE7(dn;7mv zlEdMks}J+}+#Suos-Jb!faS==oz!Ty+ijlbuK$yMfTgQ`Q51!dgX6ipb3IxP(V{4t z2bCM;eEf4y()YRR-7$~7Jem5!n){`>F0|Ni^$Nk?&fptr3@ z%du3~wf9uFJpUcNXrJY&m`&&C1!~YyqY~|UL(51;Zji0!1)x0mbaD9umXl?fo~8Mi zfLDJL_qM`~p32y#*Lu%-bR5UC*-Xabkh?PO8czOxcy9!=ET?ny0yXF;io7-i{e<3Z zHai}V&ANkRZvU~n1}tYbo5@qQ&C;Gur{?vhJUFWx@7|{ZIIZ`rM`u~4A6s?lEOmuv zY!to&I{*Lx07*qoM6N<$g7qsKl>h($ delta 1905 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 diff --git a/tests/ragger/snapshots/flex/erc721_approve_1/00000.png b/tests/ragger/snapshots/flex/erc721_approve_1/00000.png index 488291aa052975842ec503a6aeca3adf429c72b3..0c5fa6f3274f6770768ced213daeada3fa88f52a 100644 GIT binary patch delta 1903 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 Hu0mjfsipx# diff --git a/tests/ragger/snapshots/flex/erc721_approve_137/00002.png b/tests/ragger/snapshots/flex/erc721_approve_137/00002.png index f619df54011d34d3d0f1bf479d3097ac65c23633..4cfd36bd7cb1e876356c290c89827d6916c2fde3 100644 GIT binary patch literal 16408 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 literal 16408 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 diff --git a/tests/ragger/snapshots/flex/erc721_approve_137/00003.png b/tests/ragger/snapshots/flex/erc721_approve_137/00003.png index 9f4c2abc05ac5bf36aa115128d719fee3e6eca4b..28c02bfef0d3e762d1da8680d47bc13c03a7d891 100644 GIT binary patch literal 7469 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 diff --git a/tests/ragger/snapshots/flex/erc721_approve_5/00002.png b/tests/ragger/snapshots/flex/erc721_approve_5/00002.png index 00c4c4b8600719b778b53ea1add5eff9e1e1e09f..92cf74df632f49dd66d641f172aade733bddd980 100644 GIT binary patch literal 16466 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 V#7{tg{}lkz*D<+Qedo!G{{y<%b5{TW diff --git a/tests/ragger/snapshots/flex/erc721_approve_5/00003.png b/tests/ragger/snapshots/flex/erc721_approve_5/00003.png index 92d19296643d3db1969d3b80eb6c5499ad66f799..19c095ef103af06cd0126dafe1c6abb870035b94 100644 GIT binary patch delta 4538 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 M1^r4naPG$c0FIyBLjV8( delta 4481 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1-rejected/00001.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1-rejected/00001.png index e9788a1be887fdb137f91d88fef1cf89c094ed42..49f5d63b56806be8a78e85703005d89e877898cd 100644 GIT binary patch delta 1940 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1/00000.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1/00000.png index 548ea67843045a6d1c0c314df89f21bcdb8d97d9..dd797e47708a5ae0abce613d7375fc3b6b45194c 100644 GIT binary patch delta 9634 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1/00001.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_1/00001.png index e9788a1be887fdb137f91d88fef1cf89c094ed42..49f5d63b56806be8a78e85703005d89e877898cd 100644 GIT binary patch delta 1940 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_137/00002.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_137/00002.png index f619df54011d34d3d0f1bf479d3097ac65c23633..4cfd36bd7cb1e876356c290c89827d6916c2fde3 100644 GIT binary patch literal 16408 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 literal 16408 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_137/00003.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_137/00003.png index 9f4c2abc05ac5bf36aa115128d719fee3e6eca4b..28c02bfef0d3e762d1da8680d47bc13c03a7d891 100644 GIT binary patch literal 7469 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 diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_5/00002.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_5/00002.png index 00c4c4b8600719b778b53ea1add5eff9e1e1e09f..92cf74df632f49dd66d641f172aade733bddd980 100644 GIT binary patch literal 16466 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 V#7{tg{}lkz*D<+Qedo!G{{y<%b5{TW diff --git a/tests/ragger/snapshots/flex/erc721_safeTransferFrom_5/00003.png b/tests/ragger/snapshots/flex/erc721_safeTransferFrom_5/00003.png index 92d19296643d3db1969d3b80eb6c5499ad66f799..19c095ef103af06cd0126dafe1c6abb870035b94 100644 GIT binary patch delta 4538 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 M1^r4naPG$c0FIyBLjV8( delta 4481 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 z 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 Yl_<(X48R0zK(EMT2s70s=-iI}4t<8 literal 23501 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 HX~h2l5L|^u diff --git a/tests/ragger/snapshots/flex/erc721_setApprovalForAll_137/00000.png b/tests/ragger/snapshots/flex/erc721_setApprovalForAll_137/00000.png index 3be49186075c6f1dd7a2d7c2f90616481fb81da8..3e45373cfdcdca476bfdcad216309b25410dd51e 100644 GIT binary patch delta 1925 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 delta 1945 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 delta 1905 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 bc2?OG@<mLLEv+%cn^X8`uZ|#6+&Dtm-V$= z*EOkg5CnOimu0!qAUKwHQRk|vbQk1yyQOKmwM=(ir+ATz&q!j|bzRqW-c~j7MjHJa zLL7bHU$57HzkmO(3{7yCc{l%s===WfH~xQiy#?>6&QTP_aV*>6?RMKb^MqGXS(as4 zF8gqNyGC0S#aqNW-ot~I2qC0&_I=Oe#eLs@eSO{U_r=D;Fnl~7P16V=k|c3Z+&Lid z?T~j-=f3Yro%O)N^?IeC!KS_fwYrsYLW*CzE7VSZyoDeAW&$0@u@ZTx>-y{Ki`rRT z*L7X5Y0wlwTU$zSDDR@q0qb1R3z=mZMfR$y+S*+ZLaaHQ+|MYAx~_XKKf`~GelvmA zA<6#y{G|Vmc^pmCQ0oyw7&Wzu{Z^zNfA7FY+BTRt8|;jnp{^ z0=n;iV?IF`hRY<6T-v_x!!V4ZXsjg%-ySq~f#*6Xd7hJz%jI%DpXV0!a6H%Ow-@N( zXS`T%%~e(9d9HkdMNw1~h0+$gt~;Gh^qYsM=Gu`^(xrY#mSwWc{G{?I`iuYi;v4U! z&Os2waoqR4!;iMQt|=RY|1k{1%jLplx@j7J9(C>eUjBDh-?&uv{X>Ed@mZsPLnonu z>-GBe^`!^Mnx;9OPGi}7PVCUowZTI^KR>0809U-7ItM`z$8nM*W8Y!qU)z60RaGSu z<|tQ>j_tbcd_ME9G(A6c@bhjGlJzhQ-&&vpkNXUNg9oj&Jo%e^Uiuw|VVb7&&3LvMks=ljN;=M|CzM zFUL~*x~?NfLGhQnt|PB7&vSAWX&-81=ku9d_ysj4UG-m3+kv-!bXk@!?~$cVl0@Ii zg^XX0RLm%fltbhuZm?}zX{RWP#dcnQua|s0gb;1p@>9r7{E+AKDNmhc*^H_=8XwvZ z4@SLL?Tyj4ZIUEOlJItDCQZ{MNzyc(WsQznP-)NSlWg(^u-KYE_|}%*%!B66Y!C!Z z)6{h>BW^rBuBs~OS?ggn-bFrn#<_NQk+LjPJ|vSQp|><9S98Me^PPil4~{;6*KGEu zA&9}qR~K~^x*f?)kKrK+shi@PAN^(m9emf?AUp}0=VRzW4Bjo%G>xH`W`P|p*7^fh z6ovfK1nc>&>Kx3G2KlldlS>k4S2=LfYxx}&uApf2vDf%ZItk-AZrhg2rF46{uKT0$ z@$sSWImiM#+@p7Kao`_<#-{{-L6BvcefyCegJU~L-@@G5Eur^;=W}lS4&G0ovv2qx zske>)#l9h$-HHWvBq+h$zq=8N^=RrP(~-rsh#F5)CG3rAx^v%V219yoa8ruc-!x8nPs0O ziSq;=SHTUL_$-9b`)}whP1De(IF8@$Bht4njW-i$4!y(anWRj6UYpVZS(&7{z>aK` zG)ho+h2UblS-f4WgQm_1z5{4u-*Yx`37V^@@B8!le7RiY zA#%Ry-mdH$gn>ALzdm%MC%QAc${mW3IOYkP@90b81 z8pw2XF~GZ0Rn@z+AM?cD;NRhmS^_+1@UQSL&m`EBkXF1D`Xn0d8$V9G(_(vnzA_n89GO4Byk|_xt1f@Aq8ST<1FHJm;C`xu560@7L>fpXc|V-G3!(+huyg z=w8UX70OgvVbd-vpoz78r6v8YjHf{rR3~10v!zL9X)pCvm-a;bR};7FzWc)Vem;dS$tW40;?>V zRCF%C%9jf&8rK>HAo}efhs2K0QN@>!wZ2k8{k<|DB5E#pldu)EDM20x*!bSLY*qfa z*7xRzbdPW*8EZ@Mw+?xhd5h6cKP&)yPN{WDbjc+=x0634)^)jHDB28?{vxvdtK-ri z-T(gADgbQtbEZ9^TIubLqg~ew-Aw6kKP6W^w*w>&iM zpMGcrzS3HYj&UL@w?zx~*~O|uPoB#zX>fQ^B$HpoVXLFB2|c&c1t&T4xkLp1W4_jG zE6h><@DDYA@6La^{H=Ee#yo;VV!3FEg8A?nS zy*UWU>5CEz5i>afT&t5$_@G&vCL15V7@{l1A7_5o#~0^-)4SmzTG!e(tyO%S=M8Ai zl>x|=_V3g93Z^c~L6=++LQi!T*7hFszaU5P)ksm*@y|E_O;wKJ(5{2i*y;J|atUWO zGm4_g*cBupI4?s1J95}s=pWYM0%@p(U8EXsQF*KWIiOoI*oov*9aQjS0yeUVz|n4p zXB1ytOf=3vob*k;tD1#!doRBv)#_~i;#BMz=7!rvubB3Sj!QvSBf<9R8p%Zs4X9%u z5X$0xiE{i(rV<^*&d0kUppQnm+&9HMiwL$8^y#xZ!D!FF8Bw%4P_|Ll`WxKMnX;z7 zm4vkgz&7su+59TqlZeNDI0rG!&syA&^b5S#Q9bX=7Hs35gU@aSNTm2K9BF-3?5QNg znN%cpdFWsE(q}KwyO({g^Du{8`$1P3^{*sQ|BY?=>nd1tBK@mckmmx=UpM@{X_HDZ z-HH0!SIDK2oLydMZ-@XGJEBN^u8N5TE|OF(&LqtgaSn+pHFa7s*b zRpW?PW6G2>s^xcI8)xd76QZe~mGo29P8=s#Zcdw@XISd8D7WGGO{259^u0z$4AwUdULYqf(`3S4V<>T_yoI z>-O{Uac0#Y#f7>F24K+A+uK`?o(s`!!v8v$579L{p6KY-gx6yFAIJwtG~>0TeSW%3 zDGM|k|7jDeRRyQ*SGESzDrmM1a^@{3Hx)5sg3|sI?0jyB^SNK5|ZW>en9DlSy`S zOT1T@UHrPjm}qVTjCl?~pqLM+Z3@CuagMZtoYbyDb(WSc=e&bJd3LTsRnm65AJxIL z=Ns65j7#9A^sClN?g%>eqgv??ZrTk7TmOJN!HV(I5N{anto|9%!UVR-PQW0<-ChIg zb`ag3sg*nkA>R9duRsxU*qPOY8PmlULF3m#zCW)t2{{}Sx3 z5=?<4shdz$Zr0&uYMZ|fwf62#R_8{cQ<(H^6f;WmXp(yCaY9DmJhOq&vKS<$Wulo4 zWhs+ZhE+aO5FNmq%SR6FHfARpTWvIxZ;}6sI2Iru9plh&d<+V7dzgM0RtG9E5u(lD6o?P6_DWY&gxmW717#@ zH3(sRVd_le0_NO7DN~X3a^uiK`E}~7T$dpyIgQ}?3mCdQvv0i_0S|fIkFKpR87%6Z z6;+uxG(-s_ZFT$+gwW=)#!M0C-l7i+$^|8?O2D#{Fx%Xw!x1aobTOZ(x^6DrsQKP= zjLArdq)$nmrJk7`nkw7iv*PbbEhig6I9Y>25v7P7M8w+X!20TA2LXmC8_s(3IATT?L;%# ztO=hu;n%3cwdg&^Pyz}*72dwf+7sVxi{y`<9Ic`t2oznS+qd#Ke&4QgMu;lkJ=-`J zNv-R2C2-{%?~bH<5-7kpLz$7?+Qjl{wHhh!_dj^MsDZH{^|j0gbA@hAA-T?@1R|qW z%wFEX$TAOa6qz*8hgTkQrKNbI_mjfC3{(2`hF8qFSUwRtntCe48Oh?-`OX&6K;V-~ z&K`XotFe;4vZUAU%5rg>XrsN-gkR@E-5}1bi(U?`pV``019&g|x7X7gz5AL6`&&wZ zYD1r3`Xxs6={>4Xuq{B4hV`)&jmp4@Q`|;b#n?P=7z|N9ymguHox^#}@`GG!Q%_Ia z1WsqW(&6S4v>hR(j_>kglFiN`hm_nNEz=Xb9q=pM3v_VisR}1+2HJJw8W_}+6Lmyjp}CIZR)c1AmA$XcD zQ~ghKQ3N)@FTU_2F7CQ54ljF`KEBPId4#0dYr>4@6<`?I6W!~6B&^0oU-r1lxhJ<8 zMkuM_{31Z1{Bpi0OZ(iB=+e?*S{+~syxsYaH0|CetRL@7 z6?T{O&a<*|>B<{Pso%xzf_8bMZT(&5ngANt5vX|FImhcOcG)fdoA-+N<@6tq zW9iB%7G$@Ks=5fxHkWVguQb%~4sxOKFKdLgJ$SAxocLk2wF}TJ=wB1(tj;$qcttq0y zJq)}K?fia7?7)+r*jG4EY>7t=cubNv_}__&(A2{Od#y_mf42B(>*)@r9inBq?s z$}l{uxmTY%2NG5SuD zI^si!gTPKx&(Q@=?%H0Ras2TOz#^!5YWdMNm-OmB<|Tb%9G)w+@5MSeh0p6(tXU`r z;T6}B1*z7!dwxajm(^%M(k$##?EF$=C^#1d#*G!H(d=#3{&Wc%F`*4>ywb?ixV=nd z^_)2AHWx!@n-NN8hKI0}sNUcMmnk31T=TeNoO+Sj&-BQ0HT3WlHD1e-yH-NP3u!;U zg=yzhAbl5Z|I(>ztV#Pp2wiX*)e&GcPo1NPdn_ggYUkkD=YSZQ7ljL9`UVB6`L(`| z_{U-$ReMQz)o$x`b_B4r2u^MJ8`J@0r0*AC1#f|%*m%~lkOhZ`h`tw0x^t*#WBIY7Orxe zGCITXlAfr^+5Cw(c7Ye`rndoBMC_6MT+tJeSUBlKpGf?o$;1s37TDi=-J#kTZDY-Q zet&P<%|Rof@YVJ@3G39hLGFummS}lD8kAi4eLw5yV&d8nFJSTvnGh{a{T0)B#Eauj zLiV$l8SeIi+*|XEXqk_tX1To4GRf2CERoVukh^Y`Fca0QS8JE3e;$5E&Q`IDekpY= zSH8*Zou}_)7hmkMHdE}bx1NlWzE(~P#gRIv3*|q+jdI_hQC32xU)mu$K`2`xV^d5> zP8JE<%_Nh6Q{ZIj$1eUXf*#qm$SUUgmW{noC7Tg(T+&>9kCilCznea|2zm8&eehR` zVyw7j$Mjl|_S56&$NSscqD?7ILdJft$$TK{&CAO(&)XRgYg-GEpgK8w$DxcxVkyvf zw@ae>6~Q2~#3NC2p-Kx95caNh>ht|_@=i`kX(=$|GpkXc|I4RNETj%j`U|4tiPcJ} zX0#zbr=4H+>1pm`yVfumZ8J0k6&@b$MA?a~RzefZ9S9Ueh-$og*8_X6-*%1c2x)F3 zFio|6Pjw1*0^tGaK+J6blD1Sph%NTEDH{So;Kb}?@k6_&Hx1X| zz5evhNF6~@<;vqBWPLXre9iQ4p;rBYiFFjvqWRSFq1{A>^@Q!Zk#jlR~Fq zG+KPgDTZL7X+qI?Mf5Ysx$T{G+PELuuFe_0dA!9Tg(cd-FjWGC;C<3<#NSOpRT8lU z*=8B{J>~~i{^?i#8PP25S_e#z&ED=+SX z-)eZ%kD{9{v_WOQT22-B`dfNxrp4Z6bdF=oY4`x%k*ACd*?8jiFr+(m;FPR@SC(Aw zllZv{e%idP(`yT<|D2Ww!h_fAJJx<{>F4!kv@4nkduV>?a9D8R?!CdcbC(Q>&mwL9 zQU4}-zV`{v`66_F01Fa|utFW4_(a#liwTAD$8^R?j}z0sDB*g_m-dYd<;51Jmw(@$ zym=YXK4@bik#+Hn}?9cMXfTa|nJE;0o7is6^g14`ECP z494f^LKtclK3waN*zLhw58Ar%SJR+a^MP1A@Nr)XT{#9^GJ_WmH^mnwmzzG!j38CQ zE$b=EQbzYL|EO*h%16GQf{xm#IgTXckeqgg zX>|2(BHk9+K%!3N_vNhO?VX+bl_U1)4TJ6>U85Z*BNV=Mvy{3*RUbdXe^lxMcRp~y zM$zOz*1fU&nX?}YPj^QyJt9O}Bt1GHI9F220-t8+D3gaiB^RG^lhw=zDVXhS#%QQl z(SXQwva5aN2(<*HnSAu4NorO?4QUITp)0VVS-^C6Vroq(8&1JcNfV_rA5}nHs*$q zG12n&Zls;cp`G%enD?mm!ZJQ#l+>x#Z}k^#V$o@mDK}A^3?hqXgTY{A_BxQSkxENHyuCJOg}>;Zr2aEIigo=Y zPp$vsZu|5x@BAnr1r!vIyZ!X2sX8c97n8{^_>LshF+0^$P8b?q7Z%gzco`Y1(k_CM zIzO2T3VHJby*V6tv5~PRbX~KS4p2XRt(kIS^)09!f{GvpWS9S}nsGxm3JbWTlMARJ z7&TrnWB7%SfHF*@q68QwmucK`pmfJ!_HQ3YzEEm|(v|;TI{N=4q&|^glEeTH|#PRuz;8i@iZ1zSL)HF1b*C92<=L6Bx+XPsD^=IQI92>}O_a z?iW+FCFB5lMY*?_TcY~hl6kNb&+YeSj8ssq@oc|0Rg?ttc>$_*mS@Kje&x&-p810= zsU>_?0>`6Xj50_ZOJ^qz>`2GDVq|d<@1_E`RQd=czwre}9*&Jae$5l86oW>`boYU? zSDVu8#eC2c>uk0pw~KF!)B0}#*?7q3dPPw$NjkB2431kI`WuWW^91Rc z+;Y2h(NtOWc5sJK;Ys9Id&-IGq!lcopxAp|S74vwMDJ)%$m#DD%C*>TYnt&rX%zVkTXbgUzqR+8v0SS-?wcU5#PjgfL zqqGGml@$J>EHmk%Xe|jcZ0s&-Cdb5{s@RLbrJfdGB)bnnFgKiy2Zni21Sh|L2G1Yo zb+oK^2zdMkn~o=~;D_2dfncXN*ZMKv#-I4b=?~rtyFW-%NZ6MLyF;}}`coV&sa7#I zKSbOtKa`d>H8(SLaaTT>`z;cm$j_Iw8Q~6{N;E%KwhMQy`Dw%ZoIJnmJZG+BI$3*h zqIDQaBz!^=;G}V#igR!r36ZouoN^9b=K$c+hSlGO44ULU;h2029PuLl)&g~%T-{5# zYF*VzT`K33iPhNN@6&3$=V3&{cm5Gu!?Wj=#<6uY9J>z9@CT=DOso-3AbK$PbQ)kH z8%~=73&c*1sp(sqmGj*=%EOTxA87-vsAKIC^~7VEojx=-Hxm|z z%j?E^ehm~ZH38aF>steFee-bh&HshT#4guozs{z+8+8^uj=|4>5MLdaH`7O8U#ad37w#%*U{(?BwDRNHv8^V35m~fp-?`)zv zLS?kzJdvUn{kA=KR6K^O2*cxCvs}wZ*$H?QM<5u7a&aEcNOh7{<_t}JDSeJ}H?>mw zDv)vd^9sh<(40s0Q(bVS>v`4E(rVLyyOK}xEvr};+|QM7Oo3$=!!xm#6X2Ny+|k9DI+PDe$>N{PRPK~&9SZcE zk2bM)epQ1?b%d6$Hs9O9$W8 z7C?63!lZs??eXq!)g6;_qMBIADrdrAPgj})B+w+xmsf$dJ~&b^>81PqLUmFd*MvJc zU#Gf<=%V08Sn(9t2a?qqH{G_f_5zk4?S1(mw|rDQoXi<{;r-$A5swz#%u{_;Mgn^zoA&RgxMjTfC`HFSpzJ&NA^#U&nE?RR+q$O6W3` zJ9{s{cTDcrYzcfL;P38SG|Bj~#Vs=S9EqfUc!Tw0{6W}q1YYr{U1_>`!smg2E*v>+ zuitZ4BSE+@-c8gwtt-Rg`wRO^MXchFG;f`y^Z%Nv0Ag8M9EKMUiE+F+o6l)@aXeo= zL4D5qvIM6fH^fBrfK@Ia1YSqf_t5as%xpUZkxdX`K6@!Ea%(8KyKYsdYEgpQ2rODCC*H1psXs+h zOrC~7XV=bN+5sw6TIAze3s~D~yh-ZqnfBNL?21nvrVN-ITx{#yJKPwQOS|**i20)bne*-eK=81`hYmLJv1{;*jP3L8fB&rLPpNBxFVP~eba*NgZ5&>j{t#MxFU2k zgMWI`k8dZ}S%pBkZBsqwTdhREEmY>~z89A61NrDT3S$+d&ZL#bvd{7f35Bct9e=59 znl2d9ksS@edg(#<Rv-Cl`e4!rC4qY7yEGC`n?5Vv<4DH~d{W)SU%Q{BfxiS+QU zP$HJ)sg?ou=#M%Vqb0$QZG9JHkT#?NO?7{ZjvromH;#s*(%SIq9*dlkdk$yr4jJr7 z`t(u1cuJe+*h-0mocv0AJ?jU!NWJsSq3OV{p`Zv5cuosC2v$>jKk0(~fH=yHw7j6w zOhLqyuw?CPXN#FiS;epKN87p}vP?>!f#z9?|1yzImpM|c^q7RaKjG;B8@W5ym^u); z5z%}A>rK}%#n8(TuNtH~a*M2lp88d(HYn=m^&<6*tt^~-8H`H3>tEHt8+5s4b2{Jv z7JZhBLFUd!m>Ysf7=Y#BgA4*rcqvT(f+>q2x=+5)FWAl=o%JY-vq3`vxu%R1Y4{84)jD$Ai z(nLi_^JzP0+WaITN4M5mCI~Y6i3X=M-TVj=Pb1P9NPG{cIE+zcot z>?KjX2NmsnB(gLR>&lu-@-3=({B-f?-8H@Fj2_hksrz<@gqg>VOZ@|5R7&=i60s(4 z?%C$(w6)1mBr{rJt5IL~{cMQ%EmxNQ4?Xc}+FE;4s4r5Le!37F#Gg(*yn@{R$t3G} zEr03Pd23F>y4(M#Uzvhh*rlKyk?2NG`>oBt$1I-=(56Rzd$nWFej=XqQfZx|lGf0PzKJsNI~%8ax<$9_fIb3u)F5R%rQHB*sDj7{xOWhCXN&js;Q^AAgMM~%czCij^SZh*y58o-Zfn4YI+ zea?kI-QU1*wO}n3O}xnENognae&Xn%U8eO1NDx|W;M(R+uJK7r_7T&-TojNli&VX>&lEhtc1rJ}?wB zwDJ++;W!M{SXy}Ey{2>01MkrA?`nI>f*YwbP@N=WabR9t>@Nc+l-7m;UGsP9{ zPG|Q!iiB$|(oQJJ=5S?c{bwIhchVMOGH_VP&C#kgsfwXEkekW zk!@xy4GqQ^vJA%Ze|>+~|Gloc=6bj1J?D9zbIyI=C(`zX?Q4aHKTU32y&v>}L1Cs8 z8Iaa}L;LEa9;Llj;xua(dncC7qjc5mwOAGSXZl(!O6)J%w-l?Vw|)5V+Kr~HV;H=I zyrz%jHL*QC8DWzo9u5xI-HBoW4vyKIl{u%pIFp-CtpVe=tiYq8PQ2NR-@QJusOaAn zAW$i6RJ1?nh^x&|pu_MQ9ES3AyiepE4 z-wANWw-px^m3lId+vV`4#)h^330x;n!sW*~IOAQDF%b+}MuB`@c>oV2)jL~>8gyj< zxF8jK(+KvBjEV4emK>N7-ajiGWAW-kiTAB8$@~d>0zUlIWuV%IXk=Ks=52!Z zNIUoue$aeLB1EGColbc1@DP`jfKN5m-(h&5kqqhiy)<*q`m6XJCXh2sIf^ONCDPVK zRTn&i^}ZSHtn;;3G3KwTiuyS&sjkqwZ^&3#2}PEDs-#2^Ui2r1MLk_?_*PdsGyI4|x!g`(_3T)M3$qs8p%9 zJ5m}FC9S;`)I+pMJs}*8juH47F9msG@g#PnTg zR4@q*4IO}B9StVG@wh5CvH+4ag z=!mMITE?&Ni{h@gy={l6?K?a7-f<;fH@aS^7!#B0128AgnE2^p>u(;ECR%&;d!#$6 zrs*UwE}}DO=-x2IXJe!5We_O6Zk&N!^htq0`)K~+#_$xh4wkCZXs=3Q3>n-LZwqcv z?M~8*?2iNI%U4DldM`D9wJ!NwzVnukPOW!87NOlPBg}{DEGinJSO3&WFPMuI9&9G6 zCjp{G#+C{VIVB1v3ud2)b3s?up@roXIAvY*z3ZUxkwoe{Rhc^pQjjV$;-KW|#Nwi^ z6|(oT58)5qBG_T}BeWI!E}(MsO5;Ma!!8(RHKts%gOGTZ-ShT$iZNvS)I)wm2xw%8 zW6_AC^pDUc+W5&;aOng@qjIVON8Esq_`IU?cFyPNG5akFLkUb!=h=^&inX;mf!2O(j@-jjTvD;aHc;fbIliMYU_R)yM=f52=u`E< zY{Cb>9<8hq6&e^M!UGwP988~~9ddFw`bhTYlW3NFp0zulzohBkZ9%mK9=qF{{(2~?eNFD(nj0qBF`l#-?!mH`G?PIj`-#D$xz zH?yTyC0%V&U2VkMLYoq)8^7DoKnK-Q_6A_-5{LG7HaH3#Xb_HWW%6xoZsG&`KA3;9 zPTSi1V1CXc{Eg>N>tk-Ri*jcYsMg15*W)*p>u08L{8|#g&xA4EUlail03;;=4NO(9sFxub~?pNu*cCma`s-!a(cm z2gm9UMNgRZ_bke_zuO5#?9m^5=A7&_sN&T>nE->u-Or`hrIs3F%~F9;w*d$=>7)N9 z1@5N&m&8C$>X!R=R;VzrA0SY^t;fe2wJ-?g$LP+3jHHJ?ZxW3BJM_s3_Y|?0- z)b4E!oizVMG?Ek|3t;X2P(*G%qx6ExZ3$lCrYVte^wM@Ojy562NpaT6*7JOmsTfm_ z!gp%k;XutS9tQ%~1o2Jxu};#CE&;L^7Uu?8_$#e5GW@gaEsIb2dcCb_sFY(zTIq9U zF}-5Jx_eu!xAhLY2IHLS^-EArM#vjh$Wm`yrfXl5GFM#$=4DXyTkD9}T=%AlEYPUA zX^Od5mKk?(HJQna)6#twMZQ-wMfro3HAxB*xJ^F~pmbz}qa#qGp*{hjJ_PP~4UcqF zVm!eXB_a*e%IKL3sIymP?~Jnxj_;0F3!F2lm|&6+%x!^SYeQd|?xB1R_~=;5D8_V` zwDp+3RULXy36D#r=xZ^`eAbpOwtL}7y(y?Ct2>z8_{04MtcM7-Imc@?iGx{Lawtw_ zFtGPjxx+|4y6-i{bSCtSARv7ZF$4cSHw5#zU5k;pK6eTo*tuTa!eo}Q9e(fTK1H|( zA*xuFgs9#k_(Xm?_RQYSPN1|K$tgFjyUn4Q6pq`K7?XRpLFgdpxU2c>WdbmsRYTRZ zSd2PaBX~`4RcjjSW!*hl3Opi?a|Q!$g}h=zJ2%VgpP`g>a1XrC@~j$3v%o02Uz@8q zuWT}5?v9w9Zwu1nql`VKk@{$r_q|AmFI#u&t?aNSo<<*ggW|2iY_B#@2sKLv)O|lg z_G8WG=_nk>fM<@E{~5Z@S2Ht&s!!uBDsC+k{veM^?V?;9FZArLqyTURE0xvbJb|g6 z`pg(|uig6@AZ=3M?LN6u$EnZuA%rIp_?nxM`NoPSNoel6GRxA2K*EU83~UVaOirpF zR+SjY9%ybzpBREBHm23L25ek8u5*1+&1#~PsfzFF$TDq9q%C&OnN6L#if4paQ_4nFm`6ySTii0HP3p^HJB=42;EQhP2 zA3dJ3->16H4L$WXBsSx%{D@mjrIY|9k{v=w-m43Q;G(P94@v5k1s)&OzOK#A#U(40 z1LV5WVS4o{S1P=odQQHsa2l@mm$rA1Tp|J(u|%bS%#CBJTw`u=bJFa|U6hMdO=24a z>iY1OP3oeeq;_^kqUpQ*`-`s}QuCkbk1VC^)t!6yvr}|iy5ICKe<@wJ&;MZUIfU(5 zG260XxHI|N=Yf@vh+9x)JYi|2!?$)~)w(I1yzG>CVMu!Od(OCD#>mXLP_nHH+W~7~ zJ{eU8NOx&1w0~N$&-XjsdbIOwENR6=b|g1ge%BA3350}n{#UbJ+)5pNBAs?Z*gpMW!eQv zx6!sTrk%G+QV{F;haf_3NT)J?J>h{e&F1Z!DWn=xyq5`K6!0Fi^3mJMwcI;MRos(I`C*#vXP zI$)HbpK52bG=JkrjjNoQin-^+yYl;v7X#eTE`MYRaV2X6`Q7u2ZWCTwY8Gx5;>Mqd zg_VKy-Xua({$-i|MTd?IEsgp>)@w=kWgo+{ocgkyI{^7fe1!_Bqnr_7Y4y9g^JFDK zNM&;O>uZ)W=aD4W)Vp{$TTAivfPY2pH9(Lib!=MG@czW6Awny#)Tt4-)u>da#k0SR zW5~9at*vfs=2Gb5VNG@YGImlFZ+Y8Bb7(*J2`$PO57xmzw%@wY)_g`nFIDTPNZi%0 zyjwB7Rzybt4BqjicA6>h>_RSw}{n;(ubJ={N{RT{TPqqG0jl7l4sZ$Oo zY!>T+Mf>iaXNnP4M%=Z71%aQ=*q+ncJ(W+Ao$==Y!Ke_2>96mcoXM8b%0QC||CNZH_{?69N8#o? zkfnzp{YkvVVr~7=k-ey)WMsrGQe|5**2LYp>LU3nEL3hiI+r4szccdK{k7}+v|eXP zE$DS4m_mVc$Pp-UdvoQMY}3*qTN9198!NO#@6iz^OVcTo2#I}{DJ|6>%N-=1(Q7F_ z>U2>at0BuN1YC*4STD6^1gjt4H_JEKXSqT};Cb`zwu2~-t4&w(RZ$R(qY`sex~a?V zfNr1UX#tDk#dx(SFKbznlW9-I&t22G89$G*rc!#Y;>W6iIOPMf8}friMMwhn$~coX zP;=6vtAU^x^YIZZ{lpkSIVM-Zq~5#-N}NV7GJqIxSkw#g0>qIPgXDraqvZmIiHgYt zA_t}vwb$q?gPZU($l|;EFf@J3x6Ow-2hy`XH-s~y$I#HQl~vAShq%2V3t{_cSy@?) z78D$>uP!zUm1aFQ<#0I48FPfTf_}8x^`sKN#o4i7q9P2Hk)s7&DSe=f3#BP_`vKLq zc<5)5YTFWCNAL6})wZL-k3Xq&e;f!7ydILJ+g*{XsOxmT+pob#C@tf1&GkYZmrJIV*}375SlzoholyS;6Vit1KUF=VRR~&j^(D zkmh2HSnQ1>9T=aoFM1i5BBh-@(rc_W>zh^DmU6o!{dKXWs>h8jG2uPH6WB3#9CwxW z^d(A=Hy0yH7$t;d2re#4jYyaz1%x(FOgQ0O^BltVkyH4}=9O(u_PPQ{fPa(K=5tN&fjjkx%g(;4mgf{Z7l2{;Lk9W;aVdLZo=YSCo&JG4d4Vyd9e$HGlJCF<Grgb? z+_!?mXl9zitA@=7!)wU{5(*-p_bdLZzvmFTf~_F9O+Ii`5eN=?P$lvO zDl;aj7gp7tyXErkD8bWj^e}?A-~EY8qT%hz-WK?K*nxDy;1@RHM!S0Z0*eh6-&+_= z{4dRSGedYQO4EPh#@rzv9LNW^6?s-a`Q#xtG;R7IUT|H~=36Jl1Qdhf@=wSToL-QjdkT<}Iq7%~<_1&*1$Alx_qlx$ZtwLI$$7ux#O z;QI9r4>-|uckUA(C~0rE$IK^Kk))o*!yhl@DaJH%H2Ck;p7_8Q{PD-<@KgRRV;s%5hdXLAJYT1*~_XUqp3mzU{ zv_k4)$p`9L<8u8?O-(S}zCd%fw!x$91|_;~p!qRlqbB`yo$;7e<=Qd*$pBqYyXt+H z>U$hD&X%%?)99sDVxNyn82_5_Lth()Y=*pV{2Qy20O~&z_I;;cI4dg8#d*9>oGZZN zm$mk#7t_T-*i9($zvNev@?7cd$zLR)0ONQXe5av!x#@#msD3jQ6djTZJQ^Dtr+p=( z76UrDLF&JAB6(tBqERAYb!FwWli+w_4*9#JKil%85HDjfBk%wy7p&ZCLvH%H}vZJ;}|uf{PbPQzzjIz7+xn-vBBk6X0odXG{uar~QLhESBaWBfT@joZ z#xuX4c|4;1{V$?~n@?ru#A>u-Zynrl;eia!vGGSHiQugt`&S z7c!=Q=W{r|3X5`t1WdMS3`$#wMNKi8%o64nNc>SRT5}cCL$J**gV~%$N?cMLZ%@4$ zdk1WRl6M$=zD~8f!Xy18e~UV#{k!jWZO;taaX3(>!z0}QuDtY>^y{Wk@q^Tv<)F9j zND1TR?2GuKqPkL7qCy)Hy!k3@s8}(kLS?30ifO)o)D&w0hEj(TY&^{(fGYc?EcW#wwqJ5Da2U}hBf;x_#J zgnl(91)V#D(sNA6h%}WjmQU7|ISatcN=iLpaTpGAOdp-9M8kUfRM&x1mm5=Tq@Lu*_O$q&1Q2Nf#PP29!~!~bkr)K`m|sfG#l-HYSv@Hc!g z&E=tZgDsBci@(0-+)q;QE0{qWR3MLZlz)i1i>mA+xGgLP1z5XUP~M=VT+wA$2o!VM zEA@J*p#Cm~mN2oCBQua#iQ8!^>OT5Y@U{}mG23}K&eK|&54dk75jFLsa#@pJkeFOh zxS))PCRrVbU|18iwj#MXEN%+fD#7CP-*i=M@9y@lkcU2QjSrw{cX};eMIaBHmrN6X zz$Udkd0!%V2;Vo__%jWe)a-GuF}j2ijJn4_W)zg8>~D>MvnDlDB6n;3DPb3`Tmm{& z5N|*O9Rd#b2eO@kRk|y_sQE6WREOM@jdoTnoImg7Y0#f<0ev6oS1n$CF^Ivh*4 zd8(fJm4xWXER0HSGfwU7>`=^c$dVppLF!Q}7V!IE8V;;qA>)~Q75~B|E2!|B@Vew3 z{t)dtz2f**UBr3w4IQo71_6Q5J=oZ@Pu`HAY0j{7c|yU*$$y1OZP58&i=z@9Pj0~kAHLhT7ma!4j)Hm+*#pxP}GcR!SW9ZpGGY;tSZI)VY4yWoWF*~o<9ib5n2r|e6|(otXPd<-zGwk z&E?jT_}6I%$cs1t8RvH~cng-H!;tM6s8QDIDw*u&_fT3<>G=YFVOz=DA@o|=ik z{|uF`y6chN73fQZ43K|0o=u?kO1=INiKV$M;mWMk=l*HMobvdl(mmk07f&4_r3yy9 zCEO)YN-2&iM6vkM(i0o1R9?!Pz{Q=r$4TCXm?abtIaMN8Nt{lEoui7Jz2s~$GD{Wa zxN`iGdxKU6G`#@p_C{f_x#29vw&n=A5#qf)f+SSu8G6lr^cb@NMPkNR51iY(pBWmB zkCn5Av2J+?#@m5)#)%0b zYok(LctbnuziUDZ;h%coSGqfFzTaHF2JuyCE%w9rMaI25b59o$QR=p4XOMuG@UkV;5kxg-bU9RyG3? zYmhBo9s|R=`(I{PSydjz&a{58V!%dt>?D7j28r>Yj@!VSj?(fsTe}>STUVO)u(dyH z-vF&w3v0m__AbQaUd%2oN`fg0wuUDUWsbDJ>xH4FgYDOx{;IKl7kErtvEz0U=9Ia4 zRg|$M5U87nRWgt`0f~n=vre>rn~+-7cd!T9`WKhVQ5PE|;+NA6^i4H`>`!7XB zzn}gd#voGHTx@C_%k(BH9LpFNq<*@-nv)?@ew<9`$YZFV3$bvm4s-x%hhtVXrU2aOs-&~M_kx4TkKu+tPna{cGtnUig)E)j% z;2~~2z__0Y_JkzClIx8QNSlD;z7a7=Dr47(=%ZkfmH1YyHXL|i?HdJtF6H|q!VD$K zW0QIbda;CASyDtV^cc7B&844zBEA1cTL|ESd*lxj%q>&{YRgV!ecR~%( z`XG5&S2)!m8!CPFZ4XSsHj54n~*`$Ukti3 zmL5p(^(IidCew;bWR46`k9N{s&ZkBGyRh>!V-2y8Oz#D*ib9~L`Rr(GspRt?PztyY zVQO#;!kMShu-j& zOB2V^#QOc$!YkJ#B+~X0r(9P(4d*h*3USm8&{bcL;)Xznz2V2vj01aG&N%49M7z8! zYAe9mun_;P@xVgbkV>og414lolYrA>^d)zE+u?1ylvINE;$x~v$5dBaZFt1yB7xnk`&e_|0Ax_>1L1j_bXq#M!Vy- zFltF=G0V_dfBnL3kv*QIA1(n|cqwf!I{=W3V(4jCq!blR=byXX#yaV!+q7Nm?##(Z zLiiQlG6OIu#8~BOZ)y6GA(#mC_?eMjfufO>t?9Vb2=9|GC>e?@uOFoy(i`*TqYdBf zUXBf1ei$rWMWSEq^JmqTcif^qQ-u=6jpeB|(b^i$`inWEi_4j=qr>}0nl=z7%JMl! zlUZ>Kk%r^)dk=V3vv$2-?9{t1P7JLm-KIVIb;%t>*bFaF;U_)d$0s`TC4p^M9Pb;~ z_xjlYHgw4Q$k6Fw)ZId*m{TTVqyt?ing^`g6ua+sek)gzvr9~+f|zUluaUXNv9G1{tz_JJMSy<7)n<2dh1Qp4*p2dx7sR5ibG`faO=M=t`lal+kh;3vgY;L_ zkq|S?$1v+7EQ1$V{S>?fVl8|POqE1P3SMVAHLf8nxkHT^ll}g0fbe)W?+Kpp;i$=k zelz0gGXq>PAd-ZqeqyG7%>=tK+1`YzwC?NdWt|{W$kDsVP5j9yV+6pY2^aaV76F5&GSR|a?l`p``Lo% zQigDiMS&qUg5~~4a&CTke%(syB7|N5O$3Hd`2jXfB3^XS8!M8r|IsEvUjM|>Duqp& zlKF#}T&qsup#O^VZCZ9{abmgj$!T@ZBa zKJhZ!5X;RqR^k6TaWh^*CAP<1HO}Be0P5h;q+U*_%#ey9`CxTzATOxc{Lyjjvc7c5 yU4SFYRcTH}w4WpUXtJ}kO7bJ=3*b*pf=|p(DC$|ujRg+yFflg2QF`ss^Zy5pRjF+N diff --git a/tests/ragger/snapshots/flex/erc721_transferFrom_1/00001.png b/tests/ragger/snapshots/flex/erc721_transferFrom_1/00001.png index e9788a1be887fdb137f91d88fef1cf89c094ed42..49f5d63b56806be8a78e85703005d89e877898cd 100644 GIT binary patch delta 1940 zcmV;F2W$AhvjM!b0gxmCgRvzYQ3)-5-?wf1yI)|FOHnj`p1Q7wVHk#i8g`N-`}}U( zwzu0&_$6^1+f`KG_qW?Ej^j9vT|Je~Da$el0@0%ig23li@g4&G_4TFsHVnf&&)3&- z(=?>cK@eQ8*Q%;k8U)AkM(SMGwd#f3ZnrGUwwCF>?`o8b`-sjqWBaQwI zA&y}fE|<%H-@kuXh9l8B~wyWO@+705-IY~G|ku77d5h` zX_}^4)0!!KwzibuP~J$L12(>*ma`}d3hvc)y|u>>hT)pi$pek!xbOQnay9(d=reh?Qr^UqHp-O!!Xdd;y>aYGgStl;l0#3 z2m-o)^;2#^6h(HDM=tF!3{e!taXi(SgKrO-yTD6*l~H@j;(?h-#@F0VQ3krxZmY%FKUMoJIe63w`m5 zw^QdJ2$CcjhQVRKt!Wy{2I2pVqA1UEF4Jv)+w#EcFbv|)MZ@Dl+4qkMy259T{tbhK z8ZMX1*VmUC9c$b6t*I=QAa`Mp0B01z8iv7ex{5o=Ni7ys0|t z5m#iWeSP1PuORu$eczK~c)ec9Tcl&CnVrvPa^Wp1O}Og6pu#=%qpPZVd5~#SL~{C+w7EX>I3!^?HeCBMif?>-bNIulOm?=TrQ2Q4|ZR=4gCq zKRg)qUbUy8>$)^e(=_ExQBRg-X_{tPw#XWtWl?X>=aX#mHehYd6MSn+Z{|UBXEq3e zwr!iH5#ctT9#_}3@T}FC8Xq5@{l%qrc#(>tkb046n$lYui>o=|SNhJuw-ZNyJvNi$ zX$oR6(ea|8Lbo%y=}9~!Cv`h~^P}HPpo8yP8-*u9^Lz|7h{4BX+P2jU(OB5wVy!-1 zWm$@DCRooeR_9=eI*9lElw6WPyUKwRj?1s9bAhDM$6nws86-@Sr0Y5^m%{Ds`~Hu@ z>2y+$9L2&8_vl?*9Qe1O`6)qv5EMmW-h{-!;M4)az0fy!L+E|r^O_sKgZC5Y;v4=? z8g1kMF>i%>pTfe9I0bEY2SiKoYVh5f>-9?QhsL5ET6X9zP~tPKf#b@iKS)8dV+-?U zA&xXnMVrX7>~uPjEMBiysjWm&B%%}gyiR=zs)ZeKiW64_=%M>A7WoZ--nr8)67AD8 zb)LiHD!3sMpTjUzhj8du+P0;yk|cSrexz?h8gC}h9D0G%Gf8Royf%gRu`)x`!j5Q> zG)qwRgWzJj<#%ZG?RF#Kqs-`~r&Fubs4yQ*u`S~dJJJkT38CF@G=%7zItT9<;^6RP zPZ7BzM6(!O#$^}=dLCwfom>k$yhW;=?(_M4I-O3ZlQe-4tRc_yw~lqxbxl!SzM}jh zc>dDp0mALIE#vvILMTE>(l4Ma}qqnXLSzVJqAtiA#Yj| zT6~pd+2iq0y#~@;^HsYn>||L+^J~@8c3r2A(Np)6$3~EU1Y*a#$D`MfBnh9qD%6=g zhW82z?||p(90YF?gLXpKb&tp6@pwF+)MwP+SVn6)!{%Kd(q;@49=zcDm^EZ(-C zH;qR-WKpa82k|!U%=rx=4nt<6csxbPWJcDapEf@WZjKY)F4o~3ha2AiKHk804uar! zggBhgwk_XYI~*3pUk4TjxB`AOka#0?4&XtnL{YS6 zYjEHjk{|tcn@)&3JOHnj`hPtkYVHk#iT6K~n`}}U( zwzu0&I3;l$+tpIv_qW?Ej^j9vT|JUpP?lv71foY31cA@3;yncV>+4JNZ5W1mp0BUv zrfEo>gCMwGuT@p8GzgC6UDUa*Yt;q0-ELWyZ7tJ%-%DPk^)Hgx^?l#>y|-0Oypcx# zh7iXv442D)RyQRiV8NS)Qd!sT+IpuwiT0=2r8aYBk;yDQXxPP~O5{bmB4B#9JxXqx8h>xEwRKaoqR)d-)muYxJ85 zvm|GhITmpH_-S;Vx|MLitPHTvxZ zI`|ncR$Fsj*VpS+>Vm~_T$ZKO7W=;c`1qjDJVdqBj)0Ob)l-V15M|~+D$b(+_^&U% z@m}g21VNG{!!S7Pv^7mb*&zI%Q55BQ&SkoPZCf679fm>txoB)$DEs~)L5KLP(Z6Ak zP{ZYN`TF`&17vO6etdjPW$!t$LsQpAPx<`(6gmQ2@pkGQ1VNG{X_`*;!^poj??u&h zEfVG^SC7u^`~G}B^In>opE}yTn}uXOilVm`=)mJK!{6XROD#`)CZCr+M^Thz8TA=| zZ?_wr^7ZxAb=_>Ew6N1O4VU07%i=hugj4#@`Fy5a*C>jLq9AMH_@XF+-7`tvns-!Z zJ>qfpEelEK6&DJFnMEJRV^fc3sDRLVU$fc|M=wr;DOkP&G&6 zL;K;usQ0S9DY~vp(=<&}-VXI-S(c`0mSu~q(ODLi_Iy6cCT{@N*8IV@w)AEmG_~nWibdrLnl06MmoX9DI9!aMWEh zIi98<1{1w58Y*-+95uC-Bk5;V`pP=gqJSf*`T%_xn99WK`D z16G!$=xKuW{8n`imPmtm*-yzO3AC#mIN`PYjtZBMH2TXD;Z*x??%i;DyQ5Hvr3B?y9|D9qcB7#N&7K=>B=)@}&B4?JIU<9G0W0$qH= z|4E~5{6FRmQSVk**b%3o`R;&d30@7p+i|^KsqxT2v_s1deFaKws;&@RY`6RZjlSJ(Bz%+^z4UZyavBxpLn*dp{9#9${wg7~`@Mz`eN*S)9YY)( zp6@AwcZ6seqbs=#!$6OJ#H^ERVTU(LwbOk*pHHXL>2#7N5P~)2dH%k!j=HWXs>_#? zUj$EH8a+U`y|!iiAK^68G3$S8PdrrTAb9^gXdZTuzU9s@Pey*dUR*=PKWFox4eh*G z9&``{_xoM^pXZtIlvSPwog~TP3OWw2+7FKy`jEtGLRD3iP`t8#z9h_{P%(9#*fcK~gwKW7q`ptXvIVK|@9d7g_? z#Cp@eFK5{mp8C#zK@hxk3|df@rPy-ia=8dEl~ytmD{QH~KYH8G+PAQiBndx7og;9+ z-=(LHUxiR=2=r3kOQVG@hzZ%Fm@HrvhGCXvv=#@M60dyve0V~FpZKiK!Mn$x2|nsg zOG1mUvMhT%9;)L&nrpsrmxY}y%V>(NTH3Db)M0w+f%4dY2$DeTcX8GgpN= zle_SCLE#lTJ+QAXTj5P!h6L!oa1n}`(Mc$_|8EP z{EiTZ6WX?6<$H&tasLAT*;ohA^DgQf{Ek6FC-AIfTK((5!T?wN<9;+yc_VcW;6bZI zQM6`jaNrw~AN`K|PXkx*oizMc=KumN5SjcYd#r%>LTGeR6zCiM%TS_A@FwaU1i>Gg d$dk`l*%TS00601K_ay)T002ovPDHLkV1mgZ=i~qY diff --git a/tests/ragger/snapshots/flex/erc721_transferFrom_137/00002.png b/tests/ragger/snapshots/flex/erc721_transferFrom_137/00002.png index f619df54011d34d3d0f1bf479d3097ac65c23633..4cfd36bd7cb1e876356c290c89827d6916c2fde3 100644 GIT binary patch literal 16408 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 literal 16408 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 diff --git a/tests/ragger/snapshots/flex/erc721_transferFrom_137/00003.png b/tests/ragger/snapshots/flex/erc721_transferFrom_137/00003.png index 9f4c2abc05ac5bf36aa115128d719fee3e6eca4b..28c02bfef0d3e762d1da8680d47bc13c03a7d891 100644 GIT binary patch literal 7469 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 diff --git a/tests/ragger/snapshots/flex/erc721_transferFrom_5/00002.png b/tests/ragger/snapshots/flex/erc721_transferFrom_5/00002.png index 00c4c4b8600719b778b53ea1add5eff9e1e1e09f..92cf74df632f49dd66d641f172aade733bddd980 100644 GIT binary patch literal 16466 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 V#7{tg{}lkz*D<+Qedo!G{{y<%b5{TW diff --git a/tests/ragger/snapshots/flex/erc721_transferFrom_5/00003.png b/tests/ragger/snapshots/flex/erc721_transferFrom_5/00003.png index 92d19296643d3db1969d3b80eb6c5499ad66f799..19c095ef103af06cd0126dafe1c6abb870035b94 100644 GIT binary patch delta 4538 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 M1^r4naPG$c0FIyBLjV8( delta 4481 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 literal 17145 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 TWEuQR3y6`v+11yVZ^ZpCni`Qo diff --git a/tests/ragger/snapshots/flex/test_blind_sign_rejected/00001.png b/tests/ragger/snapshots/flex/test_blind_sign_rejected/00001.png index 8949bed7476595b500db4bef21311ab375f2f1bf..a36989ec6657badeae9bc5bc310ff0e1eeed7822 100644 GIT binary patch delta 1895 zcmV-t2blQHQq5AZQy~XB$u9bYU$2u|AuxYZRaNDAZj6cJI0%B5uB#}DEX!<-B#NT# zcH3h)Wm#rf7DbW%oqRkVjWJo48Dpe2-EWhpv5bITuh%WF20^ghZinw>w~g{}IGj$W zfeXaEmYB|2mPtArW5O_eX)U2FORowU$8oNS(c^dyb}w`=w$?SyQ-?>YUO`+ zyA7#vxF&_NK` z=&Y*BZ7;5>YQ0`xE|=a555w?!y%t3g1VNG{BNX=;G<=U}ap~+zMP&5C0y>UkujL`n^YwZyhgyH0=XstFsr*VK+R##BR*Oq#Ic|+HVHocBdl?Zp z+1dv-b4&F(ilVYC7gx#9pV12o=sJn))oLaG&9ba9po^lA11JcBmXp?=*kKqp9=IKs z<0}6M|8QTes!Cq9&)DCXdu2e2#ig^Ars*gRYqAHbs*)z`dxx?4Q-dBd%H@A>ILJb_ z+wEqv8Cvu?D9`A{2ekRSy}14xem!d_LO&b29u?7F(9(X0vfG(dvU!8?Wsil2{MJaOnYU{;rUz8Xx@*HE8eP zvyY|DE04o4Ow%+BL$|MdyIRv+Irc1#qR9J*eaT(m?RK-vIUbL_m-GAkYtN7%2yVBVy9)b~ z`;niYAG_-Pe*eU-nVWxxJ*3@F z^*G*setu+`?zi82X{xvln;N!dVKr#CGHZ+}iXzW*+vw&Fk2{~wwq{*#S=;aTa`Vf> zR*oLaaf{@QFqP{;`IVlsr~Zw7c-`3;Q&p85Z;h8+(p5O_o!ozN4$d+f_0_c1qZby? z=FeVhmJK-!`kaDebv>5j*67FBIG~N~7`*oe z`@1#DZHn@H@UeeChZ9>~4O;p)%->aM>1}i0*8Ny)uUYh1j{OKn@C2lKX#P~C+2?g5 zRup95v&?=o)-tu(Y&Pyq@beaCVF8^ai9IsXH2wPel2|+(4&D(HhM~RqZ6Dp)J~+R} za_mQ#9)1Fn$YgYju^KmQbAJ#7_0AhvOHmZ^(gaiSy@G$2&a?jxEi9m2@-r^=Xc=tp z?oE4^4jiZ1V>$M?l)D7$c|jF>Tpym%a=f*qu-lI^WJPv4-o39Lo861+Le!SdX6bFv z?vT&jZs#5}_TXro%%!TTEX(A+?e8);m*w2 z?#QLaH`sq_@9=d6_j&IbzOIQWOlPy`8niebk9M}`-EL=FA*2(--biw}T-@rzX0x$J z^RF|`x~|7^)md*+wH!-zHF*?`6hZS z$8D`%tybUP-|O}I`}^BY>g0XIt#ssh{@;K9{rBI03!TMrMju;`mSd@^D(|jtx&Pa| z>6qoQs7+_{1~q6?t3=z;&@z*eon)(i0Vp>27oX+MAYS6|QuMNSyLoZF!>-Ac%J4ohspS!Ea za?&)FyKL*Fz1?p0>rJ_F)@{7|oC@H$KC>Pj$FY0cs!eC9D=e{5cmm4P*%2&&# zYactI_`P|Sr3FJC*QXopzMRI7*!iFzzIlIH_qm+UXPw8-C*K18)baMQ^ry3Vk0y?e z9v-ajK&3ACWj(d(?w?vjF6;N1Z5@JWerOTtY~G`ZV-!VExPLpG1=4?utxc-oluK@Gl=bW8^`fdeyXWK1NbaUNoPYq1AtnS h;TA}f&?r9^{|_XGW;WB`WJmx2002ovPDHLkV1n?5_tpRa delta 1907 zcmV-(2aNd5Qq5AZQy~Wm$^Q9}pRSWyAuxYBRaNDAZj6cJI0%B5uB#}DEX!Abib{h#xeqWyvB9#^St_AZ_F+mq8DsYQ{g9obzm=fTQZjmB0UZQ^ zjn1m7-1g$Cs@CiE<#Or0@GuOo*K1J}K@cQKGD2~mLBscmmX*$K#W{{+`}n2gcpKP4 z=`-1G*>*IfjBDXgO)^i5-Svn7I2^nSu_%g;$D?;dmSy?<{Vk7=$D=O~Is>5k6x{Cqxp$A1`x+wInk>7ppyR^zIw z?0=sshTYZEHwKPQb4I`UIOu=fZns{q>&;|EQG9=Y-y6L*%5pZF&1$u3{K#sxvRyP7 z%M#Ps3~po)=kwVPn3J)mve>dLH=B)neO4ct+IV62ki>czhHnti=I;ubs`1h9P=of4 zKl@nfyz)202i+m=W7 z{rmmiOg@ri(H5G{qbSQ#st8_vxhzYm4;~H&sU(^|E#1bL&1O?oRll*%wyLhDra7F_ zdi3dZ`c==CHc68Dt8S3Fn`6(?D2lv~*q7V|-flO$oa6D>dpW3;RSm!^%|u&H5l7FL6HE3?L!qA2n_x9x83@VN8&Y-`r_#&9Jff`AXB*{lwav7JL})rC)b^gF;!K`!Pa=aC0&K%-pPM0C*UkYQ753S9=))D zHh=b7BXR(+@>hM2cLiWTR4m5)u5$|!~9*9mfkk^ZQT#Y_R2+%<=BsK5KlmAh~`gKntkpW zv6dhMpJnQsv6iXOX0vhcgP*rB3k&EZN$kOqrs>z$m&D@XaPSVAFbwU*Z~Fkx_VM{W zmSaD{^zajqL?)x}8LM%_w)F==Q17{swG>4mFHJBN--~~E={);S(ZT}SCBNiSkCyTF z?%uR#>A<0yJ(gn+O}R_3o)=WH$Mwk>EeBgm3cH;sLsn#$x<`CO{1%Cb!E+iqV)kL9?BW_`r_X0!SF`uh6%@@^o+5borhUB1@0 z;SO7Be1m_j_6}cHaG&>{;p>{7!gMx^u0f0A@n~m@-tBg_6+-$k?2ROs%f+ohY&IKv zK>s@9tm}F#N3QRrQj=v_k|cHrlzRiqy(&hY=SmKaW%<~8v>cy#p4X2kJH`3%o1SFs z^SxJx-1ee@&U7|QuR$AQk|eRe*yr=vt>oIUF3W%N>+5U1Uhj6h-EQ~w^<`7F%Qw+u zIc{t9YPI_Q{$8)w-{0SMQYY^tZoMPV^Z)+)@4x^4Tkb@TbNS4Av>ZrPRe5)H%l+Tx zea9@1MQu8pH>g3IS|!?!hL)L(>^xibYe2d8>EZHwEGLd*_apT?1-zQLw-t8wROUW? z)(3yqqk|ww(^Tf-kS-Z}0Vj`VABv!v=5#i1P=hwccx?#o9eQb+Ua!}B^+7VX`}AEs zmXoHb+-O@b?d^7}UvkR5vu^v{hg1MZ_ks23IF8+WR&6>L3PN&m{ zT>jWO#qZ6tEG-!FxIW!z_vJKx#Lfr(@XdeAy3gf&KI=SwKK2&yrw+DHrazs{do*!$ z^ze9f$0~KXHS4KWcmLEPa#_C*Z0it2a~F$9XY(FS9HS_T!u{Lf9O7@_1KT>##ZuDQ zd{hm(ojWS|)qn9Glljg8SY{hlFo)E4r`P@+zGYlI)m75w{aXV<)@k&G=R^tlyo)(GytfR t!4_zfAQuUfAQuUfAQuUfAQuD{_5ae7W;XU@UabHC002ovPDHLkV1hmb42S># diff --git a/tests/ragger/snapshots/flex/test_blind_sign_rejected/00002.png b/tests/ragger/snapshots/flex/test_blind_sign_rejected/00002.png index 2b71d8212a1a0d792686f4d88367968747809692..cf3b20e5b3b494f2cf16b6d562c7a62b326039af 100644 GIT binary patch delta 1985 zcmV;y2R`_~qyfF80gxmC1hFNXNePy&>zbzd*$=Rj$w@PRGgVayA%qa**h!LXbKa(D zZnv9^OX4`5*HB&8-EOxyj^j9Xbyqs)dc6igAm6BhAn@5MK0}~Sr<38^FbwlNU*5`f zU6VQoK~R?E{eE9qAlR1=Qs=6w^eE(ZyJcCnwoG?jrv#F-&q#XLbzRqWKDYJ zaR?zUm&@OOzke5|CV0raS@1##A^v{j|7+Jr@S*A)$8nM*(iLyF+uDOqcq`rS_xt@m z@7?jU{PudienhV0Ga_h77=}_hg%CVnEQC0nPLIc9cHvPJJ)h5}X~Hl})6{{vQ$XU| zAs?j9LI_f4J+W}PTqtR#L*un&`FXgnTNWrPp1<(SzXt4 zT`%!wN}nyY670$csdK>kS9CjzqM+nnRaI+83}F~9`8h?PaU6GD_d%hC{~G;a09DGO6JOrK^qm*Syh2(jDKA)$Wx-Xt<^v4Ty@Nd3Y zcjc<8%Cc16zv4K)UayKHc3t=N^+lg~ifU>(5*l==|D-4iX)`~m{1yG>BlN{9K2Dv3 zAV`u#2;uO(t*&bt4Z{BzMNyvTT&A0*;fYs&A%y(zr0#L4?AvDrUE#Av|AbCL1DDI? zbUNwTv8HLhzP^S=?>Q-lrmpq=(1vhe^JwisP?|$jY6^>MbYO9bl`EH;ZKO56}OY0DdwfmQ50oaMlX!F+l_vI zayp&bwjK4z8RgV<%_TU?vN(=uv?=}Nd_L1a*C>jLqM*{`@kLPtn~x;c#yP}ya%hEK>vTRam^s5=|_IkajOzs1-OY;QZeCfj?XdcW4LC`c! zUDq<*#)rpMRV5>9J*UR|$4AdNwH$6zQ54EsWSXY*l*Zy}PWX|rbMPI+(Hon8&G9q^ zF&KF9qOL->Gr8$b++|GadiWMcf0#fA->udQ9|X#hH3m)wEc)s(c)Dk|dKGXg|F2AD%JvVGye&_xqg&6fd-YInVQ0!%1M%h|3sf4 z@OV6wTaMR4Dm4UpDj%oOQX1rh>|SgZFbcyk%Q9MvgNl+*efqrnm;?{;S)GGV&p{Ks z%bS*jmS1IA_Iy6|sDU)se$}oSl@3$ z_r+WP`Oti{Lne9MFT~rtGv_CyI4l{>;_)F$HZ!s&o!b6a2y>k9ak&oXINb35=kWot za}WeSBgNr=gr;fu-r?}+w8FdJ`1VQMN#10=r=>7T!If#=O76F z&@86C%>bWDRaKwjKjwwM!SCUNJOL3j_$_?OJqgwX=7T%|lMx|xlh7zY7s~$!s9rN? T$B*BG00000NkvXXu0mjfLq_sM delta 1996 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 literal 17145 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 TWEuQR3y6`v+11yVZ^ZpCni`Qo diff --git a/tests/ragger/snapshots/flex/test_blind_sign_signed/00001.png b/tests/ragger/snapshots/flex/test_blind_sign_signed/00001.png index 8949bed7476595b500db4bef21311ab375f2f1bf..a36989ec6657badeae9bc5bc310ff0e1eeed7822 100644 GIT binary patch delta 1895 zcmV-t2blQHQq5AZQy~XB$u9bYU$2u|AuxYZRaNDAZj6cJI0%B5uB#}DEX!<-B#NT# zcH3h)Wm#rf7DbW%oqRkVjWJo48Dpe2-EWhpv5bITuh%WF20^ghZinw>w~g{}IGj$W zfeXaEmYB|2mPtArW5O_eX)U2FORowU$8oNS(c^dyb}w`=w$?SyQ-?>YUO`+ zyA7#vxF&_NK` z=&Y*BZ7;5>YQ0`xE|=a555w?!y%t3g1VNG{BNX=;G<=U}ap~+zMP&5C0y>UkujL`n^YwZyhgyH0=XstFsr*VK+R##BR*Oq#Ic|+HVHocBdl?Zp z+1dv-b4&F(ilVYC7gx#9pV12o=sJn))oLaG&9ba9po^lA11JcBmXp?=*kKqp9=IKs z<0}6M|8QTes!Cq9&)DCXdu2e2#ig^Ars*gRYqAHbs*)z`dxx?4Q-dBd%H@A>ILJb_ z+wEqv8Cvu?D9`A{2ekRSy}14xem!d_LO&b29u?7F(9(X0vfG(dvU!8?Wsil2{MJaOnYU{;rUz8Xx@*HE8eP zvyY|DE04o4Ow%+BL$|MdyIRv+Irc1#qR9J*eaT(m?RK-vIUbL_m-GAkYtN7%2yVBVy9)b~ z`;niYAG_-Pe*eU-nVWxxJ*3@F z^*G*setu+`?zi82X{xvln;N!dVKr#CGHZ+}iXzW*+vw&Fk2{~wwq{*#S=;aTa`Vf> zR*oLaaf{@QFqP{;`IVlsr~Zw7c-`3;Q&p85Z;h8+(p5O_o!ozN4$d+f_0_c1qZby? z=FeVhmJK-!`kaDebv>5j*67FBIG~N~7`*oe z`@1#DZHn@H@UeeChZ9>~4O;p)%->aM>1}i0*8Ny)uUYh1j{OKn@C2lKX#P~C+2?g5 zRup95v&?=o)-tu(Y&Pyq@beaCVF8^ai9IsXH2wPel2|+(4&D(HhM~RqZ6Dp)J~+R} za_mQ#9)1Fn$YgYju^KmQbAJ#7_0AhvOHmZ^(gaiSy@G$2&a?jxEi9m2@-r^=Xc=tp z?oE4^4jiZ1V>$M?l)D7$c|jF>Tpym%a=f*qu-lI^WJPv4-o39Lo861+Le!SdX6bFv z?vT&jZs#5}_TXro%%!TTEX(A+?e8);m*w2 z?#QLaH`sq_@9=d6_j&IbzOIQWOlPy`8niebk9M}`-EL=FA*2(--biw}T-@rzX0x$J z^RF|`x~|7^)md*+wH!-zHF*?`6hZS z$8D`%tybUP-|O}I`}^BY>g0XIt#ssh{@;K9{rBI03!TMrMju;`mSd@^D(|jtx&Pa| z>6qoQs7+_{1~q6?t3=z;&@z*eon)(i0Vp>27oX+MAYS6|QuMNSyLoZF!>-Ac%J4ohspS!Ea za?&)FyKL*Fz1?p0>rJ_F)@{7|oC@H$KC>Pj$FY0cs!eC9D=e{5cmm4P*%2&&# zYactI_`P|Sr3FJC*QXopzMRI7*!iFzzIlIH_qm+UXPw8-C*K18)baMQ^ry3Vk0y?e z9v-ajK&3ACWj(d(?w?vjF6;N1Z5@JWerOTtY~G`ZV-!VExPLpG1=4?utxc-oluK@Gl=bW8^`fdeyXWK1NbaUNoPYq1AtnS h;TA}f&?r9^{|_XGW;WB`WJmx2002ovPDHLkV1n?5_tpRa delta 1907 zcmV-(2aNd5Qq5AZQy~Wm$^Q9}pRSWyAuxYBRaNDAZj6cJI0%B5uB#}DEX!Abib{h#xeqWyvB9#^St_AZ_F+mq8DsYQ{g9obzm=fTQZjmB0UZQ^ zjn1m7-1g$Cs@CiE<#Or0@GuOo*K1J}K@cQKGD2~mLBscmmX*$K#W{{+`}n2gcpKP4 z=`-1G*>*IfjBDXgO)^i5-Svn7I2^nSu_%g;$D?;dmSy?<{Vk7=$D=O~Is>5k6x{Cqxp$A1`x+wInk>7ppyR^zIw z?0=sshTYZEHwKPQb4I`UIOu=fZns{q>&;|EQG9=Y-y6L*%5pZF&1$u3{K#sxvRyP7 z%M#Ps3~po)=kwVPn3J)mve>dLH=B)neO4ct+IV62ki>czhHnti=I;ubs`1h9P=of4 zKl@nfyz)202i+m=W7 z{rmmiOg@ri(H5G{qbSQ#st8_vxhzYm4;~H&sU(^|E#1bL&1O?oRll*%wyLhDra7F_ zdi3dZ`c==CHc68Dt8S3Fn`6(?D2lv~*q7V|-flO$oa6D>dpW3;RSm!^%|u&H5l7FL6HE3?L!qA2n_x9x83@VN8&Y-`r_#&9Jff`AXB*{lwav7JL})rC)b^gF;!K`!Pa=aC0&K%-pPM0C*UkYQ753S9=))D zHh=b7BXR(+@>hM2cLiWTR4m5)u5$|!~9*9mfkk^ZQT#Y_R2+%<=BsK5KlmAh~`gKntkpW zv6dhMpJnQsv6iXOX0vhcgP*rB3k&EZN$kOqrs>z$m&D@XaPSVAFbwU*Z~Fkx_VM{W zmSaD{^zajqL?)x}8LM%_w)F==Q17{swG>4mFHJBN--~~E={);S(ZT}SCBNiSkCyTF z?%uR#>A<0yJ(gn+O}R_3o)=WH$Mwk>EeBgm3cH;sLsn#$x<`CO{1%Cb!E+iqV)kL9?BW_`r_X0!SF`uh6%@@^o+5borhUB1@0 z;SO7Be1m_j_6}cHaG&>{;p>{7!gMx^u0f0A@n~m@-tBg_6+-$k?2ROs%f+ohY&IKv zK>s@9tm}F#N3QRrQj=v_k|cHrlzRiqy(&hY=SmKaW%<~8v>cy#p4X2kJH`3%o1SFs z^SxJx-1ee@&U7|QuR$AQk|eRe*yr=vt>oIUF3W%N>+5U1Uhj6h-EQ~w^<`7F%Qw+u zIc{t9YPI_Q{$8)w-{0SMQYY^tZoMPV^Z)+)@4x^4Tkb@TbNS4Av>ZrPRe5)H%l+Tx zea9@1MQu8pH>g3IS|!?!hL)L(>^xibYe2d8>EZHwEGLd*_apT?1-zQLw-t8wROUW? z)(3yqqk|ww(^Tf-kS-Z}0Vj`VABv!v=5#i1P=hwccx?#o9eQb+Ua!}B^+7VX`}AEs zmXoHb+-O@b?d^7}UvkR5vu^v{hg1MZ_ks23IF8+WR&6>L3PN&m{ zT>jWO#qZ6tEG-!FxIW!z_vJKx#Lfr(@XdeAy3gf&KI=SwKK2&yrw+DHrazs{do*!$ z^ze9f$0~KXHS4KWcmLEPa#_C*Z0it2a~F$9XY(FS9HS_T!u{Lf9O7@_1KT>##ZuDQ zd{hm(ojWS|)qn9Glljg8SY{hlFo)E4r`P@+zGYlI)m75w{aXV<)@k&G=R^tlyo)(GytfR t!4_zfAQuUfAQuUfAQuUfAQuD{_5ae7W;XU@UabHC002ovPDHLkV1hmb42S># diff --git a/tests/ragger/snapshots/flex/test_blind_sign_signed/00002.png b/tests/ragger/snapshots/flex/test_blind_sign_signed/00002.png index 2b71d8212a1a0d792686f4d88367968747809692..cf3b20e5b3b494f2cf16b6d562c7a62b326039af 100644 GIT binary patch delta 1985 zcmV;y2R`_~qyfF80gxmC1hFNXNePy&>zbzd*$=Rj$w@PRGgVayA%qa**h!LXbKa(D zZnv9^OX4`5*HB&8-EOxyj^j9Xbyqs)dc6igAm6BhAn@5MK0}~Sr<38^FbwlNU*5`f zU6VQoK~R?E{eE9qAlR1=Qs=6w^eE(ZyJcCnwoG?jrv#F-&q#XLbzRqWKDYJ zaR?zUm&@OOzke5|CV0raS@1##A^v{j|7+Jr@S*A)$8nM*(iLyF+uDOqcq`rS_xt@m z@7?jU{PudienhV0Ga_h77=}_hg%CVnEQC0nPLIc9cHvPJJ)h5}X~Hl})6{{vQ$XU| zAs?j9LI_f4J+W}PTqtR#L*un&`FXgnTNWrPp1<(SzXt4 zT`%!wN}nyY670$csdK>kS9CjzqM+nnRaI+83}F~9`8h?PaU6GD_d%hC{~G;a09DGO6JOrK^qm*Syh2(jDKA)$Wx-Xt<^v4Ty@Nd3Y zcjc<8%Cc16zv4K)UayKHc3t=N^+lg~ifU>(5*l==|D-4iX)`~m{1yG>BlN{9K2Dv3 zAV`u#2;uO(t*&bt4Z{BzMNyvTT&A0*;fYs&A%y(zr0#L4?AvDrUE#Av|AbCL1DDI? zbUNwTv8HLhzP^S=?>Q-lrmpq=(1vhe^JwisP?|$jY6^>MbYO9bl`EH;ZKO56}OY0DdwfmQ50oaMlX!F+l_vI zayp&bwjK4z8RgV<%_TU?vN(=uv?=}Nd_L1a*C>jLqM*{`@kLPtn~x;c#yP}ya%hEK>vTRam^s5=|_IkajOzs1-OY;QZeCfj?XdcW4LC`c! zUDq<*#)rpMRV5>9J*UR|$4AdNwH$6zQ54EsWSXY*l*Zy}PWX|rbMPI+(Hon8&G9q^ zF&KF9qOL->Gr8$b++|GadiWMcf0#fA->udQ9|X#hH3m)wEc)s(c)Dk|dKGXg|F2AD%JvVGye&_xqg&6fd-YInVQ0!%1M%h|3sf4 z@OV6wTaMR4Dm4UpDj%oOQX1rh>|SgZFbcyk%Q9MvgNl+*efqrnm;?{;S)GGV&p{Ks z%bS*jmS1IA_Iy6|sDU)se$}oSl@3$ z_r+WP`Oti{Lne9MFT~rtGv_CyI4l{>;_)F$HZ!s&o!b6a2y>k9ak&oXINb35=kWot za}WeSBgNr=gr;fu-r?}+w8FdJ`1VQMN#10=r=>7T!If#=O76F z&@86C%>bWDRaKwjKjwwM!SCUNJOL3j_$_?OJqgwX=7T%|lMx|xlh7zY7s~$!s9rN? T$B*BG00000NkvXXu0mjfLq_sM delta 1996 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 M07*qoM6N<$f?7;LTmS$7 diff --git a/tests/ragger/snapshots/flex/test_clone_thundercore/00001.png b/tests/ragger/snapshots/flex/test_clone_thundercore/00001.png index 618815bef905a8c803b5d57ed73271aa2f443630..636ba701ae54f7faea0c28a9e77f5df97d8775b0 100644 GIT binary patch delta 18436 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 delta 18453 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 Y0exiY%|kFc9smFU07*qoM6N<$f=bxKX8-^I diff --git a/tests/ragger/snapshots/flex/test_legacy_chainid/00000.png b/tests/ragger/snapshots/flex/test_legacy_chainid/00000.png index 7dc2eae68954c7e9be16955ae8eb13bb62358ffb..e7a72e7fbeeb24e5ed6fe3392f263e42d8552756 100644 GIT binary patch delta 1980 zcmV;t2SfO?L$gD$a2W=sw26Mh(UW!=G=EgnG@H$)s;bFkG8&D(bXnW&cD-Kb7Rh)# zp3mn;%xAaTt=H@EcpQHtuU4z7s@CguRaL1qecUR4kLw8N`}_NWPe-HCd_F&YE0=wg zkB^T}PfsV#kjuKpbY8F5DV?jTs_XhoTM4_}uGNH`OeV+8Dka@+x7+P@k@GIOqJNCO zj({H4G)+2Nd3$?1rNvS13`f`0<1|fkb90kkpXFe~)unT4gns8`%#=`7RV|mxQ?^h1 zj)Jah$>=K!=+S7DqqAw6vcI@#n*00vmzS5LXI|I!>+9=wyB&>2)9LgK#r+H&-)D4n z>0CCPCzDBj{iRZsJF%0n+|<|QDt|Ki$^v>anY4NyHk-};{e7xxo6Tmk*__h&O`T|` zmXeFQx^zzUwyLVSu9wSY8WH$yOFyxjJ2jujeRp@4{<~hU zdjopA-KGjO8jS{a+Pq`eb=_NW51dbF_gDQ_`DxQM>C^m9KE~`T0|Txuoqx00Y<8B8 zwX_AArb%7c`>JvEw*`I5D3`~_$261qeE#t8aB9&nA$Ue#eLz?L?Jw>g!=Im@A0HoE zXJO;&^U1>Ux z$K$hHk=|@J&(F`TU7)V(`G0&~#`Jc(Eqjfdrpf>PR59|_{{H^J^NO6&KYSeYVzIct zzwh>uZMWOo+uMDk_s%k(hlhu|ySv`6+}+*f>oc6om8NrbawkLb{QR5;%%$O{X|}uF z?&0B~JVomcPVGIn`%sGYx~{K1psW8j$U=>e{s}GUR^`jDQ=2!vu7B%#Hk;LTU0y4{ zzrTNbd;73n9xZG+Y&IK@$7#%IdgtNcp|0!6WRklb%juWPW%cbNNv_)Urt?|s zcDvL{XtkGjyIpD$K0ZFCc4GCnr@N}EhlhuzX^tEFoSW)#8k;8y+KzsDdioPyF70$W z?S5JYS-CoSFCCA^t$(lNkIEUoy}jl6tX8X|=kw>!pS*{RMx(d4w{j8rqw*{7@9%lh z%jNPDo95CY)StJvx2M0#t$n55-rlCu>2x}MeSJOfE3?^bI-SmDvw^vlRl5Av5%ul; z{XNaI{PmBXTPS76W`uRQvKDmNn60X6yWMU!o80ME4v%|&et*s_>u%55a=A=5zkJxs zam0MeBDF@Crt`scl>W{u^*`7zZ#!32)ih12Z@s5n=~Cf&@8nMV;6+BGezj=r=qn58 z>hD(TRStqK$76JN+VZmAcDo(8czwit%CK%-X{@ShwOZwqO-}dA)43{+^!ws61@yVb zz~v@Oh#r71(0|J4%dX}RxkxyfOy1t!%DBwU-ra8ZPe;COuljEncGnT}DO>dCSUDJy zFAVORARo8Ra+_j09{k$F;WxX!7IeD4QT?|movyZ(lO0|chg%j$%qM?E4gLnHd072z zO55gLXKW~>fzRpbH|LsXG!G9Cpq*#1>d~DU2x~}ud z@9^l(;lcSw%qM@vxx0Tf8g(z;q@`@P+w{>lJc{otw9@(F$Du0= z=u$e2r*?E2Y+r88yqBIhPVnNuzD9@*L?`uoW z?yI|m7=JCDt84FrE{A+B7K^gd zh>>q3d3kv$n-32U54kq~DaKiM9WkGDa+g{(>woonI-Tb6Pvs3P``Q~t7~sTS5-BgPV?dV`T4nQ`DJr+W73XZ_B0^k_7i&1UIY9Oz;3>8)wVTyWi6Q zJg?u`j-E^=9?X?vo!VzVA89sRtvy?mlkx@cHz9 zB|i`P!-=o!K9}d`=a}{9H{SyOsrvS7#ZTwzXLNBK=)=ld4pchizN}9z`tWaEMSm{G z_dEMK64Csjt4QbSXLNC##dfr!1w zI#;?lva|fvPQr5CjATBaPbQOVISo{6K?A?bwWM<;paH^@K>~Ca>i+}K@(6$G(G(E? O0000|AF6 delta 1979 zcmV;s2SoU@L$gD$a2W=mw0(Zbp_6tQG=EOhG@H$)s;bFkG8&D(bXnW&cD-Kb=E!(F zp3mn;%xAaTt=H@EczhLGc(qzpRkdEPtEx(^>EqV=dt66A-{0R4d^#G9=JWaKTe<9` ze0+R-dU`r>hFsRwrSp2dPU&1#RbAI#+Cl3b9;a!Vo12^T`YZ<>q_TTX{)NL>w39drs06!w)7Lbxl{9bJRa|MyK8J=#Lws}3+S#C*>`t$>A&ms zx;LP=+ij{tqtR$!r_DQdUDv&J_rUp-c7N4>m7g|ElRnMw=kte$hf|AwA;B~H>I1s^Z+~(3F#i1f{P_6T zIuRR>$E($!1-RNQF1ue@E|$?5{0bTvKK^AI!^iOC(x9VSho!Y$Vb$?ygv)Qb!>+*8> z{r&yh+uMg#^N9IuHk&enXS3OOJWj(-(>o6j4|QEnCX?LrSWdrOE~{@JNpjV$G@Z|4 zx7(#ALaV*J+wD?&@bU36H4>}8J>6ARJv=-#O>^AX=iF3})6zU$(026G)6<{ua%rd2 zY4_7I$ja5pd+B&QZhw6xe^k!!?d>hkXSG@#J)b{+{^XrxG#b6Vy_Ji|AC+Hue}B)5 zUM`oP*ff_Gq5izRy*>R^ZtZLI_VzZNPN&o9>+9=*UzyEj)9G|Jn+?pZtk31Qj;L(! z@9$}zZ*scdoX%BonBNzdDWK0a z1}?W(LY)48jek}~Uv^D@$VI}*Wb*d*R>oy+_U?AOe>(DQd)0rtu)B_!PuZeB$I8K8 z`NH773GzYfEVn792$TNob2%GINZ26Vm|pRD)Bc+EyU_? zQ`$CfIb$m!4SY_IzB$)C1A2IPDDQ*6Y+Pp+EjF2QbIXkwq&Z_emc*#=U$yohqjg7SP?H@>#y z?7qfJh=0-2xw`f~=yKHOVzDUeO|Bok&vR*-X1!jg`?iM{am0Mes@Wa!{_yZ{b8~ZZ zbJMzkkW-Wo=RD+R{V~d6OT821X7B0C8tvDb=JaKKzkumnU3CjOS*=$2Y0-lpb)l9!j4vIX(*@Q^F?pJJSK*Aeqc=Xa@5vwvQ%r_*U30#)9?vagA;*=&MTj_dMk z+tI0hZZ?~4jmnQWKmDesH1>Jlr>ETZ5<$##uCBcWT~*a|I?YGy=jZ3Lk(JAjeDjo$csUk(#Dy-PN7$|E_-SnB{W`o6gk_XhBzub09kTUo1$A5PnF`wCNmTt7|miF!Kt$WIu?wu|B?|w-G z@a%qJJ9;vil=rOWbWRP0EA15i2Eo(0s;YmUo}PZm=}&&9_`c^Xryh*-y8F1%!{^ic zmHa&D4=28^`&^!%pJUdaUwaGqrz+cT7C)V*%2CN*{TJ`~HovwV z%|2I@&XpE)S6$bq{AqBaX|PX}{~v!12!BT&h^PPn N002ovPDHLkV1mT2YBB%- diff --git a/tests/ragger/snapshots/flex/test_legacy_chainid/00001.png b/tests/ragger/snapshots/flex/test_legacy_chainid/00001.png index ae8de1f1c36b90a6abc6dc95a6dfc24c8f2feae9..9eb958d4901874e8d4ab5106ff6abde810b5c077 100644 GIT binary patch delta 1854 zcmV-E2f_HRssXF20gxmC^06g}ObNI2ec!h2dq2RFw@fsDr>d%P9LI5_hMgqIKG$vA z_IkYvyCjZdyMpTb{(8N}aU937t6u4xvMhrj5N}jL5cu3GUPGWyr<3N_FbwlN-(Jd1 z(~vp`L2$WTZnxXU1i`VqkUCdYrCK4^>ov==XUlZo_mUxLeMQo{zVG|K_qnuRNTc7u z#W9ZK&(F`3YfTC%j2B`Y$Nzru|F!EScu{qZ<2XqY(G;)O>$8JTcq!d(x7+Pz_wM*w z?USBOFn=$k&f_?eI;)O_pPwIc8a&lppoX{6RY?A8cbVFQm$0K>OrVn_kvtDg)0|Ex zYGh5*G)=RmHIw^nYc9c|ypTEvYhFeZ23p9@7zVBbi)bL-U zUreA?NV31bzv?Ds& z+HoACD2n5Ft}zF{7Bn}3*V-tT%Y_oj^Za~1ug&VQc&^beFVMli{$jN$S52&J4Zm~sLq|-DFm*6bR;y9*gQ~Kt7K2xA;6h%c* zP-^1%q9}shBS~JG7gc9H;*JcpukU-Z6(oDP?|U)~FP95hi*yV%v-9~(CcH(V2~+(I z3fxmW`gVW2J-kQcHceCYS1x4yc7$TaaV(u8e&PvsT_@5h%hEcX$KxUTMi_=&*YQh; zpZF=mFo;VRMX{o2j>d=f!<|vDReBn_u1nK2O;g?!^<-I=rfHUCt5T!0EXr*d21=8+ z0qfK}!MC>bViq(vW`iJT+qP*M;cnyMaaC0b%UXZ+sqyjg#Vf8&hi9oM3h6B}O;dVG zV{tVnyru0N{2Foe#%6LnO+gH1Uc6|i(Ctia>WPQMq&^Sd?C2L0=-{{1CgDNQJRU=J zV(>AUwrw>-G#2S_u~vImS(f586Kv;=)j3$B4&r$~CzmA9u43SX;qo?RE|4_(*c*J4 zLBf9|NxH7%aw*K-zVAO2K0iOzBPX#)hgc^GqDXir^l_c~5LAnF#3@cp z6`+UeT`ck&yz)!82((Yr)Oie#E9Zs?d=A4<9m1ijv~5d2B}wvH?~%R@X}p*~bLat1 zeUifLd1(skV`GG-MLMEI(kwyM4uXm8miN%;>-9>)N0HHMPp4L=QDHusVw=Z*(vg2= zz)A@1exV^m-_$vHMHdH$2YU+79U+><EA&tKZtQB@Urb@__&tKjiVlLrX1*EWy;pKu=OnC;iv4G+~h2wp!9n!6pOU%Bzi zgOMMP2iH*X-}ekD0sOZe*qQegFCS zDJInN&}Nh8q(wS>{ig5lZyM~DY;b-GnHyqFzW@IFF9?FVuCcV+r>e9rS+oFdknezTZmS9oeW2SM=CK4?K%mSW45pPwILrP4}9VtFm~ z)sG(ai|JdWlOzd0MV%l}*R|B;_+1F4hCr|7pFFeo?bt> zZv;UgcD%YjdJ9RC@X4z}oylT&EvN7fc&^St@FG5FCv;tRzu)io`!Ec12Z& z&g3a|T}%G!Ifh>h6F(Mj+s}*oqaCuU)%`)d^*eLk!Np<7q8E>cD4BoE$Xa!2^Rr;) zIN{}d9nNvM;r;vZ0=9Dy1n=SEa6;R*eD83y>^I;q`#OMzS5fESJq8J#z@w6B>8}Gb z16%<+8c4j5ItQ?zRiY@`vNbsH4atsvxy`46L-^`z-u8ix+n^~ s8~tS{$|ZOabq<2ygJuCSlR;G36ckB8n4|?D4*&oF07*qoM6N<$g2F|hasU7T delta 1873 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 delta 7843 zcmch6c{r5s+c(l`&(5Gkku}M_BuVyEDurx=$(DV0i&7C2GJG*ZWTr;QI@y&N3}cx} z)=8Ej#$Xs3hUfl%f5-7Ve#i4X$NSHFyzl+T9M{~}eO>2yUDvsM&d>G9=9A4!gYzFa z(VWWcR)fcDITcK-ULJqLspzKQh7#Qx+lC(QK2bFBf;^Dg;-v&|Bop{K_CkybNmYSz z2Y|WYQ9rHxesslBDS@LeDWU84x3HFRYIu{g^GKL;pqAuz%wjP64OUYqdxC{(4j};N zo7WXzrI3QfGIrwf&{o3Sx#=RB-z}M%_2cDP#9}OVG5|N~2Y$LlIMkPz(8au3*cIMX zj_p0~NYZq0@Wa zcZV`44^)Ow{oXK;q-kdF_s`(d6#BO0AT`zqA2czl$J?Qv?tzgYY{Z4N8X6V}vhz@@ zm3_@?nt#E^=-U$`izii9ZU-Dx=WvD$st(XKZN_!;p`+We4DL5pBw!=FsgA9KB z#qYoR#X;Z3-|u9XSIx0<$F0?(