diff --git a/.github/workflows/swap-ci-workflow.yml b/.github/workflows/swap-ci-workflow.yml new file mode 100644 index 00000000..ccd7ae46 --- /dev/null +++ b/.github/workflows/swap-ci-workflow.yml @@ -0,0 +1,18 @@ +name: Swap functional tests + +on: + workflow_dispatch: + push: + pull_request: + branches: + - master + - main + - develop + +jobs: + job_functional_tests: + uses: LedgerHQ/app-exchange/.github/workflows/reusable_swap_functional_tests.yml@develop + with: + branch_for_cosmos: ${{ github.ref }} + repo_for_cosmos: ${{ github.repository }} + test_filter: '"ATOM or atom or Cosmos or cosmos"' diff --git a/app/Makefile b/app/Makefile index 1ffb0280..918ca905 100755 --- a/app/Makefile +++ b/app/Makefile @@ -27,7 +27,18 @@ include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.installer_script include $(BOLOS_SDK)/Makefile.defines include $(CURDIR)/Makefile.version +ifndef COIN +COIN=ATOM +endif + PRODUCTION_BUILD ?= 1 +ifeq ($(COIN),ATOM) +ifeq ($(TARGET_NAME),TARGET_NANOS) + HAVE_SWAP ?= 0 +else + HAVE_SWAP ?= 1 +endif +endif # Display the target name $(info ************ TARGET_NAME = [$(TARGET_NAME)]) @@ -38,14 +49,21 @@ ifeq ($(PRODUCTION_BUILD), 1) else $(info ************ PRODUCTION_BUILD = [INTERNAL USE]) endif + +ifeq ($(HAVE_SWAP), 1) + $(info ************ HAVE_SWAP = [ENABLED]) + DEFINES += HAVE_SWAP=$(HAVE_SWAP) +else + $(info ************ HAVE_SWAP = [DISABLED]) +endif + + # Add the PRODUCTION_BUILD definition to the compiler flags DEFINES += PRODUCTION_BUILD=$(PRODUCTION_BUILD) include $(CURDIR)/../deps/ledger-zxlib/makefiles/Makefile.app_testing -ifndef COIN -COIN=ATOM -endif + $(info COIN = [$(COIN)]) diff --git a/app/Makefile.version b/app/Makefile.version index 2f6ef07a..bcc598e2 100644 --- a/app/Makefile.version +++ b/app/Makefile.version @@ -1,6 +1,6 @@ # This is the `transaction_version` field of `Runtime` APPVERSION_M=2 # This is the `spec_version` field of `Runtime` -APPVERSION_N=35 +APPVERSION_N=36 # This is the patch version of this release -APPVERSION_P=27 +APPVERSION_P=0 diff --git a/app/src/apdu_handler.c b/app/src/apdu_handler.c index 18ca7d10..e105c7c8 100644 --- a/app/src/apdu_handler.c +++ b/app/src/apdu_handler.c @@ -37,6 +37,10 @@ #include "chain_config.h" +#ifdef HAVE_SWAP +#include "swap.h" +#endif + static const char *msg_error1 = "Expert Mode"; static const char *msg_error2 = "Required"; @@ -212,6 +216,17 @@ __Z_INLINE void handleSign(volatile uint32_t *flags, volatile uint32_t *tx, uint THROW(APDU_CODE_DATA_INVALID); } +#ifdef HAVE_SWAP + if (G_swap_state.called_from_swap && G_swap_state.should_exit && error_msg == NULL) { + // Call app_sign without going through UI display, the UI validation was done in + // Exchange app already + app_sign(); + // Go back to Exchange and report our success to display the modal + finalize_exchange_sign_transaction(true); + // Unreachable + } +#endif + CHECK_APP_CANARY() view_review_init(tx_getItem, tx_getNumItems, app_sign); view_review_show(REVIEW_TXN); @@ -276,6 +291,16 @@ void handleApdu(volatile uint32_t *flags, volatile uint32_t *tx, uint32_t rx) { } FINALLY { +#ifdef HAVE_SWAP + if (G_swap_state.called_from_swap && G_swap_state.should_exit) { + // Swap checking failed, send reply now and exit, don't wait next cycle + if (sw != 0) { + io_exchange(CHANNEL_APDU | IO_RETURN_AFTER_TX, *tx); + } + // Go back to exchange and report our status + finalize_exchange_sign_transaction(sw == 0); + } +#endif } } END_TRY; diff --git a/app/src/common/main.c b/app/src/common/main.c index 87150f07..e5fffe48 100644 --- a/app/src/common/main.c +++ b/app/src/common/main.c @@ -19,25 +19,106 @@ #include -__attribute__((section(".boot"))) int -main(void) { +#ifdef HAVE_NBGL +#include "nbgl_use_case.h" +#endif + +#ifdef HAVE_SWAP +#include "lib_standard_app/swap_lib_calls.h" +#include "swap.h" +#endif + +#ifdef HAVE_SWAP +// Helper to quit the application in a limited THROW context +static void app_exit(void) { + BEGIN_TRY_L(exit) { + TRY_L(exit) { + os_sched_exit(-1); + } + FINALLY_L(exit) { + } + } + END_TRY_L(exit); +} + +// Helper to handle the different library commands +static void library_main(libargs_t *args) { + BEGIN_TRY { + TRY { + switch (args->command) { + case SIGN_TRANSACTION: { + // Backup up transaction parameters and wipe BSS to avoid collusion with + // app-exchange BSS data. + bool success = copy_transaction_parameters(args->create_transaction); + if (success) { + // BSS was wiped, we can now init these globals + G_swap_state.called_from_swap = true; + G_swap_state.should_exit = false; + +#ifdef HAVE_NBGL + // On Stax, display a modal + nbgl_useCaseSpinner("Signing"); +#endif // HAVE_NBGL + + view_init(); + app_init(); + app_main(); + } + break; + } + case CHECK_ADDRESS: + handle_check_address(args->check_address); + break; + case GET_PRINTABLE_AMOUNT: + handle_get_printable_amount(args->get_printable_amount); + break; + default: + break; + } + } + CATCH_OTHER(e) { + } + FINALLY { + os_lib_end(); + } + } + END_TRY; +} +#endif + +__attribute__((section(".boot"))) int main(int arg0) { // exit critical section __asm volatile("cpsie i"); - view_init(); os_boot(); - BEGIN_TRY - { - TRY + if (arg0 != 0) { +#ifdef HAVE_SWAP + // The app has been started in library mode + libargs_t *args = (libargs_t *)arg0; + if (args->id != 0x100) { + // Invalid mode ID + app_exit(); + } else { + library_main(args); + } +#endif + } else { + // The app has been launched from the dashboard + // G_swap_state.called_from_swap = false; + BEGIN_TRY { - app_init(); - app_main(); + TRY + { + view_init(); + app_init(); + app_main(); + } + CATCH_OTHER(e) + {} + FINALLY + {} } - CATCH_OTHER(e) - {} - FINALLY - {} + END_TRY; } - END_TRY; } diff --git a/app/src/common/tx.c b/app/src/common/tx.c index 764c2f9b..9ec249a7 100644 --- a/app/src/common/tx.c +++ b/app/src/common/tx.c @@ -21,6 +21,10 @@ #include #include "zxmacros.h" +#ifdef HAVE_SWAP +#include "swap.h" +#endif + #if defined(TARGET_NANOS2) || defined(TARGET_STAX) || defined(TARGET_FLEX) #define RAM_BUFFER_SIZE 8192 #define FLASH_BUFFER_SIZE 16384 @@ -113,6 +117,26 @@ const char *tx_parse(tx_type_e type) return parser_getErrorDescription(err); } + #ifdef HAVE_SWAP + // If in swap mode, compare swap tx parameters with stored info. + if (G_swap_state.called_from_swap) { + if (G_swap_state.should_exit == 1) { + // Safety against trying to make the app sign multiple TX + // This panic quit is a failsafe that should never trigger, as the app is supposed to + // exit after the first send when started in swap mode + os_sched_exit(-1); + } else { + // We will quit the app after this transaction, whether it succeeds or fails + G_swap_state.should_exit = 1; + } + err = check_swap_conditions(&ctx_parsed_tx); + CHECK_APP_CANARY() + if (err != parser_ok) { + return parser_getErrorDescription(err); + } + } +#endif + return NULL; } diff --git a/app/src/crypto.c b/app/src/crypto.c index 46079007..15c5f2d9 100644 --- a/app/src/crypto.c +++ b/app/src/crypto.c @@ -33,7 +33,7 @@ address_encoding_e encoding = BECH32_COSMOS; #include "cx.h" -static zxerr_t crypto_extractUncompressedPublicKey(uint8_t *pubKey, uint16_t pubKeyLen) { +static zxerr_t crypto_extractUncompressedPublicKey(uint8_t *pubKey, uint16_t pubKeyLen, uint32_t *hdPath_to_use, uint16_t hdPath_to_use_len) { if (pubKey == NULL || pubKeyLen < PK_LEN_SECP256K1_UNCOMPRESSED) { return zxerr_invalid_crypto_settings; } @@ -46,8 +46,8 @@ static zxerr_t crypto_extractUncompressedPublicKey(uint8_t *pubKey, uint16_t pub // Generate keys CATCH_CXERROR(os_derive_bip32_with_seed_no_throw(HDW_NORMAL, CX_CURVE_256K1, - hdPath, - HDPATH_LEN_DEFAULT, + hdPath_to_use, + hdPath_to_use_len, privateKeyData, NULL, NULL, @@ -155,14 +155,14 @@ zxerr_t crypto_sign(uint8_t *output, return error; } -zxerr_t crypto_fillAddress(uint8_t *buffer, uint16_t buffer_len, uint16_t *addrResponseLen) { +zxerr_t crypto_fillAddress_helper(uint8_t *buffer, uint16_t buffer_len, uint16_t *addrResponseLen, uint32_t *hdPath_to_use, uint16_t hdPath_to_use_len) { if (buffer_len < PK_LEN_SECP256K1 + 50) { return zxerr_buffer_too_small; } // extract pubkey uint8_t uncompressedPubkey [PK_LEN_SECP256K1_UNCOMPRESSED] = {0}; - CHECK_ZXERR(crypto_extractUncompressedPublicKey(uncompressedPubkey, sizeof(uncompressedPubkey))); + CHECK_ZXERR(crypto_extractUncompressedPublicKey(uncompressedPubkey, sizeof(uncompressedPubkey), hdPath_to_use, hdPath_to_use_len)); CHECK_ZXERR(compressPubkey(uncompressedPubkey, sizeof(uncompressedPubkey), buffer, buffer_len)); char *addr = (char *) (buffer + PK_LEN_SECP256K1); @@ -193,3 +193,36 @@ zxerr_t crypto_fillAddress(uint8_t *buffer, uint16_t buffer_len, uint16_t *addrR return zxerr_ok; } + +// fill a crypto address using the global hdpath +zxerr_t crypto_fillAddress(uint8_t *buffer, uint16_t buffer_len, uint16_t *addrResponseLen){ + return crypto_fillAddress_helper(buffer, buffer_len, addrResponseLen, hdPath, HDPATH_LEN_DEFAULT); +} + +// Fill address using a hd path coming from check_address_parameters_t +zxerr_t crypto_swap_fillAddress(uint32_t *hdPath_swap, + uint8_t hdPathLen_swap, + char *buffer, + uint16_t bufferLen, + uint16_t *addrResponseLen) { + if (bufferLen < 50) { + return zxerr_buffer_too_small; + } + + // extract pubkey + uint8_t uncompressedPubkey [PK_LEN_SECP256K1_UNCOMPRESSED] = {0}; + uint8_t compressedPubkey [PK_LEN_SECP256K1] = {0}; + CHECK_ZXERR(crypto_extractUncompressedPublicKey(uncompressedPubkey, sizeof(uncompressedPubkey), hdPath_swap, hdPathLen_swap)); + CHECK_ZXERR(compressPubkey(uncompressedPubkey, sizeof(uncompressedPubkey), compressedPubkey, sizeof(compressedPubkey))); + + uint8_t hashed1_pk[CX_SHA256_SIZE] = {0}; + cx_hash_sha256(compressedPubkey, PK_LEN_SECP256K1, hashed1_pk, CX_SHA256_SIZE); + + uint8_t hashed2_pk[CX_RIPEMD160_SIZE] = {0}; + CHECK_CX_OK(cx_ripemd160_hash(hashed1_pk, CX_SHA256_SIZE, hashed2_pk)); + // support only cosmos for now we might need to send the hrp as an address parameter + CHECK_ZXERR(bech32EncodeFromBytes(buffer, bufferLen, "cosmos", hashed2_pk, CX_RIPEMD160_SIZE, 1, BECH32_ENCODING_BECH32)); + + *addrResponseLen = strnlen(buffer, bufferLen); + return zxerr_ok; +} diff --git a/app/src/crypto.h b/app/src/crypto.h index 7b216290..db877bd6 100644 --- a/app/src/crypto.h +++ b/app/src/crypto.h @@ -37,6 +37,11 @@ zxerr_t crypto_fillAddress(uint8_t *buffer, uint16_t bufferLen, uint16_t *addrRe zxerr_t crypto_sign(uint8_t *signature, uint16_t signatureMaxlen, uint16_t *signatureLen); +zxerr_t crypto_swap_fillAddress(uint32_t *hdPath_swap, + uint8_t hdPathLen_swap, + char *buffer, + uint16_t bufferLen, + uint16_t *addrResponseLen); #ifdef __cplusplus } #endif diff --git a/app/src/swap/handle_check_address.c b/app/src/swap/handle_check_address.c new file mode 100644 index 00000000..abcfcd95 --- /dev/null +++ b/app/src/swap/handle_check_address.c @@ -0,0 +1,63 @@ +/******************************************************************************* + * (c) 2016 Ledger + * (c) 2018 - 2023 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#include "crypto.h" +#include "lib_standard_app/swap_lib_calls.h" +#include "lib_standard_app/bip32.h" +#include "swap.h" +#include "zxformat.h" +#include "swap_utils.h" + + +void handle_check_address(check_address_parameters_t *params) { + if (params == NULL || params->address_to_check == 0) { + return; + } + + // Reset result + params->result = 0; + + // Address parameters have the following structure + // 00 byte |path length (1 byte) | bip32 path (4 * pathLength bytes) + // Get the path + uint32_t bip32_path[HDPATH_LEN_DEFAULT] = {0}; + uint8_t bip32_path_length = params->address_parameters[1]; + + if (bip32_path_length != HDPATH_LEN_DEFAULT) { + return; + } + + for (uint32_t i = 0; i < HDPATH_LEN_DEFAULT; i++) { + readU32BE(params->address_parameters + 2 + (i * 4), &bip32_path[i]); + } + + char address_computed[100] = {0}; + uint16_t reply_len = 0; + zxerr_t err = crypto_swap_fillAddress(bip32_path, + bip32_path_length, address_computed, sizeof(address_computed), + &reply_len); + if (err != zxerr_ok) { + MEMZERO(address_computed, sizeof(address_computed)); + return; + } + + // Exchange guarantees that the input string is '\0' terminated + uint8_t address_to_check_len = strlen(params->address_to_check); + + if (reply_len == address_to_check_len && memcmp(address_computed, params->address_to_check, reply_len) == 0) { + params->result = 1; + } +} diff --git a/app/src/swap/handle_get_printable_amount.c b/app/src/swap/handle_get_printable_amount.c new file mode 100644 index 00000000..507eccef --- /dev/null +++ b/app/src/swap/handle_get_printable_amount.c @@ -0,0 +1,46 @@ +/******************************************************************************* + * (c) 2016 Ledger + * (c) 2018 - 2023 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#include "bignum.h" +#include "crypto.h" +#include "lib_standard_app/swap_lib_calls.h" +#include "swap.h" +#include "swap_utils.h" +#include "zxformat.h" + +void handle_get_printable_amount(get_printable_amount_parameters_t *params) { + if (params == NULL) { + return; + } + + uint8_t amount[COIN_AMOUNT_MAXSIZE] = {0}; + MEMZERO(amount, sizeof(amount)); + MEMZERO(params->printable_amount, sizeof(params->printable_amount)); + + if (params->amount_length > COIN_AMOUNT_MAXSIZE) { + return; + } + + memcpy(amount + COIN_AMOUNT_MAXSIZE - params->amount_length, params->amount, params->amount_length); + + char tmp_amount[110] = {0}; + zxerr_t zxerr = bytesAmountToStringBalance(amount, sizeof(amount), tmp_amount, sizeof(tmp_amount)); + + if (zxerr != zxerr_ok || strnlen(tmp_amount, sizeof(tmp_amount)) > sizeof(params->printable_amount)) { + return; + } + strncpy(params->printable_amount, tmp_amount, sizeof(params->printable_amount) - 1); +} diff --git a/app/src/swap/handle_sign_transaction.c b/app/src/swap/handle_sign_transaction.c new file mode 100644 index 00000000..45920a9c --- /dev/null +++ b/app/src/swap/handle_sign_transaction.c @@ -0,0 +1,165 @@ +/******************************************************************************* + * (c) 2016 Ledger + * (c) 2018 - 2023 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#include "bignum.h" +#include "crypto.h" +#include "lib_standard_app/swap_lib_calls.h" +#include "parser.h" +#include "swap.h" +#include "swap_utils.h" +#include "zxformat.h" + +swap_globals_t G_swap_state; + +// Save the BSS address where we will write the return value when finished +static uint8_t *G_swap_sign_return_value_address; + +bool copy_transaction_parameters(create_transaction_parameters_t *sign_transaction_params) { + if (sign_transaction_params == NULL) { + return false; + } + + // First copy parameters to stack, and then to global data. + // We need this "trick" as the input data position can overlap with globals + char destination_address[ADDRESS_MAXSIZE] = {0}; + uint8_t amount[COIN_AMOUNT_MAXSIZE] = {0}; + uint8_t amount_length = {0}; + uint8_t fees[COIN_AMOUNT_MAXSIZE] = {0}; + uint8_t fees_length = {0}; + char memo[MEMO_MAXSIZE] = {0}; + + // Check and copy destination address + if ((destination_address[sizeof(destination_address) - 1] != '\0') || (sign_transaction_params->amount_length > COIN_AMOUNT_MAXSIZE) || + (sign_transaction_params->fee_amount_length > COIN_AMOUNT_MAXSIZE)) { + return false; + } + strncpy(destination_address, sign_transaction_params->destination_address, sizeof(destination_address)); + + // Check and copy memo + if(strlen(sign_transaction_params->destination_address_extra_id) >= sizeof(G_swap_state.memo)) { + return false; + } + strncpy(memo, sign_transaction_params->destination_address_extra_id, sizeof(G_swap_state.memo)); + + // Check and copy amount + memcpy(amount, sign_transaction_params->amount, sign_transaction_params->amount_length); + amount_length = sign_transaction_params->amount_length; + + // Check and copy fees + memcpy(fees, sign_transaction_params->fee_amount, sign_transaction_params->fee_amount_length); + fees_length = sign_transaction_params->fee_amount_length; + + // Full reset the global variables + os_explicit_zero_BSS_segment(); + + // Keep the address at which we'll reply the signing status + G_swap_sign_return_value_address = &sign_transaction_params->result; + + // Commit the values read from exchange to the clean global space + G_swap_state.amount_length = amount_length; + memcpy(G_swap_state.amount, amount, sizeof(amount)); + G_swap_state.fees_length = fees_length; + memcpy(G_swap_state.fees, fees, sizeof(G_swap_state.fees)); + memcpy(G_swap_state.destination_address, destination_address, sizeof(G_swap_state.destination_address)); + memcpy(G_swap_state.memo, memo, sizeof(G_swap_state.memo)); + + return true; +} + +// Ensure the received transaction matches what was validated in the Exchange app UI +// at this point, transaction was parsed by the app, so we need to compare what we parsed with what is saved in the global state +parser_error_t check_swap_conditions(parser_context_t *ctx_parsed_tx) { + parser_error_t err = parser_unexpected_error; + if (ctx_parsed_tx == NULL) { + return err; + } + + uint8_t displayIdx = 0; + uint8_t pageIdx = 0; + uint8_t pageCount = 0; + char tmpKey[20] = {0}; + char tmpValue[65] = {0}; + + // Cosmos App in normal mode requires that chain id is the default one. If not, it will print expert mode fields + // this means if we reach this point and no chain_id is printed, chain_id must be the default one + const char *default_chain_id = "cosmoshub-4"; + CHECK_PARSER_ERR(parser_getItem(ctx_parsed_tx, displayIdx, tmpKey, sizeof(tmpKey), tmpValue, sizeof(tmpValue), pageIdx, &pageCount)) + + // Check if chain_id is printed, expert fields + if (strcmp(tmpKey, "Chain ID") == 0) { + // For now allow only default chain id + if (strcmp(tmpValue, default_chain_id) != 0) { + ZEMU_LOGF(200, "Wrong Chain Id. ('%s', should be : '%s').\n", tmpValue, default_chain_id); + return parser_unexpected_error; + } + displayIdx += 5; // skip account_number, sequence, source_address, source_coins + } else { + displayIdx += 2; // skipsource_address, source_coins + } + + // Check destination address + CHECK_PARSER_ERR(parser_getItem(ctx_parsed_tx, displayIdx, tmpKey, sizeof(tmpKey), tmpValue, sizeof(tmpValue), pageIdx, &pageCount)) + if (strcmp(tmpKey, "Dest Address") != 0 || strcmp(tmpValue, G_swap_state.destination_address) != 0) { + ZEMU_LOGF(200, "Wrong swap tx destination address ('%s', should be : '%s').\n", tmpValue, G_swap_state.destination_address); + return parser_unexpected_error; + } + + // Check destination coins + char tmp_amount[100] = {0}; + zxerr_t zxerr = bytesAmountToStringBalance(G_swap_state.amount, G_swap_state.amount_length, tmp_amount, sizeof(tmp_amount)); + if (zxerr != zxerr_ok) { + return parser_unexpected_error; + } + + displayIdx += 1; + CHECK_PARSER_ERR(parser_getItem(ctx_parsed_tx, displayIdx, tmpKey, sizeof(tmpKey), tmpValue, sizeof(tmpValue), pageIdx, &pageCount)) + if (strcmp(tmpKey, "Dest Coins") != 0 || strcmp(tmp_amount, tmpValue) != 0) { + ZEMU_LOGF(200, "Wrong swap tx destination coins ('%s', should be : '%s').\n", tmpValue, tmp_amount); + return parser_unexpected_error; + } + + // Check if memo is present + displayIdx += 1; + CHECK_PARSER_ERR(parser_getItem(ctx_parsed_tx, displayIdx, tmpKey, sizeof(tmpKey), tmpValue, sizeof(tmpValue), pageIdx, &pageCount)) + if (strcmp(tmpKey, "Memo") == 0) { + if(strcmp(tmpValue, G_swap_state.memo) != 0) { + ZEMU_LOGF(200, "Wrong swap tx memo ('%s', should be : '%s').\n", tmpValue, G_swap_state.memo); + return parser_unexpected_error; + } + + // Prepare for fees + displayIdx += 1; + CHECK_PARSER_ERR(parser_getItem(ctx_parsed_tx, displayIdx, tmpKey, sizeof(tmpKey), tmpValue, sizeof(tmpValue), pageIdx, &pageCount)) + } + + //Check fees + zxerr = bytesAmountToStringBalance(G_swap_state.fees, G_swap_state.fees_length, tmp_amount, sizeof(tmp_amount)); + if (zxerr != zxerr_ok) { + return parser_unexpected_error; + } + + if (strcmp(tmpKey, "Fee") != 0 || strcmp(tmp_amount, tmpValue) != 0) { + ZEMU_LOGF(200, "Wrong swap tx fees ('%s', should be : '%s').\n", tmpValue, tmp_amount); + return parser_unexpected_error; + } + + return parser_ok; +} + +void __attribute__((noreturn)) finalize_exchange_sign_transaction(bool is_success) { + *G_swap_sign_return_value_address = is_success; + os_lib_end(); +} diff --git a/app/src/swap/swap.h b/app/src/swap/swap.h new file mode 100644 index 00000000..23df1259 --- /dev/null +++ b/app/src/swap/swap.h @@ -0,0 +1,48 @@ +/******************************************************************************* + * (c) 2016 Ledger + * (c) 2018 - 2023 Zondax AG + * + * 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 "lib_standard_app/swap_lib_calls.h" +#include "parser_common.h" +#include "stdbool.h" +#include "stdint.h" +#include "zxerror.h" +#include "parser_txdef.h" +#include "parser.h" + +#define ADDRESS_MAXSIZE 50 +#define MEMO_MAXSIZE 50 +typedef struct { + uint8_t amount[COIN_AMOUNT_MAXSIZE]; + uint8_t amount_length; + uint8_t fees[COIN_AMOUNT_MAXSIZE]; + uint8_t fees_length; + char destination_address[ADDRESS_MAXSIZE]; + /* Is swap mode */ + uint8_t called_from_swap; + uint8_t should_exit; + char memo[MEMO_MAXSIZE]; +} swap_globals_t; + +extern swap_globals_t G_swap_state; + +// Handler for swap features +parser_error_t check_swap_conditions(parser_context_t *ctx_parsed_tx); +void handle_check_address(check_address_parameters_t *params); +void handle_get_printable_amount(get_printable_amount_parameters_t *params); +bool copy_transaction_parameters(create_transaction_parameters_t *sign_transaction_params); +void __attribute__((noreturn)) finalize_exchange_sign_transaction(bool is_success); diff --git a/app/src/swap/swap_utils.c b/app/src/swap/swap_utils.c new file mode 100644 index 00000000..9c80d168 --- /dev/null +++ b/app/src/swap/swap_utils.c @@ -0,0 +1,57 @@ +/******************************************************************************* + * (c) 2016 Ledger + * (c) 2018 - 2023 Zondax AG + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ +#include "bignum.h" +#include "crypto.h" +#include "lib_standard_app/swap_lib_calls.h" +#include "swap.h" +#include "zxformat.h" + +#define COSMOS_COIN_AMOUNT_DECIMAL_PLACES 6 +#define COSMOS_COIN_TICKER " ATOM" +//////////////////////////////////////////////////////////////// + +zxerr_t bytesAmountToStringBalance(uint8_t *amount, uint8_t amount_len, char *out, uint8_t out_len) { + uint8_t tmpBuf[COIN_AMOUNT_MAXSIZE] = {0}; + + bignumBigEndian_to_bcd(tmpBuf, sizeof(tmpBuf), amount, amount_len); + bignumBigEndian_bcdprint(out, out_len, tmpBuf, sizeof(tmpBuf)); + + // Format number. + if (!intstr_to_fpstr_inplace(out, out_len, COSMOS_COIN_AMOUNT_DECIMAL_PLACES)) { + return zxerr_encoding_failed; + } + + // Add ticker prefix. + CHECK_ZXERR(z_str3join(out, out_len, "", COSMOS_COIN_TICKER)) + + // Trim trailing zeros + number_inplace_trimming(out, 1); + + return zxerr_ok; +} + +zxerr_t readU32BE(uint8_t *input, uint32_t *output) { + if (input == NULL || output == NULL) { + return zxerr_no_data; + } + + *output = 0; + for (uint8_t i = 0; i < 4; i++) { + *output += (uint32_t) * (input + i) << (32 - (8 * (i + 1))); + } + return zxerr_ok; +} diff --git a/app/src/swap/swap_utils.h b/app/src/swap/swap_utils.h new file mode 100644 index 00000000..fb6d2df6 --- /dev/null +++ b/app/src/swap/swap_utils.h @@ -0,0 +1,24 @@ +/******************************************************************************* + * (c) 2018 - 2024 Zondax AG + * + * 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 "stdbool.h" +#include "stdint.h" +#include "zxerror.h" + +// Helper functions for swap handlers +zxerr_t bytesAmountToStringBalance(uint8_t *amount, uint8_t amount_len, char *out, uint8_t out_len); +zxerr_t readU32BE(uint8_t *input, uint32_t *output); diff --git a/deps/ledger-zxlib b/deps/ledger-zxlib index 01a7971f..fec0d14a 160000 --- a/deps/ledger-zxlib +++ b/deps/ledger-zxlib @@ -1 +1 @@ -Subproject commit 01a7971f97792344c3f97a1034cba4d258b1ca47 +Subproject commit fec0d14a886c9ce711867022d1eae52e95cdc19b diff --git a/tests_zemu/package.json b/tests_zemu/package.json index 95283c57..f75600c7 100644 --- a/tests_zemu/package.json +++ b/tests_zemu/package.json @@ -19,27 +19,27 @@ }, "dependencies": { "@zondax/ledger-cosmos-js": "^3.0.3", - "@zondax/zemu": "^0.52.0" + "@zondax/zemu": "^0.53.0" }, "devDependencies": { "@types/jest": "^29.5.12", "@types/ledgerhq__hw-transport": "^4.21.8", - "@typescript-eslint/eslint-plugin": "^8.16.0", - "@typescript-eslint/parser": "^8.16.0", + "@typescript-eslint/eslint-plugin": "^8.18.1", + "@typescript-eslint/parser": "^8.18.1", "bech32": "^2.0.0", "blakejs": "^1.1.1", "crypto-js": "4.2.0", - "eslint": "^9.15.0", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", + "eslint-plugin-jest": "^28.10.0", "eslint-plugin-prettier": "^5.2.1", "jest": "29.7.0", "jest-serial-runner": "^1.1.0", "js-sha3": "0.9.3", "jssha": "^3.2.0", "keccak256": "^1.0.6", - "prettier": "^3.4.1", + "prettier": "^3.4.2", "secp256k1": "^5.0.0", "ts-jest": "^29.2.3", "ts-node": "^10.9.2", diff --git a/tests_zemu/snapshots/fl-mainmenu/00004.png b/tests_zemu/snapshots/fl-mainmenu/00004.png index 399486e1..2e16e816 100644 Binary files a/tests_zemu/snapshots/fl-mainmenu/00004.png and b/tests_zemu/snapshots/fl-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/s-mainmenu/00004.png b/tests_zemu/snapshots/s-mainmenu/00004.png index df1adf68..f8eaa3ab 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00004.png and b/tests_zemu/snapshots/s-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/s-mainmenu/00010.png b/tests_zemu/snapshots/s-mainmenu/00010.png index df1adf68..f8eaa3ab 100644 Binary files a/tests_zemu/snapshots/s-mainmenu/00010.png and b/tests_zemu/snapshots/s-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/sp-govDeposit/00004.png b/tests_zemu/snapshots/sp-govDeposit/00004.png index 6b223738..22fd2237 100644 Binary files a/tests_zemu/snapshots/sp-govDeposit/00004.png and b/tests_zemu/snapshots/sp-govDeposit/00004.png differ diff --git a/tests_zemu/snapshots/sp-govDeposit/00006.png b/tests_zemu/snapshots/sp-govDeposit/00006.png index 70d09100..96cefc83 100644 Binary files a/tests_zemu/snapshots/sp-govDeposit/00006.png and b/tests_zemu/snapshots/sp-govDeposit/00006.png differ diff --git a/tests_zemu/snapshots/sp-govDeposit/00008.png b/tests_zemu/snapshots/sp-govDeposit/00008.png index d8fcf1cc..9d32864f 100644 Binary files a/tests_zemu/snapshots/sp-govDeposit/00008.png and b/tests_zemu/snapshots/sp-govDeposit/00008.png differ diff --git a/tests_zemu/snapshots/sp-govDeposit/00012.png b/tests_zemu/snapshots/sp-govDeposit/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-govDeposit/00012.png and b/tests_zemu/snapshots/sp-govDeposit/00012.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00002.png b/tests_zemu/snapshots/sp-ibc_denoms/00002.png index 1009a3c2..f96c64cd 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00002.png and b/tests_zemu/snapshots/sp-ibc_denoms/00002.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00003.png b/tests_zemu/snapshots/sp-ibc_denoms/00003.png index da1b3f2b..9e998d66 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00003.png and b/tests_zemu/snapshots/sp-ibc_denoms/00003.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00004.png b/tests_zemu/snapshots/sp-ibc_denoms/00004.png index 58eed79e..19374588 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00004.png and b/tests_zemu/snapshots/sp-ibc_denoms/00004.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00005.png b/tests_zemu/snapshots/sp-ibc_denoms/00005.png index b5ec39f8..e234dbb0 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00005.png and b/tests_zemu/snapshots/sp-ibc_denoms/00005.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00006.png b/tests_zemu/snapshots/sp-ibc_denoms/00006.png index 5d38a7e5..a1980245 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00006.png and b/tests_zemu/snapshots/sp-ibc_denoms/00006.png differ diff --git a/tests_zemu/snapshots/sp-ibc_denoms/00010.png b/tests_zemu/snapshots/sp-ibc_denoms/00010.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-ibc_denoms/00010.png and b/tests_zemu/snapshots/sp-ibc_denoms/00010.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00000.png b/tests_zemu/snapshots/sp-mainmenu/00000.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00000.png and b/tests_zemu/snapshots/sp-mainmenu/00000.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00001.png b/tests_zemu/snapshots/sp-mainmenu/00001.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00001.png and b/tests_zemu/snapshots/sp-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00002.png b/tests_zemu/snapshots/sp-mainmenu/00002.png index f7921677..7e236da6 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00002.png and b/tests_zemu/snapshots/sp-mainmenu/00002.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00003.png b/tests_zemu/snapshots/sp-mainmenu/00003.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00003.png and b/tests_zemu/snapshots/sp-mainmenu/00003.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00004.png b/tests_zemu/snapshots/sp-mainmenu/00004.png index 4092d123..4010934e 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00004.png and b/tests_zemu/snapshots/sp-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00005.png b/tests_zemu/snapshots/sp-mainmenu/00005.png index 1adff7ee..b6232856 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00005.png and b/tests_zemu/snapshots/sp-mainmenu/00005.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00009.png b/tests_zemu/snapshots/sp-mainmenu/00009.png index 1adff7ee..b6232856 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00009.png and b/tests_zemu/snapshots/sp-mainmenu/00009.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00010.png b/tests_zemu/snapshots/sp-mainmenu/00010.png index 4092d123..4010934e 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00010.png and b/tests_zemu/snapshots/sp-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00011.png b/tests_zemu/snapshots/sp-mainmenu/00011.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00011.png and b/tests_zemu/snapshots/sp-mainmenu/00011.png differ diff --git a/tests_zemu/snapshots/sp-mainmenu/00012.png b/tests_zemu/snapshots/sp-mainmenu/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-mainmenu/00012.png and b/tests_zemu/snapshots/sp-mainmenu/00012.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00004.png b/tests_zemu/snapshots/sp-msgMultiSend/00004.png index 0f7c39b4..e3586731 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00004.png and b/tests_zemu/snapshots/sp-msgMultiSend/00004.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00005.png b/tests_zemu/snapshots/sp-msgMultiSend/00005.png index 0ab9cc3d..cf283ee4 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00005.png and b/tests_zemu/snapshots/sp-msgMultiSend/00005.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00007.png b/tests_zemu/snapshots/sp-msgMultiSend/00007.png index 50456f70..f1418b66 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00007.png and b/tests_zemu/snapshots/sp-msgMultiSend/00007.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00008.png b/tests_zemu/snapshots/sp-msgMultiSend/00008.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00008.png and b/tests_zemu/snapshots/sp-msgMultiSend/00008.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00009.png b/tests_zemu/snapshots/sp-msgMultiSend/00009.png index 1271607c..6425843f 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00009.png and b/tests_zemu/snapshots/sp-msgMultiSend/00009.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00010.png b/tests_zemu/snapshots/sp-msgMultiSend/00010.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00010.png and b/tests_zemu/snapshots/sp-msgMultiSend/00010.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00011.png b/tests_zemu/snapshots/sp-msgMultiSend/00011.png index 328b356c..7279040d 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00011.png and b/tests_zemu/snapshots/sp-msgMultiSend/00011.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00012.png b/tests_zemu/snapshots/sp-msgMultiSend/00012.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00012.png and b/tests_zemu/snapshots/sp-msgMultiSend/00012.png differ diff --git a/tests_zemu/snapshots/sp-msgMultiSend/00016.png b/tests_zemu/snapshots/sp-msgMultiSend/00016.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-msgMultiSend/00016.png and b/tests_zemu/snapshots/sp-msgMultiSend/00016.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00004.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00004.png index 9ae6d13c..7d16ae54 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00004.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00004.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00005.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00005.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00005.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00005.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00006.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00006.png index db3ad2c1..4dc44ae4 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00006.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00006.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00007.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00007.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00007.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00007.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00008.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00008.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00008.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00008.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00009.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00009.png index 7a814c79..21583d12 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00009.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00009.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00013.png b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00013.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00013.png and b/tests_zemu/snapshots/sp-setWithdrawAddress-eth/00013.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00004.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00004.png index 9ae6d13c..7d16ae54 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00004.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00004.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00005.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00005.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00005.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00005.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00006.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00006.png index db3ad2c1..4dc44ae4 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00006.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00006.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00007.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00007.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00007.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00007.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00008.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00008.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00008.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00008.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00009.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00009.png index 7a814c79..21583d12 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00009.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00009.png differ diff --git a/tests_zemu/snapshots/sp-setWithdrawAddress/00013.png b/tests_zemu/snapshots/sp-setWithdrawAddress/00013.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-setWithdrawAddress/00013.png and b/tests_zemu/snapshots/sp-setWithdrawAddress/00013.png differ diff --git a/tests_zemu/snapshots/sp-show_address/00001.png b/tests_zemu/snapshots/sp-show_address/00001.png index 79a82065..4a1aa7e1 100644 Binary files a/tests_zemu/snapshots/sp-show_address/00001.png and b/tests_zemu/snapshots/sp-show_address/00001.png differ diff --git a/tests_zemu/snapshots/sp-show_address/00003.png b/tests_zemu/snapshots/sp-show_address/00003.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-show_address/00003.png and b/tests_zemu/snapshots/sp-show_address/00003.png differ diff --git a/tests_zemu/snapshots/sp-show_address_huge/00004.png b/tests_zemu/snapshots/sp-show_address_huge/00004.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-show_address_huge/00004.png and b/tests_zemu/snapshots/sp-show_address_huge/00004.png differ diff --git a/tests_zemu/snapshots/sp-show_eth_address/00001.png b/tests_zemu/snapshots/sp-show_eth_address/00001.png index 35024425..84ed31e4 100644 Binary files a/tests_zemu/snapshots/sp-show_eth_address/00001.png and b/tests_zemu/snapshots/sp-show_eth_address/00001.png differ diff --git a/tests_zemu/snapshots/sp-show_eth_address/00004.png b/tests_zemu/snapshots/sp-show_eth_address/00004.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-show_eth_address/00004.png and b/tests_zemu/snapshots/sp-show_eth_address/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic/00001.png b/tests_zemu/snapshots/sp-sign_basic/00001.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic/00001.png and b/tests_zemu/snapshots/sp-sign_basic/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic/00002.png b/tests_zemu/snapshots/sp-sign_basic/00002.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic/00002.png and b/tests_zemu/snapshots/sp-sign_basic/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic/00003.png b/tests_zemu/snapshots/sp-sign_basic/00003.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic/00003.png and b/tests_zemu/snapshots/sp-sign_basic/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic/00004.png b/tests_zemu/snapshots/sp-sign_basic/00004.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic/00004.png and b/tests_zemu/snapshots/sp-sign_basic/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic/00007.png b/tests_zemu/snapshots/sp-sign_basic/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic/00007.png and b/tests_zemu/snapshots/sp-sign_basic/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic2/00001.png b/tests_zemu/snapshots/sp-sign_basic2/00001.png index ee857c17..cb522482 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic2/00001.png and b/tests_zemu/snapshots/sp-sign_basic2/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic2/00003.png b/tests_zemu/snapshots/sp-sign_basic2/00003.png index c9e22f2d..4e7f1c5b 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic2/00003.png and b/tests_zemu/snapshots/sp-sign_basic2/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic2/00004.png b/tests_zemu/snapshots/sp-sign_basic2/00004.png index 262628b3..0e82ee25 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic2/00004.png and b/tests_zemu/snapshots/sp-sign_basic2/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic2/00007.png b/tests_zemu/snapshots/sp-sign_basic2/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic2/00007.png and b/tests_zemu/snapshots/sp-sign_basic2/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00004.png b/tests_zemu/snapshots/sp-sign_basic_eth/00004.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00004.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00005.png b/tests_zemu/snapshots/sp-sign_basic_eth/00005.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00005.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00005.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00006.png b/tests_zemu/snapshots/sp-sign_basic_eth/00006.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00006.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00006.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00007.png b/tests_zemu/snapshots/sp-sign_basic_eth/00007.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00007.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00007.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00008.png b/tests_zemu/snapshots/sp-sign_basic_eth/00008.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00008.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00008.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth/00012.png b/tests_zemu/snapshots/sp-sign_basic_eth/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth/00012.png and b/tests_zemu/snapshots/sp-sign_basic_eth/00012.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth_warning/00000.png b/tests_zemu/snapshots/sp-sign_basic_eth_warning/00000.png index 50d75f83..53e74dc2 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth_warning/00000.png and b/tests_zemu/snapshots/sp-sign_basic_eth_warning/00000.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_eth_warning/00002.png b/tests_zemu/snapshots/sp-sign_basic_eth_warning/00002.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_eth_warning/00002.png and b/tests_zemu/snapshots/sp-sign_basic_eth_warning/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00001.png b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00001.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00001.png and b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00001.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00002.png b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00002.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00002.png and b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00002.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00003.png b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00003.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00003.png and b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00003.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00004.png b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00004.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00004.png and b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00004.png differ diff --git a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00007.png b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-sign_basic_extra_fields/00007.png and b/tests_zemu/snapshots/sp-sign_basic_extra_fields/00007.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic/00002.png b/tests_zemu/snapshots/sp-textual-sign_basic/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic/00002.png and b/tests_zemu/snapshots/sp-textual-sign_basic/00002.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic/00004.png b/tests_zemu/snapshots/sp-textual-sign_basic/00004.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic/00004.png and b/tests_zemu/snapshots/sp-textual-sign_basic/00004.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic/00006.png b/tests_zemu/snapshots/sp-textual-sign_basic/00006.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic/00006.png and b/tests_zemu/snapshots/sp-textual-sign_basic/00006.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic/00008.png b/tests_zemu/snapshots/sp-textual-sign_basic/00008.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic/00008.png and b/tests_zemu/snapshots/sp-textual-sign_basic/00008.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic/00014.png b/tests_zemu/snapshots/sp-textual-sign_basic/00014.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic/00014.png and b/tests_zemu/snapshots/sp-textual-sign_basic/00014.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00002.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00002.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00002.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00005.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00005.png index b384c6dc..586628a1 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00005.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00005.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00006.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00006.png index 115b7ce4..41277be7 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00006.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00006.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00007.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00007.png index ec1db5ad..dd28519e 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00007.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00007.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00008.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00008.png index 8de335a2..ea263a78 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00008.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00008.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00009.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00009.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00009.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00009.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00011.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00011.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00011.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00011.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00013.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00013.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00013.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00013.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00018.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00018.png index a73d7695..46f31cef 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00018.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00018.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00019.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00019.png index dd0bbb34..b2baf80e 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00019.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00019.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00020.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00020.png index 9da0fe80..ecccd305 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00020.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00020.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00022.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00022.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth/00022.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth/00022.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00000.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00000.png index 50d75f83..53e74dc2 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00000.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00000.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00002.png b/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00002.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00002.png and b/tests_zemu/snapshots/sp-textual-sign_basic_eth_warning/00002.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00002.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00002.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00002.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00005.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00005.png index b384c6dc..586628a1 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00005.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00005.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00006.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00006.png index 115b7ce4..41277be7 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00006.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00006.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00007.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00007.png index ec1db5ad..dd28519e 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00007.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00007.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00008.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00008.png index 8de335a2..ea263a78 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00008.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00008.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00009.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00009.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00009.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00009.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00011.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00011.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00011.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00011.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00013.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00013.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00013.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00013.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00018.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00018.png index a73d7695..46f31cef 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00018.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00018.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00019.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00019.png index dd0bbb34..b2baf80e 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00019.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00019.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00020.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00020.png index 9da0fe80..ecccd305 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00020.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00020.png differ diff --git a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00022.png b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00022.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/sp-textual-sign_basic_expert/00022.png and b/tests_zemu/snapshots/sp-textual-sign_basic_expert/00022.png differ diff --git a/tests_zemu/snapshots/st-mainmenu/00004.png b/tests_zemu/snapshots/st-mainmenu/00004.png index 8620e024..31a583fb 100644 Binary files a/tests_zemu/snapshots/st-mainmenu/00004.png and b/tests_zemu/snapshots/st-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/x-govDeposit/00004.png b/tests_zemu/snapshots/x-govDeposit/00004.png index 6b223738..22fd2237 100644 Binary files a/tests_zemu/snapshots/x-govDeposit/00004.png and b/tests_zemu/snapshots/x-govDeposit/00004.png differ diff --git a/tests_zemu/snapshots/x-govDeposit/00006.png b/tests_zemu/snapshots/x-govDeposit/00006.png index 70d09100..96cefc83 100644 Binary files a/tests_zemu/snapshots/x-govDeposit/00006.png and b/tests_zemu/snapshots/x-govDeposit/00006.png differ diff --git a/tests_zemu/snapshots/x-govDeposit/00008.png b/tests_zemu/snapshots/x-govDeposit/00008.png index d8fcf1cc..9d32864f 100644 Binary files a/tests_zemu/snapshots/x-govDeposit/00008.png and b/tests_zemu/snapshots/x-govDeposit/00008.png differ diff --git a/tests_zemu/snapshots/x-govDeposit/00012.png b/tests_zemu/snapshots/x-govDeposit/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-govDeposit/00012.png and b/tests_zemu/snapshots/x-govDeposit/00012.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00002.png b/tests_zemu/snapshots/x-ibc_denoms/00002.png index 1009a3c2..f96c64cd 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00002.png and b/tests_zemu/snapshots/x-ibc_denoms/00002.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00003.png b/tests_zemu/snapshots/x-ibc_denoms/00003.png index da1b3f2b..9e998d66 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00003.png and b/tests_zemu/snapshots/x-ibc_denoms/00003.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00004.png b/tests_zemu/snapshots/x-ibc_denoms/00004.png index 58eed79e..19374588 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00004.png and b/tests_zemu/snapshots/x-ibc_denoms/00004.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00005.png b/tests_zemu/snapshots/x-ibc_denoms/00005.png index b5ec39f8..e234dbb0 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00005.png and b/tests_zemu/snapshots/x-ibc_denoms/00005.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00006.png b/tests_zemu/snapshots/x-ibc_denoms/00006.png index 5d38a7e5..a1980245 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00006.png and b/tests_zemu/snapshots/x-ibc_denoms/00006.png differ diff --git a/tests_zemu/snapshots/x-ibc_denoms/00010.png b/tests_zemu/snapshots/x-ibc_denoms/00010.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-ibc_denoms/00010.png and b/tests_zemu/snapshots/x-ibc_denoms/00010.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00000.png b/tests_zemu/snapshots/x-mainmenu/00000.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00000.png and b/tests_zemu/snapshots/x-mainmenu/00000.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00001.png b/tests_zemu/snapshots/x-mainmenu/00001.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00001.png and b/tests_zemu/snapshots/x-mainmenu/00001.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00002.png b/tests_zemu/snapshots/x-mainmenu/00002.png index f7921677..7e236da6 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00002.png and b/tests_zemu/snapshots/x-mainmenu/00002.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00003.png b/tests_zemu/snapshots/x-mainmenu/00003.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00003.png and b/tests_zemu/snapshots/x-mainmenu/00003.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00004.png b/tests_zemu/snapshots/x-mainmenu/00004.png index 4092d123..4010934e 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00004.png and b/tests_zemu/snapshots/x-mainmenu/00004.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00005.png b/tests_zemu/snapshots/x-mainmenu/00005.png index 1adff7ee..b6232856 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00005.png and b/tests_zemu/snapshots/x-mainmenu/00005.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00009.png b/tests_zemu/snapshots/x-mainmenu/00009.png index 1adff7ee..b6232856 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00009.png and b/tests_zemu/snapshots/x-mainmenu/00009.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00010.png b/tests_zemu/snapshots/x-mainmenu/00010.png index 4092d123..4010934e 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00010.png and b/tests_zemu/snapshots/x-mainmenu/00010.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00011.png b/tests_zemu/snapshots/x-mainmenu/00011.png index 8472e5d9..e10e0049 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00011.png and b/tests_zemu/snapshots/x-mainmenu/00011.png differ diff --git a/tests_zemu/snapshots/x-mainmenu/00012.png b/tests_zemu/snapshots/x-mainmenu/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-mainmenu/00012.png and b/tests_zemu/snapshots/x-mainmenu/00012.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00004.png b/tests_zemu/snapshots/x-msgMultiSend/00004.png index 0f7c39b4..e3586731 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00004.png and b/tests_zemu/snapshots/x-msgMultiSend/00004.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00005.png b/tests_zemu/snapshots/x-msgMultiSend/00005.png index 0ab9cc3d..cf283ee4 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00005.png and b/tests_zemu/snapshots/x-msgMultiSend/00005.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00007.png b/tests_zemu/snapshots/x-msgMultiSend/00007.png index 50456f70..f1418b66 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00007.png and b/tests_zemu/snapshots/x-msgMultiSend/00007.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00008.png b/tests_zemu/snapshots/x-msgMultiSend/00008.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00008.png and b/tests_zemu/snapshots/x-msgMultiSend/00008.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00009.png b/tests_zemu/snapshots/x-msgMultiSend/00009.png index 1271607c..6425843f 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00009.png and b/tests_zemu/snapshots/x-msgMultiSend/00009.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00010.png b/tests_zemu/snapshots/x-msgMultiSend/00010.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00010.png and b/tests_zemu/snapshots/x-msgMultiSend/00010.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00011.png b/tests_zemu/snapshots/x-msgMultiSend/00011.png index 328b356c..7279040d 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00011.png and b/tests_zemu/snapshots/x-msgMultiSend/00011.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00012.png b/tests_zemu/snapshots/x-msgMultiSend/00012.png index d4deb7e0..e4149aaf 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00012.png and b/tests_zemu/snapshots/x-msgMultiSend/00012.png differ diff --git a/tests_zemu/snapshots/x-msgMultiSend/00016.png b/tests_zemu/snapshots/x-msgMultiSend/00016.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-msgMultiSend/00016.png and b/tests_zemu/snapshots/x-msgMultiSend/00016.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00004.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00004.png index 9ae6d13c..7d16ae54 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00004.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00004.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00005.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00005.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00005.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00005.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00006.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00006.png index db3ad2c1..4dc44ae4 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00006.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00006.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00007.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00007.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00007.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00007.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00008.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00008.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00008.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00008.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00009.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00009.png index 7a814c79..21583d12 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00009.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00009.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00013.png b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00013.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress-eth/00013.png and b/tests_zemu/snapshots/x-setWithdrawAddress-eth/00013.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00004.png b/tests_zemu/snapshots/x-setWithdrawAddress/00004.png index 9ae6d13c..7d16ae54 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00004.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00004.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00005.png b/tests_zemu/snapshots/x-setWithdrawAddress/00005.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00005.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00005.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00006.png b/tests_zemu/snapshots/x-setWithdrawAddress/00006.png index db3ad2c1..4dc44ae4 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00006.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00006.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00007.png b/tests_zemu/snapshots/x-setWithdrawAddress/00007.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00007.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00007.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00008.png b/tests_zemu/snapshots/x-setWithdrawAddress/00008.png index ddde590b..8c729777 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00008.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00008.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00009.png b/tests_zemu/snapshots/x-setWithdrawAddress/00009.png index 7a814c79..21583d12 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00009.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00009.png differ diff --git a/tests_zemu/snapshots/x-setWithdrawAddress/00013.png b/tests_zemu/snapshots/x-setWithdrawAddress/00013.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-setWithdrawAddress/00013.png and b/tests_zemu/snapshots/x-setWithdrawAddress/00013.png differ diff --git a/tests_zemu/snapshots/x-show_address/00001.png b/tests_zemu/snapshots/x-show_address/00001.png index 79a82065..4a1aa7e1 100644 Binary files a/tests_zemu/snapshots/x-show_address/00001.png and b/tests_zemu/snapshots/x-show_address/00001.png differ diff --git a/tests_zemu/snapshots/x-show_address/00003.png b/tests_zemu/snapshots/x-show_address/00003.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-show_address/00003.png and b/tests_zemu/snapshots/x-show_address/00003.png differ diff --git a/tests_zemu/snapshots/x-show_address_huge/00004.png b/tests_zemu/snapshots/x-show_address_huge/00004.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-show_address_huge/00004.png and b/tests_zemu/snapshots/x-show_address_huge/00004.png differ diff --git a/tests_zemu/snapshots/x-show_eth_address/00001.png b/tests_zemu/snapshots/x-show_eth_address/00001.png index 35024425..84ed31e4 100644 Binary files a/tests_zemu/snapshots/x-show_eth_address/00001.png and b/tests_zemu/snapshots/x-show_eth_address/00001.png differ diff --git a/tests_zemu/snapshots/x-show_eth_address/00004.png b/tests_zemu/snapshots/x-show_eth_address/00004.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-show_eth_address/00004.png and b/tests_zemu/snapshots/x-show_eth_address/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_basic/00001.png b/tests_zemu/snapshots/x-sign_basic/00001.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/x-sign_basic/00001.png and b/tests_zemu/snapshots/x-sign_basic/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_basic/00002.png b/tests_zemu/snapshots/x-sign_basic/00002.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/x-sign_basic/00002.png and b/tests_zemu/snapshots/x-sign_basic/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_basic/00003.png b/tests_zemu/snapshots/x-sign_basic/00003.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/x-sign_basic/00003.png and b/tests_zemu/snapshots/x-sign_basic/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_basic/00004.png b/tests_zemu/snapshots/x-sign_basic/00004.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/x-sign_basic/00004.png and b/tests_zemu/snapshots/x-sign_basic/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_basic/00007.png b/tests_zemu/snapshots/x-sign_basic/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-sign_basic/00007.png and b/tests_zemu/snapshots/x-sign_basic/00007.png differ diff --git a/tests_zemu/snapshots/x-sign_basic2/00001.png b/tests_zemu/snapshots/x-sign_basic2/00001.png index ee857c17..cb522482 100644 Binary files a/tests_zemu/snapshots/x-sign_basic2/00001.png and b/tests_zemu/snapshots/x-sign_basic2/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_basic2/00003.png b/tests_zemu/snapshots/x-sign_basic2/00003.png index c9e22f2d..4e7f1c5b 100644 Binary files a/tests_zemu/snapshots/x-sign_basic2/00003.png and b/tests_zemu/snapshots/x-sign_basic2/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_basic2/00004.png b/tests_zemu/snapshots/x-sign_basic2/00004.png index 262628b3..0e82ee25 100644 Binary files a/tests_zemu/snapshots/x-sign_basic2/00004.png and b/tests_zemu/snapshots/x-sign_basic2/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_basic2/00007.png b/tests_zemu/snapshots/x-sign_basic2/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-sign_basic2/00007.png and b/tests_zemu/snapshots/x-sign_basic2/00007.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00004.png b/tests_zemu/snapshots/x-sign_basic_eth/00004.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00004.png and b/tests_zemu/snapshots/x-sign_basic_eth/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00005.png b/tests_zemu/snapshots/x-sign_basic_eth/00005.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00005.png and b/tests_zemu/snapshots/x-sign_basic_eth/00005.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00006.png b/tests_zemu/snapshots/x-sign_basic_eth/00006.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00006.png and b/tests_zemu/snapshots/x-sign_basic_eth/00006.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00007.png b/tests_zemu/snapshots/x-sign_basic_eth/00007.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00007.png and b/tests_zemu/snapshots/x-sign_basic_eth/00007.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00008.png b/tests_zemu/snapshots/x-sign_basic_eth/00008.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00008.png and b/tests_zemu/snapshots/x-sign_basic_eth/00008.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_eth/00012.png b/tests_zemu/snapshots/x-sign_basic_eth/00012.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_eth/00012.png and b/tests_zemu/snapshots/x-sign_basic_eth/00012.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_extra_fields/00001.png b/tests_zemu/snapshots/x-sign_basic_extra_fields/00001.png index 0f9cfb13..1a12f368 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_extra_fields/00001.png and b/tests_zemu/snapshots/x-sign_basic_extra_fields/00001.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_extra_fields/00002.png b/tests_zemu/snapshots/x-sign_basic_extra_fields/00002.png index 88e2d4c9..d5c15863 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_extra_fields/00002.png and b/tests_zemu/snapshots/x-sign_basic_extra_fields/00002.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_extra_fields/00003.png b/tests_zemu/snapshots/x-sign_basic_extra_fields/00003.png index 5a83f183..b47dabb4 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_extra_fields/00003.png and b/tests_zemu/snapshots/x-sign_basic_extra_fields/00003.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_extra_fields/00004.png b/tests_zemu/snapshots/x-sign_basic_extra_fields/00004.png index 88e82f3d..4e0f2906 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_extra_fields/00004.png and b/tests_zemu/snapshots/x-sign_basic_extra_fields/00004.png differ diff --git a/tests_zemu/snapshots/x-sign_basic_extra_fields/00007.png b/tests_zemu/snapshots/x-sign_basic_extra_fields/00007.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-sign_basic_extra_fields/00007.png and b/tests_zemu/snapshots/x-sign_basic_extra_fields/00007.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic/00002.png b/tests_zemu/snapshots/x-textual-sign_basic/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic/00002.png and b/tests_zemu/snapshots/x-textual-sign_basic/00002.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic/00004.png b/tests_zemu/snapshots/x-textual-sign_basic/00004.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic/00004.png and b/tests_zemu/snapshots/x-textual-sign_basic/00004.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic/00006.png b/tests_zemu/snapshots/x-textual-sign_basic/00006.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic/00006.png and b/tests_zemu/snapshots/x-textual-sign_basic/00006.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic/00008.png b/tests_zemu/snapshots/x-textual-sign_basic/00008.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic/00008.png and b/tests_zemu/snapshots/x-textual-sign_basic/00008.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic/00014.png b/tests_zemu/snapshots/x-textual-sign_basic/00014.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic/00014.png and b/tests_zemu/snapshots/x-textual-sign_basic/00014.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00002.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00002.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00002.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00005.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00005.png index b384c6dc..586628a1 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00005.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00005.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00006.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00006.png index 115b7ce4..41277be7 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00006.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00006.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00007.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00007.png index ec1db5ad..dd28519e 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00007.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00007.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00008.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00008.png index 8de335a2..ea263a78 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00008.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00008.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00009.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00009.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00009.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00009.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00011.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00011.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00011.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00011.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00013.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00013.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00013.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00013.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00018.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00018.png index a73d7695..46f31cef 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00018.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00018.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00019.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00019.png index dd0bbb34..b2baf80e 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00019.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00019.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00020.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00020.png index 9da0fe80..ecccd305 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00020.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00020.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth/00022.png b/tests_zemu/snapshots/x-textual-sign_basic_eth/00022.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth/00022.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth/00022.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00000.png b/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00000.png index 50d75f83..53e74dc2 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00000.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00000.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00002.png b/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00002.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00002.png and b/tests_zemu/snapshots/x-textual-sign_basic_eth_warning/00002.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00002.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00002.png index 3d76db2e..4b37d348 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00002.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00002.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00005.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00005.png index b384c6dc..586628a1 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00005.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00005.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00006.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00006.png index 115b7ce4..41277be7 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00006.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00006.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00007.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00007.png index ec1db5ad..dd28519e 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00007.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00007.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00008.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00008.png index 8de335a2..ea263a78 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00008.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00008.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00009.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00009.png index fcf0fafa..966622a8 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00009.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00009.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00011.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00011.png index 3da6cc6b..9236c111 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00011.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00011.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00013.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00013.png index 057e364b..b7dffacb 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00013.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00013.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00018.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00018.png index a73d7695..46f31cef 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00018.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00018.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00019.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00019.png index dd0bbb34..b2baf80e 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00019.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00019.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00020.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00020.png index 9da0fe80..ecccd305 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00020.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00020.png differ diff --git a/tests_zemu/snapshots/x-textual-sign_basic_expert/00022.png b/tests_zemu/snapshots/x-textual-sign_basic_expert/00022.png index 430a37e8..3da88424 100644 Binary files a/tests_zemu/snapshots/x-textual-sign_basic_expert/00022.png and b/tests_zemu/snapshots/x-textual-sign_basic_expert/00022.png differ